From e61e886b110ffe767addb2bcc2ee3e2a021039ed Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Fri, 10 Jul 2015 15:01:28 +0200 Subject: [PATCH 01/45] 0.14.0 --- README.md | 16 ++++++++++++++-- examples/es5/bechmarks/pi.js | 2 +- examples/es5/common/index.js | 2 +- examples/es5/machine-learning/ann.js | 19 ++++++++++++------- examples/es5/machine-learning/mnist.js | 2 +- .../es5/machine-learning/neuralNetwork.js | 2 +- examples/es6/common/index.js | 6 +++--- examples/es6/machine-learning/ann.js | 7 +++++-- lib/es5/ext.js | 13 ++++++++----- package.json | 2 +- tests/es5/afArrayTests.js | 2 +- tests/es5/createArrayFunctionTests.js | 6 +++--- 12 files changed, 51 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 8c0f899..ebf123d 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,9 @@ var af = require("arrayfire_js")("OpenCL"); var af = require("arrayfire_js")("CUDA"); ``` -### Small Example +## Examples + +### Calculating pi Port of the PI calculator from [ArrayFire documentation](http://www.arrayfire.com/docs/index.htm): @@ -102,9 +104,19 @@ It's included in the [examples folder](https://github.com/arrayfire/arrayfire_js - Node.js 0.12 or above, enter: `node --harmony examples/es6/bechmarks/pi.js` - Node.js below 0.12, enter: `node examples/es5/bechmarks/pi.js` +### Neural Network + +There is an example of a neural network with batch backpropagation trained to learn the famous [MNIST](http://yann.lecun.com/exdb/mnist/) data set. It will run on the fastest device available. + +It's in the [examples folder](https://github.com/arrayfire/arrayfire_js/blob/master/examples/es6/machine-learning/neuralNetwork.js). To run on: + +- io.js, enter: `iojs examples/es6/machine-learning/neuralNetwork.js` +- Node.js 0.12 or above, enter: `node --harmony examples/es6/machine-learning/neuralNetwork.js` +- Node.js below 0.12, enter: `node examples/es5/machine-learning/neuralNetwork.js` + ## API Docs -[In progress ...](http://arrayfire.github.io/arrayfire_js/) We'll try to put it together soon. +[http://arrayfire.github.io/arrayfire_js](http://arrayfire.github.io/arrayfire_js/) ## Wanna Contribute? diff --git a/examples/es5/bechmarks/pi.js b/examples/es5/bechmarks/pi.js index c930373..f34fb7e 100644 --- a/examples/es5/bechmarks/pi.js +++ b/examples/es5/bechmarks/pi.js @@ -42,4 +42,4 @@ var pi = async($traceurRuntime.initGeneratorFunction(function $__0(af, deviceInf }, $__0, this); })); common.runOnAllPlatforms(pi, "pi example"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUNaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztBQS9DN0MsZUFnRDBCLENBQUEsRUFBQyxTQUFTLEFBQUMsQ0FBQyxJQUFHLEdBQUcsQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBaER6Qjs7b0JBQXZCLENBQUEsSUFBRyxLQUFLOzs7O2dCQWlEUSxDQUFBLENBQUMsR0FBRSxFQUFLLFVBQVEsQ0FBQyxFQUFJLGVBQWE7QUFFOUMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFDLE1BQUksRUFBRyxDQUFDOzs7O0FBbkRoQyxlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixPQUE2QixLQUFHLENBQUMsQ0FBQztBQWtEdEMsQ0FwRHVELENBb0R0RCxDQUFDO0FBRUYsS0FBSyxrQkFBa0IsQUFBQyxDQUFDLEVBQUMsQ0FBRyxhQUFXLENBQUMsQ0FBQztBQUMxQyIsImZpbGUiOiJiZWNobWFya3MvcGkuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGNvbW1vbiA9IHJlcXVpcmUoXCIuLi9jb21tb25cIik7XG5cbmNvbnN0IG51bWJlck9mUG9pbnRzID0gMjAwMDAwMDA7XG5cbmxldCBwaSA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgZGV2aWNlSW5mbykge1xuICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgIGNvbnNvbGUubG9nKFwiQ2FsY3VsYXRpbmcgcGkgb24gZGV2aWNlOlxcblwiKTtcbiAgICBjb21tb24ucHJpbnREZXZpY2VJbmZvKGRldmljZUluZm8pO1xuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuXG4gICAgbGV0IHggPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgeSA9IGFmLnJhbmR1KG51bWJlck9mUG9pbnRzLCBhZi5kdHlwZS5mMzIpO1xuICAgIGxldCBkaXN0ID0gYWYuc3FydCh4Lm11bCh4KS5hZGQoeS5tdWwoeSkpKTtcbiAgICBsZXQgbnVtSW5zaWRlID0geWllbGQgYWYuc3VtQXN5bmMoZGlzdC5sdCgxKSk7XG4gICAgbGV0IHBpVmFsID0gKDQuMCAqICBudW1JbnNpZGUpIC8gbnVtYmVyT2ZQb2ludHM7XG5cbiAgICBjb25zb2xlLmxvZyhgUEkgPSAke3BpVmFsfWApO1xufSk7XG5cbmNvbW1vbi5ydW5PbkFsbFBsYXRmb3JtcyhwaSwgXCJwaSBleGFtcGxlXCIpO1xuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUNaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztlQUNuQixDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsSUFBRyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQzs7b0JBaERoRCxDQUFBLElBQUcsS0FBSzs7OztnQkFpRFEsQ0FBQSxDQUFDLEdBQUUsRUFBSyxVQUFRLENBQUMsRUFBSSxlQUFhO0FBRTlDLGdCQUFNLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBQyxNQUFJLEVBQUcsQ0FBQzs7OztBQW5EaEMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFrRHRDLENBcER1RCxDQW9EdEQsQ0FBQztBQUVGLEtBQUssa0JBQWtCLEFBQUMsQ0FBQyxFQUFDLENBQUcsYUFBVyxDQUFDLENBQUM7QUFDMUMiLCJmaWxlIjoiYmVjaG1hcmtzL3BpLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xuXG5jb25zdCBudW1iZXJPZlBvaW50cyA9IDIwMDAwMDAwO1xuXG5sZXQgcGkgPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICBjb25zb2xlLmxvZyhcIkNhbGN1bGF0aW5nIHBpIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGxldCB4ID0gYWYucmFuZHUobnVtYmVyT2ZQb2ludHMsIGFmLmR0eXBlLmYzMik7XG4gICAgbGV0IHkgPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgZGlzdCA9IGFmLnNxcnQoeC5tdWwoeCkuYWRkKHkubXVsKHkpKSk7XG4gICAgbGV0IG51bUluc2lkZSA9IHlpZWxkIGFmLnN1bUFzeW5jKGRpc3QubHQoMSkpO1xuICAgIGxldCBwaVZhbCA9ICg0LjAgKiAgbnVtSW5zaWRlKSAvIG51bWJlck9mUG9pbnRzO1xuXG4gICAgY29uc29sZS5sb2coYFBJID0gJHtwaVZhbH1gKTtcbn0pO1xuXG5jb21tb24ucnVuT25BbGxQbGF0Zm9ybXMocGksIFwicGkgZXhhbXBsZVwiKTtcbiJdfQ== diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index 794a72b..6eb8353 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -287,4 +287,4 @@ module.exports = { runOnBestDevice: runOnBestDevice, printDeviceInfo: printDeviceInfo }; -//# sourceMappingURL=data:application/json;base64,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QUFoQixlQTZFa0IsQ0FBQSxZQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUUsQ0FBQSxDQUFDLENBQUcsRUFBQSxDQUFHLEVBQUEsQ0FBQyxDQTdFdEI7O0FBQXZCLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBUyxVQUFTLENBQUc7QUFDdkMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBydW5PbkJlc3REZXZpY2UgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBsZXQgb3JkZXIgPSBbXCJDVURBXCIsIFwiT3BlbkNMXCIsIFwiQ1BVXCJdO1xuICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nICR7bmFtZX0gb24gYmVzdCBhdmFpbGFibGUgZGV2aWNlLlxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMF0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMF0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF8ocGxhdGZyb21zKS5jb250YWlucyhvcmRlclsxXSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHJ1bk9uRGV2aWNlcyhvcmRlclsxXSwgZiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMl0sIGYsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICB9XG59KTtcblxubGV0IHByaW50RGV2aWNlSW5mbyA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 +//# sourceMappingURL=data:application/json;base64,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RUFBQSxDQUFHLEVBQUEsQ0FBQzs7QUE3RTdDLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBVSxVQUFTLENBQUc7QUFDeEMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25CZXN0RGV2aWNlID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgbGV0IG9yZGVyID0gW1wiQ1VEQVwiLCBcIk9wZW5DTFwiLCBcIkNQVVwiXTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGJlc3QgYXZhaWxhYmxlIGRldmljZS5cXG5gKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAoXyhwbGF0ZnJvbXMpLmNvbnRhaW5zKG9yZGVyWzBdKSkge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzBdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMV0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMV0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzJdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcHJpbnREZXZpY2VJbmZvID0gZnVuY3Rpb24gKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index bd7ddc1..fbefe91 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -4,6 +4,7 @@ var _ = require("lodash"); var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var debug = require("debug")("af:ann"); +var now = require("performance-now"); function ANN(af, layers, range) { range = range || 0.05; this.af = af; @@ -109,6 +110,7 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, numBatches, err, i, + start, j, startPos$__0, endPos$__1, @@ -116,7 +118,8 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, y, startPos, endPos, - outVec; + outVec, + end; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { @@ -135,11 +138,12 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, case 16: $ctx.state = (i < options.maxEpochs) ? 10 : 14; break; - case 13: + case 6: i++; $ctx.state = 16; break; case 10: + start = now(); for (j = 0; j < numBatches - 1; j++) { startPos$__0 = j * options.batchSize; endPos$__1 = startPos$__0 + options.batchSize; @@ -161,16 +165,17 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, $ctx.state = 4; break; case 4: + end = now(); + console.log(("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds")); + $ctx.state = 13; + break; + case 13: $ctx.state = (err < options.maxError) ? 7 : 6; break; case 7: console.log(("Converged on Epoc: " + (i + 1))); $ctx.state = 14; break; - case 6: - console.log(("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4))); - $ctx.state = 13; - break; case 14: $ctx.returnValue = err; $ctx.state = -2; @@ -181,4 +186,4 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, }, $__11, this); })); module.exports = ANN; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFubi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFFdEMsT0FBUyxJQUFFLENBQUUsRUFBQyxDQUFHLENBQUEsTUFBSyxDQUFHLENBQUEsS0FBSSxDQUFHO0FBQzVCLE1BQUksRUFBSSxDQUFBLEtBQUksR0FBSyxLQUFHLENBQUM7QUFDckIsS0FBRyxHQUFHLEVBQUksR0FBQyxDQUFDO0FBQ1osS0FBRyxVQUFVLEVBQUksQ0FBQSxNQUFLLE9BQU8sQ0FBQztBQUM5QixLQUFHLE9BQU8sRUFBSSxHQUFDLENBQUM7QUFDaEIsS0FBRyxRQUFRLEVBQUksR0FBQyxDQUFDO0FBQ2pCLGFBQWEsRUFBQSxDQUFHLENBQUEsQ0FBQSxFQUFJLENBQUEsSUFBRyxVQUFVLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztBQUNyQyxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsR0FBSSxDQUFBLEVBQUMsUUFBUSxBQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ2xDLE9BQUksQ0FBQSxFQUFJLENBQUEsSUFBRyxVQUFVLEVBQUksRUFBQSxDQUFHO0FBQ3hCLEFBQUksUUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsTUFBSyxDQUFFLENBQUEsQ0FBQyxFQUFJLEVBQUEsQ0FBRyxDQUFBLE1BQUssQ0FBRSxDQUFBLEVBQUksRUFBQSxDQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLEFBQUMsQ0FBQyxLQUFJLEVBQUksRUFBQSxDQUFDLENBQUM7QUFDdEYsU0FBRyxRQUFRLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ3hCO0FBQUEsRUFDSjtBQUFBLEFBQ0o7QUFBQSxBQUVJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxHQUFFLFVBQVUsQ0FBQztBQUV6QixJQUFJLFFBQVEsRUFBSSxVQUFVLEdBQUUsQ0FBRztBQUUzQixPQUFPLENBQUEsSUFBRyxHQUFHLElBQUksQUFBQyxDQUFDLEdBQUUsSUFBSSxBQUFDLEVBQUMsQ0FBQyxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsT0FBTyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELElBQUksTUFBTSxFQUFJLFVBQVUsR0FBRSxDQUFHO0FBQ3pCLE9BQU8sQ0FBQSxHQUFFLE9BQU8sQUFBQyxDQUFDLENBQUEsQ0FBQyxJQUFJLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsSUFBSSxRQUFRLEVBQUksVUFBVSxLQUFJLENBQUc7QUFDN0IsT0FBTyxDQUFBLElBQUcsR0FBRyxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUcsQ0FBQSxJQUFHLEdBQUcsU0FBUyxBQUFDLENBQUMsQ0FBQSxDQUFHLENBQUEsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBRyxDQUFBLElBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFHLE1BQUksQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCxJQUFJLGdCQUFnQixFQUFJLENBQUEsS0FBSSxBQUFDLENBckM3QixlQUFjLHNCQUFzQixBQUFDLENBcUNQLGNBQVUsR0FBRSxDQUFHLENBQUEsSUFBRzs7Ozs7Ozs7OztBQXJDaEQsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztjQXFDRixDQUFBLEdBQUUsSUFBSSxBQUFDLENBQUMsSUFBRyxDQUFDOzs7O2VBQ2YsQ0FBQSxJQUFHLEtBQUs7ZUFBUSxDQUFBLElBQUcsR0FBRztlQUFOLGNBQWU7ZUFBRSxDQUFBLEdBQUUsSUFBSTtlQUFOLFVBQU8sQ0FBUCxHQUFFLENBQU0sSUFBRSxDQUFDO2VBQTVCLFVBQWdCLFlBQWE7Ozs7O0FBdkN4RCxxQkFBdUI7O2VBQXZCLENBQUEsSUFBRyxLQUFLOzs7O2dCQXVDRyxVQUFTLENBQVQsSUFBRyxPQUEyQzs7OztBQXZDekQsYUFBRyxZQUFZLFFBQW9CLENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFzQ3RDLENBeEN1RCxDQXdDdEQsQ0FBQztBQUVGLElBQUksaUJBQWlCLEVBQUksVUFBVSxLQUFJLENBQUc7QUFDdEMsS0FBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLElBQUksQUFBQyxDQUFDLEtBQUksQ0FBQyxDQUFDO0FBQ3pCLGFBQWEsRUFBQSxDQUFHLENBQUEsQ0FBQSxFQUFJLENBQUEsSUFBRyxVQUFVLEVBQUksRUFBQSxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7QUFDekMsQUFBSSxNQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsSUFBRyxRQUFRLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEFBQUksTUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLElBQUcsR0FBRyxPQUFPLEFBQUMsQ0FBQyxLQUFJLENBQUcsQ0FBQSxJQUFHLFFBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE9BQUcsT0FBTyxDQUFFLENBQUEsRUFBSSxFQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsSUFBRyxRQUFRLEFBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ2hEO0FBQUEsQUFDSixDQUFDO0FBRUQsSUFBSSxjQUFjLEVBQUksVUFBVSxNQUFLLENBQUcsQ0FBQSxLQUFJLENBQUc7QUFDM0MsQUFBSSxJQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsSUFBRyxHQUFHLENBQUM7QUFDaEIsQUFBSSxJQUFBLENBQUEsR0FBRSxFQUFJLENBQUEsSUFBRyxHQUFHLElBQUksQ0FBQztBQUdyQixBQUFJLElBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxJQUFHLE9BQU8sQ0FBRSxJQUFHLFVBQVUsRUFBSSxFQUFBLENBQUMsQ0FBQztBQUM1QyxBQUFJLElBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxNQUFLLElBQUksQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBQzVCLEFBQUksSUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE1BQUssS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFFdEIsYUFBYSxDQUFBLElBQUcsVUFBVSxFQUFJLEVBQUEsQ0FBRyxDQUFBLENBQUEsR0FBSyxFQUFBLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztBQUMxQyxBQUFJLE1BQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxJQUFHLFFBQVEsQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQUFBSSxNQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLE1BQU0sQUFBQyxDQUFDLE1BQUssQ0FBQyxJQUFJLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBR3JELEFBQUksTUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLEVBQUMsT0FBTyxBQUFDLENBQUMsS0FBSSxDQUFHLE1BQUksQ0FBQyxJQUFJLEFBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxBQUFDLEVBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFDMUQsT0FBRyxRQUFRLENBQUUsQ0FBQSxDQUFDLFVBQVUsQUFBQyxDQUFDLEVBQUMsVUFBVSxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUc3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SSxDQUFBLENBOEdELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQTlHRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBOEdBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQUk5QyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxTQUFTLElBQUMsQ0FBQSxFQUFJLEVBQUEsR0FBQyxZQUFXLEVBQUMsQ0FBQSxHQUFFLFFBQVEsQUFBQyxDQUFDLENBQUEsQ0FBQyxFQUFHLENBQUM7Ozs7QUFuSGhFLGFBQUcsWUFBWSxFQXNISixJQUFFLEFBdEhzQixDQUFBOzs7O0FBQW5DLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBcUh0QyxDQXZIdUQsQ0F1SHRELENBQUM7QUFFRixLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJtYWNoaW5lLWxlYXJuaW5nL2Fubi5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6YW5uXCIpO1xuXG5mdW5jdGlvbiBBTk4oYWYsIGxheWVycywgcmFuZ2UpIHtcbiAgICByYW5nZSA9IHJhbmdlIHx8IDAuMDU7XG4gICAgdGhpcy5hZiA9IGFmO1xuICAgIHRoaXMubnVtTGF5ZXJzID0gbGF5ZXJzLmxlbmd0aDtcbiAgICB0aGlzLnNpZ25hbCA9IFtdO1xuICAgIHRoaXMud2VpZ2h0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1MYXllcnM7IGkrKykge1xuICAgICAgICB0aGlzLnNpZ25hbC5wdXNoKG5ldyBhZi5BRkFycmF5KCkpO1xuICAgICAgICBpZiAoaSA8IHRoaXMubnVtTGF5ZXJzIC0gMSkge1xuICAgICAgICAgICAgbGV0IHcgPSBhZi5yYW5kdShsYXllcnNbaV0gKyAxLCBsYXllcnNbaSArIDFdLCBhZi5kVHlwZS5mMzIpLm11bChyYW5nZSkuc3ViKHJhbmdlIC8gMik7XG4gICAgICAgICAgICB0aGlzLndlaWdodHMucHVzaCh3KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IHByb3RvID0gQU5OLnByb3RvdHlwZTtcblxucHJvdG8uc2lnbW9pZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyAxIC8gKDEgKyBleHAoLXZhbCkpO1xuICAgIHJldHVybiB0aGlzLmFmLmV4cCh2YWwubmVnKCkpLmFkZCgxKS5yaHNEaXYoMSk7XG59O1xuXG5wcm90by5kZXJpdiA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICByZXR1cm4gb3V0LnJoc1N1YigxKS5tdWwob3V0KTtcbn07XG5cbnByb3RvLmFkZEJpYXMgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICByZXR1cm4gdGhpcy5hZi5qb2luKDEsIHRoaXMuYWYuY29uc3RhbnQoMSwgaW5wdXQuZGltcygwKSwgdGhpcy5hZi5kVHlwZS5mMzIpLCBpbnB1dCk7XG59O1xuXG5wcm90by5fY2FsY3VsYXRlRXJyb3IgPSBhc3luYyhmdW5jdGlvbioob3V0LCBwcmVkKSB7XG4gICAgbGV0IGRpZiA9IG91dC5zdWIocHJlZCk7XG4gICAgcmV0dXJuIE1hdGguc3FydCh5aWVsZCB0aGlzLmFmLnN1bUFzeW5jKGRpZi5tdWwoZGlmKSkpO1xufSk7XG5cbnByb3RvLmZvcndhcmRQcm9wYWdhdGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB0aGlzLnNpZ25hbFswXS5zZXQoaW5wdXQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1MYXllcnMgLSAxOyBpKyspIHtcbiAgICAgICAgbGV0IGluVmVjID0gdGhpcy5hZGRCaWFzKHRoaXMuc2lnbmFsW2ldKTtcbiAgICAgICAgbGV0IG91dFZlYyA9IHRoaXMuYWYubWF0TXVsKGluVmVjLCB0aGlzLndlaWdodHNbaV0pO1xuICAgICAgICB0aGlzLnNpZ25hbFtpICsgMV0uc2V0KHRoaXMuc2lnbW9pZChvdXRWZWMpKTtcbiAgICB9XG59O1xuXG5wcm90by5iYWNrUHJvcGFnYXRlID0gZnVuY3Rpb24gKHRhcmdldCwgYWxwaGEpIHtcbiAgICBsZXQgYWYgPSB0aGlzLmFmO1xuICAgIGxldCBTZXEgPSB0aGlzLmFmLlNlcTtcblxuICAgIC8vIEdldCBlcnJvciBmb3Igb3V0cHV0IGxheWVyXG4gICAgbGV0IG91dFZlYyA9IHRoaXMuc2lnbmFsW3RoaXMubnVtTGF5ZXJzIC0gMV07XG4gICAgbGV0IGVyciA9IG91dFZlYy5zdWIodGFyZ2V0KTtcbiAgICBsZXQgbSA9IHRhcmdldC5kaW1zKDApO1xuXG4gICAgZm9yIChsZXQgaSA9IHRoaXMubnVtTGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgbGV0IGluVmVjID0gdGhpcy5hZGRCaWFzKHRoaXMuc2lnbmFsW2ldKTtcbiAgICAgICAgbGV0IGRlbHRhID0gYWYudHJhbnNwb3NlKHRoaXMuZGVyaXYob3V0VmVjKS5tdWwoZXJyKSk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHdlaWdodHNcbiAgICAgICAgbGV0IGdyYWQgPSBhZi5tYXRNdWwoZGVsdGEsIGluVmVjKS5tdWwoYWxwaGEpLm5lZygpLmRpdihtKTtcbiAgICAgICAgdGhpcy53ZWlnaHRzW2ldLmFkZEFzc2lnbihhZi50cmFuc3Bvc2UoZ3JhZCkpO1xuXG4gICAgICAgIC8vIElucHV0IHRvIGN1cnJlbnQgbGF5ZXIgaXMgb3V0cHV0IG9mIHByZXZpb3VzXG4gICAgICAgIG91dFZlYyA9IHRoaXMuc2lnbmFsW2ldO1xuICAgICAgICBlcnIuc2V0KGFmLnRyYW5zcG9zZSh0aGlzLmFmLm1hdE11bCh0aGlzLndlaWdodHNbaV0sIGRlbHRhKSkpO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZXJyb3Igb2YgYmlhcyBhbmQgcHJvcGFnYXRlIGJhY2t3YXJkXG4gICAgICAgIGVyci5zZXQoZXJyLmF0KGFmLnNwYW4sIG5ldyBTZXEoMSwgb3V0VmVjLmRpbXMoMSkpKSk7XG4gICAgfVxufTtcblxucHJvdG8ucHJlZGljdCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHRoaXMuZm9yd2FyZFByb3BhZ2F0ZShpbnB1dCk7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmFsW3RoaXMubnVtTGF5ZXJzIC0gMV0uY29weSgpO1xufTtcblxucHJvdG8udHJhaW4gPSBhc3luYyhmdW5jdGlvbiooaW5wdXQsIHRhcmdldCwgb3B0aW9ucykge1xuICAgIGxldCBhZiA9IHRoaXMuYWY7XG4gICAgbGV0IFNlcSA9IHRoaXMuYWYuU2VxO1xuXG4gICAgbGV0IG51bVNhbXBsZXMgPSBpbnB1dC5kaW1zKDApO1xuICAgIGxldCBudW1CYXRjaGVzID0gbnVtU2FtcGxlcyAvIG9wdGlvbnMuYmF0Y2hTaXplO1xuXG4gICAgbGV0IGVyciA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubWF4RXBvY2hzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1CYXRjaGVzIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRQb3MgPSBqICogb3B0aW9ucy5iYXRjaFNpemU7XG4gICAgICAgICAgICBsZXQgZW5kUG9zID0gc3RhcnRQb3MgKyBvcHRpb25zLmJhdGNoU2l6ZTtcblxuICAgICAgICAgICAgbGV0IHggPSBpbnB1dC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcbiAgICAgICAgICAgIGxldCB5ID0gdGFyZ2V0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pO1xuXG4gICAgICAgICAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoeCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tQcm9wYWdhdGUoeSwgb3B0aW9ucy5hbHBoYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB3aXRoIGxhc3QgYmF0Y2hcbiAgICAgICAgbGV0IHN0YXJ0UG9zID0gKG51bUJhdGNoZXMgLSAxKSAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICBsZXQgZW5kUG9zID0gbnVtU2FtcGxlcyAtIDE7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLnByZWRpY3QoaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBlcnIgPSB5aWVsZCB0aGlzLl9jYWxjdWxhdGVFcnJvcihvdXRWZWMsIHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udmVyZ2VuY2UgY3JpdGVyaWEgaGFzIGJlZW4gbWV0XG4gICAgICAgIGlmIChlcnIgPCBvcHRpb25zLm1heEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVyZ2VkIG9uIEVwb2M6ICR7aSArIDF9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBFcG9jaDogJHtpICsgMX0sIEVycm9yOiAke2Vyci50b0ZpeGVkKDQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlcnI7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBTk47Il19 +//# sourceMappingURL=data:application/json;base64,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Qzs7QUFBdEYsWUFBRSxFQTdHVixDQUFBLElBQUcsS0FBSyxBQTZHc0YsQ0FBQTs7OztjQUMxRSxDQUFBLEdBQUUsQUFBQyxFQUFDO0FBRWhCLGdCQUFNLElBQUksQUFBQyxFQUFDLFNBQVMsSUFBQyxDQUFBLEVBQUksRUFBQSxHQUFDLFlBQVcsRUFBQyxDQUFBLEdBQUUsUUFBUSxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxlQUFjLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLFdBQVMsRUFBQyxDQUFDOzs7O0FBaEh4SCxhQUFHLE1BQU0sRUFBSSxDQUFBLENBbUhELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQW5IRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBbUhBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQXBIdEQsYUFBRyxZQUFZLEVBeUhKLElBQUUsQUF6SHNCLENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUF3SHRDLENBMUh1RCxDQTBIdEQsQ0FBQztBQUVGLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvYW5uLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjphbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxuZnVuY3Rpb24gQU5OKGFmLCBsYXllcnMsIHJhbmdlKSB7XG4gICAgcmFuZ2UgPSByYW5nZSB8fCAwLjA1O1xuICAgIHRoaXMuYWYgPSBhZjtcbiAgICB0aGlzLm51bUxheWVycyA9IGxheWVycy5sZW5ndGg7XG4gICAgdGhpcy5zaWduYWwgPSBbXTtcbiAgICB0aGlzLndlaWdodHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzOyBpKyspIHtcbiAgICAgICAgdGhpcy5zaWduYWwucHVzaChuZXcgYWYuQUZBcnJheSgpKTtcbiAgICAgICAgaWYgKGkgPCB0aGlzLm51bUxheWVycyAtIDEpIHtcbiAgICAgICAgICAgIGxldCB3ID0gYWYucmFuZHUobGF5ZXJzW2ldICsgMSwgbGF5ZXJzW2kgKyAxXSwgYWYuZFR5cGUuZjMyKS5tdWwocmFuZ2UpLnN1YihyYW5nZSAvIDIpO1xuICAgICAgICAgICAgdGhpcy53ZWlnaHRzLnB1c2godyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmxldCBwcm90byA9IEFOTi5wcm90b3R5cGU7XG5cbnByb3RvLnNpZ21vaWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gMSAvICgxICsgZXhwKC12YWwpKTtcbiAgICByZXR1cm4gdGhpcy5hZi5leHAodmFsLm5lZygpKS5hZGQoMSkucmhzRGl2KDEpO1xufTtcblxucHJvdG8uZGVyaXYgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgcmV0dXJuIG91dC5yaHNTdWIoMSkubXVsKG91dCk7XG59O1xuXG5wcm90by5hZGRCaWFzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWYuam9pbigxLCB0aGlzLmFmLmNvbnN0YW50KDEsIGlucHV0LmRpbXMoMCksIHRoaXMuYWYuZFR5cGUuZjMyKSwgaW5wdXQpO1xufTtcblxucHJvdG8uX2NhbGN1bGF0ZUVycm9yID0gYXN5bmMoZnVuY3Rpb24qKG91dCwgcHJlZCkge1xuICAgIGxldCBkaWYgPSBvdXQuc3ViKHByZWQpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeWllbGQgdGhpcy5hZi5zdW1Bc3luYyhkaWYubXVsKGRpZikpKTtcbn0pO1xuXG5wcm90by5mb3J3YXJkUHJvcGFnYXRlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdGhpcy5zaWduYWxbMF0uc2V0KGlucHV0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzIC0gMTsgaSsrKSB7XG4gICAgICAgIGxldCBpblZlYyA9IHRoaXMuYWRkQmlhcyh0aGlzLnNpZ25hbFtpXSk7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLmFmLm1hdE11bChpblZlYywgdGhpcy53ZWlnaHRzW2ldKTtcbiAgICAgICAgdGhpcy5zaWduYWxbaSArIDFdLnNldCh0aGlzLnNpZ21vaWQob3V0VmVjKSk7XG4gICAgfVxufTtcblxucHJvdG8uYmFja1Byb3BhZ2F0ZSA9IGZ1bmN0aW9uICh0YXJnZXQsIGFscGhhKSB7XG4gICAgbGV0IGFmID0gdGhpcy5hZjtcbiAgICBsZXQgU2VxID0gdGhpcy5hZi5TZXE7XG5cbiAgICAvLyBHZXQgZXJyb3IgZm9yIG91dHB1dCBsYXllclxuICAgIGxldCBvdXRWZWMgPSB0aGlzLnNpZ25hbFt0aGlzLm51bUxheWVycyAtIDFdO1xuICAgIGxldCBlcnIgPSBvdXRWZWMuc3ViKHRhcmdldCk7XG4gICAgbGV0IG0gPSB0YXJnZXQuZGltcygwKTtcblxuICAgIGZvciAobGV0IGkgPSB0aGlzLm51bUxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGxldCBpblZlYyA9IHRoaXMuYWRkQmlhcyh0aGlzLnNpZ25hbFtpXSk7XG4gICAgICAgIGxldCBkZWx0YSA9IGFmLnRyYW5zcG9zZSh0aGlzLmRlcml2KG91dFZlYykubXVsKGVycikpO1xuXG4gICAgICAgIC8vIEFkanVzdCB3ZWlnaHRzXG4gICAgICAgIGxldCBncmFkID0gYWYubWF0TXVsKGRlbHRhLCBpblZlYykubXVsKGFscGhhKS5uZWcoKS5kaXYobSk7XG4gICAgICAgIHRoaXMud2VpZ2h0c1tpXS5hZGRBc3NpZ24oYWYudHJhbnNwb3NlKGdyYWQpKTtcblxuICAgICAgICAvLyBJbnB1dCB0byBjdXJyZW50IGxheWVyIGlzIG91dHB1dCBvZiBwcmV2aW91c1xuICAgICAgICBvdXRWZWMgPSB0aGlzLnNpZ25hbFtpXTtcbiAgICAgICAgZXJyLnNldChhZi50cmFuc3Bvc2UodGhpcy5hZi5tYXRNdWwodGhpcy53ZWlnaHRzW2ldLCBkZWx0YSkpKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIGVycm9yIG9mIGJpYXMgYW5kIHByb3BhZ2F0ZSBiYWNrd2FyZFxuICAgICAgICBlcnIuc2V0KGVyci5hdChhZi5zcGFuLCBuZXcgU2VxKDEsIG91dFZlYy5kaW1zKDEpKSkpO1xuICAgIH1cbn07XG5cbnByb3RvLnByZWRpY3QgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoaW5wdXQpO1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFt0aGlzLm51bUxheWVycyAtIDFdLmNvcHkoKTtcbn07XG5cbnByb3RvLnRyYWluID0gYXN5bmMoZnVuY3Rpb24qKGlucHV0LCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBsZXQgYWYgPSB0aGlzLmFmO1xuICAgIGxldCBTZXEgPSB0aGlzLmFmLlNlcTtcblxuICAgIGxldCBudW1TYW1wbGVzID0gaW5wdXQuZGltcygwKTtcbiAgICBsZXQgbnVtQmF0Y2hlcyA9IG51bVNhbXBsZXMgLyBvcHRpb25zLmJhdGNoU2l6ZTtcblxuICAgIGxldCBlcnIgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLm1heEVwb2NoczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQmF0Y2hlcyAtIDE7IGorKykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0UG9zID0gaiAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICAgICAgbGV0IGVuZFBvcyA9IHN0YXJ0UG9zICsgb3B0aW9ucy5iYXRjaFNpemU7XG5cbiAgICAgICAgICAgIGxldCB4ID0gaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3Bhbik7XG4gICAgICAgICAgICBsZXQgeSA9IHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcblxuICAgICAgICAgICAgdGhpcy5mb3J3YXJkUHJvcGFnYXRlKHgpO1xuICAgICAgICAgICAgdGhpcy5iYWNrUHJvcGFnYXRlKHksIG9wdGlvbnMuYWxwaGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgd2l0aCBsYXN0IGJhdGNoXG4gICAgICAgIGxldCBzdGFydFBvcyA9IChudW1CYXRjaGVzIC0gMSkgKiBvcHRpb25zLmJhdGNoU2l6ZTtcbiAgICAgICAgbGV0IGVuZFBvcyA9IG51bVNhbXBsZXMgLSAxO1xuICAgICAgICBsZXQgb3V0VmVjID0gdGhpcy5wcmVkaWN0KGlucHV0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pKTtcbiAgICAgICAgZXJyID0geWllbGQgdGhpcy5fY2FsY3VsYXRlRXJyb3Iob3V0VmVjLCB0YXJnZXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBjb25zdCBlbmQgPSBub3coKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgRXBvY2g6ICR7aSArIDF9LCBFcnJvcjogJHtlcnIudG9GaXhlZCg0KX0sIER1cmF0aW9uOiAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCg0KX0gc2Vjb25kc2ApO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbnZlcmdlbmNlIGNyaXRlcmlhIGhhcyBiZWVuIG1ldFxuICAgICAgICBpZiAoZXJyIDwgb3B0aW9ucy5tYXhFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYENvbnZlcmdlZCBvbiBFcG9jOiAke2kgKyAxfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQU5OOyJdfQ== diff --git a/examples/es5/machine-learning/mnist.js b/examples/es5/machine-learning/mnist.js index 8fbf934..c171883 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -312,4 +312,4 @@ var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(a }, $__11, this); }))}; module.exports = mnist; -//# sourceMappingURL=data:application/json;base64,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bW5pc3QuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBmcyA9IEJsdWViaXJkLnByb21pc2lmeUFsbChyZXF1aXJlKFwiZnMtZXh0cmFcIikpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgZmxvYXQgPSByZWYudHlwZXMuZmxvYXQ7XG5sZXQgdWludCA9IHJlZi50eXBlcy51aW50O1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6bW5pc3RcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG5sZXQgcmVhZERhdGEgPSBhc3luYyhmdW5jdGlvbiooZiwgZGF0YSkge1xuICAgIGxldCBieXRlc1JlYWQgPSAoeWllbGQgZnMucmVhZEFzeW5jKGYsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBudWxsKSlbMF07XG4gICAgaWYgKGJ5dGVzUmVhZCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSByZWFkaW5nIGVycm9yIVwiKTtcbiAgICB9XG59KTtcblxubGV0IHJlYWRJZHggPSBhc3luYyhmdW5jdGlvbioocGF0aCwgdHlwZSkge1xuICAgIGxldCBmaWxlID0geWllbGQgZnMub3BlbkFzeW5jKHBhdGgsIFwiclwiKTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgZCA9IG5ldyBCdWZmZXIoNCk7XG5cbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgZCk7XG5cbiAgICAgICAgaWYgKGRbMl0gIT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtRGltcyA9IGRbM107XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGltZW5zaW9uc1xuICAgICAgICBsZXQgZWxlbSA9IDE7XG4gICAgICAgIGxldCBkaW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRGltczsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcbiAgICAgICAgICAgIGxldCBkaW0gPSBkLnJlYWRVSW50MzJCRSgpO1xuICAgICAgICAgICAgZWxlbSAqPSBkaW07XG4gICAgICAgICAgICBkaW1zLnB1c2goZGltKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYWQgdGhlIGRhdGFcbiAgICAgICAgbGV0IGJkYXRhID0gbmV3IEJ1ZmZlcihlbGVtKTtcbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgYmRhdGEpO1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBCdWZmZXIoYmRhdGEubGVuZ3RoICogdHlwZS5zaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ5dGUgPSBiZGF0YVtpXTtcbiAgICAgICAgICAgIHR5cGUuc2V0KGRhdGEsIGkgKiB0eXBlLnNpemUsIGJ5dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bURpbXM6IG51bURpbXMsXG4gICAgICAgICAgICBkaW1zOiBkaW1zLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgeWllbGQgZnMuY2xvc2VBc3luYyhmaWxlKTtcbiAgICB9XG59KTtcblxubGV0IG1uaXN0ID0ge1xuICAgIHNldHVwOiBhc3luYyhmdW5jdGlvbiooYWYsIGV4cGFuZExhYmVscywgZnJhYykge1xuICAgICAgICBmcmFjID0gTWF0aC5taW4oZnJhYyB8fCAxLjAsIDAuOCk7XG4gICAgICAgIGxldCBkYXRhUm9vdCA9IFwiLi4vLi4vbWxfbGFiL2RhdGEvbW5pc3RcIjtcbiAgICAgICAgbGV0IEFGQXJyYXkgPSBhZi5BRkFycmF5O1xuICAgICAgICBsZXQgRGltNCA9IGFmLkRpbTQ7XG5cbiAgICAgICAgbGV0IGltYWdlRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImltYWdlcy1zdWJzZXRcIiksIGZsb2F0KTtcbiAgICAgICAgbGV0IGxhYmVsRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImxhYmVscy1zdWJzZXRcIiksIHVpbnQpO1xuXG4gICAgICAgIGxldCBySURpbXMgPSBuZXcgRGltNChfKGltYWdlRGF0YS5kaW1zKS5yZXZlcnNlKCkudmFsdWUoKSk7XG4gICAgICAgIGxldCBpbWFnZXMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKHJJRGltcywgYWYuZFR5cGUuZjMyLCBpbWFnZURhdGEuZGF0YSk7XG5cbiAgICAgICAgbGV0IHIgPSBhZi5yYW5kdSgxMDAwMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgbGV0IGNvbmQgPSByLmx0KGZyYWMpO1xuICAgICAgICBsZXQgdHJhaW5JbmRpY2VzID0gYWYud2hlcmUoY29uZCk7XG4gICAgICAgIGxldCB0ZXN0SW5kaWNlcyA9IGFmLndoZXJlKGNvbmQubm90KCkpO1xuXG4gICAgICAgIGxldCB0cmFpbkltYWdlcyA9IGFmLmxvb2t1cChpbWFnZXMsIHRyYWluSW5kaWNlcywgMikuZGl2KDI1NSk7XG4gICAgICAgIGxldCB0ZXN0SW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdGVzdEluZGljZXMsIDIpLmRpdigyNTUpO1xuXG4gICAgICAgIGxldCBudW1DbGFzc2VzID0gMTA7XG4gICAgICAgIGxldCBudW1UcmFpbiA9IHRyYWluSW1hZ2VzLmRpbXMoMik7XG4gICAgICAgIGxldCBudW1UZXN0ID0gdGVzdEltYWdlcy5kaW1zKDIpO1xuXG4gICAgICAgIGRlYnVnKGBUcmFpbmluZyBzYW1wbGUgY291bnQ6ICR7bnVtVHJhaW59YCk7XG4gICAgICAgIGRlYnVnKGBUZXN0IHNhbXBsZSBjb3VudDogJHtudW1UZXN0fWApO1xuXG4gICAgICAgIGxldCB0cmFpbkxhYmVscztcbiAgICAgICAgbGV0IHRlc3RMYWJlbHM7XG5cbiAgICAgICAgaWYgKGV4cGFuZExhYmVscykge1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UcmFpbiwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UZXN0LCBhZi5kVHlwZS5mMzIpO1xuXG4gICAgICAgICAgICBhc3NlcnQodHJhaW5JbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcbiAgICAgICAgICAgIGFzc2VydCh0ZXN0SW5kaWNlcy50eXBlKCkgPT09IGFmLmRUeXBlLnUzMik7XG5cbiAgICAgICAgICAgIGxldCBoVHJhaW5JZHggPSB5aWVsZCB0cmFpbkluZGljZXMuaG9zdEFzeW5jKCk7XG4gICAgICAgICAgICBsZXQgaFRlc3RJZHggPSB5aWVsZCB0ZXN0SW5kaWNlcy5ob3N0QXN5bmMoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UcmFpbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkeCA9IHVpbnQuZ2V0KGhUcmFpbklkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdHJhaW5MYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UZXN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRlc3RJZHgsIGkgKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHVpbnQuZ2V0KGxhYmVsRGF0YS5kYXRhLCBpZHggKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChsYWJlbCA+PSAwICYmIGxhYmVsIDw9IDkpO1xuICAgICAgICAgICAgICAgIHRlc3RMYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsYWJlbHMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGxhYmVsRGF0YS5kaW1zWzBdLCBhZi5kVHlwZS51MzIsIGxhYmVsRGF0YS5kYXRhKTtcbiAgICAgICAgICAgIHRyYWluTGFiZWxzID0gbGFiZWxzLmF0KHRyYWluSW5kaWNlcyk7XG4gICAgICAgICAgICB0ZXN0TGFiZWxzID0gbGFiZWxzLmF0KHRlc3RJbmRpY2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudW1DbGFzc2VzOiBudW1DbGFzc2VzLFxuICAgICAgICAgICAgbnVtVHJhaW46IG51bVRyYWluLFxuICAgICAgICAgICAgbnVtVGVzdDogbnVtVGVzdCxcbiAgICAgICAgICAgIHRyYWluSW1hZ2VzOiB0cmFpbkltYWdlcyxcbiAgICAgICAgICAgIHRlc3RJbWFnZXM6IHRlc3RJbWFnZXMsXG4gICAgICAgICAgICB0cmFpbkxhYmVsczogdHJhaW5MYWJlbHMsXG4gICAgICAgICAgICB0ZXN0TGFiZWxzOiB0ZXN0TGFiZWxzXG4gICAgICAgIH07XG4gICAgfSlcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbW5pc3Q7Il19 +//# sourceMappingURL=data:application/json;base64,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S0FBSyxDQUFDO0FBQ3BELG1CQUFLLEFBQUMsQ0FBQyxZQUFTLEVBQUEsQ0FBQSxFQUFLLGFBQVMsRUFBQSxDQUFDLENBQUM7QUFDaEMsdUJBQVMsSUFBSSxBQUFDLGtCQUFXLEVBQUEsQ0FBQyxDQUFDO1lBQy9CO0FBQUE7Ozs7aUJBR21CLENBQUEsT0FBTSxZQUFZLEFBQUMsQ0FBQyxTQUFRLEtBQUssQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUcsQ0FBQSxTQUFRLEtBQUssQ0FBQzs7bUJBdkhsRyxDQUFBLElBQUcsS0FBSzs7OztBQXdISSxzQkFBVSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxZQUFXLENBQUMsQ0FBQztBQUNyQyxxQkFBUyxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxXQUFVLENBQUMsQ0FBQzs7OztBQXpIL0MsZUFBRyxZQUFZLEVBNEhBO0FBQ0gsdUJBQVMsQ0FBRyxXQUFTO0FBQ3JCLHFCQUFPLENBQUcsU0FBTztBQUNqQixvQkFBTSxDQUFHLFFBQU07QUFDZix3QkFBVSxDQUFHLFlBQVU7QUFDdkIsdUJBQVMsQ0FBRyxXQUFTO0FBQ3JCLHdCQUFVLENBQUcsWUFBVTtBQUN2Qix1QkFBUyxDQUFHLFdBQVM7QUFBQSxZQUN6QixBQXBJMkIsQ0FBQTs7OztBQUFuQyxpQkFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsSUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7RUFtSWxDLENBckltRCxDQXFJbEQsQ0FDTCxDQUFDO0FBRUQsS0FBSyxRQUFRLEVBQUksTUFBSSxDQUFDO0FBQUEiLCJmaWxlIjoibWFjaGluZS1sZWFybmluZy9tbmlzdC5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGZzID0gQmx1ZWJpcmQucHJvbWlzaWZ5QWxsKHJlcXVpcmUoXCJmcy1leHRyYVwiKSk7XG5sZXQgcmVmID0gcmVxdWlyZShcInJlZlwiKTtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcbmxldCB1aW50ID0gcmVmLnR5cGVzLnVpbnQ7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjptbmlzdFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5cbmxldCByZWFkRGF0YSA9IGFzeW5jKGZ1bmN0aW9uKihmLCBkYXRhKSB7XG4gICAgbGV0IGJ5dGVzUmVhZCA9ICh5aWVsZCBmcy5yZWFkQXN5bmMoZiwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIG51bGwpKVswXTtcbiAgICBpZiAoYnl0ZXNSZWFkICE9PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHJlYWRpbmcgZXJyb3IhXCIpO1xuICAgIH1cbn0pO1xuXG5sZXQgcmVhZElkeCA9IGFzeW5jKGZ1bmN0aW9uKihwYXRoLCB0eXBlKSB7XG4gICAgbGV0IGZpbGUgPSB5aWVsZCBmcy5vcGVuQXN5bmMocGF0aCwgXCJyXCIpO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBkID0gbmV3IEJ1ZmZlcig0KTtcblxuICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcblxuICAgICAgICBpZiAoZFsyXSAhPSA4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBkYXRhIHR5cGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1EaW1zID0gZFszXTtcblxuICAgICAgICAvLyBSZWFkIHRoZSBkaW1lbnNpb25zXG4gICAgICAgIGxldCBlbGVtID0gMTtcbiAgICAgICAgbGV0IGRpbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1EaW1zOyBpKyspIHtcbiAgICAgICAgICAgIHlpZWxkIHJlYWREYXRhKGZpbGUsIGQpO1xuICAgICAgICAgICAgbGV0IGRpbSA9IGQucmVhZFVJbnQzMkJFKCk7XG4gICAgICAgICAgICBlbGVtICo9IGRpbTtcbiAgICAgICAgICAgIGRpbXMucHVzaChkaW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGF0YVxuICAgICAgICBsZXQgYmRhdGEgPSBuZXcgQnVmZmVyKGVsZW0pO1xuICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBiZGF0YSk7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEJ1ZmZlcihiZGF0YS5sZW5ndGggKiB0eXBlLnNpemUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYnl0ZSA9IGJkYXRhW2ldO1xuICAgICAgICAgICAgdHlwZS5zZXQoZGF0YSwgaSAqIHR5cGUuc2l6ZSwgYnl0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbnVtRGltczogbnVtRGltcyxcbiAgICAgICAgICAgIGRpbXM6IGRpbXMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB5aWVsZCBmcy5jbG9zZUFzeW5jKGZpbGUpO1xuICAgIH1cbn0pO1xuXG5sZXQgbW5pc3QgPSB7XG4gICAgc2V0dXA6IGFzeW5jKGZ1bmN0aW9uKihhZiwgZXhwYW5kTGFiZWxzLCBmcmFjKSB7XG4gICAgICAgIGZyYWMgPSBNYXRoLm1pbihmcmFjIHx8IDEuMCwgMC44KTtcbiAgICAgICAgbGV0IGRhdGFSb290ID0gXCIuLi8uLi9tbF9sYWIvZGF0YS9tbmlzdFwiO1xuICAgICAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG4gICAgICAgIGxldCBEaW00ID0gYWYuRGltNDtcblxuICAgICAgICBsZXQgaW1hZ2VEYXRhID0geWllbGQgcmVhZElkeChwYXRoLmpvaW4oZGF0YVJvb3QsIFwiaW1hZ2VzLXN1YnNldFwiKSwgZmxvYXQpO1xuICAgICAgICBsZXQgbGFiZWxEYXRhID0geWllbGQgcmVhZElkeChwYXRoLmpvaW4oZGF0YVJvb3QsIFwibGFiZWxzLXN1YnNldFwiKSwgdWludCk7XG5cbiAgICAgICAgbGV0IHJJRGltcyA9IG5ldyBEaW00KF8oaW1hZ2VEYXRhLmRpbXMpLnJldmVyc2UoKS52YWx1ZSgpKTtcbiAgICAgICAgbGV0IGltYWdlcyA9IHlpZWxkIEFGQXJyYXkuY3JlYXRlQXN5bmMocklEaW1zLCBhZi5kVHlwZS5mMzIsIGltYWdlRGF0YS5kYXRhKTtcblxuICAgICAgICBsZXQgciA9IGFmLnJhbmR1KDEwMDAwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICBsZXQgY29uZCA9IHIubHQoZnJhYyk7XG4gICAgICAgIGxldCB0cmFpbkluZGljZXMgPSBhZi53aGVyZShjb25kKTtcbiAgICAgICAgbGV0IHRlc3RJbmRpY2VzID0gYWYud2hlcmUoY29uZC5ub3QoKSk7XG5cbiAgICAgICAgbGV0IHRyYWluSW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdHJhaW5JbmRpY2VzLCAyKS5kaXYoMjU1KTtcbiAgICAgICAgbGV0IHRlc3RJbWFnZXMgPSBhZi5sb29rdXAoaW1hZ2VzLCB0ZXN0SW5kaWNlcywgMikuZGl2KDI1NSk7XG5cbiAgICAgICAgbGV0IG51bUNsYXNzZXMgPSAxMDtcbiAgICAgICAgbGV0IG51bVRyYWluID0gdHJhaW5JbWFnZXMuZGltcygyKTtcbiAgICAgICAgbGV0IG51bVRlc3QgPSB0ZXN0SW1hZ2VzLmRpbXMoMik7XG5cbiAgICAgICAgZGVidWcoYFRyYWluaW5nIHNhbXBsZSBjb3VudDogJHtudW1UcmFpbn1gKTtcbiAgICAgICAgZGVidWcoYFRlc3Qgc2FtcGxlIGNvdW50OiAke251bVRlc3R9YCk7XG5cbiAgICAgICAgbGV0IHRyYWluTGFiZWxzO1xuICAgICAgICBsZXQgdGVzdExhYmVscztcblxuICAgICAgICBpZiAoZXhwYW5kTGFiZWxzKSB7XG4gICAgICAgICAgICB0cmFpbkxhYmVscyA9IGFmLmNvbnN0YW50KDAsIG51bUNsYXNzZXMsIG51bVRyYWluLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgdGVzdExhYmVscyA9IGFmLmNvbnN0YW50KDAsIG51bUNsYXNzZXMsIG51bVRlc3QsIGFmLmRUeXBlLmYzMik7XG5cbiAgICAgICAgICAgIGFzc2VydCh0cmFpbkluZGljZXMudHlwZSgpID09PSBhZi5kVHlwZS51MzIpO1xuICAgICAgICAgICAgYXNzZXJ0KHRlc3RJbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcblxuICAgICAgICAgICAgbGV0IGhUcmFpbklkeCA9IHlpZWxkIHRyYWluSW5kaWNlcy5ob3N0QXN5bmMoKTtcbiAgICAgICAgICAgIGxldCBoVGVzdElkeCA9IHlpZWxkIHRlc3RJbmRpY2VzLmhvc3RBc3luYygpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRyYWluOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRyYWluSWR4LCBpICogdWludC5zaXplKTtcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSB1aW50LmdldChsYWJlbERhdGEuZGF0YSwgaWR4ICogdWludC5zaXplKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobGFiZWwgPj0gMCAmJiBsYWJlbCA8PSA5KTtcbiAgICAgICAgICAgICAgICB0cmFpbkxhYmVscy5zZXQobGFiZWwsIGksIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRlc3Q7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBpZHggPSB1aW50LmdldChoVGVzdElkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdGVzdExhYmVscy5zZXQobGFiZWwsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhYmVscyA9IHlpZWxkIEFGQXJyYXkuY3JlYXRlQXN5bmMobGFiZWxEYXRhLmRpbXNbMF0sIGFmLmRUeXBlLnUzMiwgbGFiZWxEYXRhLmRhdGEpO1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBsYWJlbHMuYXQodHJhaW5JbmRpY2VzKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBsYWJlbHMuYXQodGVzdEluZGljZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bUNsYXNzZXM6IG51bUNsYXNzZXMsXG4gICAgICAgICAgICBudW1UcmFpbjogbnVtVHJhaW4sXG4gICAgICAgICAgICBudW1UZXN0OiBudW1UZXN0LFxuICAgICAgICAgICAgdHJhaW5JbWFnZXM6IHRyYWluSW1hZ2VzLFxuICAgICAgICAgICAgdGVzdEltYWdlczogdGVzdEltYWdlcyxcbiAgICAgICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgICAgIHRlc3RMYWJlbHM6IHRlc3RMYWJlbHNcbiAgICAgICAgfTtcbiAgICB9KVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtbmlzdDsiXX0= diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 09f41b8..41901db 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -200,4 +200,4 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev }, $__12, this); })); common.runOnBestDevice(annDemo, "ANN Demo"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5ldXJhbE5ldHdvcmsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxXQUFVLENBQUMsQ0FBQztBQUNqQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxTQUFRLENBQUMsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQztBQUMxQixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxpQkFBZ0IsQ0FBQyxDQUFDO0FBRXBDLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLEtBQUksQUFBQyxDQVRwQixlQUFjLHNCQUFzQixBQUFDLENBU2hCLGNBQVUsRUFBQyxDQUFHLENBQUEsU0FBUSxDQUFHLENBQUEsTUFBSzs7Ozs7Ozs7Ozs7Ozs7QUFUbkQsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7Ozs7QUFEaEIsZUFVcUIsQ0FBQSxFQUFDLGVBQWUsQUFBQyxDQUFDLFNBQVEsQ0FBRyxFQUFBLENBQUMsQ0FWNUI7O2VBQXZCLENBQUEsSUFBRyxLQUFLOzs7OztBQUFSLGVBV3FCLENBQUEsRUFBQyxlQUFlLEFBQUMsQ0FBQyxNQUFLLENBQUcsRUFBQSxDQUFDLENBWHpCOztlQUF2QixDQUFBLElBQUcsS0FBSzs7OztlQVlpQixDQUFBLEVBQUMsV0FBVztlQUFFLENBQUEsSUFBRyxNQUFNO2VBQVQsUUFBWTtlQUFFLENBQUEsSUFBRyxNQUFNO2VBQXZCLFVBQWEsWUFBVztlQUF0QyxVQUFhLENBQWIsRUFBQyxPQUFzQzs7Ozs7QUFaaEUscUJBQXVCOztlQUF2QixDQUFBLElBQUcsS0FBSzs7OztlQVlJLENBQUEsR0FBRSxPQUFtRDtlQUFLLENBQUEsSUFBRyxNQUFNO2dCQUFULGNBQWtCO2dCQUFsQixXQUFtQixNQUFDOzs7O0FBWjFGLGFBQUcsWUFBWSxFQVlKLGFBQStFLEFBWnZELENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFXdEMsQ0FidUQsQ0FhdEQsQ0FBQztBQUVGLEFBQUksRUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLEtBQUksQUFBQyxDQWZuQixlQUFjLHNCQUFzQixBQUFDLENBZWpCLGVBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFmM0MsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztBQWVaLGdCQUFNLElBQUksQUFBQyxDQUFDLCtCQUE4QixDQUFDLENBQUM7QUFDNUMsZUFBSyxnQkFBZ0IsQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLGdCQUFNLElBQUksQUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBRWYsZ0JBQU0sSUFBSSxBQUFDLENBQUMsMkJBQTBCLENBQUMsQ0FBQzs7Ozs7QUFwQjVDLGVBcUJxQixDQUFBLEtBQUksTUFBTSxBQUFDLENBQUMsRUFBQyxDQUFHLEtBQUcsQ0FBRyxJQUFFLENBQUMsQ0FyQnZCOztlQUF2QixDQUFBLElBQUcsS0FBSzs7OztzQkF1QmMsQ0FBQSxJQUFHLFlBQVksU0FBUyxBQUFDLEVBQUMsQ0FBQSxDQUFJLENBQUEsSUFBRyxTQUFTO3FCQUczQyxDQUFBLEVBQUMsVUFBVSxBQUFDLENBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLFlBQVksQ0FBRyxZQUFVLENBQUcsQ0FBQSxJQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUN0RSxDQUFBLEVBQUMsVUFBVSxBQUFDLENBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLFdBQVcsQ0FBRyxZQUFVLENBQUcsQ0FBQSxJQUFHLFFBQVEsQ0FBQyxDQUFDO3NCQUVqRSxDQUFBLEVBQUMsVUFBVSxBQUFDLENBQUMsSUFBRyxZQUFZLENBQUM7cUJBQzlCLENBQUEsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLFdBQVcsQ0FBQztrQkFFL0IsSUFBSSxJQUFFLEFBQUMsQ0FBQyxFQUFDLENBQUcsRUFBQyxVQUFTLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFHLElBQUUsQ0FBRyxHQUFDLENBQUcsQ0FBQSxJQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUcxRCxDQUFBLEdBQUUsQUFBQyxFQUFDOzs7OztBQW5DdEIsZUFvQ1UsQ0FBQSxPQUFNLE1BQU0sQUFBQyxDQUNmLFVBQVMsQ0FDVCxZQUFVLENBQ1Y7QUFDSSxnQkFBSSxDQUFHLElBQUU7QUFDVCxvQkFBUSxDQUFHLElBQUU7QUFDYixvQkFBUSxDQUFHLElBQUU7QUFDYixtQkFBTyxDQUFHLElBQUU7QUFBQSxVQUNoQixDQUNKLENBN0NtQjs7QUFBdkIsYUFBRyxXQUFXLEFBQUMsRUFBQyxDQUFBOzs7OztBQUFoQixlQThDVSxDQUFBLEVBQUMsVUFBVSxBQUFDLEVBQUMsQ0E5Q0E7O0FBQXZCLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztjQStDQSxDQUFBLEdBQUUsQUFBQyxFQUFDO3NCQUdFLENBQUEsT0FBTSxRQUFRLEFBQUMsQ0FBQyxVQUFTLENBQUM7cUJBQzNCLENBQUEsT0FBTSxRQUFRLEFBQUMsQ0FBQyxTQUFRLENBQUM7QUFFMUMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7Ozs7Z0JBQzVCLENBQUEsT0FBTSxJQUFJO2dCQUF1QyxDQUFBLFFBQU8sQUFBQyxDQUFDLEVBQUMsQ0FBRyxZQUFVLENBQUcsWUFBVSxDQUFDOzs7OztBQXREMUYsc0JBQXVCOztnQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7Z0JBc0RzQyxjQUFxRDtnQkFBckQsV0FBc0QsT0FBQyxFQUFBLENBQUM7Z0JBQXRGLDhCQUE2QjtnQkFBekMsV0FBVyxDQUFYLE9BQU0sUUFBK0Y7Ozs7QUFFckcsZ0JBQU0sSUFBSSxBQUFDLENBQUMsV0FBVSxDQUFDLENBQUM7Ozs7Z0JBQ3hCLENBQUEsT0FBTSxJQUFJO2dCQUF1QyxDQUFBLFFBQU8sQUFBQyxDQUFDLEVBQUMsQ0FBRyxXQUFTLENBQUcsV0FBUyxDQUFDOzs7OztBQXpEeEYsc0JBQXVCOztnQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7Z0JBeURzQyxjQUFtRDtnQkFBbkQsV0FBb0QsT0FBQyxFQUFBLENBQUM7Z0JBQXBGLDhCQUE2QjtnQkFBekMsV0FBVyxDQUFYLE9BQU0sUUFBNkY7Ozs7QUFFbkcsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQSxDQUFDLGFBQVcsRUFBQyxDQUFDOzs7O0FBM0RqRixlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixRQUE2QixLQUFHLENBQUMsQ0FBQztBQTBEdEMsQ0E1RHVELENBNER0RCxDQUFDO0FBRUYsS0FBSyxnQkFBZ0IsQUFBQyxDQUFDLE9BQU0sQ0FBRyxXQUFTLENBQUMsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvbmV1cmFsTmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGNvbW1vbiA9IHJlcXVpcmUoXCIuLi9jb21tb25cIik7XG5sZXQgbW5pc3QgPSByZXF1aXJlKFwiLi9tbmlzdFwiKTtcbmxldCBBTk4gPSByZXF1aXJlKFwiLi9hbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxubGV0IGFjY3VyYWN5ID0gYXN5bmMoZnVuY3Rpb24qKGFmLCBwcmVkaWN0ZWQsIHRhcmdldCkge1xuICAgIGxldCBwTWF4ID0geWllbGQgYWYuZmluZE1heEF0QXN5bmMocHJlZGljdGVkLCAxKTtcbiAgICBsZXQgdE1heCA9IHlpZWxkIGFmLmZpbmRNYXhBdEFzeW5jKHRhcmdldCwgMSk7XG4gICAgcmV0dXJuICgxMDAgKiAoeWllbGQgYWYuY291bnRBc3luYyhwTWF4LmluZGV4LmVxKHRNYXguaW5kZXgpKSkpIC8gdE1heC5pbmRleC5lbGVtZW50cygpO1xufSk7XG5cbmxldCBhbm5EZW1vID0gYXN5bmMoZnVuY3Rpb24qKGFmLCBkZXZpY2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJSdW5uaW5nIEFOTiBEZW1vIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiU2V0dGluZyB1cCB0cmFpbmluZyBkYXRhLlwiKTtcbiAgICBsZXQgZGF0YSA9IHlpZWxkIG1uaXN0LnNldHVwKGFmLCB0cnVlLCAwLjYpO1xuXG4gICAgbGV0IGZlYXR1cmVTaXplID0gZGF0YS50cmFpbkltYWdlcy5lbGVtZW50cygpIC8gZGF0YS5udW1UcmFpbjtcblxuICAgIC8vIFJlc2hhcGUgaW1hZ2VzIGludG8gZmVhdHVyZSB2ZWN0b3JzXG4gICAgbGV0IHRyYWluRmVhdHMgPSBhZi50cmFuc3Bvc2UoYWYubW9kRGltcyhkYXRhLnRyYWluSW1hZ2VzLCBmZWF0dXJlU2l6ZSwgZGF0YS5udW1UcmFpbikpO1xuICAgIGxldCB0ZXN0RmVhdHMgPSBhZi50cmFuc3Bvc2UoYWYubW9kRGltcyhkYXRhLnRlc3RJbWFnZXMsIGZlYXR1cmVTaXplLCBkYXRhLm51bVRlc3QpKTtcblxuICAgIGxldCB0cmFpblRhcmdldCA9IGFmLnRyYW5zcG9zZShkYXRhLnRyYWluTGFiZWxzKTtcbiAgICBsZXQgdGVzdFRhcmdldCA9IGFmLnRyYW5zcG9zZShkYXRhLnRlc3RMYWJlbHMpO1xuXG4gICAgbGV0IG5ldHdvcmsgPSBuZXcgQU5OKGFmLCBbdHJhaW5GZWF0cy5kaW1zKDEpLCAxMDAsIDUwLCBkYXRhLm51bUNsYXNzZXNdKTtcblxuICAgIC8vIFRyYWluIG5ldHdvcmtcbiAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgIHlpZWxkIG5ldHdvcmsudHJhaW4oXG4gICAgICAgIHRyYWluRmVhdHMsXG4gICAgICAgIHRyYWluVGFyZ2V0LFxuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogMi4wLFxuICAgICAgICAgICAgbWF4RXBvY2hzOiAyNTAsXG4gICAgICAgICAgICBiYXRjaFNpemU6IDEwMCxcbiAgICAgICAgICAgIG1heEVycm9yOiAwLjVcbiAgICAgICAgfVxuICAgICk7XG4gICAgeWllbGQgYWYud2FpdEFzeW5jKCk7XG4gICAgY29uc3QgZW5kID0gbm93KCk7XG5cbiAgICAvLyBSdW4gdGhlIHRyYWluZWQgbmV0d29yayBhbmQgdGVzdCBhY2N1cmFjeS5cbiAgICBsZXQgdHJhaW5PdXRwdXQgPSBuZXR3b3JrLnByZWRpY3QodHJhaW5GZWF0cyk7XG4gICAgbGV0IHRlc3RPdXRwdXQgPSBuZXR3b3JrLnByZWRpY3QodGVzdEZlYXRzKTtcblxuICAgIGNvbnNvbGUubG9nKFwiVHJhaW5pbmcgc2V0OlwiKTtcbiAgICBjb25zb2xlLmxvZyhgQWNjdXJhY3kgb24gdHJhaW5pbmcgZGF0YTogJHsoeWllbGQgYWNjdXJhY3koYWYsIHRyYWluT3V0cHV0LCB0cmFpblRhcmdldCkpLnRvRml4ZWQoMil9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRlc3Qgc2V0OlwiKTtcbiAgICBjb25zb2xlLmxvZyhgQWNjdXJhY3kgb24gdGVzdGluZyAgZGF0YTogJHsoeWllbGQgYWNjdXJhY3koYWYsIHRlc3RPdXRwdXQsIHRlc3RUYXJnZXQpKS50b0ZpeGVkKDIpfWApO1xuXG4gICAgY29uc29sZS5sb2coYFRyYWluaW5nIHRpbWU6ICR7KChlbmQgLSBzdGFydCkgLyAxMDAwKS50b0ZpeGVkKDEwKX0gc2Vjb25kc1xcbmApO1xufSk7XG5cbmNvbW1vbi5ydW5PbkJlc3REZXZpY2UoYW5uRGVtbywgXCJBTk4gRGVtb1wiKTsiXX0= +//# sourceMappingURL=data:application/json;base64,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QSxDQUFDO2dCQUF0Riw4QkFBNkI7Z0JBQXpDLFdBQVcsQ0FBWCxPQUFNLFFBQStGOzs7O0FBRXJHLGdCQUFNLElBQUksQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDOzs7O2dCQUN4QixDQUFBLE9BQU0sSUFBSTtnQkFBdUMsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxFQUFDLENBQUcsV0FBUyxDQUFHLFdBQVMsQ0FBQzs7Ozs7OztnQkF6RHhGLENBQUEsSUFBRyxLQUFLOzs7O2dCQXlEc0MsY0FBbUQ7Z0JBQW5ELFdBQW9ELE9BQUMsRUFBQSxDQUFDO2dCQUFwRiw4QkFBNkI7Z0JBQXpDLFdBQVcsQ0FBWCxPQUFNLFFBQTZGOzs7O0FBRW5HLGdCQUFNLElBQUksQUFBQyxFQUFDLGlCQUFpQixFQUFDLENBQUEsQ0FBQyxDQUFDLEdBQUUsRUFBSSxNQUFJLENBQUMsRUFBSSxLQUFHLENBQUMsUUFBUSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUEsQ0FBQyxhQUFXLEVBQUMsQ0FBQzs7OztBQTNEakYsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUEwRHRDLENBNUR1RCxDQTREdEQsQ0FBQztBQUVGLEtBQUssZ0JBQWdCLEFBQUMsQ0FBQyxPQUFNLENBQUcsV0FBUyxDQUFDLENBQUM7QUFBQSIsImZpbGUiOiJtYWNoaW5lLWxlYXJuaW5nL25ldXJhbE5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xubGV0IG1uaXN0ID0gcmVxdWlyZShcIi4vbW5pc3RcIik7XG5sZXQgQU5OID0gcmVxdWlyZShcIi4vYW5uXCIpO1xubGV0IG5vdyA9IHJlcXVpcmUoXCJwZXJmb3JtYW5jZS1ub3dcIik7XG5cbmxldCBhY2N1cmFjeSA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgcHJlZGljdGVkLCB0YXJnZXQpIHtcbiAgICBsZXQgcE1heCA9IHlpZWxkIGFmLmZpbmRNYXhBdEFzeW5jKHByZWRpY3RlZCwgMSk7XG4gICAgbGV0IHRNYXggPSB5aWVsZCBhZi5maW5kTWF4QXRBc3luYyh0YXJnZXQsIDEpO1xuICAgIHJldHVybiAoMTAwICogKHlpZWxkIGFmLmNvdW50QXN5bmMocE1heC5pbmRleC5lcSh0TWF4LmluZGV4KSkpKSAvIHRNYXguaW5kZXguZWxlbWVudHMoKTtcbn0pO1xuXG5sZXQgYW5uRGVtbyA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgZGV2aWNlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiUnVubmluZyBBTk4gRGVtbyBvbiBkZXZpY2U6XFxuXCIpO1xuICAgIGNvbW1vbi5wcmludERldmljZUluZm8oZGV2aWNlSW5mbyk7XG4gICAgY29uc29sZS5sb2coXCJcIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlNldHRpbmcgdXAgdHJhaW5pbmcgZGF0YS5cIik7XG4gICAgbGV0IGRhdGEgPSB5aWVsZCBtbmlzdC5zZXR1cChhZiwgdHJ1ZSwgMC42KTtcblxuICAgIGxldCBmZWF0dXJlU2l6ZSA9IGRhdGEudHJhaW5JbWFnZXMuZWxlbWVudHMoKSAvIGRhdGEubnVtVHJhaW47XG5cbiAgICAvLyBSZXNoYXBlIGltYWdlcyBpbnRvIGZlYXR1cmUgdmVjdG9yc1xuICAgIGxldCB0cmFpbkZlYXRzID0gYWYudHJhbnNwb3NlKGFmLm1vZERpbXMoZGF0YS50cmFpbkltYWdlcywgZmVhdHVyZVNpemUsIGRhdGEubnVtVHJhaW4pKTtcbiAgICBsZXQgdGVzdEZlYXRzID0gYWYudHJhbnNwb3NlKGFmLm1vZERpbXMoZGF0YS50ZXN0SW1hZ2VzLCBmZWF0dXJlU2l6ZSwgZGF0YS5udW1UZXN0KSk7XG5cbiAgICBsZXQgdHJhaW5UYXJnZXQgPSBhZi50cmFuc3Bvc2UoZGF0YS50cmFpbkxhYmVscyk7XG4gICAgbGV0IHRlc3RUYXJnZXQgPSBhZi50cmFuc3Bvc2UoZGF0YS50ZXN0TGFiZWxzKTtcblxuICAgIGxldCBuZXR3b3JrID0gbmV3IEFOTihhZiwgW3RyYWluRmVhdHMuZGltcygxKSwgMTAwLCA1MCwgZGF0YS5udW1DbGFzc2VzXSk7XG5cbiAgICAvLyBUcmFpbiBuZXR3b3JrXG4gICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICB5aWVsZCBuZXR3b3JrLnRyYWluKFxuICAgICAgICB0cmFpbkZlYXRzLFxuICAgICAgICB0cmFpblRhcmdldCxcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6IDIuMCxcbiAgICAgICAgICAgIG1heEVwb2NoczogMjUwLFxuICAgICAgICAgICAgYmF0Y2hTaXplOiAxMDAsXG4gICAgICAgICAgICBtYXhFcnJvcjogMC41XG4gICAgICAgIH1cbiAgICApO1xuICAgIHlpZWxkIGFmLndhaXRBc3luYygpO1xuICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuXG4gICAgLy8gUnVuIHRoZSB0cmFpbmVkIG5ldHdvcmsgYW5kIHRlc3QgYWNjdXJhY3kuXG4gICAgbGV0IHRyYWluT3V0cHV0ID0gbmV0d29yay5wcmVkaWN0KHRyYWluRmVhdHMpO1xuICAgIGxldCB0ZXN0T3V0cHV0ID0gbmV0d29yay5wcmVkaWN0KHRlc3RGZWF0cyk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRyYWluaW5nIHNldDpcIik7XG4gICAgY29uc29sZS5sb2coYEFjY3VyYWN5IG9uIHRyYWluaW5nIGRhdGE6ICR7KHlpZWxkIGFjY3VyYWN5KGFmLCB0cmFpbk91dHB1dCwgdHJhaW5UYXJnZXQpKS50b0ZpeGVkKDIpfWApO1xuXG4gICAgY29uc29sZS5sb2coXCJUZXN0IHNldDpcIik7XG4gICAgY29uc29sZS5sb2coYEFjY3VyYWN5IG9uIHRlc3RpbmcgIGRhdGE6ICR7KHlpZWxkIGFjY3VyYWN5KGFmLCB0ZXN0T3V0cHV0LCB0ZXN0VGFyZ2V0KSkudG9GaXhlZCgyKX1gKTtcblxuICAgIGNvbnNvbGUubG9nKGBUcmFpbmluZyB0aW1lOiAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCgxMCl9IHNlY29uZHNcXG5gKTtcbn0pO1xuXG5jb21tb24ucnVuT25CZXN0RGV2aWNlKGFubkRlbW8sIFwiQU5OIERlbW9cIik7Il19 diff --git a/examples/es6/common/index.js b/examples/es6/common/index.js index e828639..ff49174 100644 --- a/examples/es6/common/index.js +++ b/examples/es6/common/index.js @@ -58,7 +58,7 @@ let runOnAllPlatforms = async(function*(f, name) { yield runOnDevices(id, f); } } - catch(e) { + catch (e) { console.error(e.stack); } }); @@ -78,12 +78,12 @@ let runOnBestDevice = async(function*(f, name) { yield runOnDevices(order[2], f, 0); } } - catch(e) { + catch (e) { console.error(e.stack); } }); -let printDeviceInfo = function(deviceInfo) { +let printDeviceInfo = function (deviceInfo) { console.log(`ID: ${deviceInfo.id}\nName: ${deviceInfo.name}\nPlatform: ${deviceInfo.platform}\nToolkit: ${deviceInfo.toolkit}\nCompute: ${deviceInfo.compute}`); }; diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 6bb366e..493340d 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -4,6 +4,7 @@ let _ = require("lodash"); let Bluebird = require("bluebird"); let async = Bluebird.coroutine; let debug = require("debug")("af:ann"); +let now = require("performance-now"); function ANN(af, layers, range) { range = range || 0.05; @@ -90,6 +91,7 @@ proto.train = async(function*(input, target, options) { let err = 0; for (let i = 0; i < options.maxEpochs; i++) { + const start = now(); for (let j = 0; j < numBatches - 1; j++) { let startPos = j * options.batchSize; let endPos = startPos + options.batchSize; @@ -106,14 +108,15 @@ proto.train = async(function*(input, target, options) { let endPos = numSamples - 1; let outVec = this.predict(input.at(new Seq(startPos, endPos), af.span)); err = yield this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + const end = now(); + + console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); // Check if convergence criteria has been met if (err < options.maxError) { console.log(`Converged on Epoc: ${i + 1}`); break; } - - console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}`); } return err; diff --git a/lib/es5/ext.js b/lib/es5/ext.js index 3b4d541..ad8e579 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -8,6 +8,9 @@ var gcTime = 1000; function isOutOfMemoryError(e) { return e.message.indexOf("998") > 0; } +function invokeGC(af) { + af.gc(gcTime); +} function synchronify(af, f) { return function() { var err; @@ -28,7 +31,7 @@ function synchronify(af, f) { if (!isOutOfMemoryError(err)) { throw err; } else { - af._gc(gcTime); + invokeGC(af); } } } @@ -64,7 +67,7 @@ function installAsyncAndSync(af, obj, name) { } } } - return ; + return; } if (name !== "AFArray") { var f = obj[name]; @@ -146,7 +149,7 @@ function installAsyncAndSync(af, obj, name) { if (!isOutOfMemoryError(e)) { throw e; } - af._gc(gcTime); + invokeGC(af); err = e; $ctx.state = 14; break; @@ -172,7 +175,7 @@ function installAsyncAndSync(af, obj, name) { if (!isOutOfMemoryError(e)) { throw e; } - af._gc(gcTime); + invokeGC(af); err = e; } } @@ -229,4 +232,4 @@ function ext(af) { }); } module.exports = ext; -//# sourceMappingURL=data:application/json;base64,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Q0FBQztBQUNwQixNQUFFLENBQUcsQ0FBQSxPQUFNLEFBQUMsQ0FBQyxPQUFNLENBQUM7QUFDcEIsT0FBRyxDQUFHLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDO0FBQ3RCLE9BQUcsQ0FBRyxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQztBQUN0QixhQUFTLENBQUcsVUFBVSxBQUFELENBQUc7QUFDcEIsQUFBSSxRQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsSUFBRyxVQUFVLEFBQUMsRUFBQyxDQUFDO0FBQzlCLFFBQUk7QUFDQSxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxJQUFHLGVBQWUsQUFBQyxFQUFDLENBQUM7QUFDakMsQUFBSSxVQUFBLENBQUEsTUFBSyxFQUFJLEdBQUMsQ0FBQztBQUNmLG1CQUFhLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxNQUFJLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztBQUM1QixhQUFHLFVBQVUsQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ2pCLEFBQUksWUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLElBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM1QixhQUFHLEdBQUcsRUFBSSxFQUFBLENBQUM7QUFDWCxlQUFLLEtBQUssQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDO1FBQ3JCO0FBQUEsQUFDQSxhQUFPLE9BQUssQ0FBQztNQUNqQixDQUNBLE9BQVE7QUFDSixXQUFHLFVBQVUsQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO01BQzNCO0FBQUEsSUFDSjtBQUNBLE9BQUcsQ0FBRyxDQUFBLE9BQU0sQUFBQyxDQUFDLFlBQVcsQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDO0FBQUEsRUFDbEMsQ0FBQyxDQUFDO0FBQ047QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6ImV4dC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBzeW5jaHJvbmlmeShhZiwgZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlcnI7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHZhciBkb25lO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIHJlcyA9IHI7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpLmNvbmNhdChjYik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGYuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB3aGlsZSAoIWRvbmUpIGFmLl9kb0V2ZW50cygpO1xuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZi5fZ2MoZ2NUaW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbHVlYmlyZChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKGUsIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV0cnlDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCBjYWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPdXRPZk1lbW9yeUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmLl9nYyhnY1RpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIlN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIlN5bmNcIl0gPSBzeW5jaHJvbmlmeShhZiwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWYuX2djKGdjVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dChhZikge1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmKTtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZi5BRkFycmF5KTtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZi5BRkFycmF5LnByb3RvdHlwZSk7XG5cbiAgICBfLmV4dGVuZChhZiwge1xuICAgICAgICBlbmQ6IC0xLFxuICAgICAgICBzcGFuOiBudWxsLFxuICAgICAgICBhbGw6IC0xLFxuICAgICAgICBkdHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIGRUeXBlOiByZXF1aXJlKFwiLi9kdHlwZVwiKSxcbiAgICAgICAgc291cmNlOiByZXF1aXJlKFwiLi9zb3VyY2VcIiksXG4gICAgICAgIG1hdGNoVHlwZTogcmVxdWlyZShcIi4vbWF0Y2hUeXBlXCIpLFxuICAgICAgICBjU3BhY2U6IHJlcXVpcmUoXCIuL2NTcGFjZVwiKSxcbiAgICAgICAgQ1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIGNvbm5lY3Rpdml0eTogcmVxdWlyZShcIi4vY29ubmVjdGl2aXR5XCIpLFxuICAgICAgICBib3JkZXJUeXBlOiByZXF1aXJlKFwiLi9ib3JkZXJUeXBlXCIpLFxuICAgICAgICBpbnRlcnBUeXBlOiByZXF1aXJlKFwiLi9pbnRlcnBUeXBlXCIpLFxuICAgICAgICBtYXRQcm9wOiByZXF1aXJlKFwiLi9tYXRQcm9wXCIpLFxuICAgICAgICBub3JtVHlwZTogcmVxdWlyZShcIi4vbm9ybVR5cGVcIiksXG4gICAgICAgIGNvbnZNb2RlOiByZXF1aXJlKFwiLi9jb252TW9kZVwiKSxcbiAgICAgICAgY29udkRvbWFpbjogcmVxdWlyZShcIi4vY29udkRvbWFpblwiKSxcbiAgICAgICAgRGltNDogcmVxdWlyZShcIi4vZGltNFwiKSxcbiAgICAgICAgU2VxOiByZXF1aXJlKFwiLi9zZXFcIiksXG4gICAgICAgIENvbXBsZXg6IHJlcXVpcmUoXCIuL2NvbXBsZXhcIiksXG4gICAgICAgIFJvdzogcmVxdWlyZShcIi4vcm93XCIpLFxuICAgICAgICBDb2w6IHJlcXVpcmUoXCIuL2NvbFwiKSxcbiAgICAgICAgUm93czogcmVxdWlyZShcIi4vcm93c1wiKSxcbiAgICAgICAgQ29sczogcmVxdWlyZShcIi4vY29sc1wiKSxcbiAgICAgICAgZ2V0RGV2aWNlczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmdldERldmljZSgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLmdldERldmljZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERldmljZShpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZm8gPSB0aGlzLmRldmljZUluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgaW5mby5pZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdmb3I6IHJlcXVpcmUoXCIuL21ha2VHZm9yXCIpKGFmKVxuICAgIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dDsiXX0= +//# sourceMappingURL=data:application/json;base64,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ZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBpbnZva2VHQyhhZikge1xuICAgIGFmLmdjKGdjVGltZSk7XG59XG5cbmZ1bmN0aW9uIHN5bmNocm9uaWZ5KGFmLCBmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycjtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgcmVzID0gcjtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBhcmdzID0gXy50b0FycmF5KGFyZ3VtZW50cykuY29uY2F0KGNiKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgZi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkgYWYuX2RvRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmx1ZWJpcmQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiU3luY1wiXSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZSArIFwiU3luY1wiXSA9IHN5bmNocm9uaWZ5KGFmLCBmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHQoYWYpIHtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZik7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheSk7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheS5wcm90b3R5cGUpO1xuXG4gICAgXy5leHRlbmQoYWYsIHtcbiAgICAgICAgZW5kOiAtMSxcbiAgICAgICAgc3BhbjogbnVsbCxcbiAgICAgICAgYWxsOiAtMSxcbiAgICAgICAgZHR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBkVHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIHNvdXJjZTogcmVxdWlyZShcIi4vc291cmNlXCIpLFxuICAgICAgICBtYXRjaFR5cGU6IHJlcXVpcmUoXCIuL21hdGNoVHlwZVwiKSxcbiAgICAgICAgY1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIENTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBjb25uZWN0aXZpdHk6IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eVwiKSxcbiAgICAgICAgYm9yZGVyVHlwZTogcmVxdWlyZShcIi4vYm9yZGVyVHlwZVwiKSxcbiAgICAgICAgaW50ZXJwVHlwZTogcmVxdWlyZShcIi4vaW50ZXJwVHlwZVwiKSxcbiAgICAgICAgbWF0UHJvcDogcmVxdWlyZShcIi4vbWF0UHJvcFwiKSxcbiAgICAgICAgbm9ybVR5cGU6IHJlcXVpcmUoXCIuL25vcm1UeXBlXCIpLFxuICAgICAgICBjb252TW9kZTogcmVxdWlyZShcIi4vY29udk1vZGVcIiksXG4gICAgICAgIGNvbnZEb21haW46IHJlcXVpcmUoXCIuL2NvbnZEb21haW5cIiksXG4gICAgICAgIERpbTQ6IHJlcXVpcmUoXCIuL2RpbTRcIiksXG4gICAgICAgIFNlcTogcmVxdWlyZShcIi4vc2VxXCIpLFxuICAgICAgICBDb21wbGV4OiByZXF1aXJlKFwiLi9jb21wbGV4XCIpLFxuICAgICAgICBSb3c6IHJlcXVpcmUoXCIuL3Jvd1wiKSxcbiAgICAgICAgQ29sOiByZXF1aXJlKFwiLi9jb2xcIiksXG4gICAgICAgIFJvd3M6IHJlcXVpcmUoXCIuL3Jvd3NcIiksXG4gICAgICAgIENvbHM6IHJlcXVpcmUoXCIuL2NvbHNcIiksXG4gICAgICAgIGdldERldmljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5nZXREZXZpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5nZXREZXZpY2VDb3VudCgpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoaSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5kZXZpY2VJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZm8uaWQgPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZm9yOiByZXF1aXJlKFwiLi9tYWtlR2ZvclwiKShhZilcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHQ7Il19 diff --git a/package.json b/package.json index dbde2b5..2213e56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire_js", - "version": "0.13.2", + "version": "0.14.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "dependencies": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 1e6347f..c814336 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -403,4 +403,4 @@ describe("AFArray class and methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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YUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FB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QyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzVFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHlCQUF3QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3JDLGNBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzdELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHlCQUF3QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3JDLGNBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzdELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDJCQUEwQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3ZDLGNBQU0sSUFBSSxBQUFDLEVBQUMsdUNBQXVDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQy9ELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBCQUF5QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RDLGNBQU0sSUFBSSxBQUFDLEVBQUMsc0NBQXNDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBCQUF5QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RDLGNBQU0sSUFBSSxBQUFDLEVBQUMsc0NBQXNDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDRCQUEyQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3hDLGNBQU0sSUFBSSxBQUFDLEVBQUMsd0NBQXdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQ2hFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHdCQUF1QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3BDLGNBQU0sSUFBSSxBQUFDLEVBQUMsb0NBQW9DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzVELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBDQUF5QyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RELGNBQU0sSUFBSSxBQUFDLEVBQUMsc0RBQXNELEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHVDQUFzQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25ELGNBQU0sSUFBSSxBQUFDLEVBQUMsbURBQW1ELEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzNFLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUVBLE9BQU8sQUFBQyxDQUFDLDJCQUEwQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQzdDLGFBQVcsQUFBQyxDQUFDLEtBQUksQ0FBQyxDQUFDO0FBQ25CLGFBQVcsQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3RCLGFBQVcsQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUFBIiwiZmlsZSI6ImFmQXJyYXlUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCByZWYgPSByZXF1aXJlKFwicmVmXCIpO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xuXG5mdW5jdGlvbiB0ZXN0UGxhdGZvcm0oaWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbXCJURVNUX1wiICsgaWRdID09PSBcIjFcIikge1xuICAgICAgICBkZXNjcmliZShpZCArIFwiIHBsYXRmb3JtXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLlwiKShpZCk7XG4gICAgICAgICAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGV4cG9ydCBBRkFycmF5IGNvbnN0cnVjdG9yXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBlbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3QpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY0FzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihhcnJheS5ob3N0U3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1VuZGVmaW5lZChhcnJheS5ob3N0U3luY1N5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1VuZGVmaW5lZChhcnJheS5ob3N0QXN5bmNTeW5jKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZmFpbCB3aXRoIG9uZSBudW1iZXIgYXJndW1lbnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgb25lIGRpbWVuc2lvbmFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KDEwLCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygzKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbM10gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgdHdvIGRpbWVuc2lvbmFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KDEwLCAyMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChhcnJheSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSAxMCAqIDIwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygzKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCAqIDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbM10gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzcm93KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb2x1bW4oKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbGZsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgdGhyZWUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCAzMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChhcnJheSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSAxMCAqIDIwICogMzAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDMpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygyKSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDMpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1syXSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdmVyaWZ5NChhcnJheSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygyKSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSA0MCk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCAqIDIwICogMzAgKiA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1syXSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzcm93KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb2x1bW4oKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbGZsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCAzMCwgNDAsIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSh7IHZhbHVlczogWzEwLCAyMCwgMzAsIDQwXSB9LCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbCBmcm9tIGRpbTQgYXJyYXlcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoWzEwLCAyMCwgMzAsIDQwXSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0aWFsaXplIGZyb20gYnVmZmVyLCBjb3B5YWJsZSwgYW5kIHJlYWRhYmxlIC0gYXN5bmNocm9ub3VzbHkgdy8gZ2VuZXJhdG9yc1wiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSBhc3luYyhmdW5jdGlvbiooKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnQgPSByZWYudHlwZXMuaW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50LnNldChidWZmLCB2ICogaW50LnNpemUsIHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGUpKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZUFzeW5jKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0geWllbGQgQUZBcnJheS5jcmVhdGVBc3luYyhjb3VudCwgYWYuZFR5cGUuczMyLCBidWZmKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmMiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGFycmF5Lmhvc3RBc3luYyhidWZmMik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkyID0gYXJyYXkuY29weSgpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIuYnl0ZXMoKSA9PT0gYXJyYXkuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmMyA9IHlpZWxkIGFycmF5Mi5ob3N0QXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzIGluc3RhbmNlb2YgQnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzLmxlbmd0aCA9PT0gaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMywgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHlpZWxkIGFycmF5Mi52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMSkudmFsdWVBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KDIpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA0LjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoXCJlbmRcIikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDkuMCAqIDkuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChhZi5lbmQgLSAxKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOC4wICogOC4wKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0aWFsaXplIGZyb20gYnVmZmVyLCBjb3B5YWJsZSwgYW5kIHJlYWRhYmxlIC0gc3luY2hyb25vdXNseSAoYmxvY2tpbmcpXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnQgPSByZWYudHlwZXMuaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGUpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlU3luYykpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gQUZBcnJheS5jcmVhdGVTeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSBjb3VudCAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICBhcnJheS5ob3N0U3luYyhidWZmMik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MSA9IGludC5nZXQoYnVmZiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdiAqIHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5MiBpbnN0YW5jZW9mIEFGQXJyYXkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIuYnl0ZXMoKSA9PT0gYXJyYXkuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0gYXJyYXkyLmhvc3RTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzIGluc3RhbmNlb2YgQnVmZmVyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gTGV0J3MgZG8gc29tZSBpbmRleGluZzpcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGFycmF5Mi52YWx1ZVN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMC4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheS5hdCgxKS52YWx1ZVN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoMikuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA0LjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDkuMCAqIDkuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOC4wICogOC4wKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXNzaWdubWVudCBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhc3NpZ25tZW50IG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBpbmRleGluZyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBpbmRleGluZyBvcGVyYXRvciB0ZXN0cyBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgcm93IHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGNvbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbCB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBzbGljZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHNsaWNlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHJvd3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3dzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGNvbHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBjb2xzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHNsaWNlcyB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFyaXRobWV0aWMgb3BlcmF0b3JzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXJpdGhtZXRpYyBvcGVyYXRvciB0ZXN0cyBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgbG9naWNhbCBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBsb2dpY2FsIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZGVzY3JpYmUoXCJBRkFycmF5IGNsYXNzIGFuZCBtZXRob2RzXCIsIGZ1bmN0aW9uKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== +//# sourceMappingURL=data:application/json;base64,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YUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FB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LEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsS0FBSSxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsVUFBVSxBQUFDLEVBQUMsQ0FBQztBQUMzQixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7QUFFdkIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxFQUFDLElBQUksRUFBSSxFQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0NBQXVDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxvREFBb0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdkMsY0FBTSxJQUFJLEFBQUMsRUFBQyx1Q0FBdUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDeEMsY0FBTSxJQUFJLEFBQUMsRUFBQyx3Q0FBd0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDaEUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0JBQXVCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxvQ0FBb0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsdUNBQXNDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkQsY0FBTSxJQUFJLEFBQUMsRUFBQyxtREFBbUQsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDM0UsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDN0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiYWZBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcbiAgICAgICAgICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZXhwb3J0IEFGQXJyYXkgY29uc3RydWN0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGVtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdEFzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdEFzeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RTeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdFN5bmNBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jU3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY1N5bmMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBmYWlsIHdpdGggb25lIG51bWJlciBhcmd1bWVudFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBvbmUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0d28gZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LnR5cGUoKSA9PT0gYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkubnVtZGltcygpID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygwKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDEpID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLm5kaW1zID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMF0gPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMV0gPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0aHJlZSBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAxMCAqIDIwICogMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDEpO1xuICAgICAgICAgICAgICAgIGxldCBkaW1zID0gYXJyYXkuZGltcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGRpbXMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5lbGVtZW50cyA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2NhbGFyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXN2ZWN0b3IoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNib29sKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB2ZXJpZnk0KGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDQwKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCA0MCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWwgZnJvbSBkaW00XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KHsgdmFsdWVzOiBbMTAsIDIwLCAzMCwgNDBdIH0sIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNCBhcnJheVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheShbMTAsIDIwLCAzMCwgNDBdLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBhc3luY2hyb25vdXNseSB3LyBnZW5lcmF0b3JzXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlQXN5bmMpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gY291bnQgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgYXJyYXkuaG9zdEFzeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIgaW5zdGFuY2VvZiBBRkFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0geWllbGQgYXJyYXkyLmhvc3RBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGRvIHNvbWUgaW5kZXhpbmc6XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0geWllbGQgYXJyYXkyLnZhbHVlQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDAuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdCgxKS52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGYoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBzeW5jaHJvbm91c2x5IChibG9ja2luZylcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSAxMDtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGludC5zZXQoYnVmZiwgdiAqIGludC5zaXplLCB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGVTeW5jKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBBRkFycmF5LmNyZWF0ZVN5bmMoY291bnQsIGFmLmRUeXBlLnMzMiwgYnVmZik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICBsZXQgYnVmZjIgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGFycmF5Lmhvc3RTeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5MiA9IGFycmF5LmNvcHkoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZjMgPSBhcnJheTIuaG9zdFN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChidWZmMy5sZW5ndGggPT09IGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MiA9IGludC5nZXQoYnVmZjMsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgIGxldCB2ID0gYXJyYXkyLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5LmF0KDEpLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdCgyKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KFwiZW5kXCIpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoYWYuZW5kIC0gMSkuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc3NpZ25tZW50IG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGluZGV4aW5nIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGluZGV4aW5nIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciByb3dcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3cgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgY29sIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2UgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHJvd3MgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbHMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igc2xpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2VzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhcml0aG1ldGljIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBsb2dpY2FsIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGxvZ2ljYWwgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkFGQXJyYXkgY2xhc3MgYW5kIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7Il19 diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index 3fa590b..e3a99cf 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -90,10 +90,10 @@ function testPlatform(id) { it("should throw error when invoking normal random int array with 2 dimensions", function() { try { var array = af.randn(2, 4, af.dType.s32); - return ; + return; } catch (e) { if (/invalid dtype argument/ig.test(e.message)) { - return ; + return; } else { throw new Error("This should throw appropriate error."); } @@ -170,4 +170,4 @@ describe("Functions to create arrays", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFB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QUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTWF0aC5mbG9vcih2KSA9PT0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCB5aWVsZCB1bmlmb3JtIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmR1KFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8IHYgPT09IDEuMCB8fCAodiA+IDAgJiYgdiA8IDEuMCAmJiB2ICUgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZigpLm5vZGVpZnkoZG9uZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kZlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBpbnZva2luZyBub3JtYWwgcmFuZG9tIGludCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBhZi5yYW5kbigyLCA0LCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaW52YWxpZCBkdHlwZSBhcmd1bWVudC9pZy50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCB0aHJvdyBhcHByb3ByaWF0ZSBlcnJvci5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgdGhyb3cuXCIpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgbm9ybWFsIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmRuKFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8ICh2ID4gLTQuMCAmJiB2IDwgNC4wICYmIHYgJSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImlkZW50aXR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpZGVudGl0eSB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc2NyaWJlKFwicmFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IHJhbmdlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJpb3RhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJkaWFnXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBkaWFnIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJjb25zdGFudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgY29uc3RhbnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiRnVuY3Rpb25zIHRvIGNyZWF0ZSBhcnJheXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFB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TyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTWF0aC5mbG9vcih2KSA9PT0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCB5aWVsZCB1bmlmb3JtIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmR1KFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8IHYgPT09IDEuMCB8fCAodiA+IDAgJiYgdiA8IDEuMCAmJiB2ICUgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZigpLm5vZGVpZnkoZG9uZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kZlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBpbnZva2luZyBub3JtYWwgcmFuZG9tIGludCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBhZi5yYW5kbigyLCA0LCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaW52YWxpZCBkdHlwZSBhcmd1bWVudC9pZy50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCB0aHJvdyBhcHByb3ByaWF0ZSBlcnJvci5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgdGhyb3cuXCIpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgbm9ybWFsIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmRuKFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8ICh2ID4gLTQuMCAmJiB2IDwgNC4wICYmIHYgJSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImlkZW50aXR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpZGVudGl0eSB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc2NyaWJlKFwicmFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IHJhbmdlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJpb3RhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJkaWFnXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBkaWFnIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJjb25zdGFudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgY29uc3RhbnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiRnVuY3Rpb25zIHRvIGNyZWF0ZSBhcnJheXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== From bc7962ce712ce0c28292e44261660cb9edf7936c Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sat, 11 Jul 2015 11:56:38 +0200 Subject: [PATCH 02/45] perf --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index ebf123d..59ea399 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,12 @@ It's in the [examples folder](https://github.com/arrayfire/arrayfire_js/blob/mas - Node.js 0.12 or above, enter: `node --harmony examples/es6/machine-learning/neuralNetwork.js` - Node.js below 0.12, enter: `node examples/es5/machine-learning/neuralNetwork.js` +Performance on Linux Mint x64, i5 3570, Radeon R9: + +- CPU platform: 0.8 sec / epoch +- OpenCL platform on CPU: 1.0 sec / epoch +- OpenCL platform on GPU: **0.28 sec / epoch** + ## API Docs [http://arrayfire.github.io/arrayfire_js](http://arrayfire.github.io/arrayfire_js/) From 4a7ee1ce4dcf132a0abd7f9f3c8dd947e1f894e0 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 14 Jul 2015 09:23:33 +0200 Subject: [PATCH 03/45] ann example updated --- examples/es6/machine-learning/ann.js | 11 +++-------- examples/es6/machine-learning/neuralNetwork.js | 6 +++--- src/mathfunctions.cpp | 12 ++++++++++++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 493340d..8aaa269 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -23,11 +23,6 @@ function ANN(af, layers, range) { let proto = ANN.prototype; -proto.sigmoid = function (val) { - // 1 / (1 + exp(-val)); - return this.af.exp(val.neg()).add(1).rhsDiv(1); -}; - proto.deriv = function (out) { return out.rhsSub(1).mul(out); }; @@ -46,7 +41,7 @@ proto.forwardPropagate = function (input) { for (let i = 0; i < this.numLayers - 1; i++) { let inVec = this.addBias(this.signal[i]); let outVec = this.af.matMul(inVec, this.weights[i]); - this.signal[i + 1].set(this.sigmoid(outVec)); + this.signal[i + 1].set(this.af.sigmoid(outVec)); } }; @@ -69,7 +64,7 @@ proto.backPropagate = function (target, alpha) { // Input to current layer is output of previous outVec = this.signal[i]; - err.set(af.transpose(this.af.matMul(this.weights[i], delta))); + err.set(this.af.matMulTT(delta, this.weights[i])); // Remove the error of bias and propagate backward err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); @@ -94,7 +89,7 @@ proto.train = async(function*(input, target, options) { const start = now(); for (let j = 0; j < numBatches - 1; j++) { let startPos = j * options.batchSize; - let endPos = startPos + options.batchSize; + let endPos = startPos + options.batchSize - 1; let x = input.at(new Seq(startPos, endPos), af.span); let y = target.at(new Seq(startPos, endPos), af.span); diff --git a/examples/es6/machine-learning/neuralNetwork.js b/examples/es6/machine-learning/neuralNetwork.js index a827aaa..85fb439 100644 --- a/examples/es6/machine-learning/neuralNetwork.js +++ b/examples/es6/machine-learning/neuralNetwork.js @@ -38,10 +38,10 @@ let annDemo = async(function*(af, deviceInfo) { trainFeats, trainTarget, { - alpha: 2.0, - maxEpochs: 250, + alpha: 1.0, + maxEpochs: 300, batchSize: 100, - maxError: 0.5 + maxError: 1.0 } ); yield af.waitAsync(); diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index a70ee8f..8b58fd8 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -36,6 +36,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "errors.h" #include "guard.h" +namespace af +{ + // TODO: Remove this when next version comes out: + af::array sigmoid(const af::array val) + { + return 1 / (1 + exp(-val)); + } +} + using namespace v8; using namespace std; using namespace node; @@ -76,6 +85,7 @@ ARRAYFIRE_SYNC_METHOD_ARR_ARR(Pow, pow) ARRAYFIRE_SYNC_METHOD_ARR(Pow2, pow2) ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Root, root) ARRAYFIRE_SYNC_METHOD_ARR(Sqrt, sqrt) +ARRAYFIRE_SYNC_METHOD_ARR(Sigmoid, sigmoid) ARRAYFIRE_SYNC_METHOD_ARR(ACosH, acosh) ARRAYFIRE_SYNC_METHOD_ARR(ASinH, asinh) @@ -146,4 +156,6 @@ void InitMathFunctions(v8::Handle exports) exports->Set(NanNew("conjg"), NanNew(Conjg)->GetFunction()); exports->Set(NanNew("imag"), NanNew(Imag)->GetFunction()); exports->Set(NanNew("real"), NanNew(Real)->GetFunction()); + + exports->Set(NanNew("sigmoid"), NanNew(Sigmoid)->GetFunction()); } From 93c9c129036faf012043a1c593eb37d30e79c956 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 3 Aug 2015 09:16:19 +0200 Subject: [PATCH 04/45] avoiding nan 2.0 for now, added repo to package.json --- examples/es5/bechmarks/pi.js | 3 +- examples/es5/common/index.js | 83 +++++++++---------- examples/es5/machine-learning/ann.js | 12 +-- examples/es5/machine-learning/mnist.js | 57 +++++++------ .../es5/machine-learning/neuralNetwork.js | 83 +++++++++---------- lib/es5/borderType.js | 3 +- lib/es5/cSpace.js | 3 +- lib/es5/col.js | 3 +- lib/es5/cols.js | 3 +- lib/es5/complex.js | 3 +- lib/es5/connectivity.js | 3 +- lib/es5/convDomain.js | 3 +- lib/es5/convMode.js | 3 +- lib/es5/dim4.js | 3 +- lib/es5/dtype.js | 3 +- lib/es5/ext.js | 43 +++++----- lib/es5/index.js | 3 +- lib/es5/interpType.js | 3 +- lib/es5/makeGfor.js | 3 +- lib/es5/matProp.js | 3 +- lib/es5/matchType.js | 3 +- lib/es5/normType.js | 3 +- lib/es5/row.js | 3 +- lib/es5/rows.js | 3 +- lib/es5/seq.js | 3 +- lib/es5/source.js | 3 +- package.json | 8 +- tests/es5/afArrayTests.js | 61 +++++++------- tests/es5/createArrayFunctionTests.js | 3 +- tests/es5/deviceTests.js | 3 +- tests/es5/moveAndReorderArrayTests.js | 3 +- 31 files changed, 195 insertions(+), 224 deletions(-) diff --git a/examples/es5/bechmarks/pi.js b/examples/es5/bechmarks/pi.js index f34fb7e..ed12f53 100644 --- a/examples/es5/bechmarks/pi.js +++ b/examples/es5/bechmarks/pi.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var common = require("../common"); @@ -42,4 +41,4 @@ var pi = async($traceurRuntime.initGeneratorFunction(function $__0(af, deviceInf }, $__0, this); })); common.runOnAllPlatforms(pi, "pi example"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUNaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztlQUNuQixDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsSUFBRyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQzs7b0JBaERoRCxDQUFBLElBQUcsS0FBSzs7OztnQkFpRFEsQ0FBQSxDQUFDLEdBQUUsRUFBSyxVQUFRLENBQUMsRUFBSSxlQUFhO0FBRTlDLGdCQUFNLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBQyxNQUFJLEVBQUcsQ0FBQzs7OztBQW5EaEMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFrRHRDLENBcER1RCxDQW9EdEQsQ0FBQztBQUVGLEtBQUssa0JBQWtCLEFBQUMsQ0FBQyxFQUFDLENBQUcsYUFBVyxDQUFDLENBQUM7QUFDMUMiLCJmaWxlIjoiYmVjaG1hcmtzL3BpLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xuXG5jb25zdCBudW1iZXJPZlBvaW50cyA9IDIwMDAwMDAwO1xuXG5sZXQgcGkgPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICBjb25zb2xlLmxvZyhcIkNhbGN1bGF0aW5nIHBpIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGxldCB4ID0gYWYucmFuZHUobnVtYmVyT2ZQb2ludHMsIGFmLmR0eXBlLmYzMik7XG4gICAgbGV0IHkgPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgZGlzdCA9IGFmLnNxcnQoeC5tdWwoeCkuYWRkKHkubXVsKHkpKSk7XG4gICAgbGV0IG51bUluc2lkZSA9IHlpZWxkIGFmLnN1bUFzeW5jKGRpc3QubHQoMSkpO1xuICAgIGxldCBwaVZhbCA9ICg0LjAgKiAgbnVtSW5zaWRlKSAvIG51bWJlck9mUG9pbnRzO1xuXG4gICAgY29uc29sZS5sb2coYFBJID0gJHtwaVZhbH1gKTtcbn0pO1xuXG5jb21tb24ucnVuT25BbGxQbGF0Zm9ybXMocGksIFwicGkgZXhhbXBsZVwiKTtcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUNBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztlQUNuQixDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsSUFBRyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQzs7b0JBaERoRCxDQUFBLElBQUcsS0FBSzs7OztnQkFpRFEsQ0FBQSxDQUFDLEdBQUUsRUFBSyxVQUFRLENBQUMsRUFBSSxlQUFhO0FBRTlDLGdCQUFNLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBQyxNQUFJLEVBQUcsQ0FBQzs7OztBQW5EaEMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFrRHRDLENBcER1RCxDQW9EdEQsQ0FBQztBQUVGLEtBQUssa0JBQWtCLEFBQUMsQ0FBQyxFQUFDLENBQUcsYUFBVyxDQUFDLENBQUM7QUFDMUMiLCJmaWxlIjoiYmVjaG1hcmtzL3BpLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xuXG5jb25zdCBudW1iZXJPZlBvaW50cyA9IDIwMDAwMDAwO1xuXG5sZXQgcGkgPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICBjb25zb2xlLmxvZyhcIkNhbGN1bGF0aW5nIHBpIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGxldCB4ID0gYWYucmFuZHUobnVtYmVyT2ZQb2ludHMsIGFmLmR0eXBlLmYzMik7XG4gICAgbGV0IHkgPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgZGlzdCA9IGFmLnNxcnQoeC5tdWwoeCkuYWRkKHkubXVsKHkpKSk7XG4gICAgbGV0IG51bUluc2lkZSA9IHlpZWxkIGFmLnN1bUFzeW5jKGRpc3QubHQoMSkpO1xuICAgIGxldCBwaVZhbCA9ICg0LjAgKiAgbnVtSW5zaWRlKSAvIG51bWJlck9mUG9pbnRzO1xuXG4gICAgY29uc29sZS5sb2coYFBJID0gJHtwaVZhbH1gKTtcbn0pO1xuXG5jb21tb24ucnVuT25BbGxQbGF0Zm9ybXMocGksIFwicGkgZXhhbXBsZVwiKTtcbiJdfQ== diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index 6eb8353..78848cb 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -1,30 +1,29 @@ "use strict"; -"use strict"; var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var af = require("../../.."); var util = require("util"); var now = require("performance-now"); var _ = require("lodash"); -var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__7(platformID, f, onID) { +var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__8(platformID, f, onID) { var afOfPlatform, - $__3, $__4, $__5, + $__6, + $__2, $__1, - $__0, deviceInfo, start, end, - $__6; + $__7; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: afOfPlatform = af(platformID); - $__3 = true; - $__4 = false; - $__5 = undefined; + $__4 = true; + $__5 = false; + $__6 = undefined; $ctx.state = 29; break; case 29: @@ -32,18 +31,18 @@ var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__7(pla $ctx.state = 18; break; case 18: - $__1 = void 0, $__0 = (afOfPlatform.getDevices())[$traceurRuntime.toProperty(Symbol.iterator)](); + $__2 = void 0, $__1 = (afOfPlatform.getDevices())[$traceurRuntime.toProperty(Symbol.iterator)](); $ctx.state = 14; break; case 14: - $ctx.state = (!($__3 = ($__1 = $__0.next()).done)) ? 10 : 12; + $ctx.state = (!($__4 = ($__2 = $__1.next()).done)) ? 10 : 12; break; case 8: - $__3 = true; + $__4 = true; $ctx.state = 14; break; case 10: - deviceInfo = $__1.value; + deviceInfo = $__2.value; $ctx.state = 11; break; case 11: @@ -74,12 +73,12 @@ var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__7(pla case 15: $ctx.popTry(); $ctx.maybeUncatchable(); - $__6 = $ctx.storedException; + $__7 = $ctx.storedException; $ctx.state = 21; break; case 21: - $__4 = true; - $__5 = $__6; + $__5 = true; + $__6 = $__7; $ctx.state = 16; $ctx.finallyFallThrough = -2; break; @@ -89,12 +88,12 @@ var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__7(pla break; case 27: try { - if (!$__3 && $__0.return != null) { - $__0.return(); + if (!$__4 && $__1.return != null) { + $__1.return(); } } finally { - if ($__4) { - throw $__5; + if ($__5) { + throw $__6; } } $ctx.state = 25; @@ -105,17 +104,17 @@ var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__7(pla default: return $ctx.end(); } - }, $__7, this); + }, $__8, this); })); -var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__8(f, name) { +var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__9(f, name) { var platfroms, - $__3, $__4, $__5, + $__6, + $__2, $__1, - $__0, id, - $__6, + $__7, e; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) @@ -130,9 +129,9 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ $ctx.state = 28; break; case 28: - $__3 = true; - $__4 = false; - $__5 = undefined; + $__4 = true; + $__5 = false; + $__6 = undefined; $ctx.state = 24; break; case 24: @@ -140,18 +139,18 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ $ctx.state = 13; break; case 13: - $__1 = void 0, $__0 = (platfroms)[$traceurRuntime.toProperty(Symbol.iterator)](); + $__2 = void 0, $__1 = (platfroms)[$traceurRuntime.toProperty(Symbol.iterator)](); $ctx.state = 9; break; case 9: - $ctx.state = (!($__3 = ($__1 = $__0.next()).done)) ? 5 : 7; + $ctx.state = (!($__4 = ($__2 = $__1.next()).done)) ? 5 : 7; break; case 4: - $__3 = true; + $__4 = true; $ctx.state = 9; break; case 5: - id = $__1.value; + id = $__2.value; $ctx.state = 6; break; case 6: @@ -169,12 +168,12 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ case 10: $ctx.popTry(); $ctx.maybeUncatchable(); - $__6 = $ctx.storedException; + $__7 = $ctx.storedException; $ctx.state = 16; break; case 16: - $__4 = true; - $__5 = $__6; + $__5 = true; + $__6 = $__7; $ctx.state = 11; $ctx.finallyFallThrough = 15; break; @@ -184,12 +183,12 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ break; case 22: try { - if (!$__3 && $__0.return != null) { - $__0.return(); + if (!$__4 && $__1.return != null) { + $__1.return(); } } finally { - if ($__4) { - throw $__5; + if ($__5) { + throw $__6; } } $ctx.state = 20; @@ -214,9 +213,9 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ default: return $ctx.end(); } - }, $__8, this); + }, $__9, this); })); -var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__9(f, name) { +var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10(f, name) { var platfroms, order, e; @@ -277,7 +276,7 @@ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__9( default: return $ctx.end(); } - }, $__9, this); + }, $__10, this); })); var printDeviceInfo = function(deviceInfo) { console.log(("ID: " + deviceInfo.id + "\nName: " + deviceInfo.name + "\nPlatform: " + deviceInfo.platform + "\nToolkit: " + deviceInfo.toolkit + "\nCompute: " + deviceInfo.compute)); @@ -287,4 +286,4 @@ module.exports = { runOnBestDevice: runOnBestDevice, printDeviceInfo: printDeviceInfo }; -//# sourceMappingURL=data:application/json;base64,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RUFBQSxDQUFHLEVBQUEsQ0FBQzs7QUE3RTdDLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBVSxVQUFTLENBQUc7QUFDeEMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25CZXN0RGV2aWNlID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgbGV0IG9yZGVyID0gW1wiQ1VEQVwiLCBcIk9wZW5DTFwiLCBcIkNQVVwiXTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGJlc3QgYXZhaWxhYmxlIGRldmljZS5cXG5gKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAoXyhwbGF0ZnJvbXMpLmNvbnRhaW5zKG9yZGVyWzBdKSkge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzBdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMV0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMV0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzJdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcHJpbnREZXZpY2VJbmZvID0gZnVuY3Rpb24gKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 +//# sourceMappingURL=data:application/json;base64,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Q0FBQzs7QUE3RTdDLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBVSxVQUFTLENBQUc7QUFDeEMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25CZXN0RGV2aWNlID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgbGV0IG9yZGVyID0gW1wiQ1VEQVwiLCBcIk9wZW5DTFwiLCBcIkNQVVwiXTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGJlc3QgYXZhaWxhYmxlIGRldmljZS5cXG5gKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAoXyhwbGF0ZnJvbXMpLmNvbnRhaW5zKG9yZGVyWzBdKSkge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzBdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMV0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMV0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzJdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcHJpbnREZXZpY2VJbmZvID0gZnVuY3Rpb24gKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index fbefe91..2ae7e0a 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var Bluebird = require("bluebird"); var async = Bluebird.coroutine; @@ -20,9 +19,6 @@ function ANN(af, layers, range) { } } var proto = ANN.prototype; -proto.sigmoid = function(val) { - return this.af.exp(val.neg()).add(1).rhsDiv(1); -}; proto.deriv = function(out) { return out.rhsSub(1).mul(out); }; @@ -80,7 +76,7 @@ proto.forwardPropagate = function(input) { for (var i = 0; i < this.numLayers - 1; i++) { var inVec = this.addBias(this.signal[i]); var outVec = this.af.matMul(inVec, this.weights[i]); - this.signal[i + 1].set(this.sigmoid(outVec)); + this.signal[i + 1].set(this.af.sigmoid(outVec)); } }; proto.backPropagate = function(target, alpha) { @@ -95,7 +91,7 @@ proto.backPropagate = function(target, alpha) { var grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); this.weights[i].addAssign(af.transpose(grad)); outVec = this.signal[i]; - err.set(af.transpose(this.af.matMul(this.weights[i], delta))); + err.set(this.af.matMulTT(delta, this.weights[i])); err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); } }; @@ -146,7 +142,7 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, start = now(); for (j = 0; j < numBatches - 1; j++) { startPos$__0 = j * options.batchSize; - endPos$__1 = startPos$__0 + options.batchSize; + endPos$__1 = startPos$__0 + options.batchSize - 1; x = input.at(new Seq(startPos$__0, endPos$__1), af.span); y = target.at(new Seq(startPos$__0, endPos$__1), af.span); this.forwardPropagate(x); @@ -186,4 +182,4 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, }, $__11, this); })); module.exports = ANN; -//# sourceMappingURL=data:application/json;base64,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Qzs7QUFBdEYsWUFBRSxFQTdHVixDQUFBLElBQUcsS0FBSyxBQTZHc0YsQ0FBQTs7OztjQUMxRSxDQUFBLEdBQUUsQUFBQyxFQUFDO0FBRWhCLGdCQUFNLElBQUksQUFBQyxFQUFDLFNBQVMsSUFBQyxDQUFBLEVBQUksRUFBQSxHQUFDLFlBQVcsRUFBQyxDQUFBLEdBQUUsUUFBUSxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxlQUFjLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLFdBQVMsRUFBQyxDQUFDOzs7O0FBaEh4SCxhQUFHLE1BQU0sRUFBSSxDQUFBLENBbUhELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQW5IRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBbUhBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQXBIdEQsYUFBRyxZQUFZLEVBeUhKLElBQUUsQUF6SHNCLENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUF3SHRDLENBMUh1RCxDQTBIdEQsQ0FBQztBQUVGLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvYW5uLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjphbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxuZnVuY3Rpb24gQU5OKGFmLCBsYXllcnMsIHJhbmdlKSB7XG4gICAgcmFuZ2UgPSByYW5nZSB8fCAwLjA1O1xuICAgIHRoaXMuYWYgPSBhZjtcbiAgICB0aGlzLm51bUxheWVycyA9IGxheWVycy5sZW5ndGg7XG4gICAgdGhpcy5zaWduYWwgPSBbXTtcbiAgICB0aGlzLndlaWdodHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzOyBpKyspIHtcbiAgICAgICAgdGhpcy5zaWduYWwucHVzaChuZXcgYWYuQUZBcnJheSgpKTtcbiAgICAgICAgaWYgKGkgPCB0aGlzLm51bUxheWVycyAtIDEpIHtcbiAgICAgICAgICAgIGxldCB3ID0gYWYucmFuZHUobGF5ZXJzW2ldICsgMSwgbGF5ZXJzW2kgKyAxXSwgYWYuZFR5cGUuZjMyKS5tdWwocmFuZ2UpLnN1YihyYW5nZSAvIDIpO1xuICAgICAgICAgICAgdGhpcy53ZWlnaHRzLnB1c2godyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmxldCBwcm90byA9IEFOTi5wcm90b3R5cGU7XG5cbnByb3RvLnNpZ21vaWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gMSAvICgxICsgZXhwKC12YWwpKTtcbiAgICByZXR1cm4gdGhpcy5hZi5leHAodmFsLm5lZygpKS5hZGQoMSkucmhzRGl2KDEpO1xufTtcblxucHJvdG8uZGVyaXYgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgcmV0dXJuIG91dC5yaHNTdWIoMSkubXVsKG91dCk7XG59O1xuXG5wcm90by5hZGRCaWFzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWYuam9pbigxLCB0aGlzLmFmLmNvbnN0YW50KDEsIGlucHV0LmRpbXMoMCksIHRoaXMuYWYuZFR5cGUuZjMyKSwgaW5wdXQpO1xufTtcblxucHJvdG8uX2NhbGN1bGF0ZUVycm9yID0gYXN5bmMoZnVuY3Rpb24qKG91dCwgcHJlZCkge1xuICAgIGxldCBkaWYgPSBvdXQuc3ViKHByZWQpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeWllbGQgdGhpcy5hZi5zdW1Bc3luYyhkaWYubXVsKGRpZikpKTtcbn0pO1xuXG5wcm90by5mb3J3YXJkUHJvcGFnYXRlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdGhpcy5zaWduYWxbMF0uc2V0KGlucHV0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzIC0gMTsgaSsrKSB7XG4gICAgICAgIGxldCBpblZlYyA9IHRoaXMuYWRkQmlhcyh0aGlzLnNpZ25hbFtpXSk7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLmFmLm1hdE11bChpblZlYywgdGhpcy53ZWlnaHRzW2ldKTtcbiAgICAgICAgdGhpcy5zaWduYWxbaSArIDFdLnNldCh0aGlzLnNpZ21vaWQob3V0VmVjKSk7XG4gICAgfVxufTtcblxucHJvdG8uYmFja1Byb3BhZ2F0ZSA9IGZ1bmN0aW9uICh0YXJnZXQsIGFscGhhKSB7XG4gICAgbGV0IGFmID0gdGhpcy5hZjtcbiAgICBsZXQgU2VxID0gdGhpcy5hZi5TZXE7XG5cbiAgICAvLyBHZXQgZXJyb3IgZm9yIG91dHB1dCBsYXllclxuICAgIGxldCBvdXRWZWMgPSB0aGlzLnNpZ25hbFt0aGlzLm51bUxheWVycyAtIDFdO1xuICAgIGxldCBlcnIgPSBvdXRWZWMuc3ViKHRhcmdldCk7XG4gICAgbGV0IG0gPSB0YXJnZXQuZGltcygwKTtcblxuICAgIGZvciAobGV0IGkgPSB0aGlzLm51bUxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGxldCBpblZlYyA9IHRoaXMuYWRkQmlhcyh0aGlzLnNpZ25hbFtpXSk7XG4gICAgICAgIGxldCBkZWx0YSA9IGFmLnRyYW5zcG9zZSh0aGlzLmRlcml2KG91dFZlYykubXVsKGVycikpO1xuXG4gICAgICAgIC8vIEFkanVzdCB3ZWlnaHRzXG4gICAgICAgIGxldCBncmFkID0gYWYubWF0TXVsKGRlbHRhLCBpblZlYykubXVsKGFscGhhKS5uZWcoKS5kaXYobSk7XG4gICAgICAgIHRoaXMud2VpZ2h0c1tpXS5hZGRBc3NpZ24oYWYudHJhbnNwb3NlKGdyYWQpKTtcblxuICAgICAgICAvLyBJbnB1dCB0byBjdXJyZW50IGxheWVyIGlzIG91dHB1dCBvZiBwcmV2aW91c1xuICAgICAgICBvdXRWZWMgPSB0aGlzLnNpZ25hbFtpXTtcbiAgICAgICAgZXJyLnNldChhZi50cmFuc3Bvc2UodGhpcy5hZi5tYXRNdWwodGhpcy53ZWlnaHRzW2ldLCBkZWx0YSkpKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIGVycm9yIG9mIGJpYXMgYW5kIHByb3BhZ2F0ZSBiYWNrd2FyZFxuICAgICAgICBlcnIuc2V0KGVyci5hdChhZi5zcGFuLCBuZXcgU2VxKDEsIG91dFZlYy5kaW1zKDEpKSkpO1xuICAgIH1cbn07XG5cbnByb3RvLnByZWRpY3QgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoaW5wdXQpO1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFt0aGlzLm51bUxheWVycyAtIDFdLmNvcHkoKTtcbn07XG5cbnByb3RvLnRyYWluID0gYXN5bmMoZnVuY3Rpb24qKGlucHV0LCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBsZXQgYWYgPSB0aGlzLmFmO1xuICAgIGxldCBTZXEgPSB0aGlzLmFmLlNlcTtcblxuICAgIGxldCBudW1TYW1wbGVzID0gaW5wdXQuZGltcygwKTtcbiAgICBsZXQgbnVtQmF0Y2hlcyA9IG51bVNhbXBsZXMgLyBvcHRpb25zLmJhdGNoU2l6ZTtcblxuICAgIGxldCBlcnIgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLm1heEVwb2NoczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQmF0Y2hlcyAtIDE7IGorKykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0UG9zID0gaiAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICAgICAgbGV0IGVuZFBvcyA9IHN0YXJ0UG9zICsgb3B0aW9ucy5iYXRjaFNpemU7XG5cbiAgICAgICAgICAgIGxldCB4ID0gaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3Bhbik7XG4gICAgICAgICAgICBsZXQgeSA9IHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcblxuICAgICAgICAgICAgdGhpcy5mb3J3YXJkUHJvcGFnYXRlKHgpO1xuICAgICAgICAgICAgdGhpcy5iYWNrUHJvcGFnYXRlKHksIG9wdGlvbnMuYWxwaGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgd2l0aCBsYXN0IGJhdGNoXG4gICAgICAgIGxldCBzdGFydFBvcyA9IChudW1CYXRjaGVzIC0gMSkgKiBvcHRpb25zLmJhdGNoU2l6ZTtcbiAgICAgICAgbGV0IGVuZFBvcyA9IG51bVNhbXBsZXMgLSAxO1xuICAgICAgICBsZXQgb3V0VmVjID0gdGhpcy5wcmVkaWN0KGlucHV0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pKTtcbiAgICAgICAgZXJyID0geWllbGQgdGhpcy5fY2FsY3VsYXRlRXJyb3Iob3V0VmVjLCB0YXJnZXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBjb25zdCBlbmQgPSBub3coKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgRXBvY2g6ICR7aSArIDF9LCBFcnJvcjogJHtlcnIudG9GaXhlZCg0KX0sIER1cmF0aW9uOiAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCg0KX0gc2Vjb25kc2ApO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbnZlcmdlbmNlIGNyaXRlcmlhIGhhcyBiZWVuIG1ldFxuICAgICAgICBpZiAoZXJyIDwgb3B0aW9ucy5tYXhFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYENvbnZlcmdlZCBvbiBFcG9jOiAke2kgKyAxfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQU5OOyJdfQ== +//# sourceMappingURL=data:application/json;base64,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QSxJQUFHLEdBQUcsSUFBSSxDQUFDO0FBR3JCLEFBQUksSUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLElBQUcsT0FBTyxDQUFFLElBQUcsVUFBVSxFQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQzVDLEFBQUksSUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE1BQUssSUFBSSxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDNUIsQUFBSSxJQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsTUFBSyxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztBQUV0QixhQUFhLENBQUEsSUFBRyxVQUFVLEVBQUksRUFBQSxDQUFHLENBQUEsQ0FBQSxHQUFLLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBRSxDQUFHO0FBQzFDLEFBQUksTUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLElBQUcsUUFBUSxBQUFDLENBQUMsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQztBQUN4QyxBQUFJLE1BQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxFQUFDLFVBQVUsQUFBQyxDQUFDLElBQUcsTUFBTSxBQUFDLENBQUMsTUFBSyxDQUFDLElBQUksQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7QUFHckQsQUFBSSxNQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsRUFBQyxPQUFPLEFBQUMsQ0FBQyxLQUFJLENBQUcsTUFBSSxDQUFDLElBQUksQUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLEFBQUMsRUFBQyxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztBQUMxRCxPQUFHLFFBQVEsQ0FBRSxDQUFBLENBQUMsVUFBVSxBQUFDLENBQUMsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRzdDLFNBQUssRUFBSSxDQUFBLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ3ZCLE1BQUUsSUFBSSxBQUFDLENBQUMsSUFBRyxHQUFHLFNBQVMsQUFBQyxDQUFDLEtBQUksQ0FBRyxDQUFBLElBQUcsUUFB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LENBQUEsQ0FBQyxlQUFjLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLFdBQVMsRUFBQyxDQUFDOzs7O0FBM0d4SCxhQUFHLE1BQU0sRUFBSSxDQUFBLENBOEdELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQTlHRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBOEdBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQS9HdEQsYUFBRyxZQUFZLEVBb0hKLElBQUUsQUFwSHNCLENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUFtSHRDLENBckh1RCxDQXFIdEQsQ0FBQztBQUVGLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvYW5uLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjphbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxuZnVuY3Rpb24gQU5OKGFmLCBsYXllcnMsIHJhbmdlKSB7XG4gICAgcmFuZ2UgPSByYW5nZSB8fCAwLjA1O1xuICAgIHRoaXMuYWYgPSBhZjtcbiAgICB0aGlzLm51bUxheWVycyA9IGxheWVycy5sZW5ndGg7XG4gICAgdGhpcy5zaWduYWwgPSBbXTtcbiAgICB0aGlzLndlaWdodHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzOyBpKyspIHtcbiAgICAgICAgdGhpcy5zaWduYWwucHVzaChuZXcgYWYuQUZBcnJheSgpKTtcbiAgICAgICAgaWYgKGkgPCB0aGlzLm51bUxheWVycyAtIDEpIHtcbiAgICAgICAgICAgIGxldCB3ID0gYWYucmFuZHUobGF5ZXJzW2ldICsgMSwgbGF5ZXJzW2kgKyAxXSwgYWYuZFR5cGUuZjMyKS5tdWwocmFuZ2UpLnN1YihyYW5nZSAvIDIpO1xuICAgICAgICAgICAgdGhpcy53ZWlnaHRzLnB1c2godyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmxldCBwcm90byA9IEFOTi5wcm90b3R5cGU7XG5cbnByb3RvLmRlcml2ID0gZnVuY3Rpb24gKG91dCkge1xuICAgIHJldHVybiBvdXQucmhzU3ViKDEpLm11bChvdXQpO1xufTtcblxucHJvdG8uYWRkQmlhcyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLmFmLmpvaW4oMSwgdGhpcy5hZi5jb25zdGFudCgxLCBpbnB1dC5kaW1zKDApLCB0aGlzLmFmLmRUeXBlLmYzMiksIGlucHV0KTtcbn07XG5cbnByb3RvLl9jYWxjdWxhdGVFcnJvciA9IGFzeW5jKGZ1bmN0aW9uKihvdXQsIHByZWQpIHtcbiAgICBsZXQgZGlmID0gb3V0LnN1YihwcmVkKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHlpZWxkIHRoaXMuYWYuc3VtQXN5bmMoZGlmLm11bChkaWYpKSk7XG59KTtcblxucHJvdG8uZm9yd2FyZFByb3BhZ2F0ZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHRoaXMuc2lnbmFsWzBdLnNldChpbnB1dCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bUxheWVycyAtIDE7IGkrKykge1xuICAgICAgICBsZXQgaW5WZWMgPSB0aGlzLmFkZEJpYXModGhpcy5zaWduYWxbaV0pO1xuICAgICAgICBsZXQgb3V0VmVjID0gdGhpcy5hZi5tYXRNdWwoaW5WZWMsIHRoaXMud2VpZ2h0c1tpXSk7XG4gICAgICAgIHRoaXMuc2lnbmFsW2kgKyAxXS5zZXQodGhpcy5hZi5zaWdtb2lkKG91dFZlYykpO1xuICAgIH1cbn07XG5cbnByb3RvLmJhY2tQcm9wYWdhdGUgPSBmdW5jdGlvbiAodGFyZ2V0LCBhbHBoYSkge1xuICAgIGxldCBhZiA9IHRoaXMuYWY7XG4gICAgbGV0IFNlcSA9IHRoaXMuYWYuU2VxO1xuXG4gICAgLy8gR2V0IGVycm9yIGZvciBvdXRwdXQgbGF5ZXJcbiAgICBsZXQgb3V0VmVjID0gdGhpcy5zaWduYWxbdGhpcy5udW1MYXllcnMgLSAxXTtcbiAgICBsZXQgZXJyID0gb3V0VmVjLnN1Yih0YXJnZXQpO1xuICAgIGxldCBtID0gdGFyZ2V0LmRpbXMoMCk7XG5cbiAgICBmb3IgKGxldCBpID0gdGhpcy5udW1MYXllcnMgLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgICBsZXQgaW5WZWMgPSB0aGlzLmFkZEJpYXModGhpcy5zaWduYWxbaV0pO1xuICAgICAgICBsZXQgZGVsdGEgPSBhZi50cmFuc3Bvc2UodGhpcy5kZXJpdihvdXRWZWMpLm11bChlcnIpKTtcblxuICAgICAgICAvLyBBZGp1c3Qgd2VpZ2h0c1xuICAgICAgICBsZXQgZ3JhZCA9IGFmLm1hdE11bChkZWx0YSwgaW5WZWMpLm11bChhbHBoYSkubmVnKCkuZGl2KG0pO1xuICAgICAgICB0aGlzLndlaWdodHNbaV0uYWRkQXNzaWduKGFmLnRyYW5zcG9zZShncmFkKSk7XG5cbiAgICAgICAgLy8gSW5wdXQgdG8gY3VycmVudCBsYXllciBpcyBvdXRwdXQgb2YgcHJldmlvdXNcbiAgICAgICAgb3V0VmVjID0gdGhpcy5zaWduYWxbaV07XG4gICAgICAgIGVyci5zZXQodGhpcy5hZi5tYXRNdWxUVChkZWx0YSwgdGhpcy53ZWlnaHRzW2ldKSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlcnJvciBvZiBiaWFzIGFuZCBwcm9wYWdhdGUgYmFja3dhcmRcbiAgICAgICAgZXJyLnNldChlcnIuYXQoYWYuc3BhbiwgbmV3IFNlcSgxLCBvdXRWZWMuZGltcygxKSkpKTtcbiAgICB9XG59O1xuXG5wcm90by5wcmVkaWN0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdGhpcy5mb3J3YXJkUHJvcGFnYXRlKGlucHV0KTtcbiAgICByZXR1cm4gdGhpcy5zaWduYWxbdGhpcy5udW1MYXllcnMgLSAxXS5jb3B5KCk7XG59O1xuXG5wcm90by50cmFpbiA9IGFzeW5jKGZ1bmN0aW9uKihpbnB1dCwgdGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgbGV0IGFmID0gdGhpcy5hZjtcbiAgICBsZXQgU2VxID0gdGhpcy5hZi5TZXE7XG5cbiAgICBsZXQgbnVtU2FtcGxlcyA9IGlucHV0LmRpbXMoMCk7XG4gICAgbGV0IG51bUJhdGNoZXMgPSBudW1TYW1wbGVzIC8gb3B0aW9ucy5iYXRjaFNpemU7XG5cbiAgICBsZXQgZXJyID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5tYXhFcG9jaHM7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUJhdGNoZXMgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGxldCBzdGFydFBvcyA9IGogKiBvcHRpb25zLmJhdGNoU2l6ZTtcbiAgICAgICAgICAgIGxldCBlbmRQb3MgPSBzdGFydFBvcyArIG9wdGlvbnMuYmF0Y2hTaXplIC0gMTtcblxuICAgICAgICAgICAgbGV0IHggPSBpbnB1dC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcbiAgICAgICAgICAgIGxldCB5ID0gdGFyZ2V0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pO1xuXG4gICAgICAgICAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoeCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tQcm9wYWdhdGUoeSwgb3B0aW9ucy5hbHBoYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB3aXRoIGxhc3QgYmF0Y2hcbiAgICAgICAgbGV0IHN0YXJ0UG9zID0gKG51bUJhdGNoZXMgLSAxKSAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICBsZXQgZW5kUG9zID0gbnVtU2FtcGxlcyAtIDE7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLnByZWRpY3QoaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBlcnIgPSB5aWVsZCB0aGlzLl9jYWxjdWxhdGVFcnJvcihvdXRWZWMsIHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGBFcG9jaDogJHtpICsgMX0sIEVycm9yOiAke2Vyci50b0ZpeGVkKDQpfSwgRHVyYXRpb246ICR7KChlbmQgLSBzdGFydCkgLyAxMDAwKS50b0ZpeGVkKDQpfSBzZWNvbmRzYCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udmVyZ2VuY2UgY3JpdGVyaWEgaGFzIGJlZW4gbWV0XG4gICAgICAgIGlmIChlcnIgPCBvcHRpb25zLm1heEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVyZ2VkIG9uIEVwb2M6ICR7aSArIDF9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnI7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBTk47Il19 diff --git a/examples/es5/machine-learning/mnist.js b/examples/es5/machine-learning/mnist.js index c171883..5edcf88 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var fs = Bluebird.promisifyAll(require("fs-extra")); @@ -10,32 +9,32 @@ var debug = require("debug")("af:mnist"); var _ = require("lodash"); var assert = require("better-assert"); var path = require("path"); -var readData = async($traceurRuntime.initGeneratorFunction(function $__4(f, data) { +var readData = async($traceurRuntime.initGeneratorFunction(function $__5(f, data) { var bytesRead, - $__5, $__6, $__7, $__8, - $__9; + $__9, + $__10; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: - $__5 = fs.readAsync; - $__6 = data.length; - $__7 = $__5.call(fs, f, data, 0, $__6, null); + $__6 = fs.readAsync; + $__7 = data.length; + $__8 = $__6.call(fs, f, data, 0, $__7, null); $ctx.state = 6; break; case 6: $ctx.state = 2; - return $__7; + return $__8; case 2: - $__8 = $ctx.sent; + $__9 = $ctx.sent; $ctx.state = 4; break; case 4: - $__9 = $__8[0]; - bytesRead = $__9; + $__10 = $__9[0]; + bytesRead = $__10; $ctx.state = 8; break; case 8: @@ -47,9 +46,9 @@ var readData = async($traceurRuntime.initGeneratorFunction(function $__4(f, data default: return $ctx.end(); } - }, $__4, this); + }, $__5, this); })); -var readIdx = async($traceurRuntime.initGeneratorFunction(function $__10(path, type) { +var readIdx = async($traceurRuntime.initGeneratorFunction(function $__11(path, type) { var file, d, numDims, @@ -59,7 +58,7 @@ var readIdx = async($traceurRuntime.initGeneratorFunction(function $__10(path, t dim, bdata, data, - i$__0, + i$__1, byte; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) @@ -132,9 +131,9 @@ var readIdx = async($traceurRuntime.initGeneratorFunction(function $__10(path, t break; case 21: data = new Buffer(bdata.length * type.size); - for (i$__0 = 0; i$__0 < bdata.length; i$__0++) { - byte = bdata[i$__0]; - type.set(data, i$__0 * type.size, byte); + for (i$__1 = 0; i$__1 < bdata.length; i$__1++) { + byte = bdata[i$__1]; + type.set(data, i$__1 * type.size, byte); } $ctx.state = 31; break; @@ -164,9 +163,9 @@ var readIdx = async($traceurRuntime.initGeneratorFunction(function $__10(path, t default: return $ctx.end(); } - }, $__10, this); + }, $__11, this); })); -var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(af, expandLabels, frac) { +var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__12(af, expandLabels, frac) { var dataRoot, AFArray, Dim4, @@ -190,9 +189,9 @@ var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(a i, idx, label, - i$__1, - idx$__2, - label$__3, + i$__2, + idx$__3, + label$__4, labels; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) @@ -274,11 +273,11 @@ var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(a assert(label >= 0 && label <= 9); trainLabels.set(label, i, 1); } - for (i$__1 = 0; i$__1 < numTest; i$__1++) { - idx$__2 = uint.get(hTestIdx, i$__1 * uint.size); - label$__3 = uint.get(labelData.data, idx$__2 * uint.size); - assert(label$__3 >= 0 && label$__3 <= 9); - testLabels.set(label$__3, i$__1, 1); + for (i$__2 = 0; i$__2 < numTest; i$__2++) { + idx$__3 = uint.get(hTestIdx, i$__2 * uint.size); + label$__4 = uint.get(labelData.data, idx$__3 * uint.size); + assert(label$__4 >= 0 && label$__4 <= 9); + testLabels.set(label$__4, i$__2, 1); } $ctx.state = 24; break; @@ -309,7 +308,7 @@ var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(a default: return $ctx.end(); } - }, $__11, this); + }, $__12, this); }))}; module.exports = mnist; -//# sourceMappingURL=data:application/json;base64,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S0FBSyxDQUFDO0FBQ3BELG1CQUFLLEFBQUMsQ0FBQyxZQUFTLEVBQUEsQ0FBQSxFQUFLLGFBQVMsRUFBQSxDQUFDLENBQUM7QUFDaEMsdUJBQVMsSUFBSSxBQUFDLGtCQUFXLEVBQUEsQ0FBQyxDQUFDO1lBQy9CO0FBQUE7Ozs7aUJBR21CLENBQUEsT0FBTSxZQUFZLEFBQUMsQ0FBQyxTQUFRLEtBQUssQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUcsQ0FBQSxTQUFRLEtBQUssQ0FBQzs7bUJBdkhsRyxDQUFBLElBQUcsS0FBSzs7OztBQXdISSxzQkFBVSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxZQUFXLENBQUMsQ0FBQztBQUNyQyxxQkFBUyxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxXQUFVLENBQUMsQ0FBQzs7OztBQXpIL0MsZUFBRyxZQUFZLEVBNEhBO0FBQ0gsdUJBQVMsQ0FBRyxXQUFTO0FBQ3JCLHFCQUFPLENBQUcsU0FBTztBQUNqQixvQkFBTSxDQUFHLFFBQU07QUFDZix3QkFBVSxDQUFHLFlBQVU7QUFDdkIsdUJBQVMsQ0FBRyxXQUFTO0FBQ3JCLHdCQUFVLENBQUcsWUFBVTtBQUN2Qix1QkFBUyxDQUFHLFdBQVM7QUFBQSxZQUN6QixBQXBJMkIsQ0FBQTs7OztBQUFuQyxpQkFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsSUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7RUFtSWxDLENBckltRCxDQXFJbEQsQ0FDTCxDQUFDO0FBRUQsS0FBSyxRQUFRLEVBQUksTUFBSSxDQUFDO0FBQUEiLCJmaWxlIjoibWFjaGluZS1sZWFybmluZy9tbmlzdC5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGZzID0gQmx1ZWJpcmQucHJvbWlzaWZ5QWxsKHJlcXVpcmUoXCJmcy1leHRyYVwiKSk7XG5sZXQgcmVmID0gcmVxdWlyZShcInJlZlwiKTtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcbmxldCB1aW50ID0gcmVmLnR5cGVzLnVpbnQ7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjptbmlzdFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5cbmxldCByZWFkRGF0YSA9IGFzeW5jKGZ1bmN0aW9uKihmLCBkYXRhKSB7XG4gICAgbGV0IGJ5dGVzUmVhZCA9ICh5aWVsZCBmcy5yZWFkQXN5bmMoZiwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIG51bGwpKVswXTtcbiAgICBpZiAoYnl0ZXNSZWFkICE9PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHJlYWRpbmcgZXJyb3IhXCIpO1xuICAgIH1cbn0pO1xuXG5sZXQgcmVhZElkeCA9IGFzeW5jKGZ1bmN0aW9uKihwYXRoLCB0eXBlKSB7XG4gICAgbGV0IGZpbGUgPSB5aWVsZCBmcy5vcGVuQXN5bmMocGF0aCwgXCJyXCIpO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBkID0gbmV3IEJ1ZmZlcig0KTtcblxuICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcblxuICAgICAgICBpZiAoZFsyXSAhPSA4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBkYXRhIHR5cGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1EaW1zID0gZFszXTtcblxuICAgICAgICAvLyBSZWFkIHRoZSBkaW1lbnNpb25zXG4gICAgICAgIGxldCBlbGVtID0gMTtcbiAgICAgICAgbGV0IGRpbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1EaW1zOyBpKyspIHtcbiAgICAgICAgICAgIHlpZWxkIHJlYWREYXRhKGZpbGUsIGQpO1xuICAgICAgICAgICAgbGV0IGRpbSA9IGQucmVhZFVJbnQzMkJFKCk7XG4gICAgICAgICAgICBlbGVtICo9IGRpbTtcbiAgICAgICAgICAgIGRpbXMucHVzaChkaW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGF0YVxuICAgICAgICBsZXQgYmRhdGEgPSBuZXcgQnVmZmVyKGVsZW0pO1xuICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBiZGF0YSk7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEJ1ZmZlcihiZGF0YS5sZW5ndGggKiB0eXBlLnNpemUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYnl0ZSA9IGJkYXRhW2ldO1xuICAgICAgICAgICAgdHlwZS5zZXQoZGF0YSwgaSAqIHR5cGUuc2l6ZSwgYnl0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbnVtRGltczogbnVtRGltcyxcbiAgICAgICAgICAgIGRpbXM6IGRpbXMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB5aWVsZCBmcy5jbG9zZUFzeW5jKGZpbGUpO1xuICAgIH1cbn0pO1xuXG5sZXQgbW5pc3QgPSB7XG4gICAgc2V0dXA6IGFzeW5jKGZ1bmN0aW9uKihhZiwgZXhwYW5kTGFiZWxzLCBmcmFjKSB7XG4gICAgICAgIGZyYWMgPSBNYXRoLm1pbihmcmFjIHx8IDEuMCwgMC44KTtcbiAgICAgICAgbGV0IGRhdGFSb290ID0gXCIuLi8uLi9tbF9sYWIvZGF0YS9tbmlzdFwiO1xuICAgICAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG4gICAgICAgIGxldCBEaW00ID0gYWYuRGltNDtcblxuICAgICAgICBsZXQgaW1hZ2VEYXRhID0geWllbGQgcmVhZElkeChwYXRoLmpvaW4oZGF0YVJvb3QsIFwiaW1hZ2VzLXN1YnNldFwiKSwgZmxvYXQpO1xuICAgICAgICBsZXQgbGFiZWxEYXRhID0geWllbGQgcmVhZElkeChwYXRoLmpvaW4oZGF0YVJvb3QsIFwibGFiZWxzLXN1YnNldFwiKSwgdWludCk7XG5cbiAgICAgICAgbGV0IHJJRGltcyA9IG5ldyBEaW00KF8oaW1hZ2VEYXRhLmRpbXMpLnJldmVyc2UoKS52YWx1ZSgpKTtcbiAgICAgICAgbGV0IGltYWdlcyA9IHlpZWxkIEFGQXJyYXkuY3JlYXRlQXN5bmMocklEaW1zLCBhZi5kVHlwZS5mMzIsIGltYWdlRGF0YS5kYXRhKTtcblxuICAgICAgICBsZXQgciA9IGFmLnJhbmR1KDEwMDAwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICBsZXQgY29uZCA9IHIubHQoZnJhYyk7XG4gICAgICAgIGxldCB0cmFpbkluZGljZXMgPSBhZi53aGVyZShjb25kKTtcbiAgICAgICAgbGV0IHRlc3RJbmRpY2VzID0gYWYud2hlcmUoY29uZC5ub3QoKSk7XG5cbiAgICAgICAgbGV0IHRyYWluSW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdHJhaW5JbmRpY2VzLCAyKS5kaXYoMjU1KTtcbiAgICAgICAgbGV0IHRlc3RJbWFnZXMgPSBhZi5sb29rdXAoaW1hZ2VzLCB0ZXN0SW5kaWNlcywgMikuZGl2KDI1NSk7XG5cbiAgICAgICAgbGV0IG51bUNsYXNzZXMgPSAxMDtcbiAgICAgICAgbGV0IG51bVRyYWluID0gdHJhaW5JbWFnZXMuZGltcygyKTtcbiAgICAgICAgbGV0IG51bVRlc3QgPSB0ZXN0SW1hZ2VzLmRpbXMoMik7XG5cbiAgICAgICAgZGVidWcoYFRyYWluaW5nIHNhbXBsZSBjb3VudDogJHtudW1UcmFpbn1gKTtcbiAgICAgICAgZGVidWcoYFRlc3Qgc2FtcGxlIGNvdW50OiAke251bVRlc3R9YCk7XG5cbiAgICAgICAgbGV0IHRyYWluTGFiZWxzO1xuICAgICAgICBsZXQgdGVzdExhYmVscztcblxuICAgICAgICBpZiAoZXhwYW5kTGFiZWxzKSB7XG4gICAgICAgICAgICB0cmFpbkxhYmVscyA9IGFmLmNvbnN0YW50KDAsIG51bUNsYXNzZXMsIG51bVRyYWluLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgdGVzdExhYmVscyA9IGFmLmNvbnN0YW50KDAsIG51bUNsYXNzZXMsIG51bVRlc3QsIGFmLmRUeXBlLmYzMik7XG5cbiAgICAgICAgICAgIGFzc2VydCh0cmFpbkluZGljZXMudHlwZSgpID09PSBhZi5kVHlwZS51MzIpO1xuICAgICAgICAgICAgYXNzZXJ0KHRlc3RJbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcblxuICAgICAgICAgICAgbGV0IGhUcmFpbklkeCA9IHlpZWxkIHRyYWluSW5kaWNlcy5ob3N0QXN5bmMoKTtcbiAgICAgICAgICAgIGxldCBoVGVzdElkeCA9IHlpZWxkIHRlc3RJbmRpY2VzLmhvc3RBc3luYygpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRyYWluOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRyYWluSWR4LCBpICogdWludC5zaXplKTtcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSB1aW50LmdldChsYWJlbERhdGEuZGF0YSwgaWR4ICogdWludC5zaXplKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobGFiZWwgPj0gMCAmJiBsYWJlbCA8PSA5KTtcbiAgICAgICAgICAgICAgICB0cmFpbkxhYmVscy5zZXQobGFiZWwsIGksIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRlc3Q7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBpZHggPSB1aW50LmdldChoVGVzdElkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdGVzdExhYmVscy5zZXQobGFiZWwsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhYmVscyA9IHlpZWxkIEFGQXJyYXkuY3JlYXRlQXN5bmMobGFiZWxEYXRhLmRpbXNbMF0sIGFmLmRUeXBlLnUzMiwgbGFiZWxEYXRhLmRhdGEpO1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBsYWJlbHMuYXQodHJhaW5JbmRpY2VzKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBsYWJlbHMuYXQodGVzdEluZGljZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bUNsYXNzZXM6IG51bUNsYXNzZXMsXG4gICAgICAgICAgICBudW1UcmFpbjogbnVtVHJhaW4sXG4gICAgICAgICAgICBudW1UZXN0OiBudW1UZXN0LFxuICAgICAgICAgICAgdHJhaW5JbWFnZXM6IHRyYWluSW1hZ2VzLFxuICAgICAgICAgICAgdGVzdEltYWdlczogdGVzdEltYWdlcyxcbiAgICAgICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgICAgIHRlc3RMYWJlbHM6IHRlc3RMYWJlbHNcbiAgICAgICAgfTtcbiAgICB9KVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtbmlzdDsiXX0= +//# sourceMappingURL=data:application/json;base64,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RCxtQkFBSyxBQUFDLENBQUMsWUFBUyxFQUFBLENBQUEsRUFBSyxhQUFTLEVBQUEsQ0FBQyxDQUFDO0FBQ2hDLHVCQUFTLElBQUksQUFBQyxrQkFBVyxFQUFBLENBQUMsQ0FBQztZQUMvQjtBQUFBOzs7O2lCQUdtQixDQUFBLE9BQU0sWUFBWSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUUsQ0FBQSxDQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFHLENBQUEsU0FBUSxLQUFLLENBQUM7O21CQXZIbEcsQ0FBQSxJQUFHLEtBQUs7Ozs7QUF3SEksc0JBQVUsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsWUFBVyxDQUFDLENBQUM7QUFDckMscUJBQVMsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsV0FBVSxDQUFDLENBQUM7Ozs7QUF6SC9DLGVBQUcsWUFBWSxFQTRIQTtBQUNILHVCQUFTLENBQUcsV0FBUztBQUNyQixxQkFBTyxDQUFHLFNBQU87QUFDakIsb0JBQU0sQ0FBRyxRQUFNO0FBQ2Ysd0JBQVUsQ0FBRyxZQUFVO0FBQ3ZCLHVCQUFTLENBQUcsV0FBUztBQUNyQix3QkFBVSxDQUFHLFlBQVU7QUFDdkIsdUJBQVMsQ0FBRyxXQUFTO0FBQUEsWUFDekIsQUFwSTJCLENBQUE7Ozs7QUFBbkMsaUJBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLElBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0VBbUlsQyxDQXJJbUQsQ0FxSWxELENBQ0wsQ0FBQztBQUVELEtBQUssUUFBUSxFQUFJLE1BQUksQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvbW5pc3QuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBmcyA9IEJsdWViaXJkLnByb21pc2lmeUFsbChyZXF1aXJlKFwiZnMtZXh0cmFcIikpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgZmxvYXQgPSByZWYudHlwZXMuZmxvYXQ7XG5sZXQgdWludCA9IHJlZi50eXBlcy51aW50O1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6bW5pc3RcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG5sZXQgcmVhZERhdGEgPSBhc3luYyhmdW5jdGlvbiooZiwgZGF0YSkge1xuICAgIGxldCBieXRlc1JlYWQgPSAoeWllbGQgZnMucmVhZEFzeW5jKGYsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBudWxsKSlbMF07XG4gICAgaWYgKGJ5dGVzUmVhZCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSByZWFkaW5nIGVycm9yIVwiKTtcbiAgICB9XG59KTtcblxubGV0IHJlYWRJZHggPSBhc3luYyhmdW5jdGlvbioocGF0aCwgdHlwZSkge1xuICAgIGxldCBmaWxlID0geWllbGQgZnMub3BlbkFzeW5jKHBhdGgsIFwiclwiKTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgZCA9IG5ldyBCdWZmZXIoNCk7XG5cbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgZCk7XG5cbiAgICAgICAgaWYgKGRbMl0gIT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtRGltcyA9IGRbM107XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGltZW5zaW9uc1xuICAgICAgICBsZXQgZWxlbSA9IDE7XG4gICAgICAgIGxldCBkaW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRGltczsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcbiAgICAgICAgICAgIGxldCBkaW0gPSBkLnJlYWRVSW50MzJCRSgpO1xuICAgICAgICAgICAgZWxlbSAqPSBkaW07XG4gICAgICAgICAgICBkaW1zLnB1c2goZGltKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYWQgdGhlIGRhdGFcbiAgICAgICAgbGV0IGJkYXRhID0gbmV3IEJ1ZmZlcihlbGVtKTtcbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgYmRhdGEpO1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBCdWZmZXIoYmRhdGEubGVuZ3RoICogdHlwZS5zaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ5dGUgPSBiZGF0YVtpXTtcbiAgICAgICAgICAgIHR5cGUuc2V0KGRhdGEsIGkgKiB0eXBlLnNpemUsIGJ5dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bURpbXM6IG51bURpbXMsXG4gICAgICAgICAgICBkaW1zOiBkaW1zLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgeWllbGQgZnMuY2xvc2VBc3luYyhmaWxlKTtcbiAgICB9XG59KTtcblxubGV0IG1uaXN0ID0ge1xuICAgIHNldHVwOiBhc3luYyhmdW5jdGlvbiooYWYsIGV4cGFuZExhYmVscywgZnJhYykge1xuICAgICAgICBmcmFjID0gTWF0aC5taW4oZnJhYyB8fCAxLjAsIDAuOCk7XG4gICAgICAgIGxldCBkYXRhUm9vdCA9IFwiLi4vLi4vbWxfbGFiL2RhdGEvbW5pc3RcIjtcbiAgICAgICAgbGV0IEFGQXJyYXkgPSBhZi5BRkFycmF5O1xuICAgICAgICBsZXQgRGltNCA9IGFmLkRpbTQ7XG5cbiAgICAgICAgbGV0IGltYWdlRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImltYWdlcy1zdWJzZXRcIiksIGZsb2F0KTtcbiAgICAgICAgbGV0IGxhYmVsRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImxhYmVscy1zdWJzZXRcIiksIHVpbnQpO1xuXG4gICAgICAgIGxldCBySURpbXMgPSBuZXcgRGltNChfKGltYWdlRGF0YS5kaW1zKS5yZXZlcnNlKCkudmFsdWUoKSk7XG4gICAgICAgIGxldCBpbWFnZXMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKHJJRGltcywgYWYuZFR5cGUuZjMyLCBpbWFnZURhdGEuZGF0YSk7XG5cbiAgICAgICAgbGV0IHIgPSBhZi5yYW5kdSgxMDAwMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgbGV0IGNvbmQgPSByLmx0KGZyYWMpO1xuICAgICAgICBsZXQgdHJhaW5JbmRpY2VzID0gYWYud2hlcmUoY29uZCk7XG4gICAgICAgIGxldCB0ZXN0SW5kaWNlcyA9IGFmLndoZXJlKGNvbmQubm90KCkpO1xuXG4gICAgICAgIGxldCB0cmFpbkltYWdlcyA9IGFmLmxvb2t1cChpbWFnZXMsIHRyYWluSW5kaWNlcywgMikuZGl2KDI1NSk7XG4gICAgICAgIGxldCB0ZXN0SW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdGVzdEluZGljZXMsIDIpLmRpdigyNTUpO1xuXG4gICAgICAgIGxldCBudW1DbGFzc2VzID0gMTA7XG4gICAgICAgIGxldCBudW1UcmFpbiA9IHRyYWluSW1hZ2VzLmRpbXMoMik7XG4gICAgICAgIGxldCBudW1UZXN0ID0gdGVzdEltYWdlcy5kaW1zKDIpO1xuXG4gICAgICAgIGRlYnVnKGBUcmFpbmluZyBzYW1wbGUgY291bnQ6ICR7bnVtVHJhaW59YCk7XG4gICAgICAgIGRlYnVnKGBUZXN0IHNhbXBsZSBjb3VudDogJHtudW1UZXN0fWApO1xuXG4gICAgICAgIGxldCB0cmFpbkxhYmVscztcbiAgICAgICAgbGV0IHRlc3RMYWJlbHM7XG5cbiAgICAgICAgaWYgKGV4cGFuZExhYmVscykge1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UcmFpbiwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UZXN0LCBhZi5kVHlwZS5mMzIpO1xuXG4gICAgICAgICAgICBhc3NlcnQodHJhaW5JbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcbiAgICAgICAgICAgIGFzc2VydCh0ZXN0SW5kaWNlcy50eXBlKCkgPT09IGFmLmRUeXBlLnUzMik7XG5cbiAgICAgICAgICAgIGxldCBoVHJhaW5JZHggPSB5aWVsZCB0cmFpbkluZGljZXMuaG9zdEFzeW5jKCk7XG4gICAgICAgICAgICBsZXQgaFRlc3RJZHggPSB5aWVsZCB0ZXN0SW5kaWNlcy5ob3N0QXN5bmMoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UcmFpbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkeCA9IHVpbnQuZ2V0KGhUcmFpbklkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdHJhaW5MYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UZXN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRlc3RJZHgsIGkgKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHVpbnQuZ2V0KGxhYmVsRGF0YS5kYXRhLCBpZHggKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChsYWJlbCA+PSAwICYmIGxhYmVsIDw9IDkpO1xuICAgICAgICAgICAgICAgIHRlc3RMYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsYWJlbHMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGxhYmVsRGF0YS5kaW1zWzBdLCBhZi5kVHlwZS51MzIsIGxhYmVsRGF0YS5kYXRhKTtcbiAgICAgICAgICAgIHRyYWluTGFiZWxzID0gbGFiZWxzLmF0KHRyYWluSW5kaWNlcyk7XG4gICAgICAgICAgICB0ZXN0TGFiZWxzID0gbGFiZWxzLmF0KHRlc3RJbmRpY2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudW1DbGFzc2VzOiBudW1DbGFzc2VzLFxuICAgICAgICAgICAgbnVtVHJhaW46IG51bVRyYWluLFxuICAgICAgICAgICAgbnVtVGVzdDogbnVtVGVzdCxcbiAgICAgICAgICAgIHRyYWluSW1hZ2VzOiB0cmFpbkltYWdlcyxcbiAgICAgICAgICAgIHRlc3RJbWFnZXM6IHRlc3RJbWFnZXMsXG4gICAgICAgICAgICB0cmFpbkxhYmVsczogdHJhaW5MYWJlbHMsXG4gICAgICAgICAgICB0ZXN0TGFiZWxzOiB0ZXN0TGFiZWxzXG4gICAgICAgIH07XG4gICAgfSlcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbW5pc3Q7Il19 diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 41901db..32b344f 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -1,15 +1,13 @@ "use strict"; -"use strict"; var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var common = require("../common"); var mnist = require("./mnist"); var ANN = require("./ann"); var now = require("performance-now"); -var accuracy = async($traceurRuntime.initGeneratorFunction(function $__0(af, predicted, target) { +var accuracy = async($traceurRuntime.initGeneratorFunction(function $__1(af, predicted, target) { var pMax, tMax, - $__1, $__2, $__3, $__4, @@ -19,7 +17,8 @@ var accuracy = async($traceurRuntime.initGeneratorFunction(function $__0(af, pre $__8, $__9, $__10, - $__11; + $__11, + $__12; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { @@ -38,38 +37,38 @@ var accuracy = async($traceurRuntime.initGeneratorFunction(function $__0(af, pre $ctx.state = 8; break; case 8: - $__1 = af.countAsync; - $__2 = pMax.index; - $__3 = $__2.eq; - $__4 = tMax.index; - $__5 = $__3.call($__2, $__4); - $__6 = $__1.call(af, $__5); + $__2 = af.countAsync; + $__3 = pMax.index; + $__4 = $__3.eq; + $__5 = tMax.index; + $__6 = $__4.call($__3, $__5); + $__7 = $__2.call(af, $__6); $ctx.state = 14; break; case 14: $ctx.state = 10; - return $__6; + return $__7; case 10: - $__7 = $ctx.sent; + $__8 = $ctx.sent; $ctx.state = 12; break; case 12: - $__8 = 100 * $__7; - $__9 = tMax.index; - $__10 = $__9.elements; - $__11 = $__10.call($__9); + $__9 = 100 * $__8; + $__10 = tMax.index; + $__11 = $__10.elements; + $__12 = $__11.call($__10); $ctx.state = 16; break; case 16: - $ctx.returnValue = $__8 / $__11; + $ctx.returnValue = $__9 / $__12; $ctx.state = -2; break; default: return $ctx.end(); } - }, $__0, this); + }, $__1, this); })); -var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, deviceInfo) { +var annDemo = async($traceurRuntime.initGeneratorFunction(function $__13(af, deviceInfo) { var data, featureSize, trainFeats, @@ -81,7 +80,6 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev end, trainOutput, testOutput, - $__13, $__14, $__15, $__16, @@ -94,7 +92,8 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev $__23, $__24, $__25, - $__26; + $__26, + $__27; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { @@ -125,10 +124,10 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev case 32: $ctx.state = 6; return network.train(trainFeats, trainTarget, { - alpha: 2.0, - maxEpochs: 250, + alpha: 1.0, + maxEpochs: 300, batchSize: 100, - maxError: 0.5 + maxError: 1.0 }); case 6: $ctx.maybeThrow(); @@ -149,22 +148,22 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev $ctx.state = 34; break; case 34: - $__13 = console.log; - $__14 = accuracy(af, trainOutput, trainTarget); + $__14 = console.log; + $__15 = accuracy(af, trainOutput, trainTarget); $ctx.state = 18; break; case 18: $ctx.state = 14; - return $__14; + return $__15; case 14: - $__15 = $ctx.sent; + $__16 = $ctx.sent; $ctx.state = 16; break; case 16: - $__16 = $__15.toFixed; - $__17 = $__16.call($__15, 2); - $__18 = "Accuracy on training data: " + $__17; - $__19 = $__13.call(console, $__18); + $__17 = $__16.toFixed; + $__18 = $__17.call($__16, 2); + $__19 = "Accuracy on training data: " + $__18; + $__20 = $__14.call(console, $__19); $ctx.state = 20; break; case 20: @@ -172,22 +171,22 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev $ctx.state = 36; break; case 36: - $__20 = console.log; - $__21 = accuracy(af, testOutput, testTarget); + $__21 = console.log; + $__22 = accuracy(af, testOutput, testTarget); $ctx.state = 26; break; case 26: $ctx.state = 22; - return $__21; + return $__22; case 22: - $__22 = $ctx.sent; + $__23 = $ctx.sent; $ctx.state = 24; break; case 24: - $__23 = $__22.toFixed; - $__24 = $__23.call($__22, 2); - $__25 = "Accuracy on testing data: " + $__24; - $__26 = $__20.call(console, $__25); + $__24 = $__23.toFixed; + $__25 = $__24.call($__23, 2); + $__26 = "Accuracy on testing data: " + $__25; + $__27 = $__21.call(console, $__26); $ctx.state = 28; break; case 28: @@ -197,7 +196,7 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, dev default: return $ctx.end(); } - }, $__12, this); + }, $__13, this); })); common.runOnBestDevice(annDemo, "ANN Demo"); -//# sourceMappingURL=data:application/json;base64,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QSxDQUFDO2dCQUF0Riw4QkFBNkI7Z0JBQXpDLFdBQVcsQ0FBWCxPQUFNLFFBQStGOzs7O0FBRXJHLGdCQUFNLElBQUksQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDOzs7O2dCQUN4QixDQUFBLE9BQU0sSUFBSTtnQkFBdUMsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxFQUFDLENBQUcsV0FBUyxDQUFHLFdBQVMsQ0FBQzs7Ozs7OztnQkF6RHhGLENBQUEsSUFBRyxLQUFLOzs7O2dCQXlEc0MsY0FBbUQ7Z0JBQW5ELFdBQW9ELE9BQUMsRUFBQSxDQUFDO2dCQUFwRiw4QkFBNkI7Z0JBQXpDLFdBQVcsQ0FBWCxPQUFNLFFBQTZGOzs7O0FBRW5HLGdCQUFNLElBQUksQUFBQyxFQUFDLGlCQUFpQixFQUFDLENBQUEsQ0FBQyxDQUFDLEdBQUUsRUFBSSxNQUFJLENBQUMsRUFBSSxLQUFHLENBQUMsUUFBUSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUEsQ0FBQyxhQUFXLEVBQUMsQ0FBQzs7OztBQTNEakYsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUEwRHRDLENBNUR1RCxDQTREdEQsQ0FBQztBQUVGLEtBQUssZ0JBQWdCLEFBQUMsQ0FBQyxPQUFNLENBQUcsV0FBUyxDQUFDLENBQUM7QUFBQSIsImZpbGUiOiJtYWNoaW5lLWxlYXJuaW5nL25ldXJhbE5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xubGV0IG1uaXN0ID0gcmVxdWlyZShcIi4vbW5pc3RcIik7XG5sZXQgQU5OID0gcmVxdWlyZShcIi4vYW5uXCIpO1xubGV0IG5vdyA9IHJlcXVpcmUoXCJwZXJmb3JtYW5jZS1ub3dcIik7XG5cbmxldCBhY2N1cmFjeSA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgcHJlZGljdGVkLCB0YXJnZXQpIHtcbiAgICBsZXQgcE1heCA9IHlpZWxkIGFmLmZpbmRNYXhBdEFzeW5jKHByZWRpY3RlZCwgMSk7XG4gICAgbGV0IHRNYXggPSB5aWVsZCBhZi5maW5kTWF4QXRBc3luYyh0YXJnZXQsIDEpO1xuICAgIHJldHVybiAoMTAwICogKHlpZWxkIGFmLmNvdW50QXN5bmMocE1heC5pbmRleC5lcSh0TWF4LmluZGV4KSkpKSAvIHRNYXguaW5kZXguZWxlbWVudHMoKTtcbn0pO1xuXG5sZXQgYW5uRGVtbyA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgZGV2aWNlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiUnVubmluZyBBTk4gRGVtbyBvbiBkZXZpY2U6XFxuXCIpO1xuICAgIGNvbW1vbi5wcmludERldmljZUluZm8oZGV2aWNlSW5mbyk7XG4gICAgY29uc29sZS5sb2coXCJcIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlNldHRpbmcgdXAgdHJhaW5pbmcgZGF0YS5cIik7XG4gICAgbGV0IGRhdGEgPSB5aWVsZCBtbmlzdC5zZXR1cChhZiwgdHJ1ZSwgMC42KTtcblxuICAgIGxldCBmZWF0dXJlU2l6ZSA9IGRhdGEudHJhaW5JbWFnZXMuZWxlbWVudHMoKSAvIGRhdGEubnVtVHJhaW47XG5cbiAgICAvLyBSZXNoYXBlIGltYWdlcyBpbnRvIGZlYXR1cmUgdmVjdG9yc1xuICAgIGxldCB0cmFpbkZlYXRzID0gYWYudHJhbnNwb3NlKGFmLm1vZERpbXMoZGF0YS50cmFpbkltYWdlcywgZmVhdHVyZVNpemUsIGRhdGEubnVtVHJhaW4pKTtcbiAgICBsZXQgdGVzdEZlYXRzID0gYWYudHJhbnNwb3NlKGFmLm1vZERpbXMoZGF0YS50ZXN0SW1hZ2VzLCBmZWF0dXJlU2l6ZSwgZGF0YS5udW1UZXN0KSk7XG5cbiAgICBsZXQgdHJhaW5UYXJnZXQgPSBhZi50cmFuc3Bvc2UoZGF0YS50cmFpbkxhYmVscyk7XG4gICAgbGV0IHRlc3RUYXJnZXQgPSBhZi50cmFuc3Bvc2UoZGF0YS50ZXN0TGFiZWxzKTtcblxuICAgIGxldCBuZXR3b3JrID0gbmV3IEFOTihhZiwgW3RyYWluRmVhdHMuZGltcygxKSwgMTAwLCA1MCwgZGF0YS5udW1DbGFzc2VzXSk7XG5cbiAgICAvLyBUcmFpbiBuZXR3b3JrXG4gICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICB5aWVsZCBuZXR3b3JrLnRyYWluKFxuICAgICAgICB0cmFpbkZlYXRzLFxuICAgICAgICB0cmFpblRhcmdldCxcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6IDIuMCxcbiAgICAgICAgICAgIG1heEVwb2NoczogMjUwLFxuICAgICAgICAgICAgYmF0Y2hTaXplOiAxMDAsXG4gICAgICAgICAgICBtYXhFcnJvcjogMC41XG4gICAgICAgIH1cbiAgICApO1xuICAgIHlpZWxkIGFmLndhaXRBc3luYygpO1xuICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuXG4gICAgLy8gUnVuIHRoZSB0cmFpbmVkIG5ldHdvcmsgYW5kIHRlc3QgYWNjdXJhY3kuXG4gICAgbGV0IHRyYWluT3V0cHV0ID0gbmV0d29yay5wcmVkaWN0KHRyYWluRmVhdHMpO1xuICAgIGxldCB0ZXN0T3V0cHV0ID0gbmV0d29yay5wcmVkaWN0KHRlc3RGZWF0cyk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRyYWluaW5nIHNldDpcIik7XG4gICAgY29uc29sZS5sb2coYEFjY3VyYWN5IG9uIHRyYWluaW5nIGRhdGE6ICR7KHlpZWxkIGFjY3VyYWN5KGFmLCB0cmFpbk91dHB1dCwgdHJhaW5UYXJnZXQpKS50b0ZpeGVkKDIpfWApO1xuXG4gICAgY29uc29sZS5sb2coXCJUZXN0IHNldDpcIik7XG4gICAgY29uc29sZS5sb2coYEFjY3VyYWN5IG9uIHRlc3RpbmcgIGRhdGE6ICR7KHlpZWxkIGFjY3VyYWN5KGFmLCB0ZXN0T3V0cHV0LCB0ZXN0VGFyZ2V0KSkudG9GaXhlZCgyKX1gKTtcblxuICAgIGNvbnNvbGUubG9nKGBUcmFpbmluZyB0aW1lOiAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCgxMCl9IHNlY29uZHNcXG5gKTtcbn0pO1xuXG5jb21tb24ucnVuT25CZXN0RGV2aWNlKGFubkRlbW8sIFwiQU5OIERlbW9cIik7Il19 +//# sourceMappingURL=data:application/json;base64,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OEJBQTZCO2dCQUF6QyxXQUFXLENBQVgsT0FBTSxRQUErRjs7OztBQUVyRyxnQkFBTSxJQUFJLEFBQUMsQ0FBQyxXQUFVLENBQUMsQ0FBQzs7OztnQkFDeEIsQ0FBQSxPQUFNLElBQUk7Z0JBQXVDLENBQUEsUUFBTyxBQUFDLENBQUMsRUFBQyxDQUFHLFdBQVMsQ0FBRyxXQUFTLENBQUM7Ozs7Ozs7Z0JBekR4RixDQUFBLElBQUcsS0FBSzs7OztnQkF5RHNDLGNBQW1EO2dCQUFuRCxXQUFvRCxPQUFDLEVBQUEsQ0FBQztnQkFBcEYsOEJBQTZCO2dCQUF6QyxXQUFXLENBQVgsT0FBTSxRQUE2Rjs7OztBQUVuRyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFBLENBQUMsQ0FBQyxHQUFFLEVBQUksTUFBSSxDQUFDLEVBQUksS0FBRyxDQUFDLFFBQVEsQUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUMsYUFBVyxFQUFDLENBQUM7Ozs7QUEzRGpGLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBMER0QyxDQTVEdUQsQ0E0RHRELENBQUM7QUFFRixLQUFLLGdCQUFnQixBQUFDLENBQUMsT0FBTSxDQUFHLFdBQVMsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibWFjaGluZS1sZWFybmluZy9uZXVyYWxOZXR3b3JrLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgY29tbW9uID0gcmVxdWlyZShcIi4uL2NvbW1vblwiKTtcbmxldCBtbmlzdCA9IHJlcXVpcmUoXCIuL21uaXN0XCIpO1xubGV0IEFOTiA9IHJlcXVpcmUoXCIuL2FublwiKTtcbmxldCBub3cgPSByZXF1aXJlKFwicGVyZm9ybWFuY2Utbm93XCIpO1xuXG5sZXQgYWNjdXJhY3kgPSBhc3luYyhmdW5jdGlvbiooYWYsIHByZWRpY3RlZCwgdGFyZ2V0KSB7XG4gICAgbGV0IHBNYXggPSB5aWVsZCBhZi5maW5kTWF4QXRBc3luYyhwcmVkaWN0ZWQsIDEpO1xuICAgIGxldCB0TWF4ID0geWllbGQgYWYuZmluZE1heEF0QXN5bmModGFyZ2V0LCAxKTtcbiAgICByZXR1cm4gKDEwMCAqICh5aWVsZCBhZi5jb3VudEFzeW5jKHBNYXguaW5kZXguZXEodE1heC5pbmRleCkpKSkgLyB0TWF4LmluZGV4LmVsZW1lbnRzKCk7XG59KTtcblxubGV0IGFubkRlbW8gPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIlJ1bm5pbmcgQU5OIERlbW8gb24gZGV2aWNlOlxcblwiKTtcbiAgICBjb21tb24ucHJpbnREZXZpY2VJbmZvKGRldmljZUluZm8pO1xuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuXG4gICAgY29uc29sZS5sb2coXCJTZXR0aW5nIHVwIHRyYWluaW5nIGRhdGEuXCIpO1xuICAgIGxldCBkYXRhID0geWllbGQgbW5pc3Quc2V0dXAoYWYsIHRydWUsIDAuNik7XG5cbiAgICBsZXQgZmVhdHVyZVNpemUgPSBkYXRhLnRyYWluSW1hZ2VzLmVsZW1lbnRzKCkgLyBkYXRhLm51bVRyYWluO1xuXG4gICAgLy8gUmVzaGFwZSBpbWFnZXMgaW50byBmZWF0dXJlIHZlY3RvcnNcbiAgICBsZXQgdHJhaW5GZWF0cyA9IGFmLnRyYW5zcG9zZShhZi5tb2REaW1zKGRhdGEudHJhaW5JbWFnZXMsIGZlYXR1cmVTaXplLCBkYXRhLm51bVRyYWluKSk7XG4gICAgbGV0IHRlc3RGZWF0cyA9IGFmLnRyYW5zcG9zZShhZi5tb2REaW1zKGRhdGEudGVzdEltYWdlcywgZmVhdHVyZVNpemUsIGRhdGEubnVtVGVzdCkpO1xuXG4gICAgbGV0IHRyYWluVGFyZ2V0ID0gYWYudHJhbnNwb3NlKGRhdGEudHJhaW5MYWJlbHMpO1xuICAgIGxldCB0ZXN0VGFyZ2V0ID0gYWYudHJhbnNwb3NlKGRhdGEudGVzdExhYmVscyk7XG5cbiAgICBsZXQgbmV0d29yayA9IG5ldyBBTk4oYWYsIFt0cmFpbkZlYXRzLmRpbXMoMSksIDEwMCwgNTAsIGRhdGEubnVtQ2xhc3Nlc10pO1xuXG4gICAgLy8gVHJhaW4gbmV0d29ya1xuICAgIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG4gICAgeWllbGQgbmV0d29yay50cmFpbihcbiAgICAgICAgdHJhaW5GZWF0cyxcbiAgICAgICAgdHJhaW5UYXJnZXQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAxLjAsXG4gICAgICAgICAgICBtYXhFcG9jaHM6IDMwMCxcbiAgICAgICAgICAgIGJhdGNoU2l6ZTogMTAwLFxuICAgICAgICAgICAgbWF4RXJyb3I6IDEuMFxuICAgICAgICB9XG4gICAgKTtcbiAgICB5aWVsZCBhZi53YWl0QXN5bmMoKTtcbiAgICBjb25zdCBlbmQgPSBub3coKTtcblxuICAgIC8vIFJ1biB0aGUgdHJhaW5lZCBuZXR3b3JrIGFuZCB0ZXN0IGFjY3VyYWN5LlxuICAgIGxldCB0cmFpbk91dHB1dCA9IG5ldHdvcmsucHJlZGljdCh0cmFpbkZlYXRzKTtcbiAgICBsZXQgdGVzdE91dHB1dCA9IG5ldHdvcmsucHJlZGljdCh0ZXN0RmVhdHMpO1xuXG4gICAgY29uc29sZS5sb2coXCJUcmFpbmluZyBzZXQ6XCIpO1xuICAgIGNvbnNvbGUubG9nKGBBY2N1cmFjeSBvbiB0cmFpbmluZyBkYXRhOiAkeyh5aWVsZCBhY2N1cmFjeShhZiwgdHJhaW5PdXRwdXQsIHRyYWluVGFyZ2V0KSkudG9GaXhlZCgyKX1gKTtcblxuICAgIGNvbnNvbGUubG9nKFwiVGVzdCBzZXQ6XCIpO1xuICAgIGNvbnNvbGUubG9nKGBBY2N1cmFjeSBvbiB0ZXN0aW5nICBkYXRhOiAkeyh5aWVsZCBhY2N1cmFjeShhZiwgdGVzdE91dHB1dCwgdGVzdFRhcmdldCkpLnRvRml4ZWQoMil9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhgVHJhaW5pbmcgdGltZTogJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG59KTtcblxuY29tbW9uLnJ1bk9uQmVzdERldmljZShhbm5EZW1vLCBcIkFOTiBEZW1vXCIpOyJdfQ== diff --git a/lib/es5/borderType.js b/lib/es5/borderType.js index ce22300..7b3b48f 100644 --- a/lib/es5/borderType.js +++ b/lib/es5/borderType.js @@ -1,9 +1,8 @@ "use strict"; -"use strict"; var borderType = module.exports = { padZero: 0, padSym: 1, AF_PAD_ZERO: 0, AF_PAD_SYM: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvcmRlclR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFlBQVUsQ0FBRyxFQUFBO0FBQ2IsV0FBUyxDQUFHLEVBQUE7QUFBQSxBQUNoQixDQUFDO0FBQUEiLCJmaWxlIjoiYm9yZGVyVHlwZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgYm9yZGVyVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHBhZFplcm86IDAsXG4gICAgcGFkU3ltOiAxLFxuICAgIEFGX1BBRF9aRVJPOiAwLFxuICAgIEFGX1BBRF9TWU06IDFcbn07Il19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvcmRlclR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFlBQVUsQ0FBRyxFQUFBO0FBQ2IsV0FBUyxDQUFHLEVBQUE7QUFBQSxBQUNoQixDQUFDO0FBQUEiLCJmaWxlIjoiYm9yZGVyVHlwZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgYm9yZGVyVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHBhZFplcm86IDAsXG4gICAgcGFkU3ltOiAxLFxuICAgIEFGX1BBRF9aRVJPOiAwLFxuICAgIEFGX1BBRF9TWU06IDFcbn07Il19 diff --git a/lib/es5/cSpace.js b/lib/es5/cSpace.js index 96c2f22..7287135 100644 --- a/lib/es5/cSpace.js +++ b/lib/es5/cSpace.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var cSpace = module.exports = { Gray: 0, RGB: 1, @@ -8,4 +7,4 @@ var cSpace = module.exports = { AF_RGB: 1, AF_HSV: 2 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNTcGFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixLQUFHLENBQUcsRUFBQTtBQUNOLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxRQUFNLENBQUcsRUFBQTtBQUNULE9BQUssQ0FBRyxFQUFBO0FBQ1IsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJjU3BhY2UuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNTcGFjZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEdyYXk6IDAsIC8vLzwgR3JheXNjYWxlXG4gICAgUkdCOiAxLCAgICAgIC8vLzwgMy1jaGFubmVsIFJHQlxuICAgIEhTVjogMiwgICAgICAgLy8vPCAzLWNoYW5uZWwgSFNWXG4gICAgQUZfR1JBWTogMCwgLy8vPCBHcmF5c2NhbGVcbiAgICBBRl9SR0I6IDEsICAgICAgLy8vPCAzLWNoYW5uZWwgUkdCXG4gICAgQUZfSFNWOiAyICAgICAgIC8vLzwgMy1jaGFubmVsIEhTVlxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNTcGFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixLQUFHLENBQUcsRUFBQTtBQUNOLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxRQUFNLENBQUcsRUFBQTtBQUNULE9BQUssQ0FBRyxFQUFBO0FBQ1IsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJjU3BhY2UuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNTcGFjZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEdyYXk6IDAsIC8vLzwgR3JheXNjYWxlXG4gICAgUkdCOiAxLCAgICAgIC8vLzwgMy1jaGFubmVsIFJHQlxuICAgIEhTVjogMiwgICAgICAgLy8vPCAzLWNoYW5uZWwgSFNWXG4gICAgQUZfR1JBWTogMCwgLy8vPCBHcmF5c2NhbGVcbiAgICBBRl9SR0I6IDEsICAgICAgLy8vPCAzLWNoYW5uZWwgUkdCXG4gICAgQUZfSFNWOiAyICAgICAgIC8vLzwgMy1jaGFubmVsIEhTVlxufTsiXX0= diff --git a/lib/es5/col.js b/lib/es5/col.js index 38440f1..87c01f9 100644 --- a/lib/es5/col.js +++ b/lib/es5/col.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Col(index) { @@ -7,4 +6,4 @@ function Col(index) { this.index = index; } module.exports = Col; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoiY29sLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gQ29sKGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2w7Il19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoiY29sLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gQ29sKGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2w7Il19 diff --git a/lib/es5/cols.js b/lib/es5/cols.js index be16b54..88d3470 100644 --- a/lib/es5/cols.js +++ b/lib/es5/cols.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Cols(firstIndex, lastIndex) { @@ -9,4 +8,4 @@ function Cols(firstIndex, lastIndex) { this.lastIndex = lastIndex; } module.exports = Cols; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoiY29scy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbHMoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2xzOyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoiY29scy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbHMoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2xzOyJdfQ== diff --git a/lib/es5/complex.js b/lib/es5/complex.js index d99cfc7..217e8f7 100644 --- a/lib/es5/complex.js +++ b/lib/es5/complex.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Complex(real, imag) { @@ -9,4 +8,4 @@ function Complex(real, imag) { this.imag = imag; } module.exports = Complex; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxRQUFNLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ3pCLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEIsS0FBRyxLQUFLLEVBQUksS0FBRyxDQUFDO0FBQ2hCLEtBQUcsS0FBSyxFQUFJLEtBQUcsQ0FBQztBQUNwQjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksUUFBTSxDQUFDO0FBQUEiLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbXBsZXgocmVhbCwgaW1hZykge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKHJlYWwpKTtcbiAgICBhc3NlcnQoXy5pc051bWJlcihpbWFnKSk7XG5cbiAgICB0aGlzLnJlYWwgPSByZWFsO1xuICAgIHRoaXMuaW1hZyA9IGltYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcGxleDsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxRQUFNLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ3pCLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEIsS0FBRyxLQUFLLEVBQUksS0FBRyxDQUFDO0FBQ2hCLEtBQUcsS0FBSyxFQUFJLEtBQUcsQ0FBQztBQUNwQjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksUUFBTSxDQUFDO0FBQUEiLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbXBsZXgocmVhbCwgaW1hZykge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKHJlYWwpKTtcbiAgICBhc3NlcnQoXy5pc051bWJlcihpbWFnKSk7XG5cbiAgICB0aGlzLnJlYWwgPSByZWFsO1xuICAgIHRoaXMuaW1hZyA9IGltYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcGxleDsiXX0= diff --git a/lib/es5/connectivity.js b/lib/es5/connectivity.js index 46d82af..8c993ef 100644 --- a/lib/es5/connectivity.js +++ b/lib/es5/connectivity.js @@ -1,9 +1,8 @@ "use strict"; -"use strict"; var connectivity = module.exports = { connectivity4: 4, connectivity8: 8, AF_CONNECTIVITY_4: 4, AF_CONNECTIVITY_8: 8 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbm5lY3Rpdml0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxZQUFXLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUNoQyxjQUFZLENBQUcsRUFBQTtBQUNmLGNBQVksQ0FBRyxFQUFBO0FBQ2Ysa0JBQWdCLENBQUcsRUFBQTtBQUNuQixrQkFBZ0IsQ0FBRyxFQUFBO0FBQUEsQUFDdkIsQ0FBQztBQUFBIiwiZmlsZSI6ImNvbm5lY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29ubmVjdGl2aXR5ID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY29ubmVjdGl2aXR5NDogNCxcbiAgICBjb25uZWN0aXZpdHk4OiA4LFxuICAgIEFGX0NPTk5FQ1RJVklUWV80OiA0LFxuICAgIEFGX0NPTk5FQ1RJVklUWV84OiA4XG59OyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbm5lY3Rpdml0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxZQUFXLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUNoQyxjQUFZLENBQUcsRUFBQTtBQUNmLGNBQVksQ0FBRyxFQUFBO0FBQ2Ysa0JBQWdCLENBQUcsRUFBQTtBQUNuQixrQkFBZ0IsQ0FBRyxFQUFBO0FBQUEsQUFDdkIsQ0FBQztBQUFBIiwiZmlsZSI6ImNvbm5lY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29ubmVjdGl2aXR5ID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY29ubmVjdGl2aXR5NDogNCxcbiAgICBjb25uZWN0aXZpdHk4OiA4LFxuICAgIEFGX0NPTk5FQ1RJVklUWV80OiA0LFxuICAgIEFGX0NPTk5FQ1RJVklUWV84OiA4XG59OyJdfQ== diff --git a/lib/es5/convDomain.js b/lib/es5/convDomain.js index 6eabb09..e60b19d 100644 --- a/lib/es5/convDomain.js +++ b/lib/es5/convDomain.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var convDomain = module.exports = { auto: 0, spatial: 1, @@ -8,4 +7,4 @@ var convDomain = module.exports = { AF_CONV_SPATIAL: 1, AF_CONV_FREQ: 2 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZEb21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsS0FBRyxDQUFHLEVBQUE7QUFDTixRQUFNLENBQUcsRUFBQTtBQUNULEtBQUcsQ0FBRyxFQUFBO0FBQ04sYUFBVyxDQUFHLEVBQUE7QUFDZCxnQkFBYyxDQUFHLEVBQUE7QUFDakIsYUFBVyxDQUFHLEVBQUE7QUFBQSxBQUNsQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udkRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29udkRvbWFpbiA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGF1dG86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIHNwYXRpYWw6IDEsIC8vLzwgUGVyZm9ybSBjb252b2x1dGlvbiBpbiBzcGF0aWFsIGRvbWFpblxuICAgIGZyZXE6IDIsICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbiAgICBBRl9DT05WX0FVVE86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIEFGX0NPTlZfU1BBVElBTDogMSwgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIHNwYXRpYWwgZG9tYWluXG4gICAgQUZfQ09OVl9GUkVROiAyICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbn07Il19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZEb21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsS0FBRyxDQUFHLEVBQUE7QUFDTixRQUFNLENBQUcsRUFBQTtBQUNULEtBQUcsQ0FBRyxFQUFBO0FBQ04sYUFBVyxDQUFHLEVBQUE7QUFDZCxnQkFBYyxDQUFHLEVBQUE7QUFDakIsYUFBVyxDQUFHLEVBQUE7QUFBQSxBQUNsQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udkRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29udkRvbWFpbiA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGF1dG86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIHNwYXRpYWw6IDEsIC8vLzwgUGVyZm9ybSBjb252b2x1dGlvbiBpbiBzcGF0aWFsIGRvbWFpblxuICAgIGZyZXE6IDIsICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbiAgICBBRl9DT05WX0FVVE86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIEFGX0NPTlZfU1BBVElBTDogMSwgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIHNwYXRpYWwgZG9tYWluXG4gICAgQUZfQ09OVl9GUkVROiAyICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbn07Il19 diff --git a/lib/es5/convMode.js b/lib/es5/convMode.js index 6ffe394..baa4f46 100644 --- a/lib/es5/convMode.js +++ b/lib/es5/convMode.js @@ -1,9 +1,8 @@ "use strict"; -"use strict"; var convMode = module.exports = { default: 0, expand: 1, AF_CONV_DEFAULT: 0, AF_CONV_EXPAND: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZNb2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBSTVCLFFBQU0sQ0FBRyxFQUFBO0FBS1QsT0FBSyxDQUFHLEVBQUE7QUFJUixnQkFBYyxDQUFHLEVBQUE7QUFLakIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udk1vZGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNvbnZNb2RlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIGRlZmF1bHQ6IDAsXG5cbiAgICAvLy9cbiAgICAvLy8gT3V0cHV0IG9mIHRoZSBjb252b2x1dGlvbiBpcyBzaWduYWxfbGVuICsgZmlsdGVyX2xlbiAtIDFcbiAgICAvLy9cbiAgICBleHBhbmQ6IDEsXG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIEFGX0NPTlZfREVGQVVMVDogMCxcblxuICAgIC8vL1xuICAgIC8vLyBPdXRwdXQgb2YgdGhlIGNvbnZvbHV0aW9uIGlzIHNpZ25hbF9sZW4gKyBmaWx0ZXJfbGVuIC0gMVxuICAgIC8vL1xuICAgIEFGX0NPTlZfRVhQQU5EOiAxXG59OyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZNb2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBSTVCLFFBQU0sQ0FBRyxFQUFBO0FBS1QsT0FBSyxDQUFHLEVBQUE7QUFJUixnQkFBYyxDQUFHLEVBQUE7QUFLakIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udk1vZGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNvbnZNb2RlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIGRlZmF1bHQ6IDAsXG5cbiAgICAvLy9cbiAgICAvLy8gT3V0cHV0IG9mIHRoZSBjb252b2x1dGlvbiBpcyBzaWduYWxfbGVuICsgZmlsdGVyX2xlbiAtIDFcbiAgICAvLy9cbiAgICBleHBhbmQ6IDEsXG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIEFGX0NPTlZfREVGQVVMVDogMCxcblxuICAgIC8vL1xuICAgIC8vLyBPdXRwdXQgb2YgdGhlIGNvbnZvbHV0aW9uIGlzIHNpZ25hbF9sZW4gKyBmaWx0ZXJfbGVuIC0gMVxuICAgIC8vL1xuICAgIEFGX0NPTlZfRVhQQU5EOiAxXG59OyJdfQ== diff --git a/lib/es5/dim4.js b/lib/es5/dim4.js index e5ca4cf..64f81a2 100644 --- a/lib/es5/dim4.js +++ b/lib/es5/dim4.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Dim4(dim0, dim1, dim2, dim3) { @@ -37,4 +36,4 @@ function Dim4(dim0, dim1, dim2, dim3) { this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3]; } module.exports = Dim4; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpbTQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ2xDLEtBQUksQ0FBQSxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBRztBQUNqQixTQUFPLElBQUksS0FBRyxBQUFDLENBQUMsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7RUFDdkQ7QUFBQSxBQUNBLEtBQUcsT0FBTyxFQUFJLEdBQUMsQ0FBQztBQUNoQixLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUN6RSxJQUFBLENBQUEsS0FBSSxDQUFDO0FBQ1QsTUFBSyxLQUFJLEVBQUksRUFBQSxDQUFHLENBQUEsS0FBSSxHQUFLLEVBQUEsQ0FBRyxDQUFBLEtBQUksRUFBRSxDQUFHO0FBQ2pDLE9BQUksSUFBRyxPQUFPLENBQUUsS0FBSSxDQUFDLElBQU0sRUFBQSxDQUFHO0FBQzFCLFdBQUs7SUFDVDtBQUFBLEVBQ0o7QUFBQSxBQUNBLEtBQUcsTUFBTSxFQUFJLENBQUEsSUFBRyxNQUFNLEVBQUksQ0FBQSxLQUFJLEVBQUksRUFBQSxDQUFDO0FBQ25DLEtBQUcsU0FBUyxFQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLEVBQUksQ0FBQSxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsQ0FBQSxDQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLENBQUEsQ0FBSSxDQUFBLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ3JGO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxLQUFHLENBQUM7QUFBQSIsImZpbGUiOiJkaW00LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gRGltNChkaW0wLCBkaW0xLCBkaW0yLCBkaW0zKSB7XG4gICAgaWYgKF8uaXNBcnJheShkaW0wKSkge1xuICAgICAgICByZXR1cm4gbmV3IERpbTQoZGltMFswXSwgZGltMFsxXSwgZGltMFsyXSwgZGltMFszXSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMCkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0wKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMSkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0xKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMikpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0yKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMykpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0zKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgbGV0IGluZGV4O1xuICAgIGZvciAoaW5kZXggPSAzOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRleF0gIT09IDEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMubmRpbXMgPSB0aGlzLm5EaW1zID0gaW5kZXggKyAxO1xuICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLnZhbHVlc1swXSAqIHRoaXMudmFsdWVzWzFdICogdGhpcy52YWx1ZXNbMl0gKiB0aGlzLnZhbHVlc1szXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaW00OyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpbTQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ2xDLEtBQUksQ0FBQSxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBRztBQUNqQixTQUFPLElBQUksS0FBRyxBQUFDLENBQUMsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7RUFDdkQ7QUFBQSxBQUNBLEtBQUcsT0FBTyxFQUFJLEdBQUMsQ0FBQztBQUNoQixLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUN6RSxJQUFBLENBQUEsS0FBSSxDQUFDO0FBQ1QsTUFBSyxLQUFJLEVBQUksRUFBQSxDQUFHLENBQUEsS0FBSSxHQUFLLEVBQUEsQ0FBRyxDQUFBLEtBQUksRUFBRSxDQUFHO0FBQ2pDLE9BQUksSUFBRyxPQUFPLENBQUUsS0FBSSxDQUFDLElBQU0sRUFBQSxDQUFHO0FBQzFCLFdBQUs7SUFDVDtBQUFBLEVBQ0o7QUFBQSxBQUNBLEtBQUcsTUFBTSxFQUFJLENBQUEsSUFBRyxNQUFNLEVBQUksQ0FBQSxLQUFJLEVBQUksRUFBQSxDQUFDO0FBQ25DLEtBQUcsU0FBUyxFQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLEVBQUksQ0FBQSxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsQ0FBQSxDQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLENBQUEsQ0FBSSxDQUFBLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ3JGO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxLQUFHLENBQUM7QUFBQSIsImZpbGUiOiJkaW00LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gRGltNChkaW0wLCBkaW0xLCBkaW0yLCBkaW0zKSB7XG4gICAgaWYgKF8uaXNBcnJheShkaW0wKSkge1xuICAgICAgICByZXR1cm4gbmV3IERpbTQoZGltMFswXSwgZGltMFsxXSwgZGltMFsyXSwgZGltMFszXSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMCkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0wKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMSkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0xKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMikpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0yKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMykpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0zKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgbGV0IGluZGV4O1xuICAgIGZvciAoaW5kZXggPSAzOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRleF0gIT09IDEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMubmRpbXMgPSB0aGlzLm5EaW1zID0gaW5kZXggKyAxO1xuICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLnZhbHVlc1swXSAqIHRoaXMudmFsdWVzWzFdICogdGhpcy52YWx1ZXNbMl0gKiB0aGlzLnZhbHVlc1szXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaW00OyJdfQ== diff --git a/lib/es5/dtype.js b/lib/es5/dtype.js index 857b39a..3ab28c2 100644 --- a/lib/es5/dtype.js +++ b/lib/es5/dtype.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var dType = module.exports = { f32: 0, c32: 1, @@ -12,4 +11,4 @@ var dType = module.exports = { s64: 8, u64: 9 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR0eXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQ3pCLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQUEsQUFDVCxDQUFDO0FBQUEiLCJmaWxlIjoiZHR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGRUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZjMyOiAwLFxuICAgIGMzMjogMSxcbiAgICBmNjQ6IDIsXG4gICAgYzY0OiAzLFxuICAgIGI4OiA0LFxuICAgIHMzMjogNSxcbiAgICB1MzI6IDYsXG4gICAgdTg6IDcsXG4gICAgczY0OiA4LFxuICAgIHU2NDogOVxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR0eXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQ3pCLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQUEsQUFDVCxDQUFDO0FBQUEiLCJmaWxlIjoiZHR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGRUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZjMyOiAwLFxuICAgIGMzMjogMSxcbiAgICBmNjQ6IDIsXG4gICAgYzY0OiAzLFxuICAgIGI4OiA0LFxuICAgIHMzMjogNSxcbiAgICB1MzI6IDYsXG4gICAgdTg6IDcsXG4gICAgczY0OiA4LFxuICAgIHU2NDogOVxufTsiXX0= diff --git a/lib/es5/ext.js b/lib/es5/ext.js index ad8e579..3e6639d 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var Bluebird = require("bluebird"); var _ = require("lodash"); var async = Bluebird.coroutine; @@ -42,28 +41,28 @@ function synchronify(af, f) { } function installAsyncAndSync(af, obj, name) { if (_.isUndefined(name)) { - var $__3 = true; - var $__4 = false; - var $__5 = undefined; + var $__4 = true; + var $__5 = false; + var $__6 = undefined; try { - for (var $__1 = void 0, - $__0 = (_.keys(obj))[$traceurRuntime.toProperty(Symbol.iterator)](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { - var key = $__1.value; + for (var $__2 = void 0, + $__1 = (_.keys(obj))[$traceurRuntime.toProperty(Symbol.iterator)](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { + var key = $__2.value; { installAsyncAndSync(af, obj, key); } } - } catch ($__6) { - $__4 = true; - $__5 = $__6; + } catch ($__7) { + $__5 = true; + $__6 = $__7; } finally { try { - if (!$__3 && $__0.return != null) { - $__0.return(); + if (!$__4 && $__1.return != null) { + $__1.return(); } } finally { - if ($__4) { - throw $__5; + if ($__5) { + throw $__6; } } } @@ -73,14 +72,14 @@ function installAsyncAndSync(af, obj, name) { var f = obj[name]; if (_.isFunction(f)) { if (!_.isFunction(obj[name + "Async"])) { - obj[name + "Async"] = async($traceurRuntime.initGeneratorFunction(function $__7() { + obj[name + "Async"] = async($traceurRuntime.initGeneratorFunction(function $__8() { var self, args, call, err, i, - $__8, $__9, + $__10, e; var $arguments = arguments; return $traceurRuntime.createGeneratorInstance(function($ctx) { @@ -121,18 +120,18 @@ function installAsyncAndSync(af, obj, name) { $ctx.state = 12; break; case 12: - $__8 = call(); + $__9 = call(); $ctx.state = 6; break; case 6: $ctx.state = 2; - return $__8; + return $__9; case 2: - $__9 = $ctx.sent; + $__10 = $ctx.sent; $ctx.state = 4; break; case 4: - $ctx.returnValue = $__9; + $ctx.returnValue = $__10; $ctx.state = -2; break; case 8: @@ -160,7 +159,7 @@ function installAsyncAndSync(af, obj, name) { default: return $ctx.end(); } - }, $__7, this); + }, $__8, this); })); } if (!_.isFunction(obj[name + "Sync"])) { @@ -232,4 +231,4 @@ function ext(af) { }); } module.exports = ext; -//# sourceMappingURL=data:application/json;base64,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ZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBpbnZva2VHQyhhZikge1xuICAgIGFmLmdjKGdjVGltZSk7XG59XG5cbmZ1bmN0aW9uIHN5bmNocm9uaWZ5KGFmLCBmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycjtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgcmVzID0gcjtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBhcmdzID0gXy50b0FycmF5KGFyZ3VtZW50cykuY29uY2F0KGNiKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgZi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkgYWYuX2RvRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmx1ZWJpcmQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiU3luY1wiXSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZSArIFwiU3luY1wiXSA9IHN5bmNocm9uaWZ5KGFmLCBmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHQoYWYpIHtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZik7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheSk7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheS5wcm90b3R5cGUpO1xuXG4gICAgXy5leHRlbmQoYWYsIHtcbiAgICAgICAgZW5kOiAtMSxcbiAgICAgICAgc3BhbjogbnVsbCxcbiAgICAgICAgYWxsOiAtMSxcbiAgICAgICAgZHR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBkVHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIHNvdXJjZTogcmVxdWlyZShcIi4vc291cmNlXCIpLFxuICAgICAgICBtYXRjaFR5cGU6IHJlcXVpcmUoXCIuL21hdGNoVHlwZVwiKSxcbiAgICAgICAgY1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIENTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBjb25uZWN0aXZpdHk6IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eVwiKSxcbiAgICAgICAgYm9yZGVyVHlwZTogcmVxdWlyZShcIi4vYm9yZGVyVHlwZVwiKSxcbiAgICAgICAgaW50ZXJwVHlwZTogcmVxdWlyZShcIi4vaW50ZXJwVHlwZVwiKSxcbiAgICAgICAgbWF0UHJvcDogcmVxdWlyZShcIi4vbWF0UHJvcFwiKSxcbiAgICAgICAgbm9ybVR5cGU6IHJlcXVpcmUoXCIuL25vcm1UeXBlXCIpLFxuICAgICAgICBjb252TW9kZTogcmVxdWlyZShcIi4vY29udk1vZGVcIiksXG4gICAgICAgIGNvbnZEb21haW46IHJlcXVpcmUoXCIuL2NvbnZEb21haW5cIiksXG4gICAgICAgIERpbTQ6IHJlcXVpcmUoXCIuL2RpbTRcIiksXG4gICAgICAgIFNlcTogcmVxdWlyZShcIi4vc2VxXCIpLFxuICAgICAgICBDb21wbGV4OiByZXF1aXJlKFwiLi9jb21wbGV4XCIpLFxuICAgICAgICBSb3c6IHJlcXVpcmUoXCIuL3Jvd1wiKSxcbiAgICAgICAgQ29sOiByZXF1aXJlKFwiLi9jb2xcIiksXG4gICAgICAgIFJvd3M6IHJlcXVpcmUoXCIuL3Jvd3NcIiksXG4gICAgICAgIENvbHM6IHJlcXVpcmUoXCIuL2NvbHNcIiksXG4gICAgICAgIGdldERldmljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5nZXREZXZpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5nZXREZXZpY2VDb3VudCgpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoaSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5kZXZpY2VJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZm8uaWQgPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZm9yOiByZXF1aXJlKFwiLi9tYWtlR2ZvclwiKShhZilcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHQ7Il19 +//# sourceMappingURL=data:application/json;base64,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Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBpbnZva2VHQyhhZikge1xuICAgIGFmLmdjKGdjVGltZSk7XG59XG5cbmZ1bmN0aW9uIHN5bmNocm9uaWZ5KGFmLCBmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycjtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgcmVzID0gcjtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBhcmdzID0gXy50b0FycmF5KGFyZ3VtZW50cykuY29uY2F0KGNiKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgZi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkgYWYuX2RvRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmx1ZWJpcmQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiU3luY1wiXSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZSArIFwiU3luY1wiXSA9IHN5bmNocm9uaWZ5KGFmLCBmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHQoYWYpIHtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZik7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheSk7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheS5wcm90b3R5cGUpO1xuXG4gICAgXy5leHRlbmQoYWYsIHtcbiAgICAgICAgZW5kOiAtMSxcbiAgICAgICAgc3BhbjogbnVsbCxcbiAgICAgICAgYWxsOiAtMSxcbiAgICAgICAgZHR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBkVHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIHNvdXJjZTogcmVxdWlyZShcIi4vc291cmNlXCIpLFxuICAgICAgICBtYXRjaFR5cGU6IHJlcXVpcmUoXCIuL21hdGNoVHlwZVwiKSxcbiAgICAgICAgY1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIENTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBjb25uZWN0aXZpdHk6IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eVwiKSxcbiAgICAgICAgYm9yZGVyVHlwZTogcmVxdWlyZShcIi4vYm9yZGVyVHlwZVwiKSxcbiAgICAgICAgaW50ZXJwVHlwZTogcmVxdWlyZShcIi4vaW50ZXJwVHlwZVwiKSxcbiAgICAgICAgbWF0UHJvcDogcmVxdWlyZShcIi4vbWF0UHJvcFwiKSxcbiAgICAgICAgbm9ybVR5cGU6IHJlcXVpcmUoXCIuL25vcm1UeXBlXCIpLFxuICAgICAgICBjb252TW9kZTogcmVxdWlyZShcIi4vY29udk1vZGVcIiksXG4gICAgICAgIGNvbnZEb21haW46IHJlcXVpcmUoXCIuL2NvbnZEb21haW5cIiksXG4gICAgICAgIERpbTQ6IHJlcXVpcmUoXCIuL2RpbTRcIiksXG4gICAgICAgIFNlcTogcmVxdWlyZShcIi4vc2VxXCIpLFxuICAgICAgICBDb21wbGV4OiByZXF1aXJlKFwiLi9jb21wbGV4XCIpLFxuICAgICAgICBSb3c6IHJlcXVpcmUoXCIuL3Jvd1wiKSxcbiAgICAgICAgQ29sOiByZXF1aXJlKFwiLi9jb2xcIiksXG4gICAgICAgIFJvd3M6IHJlcXVpcmUoXCIuL3Jvd3NcIiksXG4gICAgICAgIENvbHM6IHJlcXVpcmUoXCIuL2NvbHNcIiksXG4gICAgICAgIGdldERldmljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5nZXREZXZpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5nZXREZXZpY2VDb3VudCgpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoaSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5kZXZpY2VJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZm8uaWQgPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZm9yOiByZXF1aXJlKFwiLi9tYWtlR2ZvclwiKShhZilcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHQ7Il19 diff --git a/lib/es5/index.js b/lib/es5/index.js index e15e452..d5abaeb 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var ext = require("./ext"); var Bluebird = require("bluebird"); @@ -57,4 +56,4 @@ entry.supportedPlatforms = function() { } return platforms; }; -//# sourceMappingURL=data:application/json;base64,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Q0FBRSxPQUFRO0FBQ1IsTUFBSTtBQUNGLFNBQUksS0FBaUIsR0FBSyxDQUFBLFdBQXVCLEdBQUssS0FBRyxDQUFHO0FBQzFELGtCQUF3QixBQUFDLEVBQUMsQ0FBQztNQUM3QjtBQUFBLElBQ0YsQ0FBRSxPQUFRO0FBQ1IsY0FBd0I7QUFDdEIsa0JBQXdCO01BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxBQW1ESixPQUFPLFVBQVEsQ0FBQztBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGV4dCA9IHJlcXVpcmUoXCIuL2V4dFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxubGV0IGVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpZCkge1xuICAgIGxldCBkaWQgPSBfLmlzU3RyaW5nKGlkKSA/IGlkLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBkaWQgPSBkaWQgfHwgXCJjcHVcIjtcbiAgICBmdW5jdGlvbiBjcmVhdGVBRigpIHtcbiAgICAgICAgc3dpdGNoIChkaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjcHVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX0NQVVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJjdWRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DVURBXCIpO1xuICAgICAgICAgICAgY2FzZSBcIm9wZW5jbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfT3BlbkNMXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGF0Zm9ybSAnXCIgKyBpZCArIFwiJyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgYWYgPSBjcmVhdGVBRigpO1xuICAgIGlmICghYWYuX19leHRlbmRlZCkge1xuICAgICAgICBleHQoYWYpO1xuICAgICAgICBhZi5fX2V4dGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFmO1xufTtcblxuZW50cnkuc3VwcG9ydGVkUGxhdGZvcm1zID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHBsYXRmb3JtcyA9IFtdO1xuICAgIGZvciAobGV0IGlkIG9mIFtcIkNQVVwiLCBcIkNVREFcIiwgXCJPcGVuQ0xcIl0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmaXJlID0gZW50cnkoaWQpO1xuICAgICAgICAgICAgcGxhdGZvcm1zLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGxhdGZvcm1zO1xufTsiXX0= +//# sourceMappingURL=data:application/json;base64,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TUFBSTtBQUNGLFNBQUksS0FBaUIsR0FBSyxDQUFBLFdBQXVCLEdBQUssS0FBRyxDQUFHO0FBQzFELGtCQUF3QixBQUFDLEVBQUMsQ0FBQztNQUM3QjtBQUFBLElBQ0YsQ0FBRSxPQUFRO0FBQ1IsY0FBd0I7QUFDdEIsa0JBQXdCO01BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxBQW1ESixPQUFPLFVBQVEsQ0FBQztBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGV4dCA9IHJlcXVpcmUoXCIuL2V4dFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxubGV0IGVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpZCkge1xuICAgIGxldCBkaWQgPSBfLmlzU3RyaW5nKGlkKSA/IGlkLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBkaWQgPSBkaWQgfHwgXCJjcHVcIjtcbiAgICBmdW5jdGlvbiBjcmVhdGVBRigpIHtcbiAgICAgICAgc3dpdGNoIChkaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjcHVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX0NQVVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJjdWRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DVURBXCIpO1xuICAgICAgICAgICAgY2FzZSBcIm9wZW5jbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfT3BlbkNMXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGF0Zm9ybSAnXCIgKyBpZCArIFwiJyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgYWYgPSBjcmVhdGVBRigpO1xuICAgIGlmICghYWYuX19leHRlbmRlZCkge1xuICAgICAgICBleHQoYWYpO1xuICAgICAgICBhZi5fX2V4dGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFmO1xufTtcblxuZW50cnkuc3VwcG9ydGVkUGxhdGZvcm1zID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHBsYXRmb3JtcyA9IFtdO1xuICAgIGZvciAobGV0IGlkIG9mIFtcIkNQVVwiLCBcIkNVREFcIiwgXCJPcGVuQ0xcIl0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmaXJlID0gZW50cnkoaWQpO1xuICAgICAgICAgICAgcGxhdGZvcm1zLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGxhdGZvcm1zO1xufTsiXX0= diff --git a/lib/es5/interpType.js b/lib/es5/interpType.js index e442665..636f1e5 100644 --- a/lib/es5/interpType.js +++ b/lib/es5/interpType.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var interpType = module.exports = { nearest: 0, linear: 1, @@ -10,4 +9,4 @@ var interpType = module.exports = { AF_INTERP_BILINEAR: 2, AF_INTERP_CUBIC: 3 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVycFR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFVBQVEsQ0FBSSxFQUFBO0FBQ1osTUFBSSxDQUFHLEVBQUE7QUFDUCxrQkFBZ0IsQ0FBRyxFQUFBO0FBQ25CLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBSSxFQUFBO0FBQ3JCLGdCQUFjLENBQUcsRUFBQTtBQUFBLEFBQ3JCLENBQUM7QUFBQSIsImZpbGUiOiJpbnRlcnBUeXBlLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBpbnRlcnBUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmVhcmVzdDogMCwgIC8vLzwgTmVhcmVzdCBJbnRlcnBvbGF0aW9uXG4gICAgbGluZWFyOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBiaWxpbmVyYXIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBjdWJpYzogMywgICAgLy8vPCBDdWJpYyBJbnRlcnBvbGF0aW9uLFxuICAgIEFGX0lOVEVSUF9ORUFSRVNUOiAwLCAgLy8vPCBOZWFyZXN0IEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfTElORUFSOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQklMSU5FQVIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQ1VCSUM6IDMgICAgIC8vLzwgQ3ViaWMgSW50ZXJwb2xhdGlvblxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVycFR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFVBQVEsQ0FBSSxFQUFBO0FBQ1osTUFBSSxDQUFHLEVBQUE7QUFDUCxrQkFBZ0IsQ0FBRyxFQUFBO0FBQ25CLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBSSxFQUFBO0FBQ3JCLGdCQUFjLENBQUcsRUFBQTtBQUFBLEFBQ3JCLENBQUM7QUFBQSIsImZpbGUiOiJpbnRlcnBUeXBlLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBpbnRlcnBUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmVhcmVzdDogMCwgIC8vLzwgTmVhcmVzdCBJbnRlcnBvbGF0aW9uXG4gICAgbGluZWFyOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBiaWxpbmVyYXIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBjdWJpYzogMywgICAgLy8vPCBDdWJpYyBJbnRlcnBvbGF0aW9uLFxuICAgIEFGX0lOVEVSUF9ORUFSRVNUOiAwLCAgLy8vPCBOZWFyZXN0IEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfTElORUFSOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQklMSU5FQVIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQ1VCSUM6IDMgICAgIC8vLzwgQ3ViaWMgSW50ZXJwb2xhdGlvblxufTsiXX0= diff --git a/lib/es5/makeGfor.js b/lib/es5/makeGfor.js index 2b21a81..15099a9 100644 --- a/lib/es5/makeGfor.js +++ b/lib/es5/makeGfor.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); var Seq = require("./seq"); @@ -40,4 +39,4 @@ function makeGfor(af) { }; } module.exports = makeGfor; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ha2VHZm9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO0FBRTFCLE9BQVMsU0FBTyxDQUFFLEVBQUMsQ0FBRztBQUNsQixPQUFPLFNBQVMsS0FBRyxDQUFFLEFBQUQsQ0FBRztBQUNuQixBQUFJLE1BQUEsQ0FBQSxJQUFHLEVBQUksRUFBQyxDQUFBLENBQUM7QUFDYixlQUFZLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLFNBQVEsT0FBTyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7QUFDdEMsU0FBSSxDQUFBLFdBQVcsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFHO0FBQzVCLFdBQUcsRUFBSSxFQUFBLENBQUM7QUFDUixhQUFLO01BQ1Q7QUFBQSxJQUNKO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFDLENBQUEsQ0FBRztBQUNiLFVBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxrQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZEO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFBLENBQUc7QUFDWixVQUFNLElBQUksTUFBSSxBQUFDLENBQUMseUJBQXdCLENBQUMsQ0FBQztJQUM5QztBQUFBLEFBQ0ksTUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLFNBQVEsQ0FBRSxJQUFHLENBQUMsQ0FBQztBQUM3QixPQUFJLFNBQVEsT0FBTyxFQUFJLENBQUEsSUFBRyxFQUFJLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLEVBQUksRUFBQSxDQUFDLENBQUc7QUFDckQsWUFBTSxFQUFJLENBQUEsU0FBUSxDQUFFLElBQUcsRUFBSSxFQUFBLENBQUMsQ0FBQztJQUNqQztBQUFBLEFBQ0ksTUFBQSxDQUFBLEdBQUUsQ0FBQztBQUNQLE9BQUksSUFBRyxJQUFNLEVBQUEsQ0FBRztBQUNaLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQy9CLEtBQ0ssS0FBSSxJQUFHLElBQU0sRUFBQSxDQUFHO0FBQ2pCLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQ0s7QUFDRCxVQUFNLElBQUksTUFBSSxBQUFDLENBQUMsa0NBQWlDLENBQUMsQ0FBQztJQUN2RDtBQUFBLEFBQ0EsTUFBRSxPQUFPLEVBQUksS0FBRyxDQUFDO0FBQ2pCLEtBQUMsWUFBWSxBQUFDLEVBQUMsQ0FBQztBQUNoQixNQUFJO0FBQ0EsY0FBUSxDQUFFLElBQUcsQ0FBQyxLQUFLLEFBQUMsQ0FBQyxPQUFNLENBQUcsSUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FDQSxPQUFRO0FBQ0osT0FBQyxZQUFZLEFBQUMsRUFBQyxDQUFDO0lBQ3BCO0FBQUEsRUFDSixDQUFBO0FBQ0o7QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLFNBQU8sQ0FBQztBQUFBIiwiZmlsZSI6Im1ha2VHZm9yLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbiBDb3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IFNlcSA9IHJlcXVpcmUoXCIuL3NlcVwiKTtcblxuZnVuY3Rpb24gbWFrZUdmb3IoYWYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2ZvcigpIHtcbiAgICAgICAgbGV0IGZQb3MgPSAtMTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZlBvcyA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZQb3MgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb2R5IGZ1bmN0aW9uIGFyZ3VtZW50IGV4cGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZlBvcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VxIGFyZ3VtZW50cyBleHBlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvc107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gZlBvcyArIDEgJiYgXy5pc09iamVjdChmUG9zICsgMSkpIHtcbiAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvcyArIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXE7XG4gICAgICAgIGlmIChmUG9zID09PSAxKSB7XG4gICAgICAgICAgICBzZXEgPSBuZXcgU2VxKGFyZ3VtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZlBvcyA9PT0gMikge1xuICAgICAgICAgICAgc2VxID0gbmV3IFNlcShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBTZXEgYXJndW1lbnRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXEuaXNHRm9yID0gdHJ1ZTtcbiAgICAgICAgYWYuX2dmb3JUb2dnbGUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFyZ3VtZW50c1tmUG9zXS5jYWxsKHRoaXNBcmcsIHNlcSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhZi5fZ2ZvclRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1ha2VHZm9yOyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ha2VHZm9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO0FBRTFCLE9BQVMsU0FBTyxDQUFFLEVBQUMsQ0FBRztBQUNsQixPQUFPLFNBQVMsS0FBRyxDQUFFLEFBQUQsQ0FBRztBQUNuQixBQUFJLE1BQUEsQ0FBQSxJQUFHLEVBQUksRUFBQyxDQUFBLENBQUM7QUFDYixlQUFZLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLFNBQVEsT0FBTyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7QUFDdEMsU0FBSSxDQUFBLFdBQVcsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFHO0FBQzVCLFdBQUcsRUFBSSxFQUFBLENBQUM7QUFDUixhQUFLO01BQ1Q7QUFBQSxJQUNKO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFDLENBQUEsQ0FBRztBQUNiLFVBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxrQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZEO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFBLENBQUc7QUFDWixVQUFNLElBQUksTUFBSSxBQUFDLENBQUMseUJBQXdCLENBQUMsQ0FBQztJQUM5QztBQUFBLEFBQ0ksTUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLFNBQVEsQ0FBRSxJQUFHLENBQUMsQ0FBQztBQUM3QixPQUFJLFNBQVEsT0FBTyxFQUFJLENBQUEsSUFBRyxFQUFJLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLEVBQUksRUFBQSxDQUFDLENBQUc7QUFDckQsWUFBTSxFQUFJLENBQUEsU0FBUSxDQUFFLElBQUcsRUFBSSxFQUFBLENBQUMsQ0FBQztJQUNqQztBQUFBLEFBQ0ksTUFBQSxDQUFBLEdBQUUsQ0FBQztBQUNQLE9BQUksSUFBRyxJQUFNLEVBQUEsQ0FBRztBQUNaLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQy9CLEtBQ0ssS0FBSSxJQUFHLElBQU0sRUFBQSxDQUFHO0FBQ2pCLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQ0s7QUFDRCxVQUFNLElBQUksTUFBSSxBQUFDLENBQUMsa0NBQWlDLENBQUMsQ0FBQztJQUN2RDtBQUFBLEFBQ0EsTUFBRSxPQUFPLEVBQUksS0FBRyxDQUFDO0FBQ2pCLEtBQUMsWUFBWSxBQUFDLEVBQUMsQ0FBQztBQUNoQixNQUFJO0FBQ0EsY0FBUSxDQUFFLElBQUcsQ0FBQyxLQUFLLEFBQUMsQ0FBQyxPQUFNLENBQUcsSUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FDQSxPQUFRO0FBQ0osT0FBQyxZQUFZLEFBQUMsRUFBQyxDQUFDO0lBQ3BCO0FBQUEsRUFDSixDQUFBO0FBQ0o7QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLFNBQU8sQ0FBQztBQUFBIiwiZmlsZSI6Im1ha2VHZm9yLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbiBDb3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IFNlcSA9IHJlcXVpcmUoXCIuL3NlcVwiKTtcblxuZnVuY3Rpb24gbWFrZUdmb3IoYWYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2ZvcigpIHtcbiAgICAgICAgbGV0IGZQb3MgPSAtMTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZlBvcyA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZQb3MgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb2R5IGZ1bmN0aW9uIGFyZ3VtZW50IGV4cGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZlBvcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VxIGFyZ3VtZW50cyBleHBlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvc107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gZlBvcyArIDEgJiYgXy5pc09iamVjdChmUG9zICsgMSkpIHtcbiAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvcyArIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXE7XG4gICAgICAgIGlmIChmUG9zID09PSAxKSB7XG4gICAgICAgICAgICBzZXEgPSBuZXcgU2VxKGFyZ3VtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZlBvcyA9PT0gMikge1xuICAgICAgICAgICAgc2VxID0gbmV3IFNlcShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBTZXEgYXJndW1lbnRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXEuaXNHRm9yID0gdHJ1ZTtcbiAgICAgICAgYWYuX2dmb3JUb2dnbGUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFyZ3VtZW50c1tmUG9zXS5jYWxsKHRoaXNBcmcsIHNlcSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhZi5fZ2ZvclRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1ha2VHZm9yOyJdfQ== diff --git a/lib/es5/matProp.js b/lib/es5/matProp.js index 0373c01..f7d0ce9 100644 --- a/lib/es5/matProp.js +++ b/lib/es5/matProp.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var matProp = module.exports = { none: 0, trans: 1, @@ -24,4 +23,4 @@ var matProp = module.exports = { AF_MAT_TRI_DIAG: 4096, AF_MAT_BLOCK_DIAG: 8192 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdFByb3AuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDM0IsS0FBRyxDQUFVLEVBQUE7QUFDYixNQUFJLENBQVMsRUFBQTtBQUNiLE9BQUssQ0FBUSxFQUFBO0FBQ2IsTUFBSSxDQUFTLEdBQUM7QUFDZCxNQUFJLENBQVMsR0FBQztBQUNkLFNBQU8sQ0FBTSxJQUFFO0FBQ2YsSUFBRSxDQUFXLElBQUU7QUFDZixPQUFLLENBQVEsS0FBRztBQUNoQixPQUFLLENBQVEsS0FBRztBQUNoQixRQUFNLENBQU8sS0FBRztBQUNoQixVQUFRLENBQUssS0FBRztBQUNoQixZQUFVLENBQVUsRUFBQTtBQUNwQixhQUFXLENBQVMsRUFBQTtBQUNwQixjQUFZLENBQVEsRUFBQTtBQUNwQixhQUFXLENBQVMsR0FBQztBQUNyQixhQUFXLENBQVMsR0FBQztBQUNyQixpQkFBZSxDQUFLLElBQUU7QUFDdEIsV0FBUyxDQUFXLElBQUU7QUFDdEIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsZ0JBQWMsQ0FBTSxLQUFHO0FBQ3ZCLGtCQUFnQixDQUFJLEtBQUc7QUFBQSxBQUMzQixDQUFDO0FBQUEiLCJmaWxlIjoibWF0UHJvcC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgbWF0UHJvcCA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5vbmUgICAgICAgOiAwLCAgICAvLy88IERlZmF1bHRcbiAgICB0cmFucyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBjVHJhbnMgICAgIDogMiwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIGNvbmp1Z2F0ZSB0YW5zcG9zZWRcbiAgICB1cHBlciAgICAgIDogMzIsICAgLy8vPCBNYXRyaXggaXMgdXBwZXIgdHJpYW5ndWxhclxuICAgIGxvd2VyICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgZGlhZ1VuaXQgICA6IDEyOCwgIC8vLzwgTWF0cml4IGRpYWdvbmFsIGNvbnRhaW5zIHVuaXRhcnkgdmFsdWVzXG4gICAgc3ltICAgICAgICA6IDUxMiwgIC8vLzwgTWF0cml4IGlzIHN5bW1ldHJpY1xuICAgIHBvc0RlZiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIG9ydGhvZyAgICAgOiAyMDQ4LCAvLy88IE1hdHJpeCBpcyBvcnRob2dvbmFsXG4gICAgdHJpRGlhZyAgICA6IDQwOTYsIC8vLzwgTWF0cml4IGlzIHRyaSBkaWFnb25hbFxuICAgIGJsb2NrRGlhZyAgOiA4MTkyLCAgLy8vPCBNYXRyaXggaXMgYmxvY2sgZGlhZ29uYWxcbiAgICBBRl9NQVRfTk9ORSAgICAgICA6IDAsICAgIC8vLzwgRGVmYXVsdFxuICAgIEFGX01BVF9UUkFOUyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBBRl9NQVRfQ1RSQU5TICAgICA6IDIsICAgIC8vLzwgRGF0YSBuZWVkcyB0byBiZSBjb25qdWdhdGUgdGFuc3Bvc2VkXG4gICAgQUZfTUFUX1VQUEVSICAgICAgOiAzMiwgICAvLy88IE1hdHJpeCBpcyB1cHBlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0xPV0VSICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0RJQUdfVU5JVCAgOiAxMjgsICAvLy88IE1hdHJpeCBkaWFnb25hbCBjb250YWlucyB1bml0YXJ5IHZhbHVlc1xuICAgIEFGX01BVF9TWU0gICAgICAgIDogNTEyLCAgLy8vPCBNYXRyaXggaXMgc3ltbWV0cmljXG4gICAgQUZfTUFUX1BPU0RFRiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIEFGX01BVF9PUlRIT0cgICAgIDogMjA0OCwgLy8vPCBNYXRyaXggaXMgb3J0aG9nb25hbFxuICAgIEFGX01BVF9UUklfRElBRyAgIDogNDA5NiwgLy8vPCBNYXRyaXggaXMgdHJpIGRpYWdvbmFsXG4gICAgQUZfTUFUX0JMT0NLX0RJQUcgOiA4MTkyICAvLy88IE1hdHJpeCBpcyBibG9jayBkaWFnb25hbFxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdFByb3AuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDM0IsS0FBRyxDQUFVLEVBQUE7QUFDYixNQUFJLENBQVMsRUFBQTtBQUNiLE9BQUssQ0FBUSxFQUFBO0FBQ2IsTUFBSSxDQUFTLEdBQUM7QUFDZCxNQUFJLENBQVMsR0FBQztBQUNkLFNBQU8sQ0FBTSxJQUFFO0FBQ2YsSUFBRSxDQUFXLElBQUU7QUFDZixPQUFLLENBQVEsS0FBRztBQUNoQixPQUFLLENBQVEsS0FBRztBQUNoQixRQUFNLENBQU8sS0FBRztBQUNoQixVQUFRLENBQUssS0FBRztBQUNoQixZQUFVLENBQVUsRUFBQTtBQUNwQixhQUFXLENBQVMsRUFBQTtBQUNwQixjQUFZLENBQVEsRUFBQTtBQUNwQixhQUFXLENBQVMsR0FBQztBQUNyQixhQUFXLENBQVMsR0FBQztBQUNyQixpQkFBZSxDQUFLLElBQUU7QUFDdEIsV0FBUyxDQUFXLElBQUU7QUFDdEIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsZ0JBQWMsQ0FBTSxLQUFHO0FBQ3ZCLGtCQUFnQixDQUFJLEtBQUc7QUFBQSxBQUMzQixDQUFDO0FBQUEiLCJmaWxlIjoibWF0UHJvcC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgbWF0UHJvcCA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5vbmUgICAgICAgOiAwLCAgICAvLy88IERlZmF1bHRcbiAgICB0cmFucyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBjVHJhbnMgICAgIDogMiwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIGNvbmp1Z2F0ZSB0YW5zcG9zZWRcbiAgICB1cHBlciAgICAgIDogMzIsICAgLy8vPCBNYXRyaXggaXMgdXBwZXIgdHJpYW5ndWxhclxuICAgIGxvd2VyICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgZGlhZ1VuaXQgICA6IDEyOCwgIC8vLzwgTWF0cml4IGRpYWdvbmFsIGNvbnRhaW5zIHVuaXRhcnkgdmFsdWVzXG4gICAgc3ltICAgICAgICA6IDUxMiwgIC8vLzwgTWF0cml4IGlzIHN5bW1ldHJpY1xuICAgIHBvc0RlZiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIG9ydGhvZyAgICAgOiAyMDQ4LCAvLy88IE1hdHJpeCBpcyBvcnRob2dvbmFsXG4gICAgdHJpRGlhZyAgICA6IDQwOTYsIC8vLzwgTWF0cml4IGlzIHRyaSBkaWFnb25hbFxuICAgIGJsb2NrRGlhZyAgOiA4MTkyLCAgLy8vPCBNYXRyaXggaXMgYmxvY2sgZGlhZ29uYWxcbiAgICBBRl9NQVRfTk9ORSAgICAgICA6IDAsICAgIC8vLzwgRGVmYXVsdFxuICAgIEFGX01BVF9UUkFOUyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBBRl9NQVRfQ1RSQU5TICAgICA6IDIsICAgIC8vLzwgRGF0YSBuZWVkcyB0byBiZSBjb25qdWdhdGUgdGFuc3Bvc2VkXG4gICAgQUZfTUFUX1VQUEVSICAgICAgOiAzMiwgICAvLy88IE1hdHJpeCBpcyB1cHBlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0xPV0VSICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0RJQUdfVU5JVCAgOiAxMjgsICAvLy88IE1hdHJpeCBkaWFnb25hbCBjb250YWlucyB1bml0YXJ5IHZhbHVlc1xuICAgIEFGX01BVF9TWU0gICAgICAgIDogNTEyLCAgLy8vPCBNYXRyaXggaXMgc3ltbWV0cmljXG4gICAgQUZfTUFUX1BPU0RFRiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIEFGX01BVF9PUlRIT0cgICAgIDogMjA0OCwgLy8vPCBNYXRyaXggaXMgb3J0aG9nb25hbFxuICAgIEFGX01BVF9UUklfRElBRyAgIDogNDA5NiwgLy8vPCBNYXRyaXggaXMgdHJpIGRpYWdvbmFsXG4gICAgQUZfTUFUX0JMT0NLX0RJQUcgOiA4MTkyICAvLy88IE1hdHJpeCBpcyBibG9jayBkaWFnb25hbFxufTsiXX0= diff --git a/lib/es5/matchType.js b/lib/es5/matchType.js index b292ba0..843c689 100644 --- a/lib/es5/matchType.js +++ b/lib/es5/matchType.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var matchType = module.exports = { SAD: 0, zSAD: 1, @@ -20,4 +19,4 @@ var matchType = module.exports = { AF_ZNCC: 7, AF_SHD: 8 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGNoVHlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxTQUFRLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUM3QixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sSUFBRSxDQUFHLEVBQUE7QUFDTCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJtYXRjaFR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG1hdGNoVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFNBRDogMCxcbiAgICB6U0FEOiAxLFxuICAgIGxTQUQ6IDIsXG4gICAgU1NEOiAzLFxuICAgIHpTU0Q6IDQsXG4gICAgbFNTRDogNSxcbiAgICBOQ0M6IDYsXG4gICAgek5DQzogNyxcbiAgICBTSEQ6IDgsXG4gICAgQUZfU0FEOiAwLFxuICAgIEFGX1pTQUQ6IDEsXG4gICAgQUZfTFNBRDogMixcbiAgICBBRl9TU0Q6IDMsXG4gICAgQUZfWlNTRDogNCxcbiAgICBBRl9MU1NEOiA1LFxuICAgIEFGX05DQzogNixcbiAgICBBRl9aTkNDOiA3LFxuICAgIEFGX1NIRDogOFxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGNoVHlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxTQUFRLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUM3QixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sSUFBRSxDQUFHLEVBQUE7QUFDTCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJtYXRjaFR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG1hdGNoVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFNBRDogMCxcbiAgICB6U0FEOiAxLFxuICAgIGxTQUQ6IDIsXG4gICAgU1NEOiAzLFxuICAgIHpTU0Q6IDQsXG4gICAgbFNTRDogNSxcbiAgICBOQ0M6IDYsXG4gICAgek5DQzogNyxcbiAgICBTSEQ6IDgsXG4gICAgQUZfU0FEOiAwLFxuICAgIEFGX1pTQUQ6IDEsXG4gICAgQUZfTFNBRDogMixcbiAgICBBRl9TU0Q6IDMsXG4gICAgQUZfWlNTRDogNCxcbiAgICBBRl9MU1NEOiA1LFxuICAgIEFGX05DQzogNixcbiAgICBBRl9aTkNDOiA3LFxuICAgIEFGX1NIRDogOFxufTsiXX0= diff --git a/lib/es5/normType.js b/lib/es5/normType.js index 77ff9a0..96bdd7b 100644 --- a/lib/es5/normType.js +++ b/lib/es5/normType.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var normType = module.exports = { vector1: 1, vectorInf: 2, @@ -20,4 +19,4 @@ var normType = module.exports = { AF_NORM_MATRIX_L_PQ: 8, AF_NORM_EUCLID: 3 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1UeXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQzVCLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxRQUFNLENBQUcsRUFBQTtBQUNULFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxVQUFRLENBQUcsRUFBQTtBQUNYLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxPQUFLLENBQUcsRUFBQTtBQUNSLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBRyxFQUFBO0FBQ3BCLGlCQUFlLENBQUcsRUFBQTtBQUNsQixpQkFBZSxDQUFHLEVBQUE7QUFDbEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG1CQUFpQixDQUFHLEVBQUE7QUFDcEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG9CQUFrQixDQUFHLEVBQUE7QUFDckIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoibm9ybVR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG5vcm1UeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmVjdG9yMTogMSwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHN1bSBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICB2ZWN0b3JJbmY6IDIsICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgbWF4IG9mIGFic29sdXRlIHZhbHVlc1xuICAgIHZlY3RvcjI6IDMsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGV1Y2xpZGVhbiBub3JtXG4gICAgdmVjdG9yUDogNCwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHAtbm9ybVxuICAgIG1hdHJpeDE6IDUsICAgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiBjb2x1bW4gc3Vtc1xuICAgIG1hdHJpeEluZjogNiwgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiByb3cgc3Vtc1xuICAgIG1hdHJpeDI6IDcsICAgICAgLy8vPCByZXR1cm5zIHRoZSBtYXggc2luZ3VsYXIgdmFsdWUpLiBDdXJyZW50bHkgTk9UIFNVUFBPUlRFRFxuICAgIG1hdHJpeExQcTogOCwgICAvLy88IHJldHVybnMgTHBxLW5vcm1cbiAgICBldWNsaWQ6IDMsIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgdmVjdG9yMlxuICAgIEFGX05PUk1fVkVDVE9SXzE6IDEsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgYWJzb2x1dGUgdmFsdWVzXG4gICAgQUZfTk9STV9WRUNUT1JfSU5GOiAyLCAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1heCBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICBBRl9OT1JNX1ZFQ1RPUl8yOiAzLCAgICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyBldWNsaWRlYW4gbm9ybVxuICAgIEFGX05PUk1fVkVDVE9SX1A6IDQsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBwLW5vcm1cbiAgICBBRl9OT1JNX01BVFJJWF8xOiA1LCAgICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2YgY29sdW1uIHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF9JTkY6IDYsICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2Ygcm93IHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF8yOiA3LCAgICAgIC8vLzwgcmV0dXJucyB0aGUgbWF4IHNpbmd1bGFyIHZhbHVlKS4gQ3VycmVudGx5IE5PVCBTVVBQT1JURURcbiAgICBBRl9OT1JNX01BVFJJWF9MX1BROiA4LCAgIC8vLzwgcmV0dXJucyBMcHEtbm9ybVxuICAgIEFGX05PUk1fRVVDTElEOiAzIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgQUZfTk9STV9WRUNUT1JfMlxufTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1UeXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQzVCLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxRQUFNLENBQUcsRUFBQTtBQUNULFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxVQUFRLENBQUcsRUFBQTtBQUNYLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxPQUFLLENBQUcsRUFBQTtBQUNSLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBRyxFQUFBO0FBQ3BCLGlCQUFlLENBQUcsRUFBQTtBQUNsQixpQkFBZSxDQUFHLEVBQUE7QUFDbEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG1CQUFpQixDQUFHLEVBQUE7QUFDcEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG9CQUFrQixDQUFHLEVBQUE7QUFDckIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoibm9ybVR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG5vcm1UeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmVjdG9yMTogMSwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHN1bSBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICB2ZWN0b3JJbmY6IDIsICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgbWF4IG9mIGFic29sdXRlIHZhbHVlc1xuICAgIHZlY3RvcjI6IDMsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGV1Y2xpZGVhbiBub3JtXG4gICAgdmVjdG9yUDogNCwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHAtbm9ybVxuICAgIG1hdHJpeDE6IDUsICAgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiBjb2x1bW4gc3Vtc1xuICAgIG1hdHJpeEluZjogNiwgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiByb3cgc3Vtc1xuICAgIG1hdHJpeDI6IDcsICAgICAgLy8vPCByZXR1cm5zIHRoZSBtYXggc2luZ3VsYXIgdmFsdWUpLiBDdXJyZW50bHkgTk9UIFNVUFBPUlRFRFxuICAgIG1hdHJpeExQcTogOCwgICAvLy88IHJldHVybnMgTHBxLW5vcm1cbiAgICBldWNsaWQ6IDMsIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgdmVjdG9yMlxuICAgIEFGX05PUk1fVkVDVE9SXzE6IDEsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgYWJzb2x1dGUgdmFsdWVzXG4gICAgQUZfTk9STV9WRUNUT1JfSU5GOiAyLCAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1heCBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICBBRl9OT1JNX1ZFQ1RPUl8yOiAzLCAgICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyBldWNsaWRlYW4gbm9ybVxuICAgIEFGX05PUk1fVkVDVE9SX1A6IDQsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBwLW5vcm1cbiAgICBBRl9OT1JNX01BVFJJWF8xOiA1LCAgICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2YgY29sdW1uIHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF9JTkY6IDYsICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2Ygcm93IHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF8yOiA3LCAgICAgIC8vLzwgcmV0dXJucyB0aGUgbWF4IHNpbmd1bGFyIHZhbHVlKS4gQ3VycmVudGx5IE5PVCBTVVBQT1JURURcbiAgICBBRl9OT1JNX01BVFJJWF9MX1BROiA4LCAgIC8vLzwgcmV0dXJucyBMcHEtbm9ybVxuICAgIEFGX05PUk1fRVVDTElEOiAzIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgQUZfTk9STV9WRUNUT1JfMlxufTsiXX0= diff --git a/lib/es5/row.js b/lib/es5/row.js index 7806743..6b6baea 100644 --- a/lib/es5/row.js +++ b/lib/es5/row.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Row(index) { @@ -7,4 +6,4 @@ function Row(index) { this.index = index; } module.exports = Row; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvdy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoicm93LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gUm93KGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3c7Il19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvdy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoicm93LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gUm93KGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3c7Il19 diff --git a/lib/es5/rows.js b/lib/es5/rows.js index c89925d..ae0b6c0 100644 --- a/lib/es5/rows.js +++ b/lib/es5/rows.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Rows(firstIndex, lastIndex) { @@ -9,4 +8,4 @@ function Rows(firstIndex, lastIndex) { this.lastIndex = lastIndex; } module.exports = Rows; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvd3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoicm93cy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIFJvd3MoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3dzOyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvd3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoicm93cy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIFJvd3MoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3dzOyJdfQ== diff --git a/lib/es5/seq.js b/lib/es5/seq.js index 2784639..716388c 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var _ = require("lodash"); var assert = require("better-assert"); function Seq(begin, end, step) { @@ -18,4 +17,4 @@ function Seq(begin, end, step) { this.isGFor = false; } module.exports = Seq; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUcsQ0FBQSxHQUFFLENBQUcsQ0FBQSxJQUFHLENBQUc7QUFDM0IsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUksQ0FBQSxZQUFZLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBRztBQUNwQixRQUFJLEVBQUksRUFBQSxDQUFDO0FBQ1QsTUFBRSxFQUFJLE1BQUksQ0FBQztFQUNmLEtBQ0s7QUFDRCxTQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7RUFDM0I7QUFBQSxBQUNBLEtBQUcsRUFBSSxDQUFBLElBQUcsR0FBSyxFQUFBLENBQUM7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUNsQixLQUFHLElBQUksRUFBSSxJQUFFLENBQUM7QUFDZCxLQUFHLEtBQUssRUFBSSxLQUFHLENBQUM7QUFFaEIsS0FBRyxPQUFPLEVBQUksTUFBSSxDQUFDO0FBQ3ZCO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJzZXEuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xuXG5mdW5jdGlvbiBTZXEoYmVnaW4sIGVuZCwgc3RlcCkge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGJlZ2luKSk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZW5kKSkge1xuICAgICAgICBiZWdpbiA9IDA7XG4gICAgICAgIGVuZCA9IGJlZ2luO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KF8uaXNOdW1iZXIoZW5kKSk7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoc3RlcCkpO1xuXG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cbiAgICB0aGlzLmlzR0ZvciA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUcsQ0FBQSxHQUFFLENBQUcsQ0FBQSxJQUFHLENBQUc7QUFDM0IsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUksQ0FBQSxZQUFZLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBRztBQUNwQixRQUFJLEVBQUksRUFBQSxDQUFDO0FBQ1QsTUFBRSxFQUFJLE1BQUksQ0FBQztFQUNmLEtBQ0s7QUFDRCxTQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7RUFDM0I7QUFBQSxBQUNBLEtBQUcsRUFBSSxDQUFBLElBQUcsR0FBSyxFQUFBLENBQUM7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUNsQixLQUFHLElBQUksRUFBSSxJQUFFLENBQUM7QUFDZCxLQUFHLEtBQUssRUFBSSxLQUFHLENBQUM7QUFFaEIsS0FBRyxPQUFPLEVBQUksTUFBSSxDQUFDO0FBQ3ZCO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJzZXEuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xuXG5mdW5jdGlvbiBTZXEoYmVnaW4sIGVuZCwgc3RlcCkge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGJlZ2luKSk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZW5kKSkge1xuICAgICAgICBiZWdpbiA9IDA7XG4gICAgICAgIGVuZCA9IGJlZ2luO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KF8uaXNOdW1iZXIoZW5kKSk7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoc3RlcCkpO1xuXG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cbiAgICB0aGlzLmlzR0ZvciA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcTsiXX0= diff --git a/lib/es5/source.js b/lib/es5/source.js index 05048f4..269aa07 100644 --- a/lib/es5/source.js +++ b/lib/es5/source.js @@ -1,9 +1,8 @@ "use strict"; -"use strict"; var source = module.exports = { device: 0, host: 1, afDevice: 0, afHost: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixPQUFLLENBQUcsRUFBQTtBQUNSLEtBQUcsQ0FBRyxFQUFBO0FBQ04sU0FBTyxDQUFHLEVBQUE7QUFDVixPQUFLLENBQUcsRUFBQTtBQUFBLEFBQ1osQ0FBQztBQUFBIiwiZmlsZSI6InNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgc291cmNlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGV2aWNlOiAwLFxuICAgIGhvc3Q6IDEsXG4gICAgYWZEZXZpY2U6IDAsXG4gICAgYWZIb3N0OiAxXG59OyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixPQUFLLENBQUcsRUFBQTtBQUNSLEtBQUcsQ0FBRyxFQUFBO0FBQ04sU0FBTyxDQUFHLEVBQUE7QUFDVixPQUFLLENBQUcsRUFBQTtBQUFBLEFBQ1osQ0FBQztBQUFBIiwiZmlsZSI6InNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgc291cmNlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGV2aWNlOiAwLFxuICAgIGhvc3Q6IDEsXG4gICAgYWZEZXZpY2U6IDAsXG4gICAgYWZIb3N0OiAxXG59OyJdfQ== diff --git a/package.json b/package.json index 2213e56..2997953 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,17 @@ { "name": "arrayfire_js", - "version": "0.14.0", + "version": "0.14.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", + "repository": { + "type": "git", + "url": "https://github.com/arrayfire/arrayfire-js.git" + }, "dependencies": { "bindings": "*", "cmake-js": "*", "lodash": "*", - "nan": "*", + "nan": "1", "traceur-runtime": "*" }, "scripts": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index c814336..86c30cf 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -177,21 +176,21 @@ function testPlatform(id) { verify4(array); }); it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__10() { + var f = async($traceurRuntime.initGeneratorFunction(function $__11() { var int, count, buff, - v$__0, + v$__1, array, buff2, - v$__1, + v$__2, v1, v2, array2, buff3, - v$__2, - v1$__3, - v2$__4, + v$__3, + v1$__4, + v2$__5, v; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) @@ -200,8 +199,8 @@ function testPlatform(id) { int = ref.types.int; count = 10; buff = new Buffer(int.size * count); - for (v$__0 = 0; v$__0 < count; v$__0++) { - int.set(buff, v$__0 * int.size, v$__0 * v$__0); + for (v$__1 = 0; v$__1 < count; v$__1++) { + int.set(buff, v$__1 * int.size, v$__1 * v$__1); } assert(_.isFunction(AFArray.create)); assert(_.isFunction(AFArray.createAsync)); @@ -228,11 +227,11 @@ function testPlatform(id) { $ctx.state = 8; break; case 8: - for (v$__1 = 0; v$__1 < count; v$__1++) { - v1 = int.get(buff, v$__1 * int.size); - v2 = int.get(buff2, v$__1 * int.size); + for (v$__2 = 0; v$__2 < count; v$__2++) { + v1 = int.get(buff, v$__2 * int.size); + v2 = int.get(buff2, v$__2 * int.size); assert(v1 === v2); - assert(v1 === v$__1 * v$__1); + assert(v1 === v$__2 * v$__2); } array2 = array.copy(); assert(array2 instanceof AFArray); @@ -249,11 +248,11 @@ function testPlatform(id) { case 12: assert(buff3 instanceof Buffer); assert(buff3.length === int.size * count); - for (v$__2 = 0; v$__2 < count; v$__2++) { - v1$__3 = int.get(buff, v$__2 * int.size); - v2$__4 = int.get(buff3, v$__2 * int.size); - assert(v1$__3 === v2$__4); - assert(v1$__3 === v$__2 * v$__2); + for (v$__3 = 0; v$__3 < count; v$__3++) { + v1$__4 = int.get(buff, v$__3 * int.size); + v2$__5 = int.get(buff3, v$__3 * int.size); + assert(v1$__4 === v2$__5); + assert(v1$__4 === v$__3 * v$__3); } $ctx.state = 40; break; @@ -315,7 +314,7 @@ function testPlatform(id) { default: return $ctx.end(); } - }, $__10, this); + }, $__11, this); })); f().nodeify(done); }); @@ -323,8 +322,8 @@ function testPlatform(id) { var int = ref.types.int; var count = 10; var buff = new Buffer(int.size * count); - for (var v$__5 = 0; v$__5 < count; v$__5++) { - int.set(buff, v$__5 * int.size, v$__5 * v$__5); + for (var v$__6 = 0; v$__6 < count; v$__6++) { + int.set(buff, v$__6 * int.size, v$__6 * v$__6); } assert(_.isFunction(AFArray.create)); assert(_.isFunction(AFArray.createSync)); @@ -333,11 +332,11 @@ function testPlatform(id) { assert(array.type() === af.dType.s32); var buff2 = new Buffer(int.size * count); array.hostSync(buff2); - for (var v$__6 = 0; v$__6 < count; v$__6++) { - var v1 = int.get(buff, v$__6 * int.size); - var v2 = int.get(buff2, v$__6 * int.size); + for (var v$__7 = 0; v$__7 < count; v$__7++) { + var v1 = int.get(buff, v$__7 * int.size); + var v2 = int.get(buff2, v$__7 * int.size); assert(v1 === v2); - assert(v1 === v$__6 * v$__6); + assert(v1 === v$__7 * v$__7); } var array2 = array.copy(); assert(array2 instanceof AFArray); @@ -345,11 +344,11 @@ function testPlatform(id) { var buff3 = array2.hostSync(); assert(buff3 instanceof Buffer); assert(buff3.length === int.size * count); - for (var v$__7 = 0; v$__7 < count; v$__7++) { - var v1$__8 = int.get(buff, v$__7 * int.size); - var v2$__9 = int.get(buff3, v$__7 * int.size); - assert(v1$__8 === v2$__9); - assert(v1$__8 === v$__7 * v$__7); + for (var v$__8 = 0; v$__8 < count; v$__8++) { + var v1$__9 = int.get(buff, v$__8 * int.size); + var v2$__10 = int.get(buff3, v$__8 * int.size); + assert(v1$__9 === v2$__10); + assert(v1$__9 === v$__8 * v$__8); } var v = array2.valueSync(); assert(v === 0.0); @@ -403,4 +402,4 @@ describe("AFArray class and methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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YUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FB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LEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsS0FBSSxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsVUFBVSxBQUFDLEVBQUMsQ0FBQztBQUMzQixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7QUFFdkIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxFQUFDLElBQUksRUFBSSxFQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0NBQXVDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxvREFBb0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdkMsY0FBTSxJQUFJLEFBQUMsRUFBQyx1Q0FBdUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDeEMsY0FBTSxJQUFJLEFBQUMsRUFBQyx3Q0FBd0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDaEUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0JBQXVCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxvQ0FBb0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsdUNBQXNDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkQsY0FBTSxJQUFJLEFBQUMsRUFBQyxtREFBbUQsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDM0UsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDN0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiYWZBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcbiAgICAgICAgICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZXhwb3J0IEFGQXJyYXkgY29uc3RydWN0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGVtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdEFzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdEFzeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RTeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdFN5bmNBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jU3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY1N5bmMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBmYWlsIHdpdGggb25lIG51bWJlciBhcmd1bWVudFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBvbmUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0d28gZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LnR5cGUoKSA9PT0gYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkubnVtZGltcygpID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygwKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDEpID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLm5kaW1zID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMF0gPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMV0gPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0aHJlZSBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAxMCAqIDIwICogMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDEpO1xuICAgICAgICAgICAgICAgIGxldCBkaW1zID0gYXJyYXkuZGltcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGRpbXMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5lbGVtZW50cyA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2NhbGFyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXN2ZWN0b3IoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNib29sKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB2ZXJpZnk0KGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDQwKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCA0MCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWwgZnJvbSBkaW00XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KHsgdmFsdWVzOiBbMTAsIDIwLCAzMCwgNDBdIH0sIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNCBhcnJheVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheShbMTAsIDIwLCAzMCwgNDBdLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBhc3luY2hyb25vdXNseSB3LyBnZW5lcmF0b3JzXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlQXN5bmMpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gY291bnQgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgYXJyYXkuaG9zdEFzeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIgaW5zdGFuY2VvZiBBRkFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0geWllbGQgYXJyYXkyLmhvc3RBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGRvIHNvbWUgaW5kZXhpbmc6XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0geWllbGQgYXJyYXkyLnZhbHVlQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDAuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdCgxKS52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGYoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBzeW5jaHJvbm91c2x5IChibG9ja2luZylcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSAxMDtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGludC5zZXQoYnVmZiwgdiAqIGludC5zaXplLCB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGVTeW5jKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBBRkFycmF5LmNyZWF0ZVN5bmMoY291bnQsIGFmLmRUeXBlLnMzMiwgYnVmZik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICBsZXQgYnVmZjIgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGFycmF5Lmhvc3RTeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5MiA9IGFycmF5LmNvcHkoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZjMgPSBhcnJheTIuaG9zdFN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChidWZmMy5sZW5ndGggPT09IGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MiA9IGludC5nZXQoYnVmZjMsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgIGxldCB2ID0gYXJyYXkyLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5LmF0KDEpLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdCgyKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KFwiZW5kXCIpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoYWYuZW5kIC0gMSkuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc3NpZ25tZW50IG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGluZGV4aW5nIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGluZGV4aW5nIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciByb3dcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3cgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgY29sIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2UgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHJvd3MgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbHMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igc2xpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2VzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhcml0aG1ldGljIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBsb2dpY2FsIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGxvZ2ljYWwgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkFGQXJyYXkgY2xhc3MgYW5kIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7Il19 +//# sourceMappingURL=data:application/json;base64,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Q0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFB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LElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsS0FBSSxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsVUFBVSxBQUFDLEVBQUMsQ0FBQztBQUMzQixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7QUFFdkIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxFQUFDLElBQUksRUFBSSxFQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0NBQXVDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxvREFBb0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdkMsY0FBTSxJQUFJLEFBQUMsRUFBQyx1Q0FBdUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDeEMsY0FBTSxJQUFJLEFBQUMsRUFBQyx3Q0FBd0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDaEUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0JBQXVCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxvQ0FBb0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsdUNBQXNDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkQsY0FBTSxJQUFJLEFBQUMsRUFBQyxtREFBbUQsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDM0UsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDN0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiYWZBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcbiAgICAgICAgICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZXhwb3J0IEFGQXJyYXkgY29uc3RydWN0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGVtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdEFzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdEFzeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RTeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdFN5bmNBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jU3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY1N5bmMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBmYWlsIHdpdGggb25lIG51bWJlciBhcmd1bWVudFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBvbmUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0d28gZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LnR5cGUoKSA9PT0gYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkubnVtZGltcygpID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygwKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDEpID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLm5kaW1zID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMF0gPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMV0gPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0aHJlZSBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAxMCAqIDIwICogMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDEpO1xuICAgICAgICAgICAgICAgIGxldCBkaW1zID0gYXJyYXkuZGltcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGRpbXMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5lbGVtZW50cyA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2NhbGFyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXN2ZWN0b3IoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNib29sKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB2ZXJpZnk0KGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDQwKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCA0MCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWwgZnJvbSBkaW00XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KHsgdmFsdWVzOiBbMTAsIDIwLCAzMCwgNDBdIH0sIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNCBhcnJheVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheShbMTAsIDIwLCAzMCwgNDBdLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBhc3luY2hyb25vdXNseSB3LyBnZW5lcmF0b3JzXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlQXN5bmMpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gY291bnQgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgYXJyYXkuaG9zdEFzeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIgaW5zdGFuY2VvZiBBRkFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0geWllbGQgYXJyYXkyLmhvc3RBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGRvIHNvbWUgaW5kZXhpbmc6XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0geWllbGQgYXJyYXkyLnZhbHVlQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDAuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdCgxKS52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGYoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBzeW5jaHJvbm91c2x5IChibG9ja2luZylcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSAxMDtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGludC5zZXQoYnVmZiwgdiAqIGludC5zaXplLCB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGVTeW5jKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBBRkFycmF5LmNyZWF0ZVN5bmMoY291bnQsIGFmLmRUeXBlLnMzMiwgYnVmZik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICBsZXQgYnVmZjIgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGFycmF5Lmhvc3RTeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5MiA9IGFycmF5LmNvcHkoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZjMgPSBhcnJheTIuaG9zdFN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChidWZmMy5sZW5ndGggPT09IGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MiA9IGludC5nZXQoYnVmZjMsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgIGxldCB2ID0gYXJyYXkyLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5LmF0KDEpLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdCgyKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KFwiZW5kXCIpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoYWYuZW5kIC0gMSkuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc3NpZ25tZW50IG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGluZGV4aW5nIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGluZGV4aW5nIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciByb3dcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3cgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgY29sIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2UgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHJvd3MgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbHMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igc2xpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2VzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhcml0aG1ldGljIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBsb2dpY2FsIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGxvZ2ljYWwgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkFGQXJyYXkgY2xhc3MgYW5kIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7Il19 diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index e3a99cf..dc76abc 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -170,4 +169,4 @@ describe("Functions to create arrays", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFB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TyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTWF0aC5mbG9vcih2KSA9PT0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCB5aWVsZCB1bmlmb3JtIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmR1KFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8IHYgPT09IDEuMCB8fCAodiA+IDAgJiYgdiA8IDEuMCAmJiB2ICUgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZigpLm5vZGVpZnkoZG9uZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kZlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBpbnZva2luZyBub3JtYWwgcmFuZG9tIGludCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBhZi5yYW5kbigyLCA0LCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaW52YWxpZCBkdHlwZSBhcmd1bWVudC9pZy50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCB0aHJvdyBhcHByb3ByaWF0ZSBlcnJvci5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgdGhyb3cuXCIpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgbm9ybWFsIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmRuKFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8ICh2ID4gLTQuMCAmJiB2IDwgNC4wICYmIHYgJSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImlkZW50aXR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpZGVudGl0eSB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc2NyaWJlKFwicmFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IHJhbmdlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJpb3RhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJkaWFnXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBkaWFnIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJjb25zdGFudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgY29uc3RhbnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiRnVuY3Rpb25zIHRvIGNyZWF0ZSBhcnJheXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFBQUMsQ0FnREgsY0FBVSxB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dEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTWF0aC5mbG9vcih2KSA9PT0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCB5aWVsZCB1bmlmb3JtIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmR1KFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8IHYgPT09IDEuMCB8fCAodiA+IDAgJiYgdiA8IDEuMCAmJiB2ICUgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZigpLm5vZGVpZnkoZG9uZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kZlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBpbnZva2luZyBub3JtYWwgcmFuZG9tIGludCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBhZi5yYW5kbigyLCA0LCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaW52YWxpZCBkdHlwZSBhcmd1bWVudC9pZy50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCB0aHJvdyBhcHByb3ByaWF0ZSBlcnJvci5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgdGhyb3cuXCIpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgbm9ybWFsIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmRuKFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8ICh2ID4gLTQuMCAmJiB2IDwgNC4wICYmIHYgJSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImlkZW50aXR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpZGVudGl0eSB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc2NyaWJlKFwicmFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IHJhbmdlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJpb3RhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJkaWFnXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBkaWFnIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJjb25zdGFudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgY29uc3RhbnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiRnVuY3Rpb25zIHRvIGNyZWF0ZSBhcnJheXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index 1ae6a95..b56cc19 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var assert = require("better-assert"); var _ = require("lodash"); var Bluebird = require("bluebird"); @@ -63,4 +62,4 @@ describe("device methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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LE9BQUMsQUFBQyxDQUFDLDhCQUE2QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzlDLFNBQUMsS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDakIsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNkJBQTRCLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDN0MsU0FBQyxVQUFVLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4Q0FBNkMsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5RCxTQUFDLFVBQVUsQUFBQyxDQUFDLEdBQUUsQ0FBQyxLQUNSLEFBQUMsQ0FBQyxTQUFTLEFBQUQsQ0FBRztBQUNiLGFBQUcsQUFBQyxDQUFDLEdBQUksTUFBSSxBQUFDLENBQUMsbUJBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQ0EsVUFBUyxBQUFELENBQUc7QUFDUCxhQUFHLEFBQUMsRUFBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsZ0JBQWUsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNsQyxhQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUNuQixhQUFXLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN0QixhQUFXLEFBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRiIsImZpbGUiOiJkZXZpY2VUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtKGlkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W1wiVEVTVF9cIiArIGlkXSA9PT0gXCIxXCIpIHtcbiAgICAgICAgZGVzY3JpYmUoaWQgKyBcIiBwbGF0Zm9ybVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYWYgPSByZXF1aXJlKFwiLi4vLi5cIikoaWQpO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCByZXR1cm4gYXZhaWxhYmxlIGRldmljZXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRldmljZUNvdW50ID0gYWYuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNlQ291bnQgPiAwKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5mb3MgPSBhZi5nZXREZXZpY2VzKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNBcnJheShpbmZvcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmZvcy5sZW5ndGggPT09IGRldmljZUNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIGluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ubmFtZSkgJiYgaW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNTdHJpbmcoaW5mby5wbGF0Zm9ybSkgJiYgaW5mby5wbGF0Zm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8uY29tcHV0ZSkgJiYgaW5mby5jb21wdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNCb29sZWFuKGluZm8uaXNEb3VibGVBdmFpbGFibGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZG8gc3luYyB3aXRoIGNhbGxiYWNrXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jKGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBwcm9taXNlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic3luYyBzaG91bGQgZmFpbGVkIGlmIGRldmljZSBpcyBvdXQgb2YgcmFuZ2VcIiwgZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICAgICAgICAgIGFmLnN5bmNBc3luYygxMDApXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBmYWlsIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiZGV2aWNlIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7XG4iXX0= +//# sourceMappingURL=data:application/json;base64,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LDhCQUE2QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzlDLFNBQUMsS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDakIsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNkJBQTRCLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDN0MsU0FBQyxVQUFVLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4Q0FBNkMsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5RCxTQUFDLFVBQVUsQUFBQyxDQUFDLEdBQUUsQ0FBQyxLQUNSLEFBQUMsQ0FBQyxTQUFTLEFBQUQsQ0FBRztBQUNiLGFBQUcsQUFBQyxDQUFDLEdBQUksTUFBSSxBQUFDLENBQUMsbUJBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQ0EsVUFBUyxBQUFELENBQUc7QUFDUCxhQUFHLEFBQUMsRUFBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsZ0JBQWUsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNsQyxhQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUNuQixhQUFXLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN0QixhQUFXLEFBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRiIsImZpbGUiOiJkZXZpY2VUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtKGlkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W1wiVEVTVF9cIiArIGlkXSA9PT0gXCIxXCIpIHtcbiAgICAgICAgZGVzY3JpYmUoaWQgKyBcIiBwbGF0Zm9ybVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYWYgPSByZXF1aXJlKFwiLi4vLi5cIikoaWQpO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCByZXR1cm4gYXZhaWxhYmxlIGRldmljZXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRldmljZUNvdW50ID0gYWYuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNlQ291bnQgPiAwKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5mb3MgPSBhZi5nZXREZXZpY2VzKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNBcnJheShpbmZvcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmZvcy5sZW5ndGggPT09IGRldmljZUNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIGluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ubmFtZSkgJiYgaW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNTdHJpbmcoaW5mby5wbGF0Zm9ybSkgJiYgaW5mby5wbGF0Zm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8uY29tcHV0ZSkgJiYgaW5mby5jb21wdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNCb29sZWFuKGluZm8uaXNEb3VibGVBdmFpbGFibGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZG8gc3luYyB3aXRoIGNhbGxiYWNrXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jKGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBwcm9taXNlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic3luYyBzaG91bGQgZmFpbGVkIGlmIGRldmljZSBpcyBvdXQgb2YgcmFuZ2VcIiwgZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICAgICAgICAgIGFmLnN5bmNBc3luYygxMDApXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBmYWlsIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiZGV2aWNlIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7XG4iXX0= diff --git a/tests/es5/moveAndReorderArrayTests.js b/tests/es5/moveAndReorderArrayTests.js index e73f997..a67121a 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -1,5 +1,4 @@ "use strict"; -"use strict"; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -59,4 +58,4 @@ describe("Functions to create arrays", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vdmVBbmRSZW9yZGVyQXJyYXlUZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQyxDQUFHO0FBQ3ZCLEtBQUksT0FBTSxJQUFJLENBQUUsT0FBTSxFQUFJLEdBQUMsQ0FBQyxJQUFNLElBQUUsQ0FBRztBQUNuQyxXQUFPLEFBQUMsQ0FBQyxFQUFDLEVBQUksWUFBVSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ25DLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsVUFBVSxBQUFELENBQUc7QUFDekIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsZ0NBQWdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLFNBQVEsQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUM1QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxtQ0FBbUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsT0FBTSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQzFCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGlDQUFpQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxTQUFRLENBQUcsVUFBVSxBQUFELENBQUc7QUFDNUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsbUNBQW1DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUN6QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxnQ0FBZ0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxXQUFVLENBQUcsVUFBVSxBQUFELENBQUc7QUFDOUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUFBLEFBRUEsT0FBTyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBVSxBQUFELENBQUc7QUFDL0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJqb2luXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBqb2luIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJ0aWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCB0aWxlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyZW9yZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHJlb3JkZXIgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJzaGlmdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgc2hpZnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcIm1vZGRpbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IG1vZGRpbXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsYXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsYXQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsaXAgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcInRyYW5zcG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgdHJhbnNwb3NlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkZ1bmN0aW9ucyB0byBjcmVhdGUgYXJyYXlzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDUFVcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiT3BlbkNMXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIkNVREFcIik7XG59KTsiXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vdmVBbmRSZW9yZGVyQXJyYXlUZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQyxDQUFHO0FBQ3ZCLEtBQUksT0FBTSxJQUFJLENBQUUsT0FBTSxFQUFJLEdBQUMsQ0FBQyxJQUFNLElBQUUsQ0FBRztBQUNuQyxXQUFPLEFBQUMsQ0FBQyxFQUFDLEVBQUksWUFBVSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ25DLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsVUFBVSxBQUFELENBQUc7QUFDekIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsZ0NBQWdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLFNBQVEsQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUM1QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxtQ0FBbUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsT0FBTSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQzFCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGlDQUFpQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxTQUFRLENBQUcsVUFBVSxBQUFELENBQUc7QUFDNUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsbUNBQW1DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUN6QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxnQ0FBZ0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxXQUFVLENBQUcsVUFBVSxBQUFELENBQUc7QUFDOUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUFBLEFBRUEsT0FBTyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBVSxBQUFELENBQUc7QUFDL0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJqb2luXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBqb2luIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJ0aWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCB0aWxlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyZW9yZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHJlb3JkZXIgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJzaGlmdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgc2hpZnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcIm1vZGRpbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IG1vZGRpbXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsYXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsYXQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsaXAgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcInRyYW5zcG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgdHJhbnNwb3NlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkZ1bmN0aW9ucyB0byBjcmVhdGUgYXJyYXlzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDUFVcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiT3BlbkNMXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIkNVREFcIik7XG59KTsiXX0= From 0e7793e051944cf3c358f3f04b1d877f7eaa520d Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 26 Aug 2015 21:20:45 +0200 Subject: [PATCH 05/45] nan link updated --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2997953..281004b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "bindings": "*", "cmake-js": "*", "lodash": "*", - "nan": "1", + "nan": "2", "traceur-runtime": "*" }, "scripts": { From a7c03aaa203e946791392f22f0192f9cfcfd7bc4 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Thu, 27 Aug 2015 22:38:42 +0200 Subject: [PATCH 06/45] builds, but crashes --- src/arrayhelperfunctions.cpp | 28 +- src/arrayhelperfunctions.h | 2 +- src/arraywrapper.cpp | 616 +++++++++++++++++------------------ src/arraywrapper.h | 12 +- src/computervision.cpp | 104 +++--- src/computervision.h | 2 +- src/createarray.cpp | 124 +++---- src/createarray.h | 2 +- src/device.cpp | 116 +++---- src/device.h | 2 +- src/errors.h | 4 +- src/fire.cpp | 54 +-- src/fire.h | 2 +- src/helpers.cpp | 91 +++--- src/helpers.h | 211 ++++++------ src/imageprocessing.cpp | 260 +++++++-------- src/imageprocessing.h | 2 +- src/linearalgebra.cpp | 249 +++++++------- src/linearalgebra.h | 2 +- src/mathfunctions.cpp | 126 +++---- src/mathfunctions.h | 2 +- src/moveandreorderarray.cpp | 53 ++- src/moveandreorderarray.h | 2 +- src/signalprocessing.cpp | 174 +++++----- src/signalprocessing.h | 2 +- src/statistics.cpp | 68 ++-- src/statistics.h | 2 +- src/symbols.cpp | 226 ++++++------- src/symbols.h | 102 +++--- src/vectoralgorithms.cpp | 117 +++---- src/vectoralgorithms.h | 2 +- src/worker.h | 55 ++-- 32 files changed, 1428 insertions(+), 1386 deletions(-) diff --git a/src/arrayhelperfunctions.cpp b/src/arrayhelperfunctions.cpp index 869021e..16edd9f 100644 --- a/src/arrayhelperfunctions.cpp +++ b/src/arrayhelperfunctions.cpp @@ -46,22 +46,32 @@ ARRAYFIRE_SYNC_METHOD_ARR(IsNaN, isNaN) NAN_METHOD(Print) { - NanScope(); try { ARGS_LEN(1); Guard(); - af_print(*ArrayWrapper::GetArrayAt(args, 0)); - NanReturnUndefined(); + af_print(*ArrayWrapper::GetArrayAt(info, 0)); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } -void InitArrayHelperFunctions(v8::Handle exports) +NAN_MODULE_INIT(InitArrayHelperFunctions) { - exports->Set(NanNew("iszero"), NanNew(IsZero)->GetFunction()); - exports->Set(NanNew("isZero"), NanNew(IsZero)->GetFunction()); - exports->Set(NanNew("isInf"), NanNew(IsInf)->GetFunction()); - exports->Set(NanNew("isNaN"), NanNew(IsNaN)->GetFunction()); - exports->Set(NanNew("print"), NanNew(Print)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("iszero").ToLocalChecked(), + Nan::New(IsZero)->GetFunction()); + + Nan::Set(target, Nan::New("isZero").ToLocalChecked(), + Nan::New(IsZero)->GetFunction()); + + Nan::Set(target, Nan::New("isInf").ToLocalChecked(), + Nan::New(IsInf)->GetFunction()); + + Nan::Set(target, Nan::New("isNaN").ToLocalChecked(), + Nan::New(IsNaN)->GetFunction()); + + Nan::Set(target, Nan::New("print").ToLocalChecked(), + Nan::New(Print)->GetFunction()); } diff --git a/src/arrayhelperfunctions.h b/src/arrayhelperfunctions.h index 44b09b1..d3bd679 100644 --- a/src/arrayhelperfunctions.h +++ b/src/arrayhelperfunctions.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitArrayHelperFunctions(v8::Handle exports); +NAN_MODULE_INIT(InitArrayHelperFunctions); #endif // ARRAYFIRE_ARRAYHELPERFUNCTIONS_H diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 03ba7f9..4a709bd 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -41,7 +41,7 @@ using namespace v8; using namespace std; using namespace node; -Persistent ArrayWrapper::constructor; +Nan::Persistent ArrayWrapper::constructor; int GetMemSize(const af::array* array) { @@ -57,124 +57,126 @@ ArrayWrapper::ArrayWrapper(af::array* array) : _array(array) { assert(array); - NanAdjustExternalMemory(GetMemSize(array)); + Nan::AdjustExternalMemory(GetMemSize(array)); } ArrayWrapper::~ArrayWrapper() { - NanAdjustExternalMemory(-GetMemSize(_array)); + Nan::AdjustExternalMemory(-GetMemSize(_array)); delete _array; } -void ArrayWrapper::Init(v8::Local exports) +NAN_MODULE_INIT(ArrayWrapper::Init) { - auto tmpl = NanNew(New); - tmpl->SetClassName(NanNew("AFArray")); + Nan::HandleScope scope; + + auto tmpl = Nan::New(New); + tmpl->SetClassName(Nan::New("AFArray").ToLocalChecked()); int noOfMethods = 21; tmpl->InstanceTemplate()->SetInternalFieldCount(noOfMethods); - NanSetPrototypeTemplate(tmpl, NanNew("elements"), NanNew(Elements), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("host"), NanNew(Host), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("copyToHost"), NanNew(Host), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("scalar"), NanNew(Scalar), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("value"), NanNew(Scalar), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("write"), NanNew(Write), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("type"), NanNew(Type), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("dims"), NanNew(Dims), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("numdims"), NanNew(NumDims), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("numDims"), NanNew(NumDims), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bytes"), NanNew(Bytes), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("copy"), NanNew(Copy), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isempty"), NanNew(IsEmpty), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isEmpty"), NanNew(IsEmpty), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isscalar"), NanNew(IsScalar), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isScalar"), NanNew(IsScalar), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isvector"), NanNew(IsVector), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isVector"), NanNew(IsVector), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isrow"), NanNew(IsRow), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isRow"), NanNew(IsRow), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("iscolumn"), NanNew(IsColumn), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isColumn"), NanNew(IsColumn), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("iscomplex"), NanNew(IsComplex), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isComplex"), NanNew(IsComplex), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isreal"), NanNew(IsReal), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isReal"), NanNew(IsReal), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isdouble"), NanNew(IsDouble), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isDouble"), NanNew(IsDouble), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("issingle"), NanNew(IsSingle), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isSingle"), NanNew(IsSingle), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isrealfloating"), NanNew(IsRealFloating), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isRealFloating"), NanNew(IsRealFloating), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isfloating"), NanNew(IsFloating), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isFloating"), NanNew(IsFloating), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isinteger"), NanNew(IsInteger), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isInteger"), NanNew(IsInteger), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isbool"), NanNew(IsBool), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("isBool"), NanNew(IsBool), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("eval"), NanNew(Eval), v8::None); - - NanSetPrototypeTemplate(tmpl, NanNew("at"), NanNew(At), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("row"), NanNew(Row), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("col"), NanNew(Col), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("slice"), NanNew(Slice), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rows"), NanNew(Rows), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("cols"), NanNew(Cols), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("slices"), NanNew(Slices), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("as"), NanNew(As), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("assign"), NanNew(Assign), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("set"), NanNew(Assign), v8::None); - - NanSetPrototypeTemplate(tmpl, NanNew("add"), NanNew(Add), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("addAssign"), NanNew(AddAssign), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("sub"), NanNew(Sub), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("subAssign"), NanNew(SubAssign), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("mul"), NanNew(Mul), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("mulAssign"), NanNew(MulAssign), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("div"), NanNew(Div), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("divAssign"), NanNew(DivAssign), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitshiftl"), NanNew(BitShiftL), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitShiftL"), NanNew(BitShiftL), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitshiftr"), NanNew(BitShiftR), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitShiftR"), NanNew(BitShiftR), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("lt"), NanNew(Lt), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("gt"), NanNew(Gt), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("le"), NanNew(Le), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("ge"), NanNew(Ge), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("eq"), NanNew(Eq), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("neq"), NanNew(Neq), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("and"), NanNew(And), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("or"), NanNew(Or), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitAnd"), NanNew(BitAnd), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitOr"), NanNew(BitOr), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("bitXor"), NanNew(BitXor), v8::None); - - NanSetPrototypeTemplate(tmpl, NanNew("rhsAdd"), NanNew(RhsAdd), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsSub"), NanNew(RhsSub), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsMul"), NanNew(RhsMul), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsDiv"), NanNew(RhsDiv), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitshiftl"), NanNew(RhsBitShiftL), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitShiftL"), NanNew(RhsBitShiftL), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitshiftr"), NanNew(RhsBitShiftR), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitShiftR"), NanNew(RhsBitShiftR), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsLt"), NanNew(RhsLt), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsGt"), NanNew(RhsGt), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsLe"), NanNew(RhsLe), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsGe"), NanNew(RhsGe), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsEq"), NanNew(RhsEq), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsNeq"), NanNew(RhsNeq), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsAnd"), NanNew(RhsAnd), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsOr"), NanNew(RhsOr), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitAnd"), NanNew(RhsBitAnd), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitOr"), NanNew(RhsBitOr), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("rhsBitXor"), NanNew(RhsBitXor), v8::None); - - NanSetPrototypeTemplate(tmpl, NanNew("neg"), NanNew(Neg), v8::None); - NanSetPrototypeTemplate(tmpl, NanNew("not"), NanNew(Not), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("elements").ToLocalChecked(), Nan::New(Elements), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("host").ToLocalChecked(), Nan::New(Host), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("copyToHost").ToLocalChecked(), Nan::New(Host), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("scalar").ToLocalChecked(), Nan::New(Scalar), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("value").ToLocalChecked(), Nan::New(Scalar), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("write").ToLocalChecked(), Nan::New(Write), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("type").ToLocalChecked(), Nan::New(Type), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("dims").ToLocalChecked(), Nan::New(Dims), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("numdims").ToLocalChecked(), Nan::New(NumDims), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("numDims").ToLocalChecked(), Nan::New(NumDims), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bytes").ToLocalChecked(), Nan::New(Bytes), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("copy").ToLocalChecked(), Nan::New(Copy), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isempty").ToLocalChecked(), Nan::New(IsEmpty), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isEmpty").ToLocalChecked(), Nan::New(IsEmpty), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isscalar").ToLocalChecked(), Nan::New(IsScalar), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isScalar").ToLocalChecked(), Nan::New(IsScalar), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isvector").ToLocalChecked(), Nan::New(IsVector), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isVector").ToLocalChecked(), Nan::New(IsVector), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isrow").ToLocalChecked(), Nan::New(IsRow), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isRow").ToLocalChecked(), Nan::New(IsRow), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("iscolumn").ToLocalChecked(), Nan::New(IsColumn), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isColumn").ToLocalChecked(), Nan::New(IsColumn), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("iscomplex").ToLocalChecked(), Nan::New(IsComplex), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isComplex").ToLocalChecked(), Nan::New(IsComplex), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isreal").ToLocalChecked(), Nan::New(IsReal), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isReal").ToLocalChecked(), Nan::New(IsReal), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isdouble").ToLocalChecked(), Nan::New(IsDouble), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isDouble").ToLocalChecked(), Nan::New(IsDouble), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("issingle").ToLocalChecked(), Nan::New(IsSingle), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isSingle").ToLocalChecked(), Nan::New(IsSingle), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isrealfloating").ToLocalChecked(), Nan::New(IsRealFloating), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isRealFloating").ToLocalChecked(), Nan::New(IsRealFloating), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isfloating").ToLocalChecked(), Nan::New(IsFloating), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isFloating").ToLocalChecked(), Nan::New(IsFloating), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isinteger").ToLocalChecked(), Nan::New(IsInteger), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isInteger").ToLocalChecked(), Nan::New(IsInteger), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isbool").ToLocalChecked(), Nan::New(IsBool), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("isBool").ToLocalChecked(), Nan::New(IsBool), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("eval").ToLocalChecked(), Nan::New(Eval), v8::None); + + Nan::SetPrototypeTemplate(tmpl, Nan::New("at").ToLocalChecked(), Nan::New(At), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("row").ToLocalChecked(), Nan::New(Row), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("col").ToLocalChecked(), Nan::New(Col), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("slice").ToLocalChecked(), Nan::New(Slice), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rows").ToLocalChecked(), Nan::New(Rows), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("cols").ToLocalChecked(), Nan::New(Cols), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("slices").ToLocalChecked(), Nan::New(Slices), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("as").ToLocalChecked(), Nan::New(As), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("assign").ToLocalChecked(), Nan::New(Assign), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("set").ToLocalChecked(), Nan::New(Assign), v8::None); + + Nan::SetPrototypeTemplate(tmpl, Nan::New("add").ToLocalChecked(), Nan::New(Add), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("addAssign").ToLocalChecked(), Nan::New(AddAssign), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("sub").ToLocalChecked(), Nan::New(Sub), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("subAssign").ToLocalChecked(), Nan::New(SubAssign), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("mul").ToLocalChecked(), Nan::New(Mul), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("mulAssign").ToLocalChecked(), Nan::New(MulAssign), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("div").ToLocalChecked(), Nan::New(Div), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("divAssign").ToLocalChecked(), Nan::New(DivAssign), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitshiftl").ToLocalChecked(), Nan::New(BitShiftL), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitShiftL").ToLocalChecked(), Nan::New(BitShiftL), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitshiftr").ToLocalChecked(), Nan::New(BitShiftR), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitShiftR").ToLocalChecked(), Nan::New(BitShiftR), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("lt").ToLocalChecked(), Nan::New(Lt), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("gt").ToLocalChecked(), Nan::New(Gt), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("le").ToLocalChecked(), Nan::New(Le), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("ge").ToLocalChecked(), Nan::New(Ge), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("eq").ToLocalChecked(), Nan::New(Eq), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("neq").ToLocalChecked(), Nan::New(Neq), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("and").ToLocalChecked(), Nan::New(And), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("or").ToLocalChecked(), Nan::New(Or), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitAnd").ToLocalChecked(), Nan::New(BitAnd), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitOr").ToLocalChecked(), Nan::New(BitOr), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("bitXor").ToLocalChecked(), Nan::New(BitXor), v8::None); + + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsAdd").ToLocalChecked(), Nan::New(RhsAdd), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsSub").ToLocalChecked(), Nan::New(RhsSub), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsMul").ToLocalChecked(), Nan::New(RhsMul), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsDiv").ToLocalChecked(), Nan::New(RhsDiv), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitshiftl").ToLocalChecked(), Nan::New(RhsBitShiftL), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitShiftL").ToLocalChecked(), Nan::New(RhsBitShiftL), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitshiftr").ToLocalChecked(), Nan::New(RhsBitShiftR), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitShiftR").ToLocalChecked(), Nan::New(RhsBitShiftR), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsLt").ToLocalChecked(), Nan::New(RhsLt), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsGt").ToLocalChecked(), Nan::New(RhsGt), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsLe").ToLocalChecked(), Nan::New(RhsLe), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsGe").ToLocalChecked(), Nan::New(RhsGe), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsEq").ToLocalChecked(), Nan::New(RhsEq), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsNeq").ToLocalChecked(), Nan::New(RhsNeq), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsAnd").ToLocalChecked(), Nan::New(RhsAnd), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsOr").ToLocalChecked(), Nan::New(RhsOr), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitAnd").ToLocalChecked(), Nan::New(RhsBitAnd), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitOr").ToLocalChecked(), Nan::New(RhsBitOr), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("rhsBitXor").ToLocalChecked(), Nan::New(RhsBitXor), v8::None); + + Nan::SetPrototypeTemplate(tmpl, Nan::New("neg").ToLocalChecked(), Nan::New(Neg), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("not").ToLocalChecked(), Nan::New(Not), v8::None); auto f = tmpl->GetFunction(); - f->Set(NanNew("create"), NanNew(Create)->GetFunction()); - NanAssignPersistent(constructor, f); - exports->Set(NanNew("AFArray"), f); + f->Set(Nan::New("create").ToLocalChecked(), Nan::New(Create)->GetFunction()); + constructor.Reset(f); + Nan::Set(target, Nan::New("AFArray").ToLocalChecked(), f); } v8::Local ArrayWrapper::New(const af::array& array) @@ -184,22 +186,23 @@ v8::Local ArrayWrapper::New(const af::array& array) v8::Local ArrayWrapper::New(af::array* array) { + Nan::EscapableHandleScope scope; assert(array); - Local args[] = { WrapPointer(array) }; - auto c = NanNew(constructor); - auto inst = c->NewInstance(1, args); + Local info[] = { WrapPointer(array) }; + auto c = Nan::New(constructor); + auto inst = c->NewInstance(1, info); assert(ObjectWrap::Unwrap(inst)->_array == array); - return inst; + return scope.Escape(inst); } -void ArrayWrapper::NewAsync(const v8::FunctionCallbackInfo& args, const std::function& arrayFactory) +void ArrayWrapper::NewAsync(const Nan::FunctionCallbackInfo& info, const std::function& arrayFactory) { - if (args.Length() >= 1 && args[args.Length() - 1]->IsFunction()) + if (info.Length() >= 1 && info[info.Length() - 1]->IsFunction()) { - auto callback = new NanCallback(args[args.Length() - 1].As()); + auto callback = new Nan::Callback(info[info.Length() - 1].As()); auto worker = new Worker(callback, arrayFactory, [](Worker* w, af::array* a){ return ArrayWrapper::New(a); }); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } else { @@ -221,7 +224,7 @@ af::array* ArrayWrapper::TryGetArray(v8::Local value) if (value->IsObject()) { auto obj = value.As(); - if (obj->GetConstructorName()->Equals(NanNew(Symbols::AFArrayClass))) + if (obj->GetConstructorName()->Equals(Nan::New(Symbols::AFArrayClass))) { auto wrapper = ObjectWrap::Unwrap(value.As()); return wrapper->_array; @@ -254,49 +257,49 @@ af::array* ArrayWrapper::TryGetArray(v8::Local value) return nullptr; } -af::array* ArrayWrapper::GetArrayAt(const v8::FunctionCallbackInfo& args, int index) +af::array* ArrayWrapper::GetArrayAt(const Nan::FunctionCallbackInfo& info, int index) { - auto array = TryGetArrayAt(args, index); + auto array = TryGetArrayAt(info, index); if (array) return array; stringstream ss; ss << "Argument at position " << to_string(index) << ". is not an AFArray instance."; ARRAYFIRE_THROW(ss.str().c_str()); } -af::array* ArrayWrapper::TryGetArrayAt(const v8::FunctionCallbackInfo& args, int index) +af::array* ArrayWrapper::TryGetArrayAt(const Nan::FunctionCallbackInfo& info, int index) { - if (index < args.Length()) + if (index < info.Length()) { - return GetArray(args[index]); + return GetArray(info[index]); } return nullptr; } -void ArrayWrapper::New(const v8::FunctionCallbackInfo& args) +void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) { - NanScope(); + try { ArrayWrapper* instance = nullptr; try { - if (args.Length() == 0) + if (info.Length() == 0) { Guard(); instance = new ArrayWrapper(new af::array()); } - else if (args.Length() == 1) + else if (info.Length() == 1) { - if (Buffer::HasInstance(args[0])) + if (Buffer::HasInstance(info[0])) { - instance = new ArrayWrapper(reinterpret_cast(Buffer::Data(args[0]))); + instance = new ArrayWrapper(reinterpret_cast(Buffer::Data(info[0]))); } } else { Guard(); - auto dimAndType = ParseDimAndTypeArgs(args); + auto dimAndType = ParseDimAndTypeArgs(info); instance = new ArrayWrapper(new af::array(dimAndType.first, dimAndType.second)); } } @@ -311,8 +314,8 @@ void ArrayWrapper::New(const v8::FunctionCallbackInfo& args) return NAN_THROW("Invalid arguments."); } - instance->Wrap(args.Holder()); - NanReturnValue(args.Holder()); + instance->Wrap(info.Holder()); + info.GetReturnValue().Set(info.Holder()); } ARRAYFIRE_CATCH } @@ -326,16 +329,14 @@ af::array* ArrayWrapper::CreateArray(void* ptr, af_source src, const af::dim4& d NAN_METHOD(ArrayWrapper::Create) { - NanScope(); - try { int buffIdx = -1; function factory; - for (int i = 0; i < args.Length(); i++) + for (int i = 0; i < info.Length(); i++) { - if (Buffer::HasInstance(args[i])) + if (Buffer::HasInstance(info[i])) { buffIdx = i; break; @@ -346,18 +347,18 @@ NAN_METHOD(ArrayWrapper::Create) { return NAN_THROW("Buffer argument expected."); } - else if (buffIdx + 1 < args.Length()) + else if (buffIdx + 1 < info.Length()) { // Copy / wrap ptr - // args: dim0..dimn, dtype, ptr[, source] + // info: dim0..dimn, dtype, ptr[, source] af_source src = afHost; - if (buffIdx + 1 < args.Length() && args[buffIdx + 1]->IsNumber()) + if (buffIdx + 1 < info.Length() && info[buffIdx + 1]->IsNumber()) { - src = (af_source)(args[buffIdx + 2]->Int32Value()); + src = (af_source)(info[buffIdx + 2]->Int32Value()); } - auto buffObj = args[buffIdx]->ToObject(); + auto buffObj = info[buffIdx]->ToObject(); char* ptr = Buffer::Data(buffObj); - auto dimAndType = ParseDimAndTypeArgs(args, buffIdx); + auto dimAndType = ParseDimAndTypeArgs(info, buffIdx); switch (dimAndType.second) { case f32: @@ -404,43 +405,39 @@ NAN_METHOD(ArrayWrapper::Create) { return New(a); }; - auto worker = new Worker(GetCallback(args), move(factory), move(conv)); - worker->SaveToPersistent("data", args[buffIdx]->ToObject()); + auto worker = new Worker(GetCallback(info), move(factory), move(conv)); + worker->SaveToPersistent("data", info[buffIdx]->ToObject()); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Elements) { - NanScope(); - try { Guard(); - NanReturnValue(NanNew(GetArray(args.This())->elements())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->elements())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Host) { - NanScope(); - try { ARGS_LEN(1) char* buffData; - auto pArray = GetArray(args.This()); + auto pArray = GetArray(info.This()); - if (Buffer::HasInstance(args[0])) + if (Buffer::HasInstance(info[0])) { - buffData = Buffer::Data(args[0]); + buffData = Buffer::Data(info[0]); - if (Buffer::Length(args[0]) < pArray->bytes()) + if (Buffer::Length(info[0]) < pArray->bytes()) { return NAN_THROW("Buffer is too small to hold values."); } @@ -451,11 +448,11 @@ NAN_METHOD(ArrayWrapper::Host) Guard(); array.host(buffData); }; - auto worker = new Worker(GetCallback(args), move(exec)); - worker->SaveToPersistent("data", args[0]->ToObject()); + auto worker = new Worker(GetCallback(info), move(exec)); + worker->SaveToPersistent("data", info[0]->ToObject()); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } else { @@ -472,11 +469,12 @@ NAN_METHOD(ArrayWrapper::Host) }; auto conv = [=](Worker* w, char* data) { - return NanNewBufferHandle(data, size, [](char* data, void* hint) { delete[] data; }, nullptr); + Nan::EscapableHandleScope scope; + return scope.Escape(Nan::NewBuffer(data, size, [](char* data, void* hint) { delete[] data; }, nullptr).ToLocalChecked()); }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), move(exec), move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } catch (...) { @@ -490,13 +488,11 @@ NAN_METHOD(ArrayWrapper::Host) NAN_METHOD(ArrayWrapper::Scalar) { - NanScope(); - try { ARGS_LEN(1) - auto pArray = GetArray(args.This()); + auto pArray = GetArray(info.This()); af::array array(*pArray); switch (array.type()) { @@ -507,8 +503,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case f64: @@ -518,8 +514,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case s32: @@ -529,8 +525,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case u32: @@ -540,8 +536,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case u8: @@ -551,8 +547,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case b8: @@ -562,8 +558,8 @@ NAN_METHOD(ArrayWrapper::Scalar) Guard(); return array.scalar(); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); } break; case c32: @@ -577,8 +573,8 @@ NAN_METHOD(ArrayWrapper::Scalar) { return ToV8Complex(data); }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec), move(conv)); + Nan::AsyncQueueWorker(worker); } break; case c64: @@ -592,8 +588,8 @@ NAN_METHOD(ArrayWrapper::Scalar) { return ToV8Complex(data); }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec), move(conv)); + Nan::AsyncQueueWorker(worker); } break; case s64: @@ -605,10 +601,11 @@ NAN_METHOD(ArrayWrapper::Scalar) }; auto conv = [=](Worker* w, long long data) { - return NanNew(to_string(data).c_str()); + Nan::EscapableHandleScope scope; + return scope.Escape(Nan::New(to_string(data).c_str()).ToLocalChecked()); }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec), move(conv)); + Nan::AsyncQueueWorker(worker); } break; case u64: @@ -620,16 +617,17 @@ NAN_METHOD(ArrayWrapper::Scalar) }; auto conv = [=](Worker* w, unsigned long long data) { - return NanNew(to_string(data).c_str()); + Nan::EscapableHandleScope scope; + return scope.Escape(Nan::New(to_string(data).c_str()).ToLocalChecked()); }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); + auto worker = new Worker(GetCallback(info), move(exec), move(conv)); + Nan::AsyncQueueWorker(worker); } break; default: assert(false); } - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -637,29 +635,27 @@ NAN_METHOD(ArrayWrapper::Scalar) NAN_METHOD(ArrayWrapper::Write) { - NanScope(); - try { ARGS_LEN(3) char* buffData; - auto pArray = GetArray(args.This()); + auto pArray = GetArray(info.This()); - if (Buffer::HasInstance(args[0])) + if (Buffer::HasInstance(info[0])) { - buffData = Buffer::Data(args[0]); + buffData = Buffer::Data(info[0]); } else { return NAN_THROW("First argument is no a Buffer."); } - unsigned bytes = args[1]->Uint32Value(); + unsigned bytes = info[1]->Uint32Value(); af_source src = afHost; - if (args.Length() > 3) + if (info.Length() > 3) { - src = (af_source)(args[2]->Int32Value()); + src = (af_source)(info[2]->Int32Value()); } af::array array(*pArray); @@ -668,52 +664,48 @@ NAN_METHOD(ArrayWrapper::Write) Guard(); af_write_array(array.get(), buffData, bytes, src); }; - auto worker = new Worker(GetCallback(args), move(exec)); - worker->SaveToPersistent("data", args[0]->ToObject()); + auto worker = new Worker(GetCallback(info), move(exec)); + worker->SaveToPersistent("data", info[0]->ToObject()); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Type) { - NanScope(); - try { - NanReturnValue(GetArray(args.This())->type()); + info.GetReturnValue().Set(GetArray(info.This())->type()); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Dims) { - NanScope(); - try { - auto pArray = GetArray(args.This()); - if (!args.Length()) + auto pArray = GetArray(info.This()); + if (!info.Length()) { auto dims = pArray->dims(); - auto jsDims = NanNew(); - jsDims->Set(NanNew(Symbols::Elements), NanNew(dims.elements())); - jsDims->Set(NanNew(Symbols::Ndims), NanNew(dims.ndims())); - jsDims->Set(NanNew(Symbols::NDims), NanNew(dims.ndims())); - auto pDims = NanNew(4); - pDims->Set(0, NanNew(dims[0])); - pDims->Set(1, NanNew(dims[1])); - pDims->Set(2, NanNew(dims[2])); - pDims->Set(3, NanNew(dims[3])); - jsDims->Set(NanNew(Symbols::Values), pDims); - - NanReturnValue(jsDims); + auto jsDims = Nan::New(); + jsDims->Set(Nan::New(Symbols::Elements), Nan::New(dims.elements())); + jsDims->Set(Nan::New(Symbols::Ndims), Nan::New(dims.ndims())); + jsDims->Set(Nan::New(Symbols::NDims), Nan::New(dims.ndims())); + auto pDims = Nan::New(4); + pDims->Set(0, Nan::New(dims[0])); + pDims->Set(1, Nan::New(dims[1])); + pDims->Set(2, Nan::New(dims[2])); + pDims->Set(3, Nan::New(dims[3])); + jsDims->Set(Nan::New(Symbols::Values), pDims); + + info.GetReturnValue().Set(jsDims); } else { - NanReturnValue(NanNew(pArray->dims(args[0]->Uint32Value()))); + info.GetReturnValue().Set(Nan::New(pArray->dims(info[0]->Uint32Value()))); } } ARRAYFIRE_CATCH @@ -721,190 +713,174 @@ NAN_METHOD(ArrayWrapper::Dims) NAN_METHOD(ArrayWrapper::NumDims) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->numdims())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->numdims())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Bytes) { - NanScope(); - try { - NanReturnValue(NanNew((unsigned)GetArray(args.This())->bytes())); + info.GetReturnValue().Set(Nan::New((unsigned)GetArray(info.This())->bytes())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Copy) { - NanScope(); - try { Guard(); - NanReturnValue(New(GetArray(args.This())->copy())); + info.GetReturnValue().Set(New(GetArray(info.This())->copy())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsEmpty) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->isempty())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isempty())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsScalar) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->isscalar())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isscalar())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsVector) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->isvector())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isvector())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsRow) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->isrow())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isrow())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsColumn) { - NanScope(); - try { - NanReturnValue(NanNew(GetArray(args.This())->iscolumn())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->iscolumn())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsComplex) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->iscomplex())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->iscomplex())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsReal) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->isreal())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isreal())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsDouble) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->isdouble())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isdouble())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsSingle) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->issingle())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->issingle())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsRealFloating) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->isrealfloating())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isrealfloating())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsFloating) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->isfloating())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isfloating())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsInteger) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->isinteger())); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->isinteger())); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::IsBool) { - NanScope(); + try { - NanReturnValue(NanNew(GetArray(args.This())->type() == b8)); + info.GetReturnValue().Set(Nan::New(GetArray(info.This())->type() == b8)); } ARRAYFIRE_CATCH } NAN_METHOD(ArrayWrapper::Eval) { - NanScope(); + try { Guard(); - GetArray(args.This())->eval(); - NanReturnUndefined(); + GetArray(info.This())->eval(); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -912,7 +888,7 @@ NAN_METHOD(ArrayWrapper::Eval) NAN_METHOD(ArrayWrapper::At) { // Aka "indexing" - NanScope(); + try { @@ -920,45 +896,45 @@ NAN_METHOD(ArrayWrapper::At) Guard(); - if (args.Length() == 1) + if (info.Length() == 1) { - auto ri = ToRegionIndex(args[0]); + auto ri = ToRegionIndex(info[0]); switch (get<0>(ri)) { case Region::Row: - NanReturnValue(New(GetArray(args.This())->row(get<1>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->row(get<1>(ri)))); break; case Region::Rows: - NanReturnValue(New(GetArray(args.This())->rows(get<1>(ri), get<2>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->rows(get<1>(ri), get<2>(ri)))); break; case Region::Col: - NanReturnValue(New(GetArray(args.This())->col(get<1>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->col(get<1>(ri)))); break; case Region::Cols: - NanReturnValue(New(GetArray(args.This())->cols(get<1>(ri), get<2>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->cols(get<1>(ri), get<2>(ri)))); break; case Region::Slice: - NanReturnValue(New(GetArray(args.This())->slice(get<1>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->slice(get<1>(ri)))); break; case Region::Slices: - NanReturnValue(New(GetArray(args.This())->slices(get<1>(ri), get<2>(ri)))); + info.GetReturnValue().Set(New(GetArray(info.This())->slices(get<1>(ri), get<2>(ri)))); break; default: - NanReturnValue(New(GetArray(args.This())->operator()(ToIndex(args[0])))); + info.GetReturnValue().Set(New(GetArray(info.This())->operator()(ToIndex(info[0])))); break; } } - else if (args.Length() == 2) + else if (info.Length() == 2) { - NanReturnValue(New(GetArray(args.This())->operator()(ToIndex(args[0]), ToIndex(args[1])))); + info.GetReturnValue().Set(New(GetArray(info.This())->operator()(ToIndex(info[0]), ToIndex(info[1])))); } - else if (args.Length() == 3) + else if (info.Length() == 3) { - NanReturnValue(New(GetArray(args.This())->operator()(ToIndex(args[0]), ToIndex(args[1]), ToIndex(args[2])))); + info.GetReturnValue().Set(New(GetArray(info.This())->operator()(ToIndex(info[0]), ToIndex(info[1]), ToIndex(info[2])))); } else { - NanReturnValue(New(GetArray(args.This())->operator()(ToIndex(args[0]), ToIndex(args[1]), ToIndex(args[2]), ToIndex(args[3])))); + info.GetReturnValue().Set(New(GetArray(info.This())->operator()(ToIndex(info[0]), ToIndex(info[1]), ToIndex(info[2]), ToIndex(info[3])))); } } ARRAYFIRE_CATCH @@ -967,13 +943,13 @@ NAN_METHOD(ArrayWrapper::At) #define AFARRAY_IMPL_IDX1(F, f)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(1)\ Guard();\ - auto pArray = GetArray(args.This());\ - NanReturnValue(New(pArray->f(args[0]->Int32Value())));\ + auto pArray = GetArray(info.This());\ + info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value())));\ }\ ARRAYFIRE_CATCH\ } @@ -986,13 +962,13 @@ AFARRAY_IMPL_IDX1(Slice, slice) #define AFARRAY_IMPL_IDX2(F, f)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ Guard();\ - auto pArray = GetArray(args.This());\ - NanReturnValue(New(pArray->f(args[0]->Int32Value(), args[1]->Int32Value())));\ + auto pArray = GetArray(info.This());\ + info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value(), info[1]->Int32Value())));\ }\ ARRAYFIRE_CATCH\ } @@ -1004,13 +980,13 @@ AFARRAY_IMPL_IDX2(Slices, slices) NAN_METHOD(ArrayWrapper::As) { - NanScope(); + try { ARGS_LEN(1); - af::dtype type = GetDTypeInfo(args[0]->Uint32Value()).first; + af::dtype type = GetDTypeInfo(info[0]->Uint32Value()).first; Guard(); - NanReturnValue(New(GetArray(args.This())->as(type))); + info.GetReturnValue().Set(New(GetArray(info.This())->as(type))); } ARRAYFIRE_CATCH } @@ -1018,17 +994,17 @@ NAN_METHOD(ArrayWrapper::As) #define AFARRAY_IMPL_ASSIGN(F, Op)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ \ try\ {\ - auto pArray = GetArray(args.This());\ + auto pArray = GetArray(info.This());\ auto& array = *pArray;\ bool isDouble = NeedsDouble(array);\ ARGS_LEN(1)\ - if (args.Length() == 1)\ + if (info.Length() == 1)\ {\ - auto value = args[0];\ + auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ Guard();\ if (pOtherArray)\ @@ -1076,17 +1052,17 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ }\ - else if (args.Length() == 2)\ + else if (info.Length() == 2)\ {\ - auto regIdx = ToRegionIndex(args[0]);\ + auto regIdx = ToRegionIndex(info[0]);\ auto reg = get<0>(regIdx);\ - auto value = args[1];\ + auto value = info[1];\ auto pOtherArray = TryGetArray(value);\ switch(reg)\ {\ case Region::None:\ {\ - auto idx0 = ToIndex(args[0]);\ + auto idx0 = ToIndex(info[0]);\ Guard();\ if (pOtherArray)\ {\ @@ -1430,11 +1406,11 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ }\ }\ - else if (args.Length() == 3)\ + else if (info.Length() == 3)\ {\ - auto idx0 = ToIndex(args[0]);\ - auto idx1 = ToIndex(args[1]);\ - auto value = args[2];\ + auto idx0 = ToIndex(info[0]);\ + auto idx1 = ToIndex(info[1]);\ + auto value = info[2];\ auto pOtherArray = TryGetArray(value);\ Guard();\ if (pOtherArray)\ @@ -1482,12 +1458,12 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ }\ - else if (args.Length() == 4)\ + else if (info.Length() == 4)\ {\ - auto idx0 = ToIndex(args[0]);\ - auto idx1 = ToIndex(args[1]);\ - auto idx2 = ToIndex(args[2]);\ - auto value = args[3];\ + auto idx0 = ToIndex(info[0]);\ + auto idx1 = ToIndex(info[1]);\ + auto idx2 = ToIndex(info[2]);\ + auto value = info[3];\ auto pOtherArray = TryGetArray(value);\ Guard();\ if (pOtherArray)\ @@ -1537,11 +1513,11 @@ NAN_METHOD(ArrayWrapper::F)\ }\ else\ {\ - auto idx0 = ToIndex(args[0]);\ - auto idx1 = ToIndex(args[1]);\ - auto idx2 = ToIndex(args[2]);\ - auto idx3 = ToIndex(args[3]);\ - auto value = args[4];\ + auto idx0 = ToIndex(info[0]);\ + auto idx1 = ToIndex(info[1]);\ + auto idx2 = ToIndex(info[2]);\ + auto idx3 = ToIndex(info[3]);\ + auto value = info[4];\ auto pOtherArray = TryGetArray(value);\ Guard();\ if (pOtherArray)\ @@ -1590,7 +1566,7 @@ NAN_METHOD(ArrayWrapper::F)\ }\ }\ \ - NanReturnValue(args.This());\ + info.GetReturnValue().Set(info.This());\ }\ ARRAYFIRE_CATCH\ } @@ -1605,14 +1581,14 @@ AFARRAY_IMPL_ASSIGN(DivAssign, /=) #define AFARRAY_IMPL_BINOP(F, Op)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ \ try\ {\ - auto& array = *GetArray(args.This());\ + auto& array = *GetArray(info.This());\ bool isDouble = NeedsDouble(array);\ ARGS_LEN(1)\ - auto value = args[0];\ + auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ af::array* result = nullptr;\ Guard();\ @@ -1661,7 +1637,7 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ \ - NanReturnValue(New(result));\ + info.GetReturnValue().Set(New(result));\ }\ ARRAYFIRE_CATCH\ } @@ -1689,14 +1665,14 @@ AFARRAY_IMPL_BINOP(BitXor, ^) #define AFARRAY_IMPL_BINOP(F, Op)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ \ try\ {\ - auto& array = *GetArray(args.This());\ + auto& array = *GetArray(info.This());\ bool isDouble = NeedsDouble(array);\ ARGS_LEN(1)\ - auto value = args[0];\ + auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ af::array* result = nullptr;\ Guard();\ @@ -1745,7 +1721,7 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ \ - NanReturnValue(New(result));\ + info.GetReturnValue().Set(New(result));\ }\ ARRAYFIRE_CATCH\ } @@ -1773,13 +1749,13 @@ AFARRAY_IMPL_BINOP(RhsBitXor, ^) #define AFARRAY_IMPL_UNOP(F, Op)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ \ try\ {\ - auto& array = *GetArray(args.This());\ + auto& array = *GetArray(info.This());\ Guard();\ - NanReturnValue(New(array.operator Op()));\ + info.GetReturnValue().Set(New(array.operator Op()));\ }\ ARRAYFIRE_CATCH\ } diff --git a/src/arraywrapper.h b/src/arraywrapper.h index f9742ed..955af23 100644 --- a/src/arraywrapper.h +++ b/src/arraywrapper.h @@ -41,19 +41,19 @@ struct ArrayWrapper : public node::ObjectWrap ArrayWrapper(const ArrayWrapper&) = delete; ~ArrayWrapper(); - static void Init(v8::Local exports); + static NAN_MODULE_INIT(Init); static v8::Local New(af::array* array); static v8::Local New(const af::array& array); - static void NewAsync(const v8::FunctionCallbackInfo& args, const std::function& arrayFactory); + static void NewAsync(const Nan::FunctionCallbackInfo& info, const std::function& arrayFactory); static af::array* GetArray(v8::Local value); static af::array* TryGetArray(v8::Local value); static af::array* GetArray(v8::Local value); static af::array* TryGetArray(v8::Local value); - static af::array* GetArrayAt(const v8::FunctionCallbackInfo& args, int index); - static af::array* TryGetArrayAt(const v8::FunctionCallbackInfo& args, int index); + static af::array* GetArrayAt(const Nan::FunctionCallbackInfo& info, int index); + static af::array* TryGetArrayAt(const Nan::FunctionCallbackInfo& info, int index); static NAN_METHOD(Create); static NAN_METHOD(Elements); @@ -138,9 +138,9 @@ struct ArrayWrapper : public node::ObjectWrap template static af::array* CreateArray(void* ptr, af_source src, const af::dim4& dim4); - static void New(const v8::FunctionCallbackInfo& args); + static void New(const Nan::FunctionCallbackInfo& info); - static v8::Persistent constructor; + static Nan::Persistent constructor; af::array* _array; }; diff --git a/src/computervision.cpp b/src/computervision.cpp index 04fba6e..6726830 100644 --- a/src/computervision.cpp +++ b/src/computervision.cpp @@ -42,139 +42,141 @@ using namespace node; NAN_METHOD(Orb) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); float fastThr=20.f; unsigned maxFeat=400; float sclFctr=1.5f; unsigned levels=4; bool blurImg=false; - if (args.Length() > 1) + if (info.Length() > 1) { - fastThr = args[1]->NumberValue(); + fastThr = info[1]->NumberValue(); } - if (args.Length() > 2) + if (info.Length() > 2) { - maxFeat = args[2]->Uint32Value(); + maxFeat = info[2]->Uint32Value(); } - if (args.Length() > 3) + if (info.Length() > 3) { - sclFctr = args[3]->NumberValue(); + sclFctr = info[3]->NumberValue(); } - if (args.Length() > 4) + if (info.Length() > 4) { - levels = args[4]->Uint32Value(); + levels = info[4]->Uint32Value(); } - if (args.Length() > 5) + if (info.Length() > 5) { - blurImg = args[5]->BooleanValue(); + blurImg = info[5]->BooleanValue(); } Guard(); af::features feat; af::array desc; af::orb(feat, desc, *pArray, fastThr, maxFeat, sclFctr, levels, blurImg); - auto result = NanNew(); - result->Set(NanNew(Symbols::Feat), ToV8Features(feat)); - result->Set(NanNew(Symbols::Desc), ArrayWrapper::New(desc)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Feat), ToV8Features(feat)); + result->Set(Nan::New(Symbols::Desc), ArrayWrapper::New(desc)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } NAN_METHOD(Fast) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); float thr=20.0f; unsigned arcLength=9; bool nonMax=true; float featureRatio=0.05f; unsigned edge=3; - if (args.Length() > 1) + if (info.Length() > 1) { - thr = args[1]->NumberValue(); + thr = info[1]->NumberValue(); } - if (args.Length() > 2) + if (info.Length() > 2) { - arcLength = args[2]->Uint32Value(); + arcLength = info[2]->Uint32Value(); } - if (args.Length() > 3) + if (info.Length() > 3) { - nonMax = args[3]->BooleanValue(); + nonMax = info[3]->BooleanValue(); } - if (args.Length() > 4) + if (info.Length() > 4) { - featureRatio = args[4]->NumberValue(); + featureRatio = info[4]->NumberValue(); } - if (args.Length() > 5) + if (info.Length() > 5) { - edge = args[5]->Uint32Value(); + edge = info[5]->Uint32Value(); } Guard(); auto feat = af::fast(*pArray, thr, arcLength, nonMax, featureRatio, edge); - NanReturnValue(ToV8Features(feat)); + info.GetReturnValue().Set(ToV8Features(feat)); } ARRAYFIRE_CATCH } NAN_METHOD(HammingMatcher) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); dim_t distDim = 0; unsigned nDist = 1; - if (args.Length() > 2) + if (info.Length() > 2) { - distDim = (dim_t)(args[2]->Uint32Value()); + distDim = (dim_t)(info[2]->Uint32Value()); } - if (args.Length() > 3) + if (info.Length() > 3) { - nDist = args[3]->Uint32Value(); + nDist = info[3]->Uint32Value(); } Guard(); af::array idx, dist; af::hammingMatcher(idx, dist, *pArray1, *pArray2, distDim, nDist); - auto result = NanNew(); - result->Set(NanNew(Symbols::Idx), ArrayWrapper::New(idx)); - result->Set(NanNew(Symbols::Dist), ArrayWrapper::New(dist)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Idx), ArrayWrapper::New(idx)); + result->Set(Nan::New(Symbols::Dist), ArrayWrapper::New(dist)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } NAN_METHOD(MatchTemplate) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matchType mType = AF_SAD; - if (args.Length() > 2) + if (info.Length() > 2) { - mType = (af::matchType)(args[2]->Uint32Value()); + mType = (af::matchType)(info[2]->Uint32Value()); } Guard(); - NanReturnValue(ArrayWrapper::New(af::matchTemplate(*pArray1, *pArray2, mType))); + info.GetReturnValue().Set(ArrayWrapper::New(af::matchTemplate(*pArray1, *pArray2, mType))); } ARRAYFIRE_CATCH } -void InitComputerVision(v8::Handle exports) +NAN_MODULE_INIT(InitComputerVision) { - exports->Set(NanNew("orb"), NanNew(Orb)->GetFunction()); - exports->Set(NanNew("fast"), NanNew(Fast)->GetFunction()); - exports->Set(NanNew("hammingMatcher"), NanNew(HammingMatcher)->GetFunction()); - exports->Set(NanNew("matchTemplate"), NanNew(MatchTemplate)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("orb").ToLocalChecked(), Nan::New(Orb)->GetFunction()); + Nan::Set(target, Nan::New("fast").ToLocalChecked(), Nan::New(Fast)->GetFunction()); + Nan::Set(target, Nan::New("hammingMatcher").ToLocalChecked(), Nan::New(HammingMatcher)->GetFunction()); + Nan::Set(target, Nan::New("matchTemplate").ToLocalChecked(), Nan::New(MatchTemplate)->GetFunction()); } diff --git a/src/computervision.h b/src/computervision.h index ca3893e..2f3f83f 100644 --- a/src/computervision.h +++ b/src/computervision.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitComputerVision(v8::Handle exports); +NAN_MODULE_INIT(InitComputerVision); #endif // ARRAYFIRE_COMPUTERVISION_H diff --git a/src/createarray.cpp b/src/createarray.cpp index 0e3c580..96b527d 100644 --- a/src/createarray.cpp +++ b/src/createarray.cpp @@ -42,30 +42,30 @@ using namespace node; NAN_METHOD(RandU) { - NanScope(); + try { ARGS_LEN(2); - auto dimAndType = ParseDimAndTypeArgs(args); + auto dimAndType = ParseDimAndTypeArgs(info); Guard(); - NanReturnValue(ArrayWrapper::New(af::randu(dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::randu(dimAndType.first, dimAndType.second))); } ARRAYFIRE_CATCH } NAN_METHOD(RandN) { - NanScope(); + try { ARGS_LEN(2); - auto dimAndType = ParseDimAndTypeArgs(args); + auto dimAndType = ParseDimAndTypeArgs(info); if (dimAndType.second == f32 || dimAndType.second == f64) { Guard(); - NanReturnValue(ArrayWrapper::New(af::randn(dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::randn(dimAndType.first, dimAndType.second))); return; } return NAN_THROW_INVALID_DTYPE(); @@ -75,84 +75,84 @@ NAN_METHOD(RandN) NAN_METHOD(Identity) { - NanScope(); + try { ARGS_LEN(2); - auto dimAndType = ParseDimAndTypeArgs(args); + auto dimAndType = ParseDimAndTypeArgs(info); Guard(); - NanReturnValue(ArrayWrapper::New(af::identity(dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::identity(dimAndType.first, dimAndType.second))); } ARRAYFIRE_CATCH } NAN_METHOD(Range) { - NanScope(); + try { ARGS_LEN(3); - auto dimAndType = ParseDimAndTypeArgs(args, -1, 1); - af_dtype seqDim = (af_dtype)args[args.Length() - 2]->Uint32Value(); + auto dimAndType = ParseDimAndTypeArgs(info, -1, 1); + af_dtype seqDim = (af_dtype)info[info.Length() - 2]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::range(dimAndType.first, seqDim, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::range(dimAndType.first, seqDim, dimAndType.second))); } ARRAYFIRE_CATCH } NAN_METHOD(Iota) { - NanScope(); + try { ARGS_LEN(3); - auto dims = ToDim4(args[0]); - auto titleDims = ToDim4(args[1]); - auto type = GetDTypeInfo(args[3]->Uint32Value()); + auto dims = ToDim4(info[0]); + auto titleDims = ToDim4(info[1]); + auto type = GetDTypeInfo(info[3]->Uint32Value()); Guard(); - NanReturnValue(ArrayWrapper::New(af::iota(dims, titleDims, type.first))); + info.GetReturnValue().Set(ArrayWrapper::New(af::iota(dims, titleDims, type.first))); } ARRAYFIRE_CATCH } NAN_METHOD(Diag) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); int num = 0; bool extract = true; - if (args.Length() > 1) + if (info.Length() > 1) { - num = args[1]->Int32Value(); + num = info[1]->Int32Value(); } - if (args.Length() > 2) + if (info.Length() > 2) { - extract = args[2]->BooleanValue(); + extract = info[2]->BooleanValue(); } Guard(); - NanReturnValue(ArrayWrapper::New(af::diag(*pArray, num, extract))); + info.GetReturnValue().Set(ArrayWrapper::New(af::diag(*pArray, num, extract))); } ARRAYFIRE_CATCH } NAN_METHOD(Constant) { - NanScope(); + // Notice: In v8 we can go for double, complex, and int64 as a string, because v8 numbers are doubles. try { ARGS_LEN(3); - auto dimAndType = ParseDimAndTypeArgs(args, -1, 0, 1); - auto value = args[0]; + auto dimAndType = ParseDimAndTypeArgs(info, -1, 0, 1); + auto value = info[0]; Guard(); if (value->IsNumber()) { @@ -160,22 +160,22 @@ NAN_METHOD(Constant) switch (dimAndType.second) { case f32: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; case f64: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; case s32: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; case u32: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; case u8: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; case b8: - NanReturnValue(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(v, dimAndType.first, dimAndType.second))); return; default: break; @@ -188,13 +188,13 @@ NAN_METHOD(Constant) case c32: { auto cv = ToFComplex(value.As()); - NanReturnValue(ArrayWrapper::New(af::constant(cv, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(cv, dimAndType.first, dimAndType.second))); return; } case c64: { auto cv = ToDComplex(value.As()); - NanReturnValue(ArrayWrapper::New(af::constant(cv, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(cv, dimAndType.first, dimAndType.second))); return; } default: @@ -209,13 +209,13 @@ NAN_METHOD(Constant) case s64: { long long val = strtoll(*str, nullptr, 10); - NanReturnValue(ArrayWrapper::New(af::constant(val, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(val, dimAndType.first, dimAndType.second))); return; } case u64: { unsigned long long val = strtoll(*str, nullptr, 10); - NanReturnValue(ArrayWrapper::New(af::constant(val, dimAndType.first, dimAndType.second))); + info.GetReturnValue().Set(ArrayWrapper::New(af::constant(val, dimAndType.first, dimAndType.second))); return; } default: @@ -236,28 +236,28 @@ ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Upper, upper, false) NAN_METHOD(GetSeed) { - NanScope(); + try { - NanReturnValue(to_string(af::getSeed())); + info.GetReturnValue().Set(Nan::New(to_string(af::getSeed()).c_str()).ToLocalChecked()); } ARRAYFIRE_CATCH; } NAN_METHOD(SetSeed) { - NanScope(); + try { ARGS_LEN(1); - if (args[0]->IsNumber()) + if (info[0]->IsNumber()) { - long long seed = args[0]->NumberValue(); + long long seed = info[0]->NumberValue(); af::setSeed(seed); } - else if (args[0]->IsString()) + else if (info[0]->IsString()) { - String::Utf8Value str(args[0]); + String::Utf8Value str(info[0]); long long seed = strtoll(*str, nullptr, 10); af::setSeed(seed); } @@ -265,27 +265,29 @@ NAN_METHOD(SetSeed) { return NAN_THROW_INVALID_ARGS(); } - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } ARRAYFIRE_SYNC_METHOD_ARR_ARR_DIM(Lookup, lookup) -void InitCreateArray(v8::Handle exports) +NAN_MODULE_INIT(InitCreateArray) { - exports->Set(NanNew("randu"), NanNew(RandU)->GetFunction()); - exports->Set(NanNew("randU"), NanNew(RandU)->GetFunction()); - exports->Set(NanNew("randn"), NanNew(RandN)->GetFunction()); - exports->Set(NanNew("randN"), NanNew(RandN)->GetFunction()); - exports->Set(NanNew("identity"), NanNew(Identity)->GetFunction()); - exports->Set(NanNew("range"), NanNew(Range)->GetFunction()); - exports->Set(NanNew("iota"), NanNew(Iota)->GetFunction()); - exports->Set(NanNew("diag"), NanNew(Diag)->GetFunction()); - exports->Set(NanNew("constant"), NanNew(Constant)->GetFunction()); - exports->Set(NanNew("lower"), NanNew(Lower)->GetFunction()); - exports->Set(NanNew("upper"), NanNew(Upper)->GetFunction()); - exports->Set(NanNew("getSeed"), NanNew(GetSeed)->GetFunction()); - exports->Set(NanNew("setSeed"), NanNew(SetSeed)->GetFunction()); - exports->Set(NanNew("lookup"), NanNew(Lookup)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("randu").ToLocalChecked(), Nan::New(RandU)->GetFunction()); + Nan::Set(target, Nan::New("randU").ToLocalChecked(), Nan::New(RandU)->GetFunction()); + Nan::Set(target, Nan::New("randn").ToLocalChecked(), Nan::New(RandN)->GetFunction()); + Nan::Set(target, Nan::New("randN").ToLocalChecked(), Nan::New(RandN)->GetFunction()); + Nan::Set(target, Nan::New("identity").ToLocalChecked(), Nan::New(Identity)->GetFunction()); + Nan::Set(target, Nan::New("range").ToLocalChecked(), Nan::New(Range)->GetFunction()); + Nan::Set(target, Nan::New("iota").ToLocalChecked(), Nan::New(Iota)->GetFunction()); + Nan::Set(target, Nan::New("diag").ToLocalChecked(), Nan::New(Diag)->GetFunction()); + Nan::Set(target, Nan::New("constant").ToLocalChecked(), Nan::New(Constant)->GetFunction()); + Nan::Set(target, Nan::New("lower").ToLocalChecked(), Nan::New(Lower)->GetFunction()); + Nan::Set(target, Nan::New("upper").ToLocalChecked(), Nan::New(Upper)->GetFunction()); + Nan::Set(target, Nan::New("getSeed").ToLocalChecked(), Nan::New(GetSeed)->GetFunction()); + Nan::Set(target, Nan::New("setSeed").ToLocalChecked(), Nan::New(SetSeed)->GetFunction()); + Nan::Set(target, Nan::New("lookup").ToLocalChecked(), Nan::New(Lookup)->GetFunction()); } diff --git a/src/createarray.h b/src/createarray.h index 8dec7e4..6551032 100644 --- a/src/createarray.h +++ b/src/createarray.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitCreateArray(v8::Handle exports); +NAN_MODULE_INIT(InitCreateArray); #endif // ARRAYFIRE_JS_CREATEARRAY diff --git a/src/device.cpp b/src/device.cpp index 681748a..b16b03f 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -44,14 +44,14 @@ using namespace node; NAN_METHOD(GetDeviceCount) { - NanScope(); + try { Guard(); #ifdef CPU - NanReturnValue(NanNew(1)); + info.GetReturnValue().Set(Nan::New(1)); #else - NanReturnValue(NanNew(af::getDeviceCount())); + info.GetReturnValue().Set(Nan::New(af::getDeviceCount())); #endif } ARRAYFIRE_CATCH @@ -62,12 +62,12 @@ NAN_METHOD(GetDevice) try { Guard(); - NanScope(); + #ifdef CPU - NanReturnValue(NanNew(0)); + info.GetReturnValue().Set(Nan::New(0)); #else - NanReturnValue(NanNew(af::getDevice())); + info.GetReturnValue().Set(Nan::New(af::getDevice())); #endif } ARRAYFIRE_CATCH @@ -75,96 +75,96 @@ NAN_METHOD(GetDevice) NAN_METHOD(SetDevice) { - NanScope(); + try { Guard(); #ifndef CPU - af::setDevice(args[0]->Uint32Value()); + af::setDevice(info[0]->Uint32Value()); #endif - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } NAN_METHOD(DeviceInfo) { - NanScope(); + try { Guard(); bool IsDoubleAvailable = af::isDoubleAvailable(af::getDevice()); - auto info = NanNew(); + auto infoObj = Nan::New(); #ifdef CPU - info->Set(NanNew(Symbols::Name), NanNew(Symbols::Cpu)); - info->Set(NanNew(Symbols::Platform), NanNew(Symbols::Cpu)); - info->Set(NanNew(Symbols::Toolkit), NanNew(Symbols::Cpu)); - info->Set(NanNew(Symbols::Compute), NanNew(Symbols::Cpu)); - info->Set(NanNew(Symbols::IsDoubleAvailable), NanNew(IsDoubleAvailable)); + infoObj->Set(Nan::New(Symbols::Name), Nan::New(Symbols::Cpu)); + infoObj->Set(Nan::New(Symbols::Platform), Nan::New(Symbols::Cpu)); + infoObj->Set(Nan::New(Symbols::Toolkit), Nan::New(Symbols::Cpu)); + infoObj->Set(Nan::New(Symbols::Compute), Nan::New(Symbols::Cpu)); + infoObj->Set(Nan::New(Symbols::IsDoubleAvailable), Nan::New(IsDoubleAvailable)); #else char name[256], platform[256], toolkit[256], compute[256]; af::deviceInfo(name, platform, toolkit, compute); - info->Set(NanNew(Symbols::Name), NanNew(name)); - info->Set(NanNew(Symbols::Platform), NanNew(platform)); - info->Set(NanNew(Symbols::Toolkit), NanNew(toolkit)); - info->Set(NanNew(Symbols::Compute), NanNew(compute)); - info->Set(NanNew(Symbols::IsDoubleAvailable), NanNew(IsDoubleAvailable)); + infoObj->Set(Nan::New(Symbols::Name), Nan::New(name).ToLocalChecked()); + infoObj->Set(Nan::New(Symbols::Platform), Nan::New(platform).ToLocalChecked()); + infoObj->Set(Nan::New(Symbols::Toolkit), Nan::New(toolkit).ToLocalChecked()); + infoObj->Set(Nan::New(Symbols::Compute), Nan::New(compute).ToLocalChecked()); + infoObj->Set(Nan::New(Symbols::IsDoubleAvailable), Nan::New(IsDoubleAvailable)); #endif - NanReturnValue(info); + info.GetReturnValue().Set(infoObj); } ARRAYFIRE_CATCH } NAN_METHOD(IsDoubleAvailable) { - NanScope(); + try { Guard(); - NanReturnValue(NanNew(af::isDoubleAvailable(args[0]->Uint32Value()))); + info.GetReturnValue().Set(Nan::New(af::isDoubleAvailable(info[0]->Uint32Value()))); } ARRAYFIRE_CATCH } NAN_METHOD(Sync) { - NanScope(); + try { int device = -1; - NanCallback *callback = nullptr; + Nan::Callback *callback = nullptr; - if (args.Length() > 0) + if (info.Length() > 0) { int idx = 0; - if (args[idx]->IsNumber()) + if (info[idx]->IsNumber()) { - device = args[idx++]->Int32Value(); + device = info[idx++]->Int32Value(); #ifdef CPU if (device > 1 || device < -1) { - return NanThrowRangeError("Device is out of range."); + return Nan::ThrowRangeError("Device is out of range."); } #else if (device >= af::getDeviceCount() || device < -1) { - return NanThrowRangeError("Device is out of range."); + return Nan::ThrowRangeError("Device is out of range."); } #endif } - if (idx < args.Length() && args[idx]->IsFunction()) + if (idx < info.Length() && info[idx]->IsFunction()) { - callback = new NanCallback(args[idx].As()); + callback = new Nan::Callback(info[idx].As()); } } @@ -174,8 +174,8 @@ NAN_METHOD(Sync) af::sync(device); }; - NanAsyncQueueWorker(new Worker(callback, move(exec))); - NanReturnUndefined(); + Nan::AsyncQueueWorker(new Worker(callback, move(exec))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -191,12 +191,12 @@ pair getAllocPars(unsigned elements, unsigned udtype) NAN_METHOD(Alloc) { - NanScope(); + try { - unsigned elements = args[0]->Uint32Value(); - unsigned udtype = args[1]->Uint32Value(); + unsigned elements = info[0]->Uint32Value(); + unsigned udtype = info[1]->Uint32Value(); auto allocPars = getAllocPars(elements, udtype); Guard(); @@ -205,23 +205,23 @@ NAN_METHOD(Alloc) { Guard(); af::free(data); - NanAdjustExternalMemory(static_cast(reinterpret_cast(hint))); + Nan::AdjustExternalMemory(static_cast(reinterpret_cast(hint))); }; size_t size = elements + 100; - NanAdjustExternalMemory(static_cast(size)); - NanReturnValue(NanNewBufferHandle(ptr, 0, gcCallback, reinterpret_cast(size))); + Nan::AdjustExternalMemory(static_cast(size)); + info.GetReturnValue().Set(Nan::NewBuffer(ptr, 0, gcCallback, reinterpret_cast(size)).ToLocalChecked()); } ARRAYFIRE_CATCH } NAN_METHOD(Pinned) { - NanScope(); + try { - unsigned elements = args[0]->Uint32Value(); - unsigned udtype = args[1]->Uint32Value(); + unsigned elements = info[0]->Uint32Value(); + unsigned udtype = info[1]->Uint32Value(); auto allocPars = getAllocPars(elements, udtype); Guard(); @@ -230,24 +230,26 @@ NAN_METHOD(Pinned) { Guard(); af::freePinned(data); - NanAdjustExternalMemory(static_cast(reinterpret_cast(hint))); + Nan::AdjustExternalMemory(static_cast(reinterpret_cast(hint))); }; size_t size = elements + 100; - NanAdjustExternalMemory(static_cast(size)); - NanReturnValue(NanNewBufferHandle(ptr, allocPars.second, gcCallback, reinterpret_cast(size))); + Nan::AdjustExternalMemory(static_cast(size)); + info.GetReturnValue().Set(Nan::NewBuffer(ptr, allocPars.second, gcCallback, reinterpret_cast(size)).ToLocalChecked()); } ARRAYFIRE_CATCH } -void InitDevice(v8::Handle exports) +NAN_MODULE_INIT(InitDevice) { - exports->Set(NanNew("getDeviceCount"), NanNew(GetDeviceCount)->GetFunction()); - exports->Set(NanNew("getDevice"), NanNew(GetDevice)->GetFunction()); - exports->Set(NanNew("setDevice"), NanNew(SetDevice)->GetFunction()); - exports->Set(NanNew("deviceInfo"), NanNew(DeviceInfo)->GetFunction()); - exports->Set(NanNew("isDoubleAvailable"), NanNew(IsDoubleAvailable)->GetFunction()); - exports->Set(NanNew("sync"), NanNew(Sync)->GetFunction()); - exports->Set(NanNew("wait"), NanNew(Sync)->GetFunction()); - exports->Set(NanNew("alloc"), NanNew(Alloc)->GetFunction()); - exports->Set(NanNew("pinned"), NanNew(Pinned)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("getDeviceCount").ToLocalChecked(), Nan::New(GetDeviceCount)->GetFunction()); + Nan::Set(target, Nan::New("getDevice").ToLocalChecked(), Nan::New(GetDevice)->GetFunction()); + Nan::Set(target, Nan::New("setDevice").ToLocalChecked(), Nan::New(SetDevice)->GetFunction()); + Nan::Set(target, Nan::New("deviceInfo").ToLocalChecked(), Nan::New(DeviceInfo)->GetFunction()); + Nan::Set(target, Nan::New("isDoubleAvailable").ToLocalChecked(), Nan::New(IsDoubleAvailable)->GetFunction()); + Nan::Set(target, Nan::New("sync").ToLocalChecked(), Nan::New(Sync)->GetFunction()); + Nan::Set(target, Nan::New("wait").ToLocalChecked(), Nan::New(Sync)->GetFunction()); + Nan::Set(target, Nan::New("alloc").ToLocalChecked(), Nan::New(Alloc)->GetFunction()); + Nan::Set(target, Nan::New("pinned").ToLocalChecked(), Nan::New(Pinned)->GetFunction()); } diff --git a/src/device.h b/src/device.h index 9cf0cc1..c4e9236 100644 --- a/src/device.h +++ b/src/device.h @@ -34,6 +34,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitDevice(v8::Handle exports); +NAN_MODULE_INIT(InitDevice); #endif diff --git a/src/errors.h b/src/errors.h index 84afe73..eaa158d 100644 --- a/src/errors.h +++ b/src/errors.h @@ -46,7 +46,7 @@ inline void _NanThrow(const char* what, const char* file, int line) using namespace std; stringstream s; s << what << " in '" << file << "' at " << line << "."; - NanThrowError(s.str().c_str()); + Nan::ThrowError(s.str().c_str()); } #define NAN_THROW(what) _NanThrow(what, __FILE__, __LINE__) @@ -71,7 +71,7 @@ inline void _NanThrow(const char* what, const char* file, int line) #define ARRAYFIRE_THROW_CB_EXPECTED() ARRAYFIRE_THROW("Callback argument expected."); #define ARRAYFIRE_CATCH \ - catch(fire_error &ex) { return NanThrowError(ex.what()); } \ + catch(fire_error &ex) { return Nan::ThrowError(ex.what()); } \ catch(af::exception &ex) { return NAN_THROW(ex.what()); } \ catch(std::exception &ex) { return NAN_THROW(ex.what()); } \ catch(...) { return NAN_THROW("Unknown error!"); } diff --git a/src/fire.cpp b/src/fire.cpp index 39c3cc2..8eaf91e 100644 --- a/src/fire.cpp +++ b/src/fire.cpp @@ -50,46 +50,52 @@ using namespace std; NAN_METHOD(_DoEvents) { - NanScope(); + uv_run(uv_default_loop(), UV_RUN_ONCE); - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } NAN_METHOD(_GforToggle) { - NanScope(); + af::gforToggle(); - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } NAN_METHOD(GC) { - NanScope(); - unsigned ms = args.Length() ? args[0]->Uint32Value() : 1000; - NanIdleNotification(ms); + + unsigned ms = info.Length() ? info[0]->Uint32Value() : 1000; + Nan::IdleNotification(ms); af::sync(); - NanReturnUndefined(); + info.GetReturnValue().SetUndefined(); } -void Init(v8::Handle exports) +NAN_MODULE_INIT(Init) { + Nan::HandleScope scope; Symbols::Init(); - InitDevice(exports); - ArrayWrapper::Init(exports); - InitCreateArray(exports); - InitMoveAndReorderArray(exports); - InitArrayHelperFunctions(exports); - InitMathFunctions(exports); - InitVectorAlgorithms(exports); - InitStatistics(exports); - InitComputerVision(exports); - InitImageProcessing(exports); - InitLinearAlgebra(exports); - InitSignalProcessing(exports); + InitDevice(target); + ArrayWrapper::Init(target); + InitCreateArray(target); + InitMoveAndReorderArray(target); + InitArrayHelperFunctions(target); + InitMathFunctions(target); + InitVectorAlgorithms(target); + InitStatistics(target); + InitComputerVision(target); + InitImageProcessing(target); + InitLinearAlgebra(target); + InitSignalProcessing(target); // Helpers: - exports->Set(NanNew("_doEvents"), NanNew(_DoEvents)->GetFunction()); - exports->Set(NanNew("_gforToggle"), NanNew(_GforToggle)->GetFunction()); - exports->Set(NanNew("gc"), NanNew(::GC)->GetFunction()); + Nan::Set(target, Nan::New("_doEvents").ToLocalChecked(), + Nan::New(_DoEvents)->GetFunction()); + + Nan::Set(target, Nan::New("_gforToggle").ToLocalChecked(), + Nan::New(_GforToggle)->GetFunction()); + + Nan::Set(target, Nan::New("gc").ToLocalChecked(), + Nan::New(::GC)->GetFunction()); } diff --git a/src/fire.h b/src/fire.h index 132bc76..c60754a 100644 --- a/src/fire.h +++ b/src/fire.h @@ -34,6 +34,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void Init(v8::Handle exports); +NAN_MODULE_INIT(Init); #endif diff --git a/src/helpers.cpp b/src/helpers.cpp index 367fa4e..a985156 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -141,7 +141,8 @@ string ErrToString(af_err err) v8::Local WrapPointer(void* ptr) { - return NanNewBufferHandle(reinterpret_cast(ptr), 0, [](char*v1, void*v2) {}, nullptr); + Nan::EscapableHandleScope scope; + return scope.Escape(Nan::NewBuffer(reinterpret_cast(ptr), 0, [](char*v1, void*v2) {}, nullptr).ToLocalChecked()); } af::dim4 ToDim4(v8::Local obj) @@ -153,7 +154,7 @@ af::dim4 ToDim4(v8::Local obj) } else { - auto member = obj->Get(NanNew(Symbols::Values)); + auto member = obj->Get(Nan::New(Symbols::Values)); if (member->IsArray()) { dims = member.As(); @@ -197,10 +198,10 @@ af::dim4 ToDim4(v8::Local value) af::seq ToSeq(v8::Local obj) { - auto begin = obj->Get(NanNew(Symbols::Begin)); - auto end = obj->Get(NanNew(Symbols::End)); - auto step = obj->Get(NanNew(Symbols::Step)); - auto isGFor = obj->Get(NanNew(Symbols::IsGFor)); + auto begin = obj->Get(Nan::New(Symbols::Begin)); + auto end = obj->Get(Nan::New(Symbols::End)); + auto step = obj->Get(Nan::New(Symbols::Step)); + auto isGFor = obj->Get(Nan::New(Symbols::IsGFor)); if (begin->IsNumber() && end->IsNumber()) { double stepValue = 1; @@ -267,8 +268,8 @@ af::index ToIndex(v8::Local value) af::af_cdouble ToDComplex(v8::Local obj) { - auto imag = obj->Get(NanNew(Symbols::Imag)); - auto real = obj->Get(NanNew(Symbols::Real)); + auto imag = obj->Get(Nan::New(Symbols::Imag)); + auto real = obj->Get(Nan::New(Symbols::Real)); if (imag->IsNumber() && real->IsNumber()) { return { real->NumberValue(), imag->NumberValue() }; @@ -287,8 +288,8 @@ af::af_cdouble ToDComplex(v8::Local value) af::af_cfloat ToFComplex(v8::Local obj) { - auto imag = obj->Get(NanNew(Symbols::Imag)); - auto real = obj->Get(NanNew(Symbols::Real)); + auto imag = obj->Get(Nan::New(Symbols::Imag)); + auto real = obj->Get(Nan::New(Symbols::Real)); if (imag->IsNumber() && real->IsNumber()) { return { (float)real->NumberValue(), (float)imag->NumberValue() }; @@ -307,26 +308,26 @@ af::af_cfloat ToFComplex(v8::Local value) v8::Local ToV8Complex(const af::af_cdouble& value) { - auto obj = NanNew(); - obj->Set(NanNew(Symbols::Imag), NanNew(value.imag)); - obj->Set(NanNew(Symbols::Real), NanNew(value.real)); + auto obj = Nan::New(); + obj->Set(Nan::New(Symbols::Imag), Nan::New(value.imag)); + obj->Set(Nan::New(Symbols::Real), Nan::New(value.real)); return obj; } v8::Local ToV8Complex(const af::af_cfloat& value) { - auto obj = NanNew(); - obj->Set(NanNew(Symbols::Imag), NanNew(value.imag)); - obj->Set(NanNew(Symbols::Real), NanNew(value.real)); + auto obj = Nan::New(); + obj->Set(Nan::New(Symbols::Imag), Nan::New(value.imag)); + obj->Set(Nan::New(Symbols::Real), Nan::New(value.real)); return obj; } -std::pair ParseDimAndTypeArgs(const v8::FunctionCallbackInfo& args, int assumedArgsLength, int argsFollowingDims, int dimsStartAt) +std::pair ParseDimAndTypeArgs(const Nan::FunctionCallbackInfo& info, int assumedArgsLength, int argsFollowingDims, int dimsStartAt) { if (assumedArgsLength == -1) { - assumedArgsLength = args.Length(); - if (args[assumedArgsLength - 1]->IsFunction()) + assumedArgsLength = info.Length(); + if (info[assumedArgsLength - 1]->IsFunction()) { // Async assumedArgsLength--; @@ -339,68 +340,68 @@ std::pair ParseDimAndTypeArgs(const v8::FunctionCallbackInf int dimIdx = idx - dimsStartAt; assert(dimIdx < 4); any = true; - if (dimIdx == 0 && args[idx]->IsObject()) + if (dimIdx == 0 && info[idx]->IsObject()) { - dims = move(ToDim4(args[idx].As())); + dims = move(ToDim4(info[idx].As())); break; } - dims[dimIdx] = args[idx]->Int32Value(); + dims[dimIdx] = info[idx]->Int32Value(); } if (any) { - af::dtype type = GetDTypeInfo(args[assumedArgsLength - 1 + dimsStartAt]->Uint32Value()).first; + af::dtype type = GetDTypeInfo(info[assumedArgsLength - 1 + dimsStartAt]->Uint32Value()).first; return move(make_pair(move(dims), type)); } ARRAYFIRE_THROW("Cannot extract dimensions and dtype from argumens."); } -NanCallback* GetCallback(const v8::FunctionCallbackInfo& args) +Nan::Callback* GetCallback(const Nan::FunctionCallbackInfo& info) { - if (args.Length() && args[args.Length() - 1]->IsFunction()) + if (info.Length() && info[info.Length() - 1]->IsFunction()) { - return new NanCallback(args[args.Length() - 1].As()); + return new Nan::Callback(info[info.Length() - 1].As()); } ARRAYFIRE_THROW_CB_EXPECTED(); } v8::Local ToV8Features(const af::features& feat) { - auto obj = NanNew(); - obj->Set(NanNew(Symbols::NumFeatures), NanNew((unsigned)feat.getNumFeatures())); - obj->Set(NanNew(Symbols::X), ArrayWrapper::New(feat.getX())); - obj->Set(NanNew(Symbols::Y), ArrayWrapper::New(feat.getY())); - obj->Set(NanNew(Symbols::Score), ArrayWrapper::New(feat.getScore())); - obj->Set(NanNew(Symbols::Orientation), ArrayWrapper::New(feat.getOrientation())); - obj->Set(NanNew(Symbols::Size), ArrayWrapper::New(feat.getSize())); + auto obj = Nan::New(); + obj->Set(Nan::New(Symbols::NumFeatures), Nan::New((unsigned)feat.getNumFeatures())); + obj->Set(Nan::New(Symbols::X), ArrayWrapper::New(feat.getX())); + obj->Set(Nan::New(Symbols::Y), ArrayWrapper::New(feat.getY())); + obj->Set(Nan::New(Symbols::Score), ArrayWrapper::New(feat.getScore())); + obj->Set(Nan::New(Symbols::Orientation), ArrayWrapper::New(feat.getOrientation())); + obj->Set(Nan::New(Symbols::Size), ArrayWrapper::New(feat.getSize())); return obj; } RegionIndex ToRegionIndex(v8::Local obj) { auto cn = obj->GetConstructorName(); - if (cn->Equals(NanNew(Symbols::RowClass))) + if (cn->Equals(Nan::New(Symbols::RowClass))) { - return make_tuple(Region::Row, obj->Get(NanNew(Symbols::Index))->Uint32Value(), (unsigned)0); + return make_tuple(Region::Row, obj->Get(Nan::New(Symbols::Index))->Uint32Value(), (unsigned)0); } - else if (cn->Equals(NanNew(Symbols::RowsClass))) + else if (cn->Equals(Nan::New(Symbols::RowsClass))) { - return make_tuple(Region::Rows, obj->Get(NanNew(Symbols::FirstIndex))->Uint32Value(), obj->Get(NanNew(Symbols::LastIndex))->Uint32Value()); + return make_tuple(Region::Rows, obj->Get(Nan::New(Symbols::FirstIndex))->Uint32Value(), obj->Get(Nan::New(Symbols::LastIndex))->Uint32Value()); } - else if (cn->Equals(NanNew(Symbols::ColClass))) + else if (cn->Equals(Nan::New(Symbols::ColClass))) { - return make_tuple(Region::Col, obj->Get(NanNew(Symbols::Index))->Uint32Value(), (unsigned)0); + return make_tuple(Region::Col, obj->Get(Nan::New(Symbols::Index))->Uint32Value(), (unsigned)0); } - else if (cn->Equals(NanNew(Symbols::ColsClass))) + else if (cn->Equals(Nan::New(Symbols::ColsClass))) { - return make_tuple(Region::Cols, obj->Get(NanNew(Symbols::FirstIndex))->Uint32Value(), obj->Get(NanNew(Symbols::LastIndex))->Uint32Value()); + return make_tuple(Region::Cols, obj->Get(Nan::New(Symbols::FirstIndex))->Uint32Value(), obj->Get(Nan::New(Symbols::LastIndex))->Uint32Value()); } - else if (cn->Equals(NanNew(Symbols::SliceClass))) + else if (cn->Equals(Nan::New(Symbols::SliceClass))) { - return make_tuple(Region::Slice, obj->Get(NanNew(Symbols::Index))->Uint32Value(), (unsigned)0); + return make_tuple(Region::Slice, obj->Get(Nan::New(Symbols::Index))->Uint32Value(), (unsigned)0); } - else if (cn->Equals(NanNew(Symbols::SlicesClass))) + else if (cn->Equals(Nan::New(Symbols::SlicesClass))) { - return make_tuple(Region::Slices, obj->Get(NanNew(Symbols::FirstIndex))->Uint32Value(), obj->Get(NanNew(Symbols::LastIndex))->Uint32Value()); + return make_tuple(Region::Slices, obj->Get(Nan::New(Symbols::FirstIndex))->Uint32Value(), obj->Get(Nan::New(Symbols::LastIndex))->Uint32Value()); } return make_tuple(Region::None, (unsigned)0, (unsigned)0); } diff --git a/src/helpers.h b/src/helpers.h index 712cd3b..23f9167 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -78,9 +78,9 @@ v8::Local ToV8Complex(const af::af_cfloat& value); v8::Local ToV8Features(const af::features& feat); -std::pair ParseDimAndTypeArgs(const v8::FunctionCallbackInfo& args, int assumedArgsLength = -1, int argsFollowingDims = 0, int dimsStartAt = 0); +std::pair ParseDimAndTypeArgs(const Nan::FunctionCallbackInfo& info, int assumedArgsLength = -1, int argsFollowingDims = 0, int dimsStartAt = 0); -NanCallback* GetCallback(const v8::FunctionCallbackInfo& args); +Nan::Callback* GetCallback(const Nan::FunctionCallbackInfo& info); inline bool NeedsDouble(const af::array& array) { return array.type() == f64 || array.type() == c64 || array.type() == s64 || array.type() == u64; } @@ -90,19 +90,19 @@ RegionIndex ToRegionIndex(v8::Local obj); RegionIndex ToRegionIndex(v8::Local value); -#define ARGS_LEN(n) if (args.Length() < n) return NAN_THROW_INVALID_NO_OF_ARGS(); +#define ARGS_LEN(n) if (info.Length() < n) return NAN_THROW_INVALID_NO_OF_ARGS(); #define ARRAYFIRE_SYNC_METHOD_ARR(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0))));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0))));\ }\ ARRAYFIRE_CATCH\ } @@ -110,16 +110,16 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ int dim = 0;\ - if (args.Length() > 1) dim = args[1]->Int32Value();\ + if (info.Length() > 1) dim = info[1]->Int32Value();\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), dim)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), dim)));\ }\ ARRAYFIRE_CATCH\ } @@ -127,16 +127,16 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ bool v = defV;\ - if (args.Length() > 1) v = args[1]->BooleanValue();\ + if (info.Length() > 1) v = info[1]->BooleanValue();\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), v)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v)));\ }\ ARRAYFIRE_CATCH\ } @@ -144,17 +144,17 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ bool v = defV;\ - if (args.Length() > 1) v = args[1]->BooleanValue();\ + if (info.Length() > 1) v = info[1]->BooleanValue();\ Guard();\ - af::f(*ArrayWrapper::GetArrayAt(args, 0), v);\ - NanReturnUndefined();\ + af::f(*ArrayWrapper::GetArrayAt(info, 0), v);\ + info.GetReturnValue().SetUndefined();\ }\ ARRAYFIRE_CATCH\ } @@ -162,7 +162,7 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ @@ -171,11 +171,11 @@ NAN_METHOD(F)\ float v1 = defV1;\ float v2 = defV2;\ float v3 = defV3;\ - if (args.Length() > 1) v1 = args[1]->NumberValue();\ - if (args.Length() > 2) v1 = args[2]->NumberValue();\ - if (args.Length() > 3) v1 = args[3]->NumberValue();\ + if (info.Length() > 1) v1 = info[1]->NumberValue();\ + if (info.Length() > 2) v1 = info[2]->NumberValue();\ + if (info.Length() > 3) v1 = info[3]->NumberValue();\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), v1, v2, v3)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v1, v2, v3)));\ }\ ARRAYFIRE_CATCH\ } @@ -183,14 +183,14 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(2);\ \ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1))));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1))));\ }\ ARRAYFIRE_CATCH\ } @@ -198,14 +198,14 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(3);\ \ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), *ArrayWrapper::GetArrayAt(args, 2))));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), *ArrayWrapper::GetArrayAt(info, 2))));\ }\ ARRAYFIRE_CATCH\ } @@ -213,14 +213,14 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(4);\ \ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), *ArrayWrapper::GetArrayAt(args, 2), *ArrayWrapper::GetArrayAt(args, 3))));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), *ArrayWrapper::GetArrayAt(info, 2), *ArrayWrapper::GetArrayAt(info, 3))));\ }\ ARRAYFIRE_CATCH\ } @@ -228,16 +228,16 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(2);\ \ int dim = 0;\ - if (args.Length() > 2) dim = args[2]->Int32Value();\ + if (info.Length() > 2) dim = info[2]->Int32Value();\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), dim)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), dim)));\ }\ ARRAYFIRE_CATCH\ } @@ -245,16 +245,16 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(2);\ \ bool v = defV;\ - if (args.Length() > 2) v = args[2]->BooleanValue();\ + if (info.Length() > 2) v = info[2]->BooleanValue();\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), v)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), v)));\ }\ ARRAYFIRE_CATCH\ } @@ -262,40 +262,40 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2)\ \ - auto pArray1 = ArrayWrapper::TryGetArrayAt(args, 0);\ - auto pArray2 = ArrayWrapper::TryGetArrayAt(args, 1);\ + auto pArray1 = ArrayWrapper::TryGetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::TryGetArrayAt(info, 1);\ Guard();\ if (pArray1)\ {\ if (pArray2)\ {\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ return;\ }\ - else if (args[1]->IsNumber())\ + else if (info[1]->IsNumber())\ {\ - double d = args[1]->NumberValue();\ + double d = info[1]->NumberValue();\ if (NeedsDouble(*pArray1))\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray1, d)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, d)));\ else\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray1, (float)d)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, (float)d)));\ return;\ }\ }\ - else if (args[0]->IsNumber())\ + else if (info[0]->IsNumber())\ {\ - double d = args[0]->NumberValue();\ + double d = info[0]->NumberValue();\ if (pArray2)\ {\ if (NeedsDouble(*pArray2))\ - NanReturnValue(ArrayWrapper::New(af::f(d, *pArray2)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(d, *pArray2)));\ else\ - NanReturnValue(ArrayWrapper::New(af::f((float)d, *pArray2)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f((float)d, *pArray2)));\ return;\ }\ }\ @@ -308,32 +308,32 @@ NAN_METHOD(F)\ #define ARRAYFIRE_ASYNC_METHOD_ALGO_V1(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ \ - auto array = *ArrayWrapper::GetArrayAt(args, 0);\ - if (args.Length() > 2)\ + auto array = *ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 2)\ {\ - int dim = args[1]->Int32Value();\ - return ArrayWrapper::NewAsync(args, [=]() { Guard(); return new af::array(af::f(array, dim)); });\ + int dim = info[1]->Int32Value();\ + return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::f(array, dim)); });\ }\ else\ {\ if (NeedsDouble(array))\ {\ auto exec = [=]() { Guard(); return af::f(array); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new Worker(GetCallback(info), std::move(exec));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ else\ {\ auto exec = [=]() { Guard(); return af::f(array); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new Worker(GetCallback(info), std::move(exec));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ }\ }\ @@ -343,15 +343,15 @@ NAN_METHOD(F)\ #define ARRAYFIRE_ASYNC_METHOD_ALGO_V2(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ \ - auto array = *ArrayWrapper::GetArrayAt(args, 0);\ - if (args.Length() > 2)\ + auto array = *ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 2)\ {\ - int dim = args[1]->Int32Value();\ + int dim = info[1]->Int32Value();\ typedef std::pair PairT;\ typedef Worker WorkerT;\ auto exec = [=]()\ @@ -364,14 +364,15 @@ NAN_METHOD(F)\ };\ auto conv = [=](WorkerT* w, PairT p)\ {\ - auto obj = NanNew();\ - obj->Set(NanNew(Symbols::Value), ArrayWrapper::New(p.first));\ - obj->Set(NanNew(Symbols::Index), ArrayWrapper::New(p.second));\ - return obj;\ + Nan::EscapableHandleScope scope;\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), ArrayWrapper::New(p.first));\ + obj->Set(Nan::New(Symbols::Index), ArrayWrapper::New(p.second));\ + return scope.Escape(obj);\ };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ else\ {\ @@ -389,14 +390,15 @@ NAN_METHOD(F)\ };\ auto conv = [=](WorkerT* w, PairT p)\ {\ - auto obj = NanNew();\ - obj->Set(NanNew(Symbols::Value), NanNew(p.first));\ - obj->Set(NanNew(Symbols::Index), NanNew(p.second));\ - return obj;\ + Nan::EscapableHandleScope scope;\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), Nan::New(p.first));\ + obj->Set(Nan::New(Symbols::Index), Nan::New(p.second));\ + return scope.Escape(obj);\ };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ else\ {\ @@ -412,14 +414,15 @@ NAN_METHOD(F)\ };\ auto conv = [=](WorkerT* w, PairT p)\ {\ - auto obj = NanNew();\ - obj->Set(NanNew(Symbols::Value), NanNew(p.first));\ - obj->Set(NanNew(Symbols::Index), NanNew(p.second));\ - return obj;\ + Nan::EscapableHandleScope scope;\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), Nan::New(p.first));\ + obj->Set(Nan::New(Symbols::Index), Nan::New(p.second));\ + return scope.Escape(obj);\ };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ }\ }\ @@ -430,33 +433,33 @@ NAN_METHOD(F)\ #define ARRAYFIRE_ASYNC_METHOD_ALGO_V3(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(3);\ \ - auto array1 = *ArrayWrapper::GetArrayAt(args, 0);\ - auto array2 = *ArrayWrapper::GetArrayAt(args, 1);\ - if (args.Length() > 3)\ + auto array1 = *ArrayWrapper::GetArrayAt(info, 0);\ + auto array2 = *ArrayWrapper::GetArrayAt(info, 1);\ + if (info.Length() > 3)\ {\ - int dim = args[2]->Int32Value();\ - return ArrayWrapper::NewAsync(args, [=]() { Guard(); return new af::array(af::f(array1, array2, dim)); });\ + int dim = info[2]->Int32Value();\ + return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::f(array1, array2, dim)); });\ }\ else\ {\ if (NeedsDouble(array1))\ {\ auto exec = [=]() { Guard(); return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new Worker(GetCallback(info), std::move(exec));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ else\ {\ auto exec = [=]() { Guard(); return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + auto worker = new Worker(GetCallback(info), std::move(exec));\ + Nan::AsyncQueueWorker(worker);\ + info.GetReturnValue().SetUndefined();\ }\ }\ }\ @@ -466,17 +469,17 @@ NAN_METHOD(F)\ #define ARRAYFIRE_SYNC_METHOD_XYZW(F, f, iy, iz, iw)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(3);\ \ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ unsigned x, y, z, w;\ - if (args[1]->IsObject())\ + if (info[1]->IsObject())\ {\ - auto dim = ToDim4(args[1].As());\ + auto dim = ToDim4(info[1].As());\ x = dim[0];\ y = dim[1];\ z = dim[2];\ @@ -484,25 +487,25 @@ NAN_METHOD(F)\ }\ else\ {\ - x = args[1]->Uint32Value();\ + x = info[1]->Uint32Value();\ y = iy;\ z = iz;\ w = iw;\ - if (args.Length() > 2)\ + if (info.Length() > 2)\ {\ - y = args[2]->Uint32Value();\ + y = info[2]->Uint32Value();\ }\ - if (args.Length() > 3)\ + if (info.Length() > 3)\ {\ - z = args[3]->Uint32Value();\ + z = info[3]->Uint32Value();\ }\ - if (args.Length() > 4)\ + if (info.Length() > 4)\ {\ - w = args[4]->Uint32Value();\ + w = info[4]->Uint32Value();\ }\ }\ Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray, x, y, z, w)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray, x, y, z, w)));\ }\ ARRAYFIRE_CATCH\ } diff --git a/src/imageprocessing.cpp b/src/imageprocessing.cpp index 8ac85bc..5de1fc6 100644 --- a/src/imageprocessing.cpp +++ b/src/imageprocessing.cpp @@ -43,19 +43,19 @@ using namespace node; NAN_METHOD(LoadImage) { - NanScope(); + try { ARGS_LEN(2); - String::Utf8Value str(args[0]); + String::Utf8Value str(info[0]); string fn(*str); bool isColor = false; - if (args.Length() > 1) + if (info.Length() > 1) { - isColor = args[1]->BooleanValue(); + isColor = info[1]->BooleanValue(); } ArrayWrapper::NewAsync( - args, + info, [=](){ Guard(); return new af::array(af::loadImage(fn.c_str(), isColor)); }); } ARRAYFIRE_CATCH; @@ -63,34 +63,34 @@ NAN_METHOD(LoadImage) NAN_METHOD(SaveImage) { - NanScope(); + try { ARGS_LEN(3); - String::Utf8Value str(args[0]); + String::Utf8Value str(info[0]); string fn(*str); - auto array = *ArrayWrapper::GetArrayAt(args, 1); + auto array = *ArrayWrapper::GetArrayAt(info, 1); auto exec = [=]() { Guard(); af::saveImage(fn.c_str(), array); }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } NAN_METHOD(ColorSpace) { - NanScope(); + try { ARGS_LEN(3); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - auto to = (af::CSpace)args[1]->Uint32Value(); - auto from = (af::CSpace)args[2]->Uint32Value(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + auto to = (af::CSpace)info[1]->Uint32Value(); + auto from = (af::CSpace)info[2]->Uint32Value(); Guard(); ArrayWrapper::New(af::colorSpace(*pArray, to, from)); } @@ -104,15 +104,15 @@ ARRAYFIRE_SYNC_METHOD_ARR(RGB2HSV, rgb2hsv) NAN_METHOD(Regions) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::connectivity conn = AF_CONNECTIVITY_4; af::dtype dtype = f32; - if (args.Length() > 1) conn = (af::connectivity)args[1]->Uint32Value(); - if (args.Length() > 2) dtype = GetDTypeInfo(args[2]).first; + if (info.Length() > 1) conn = (af::connectivity)info[1]->Uint32Value(); + if (info.Length() > 2) dtype = GetDTypeInfo(info[2]).first; Guard(); ArrayWrapper::New(af::regions(*pArray, conn, dtype)); } @@ -121,15 +121,15 @@ NAN_METHOD(Regions) NAN_METHOD(Bilateral) { - NanScope(); + try { ARGS_LEN(3); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float spatialSigma = args[1]->NumberValue(); - float chromaticSigma = args[2]->NumberValue(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float spatialSigma = info[1]->NumberValue(); + float chromaticSigma = info[2]->NumberValue(); bool isColor = false; - if (args.Length() > 3) isColor = args[3]->BooleanValue(); + if (info.Length() > 3) isColor = info[3]->BooleanValue(); Guard(); ArrayWrapper::New(af::bilateral(*pArray, spatialSigma, chromaticSigma, isColor)); } @@ -139,17 +139,17 @@ NAN_METHOD(Bilateral) #define ARRAYFIRE_FILT_METHOD(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(1);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ dim_t windLength = 3;\ dim_t windWidth = 3;\ af::borderType edgePad = AF_PAD_ZERO;\ - if (args.Length() > 1) windLength = args[1]->Uint32Value();\ - if (args.Length() > 2) windWidth = args[2]->Uint32Value();\ - if (args.Length() > 3) edgePad = (af::borderType)args[3]->Uint32Value();\ + if (info.Length() > 1) windLength = info[1]->Uint32Value();\ + if (info.Length() > 2) windWidth = info[2]->Uint32Value();\ + if (info.Length() > 3) edgePad = (af::borderType)info[3]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, windLength, windWidth, edgePad));\ }\ @@ -163,16 +163,16 @@ ARRAYFIRE_FILT_METHOD(MedFilt, medfilt) NAN_METHOD(MeanShift) { - NanScope(); + try { ARGS_LEN(4); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float spatialSigma = args[1]->NumberValue(); - float chromaticSigma = args[2]->NumberValue(); - unsigned iter = args[3]->Uint32Value(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float spatialSigma = info[1]->NumberValue(); + float chromaticSigma = info[2]->NumberValue(); + unsigned iter = info[3]->Uint32Value(); bool isColor = false; - if (args.Length() > 4) isColor = args[4]->BooleanValue(); + if (info.Length() > 4) isColor = info[4]->BooleanValue(); Guard(); ArrayWrapper::New(af::meanShift(*pArray, spatialSigma, chromaticSigma, iter, isColor)); } @@ -181,20 +181,20 @@ NAN_METHOD(MeanShift) NAN_METHOD(Sobel) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); unsigned kerSize = 3; - if (args.Length() > 1) kerSize = args[1]->Uint32Value(); + if (info.Length() > 1) kerSize = info[1]->Uint32Value(); Guard(); af::array dx, dy; af::sobel(dx, dy, *pArray, kerSize); - auto result = NanNew(); - result->Set(NanNew(Symbols::DX), ArrayWrapper::New(dx)); - result->Set(NanNew(Symbols::DY), ArrayWrapper::New(dy)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::DX), ArrayWrapper::New(dx)); + result->Set(Nan::New(Symbols::DY), ArrayWrapper::New(dy)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } @@ -203,16 +203,16 @@ ARRAYFIRE_SYNC_METHOD_ARR_ARR(HistEqual, histEqual) NAN_METHOD(Histogram) { - NanScope(); + try { ARGS_LEN(2); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - unsigned nbins = args[1]->Uint32Value(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + unsigned nbins = info[1]->Uint32Value(); double minval = numeric_limits::min(); double maxval = numeric_limits::max(); - if (args.Length() > 2) minval = args[2]->NumberValue(); - if (args.Length() > 3) maxval = args[3]->NumberValue(); + if (info.Length() > 2) minval = info[2]->NumberValue(); + if (info.Length() > 3) maxval = info[3]->NumberValue(); Guard(); ArrayWrapper::New(af::histogram(*pArray, nbins, minval, maxval)); } @@ -221,36 +221,36 @@ NAN_METHOD(Histogram) NAN_METHOD(Resize) { - NanScope(); + try { ARGS_LEN(2); - auto pIn = ArrayWrapper::TryGetArrayAt(args, 0); + auto pIn = ArrayWrapper::TryGetArrayAt(info, 0); af::interpType method = AF_INTERP_NEAREST; if (pIn) { - dim_t odim0 = args[1]->Uint32Value(); - dim_t odim1 = args[2]->Uint32Value(); - if (args.Length() > 3) method = (af::interpType)args[3]->Uint32Value(); + dim_t odim0 = info[1]->Uint32Value(); + dim_t odim1 = info[2]->Uint32Value(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); Guard(); ArrayWrapper::New(af::resize(*pIn, odim0, odim1, method)); } else { - pIn = ArrayWrapper::TryGetArrayAt(args, 1); + pIn = ArrayWrapper::TryGetArrayAt(info, 1); if (pIn) { - float scale = args[0]->NumberValue(); - if (args.Length() > 2) method = (af::interpType)args[2]->Uint32Value(); + float scale = info[0]->NumberValue(); + if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); Guard(); ArrayWrapper::New(af::resize(scale, *pIn, method)); } else { - float scale0 = args[0]->NumberValue(); - float scale1 = args[1]->NumberValue(); - pIn = ArrayWrapper::GetArrayAt(args, 2); - if (args.Length() > 3) method = (af::interpType)args[3]->Uint32Value(); + float scale0 = info[0]->NumberValue(); + float scale1 = info[1]->NumberValue(); + pIn = ArrayWrapper::GetArrayAt(info, 2); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); Guard(); ArrayWrapper::New(af::resize(scale0, scale1, *pIn, method)); } @@ -261,16 +261,16 @@ NAN_METHOD(Resize) NAN_METHOD(Rotate) { - NanScope(); + try { ARGS_LEN(2); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float theta = args[1]->NumberValue(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float theta = info[1]->NumberValue(); bool crop = true; af::interpType method = AF_INTERP_NEAREST; - if (args.Length() > 2) crop = args[2]->BooleanValue(); - if (args.Length() > 3) method = (af::interpType)args[3]->Uint32Value(); + if (info.Length() > 2) crop = info[2]->BooleanValue(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); Guard(); ArrayWrapper::New(af::rotate(*pArray, theta, crop, method)); } @@ -279,19 +279,19 @@ NAN_METHOD(Rotate) NAN_METHOD(Scale) { - NanScope(); + try { ARGS_LEN(3); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float scale0 = args[1]->NumberValue(); - float scale1 = args[2]->NumberValue(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float scale0 = info[1]->NumberValue(); + float scale1 = info[2]->NumberValue(); dim_t odim0 = 0; dim_t odim1 = 0; af::interpType method = AF_INTERP_NEAREST; - if (args.Length() > 3) odim0 = args[3]->Uint32Value(); - if (args.Length() > 4) odim1 = args[4]->Uint32Value(); - if (args.Length() > 5) method = (af::interpType)args[5]->Uint32Value(); + if (info.Length() > 3) odim0 = info[3]->Uint32Value(); + if (info.Length() > 4) odim1 = info[4]->Uint32Value(); + if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); Guard(); ArrayWrapper::New(af::scale(*pArray, scale0, scale1, odim0, odim1, method)); } @@ -300,21 +300,21 @@ NAN_METHOD(Scale) NAN_METHOD(Skew) { - NanScope(); + try { ARGS_LEN(3); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float skew0 = args[1]->NumberValue(); - float skew1 = args[2]->NumberValue(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float skew0 = info[1]->NumberValue(); + float skew1 = info[2]->NumberValue(); dim_t odim0 = 0; dim_t odim1 = 0; bool inverse = true; af::interpType method = AF_INTERP_NEAREST; - if (args.Length() > 3) odim0 = args[3]->Uint32Value(); - if (args.Length() > 4) odim1 = args[4]->Uint32Value(); - if (args.Length() > 5) inverse = args[5]->BooleanValue(); - if (args.Length() > 6) method = (af::interpType)args[6]->Uint32Value(); + if (info.Length() > 3) odim0 = info[3]->Uint32Value(); + if (info.Length() > 4) odim1 = info[4]->Uint32Value(); + if (info.Length() > 5) inverse = info[5]->BooleanValue(); + if (info.Length() > 6) method = (af::interpType)info[6]->Uint32Value(); Guard(); ArrayWrapper::New(af::skew(*pArray, skew0, skew1, odim0, odim1, inverse, method)); } @@ -323,20 +323,20 @@ NAN_METHOD(Skew) NAN_METHOD(Transform) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); dim_t odim0 = 0; dim_t odim1 = 0; bool inverse = true; af::interpType method = AF_INTERP_NEAREST; - if (args.Length() > 2) odim0 = args[2]->Uint32Value(); - if (args.Length() > 3) odim1 = args[3]->Uint32Value(); - if (args.Length() > 4) inverse = args[4]->BooleanValue(); - if (args.Length() > 5) method = (af::interpType)args[5]->Uint32Value(); + if (info.Length() > 2) odim0 = info[2]->Uint32Value(); + if (info.Length() > 3) odim1 = info[3]->Uint32Value(); + if (info.Length() > 4) inverse = info[4]->BooleanValue(); + if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); Guard(); ArrayWrapper::New(af::transform(*pArray1, *pArray2, odim0, odim1, method, inverse)); } @@ -345,19 +345,19 @@ NAN_METHOD(Transform) NAN_METHOD(Translate) { - NanScope(); + try { ARGS_LEN(3); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - float trans0 = args[1]->NumberValue(); - float trans1 = args[2]->NumberValue(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + float trans0 = info[1]->NumberValue(); + float trans1 = info[2]->NumberValue(); dim_t odim0 = 0; dim_t odim1 = 0; af::interpType method = AF_INTERP_NEAREST; - if (args.Length() > 3) odim0 = args[3]->Uint32Value(); - if (args.Length() > 4) odim1 = args[4]->Uint32Value(); - if (args.Length() > 5) method = (af::interpType)args[5]->Uint32Value(); + if (info.Length() > 3) odim0 = info[3]->Uint32Value(); + if (info.Length() > 4) odim1 = info[4]->Uint32Value(); + if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); Guard(); ArrayWrapper::New(af::translate(*pArray, trans0, trans1, odim0, odim1, method)); } @@ -371,52 +371,54 @@ ARRAYFIRE_SYNC_METHOD_ARR_ARR(Erode3, erode3) NAN_METHOD(GaussianKernel) { - NanScope(); + try { ARGS_LEN(2); - int rows = args[0]->Int32Value(); - int cols = args[1]->Int32Value(); + int rows = info[0]->Int32Value(); + int cols = info[1]->Int32Value(); double sigR = 0; double sigC = 0; - if (args.Length() > 2) sigR = args[2]->NumberValue(); - if (args.Length() > 3) sigC = args[3]->NumberValue(); + if (info.Length() > 2) sigR = info[2]->NumberValue(); + if (info.Length() > 3) sigC = info[3]->NumberValue(); Guard(); ArrayWrapper::New(af::gaussianKernel(rows, cols, sigR, sigC)); } ARRAYFIRE_CATCH; } -void InitImageProcessing(v8::Handle exports) +NAN_MODULE_INIT(InitImageProcessing) { - exports->Set(NanNew("loadImage"), NanNew(LoadImage)->GetFunction()); - exports->Set(NanNew("saveImage"), NanNew(SaveImage)->GetFunction()); - exports->Set(NanNew("colorSpace"), NanNew(ColorSpace)->GetFunction()); - exports->Set(NanNew("gray2rgb"), NanNew(Gray2RGB)->GetFunction()); - exports->Set(NanNew("rgb2gray"), NanNew(RGB2Gray)->GetFunction()); - exports->Set(NanNew("hsv2rgb"), NanNew(HSV2RGB)->GetFunction()); - exports->Set(NanNew("rgb2hsv"), NanNew(RGB2HSV)->GetFunction()); - exports->Set(NanNew("regions"), NanNew(Regions)->GetFunction()); - exports->Set(NanNew("bilateral"), NanNew(Bilateral)->GetFunction()); - exports->Set(NanNew("maxfilt"), NanNew(MaxFilt)->GetFunction()); - exports->Set(NanNew("maxFilt"), NanNew(MaxFilt)->GetFunction()); - exports->Set(NanNew("minfilt"), NanNew(MinFilt)->GetFunction()); - exports->Set(NanNew("minFilt"), NanNew(MinFilt)->GetFunction()); - exports->Set(NanNew("medfilt"), NanNew(MedFilt)->GetFunction()); - exports->Set(NanNew("medFilt"), NanNew(MedFilt)->GetFunction()); - exports->Set(NanNew("meanShift"), NanNew(MeanShift)->GetFunction()); - exports->Set(NanNew("sobel"), NanNew(Sobel)->GetFunction()); - exports->Set(NanNew("histEqual"), NanNew(HistEqual)->GetFunction()); - exports->Set(NanNew("histogram"), NanNew(Histogram)->GetFunction()); - exports->Set(NanNew("resize"), NanNew(Resize)->GetFunction()); - exports->Set(NanNew("rotate"), NanNew(Rotate)->GetFunction()); - exports->Set(NanNew("scale"), NanNew(Scale)->GetFunction()); - exports->Set(NanNew("skew"), NanNew(Skew)->GetFunction()); - exports->Set(NanNew("transform"), NanNew(Transform)->GetFunction()); - exports->Set(NanNew("translate"), NanNew(Translate)->GetFunction()); - exports->Set(NanNew("dilate"), NanNew(Dilate)->GetFunction()); - exports->Set(NanNew("dilate3"), NanNew(Dilate3)->GetFunction()); - exports->Set(NanNew("erode"), NanNew(Erode)->GetFunction()); - exports->Set(NanNew("erode3"), NanNew(Erode3)->GetFunction()); - exports->Set(NanNew("gaussianKernel"), NanNew(GaussianKernel)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("loadImage").ToLocalChecked(), Nan::New(LoadImage)->GetFunction()); + Nan::Set(target, Nan::New("saveImage").ToLocalChecked(), Nan::New(SaveImage)->GetFunction()); + Nan::Set(target, Nan::New("colorSpace").ToLocalChecked(), Nan::New(ColorSpace)->GetFunction()); + Nan::Set(target, Nan::New("gray2rgb").ToLocalChecked(), Nan::New(Gray2RGB)->GetFunction()); + Nan::Set(target, Nan::New("rgb2gray").ToLocalChecked(), Nan::New(RGB2Gray)->GetFunction()); + Nan::Set(target, Nan::New("hsv2rgb").ToLocalChecked(), Nan::New(HSV2RGB)->GetFunction()); + Nan::Set(target, Nan::New("rgb2hsv").ToLocalChecked(), Nan::New(RGB2HSV)->GetFunction()); + Nan::Set(target, Nan::New("regions").ToLocalChecked(), Nan::New(Regions)->GetFunction()); + Nan::Set(target, Nan::New("bilateral").ToLocalChecked(), Nan::New(Bilateral)->GetFunction()); + Nan::Set(target, Nan::New("maxfilt").ToLocalChecked(), Nan::New(MaxFilt)->GetFunction()); + Nan::Set(target, Nan::New("maxFilt").ToLocalChecked(), Nan::New(MaxFilt)->GetFunction()); + Nan::Set(target, Nan::New("minfilt").ToLocalChecked(), Nan::New(MinFilt)->GetFunction()); + Nan::Set(target, Nan::New("minFilt").ToLocalChecked(), Nan::New(MinFilt)->GetFunction()); + Nan::Set(target, Nan::New("medfilt").ToLocalChecked(), Nan::New(MedFilt)->GetFunction()); + Nan::Set(target, Nan::New("medFilt").ToLocalChecked(), Nan::New(MedFilt)->GetFunction()); + Nan::Set(target, Nan::New("meanShift").ToLocalChecked(), Nan::New(MeanShift)->GetFunction()); + Nan::Set(target, Nan::New("sobel").ToLocalChecked(), Nan::New(Sobel)->GetFunction()); + Nan::Set(target, Nan::New("histEqual").ToLocalChecked(), Nan::New(HistEqual)->GetFunction()); + Nan::Set(target, Nan::New("histogram").ToLocalChecked(), Nan::New(Histogram)->GetFunction()); + Nan::Set(target, Nan::New("resize").ToLocalChecked(), Nan::New(Resize)->GetFunction()); + Nan::Set(target, Nan::New("rotate").ToLocalChecked(), Nan::New(Rotate)->GetFunction()); + Nan::Set(target, Nan::New("scale").ToLocalChecked(), Nan::New(Scale)->GetFunction()); + Nan::Set(target, Nan::New("skew").ToLocalChecked(), Nan::New(Skew)->GetFunction()); + Nan::Set(target, Nan::New("transform").ToLocalChecked(), Nan::New(Transform)->GetFunction()); + Nan::Set(target, Nan::New("translate").ToLocalChecked(), Nan::New(Translate)->GetFunction()); + Nan::Set(target, Nan::New("dilate").ToLocalChecked(), Nan::New(Dilate)->GetFunction()); + Nan::Set(target, Nan::New("dilate3").ToLocalChecked(), Nan::New(Dilate3)->GetFunction()); + Nan::Set(target, Nan::New("erode").ToLocalChecked(), Nan::New(Erode)->GetFunction()); + Nan::Set(target, Nan::New("erode3").ToLocalChecked(), Nan::New(Erode3)->GetFunction()); + Nan::Set(target, Nan::New("gaussianKernel").ToLocalChecked(), Nan::New(GaussianKernel)->GetFunction()); } diff --git a/src/imageprocessing.h b/src/imageprocessing.h index 694a401..4c88c96 100644 --- a/src/imageprocessing.h +++ b/src/imageprocessing.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitImageProcessing(v8::Handle exports); +NAN_MODULE_INIT(InitImageProcessing); #endif // ARRAYFIRE_JS_IMAGEPROCESSING_H diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index be35127..644c601 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -43,52 +43,52 @@ using namespace node; NAN_METHOD(Dot) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matProp optLhs = AF_MAT_NONE; af::matProp optRhs = AF_MAT_NONE; - if (args.Length() > 2) optLhs = (af::matProp)args[2]->Uint32Value(); - if (args.Length() > 3) optRhs = (af::matProp)args[3]->Uint32Value(); + if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); + if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::dot(*pArray1, *pArray2, optLhs, optRhs))); + info.GetReturnValue().Set(ArrayWrapper::New(af::dot(*pArray1, *pArray2, optLhs, optRhs))); } ARRAYFIRE_CATCH; } NAN_METHOD(MatMul) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); - auto pArray3 = (args.Length() > 2) ? ArrayWrapper::TryGetArrayAt(args, 2) : nullptr; + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray3 = (info.Length() > 2) ? ArrayWrapper::TryGetArrayAt(info, 2) : nullptr; if (pArray3 == nullptr) { af::matProp optLhs = AF_MAT_NONE; af::matProp optRhs = AF_MAT_NONE; - if (args.Length() > 2) optLhs = (af::matProp)args[2]->Uint32Value(); - if (args.Length() > 3) optRhs = (af::matProp)args[3]->Uint32Value(); + if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); + if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, optLhs, optRhs))); + info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, optLhs, optRhs))); } else { - auto pArray4 = (args.Length() > 3) ? ArrayWrapper::TryGetArrayAt(args, 3) : nullptr; + auto pArray4 = (info.Length() > 3) ? ArrayWrapper::TryGetArrayAt(info, 3) : nullptr; if (pArray4 == nullptr) { Guard(); - NanReturnValue(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3))); + info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3))); } else { Guard(); - NanReturnValue(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3, *pArray4))); + info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3, *pArray4))); } } } @@ -105,46 +105,46 @@ ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) NAN_METHOD(Solve) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matProp options = AF_MAT_NONE; - if (args.Length() > 2) options = (af::matProp)args[2]->Uint32Value(); + if (info.Length() > 2) options = (af::matProp)info[2]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); + info.GetReturnValue().Set(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(SolveLU) { - NanScope(); + try { ARGS_LEN(3); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); - auto pArray3 = ArrayWrapper::GetArrayAt(args, 2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::matProp options = AF_MAT_NONE; - if (args.Length() > 3) options = (af::matProp)args[3]->Uint32Value(); + if (info.Length() > 3) options = (af::matProp)info[3]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); + info.GetReturnValue().Set(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(Cholesky) { - NanScope(); + try { ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto array = *ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; - if (args.Length() > 1) isUpper = args[1]->BooleanValue(); + if (info.Length() > 1) isUpper = info[1]->BooleanValue(); typedef pair ResultT; typedef Worker WorkerT; auto exec = [=]() @@ -156,161 +156,162 @@ NAN_METHOD(Cholesky) }; auto conv = [=](WorkerT* w, ResultT v) { - auto result = NanNew(); - result->Set(NanNew(Symbols::Result), ArrayWrapper::New(v.first)); - result->Set(NanNew(Symbols::FailedAtRank), NanNew(v.second)); - return result; + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); + result->Set(Nan::New(Symbols::FailedAtRank), Nan::New(v.second)); + return scope.Escape(result); }; - NanAsyncQueueWorker(new WorkerT(GetCallback(args), move(exec), move(conv))); - NanReturnUndefined(); + Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } NAN_METHOD(CholeskyInPlace) { - NanScope(); + try { ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto array = *ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; - if (args.Length() > 1) isUpper = args[1]->BooleanValue(); - NanAsyncQueueWorker(new Worker(GetCallback(args), [=]() mutable { Guard(); return af::choleskyInPlace(array, isUpper); })); - NanReturnUndefined(); + if (info.Length() > 1) isUpper = info[1]->BooleanValue(); + Nan::AsyncQueueWorker(new Worker(GetCallback(info), [=]() mutable { Guard(); return af::choleskyInPlace(array, isUpper); })); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } NAN_METHOD(LuPacked) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; - if (args.Length() > 1) isLapackPiv = args[1]->BooleanValue(); + if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); Guard(); af::array out, pivot; af::lu(out, pivot, (const af::array&)*pArray, isLapackPiv); - auto result = NanNew(); - result->Set(NanNew(Symbols::Result), ArrayWrapper::New(out)); - result->Set(NanNew(Symbols::Pivot), ArrayWrapper::New(pivot)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(Lu) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); Guard(); af::array lower, upper, pivot; af::lu(lower, upper, pivot, *pArray); - auto result = NanNew(); - result->Set(NanNew(Symbols::Lower), ArrayWrapper::New(lower)); - result->Set(NanNew(Symbols::Upper), ArrayWrapper::New(upper)); - result->Set(NanNew(Symbols::Pivot), ArrayWrapper::New(pivot)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Lower), ArrayWrapper::New(lower)); + result->Set(Nan::New(Symbols::Upper), ArrayWrapper::New(upper)); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(LuInPlace) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; - if (args.Length() > 1) isLapackPiv = args[1]->BooleanValue(); + if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); Guard(); af::array pivot; af::luInPlace(pivot, *pArray, isLapackPiv); - NanReturnValue(ArrayWrapper::New(pivot)); + info.GetReturnValue().Set(ArrayWrapper::New(pivot)); } ARRAYFIRE_CATCH; } NAN_METHOD(QrPacked) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); Guard(); af::array out, tau; af::qr(out, tau, *pArray); - auto result = NanNew(); - result->Set(NanNew(Symbols::Result), ArrayWrapper::New(out)); - result->Set(NanNew(Symbols::Tau), ArrayWrapper::New(tau)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(Qr) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); Guard(); af::array q, r, tau; af::qr(q, r, tau, *pArray); - auto result = NanNew(); - result->Set(NanNew(Symbols::Q), ArrayWrapper::New(q)); - result->Set(NanNew(Symbols::R), ArrayWrapper::New(r)); - result->Set(NanNew(Symbols::Tau), ArrayWrapper::New(tau)); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Q), ArrayWrapper::New(q)); + result->Set(Nan::New(Symbols::R), ArrayWrapper::New(r)); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(QrInPlace) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); Guard(); af::array tau; af::qrInPlace(tau, *pArray); - NanReturnValue(ArrayWrapper::New(tau)); + info.GetReturnValue().Set(ArrayWrapper::New(tau)); } ARRAYFIRE_CATCH; } NAN_METHOD(Det) { - NanScope(); + try { ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto array = *ArrayWrapper::GetArrayAt(info, 0); if (NeedsDouble(array)) { auto exec = [=]() { Guard(); return af::det(array); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } else { auto exec = [=]() { Guard(); return af::det(array); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } } ARRAYFIRE_CATCH @@ -318,80 +319,82 @@ NAN_METHOD(Det) NAN_METHOD(Inverse) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::matProp options = AF_MAT_NONE; - if (args.Length() > 1) options = (af::matProp)args[1]->Uint32Value(); + if (info.Length() > 1) options = (af::matProp)info[1]->Uint32Value(); Guard(); - NanReturnValue(ArrayWrapper::New(af::inverse(*pArray, options))); + info.GetReturnValue().Set(ArrayWrapper::New(af::inverse(*pArray, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(Norm) { - NanScope(); + try { ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto array = *ArrayWrapper::GetArrayAt(info, 0); af::normType type = AF_NORM_EUCLID; double p = 1; double q = 1; - if (args.Length() > 1) type = (af::normType)args[1]->Uint32Value(); - if (args.Length() > 2) p = args[2]->NumberValue(); - if (args.Length() > 3) q = args[3]->NumberValue(); + if (info.Length() > 1) type = (af::normType)info[1]->Uint32Value(); + if (info.Length() > 2) p = info[2]->NumberValue(); + if (info.Length() > 3) q = info[3]->NumberValue(); auto exec = [=]() { Guard(); return af::norm(array, type, p, q); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } NAN_METHOD(Rank) { - NanScope(); + try { ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto array = *ArrayWrapper::GetArrayAt(info, 0); double tol = 1E-5; - if (args.Length() > 1) tol = args[1]->NumberValue(); + if (info.Length() > 1) tol = info[1]->NumberValue(); auto exec = [=]() { Guard(); return af::rank(array, tol); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } -void InitLinearAlgebra(v8::Handle exports) +NAN_MODULE_INIT(InitLinearAlgebra) { - exports->Set(NanNew("dot"), NanNew(Dot)->GetFunction()); - exports->Set(NanNew("matMul"), NanNew(MatMul)->GetFunction()); - exports->Set(NanNew("matMulNT"), NanNew(MatMulNT)->GetFunction()); - exports->Set(NanNew("matMulTN"), NanNew(MatMulTN)->GetFunction()); - exports->Set(NanNew("matMulTT"), NanNew(MatMulTT)->GetFunction()); - exports->Set(NanNew("transpose"), NanNew(Transpose)->GetFunction()); - exports->Set(NanNew("transposeInPlace"), NanNew(TransposeInPlace)->GetFunction()); - exports->Set(NanNew("solve"), NanNew(Solve)->GetFunction()); - exports->Set(NanNew("solveLU"), NanNew(SolveLU)->GetFunction()); - exports->Set(NanNew("cholesky"), NanNew(Cholesky)->GetFunction()); - exports->Set(NanNew("choleskyInPlace"), NanNew(CholeskyInPlace)->GetFunction()); - exports->Set(NanNew("luPacked"), NanNew(LuPacked)->GetFunction()); - exports->Set(NanNew("lu"), NanNew(Lu)->GetFunction()); - exports->Set(NanNew("luInPlace"), NanNew(LuInPlace)->GetFunction()); - exports->Set(NanNew("qrPacked"), NanNew(QrPacked)->GetFunction()); - exports->Set(NanNew("qr"), NanNew(Qr)->GetFunction()); - exports->Set(NanNew("qrInPlace"), NanNew(QrInPlace)->GetFunction()); - exports->Set(NanNew("det"), NanNew(Det)->GetFunction()); - exports->Set(NanNew("inverse"), NanNew(Inverse)->GetFunction()); - exports->Set(NanNew("norm"), NanNew(Norm)->GetFunction()); - exports->Set(NanNew("rank"), NanNew(Rank)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("dot").ToLocalChecked(), Nan::New(Dot)->GetFunction()); + Nan::Set(target, Nan::New("matMul").ToLocalChecked(), Nan::New(MatMul)->GetFunction()); + Nan::Set(target, Nan::New("matMulNT").ToLocalChecked(), Nan::New(MatMulNT)->GetFunction()); + Nan::Set(target, Nan::New("matMulTN").ToLocalChecked(), Nan::New(MatMulTN)->GetFunction()); + Nan::Set(target, Nan::New("matMulTT").ToLocalChecked(), Nan::New(MatMulTT)->GetFunction()); + Nan::Set(target, Nan::New("transpose").ToLocalChecked(), Nan::New(Transpose)->GetFunction()); + Nan::Set(target, Nan::New("transposeInPlace").ToLocalChecked(), Nan::New(TransposeInPlace)->GetFunction()); + Nan::Set(target, Nan::New("solve").ToLocalChecked(), Nan::New(Solve)->GetFunction()); + Nan::Set(target, Nan::New("solveLU").ToLocalChecked(), Nan::New(SolveLU)->GetFunction()); + Nan::Set(target, Nan::New("cholesky").ToLocalChecked(), Nan::New(Cholesky)->GetFunction()); + Nan::Set(target, Nan::New("choleskyInPlace").ToLocalChecked(), Nan::New(CholeskyInPlace)->GetFunction()); + Nan::Set(target, Nan::New("luPacked").ToLocalChecked(), Nan::New(LuPacked)->GetFunction()); + Nan::Set(target, Nan::New("lu").ToLocalChecked(), Nan::New(Lu)->GetFunction()); + Nan::Set(target, Nan::New("luInPlace").ToLocalChecked(), Nan::New(LuInPlace)->GetFunction()); + Nan::Set(target, Nan::New("qrPacked").ToLocalChecked(), Nan::New(QrPacked)->GetFunction()); + Nan::Set(target, Nan::New("qr").ToLocalChecked(), Nan::New(Qr)->GetFunction()); + Nan::Set(target, Nan::New("qrInPlace").ToLocalChecked(), Nan::New(QrInPlace)->GetFunction()); + Nan::Set(target, Nan::New("det").ToLocalChecked(), Nan::New(Det)->GetFunction()); + Nan::Set(target, Nan::New("inverse").ToLocalChecked(), Nan::New(Inverse)->GetFunction()); + Nan::Set(target, Nan::New("norm").ToLocalChecked(), Nan::New(Norm)->GetFunction()); + Nan::Set(target, Nan::New("rank").ToLocalChecked(), Nan::New(Rank)->GetFunction()); } diff --git a/src/linearalgebra.h b/src/linearalgebra.h index bc30657..0fd0ac4 100644 --- a/src/linearalgebra.h +++ b/src/linearalgebra.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitLinearAlgebra(v8::Handle exports); +NAN_MODULE_INIT(InitLinearAlgebra); #endif // ARRAYFIRE_JS_LINEARALGEBRA diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 8b58fd8..7450b37 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -99,63 +99,73 @@ ARRAYFIRE_SYNC_METHOD_ARR(Conjg, conjg) ARRAYFIRE_SYNC_METHOD_ARR(Imag, imag) ARRAYFIRE_SYNC_METHOD_ARR(Real, real) -void InitMathFunctions(v8::Handle exports) +NAN_MODULE_INIT(InitMathFunctions) { - exports->Set(NanNew("abs"), NanNew(Abs)->GetFunction()); - exports->Set(NanNew("arg"), NanNew(Arg)->GetFunction()); - exports->Set(NanNew("ceil"), NanNew(Ceil)->GetFunction()); - exports->Set(NanNew("floor"), NanNew(Floor)->GetFunction()); - exports->Set(NanNew("hypot"), NanNew(Hypot)->GetFunction()); - exports->Set(NanNew("max"), NanNew(Max)->GetFunction()); - exports->Set(NanNew("min"), NanNew(Min)->GetFunction()); - exports->Set(NanNew("round"), NanNew(Round)->GetFunction()); - exports->Set(NanNew("sign"), NanNew(Sign)->GetFunction()); - exports->Set(NanNew("trunc"), NanNew(Trunc)->GetFunction()); - exports->Set(NanNew("rem"), NanNew(Rem)->GetFunction()); - - exports->Set(NanNew("acos"), NanNew(ACos)->GetFunction()); - exports->Set(NanNew("aCos"), NanNew(ACos)->GetFunction()); - exports->Set(NanNew("asin"), NanNew(ASin)->GetFunction()); - exports->Set(NanNew("aSin"), NanNew(ASin)->GetFunction()); - exports->Set(NanNew("atan"), NanNew(ATan)->GetFunction()); - exports->Set(NanNew("aTan"), NanNew(ATan)->GetFunction()); - exports->Set(NanNew("atan2"), NanNew(ATan2)->GetFunction()); - exports->Set(NanNew("aTan2"), NanNew(ATan2)->GetFunction()); - exports->Set(NanNew("cos"), NanNew(Cos)->GetFunction()); - exports->Set(NanNew("sin"), NanNew(Sin)->GetFunction()); - exports->Set(NanNew("tan"), NanNew(Tan)->GetFunction()); - - exports->Set(NanNew("cbrt"), NanNew(Cbrt)->GetFunction()); - exports->Set(NanNew("erf"), NanNew(Erf)->GetFunction()); - exports->Set(NanNew("erfc"), NanNew(Erfc)->GetFunction()); - exports->Set(NanNew("exp"), NanNew(Exp)->GetFunction()); - exports->Set(NanNew("expm1"), NanNew(ExpM1)->GetFunction()); - exports->Set(NanNew("expM1"), NanNew(ExpM1)->GetFunction()); - exports->Set(NanNew("factorial"), NanNew(Factorial)->GetFunction()); - exports->Set(NanNew("lgamma"), NanNew(LGamma)->GetFunction()); - exports->Set(NanNew("lGamma"), NanNew(LGamma)->GetFunction()); - exports->Set(NanNew("tgamma"), NanNew(TGamma)->GetFunction()); - exports->Set(NanNew("tGamma"), NanNew(TGamma)->GetFunction()); - exports->Set(NanNew("log"), NanNew(Log)->GetFunction()); - exports->Set(NanNew("log10"), NanNew(Log10)->GetFunction()); - exports->Set(NanNew("log1p"), NanNew(Log1P)->GetFunction()); - exports->Set(NanNew("log1P"), NanNew(Log1P)->GetFunction()); - exports->Set(NanNew("pow"), NanNew(Pow)->GetFunction()); - exports->Set(NanNew("pow2"), NanNew(Pow2)->GetFunction()); - exports->Set(NanNew("root"), NanNew(Root)->GetFunction()); - exports->Set(NanNew("sqrt"), NanNew(Sqrt)->GetFunction()); - - exports->Set(NanNew("acosh"), NanNew(ACosH)->GetFunction()); - exports->Set(NanNew("aCosH"), NanNew(ACosH)->GetFunction()); - exports->Set(NanNew("asinh"), NanNew(ASinH)->GetFunction()); - exports->Set(NanNew("aSinH"), NanNew(ASinH)->GetFunction()); - exports->Set(NanNew("atanh"), NanNew(ATanH)->GetFunction()); - exports->Set(NanNew("aTanH"), NanNew(ATanH)->GetFunction()); - - exports->Set(NanNew("complex"), NanNew(Complex)->GetFunction()); - exports->Set(NanNew("conjg"), NanNew(Conjg)->GetFunction()); - exports->Set(NanNew("imag"), NanNew(Imag)->GetFunction()); - exports->Set(NanNew("real"), NanNew(Real)->GetFunction()); - - exports->Set(NanNew("sigmoid"), NanNew(Sigmoid)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("abs").ToLocalChecked(), + Nan::New(Abs)->GetFunction()); + + Nan::Set(target, Nan::New("arg").ToLocalChecked(), + Nan::New(Arg)->GetFunction()); + + Nan::Set(target, Nan::New("ceil").ToLocalChecked(), + Nan::New(Ceil)->GetFunction()); + + Nan::Set(target, Nan::New("floor").ToLocalChecked(), + Nan::New(Floor)->GetFunction()); + + Nan::Set(target, Nan::New("hypot").ToLocalChecked(), Nan::New(Hypot)->GetFunction()); + Nan::Set(target, Nan::New("max").ToLocalChecked(), Nan::New(Max)->GetFunction()); + Nan::Set(target, Nan::New("min").ToLocalChecked(), Nan::New(Min)->GetFunction()); + Nan::Set(target, Nan::New("round").ToLocalChecked(), Nan::New(Round)->GetFunction()); + Nan::Set(target, Nan::New("sign").ToLocalChecked(), Nan::New(Sign)->GetFunction()); + Nan::Set(target, Nan::New("trunc").ToLocalChecked(), Nan::New(Trunc)->GetFunction()); + Nan::Set(target, Nan::New("rem").ToLocalChecked(), Nan::New(Rem)->GetFunction()); + + Nan::Set(target, Nan::New("acos").ToLocalChecked(), Nan::New(ACos)->GetFunction()); + Nan::Set(target, Nan::New("aCos").ToLocalChecked(), Nan::New(ACos)->GetFunction()); + Nan::Set(target, Nan::New("asin").ToLocalChecked(), Nan::New(ASin)->GetFunction()); + Nan::Set(target, Nan::New("aSin").ToLocalChecked(), Nan::New(ASin)->GetFunction()); + Nan::Set(target, Nan::New("atan").ToLocalChecked(), Nan::New(ATan)->GetFunction()); + Nan::Set(target, Nan::New("aTan").ToLocalChecked(), Nan::New(ATan)->GetFunction()); + Nan::Set(target, Nan::New("atan2").ToLocalChecked(), Nan::New(ATan2)->GetFunction()); + Nan::Set(target, Nan::New("aTan2").ToLocalChecked(), Nan::New(ATan2)->GetFunction()); + Nan::Set(target, Nan::New("cos").ToLocalChecked(), Nan::New(Cos)->GetFunction()); + Nan::Set(target, Nan::New("sin").ToLocalChecked(), Nan::New(Sin)->GetFunction()); + Nan::Set(target, Nan::New("tan").ToLocalChecked(), Nan::New(Tan)->GetFunction()); + + Nan::Set(target, Nan::New("cbrt").ToLocalChecked(), Nan::New(Cbrt)->GetFunction()); + Nan::Set(target, Nan::New("erf").ToLocalChecked(), Nan::New(Erf)->GetFunction()); + Nan::Set(target, Nan::New("erfc").ToLocalChecked(), Nan::New(Erfc)->GetFunction()); + Nan::Set(target, Nan::New("exp").ToLocalChecked(), Nan::New(Exp)->GetFunction()); + Nan::Set(target, Nan::New("expm1").ToLocalChecked(), Nan::New(ExpM1)->GetFunction()); + Nan::Set(target, Nan::New("expM1").ToLocalChecked(), Nan::New(ExpM1)->GetFunction()); + Nan::Set(target, Nan::New("factorial").ToLocalChecked(), Nan::New(Factorial)->GetFunction()); + Nan::Set(target, Nan::New("lgamma").ToLocalChecked(), Nan::New(LGamma)->GetFunction()); + Nan::Set(target, Nan::New("lGamma").ToLocalChecked(), Nan::New(LGamma)->GetFunction()); + Nan::Set(target, Nan::New("tgamma").ToLocalChecked(), Nan::New(TGamma)->GetFunction()); + Nan::Set(target, Nan::New("tGamma").ToLocalChecked(), Nan::New(TGamma)->GetFunction()); + Nan::Set(target, Nan::New("log").ToLocalChecked(), Nan::New(Log)->GetFunction()); + Nan::Set(target, Nan::New("log10").ToLocalChecked(), Nan::New(Log10)->GetFunction()); + Nan::Set(target, Nan::New("log1p").ToLocalChecked(), Nan::New(Log1P)->GetFunction()); + Nan::Set(target, Nan::New("log1P").ToLocalChecked(), Nan::New(Log1P)->GetFunction()); + Nan::Set(target, Nan::New("pow").ToLocalChecked(), Nan::New(Pow)->GetFunction()); + Nan::Set(target, Nan::New("pow2").ToLocalChecked(), Nan::New(Pow2)->GetFunction()); + Nan::Set(target, Nan::New("root").ToLocalChecked(), Nan::New(Root)->GetFunction()); + Nan::Set(target, Nan::New("sqrt").ToLocalChecked(), Nan::New(Sqrt)->GetFunction()); + + Nan::Set(target, Nan::New("acosh").ToLocalChecked(), Nan::New(ACosH)->GetFunction()); + Nan::Set(target, Nan::New("aCosH").ToLocalChecked(), Nan::New(ACosH)->GetFunction()); + Nan::Set(target, Nan::New("asinh").ToLocalChecked(), Nan::New(ASinH)->GetFunction()); + Nan::Set(target, Nan::New("aSinH").ToLocalChecked(), Nan::New(ASinH)->GetFunction()); + Nan::Set(target, Nan::New("atanh").ToLocalChecked(), Nan::New(ATanH)->GetFunction()); + Nan::Set(target, Nan::New("aTanH").ToLocalChecked(), Nan::New(ATanH)->GetFunction()); + + Nan::Set(target, Nan::New("complex").ToLocalChecked(), Nan::New(Complex)->GetFunction()); + Nan::Set(target, Nan::New("conjg").ToLocalChecked(), Nan::New(Conjg)->GetFunction()); + Nan::Set(target, Nan::New("imag").ToLocalChecked(), Nan::New(Imag)->GetFunction()); + Nan::Set(target, Nan::New("real").ToLocalChecked(), Nan::New(Real)->GetFunction()); + + Nan::Set(target, Nan::New("sigmoid").ToLocalChecked(), Nan::New(Sigmoid)->GetFunction()); } diff --git a/src/mathfunctions.h b/src/mathfunctions.h index 1893759..efc6709 100644 --- a/src/mathfunctions.h +++ b/src/mathfunctions.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitMathFunctions(v8::Handle exports); +NAN_MODULE_INIT(InitMathFunctions); #endif // METHFUNCTIONS diff --git a/src/moveandreorderarray.cpp b/src/moveandreorderarray.cpp index cd8df06..9186d4a 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -42,17 +42,17 @@ using namespace node; NAN_METHOD(Join) { - NanScope(); + try { ARGS_LEN(3); - af::dtype dim = GetDTypeInfo(args[0]).first; - auto pArray1 = ArrayWrapper::GetArrayAt(args, 1); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 2); + af::dtype dim = GetDTypeInfo(info[0]).first; + auto pArray1 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 2); Guard(); - NanReturnValue(ArrayWrapper::New(af::join(dim, *pArray1, *pArray2)));; + info.GetReturnValue().Set(ArrayWrapper::New(af::join(dim, *pArray1, *pArray2)));; } ARRAYFIRE_CATCH } @@ -69,28 +69,45 @@ ARRAYFIRE_SYNC_METHOD_ARR(Flat, flat) NAN_METHOD(Flip) { - NanScope(); + try { ARGS_LEN(2); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - af::dtype dim = GetDTypeInfo(args[1]).first; + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + af::dtype dim = GetDTypeInfo(info[1]).first; Guard(); - NanReturnValue(ArrayWrapper::New(af::flip(*pArray, dim)));; + info.GetReturnValue().Set(ArrayWrapper::New(af::flip(*pArray, dim)));; } ARRAYFIRE_CATCH } -void InitMoveAndReorderArray(v8::Handle exports) +NAN_MODULE_INIT(InitMoveAndReorderArray) { - exports->Set(NanNew("join"), NanNew(Join)->GetFunction()); - exports->Set(NanNew("tile"), NanNew(Tile)->GetFunction()); - exports->Set(NanNew("reorder"), NanNew(Reorder)->GetFunction()); - exports->Set(NanNew("shift"), NanNew(Shift)->GetFunction()); - exports->Set(NanNew("moddims"), NanNew(ModDims)->GetFunction()); - exports->Set(NanNew("modDims"), NanNew(ModDims)->GetFunction()); - exports->Set(NanNew("flat"), NanNew(Flat)->GetFunction()); - exports->Set(NanNew("flip"), NanNew(Flip)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("join").ToLocalChecked(), + Nan::New(Join)->GetFunction()); + + Nan::Set(target, Nan::New("tile").ToLocalChecked(), + Nan::New(Tile)->GetFunction()); + + Nan::Set(target, Nan::New("reorder").ToLocalChecked(), + Nan::New(Reorder)->GetFunction()); + + Nan::Set(target, Nan::New("shift").ToLocalChecked(), + Nan::New(Shift)->GetFunction()); + + Nan::Set(target, Nan::New("moddims").ToLocalChecked(), + Nan::New(ModDims)->GetFunction()); + + Nan::Set(target, Nan::New("modDims").ToLocalChecked(), + Nan::New(ModDims)->GetFunction()); + + Nan::Set(target, Nan::New("flat").ToLocalChecked(), + Nan::New(Flat)->GetFunction()); + + Nan::Set(target, Nan::New("flip").ToLocalChecked(), + Nan::New(Flip)->GetFunction()); } diff --git a/src/moveandreorderarray.h b/src/moveandreorderarray.h index 7f3187f..333c500 100644 --- a/src/moveandreorderarray.h +++ b/src/moveandreorderarray.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitMoveAndReorderArray(v8::Handle exports); +NAN_MODULE_INIT(InitMoveAndReorderArray); #endif // ARRAYFIRE_MOVEANDREORDERARRAY_H diff --git a/src/signalprocessing.cpp b/src/signalprocessing.cpp index d0f9d2f..a21b6c2 100644 --- a/src/signalprocessing.cpp +++ b/src/signalprocessing.cpp @@ -42,15 +42,15 @@ using namespace node; NAN_METHOD(ConvolveSeparable) { - NanScope(); + try { ARGS_LEN(3); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); - auto pArray3 = ArrayWrapper::GetArrayAt(args, 2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::convMode mode = AF_CONV_DEFAULT; - if (args.Length() > 3) mode = (af::convMode)args[3]->Uint32Value(); + if (info.Length() > 3) mode = (af::convMode)info[3]->Uint32Value(); Guard(); ArrayWrapper::New(af::convolve(*pArray1, *pArray2, *pArray3, mode)); } @@ -60,16 +60,16 @@ NAN_METHOD(ConvolveSeparable) #define ARRAYFIRE_CONVOLVE(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0);\ - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1);\ + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1);\ af::convMode mode = AF_CONV_DEFAULT;\ af::convDomain domain = AF_CONV_AUTO;\ - if (args.Length() > 2) mode = (af::convMode)args[2]->Uint32Value();\ - if (args.Length() > 3) domain = (af::convDomain)args[3]->Uint32Value();\ + if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ + if (info.Length() > 3) domain = (af::convDomain)info[3]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode, domain));\ }\ @@ -85,14 +85,14 @@ ARRAYFIRE_CONVOLVE(Convolve3, convolve3) #define ARRAYFIRE_CONVOLVE(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0);\ - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1);\ + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1);\ af::convMode mode = AF_CONV_DEFAULT;\ - if (args.Length() > 2) mode = (af::convMode)args[2]->Uint32Value();\ + if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode));\ }\ @@ -107,14 +107,14 @@ ARRAYFIRE_CONVOLVE(FFTConvolve3, fftConvolve3) #define ARRAY_FIRE_FFTNORM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ - double factor = args[1]->NumberValue();\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + double factor = info[1]->NumberValue();\ dim_t odim0 = 0;\ - if (args.Length() > 2) odim0 = args[2]->Uint32Value();\ + if (info.Length() > 2) odim0 = info[2]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, factor, odim0));\ }\ @@ -128,13 +128,13 @@ ARRAY_FIRE_FFTNORM(IFFTNorm, ifftNorm) #define ARRAY_FIRE_FFT(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ dim_t odim0 = 0;\ - if (args.Length() > 1) odim0 = args[1]->Uint32Value();\ + if (info.Length() > 1) odim0 = info[1]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, odim0));\ }\ @@ -148,25 +148,25 @@ ARRAY_FIRE_FFT(IFFT, ifft) #define ARRAYFIRE_DFT(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(1);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ - if (args.Length() == 1)\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() == 1)\ {\ Guard();\ ArrayWrapper::New(af::f(*pArray));\ }\ - else if (args.Length() == 2)\ + else if (info.Length() == 2)\ {\ Guard();\ - ArrayWrapper::New(af::f(*pArray, ToDim4(args[1])));\ + ArrayWrapper::New(af::f(*pArray, ToDim4(info[1])));\ }\ - else if (args.Length() == 3)\ + else if (info.Length() == 3)\ {\ Guard();\ - ArrayWrapper::New(af::f(*pArray, args[1]->NumberValue(), ToDim4(args[2])));\ + ArrayWrapper::New(af::f(*pArray, info[1]->NumberValue(), ToDim4(info[2])));\ }\ else \ {\ @@ -183,15 +183,15 @@ ARRAYFIRE_DFT(IDFT, idft) #define ARRAYFIRE_FFT2(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(1);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ dim_t dim0 = 0;\ dim_t dim1 = 0;\ - if (args.Length() > 1) dim0 = args[1]->Uint32Value();\ - if (args.Length() > 2) dim1 = args[2]->Uint32Value();\ + if (info.Length() > 1) dim0 = info[1]->Uint32Value();\ + if (info.Length() > 2) dim1 = info[2]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, dim0, dim1));\ }\ @@ -205,17 +205,17 @@ ARRAYFIRE_FFT2(IFFT2, ifft2) #define ARRAYFIRE_FFT3(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(1);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ dim_t dim0 = 0;\ dim_t dim1 = 0;\ dim_t dim2 = 0;\ - if (args.Length() > 1) dim0 = args[1]->Uint32Value();\ - if (args.Length() > 2) dim1 = args[2]->Uint32Value();\ - if (args.Length() > 3) dim2 = args[3]->Uint32Value();\ + if (info.Length() > 1) dim0 = info[1]->Uint32Value();\ + if (info.Length() > 2) dim1 = info[2]->Uint32Value();\ + if (info.Length() > 3) dim2 = info[3]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, dim0, dim1, dim2));\ }\ @@ -229,16 +229,16 @@ ARRAYFIRE_FFT3(IFFT3, ifft3) #define ARRAYFIRE_FFT2NORM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ - double factor = args[1]->NumberValue();\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + double factor = info[1]->NumberValue();\ dim_t dim0 = 0;\ dim_t dim1 = 0;\ - if (args.Length() > 2) dim0 = args[2]->Uint32Value();\ - if (args.Length() > 3) dim1 = args[3]->Uint32Value();\ + if (info.Length() > 2) dim0 = info[2]->Uint32Value();\ + if (info.Length() > 3) dim1 = info[3]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1));\ }\ @@ -252,18 +252,18 @@ ARRAYFIRE_FFT2NORM(IFFT2Norm, ifft2Norm) #define ARRAYFIRE_FFT3NORM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ ARGS_LEN(2);\ - auto pArray = ArrayWrapper::GetArrayAt(args, 0);\ - double factor = args[1]->NumberValue();\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + double factor = info[1]->NumberValue();\ dim_t dim0 = 0;\ dim_t dim1 = 0;\ dim_t dim2 = 0;\ - if (args.Length() > 2) dim0 = args[2]->Uint32Value();\ - if (args.Length() > 3) dim1 = args[3]->Uint32Value();\ - if (args.Length() > 4) dim2 = args[4]->Uint32Value();\ + if (info.Length() > 2) dim0 = info[2]->Uint32Value();\ + if (info.Length() > 3) dim1 = info[3]->Uint32Value();\ + if (info.Length() > 4) dim2 = info[4]->Uint32Value();\ Guard();\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1, dim2));\ }\ @@ -280,16 +280,16 @@ ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(IIR, iir) NAN_METHOD(Approx1) { - NanScope(); + try { ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::interpType method = AF_INTERP_LINEAR; float offGrid = 0.0f; - if (args.Length() > 2) method = (af::interpType)args[2]->Uint32Value(); - if (args.Length() > 3) offGrid = args[3]->NumberValue(); + if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); + if (info.Length() > 3) offGrid = info[3]->NumberValue(); Guard(); ArrayWrapper::New(af::approx1(*pArray1, *pArray2, method, offGrid)); } @@ -298,49 +298,51 @@ NAN_METHOD(Approx1) NAN_METHOD(Approx2) { - NanScope(); + try { ARGS_LEN(3); - auto pArray1 = ArrayWrapper::GetArrayAt(args, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(args, 1); - auto pArray3 = ArrayWrapper::GetArrayAt(args, 2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::interpType method = AF_INTERP_LINEAR; float offGrid = 0.0f; - if (args.Length() > 3) method = (af::interpType)args[3]->Uint32Value(); - if (args.Length() > 4) offGrid = args[4]->NumberValue(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); + if (info.Length() > 4) offGrid = info[4]->NumberValue(); Guard(); ArrayWrapper::New(af::approx2(*pArray1, *pArray2, *pArray3, method, offGrid)); } ARRAYFIRE_CATCH; } -void InitSignalProcessing(v8::Handle exports) +NAN_MODULE_INIT(InitSignalProcessing) { - exports->Set(NanNew("convolveSeparable"), NanNew(ConvolveSeparable)->GetFunction()); - exports->Set(NanNew("convolve"), NanNew(Convolve)->GetFunction()); - exports->Set(NanNew("convolve1"), NanNew(Convolve1)->GetFunction()); - exports->Set(NanNew("convolve2"), NanNew(Convolve2)->GetFunction()); - exports->Set(NanNew("convolve3"), NanNew(Convolve3)->GetFunction()); - exports->Set(NanNew("fftConvolve"), NanNew(FFTConvolve)->GetFunction()); - exports->Set(NanNew("fftConvolve2"), NanNew(FFTConvolve2)->GetFunction()); - exports->Set(NanNew("fftConvolve3"), NanNew(FFTConvolve3)->GetFunction()); - exports->Set(NanNew("fftNorm"), NanNew(FFTNorm)->GetFunction()); - exports->Set(NanNew("iFFTNorm"), NanNew(IFFTNorm)->GetFunction()); - exports->Set(NanNew("fft"), NanNew(FFT)->GetFunction()); - exports->Set(NanNew("iFFT"), NanNew(IFFT)->GetFunction()); - exports->Set(NanNew("dFT"), NanNew(DFT)->GetFunction()); - exports->Set(NanNew("iDFT"), NanNew(IDFT)->GetFunction()); - exports->Set(NanNew("fft2"), NanNew(FFT2)->GetFunction()); - exports->Set(NanNew("iFFT2"), NanNew(IFFT2)->GetFunction()); - exports->Set(NanNew("fft3"), NanNew(FFT3)->GetFunction()); - exports->Set(NanNew("iFFT3"), NanNew(IFFT3)->GetFunction()); - exports->Set(NanNew("fft2Norm"), NanNew(FFT2Norm)->GetFunction()); - exports->Set(NanNew("iFFT2Norm"), NanNew(IFFT2Norm)->GetFunction()); - exports->Set(NanNew("fft3Norm"), NanNew(FFT3Norm)->GetFunction()); - exports->Set(NanNew("iFFT3Norm"), NanNew(IFFT3Norm)->GetFunction()); - exports->Set(NanNew("fir"), NanNew(FIR)->GetFunction()); - exports->Set(NanNew("iir"), NanNew(IIR)->GetFunction()); - exports->Set(NanNew("approx1"), NanNew(Approx1)->GetFunction()); - exports->Set(NanNew("approx2"), NanNew(Approx2)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("convolveSeparable").ToLocalChecked(), Nan::New(ConvolveSeparable)->GetFunction()); + Nan::Set(target, Nan::New("convolve").ToLocalChecked(), Nan::New(Convolve)->GetFunction()); + Nan::Set(target, Nan::New("convolve1").ToLocalChecked(), Nan::New(Convolve1)->GetFunction()); + Nan::Set(target, Nan::New("convolve2").ToLocalChecked(), Nan::New(Convolve2)->GetFunction()); + Nan::Set(target, Nan::New("convolve3").ToLocalChecked(), Nan::New(Convolve3)->GetFunction()); + Nan::Set(target, Nan::New("fftConvolve").ToLocalChecked(), Nan::New(FFTConvolve)->GetFunction()); + Nan::Set(target, Nan::New("fftConvolve2").ToLocalChecked(), Nan::New(FFTConvolve2)->GetFunction()); + Nan::Set(target, Nan::New("fftConvolve3").ToLocalChecked(), Nan::New(FFTConvolve3)->GetFunction()); + Nan::Set(target, Nan::New("fftNorm").ToLocalChecked(), Nan::New(FFTNorm)->GetFunction()); + Nan::Set(target, Nan::New("iFFTNorm").ToLocalChecked(), Nan::New(IFFTNorm)->GetFunction()); + Nan::Set(target, Nan::New("fft").ToLocalChecked(), Nan::New(FFT)->GetFunction()); + Nan::Set(target, Nan::New("iFFT").ToLocalChecked(), Nan::New(IFFT)->GetFunction()); + Nan::Set(target, Nan::New("dFT").ToLocalChecked(), Nan::New(DFT)->GetFunction()); + Nan::Set(target, Nan::New("iDFT").ToLocalChecked(), Nan::New(IDFT)->GetFunction()); + Nan::Set(target, Nan::New("fft2").ToLocalChecked(), Nan::New(FFT2)->GetFunction()); + Nan::Set(target, Nan::New("iFFT2").ToLocalChecked(), Nan::New(IFFT2)->GetFunction()); + Nan::Set(target, Nan::New("fft3").ToLocalChecked(), Nan::New(FFT3)->GetFunction()); + Nan::Set(target, Nan::New("iFFT3").ToLocalChecked(), Nan::New(IFFT3)->GetFunction()); + Nan::Set(target, Nan::New("fft2Norm").ToLocalChecked(), Nan::New(FFT2Norm)->GetFunction()); + Nan::Set(target, Nan::New("iFFT2Norm").ToLocalChecked(), Nan::New(IFFT2Norm)->GetFunction()); + Nan::Set(target, Nan::New("fft3Norm").ToLocalChecked(), Nan::New(FFT3Norm)->GetFunction()); + Nan::Set(target, Nan::New("iFFT3Norm").ToLocalChecked(), Nan::New(IFFT3Norm)->GetFunction()); + Nan::Set(target, Nan::New("fir").ToLocalChecked(), Nan::New(FIR)->GetFunction()); + Nan::Set(target, Nan::New("iir").ToLocalChecked(), Nan::New(IIR)->GetFunction()); + Nan::Set(target, Nan::New("approx1").ToLocalChecked(), Nan::New(Approx1)->GetFunction()); + Nan::Set(target, Nan::New("approx2").ToLocalChecked(), Nan::New(Approx2)->GetFunction()); } diff --git a/src/signalprocessing.h b/src/signalprocessing.h index 818514b..9f5bb7d 100644 --- a/src/signalprocessing.h +++ b/src/signalprocessing.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitSignalProcessing(v8::Handle exports); +NAN_MODULE_INIT(InitSignalProcessing); #endif // ARRAYFIRE_SIGNALPROCESSING_H diff --git a/src/statistics.cpp b/src/statistics.cpp index 564525b..fc812af 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -49,33 +49,33 @@ ARRAYFIRE_ASYNC_METHOD_ALGO_V1(StDev, stdev) NAN_METHOD(Var) { - NanScope(); + try { ARGS_LEN(3); - auto array = *ArrayWrapper::GetArrayAt(args, 0); - bool biased = args[1]->BooleanValue(); - if (args.Length() > 3) + auto array = *ArrayWrapper::GetArrayAt(info, 0); + bool biased = info[1]->BooleanValue(); + if (info.Length() > 3) { - int dim = args[2]->Int32Value(); - return ArrayWrapper::NewAsync(args, [=]() { Guard(); return new af::array(af::var(array, biased, dim)); }); + int dim = info[2]->Int32Value(); + return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::var(array, biased, dim)); }); } else { if (NeedsDouble(array)) { auto exec = [=]() { Guard(); return af::var(array, biased); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } else { auto exec = [=]() { Guard(); return af::var(array, biased); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } } } @@ -86,42 +86,44 @@ ARRAYFIRE_ASYNC_METHOD_ALGO_V3(WeightedVar, var) NAN_METHOD(CorrCoef) { - NanScope(); + try { ARGS_LEN(3); - auto array1 = *ArrayWrapper::GetArrayAt(args, 0); - auto array2 = *ArrayWrapper::GetArrayAt(args, 1); + auto array1 = *ArrayWrapper::GetArrayAt(info, 0); + auto array2 = *ArrayWrapper::GetArrayAt(info, 1); if (NeedsDouble(array1)) { auto exec = [=]() { Guard(); return af::corrcoef(array1, array2); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } else { auto exec = [=]() { Guard(); return af::corrcoef(array1, array2); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } } ARRAYFIRE_CATCH } -void InitStatistics(v8::Handle exports) +NAN_MODULE_INIT(InitStatistics) { - exports->Set(NanNew("cov"), NanNew(Cov)->GetFunction()); - exports->Set(NanNew("mean"), NanNew(Mean)->GetFunction()); - exports->Set(NanNew("weightedMean"), NanNew(Mean)->GetFunction()); - exports->Set(NanNew("median"), NanNew(Median)->GetFunction()); - exports->Set(NanNew("stdev"), NanNew(StDev)->GetFunction()); - exports->Set(NanNew("stDev"), NanNew(StDev)->GetFunction()); - exports->Set(NanNew("stdDev"), NanNew(StDev)->GetFunction()); - exports->Set(NanNew("var"), NanNew(Var)->GetFunction()); - exports->Set(NanNew("weightedVar"), NanNew(WeightedVar)->GetFunction()); - exports->Set(NanNew("corrcoef"), NanNew(CorrCoef)->GetFunction()); - exports->Set(NanNew("corrCoef"), NanNew(CorrCoef)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("cov").ToLocalChecked(), Nan::New(Cov)->GetFunction()); + Nan::Set(target, Nan::New("mean").ToLocalChecked(), Nan::New(Mean)->GetFunction()); + Nan::Set(target, Nan::New("weightedMean").ToLocalChecked(), Nan::New(Mean)->GetFunction()); + Nan::Set(target, Nan::New("median").ToLocalChecked(), Nan::New(Median)->GetFunction()); + Nan::Set(target, Nan::New("stdev").ToLocalChecked(), Nan::New(StDev)->GetFunction()); + Nan::Set(target, Nan::New("stDev").ToLocalChecked(), Nan::New(StDev)->GetFunction()); + Nan::Set(target, Nan::New("stdDev").ToLocalChecked(), Nan::New(StDev)->GetFunction()); + Nan::Set(target, Nan::New("var").ToLocalChecked(), Nan::New(Var)->GetFunction()); + Nan::Set(target, Nan::New("weightedVar").ToLocalChecked(), Nan::New(WeightedVar)->GetFunction()); + Nan::Set(target, Nan::New("corrcoef").ToLocalChecked(), Nan::New(CorrCoef)->GetFunction()); + Nan::Set(target, Nan::New("corrCoef").ToLocalChecked(), Nan::New(CorrCoef)->GetFunction()); } diff --git a/src/statistics.h b/src/statistics.h index 43e7979..91551e1 100644 --- a/src/statistics.h +++ b/src/statistics.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitStatistics(v8::Handle exports); +NAN_MODULE_INIT(InitStatistics); #endif // ARRAYFIRE_STATISTICS_H diff --git a/src/symbols.cpp b/src/symbols.cpp index 0e2fa83..94855a3 100644 --- a/src/symbols.cpp +++ b/src/symbols.cpp @@ -1,15 +1,15 @@ /* -Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2014-2015->Reset(ArrayFire Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) All rights reserved. -Redistribution and use in source and binary forms, with or without modification, +Redistribution and use in source and binary forms->Reset(with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this + * Redistributions of source code must retain the above copyright notice->Reset(this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this + * Redistributions in binary form must reproduce the above copyright notice->Reset(this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. @@ -18,15 +18,15 @@ are permitted provided that the following conditions are met: this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +ANY EXPRESS OR IMPLIED WARRANTIES->Reset(INCLUDING->Reset(BUT NOT LIMITED TO->Reset(THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +ANY DIRECT->Reset(INDIRECT->Reset(INCIDENTAL->Reset(SPECIAL->Reset(EXEMPLARY->Reset(OR CONSEQUENTIAL DAMAGES +(INCLUDING->Reset(BUT NOT LIMITED TO->Reset(PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE->Reset(DATA->Reset(OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY->Reset(WHETHER IN CONTRACT->Reset(STRICT LIABILITY->Reset(OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +SOFTWARE->Reset(EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "ext.h" @@ -36,109 +36,111 @@ using namespace v8; using namespace std; using namespace node; -Persistent Symbols::Dims; -Persistent Symbols::Begin; -Persistent Symbols::End; -Persistent Symbols::Step; -Persistent Symbols::IsGFor; -Persistent Symbols::Imag; -Persistent Symbols::Real; -Persistent Symbols::Elements; -Persistent Symbols::Ndims; -Persistent Symbols::NDims; -Persistent Symbols::Name; -Persistent Symbols::Platform; -Persistent Symbols::Toolkit; -Persistent Symbols::Compute; -Persistent Symbols::IsDoubleAvailable; -Persistent Symbols::Cpu; -Persistent Symbols::Index; -Persistent Symbols::Value; -Persistent Symbols::Keys; -Persistent Symbols::Values; -Persistent Symbols::Feat; -Persistent Symbols::Desc; -Persistent Symbols::Indices; -Persistent Symbols::DX; -Persistent Symbols::DY; -Persistent Symbols::NumFeatures; -Persistent Symbols::X; -Persistent Symbols::Y; -Persistent Symbols::Score; -Persistent Symbols::Orientation; -Persistent Symbols::Size; -Persistent Symbols::Idx; -Persistent Symbols::Dist; -Persistent Symbols::Succeeded; -Persistent Symbols::Result; -Persistent Symbols::Upper; -Persistent Symbols::Lower; -Persistent Symbols::Pivot; -Persistent Symbols::Q; -Persistent Symbols::R; -Persistent Symbols::Tau; -Persistent Symbols::FirstIndex; -Persistent Symbols::LastIndex; -Persistent Symbols::RowClass; -Persistent Symbols::RowsClass; -Persistent Symbols::ColClass; -Persistent Symbols::ColsClass; -Persistent Symbols::SliceClass; -Persistent Symbols::SlicesClass; -Persistent Symbols::FailedAtRank; -Persistent Symbols::AFArrayClass; +Nan::Persistent Symbols::Dims; +Nan::Persistent Symbols::Begin; +Nan::Persistent Symbols::End; +Nan::Persistent Symbols::Step; +Nan::Persistent Symbols::IsGFor; +Nan::Persistent Symbols::Imag; +Nan::Persistent Symbols::Real; +Nan::Persistent Symbols::Elements; +Nan::Persistent Symbols::Ndims; +Nan::Persistent Symbols::NDims; +Nan::Persistent Symbols::Name; +Nan::Persistent Symbols::Platform; +Nan::Persistent Symbols::Toolkit; +Nan::Persistent Symbols::Compute; +Nan::Persistent Symbols::IsDoubleAvailable; +Nan::Persistent Symbols::Cpu; +Nan::Persistent Symbols::Index; +Nan::Persistent Symbols::Value; +Nan::Persistent Symbols::Keys; +Nan::Persistent Symbols::Values; +Nan::Persistent Symbols::Feat; +Nan::Persistent Symbols::Desc; +Nan::Persistent Symbols::Indices; +Nan::Persistent Symbols::DX; +Nan::Persistent Symbols::DY; +Nan::Persistent Symbols::NumFeatures; +Nan::Persistent Symbols::X; +Nan::Persistent Symbols::Y; +Nan::Persistent Symbols::Score; +Nan::Persistent Symbols::Orientation; +Nan::Persistent Symbols::Size; +Nan::Persistent Symbols::Idx; +Nan::Persistent Symbols::Dist; +Nan::Persistent Symbols::Succeeded; +Nan::Persistent Symbols::Result; +Nan::Persistent Symbols::Upper; +Nan::Persistent Symbols::Lower; +Nan::Persistent Symbols::Pivot; +Nan::Persistent Symbols::Q; +Nan::Persistent Symbols::R; +Nan::Persistent Symbols::Tau; +Nan::Persistent Symbols::FirstIndex; +Nan::Persistent Symbols::LastIndex; +Nan::Persistent Symbols::RowClass; +Nan::Persistent Symbols::RowsClass; +Nan::Persistent Symbols::ColClass; +Nan::Persistent Symbols::ColsClass; +Nan::Persistent Symbols::SliceClass; +Nan::Persistent Symbols::SlicesClass; +Nan::Persistent Symbols::FailedAtRank; +Nan::Persistent Symbols::AFArrayClass; void Symbols::Init() { - NanAssignPersistent(Dims, NanNew("dims")); - NanAssignPersistent(Begin, NanNew("begin")); - NanAssignPersistent(End, NanNew("end")); - NanAssignPersistent(Step, NanNew("step")); - NanAssignPersistent(IsGFor, NanNew("IsGFor")); - NanAssignPersistent(Imag, NanNew("imag")); - NanAssignPersistent(Real, NanNew("real")); - NanAssignPersistent(Elements, NanNew("elements")); - NanAssignPersistent(Ndims, NanNew("ndims")); - NanAssignPersistent(NDims, NanNew("nDims")); - NanAssignPersistent(Name, NanNew("name")); - NanAssignPersistent(Platform, NanNew("platform")); - NanAssignPersistent(Toolkit, NanNew("toolkit")); - NanAssignPersistent(Compute, NanNew("compute")); - NanAssignPersistent(IsDoubleAvailable, NanNew("isDoubleAvailable")); - NanAssignPersistent(Cpu, NanNew("CPU")); - NanAssignPersistent(Index, NanNew("index")); - NanAssignPersistent(Value, NanNew("value")); - NanAssignPersistent(Keys, NanNew("keys")); - NanAssignPersistent(Values, NanNew("values")); - NanAssignPersistent(Feat, NanNew("feat")); - NanAssignPersistent(Desc, NanNew("desc")); - NanAssignPersistent(Indices, NanNew("indices")); - NanAssignPersistent(DX, NanNew("dx")); - NanAssignPersistent(DY, NanNew("dy")); - NanAssignPersistent(NumFeatures, NanNew("numFeatures")); - NanAssignPersistent(X, NanNew("x")); - NanAssignPersistent(Y, NanNew("y")); - NanAssignPersistent(Score, NanNew("score")); - NanAssignPersistent(Orientation, NanNew("orientation")); - NanAssignPersistent(Size, NanNew("size")); - NanAssignPersistent(Idx, NanNew("idx")); - NanAssignPersistent(Dist, NanNew("dist")); - NanAssignPersistent(Succeeded, NanNew("succeeded")); - NanAssignPersistent(Result, NanNew("result")); - NanAssignPersistent(Upper, NanNew("upper")); - NanAssignPersistent(Lower, NanNew("lower")); - NanAssignPersistent(Pivot, NanNew("pivot")); - NanAssignPersistent(Q, NanNew("q")); - NanAssignPersistent(R, NanNew("r")); - NanAssignPersistent(Tau, NanNew("tau")); - NanAssignPersistent(FirstIndex, NanNew("firstIndex")); - NanAssignPersistent(LastIndex, NanNew("lastIndex")); - NanAssignPersistent(RowClass, NanNew("Row")); - NanAssignPersistent(RowsClass, NanNew("Rows")); - NanAssignPersistent(ColClass, NanNew("Col")); - NanAssignPersistent(ColsClass, NanNew("Cols")); - NanAssignPersistent(SliceClass, NanNew("Slice")); - NanAssignPersistent(SlicesClass, NanNew("Slices")); - NanAssignPersistent(FailedAtRank, NanNew("failedAtRank")); - NanAssignPersistent(AFArrayClass, NanNew("AFArray")); + Nan::HandleScope scope; + + Dims.Reset(Nan::New("dims").ToLocalChecked()); + Begin.Reset(Nan::New("begin").ToLocalChecked()); + End.Reset(Nan::New("end").ToLocalChecked()); + Step.Reset(Nan::New("step").ToLocalChecked()); + IsGFor.Reset(Nan::New("IsGFor").ToLocalChecked()); + Imag.Reset(Nan::New("imag").ToLocalChecked()); + Real.Reset(Nan::New("real").ToLocalChecked()); + Elements.Reset(Nan::New("elements").ToLocalChecked()); + Ndims.Reset(Nan::New("ndims").ToLocalChecked()); + NDims.Reset(Nan::New("nDims").ToLocalChecked()); + Name.Reset(Nan::New("name").ToLocalChecked()); + Platform.Reset(Nan::New("platform").ToLocalChecked()); + Toolkit.Reset(Nan::New("toolkit").ToLocalChecked()); + Compute.Reset(Nan::New("compute").ToLocalChecked()); + IsDoubleAvailable.Reset(Nan::New("isDoubleAvailable").ToLocalChecked()); + Cpu.Reset(Nan::New("CPU").ToLocalChecked()); + Index.Reset(Nan::New("index").ToLocalChecked()); + Value.Reset(Nan::New("value").ToLocalChecked()); + Keys.Reset(Nan::New("keys").ToLocalChecked()); + Values.Reset(Nan::New("values").ToLocalChecked()); + Feat.Reset(Nan::New("feat").ToLocalChecked()); + Desc.Reset(Nan::New("desc").ToLocalChecked()); + Indices.Reset(Nan::New("indices").ToLocalChecked()); + DX.Reset(Nan::New("dx").ToLocalChecked()); + DY.Reset(Nan::New("dy").ToLocalChecked()); + NumFeatures.Reset(Nan::New("numFeatures").ToLocalChecked()); + X.Reset(Nan::New("x").ToLocalChecked()); + Y.Reset(Nan::New("y").ToLocalChecked()); + Score.Reset(Nan::New("score").ToLocalChecked()); + Orientation.Reset(Nan::New("orientation").ToLocalChecked()); + Size.Reset(Nan::New("size").ToLocalChecked()); + Idx.Reset(Nan::New("idx").ToLocalChecked()); + Dist.Reset(Nan::New("dist").ToLocalChecked()); + Succeeded.Reset(Nan::New("succeeded").ToLocalChecked()); + Result.Reset(Nan::New("result").ToLocalChecked()); + Upper.Reset(Nan::New("upper").ToLocalChecked()); + Lower.Reset(Nan::New("lower").ToLocalChecked()); + Pivot.Reset(Nan::New("pivot").ToLocalChecked()); + Q.Reset(Nan::New("q").ToLocalChecked()); + R.Reset(Nan::New("r").ToLocalChecked()); + Tau.Reset(Nan::New("tau").ToLocalChecked()); + FirstIndex.Reset(Nan::New("firstIndex").ToLocalChecked()); + LastIndex.Reset(Nan::New("lastIndex").ToLocalChecked()); + RowClass.Reset(Nan::New("Row").ToLocalChecked()); + RowsClass.Reset(Nan::New("Rows").ToLocalChecked()); + ColClass.Reset(Nan::New("Col").ToLocalChecked()); + ColsClass.Reset(Nan::New("Cols").ToLocalChecked()); + SliceClass.Reset(Nan::New("Slice").ToLocalChecked()); + SlicesClass.Reset(Nan::New("Slices").ToLocalChecked()); + FailedAtRank.Reset(Nan::New("failedAtRank").ToLocalChecked()); + AFArrayClass.Reset(Nan::New("AFArray").ToLocalChecked()); } diff --git a/src/symbols.h b/src/symbols.h index 37844fc..5df7731 100644 --- a/src/symbols.h +++ b/src/symbols.h @@ -36,57 +36,57 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct Symbols { - static v8::Persistent Dims; - static v8::Persistent Begin; - static v8::Persistent End; - static v8::Persistent Step; - static v8::Persistent IsGFor; - static v8::Persistent Imag; - static v8::Persistent Real; - static v8::Persistent Elements; - static v8::Persistent Ndims; - static v8::Persistent NDims; - static v8::Persistent Name; - static v8::Persistent Platform; - static v8::Persistent Toolkit; - static v8::Persistent Compute; - static v8::Persistent IsDoubleAvailable; - static v8::Persistent Cpu; - static v8::Persistent Index; - static v8::Persistent Value; - static v8::Persistent Keys; - static v8::Persistent Values; - static v8::Persistent Feat; - static v8::Persistent Desc; - static v8::Persistent Indices; - static v8::Persistent DX; - static v8::Persistent DY; - static v8::Persistent NumFeatures; - static v8::Persistent X; - static v8::Persistent Y; - static v8::Persistent Score; - static v8::Persistent Orientation; - static v8::Persistent Size; - static v8::Persistent Idx; - static v8::Persistent Dist; - static v8::Persistent Succeeded; - static v8::Persistent Result; - static v8::Persistent Upper; - static v8::Persistent Lower; - static v8::Persistent Pivot; - static v8::Persistent Q; - static v8::Persistent R; - static v8::Persistent Tau; - static v8::Persistent FirstIndex; - static v8::Persistent LastIndex; - static v8::Persistent RowClass; - static v8::Persistent RowsClass; - static v8::Persistent ColClass; - static v8::Persistent ColsClass; - static v8::Persistent SliceClass; - static v8::Persistent SlicesClass; - static v8::Persistent FailedAtRank; - static v8::Persistent AFArrayClass; + static Nan::Persistent Dims; + static Nan::Persistent Begin; + static Nan::Persistent End; + static Nan::Persistent Step; + static Nan::Persistent IsGFor; + static Nan::Persistent Imag; + static Nan::Persistent Real; + static Nan::Persistent Elements; + static Nan::Persistent Ndims; + static Nan::Persistent NDims; + static Nan::Persistent Name; + static Nan::Persistent Platform; + static Nan::Persistent Toolkit; + static Nan::Persistent Compute; + static Nan::Persistent IsDoubleAvailable; + static Nan::Persistent Cpu; + static Nan::Persistent Index; + static Nan::Persistent Value; + static Nan::Persistent Keys; + static Nan::Persistent Values; + static Nan::Persistent Feat; + static Nan::Persistent Desc; + static Nan::Persistent Indices; + static Nan::Persistent DX; + static Nan::Persistent DY; + static Nan::Persistent NumFeatures; + static Nan::Persistent X; + static Nan::Persistent Y; + static Nan::Persistent Score; + static Nan::Persistent Orientation; + static Nan::Persistent Size; + static Nan::Persistent Idx; + static Nan::Persistent Dist; + static Nan::Persistent Succeeded; + static Nan::Persistent Result; + static Nan::Persistent Upper; + static Nan::Persistent Lower; + static Nan::Persistent Pivot; + static Nan::Persistent Q; + static Nan::Persistent R; + static Nan::Persistent Tau; + static Nan::Persistent FirstIndex; + static Nan::Persistent LastIndex; + static Nan::Persistent RowClass; + static Nan::Persistent RowsClass; + static Nan::Persistent ColClass; + static Nan::Persistent ColsClass; + static Nan::Persistent SliceClass; + static Nan::Persistent SlicesClass; + static Nan::Persistent FailedAtRank; + static Nan::Persistent AFArrayClass; static void Init(); }; diff --git a/src/vectoralgorithms.cpp b/src/vectoralgorithms.cpp index 300803b..22fdf27 100644 --- a/src/vectoralgorithms.cpp +++ b/src/vectoralgorithms.cpp @@ -53,85 +53,85 @@ ARRAYFIRE_ASYNC_METHOD_ALGO_V2(FindMaxAt, max) NAN_METHOD(Sort) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); unsigned dim = 0; bool asc = true; - if (args.Length() > 1 && args[1]->IsNumber()) + if (info.Length() > 1 && info[1]->IsNumber()) { - dim = args[1]->Uint32Value(); + dim = info[1]->Uint32Value(); } - if (args.Length() > 2 && args[2]->IsBoolean()) + if (info.Length() > 2 && info[2]->IsBoolean()) { - asc = args[2]->BooleanValue(); + asc = info[2]->BooleanValue(); } Guard(); - NanReturnValue(ArrayWrapper::New(af::sort(*pArray, dim, asc)));; + info.GetReturnValue().Set(ArrayWrapper::New(af::sort(*pArray, dim, asc)));; } ARRAYFIRE_CATCH } NAN_METHOD(SortByKey) { - NanScope(); + try { ARGS_LEN(2); - auto pKeys = ArrayWrapper::GetArrayAt(args, 0); - auto pValues = ArrayWrapper::GetArrayAt(args, 1); + auto pKeys = ArrayWrapper::GetArrayAt(info, 0); + auto pValues = ArrayWrapper::GetArrayAt(info, 1); unsigned dim = 0; bool asc = true; - if (args.Length() > 2 && args[2]->IsNumber()) + if (info.Length() > 2 && info[2]->IsNumber()) { - dim = args[2]->Uint32Value(); + dim = info[2]->Uint32Value(); } - if (args.Length() > 3 && args[3]->IsBoolean()) + if (info.Length() > 3 && info[3]->IsBoolean()) { - asc = args[3]->BooleanValue(); + asc = info[3]->BooleanValue(); } Guard(); af::array outKeys, outValues; af::sort(outKeys, outValues, *pKeys, *pValues, dim, asc); - auto result = NanNew(); - result->Set(NanNew(Symbols::Keys), NanNew(ArrayWrapper::New(outKeys))); - result->Set(NanNew(Symbols::Values), NanNew(ArrayWrapper::New(outValues))); + auto result = Nan::New(); + Nan::Set(result, Nan::New(Symbols::Keys), ArrayWrapper::New(outKeys)); + Nan::Set(result, Nan::New(Symbols::Values), ArrayWrapper::New(outValues)); - NanReturnValue(result); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } NAN_METHOD(SortIndex) { - NanScope(); + try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); unsigned dim = 0; bool asc = true; - if (args.Length() > 1 && args[1]->IsNumber()) + if (info.Length() > 1 && info[1]->IsNumber()) { - dim = args[1]->Uint32Value(); + dim = info[1]->Uint32Value(); } - if (args.Length() > 2 && args[2]->IsBoolean()) + if (info.Length() > 2 && info[2]->IsBoolean()) { - asc = args[2]->BooleanValue(); + asc = info[2]->BooleanValue(); } Guard(); af::array outValues, outIndices; af::sort(outValues, outIndices, *pArray, dim, asc); - auto result = NanNew(); - result->Set(NanNew(Symbols::Values), NanNew(ArrayWrapper::New(outValues))); - result->Set(NanNew(Symbols::Indices), NanNew(ArrayWrapper::New(outIndices))); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Values), ArrayWrapper::New(outValues)); + result->Set(Nan::New(Symbols::Indices), ArrayWrapper::New(outIndices)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } @@ -147,47 +147,48 @@ ARRAYFIRE_SYNC_METHOD_ARR_DIM(Diff2, diff2) NAN_METHOD(Grad) { - NanScope(); try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); Guard(); af::array dx, dy; af::grad(dx, dy, *pArray); - auto result = NanNew(); - result->Set(NanNew(Symbols::DX), NanNew(ArrayWrapper::New(dx))); - result->Set(NanNew(Symbols::DY), NanNew(ArrayWrapper::New(dy))); - NanReturnValue(result); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::DX), (ArrayWrapper::New(dx))); + result->Set(Nan::New(Symbols::DY), (ArrayWrapper::New(dy))); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } -void InitVectorAlgorithms(v8::Handle exports) +NAN_MODULE_INIT(InitVectorAlgorithms) { - exports->Set(NanNew("allTrue"), NanNew(AllTrue)->GetFunction()); - exports->Set(NanNew("anyTrue"), NanNew(AnyTrue)->GetFunction()); - exports->Set(NanNew("count"), NanNew(Count)->GetFunction()); - exports->Set(NanNew("findMax"), NanNew(FindMax)->GetFunction()); - exports->Set(NanNew("findMaxAt"), NanNew(FindMaxAt)->GetFunction()); - exports->Set(NanNew("findMin"), NanNew(FindMin)->GetFunction()); - exports->Set(NanNew("findMinAt"), NanNew(FindMinAt)->GetFunction()); - exports->Set(NanNew("product"), NanNew(Product)->GetFunction()); - exports->Set(NanNew("sum"), NanNew(Sum)->GetFunction()); - - exports->Set(NanNew("sort"), NanNew(Sort)->GetFunction()); - exports->Set(NanNew("sortByKey"), NanNew(SortByKey)->GetFunction()); - exports->Set(NanNew("sortIndex"), NanNew(SortIndex)->GetFunction()); - - exports->Set(NanNew("accum"), NanNew(Accum)->GetFunction()); - exports->Set(NanNew("where"), NanNew(Where)->GetFunction()); - - exports->Set(NanNew("setIntersect"), NanNew(SetIntersect)->GetFunction()); - exports->Set(NanNew("setUnion"), NanNew(SetUnion)->GetFunction()); - exports->Set(NanNew("setUnique"), NanNew(SetUnique)->GetFunction()); - exports->Set(NanNew("diff1"), NanNew(Diff1)->GetFunction()); - exports->Set(NanNew("diff2"), NanNew(Diff2)->GetFunction()); - exports->Set(NanNew("grad"), NanNew(Grad)->GetFunction()); + Nan::HandleScope scope; + + Nan::Set(target, Nan::New("allTrue").ToLocalChecked(), Nan::New(AllTrue)->GetFunction()); + Nan::Set(target, Nan::New("anyTrue").ToLocalChecked(), Nan::New(AnyTrue)->GetFunction()); + Nan::Set(target, Nan::New("count").ToLocalChecked(), Nan::New(Count)->GetFunction()); + Nan::Set(target, Nan::New("findMax").ToLocalChecked(), Nan::New(FindMax)->GetFunction()); + Nan::Set(target, Nan::New("findMaxAt").ToLocalChecked(), Nan::New(FindMaxAt)->GetFunction()); + Nan::Set(target, Nan::New("findMin").ToLocalChecked(), Nan::New(FindMin)->GetFunction()); + Nan::Set(target, Nan::New("findMinAt").ToLocalChecked(), Nan::New(FindMinAt)->GetFunction()); + Nan::Set(target, Nan::New("product").ToLocalChecked(), Nan::New(Product)->GetFunction()); + Nan::Set(target, Nan::New("sum").ToLocalChecked(), Nan::New(Sum)->GetFunction()); + + Nan::Set(target, Nan::New("sort").ToLocalChecked(), Nan::New(Sort)->GetFunction()); + Nan::Set(target, Nan::New("sortByKey").ToLocalChecked(), Nan::New(SortByKey)->GetFunction()); + Nan::Set(target, Nan::New("sortIndex").ToLocalChecked(), Nan::New(SortIndex)->GetFunction()); + + Nan::Set(target, Nan::New("accum").ToLocalChecked(), Nan::New(Accum)->GetFunction()); + Nan::Set(target, Nan::New("where").ToLocalChecked(), Nan::New(Where)->GetFunction()); + + Nan::Set(target, Nan::New("setIntersect").ToLocalChecked(), Nan::New(SetIntersect)->GetFunction()); + Nan::Set(target, Nan::New("setUnion").ToLocalChecked(), Nan::New(SetUnion)->GetFunction()); + Nan::Set(target, Nan::New("setUnique").ToLocalChecked(), Nan::New(SetUnique)->GetFunction()); + Nan::Set(target, Nan::New("diff1").ToLocalChecked(), Nan::New(Diff1)->GetFunction()); + Nan::Set(target, Nan::New("diff2").ToLocalChecked(), Nan::New(Diff2)->GetFunction()); + Nan::Set(target, Nan::New("grad").ToLocalChecked(), Nan::New(Grad)->GetFunction()); } diff --git a/src/vectoralgorithms.h b/src/vectoralgorithms.h index d44269e..de16b2f 100644 --- a/src/vectoralgorithms.h +++ b/src/vectoralgorithms.h @@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -void InitVectorAlgorithms(v8::Handle exports); +NAN_MODULE_INIT(InitVectorAlgorithms); #endif // ARRAYFIRE_VECTORALGORITHMS_H diff --git a/src/worker.h b/src/worker.h index af60644..74c51de 100644 --- a/src/worker.h +++ b/src/worker.h @@ -39,41 +39,41 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. inline NAN_METHOD(Noop) { - NanScope(); - NanReturnUndefined(); + + info.GetReturnValue().SetUndefined(); } template -struct Worker : public NanAsyncWorker +struct Worker : public Nan::AsyncWorker { typedef std::function ExecuteFunc; typedef std::function(Worker*, T)> ResultConvFunc; - Worker(NanCallback *callback, const ExecuteFunc& executeFunc, const ResultConvFunc& resultConvFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, const ExecuteFunc& executeFunc, const ResultConvFunc& resultConvFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(executeFunc), resultConvFunc(std::move(ConvResult(resultConvFunc))) { } - Worker(NanCallback *callback, const ExecuteFunc& executeFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, const ExecuteFunc& executeFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(executeFunc), - resultConvFunc(std::move(ConvResult([](Worker* w, T v) { return NanNew(v); }))) + resultConvFunc(std::move(ConvResult([](Worker* w, T v) { return Nan::New(v); }))) { } - Worker(NanCallback *callback, ExecuteFunc&& executeFunc, const ResultConvFunc& resultConvFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, ExecuteFunc&& executeFunc, const ResultConvFunc& resultConvFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(std::move(executeFunc)), resultConvFunc(std::move(ConvResult(resultConvFunc))) { } - Worker(NanCallback *callback, ExecuteFunc&& executeFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, ExecuteFunc&& executeFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(std::move(executeFunc)), - resultConvFunc(std::move(ConvResult([](Worker* w, T v) { return NanNew(v); }))) + resultConvFunc(std::move(ConvResult([](Worker* w, T v) { return Nan::New(v); }))) { } @@ -102,17 +102,17 @@ struct Worker : public NanAsyncWorker void HandleOKCallback() override { using namespace v8; - NanScope(); + auto convertedResult = resultConvFunc(this, result); if (convertedResult->IsNativeError()) { - Local args[] = { convertedResult }; - callback->Call(1, args); + Local info[] = { convertedResult }; + callback->Call(1, info); } else { - Local args[] = { NanNull(), convertedResult }; - callback->Call(2, args); + Local info[] = { Nan::Null(), convertedResult }; + callback->Call(2, info); } } @@ -125,39 +125,40 @@ struct Worker : public NanAsyncWorker { return std::move([=](Worker* i, T result) { + Nan::EscapableHandleScope scope; try { - return resultConvFunc(i, result); + return scope.Escape(resultConvFunc(i, result)); } catch(af::exception& ex) { - return NanError(ex.what()); + return scope.Escape(Nan::Error(ex.what())); } catch(std::exception& ex) { - return NanError(ex.what()); + return scope.Escape(Nan::Error(ex.what())); } catch(...) { - return NanError("Unknown error!"); + return scope.Escape(Nan::Error("Unknown error!")); } }); } }; template<> -struct Worker : public NanAsyncWorker +struct Worker : public Nan::AsyncWorker { typedef std::function ExecuteFunc; - Worker(NanCallback *callback, const ExecuteFunc& executeFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, const ExecuteFunc& executeFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(executeFunc) { } - Worker(NanCallback *callback, ExecuteFunc&& executeFunc) : - NanAsyncWorker(callback ? callback : new NanCallback(NanNew(Noop)->GetFunction())), + Worker(Nan::Callback *callback, ExecuteFunc&& executeFunc) : + Nan::AsyncWorker(callback ? callback : new Nan::Callback(Nan::New(Noop)->GetFunction())), executeFunc(std::move(executeFunc)) { } From c633adbb57b4c12c421b63d521c51a6244f0b974 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sat, 29 Aug 2015 21:03:55 +0200 Subject: [PATCH 07/45] 0.15 - io.js 3 support --- changelog.md | 4 ++++ package.json | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 changelog.md diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..d8c8cbe --- /dev/null +++ b/changelog.md @@ -0,0 +1,4 @@ +# 0.15.0 (2015-08-29) + +- NAN 2.0 compatibility +- io.js 3 compatibility (io.js 3.2+ needed) \ No newline at end of file diff --git a/package.json b/package.json index 281004b..d541b93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire_js", - "version": "0.14.1", + "version": "0.15.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -21,8 +21,8 @@ "devDependencies": { "better-assert": "*", "bluebird": "*", - "debug": "^2.2.0", - "fs-extra": "^0.20.1", + "debug": "*", + "fs-extra": "*", "gulp": "*", "gulp-sequence": "*", "gulp-traceur": "*", From d0fcb978dc700a4e5faa98c1fccbb77e511e86d9 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 1 Sep 2015 13:23:30 +0200 Subject: [PATCH 08/45] guard local usage fixed --- src/arrayhelperfunctions.cpp | 2 +- src/arraywrapper.cpp | 74 ++++++++++++++++++------------------ src/computervision.cpp | 8 ++-- src/createarray.cpp | 14 +++---- src/device.cpp | 20 +++++----- src/helpers.h | 42 ++++++++++---------- src/imageprocessing.cpp | 36 +++++++++--------- src/linearalgebra.cpp | 38 +++++++++--------- src/moveandreorderarray.cpp | 4 +- src/signalprocessing.cpp | 28 +++++++------- src/statistics.cpp | 10 ++--- src/vectoralgorithms.cpp | 8 ++-- 12 files changed, 142 insertions(+), 142 deletions(-) diff --git a/src/arrayhelperfunctions.cpp b/src/arrayhelperfunctions.cpp index 16edd9f..bc646a8 100644 --- a/src/arrayhelperfunctions.cpp +++ b/src/arrayhelperfunctions.cpp @@ -49,7 +49,7 @@ NAN_METHOD(Print) try { ARGS_LEN(1); - Guard(); + Guard guard; af_print(*ArrayWrapper::GetArrayAt(info, 0)); info.GetReturnValue().SetUndefined(); } diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 4a709bd..186a755 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -286,7 +286,7 @@ void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) { if (info.Length() == 0) { - Guard(); + Guard guard; instance = new ArrayWrapper(new af::array()); } else if (info.Length() == 1) @@ -298,7 +298,7 @@ void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) } else { - Guard(); + Guard guard; auto dimAndType = ParseDimAndTypeArgs(info); instance = new ArrayWrapper(new af::array(dimAndType.first, dimAndType.second)); } @@ -323,7 +323,7 @@ void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) template af::array* ArrayWrapper::CreateArray(void* ptr, af_source src, const af::dim4& dim4) { - Guard(); + Guard guard; return new af::array(dim4, (T*)ptr, src); } @@ -418,7 +418,7 @@ NAN_METHOD(ArrayWrapper::Elements) { try { - Guard(); + Guard guard; info.GetReturnValue().Set(Nan::New(GetArray(info.This())->elements())); } ARRAYFIRE_CATCH @@ -445,7 +445,7 @@ NAN_METHOD(ArrayWrapper::Host) af::array array(*pArray); auto exec = [=]() { - Guard(); + Guard guard; array.host(buffData); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -463,7 +463,7 @@ NAN_METHOD(ArrayWrapper::Host) af::array array(*pArray); auto exec = [=]() { - Guard(); + Guard guard; array.host(buffData); return buffData; }; @@ -500,7 +500,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -511,7 +511,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -522,7 +522,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -533,7 +533,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -544,7 +544,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -555,7 +555,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -566,7 +566,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto conv = [=](Worker* w, af::cfloat data) @@ -581,7 +581,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto conv = [=](Worker* w, af::cdouble data) @@ -596,7 +596,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto conv = [=](Worker* w, long long data) @@ -612,7 +612,7 @@ NAN_METHOD(ArrayWrapper::Scalar) { auto exec = [=]() { - Guard(); + Guard guard; return array.scalar(); }; auto conv = [=](Worker* w, unsigned long long data) @@ -661,7 +661,7 @@ NAN_METHOD(ArrayWrapper::Write) af::array array(*pArray); auto exec = [=]() { - Guard(); + Guard guard; af_write_array(array.get(), buffData, bytes, src); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -733,7 +733,7 @@ NAN_METHOD(ArrayWrapper::Copy) { try { - Guard(); + Guard guard; info.GetReturnValue().Set(New(GetArray(info.This())->copy())); } ARRAYFIRE_CATCH @@ -878,7 +878,7 @@ NAN_METHOD(ArrayWrapper::Eval) try { - Guard(); + Guard guard; GetArray(info.This())->eval(); info.GetReturnValue().SetUndefined(); } @@ -894,7 +894,7 @@ NAN_METHOD(ArrayWrapper::At) { ARGS_LEN(1) - Guard(); + Guard guard; if (info.Length() == 1) { @@ -947,7 +947,7 @@ NAN_METHOD(ArrayWrapper::F)\ try\ {\ ARGS_LEN(1)\ - Guard();\ + Guard guard;\ auto pArray = GetArray(info.This());\ info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value())));\ }\ @@ -966,7 +966,7 @@ NAN_METHOD(ArrayWrapper::F)\ try\ {\ ARGS_LEN(2);\ - Guard();\ + Guard guard;\ auto pArray = GetArray(info.This());\ info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value(), info[1]->Int32Value())));\ }\ @@ -985,7 +985,7 @@ NAN_METHOD(ArrayWrapper::As) { ARGS_LEN(1); af::dtype type = GetDTypeInfo(info[0]->Uint32Value()).first; - Guard(); + Guard guard; info.GetReturnValue().Set(New(GetArray(info.This())->as(type))); } ARRAYFIRE_CATCH @@ -1006,7 +1006,7 @@ NAN_METHOD(ArrayWrapper::F)\ {\ auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1063,7 +1063,7 @@ NAN_METHOD(ArrayWrapper::F)\ case Region::None:\ {\ auto idx0 = ToIndex(info[0]);\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1112,7 +1112,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Row:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1161,7 +1161,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Rows:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1210,7 +1210,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Col:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1259,7 +1259,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Cols:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1308,7 +1308,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Slice:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1357,7 +1357,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Slices:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1412,7 +1412,7 @@ NAN_METHOD(ArrayWrapper::F)\ auto idx1 = ToIndex(info[1]);\ auto value = info[2];\ auto pOtherArray = TryGetArray(value);\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1465,7 +1465,7 @@ NAN_METHOD(ArrayWrapper::F)\ auto idx2 = ToIndex(info[2]);\ auto value = info[3];\ auto pOtherArray = TryGetArray(value);\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1519,7 +1519,7 @@ NAN_METHOD(ArrayWrapper::F)\ auto idx3 = ToIndex(info[3]);\ auto value = info[4];\ auto pOtherArray = TryGetArray(value);\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1591,7 +1591,7 @@ NAN_METHOD(ArrayWrapper::F)\ auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ af::array* result = nullptr;\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1675,7 +1675,7 @@ NAN_METHOD(ArrayWrapper::F)\ auto value = info[0];\ auto pOtherArray = TryGetArray(value);\ af::array* result = nullptr;\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1754,7 +1754,7 @@ NAN_METHOD(ArrayWrapper::F)\ try\ {\ auto& array = *GetArray(info.This());\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(New(array.operator Op()));\ }\ ARRAYFIRE_CATCH\ diff --git a/src/computervision.cpp b/src/computervision.cpp index 6726830..45dca1f 100644 --- a/src/computervision.cpp +++ b/src/computervision.cpp @@ -72,7 +72,7 @@ NAN_METHOD(Orb) { blurImg = info[5]->BooleanValue(); } - Guard(); + Guard guard; af::features feat; af::array desc; af::orb(feat, desc, *pArray, fastThr, maxFeat, sclFctr, levels, blurImg); @@ -116,7 +116,7 @@ NAN_METHOD(Fast) { edge = info[5]->Uint32Value(); } - Guard(); + Guard guard; auto feat = af::fast(*pArray, thr, arcLength, nonMax, featureRatio, edge); info.GetReturnValue().Set(ToV8Features(feat)); } @@ -141,7 +141,7 @@ NAN_METHOD(HammingMatcher) { nDist = info[3]->Uint32Value(); } - Guard(); + Guard guard; af::array idx, dist; af::hammingMatcher(idx, dist, *pArray1, *pArray2, distDim, nDist); auto result = Nan::New(); @@ -165,7 +165,7 @@ NAN_METHOD(MatchTemplate) { mType = (af::matchType)(info[2]->Uint32Value()); } - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::matchTemplate(*pArray1, *pArray2, mType))); } ARRAYFIRE_CATCH diff --git a/src/createarray.cpp b/src/createarray.cpp index 96b527d..1246d9d 100644 --- a/src/createarray.cpp +++ b/src/createarray.cpp @@ -48,7 +48,7 @@ NAN_METHOD(RandU) { ARGS_LEN(2); auto dimAndType = ParseDimAndTypeArgs(info); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::randu(dimAndType.first, dimAndType.second))); } ARRAYFIRE_CATCH @@ -64,7 +64,7 @@ NAN_METHOD(RandN) auto dimAndType = ParseDimAndTypeArgs(info); if (dimAndType.second == f32 || dimAndType.second == f64) { - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::randn(dimAndType.first, dimAndType.second))); return; } @@ -81,7 +81,7 @@ NAN_METHOD(Identity) { ARGS_LEN(2); auto dimAndType = ParseDimAndTypeArgs(info); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::identity(dimAndType.first, dimAndType.second))); } ARRAYFIRE_CATCH @@ -96,7 +96,7 @@ NAN_METHOD(Range) ARGS_LEN(3); auto dimAndType = ParseDimAndTypeArgs(info, -1, 1); af_dtype seqDim = (af_dtype)info[info.Length() - 2]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::range(dimAndType.first, seqDim, dimAndType.second))); } ARRAYFIRE_CATCH @@ -112,7 +112,7 @@ NAN_METHOD(Iota) auto dims = ToDim4(info[0]); auto titleDims = ToDim4(info[1]); auto type = GetDTypeInfo(info[3]->Uint32Value()); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::iota(dims, titleDims, type.first))); } ARRAYFIRE_CATCH @@ -136,7 +136,7 @@ NAN_METHOD(Diag) { extract = info[2]->BooleanValue(); } - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::diag(*pArray, num, extract))); } ARRAYFIRE_CATCH @@ -153,7 +153,7 @@ NAN_METHOD(Constant) ARGS_LEN(3); auto dimAndType = ParseDimAndTypeArgs(info, -1, 0, 1); auto value = info[0]; - Guard(); + Guard guard; if (value->IsNumber()) { double v = value->NumberValue(); diff --git a/src/device.cpp b/src/device.cpp index b16b03f..57d6aa6 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -47,7 +47,7 @@ NAN_METHOD(GetDeviceCount) try { - Guard(); + Guard guard; #ifdef CPU info.GetReturnValue().Set(Nan::New(1)); #else @@ -61,7 +61,7 @@ NAN_METHOD(GetDevice) { try { - Guard(); + Guard guard; #ifdef CPU @@ -79,7 +79,7 @@ NAN_METHOD(SetDevice) try { - Guard(); + Guard guard; #ifndef CPU af::setDevice(info[0]->Uint32Value()); @@ -96,7 +96,7 @@ NAN_METHOD(DeviceInfo) try { - Guard(); + Guard guard; bool IsDoubleAvailable = af::isDoubleAvailable(af::getDevice()); auto infoObj = Nan::New(); @@ -128,7 +128,7 @@ NAN_METHOD(IsDoubleAvailable) try { - Guard(); + Guard guard; info.GetReturnValue().Set(Nan::New(af::isDoubleAvailable(info[0]->Uint32Value()))); } @@ -170,7 +170,7 @@ NAN_METHOD(Sync) auto exec = [=]() { - Guard(); + Guard guard; af::sync(device); }; @@ -199,11 +199,11 @@ NAN_METHOD(Alloc) unsigned udtype = info[1]->Uint32Value(); auto allocPars = getAllocPars(elements, udtype); - Guard(); + Guard guard; char* ptr = (char*)af::alloc(elements, allocPars.first); auto gcCallback = [](char* data, void* hint) { - Guard(); + Guard guard; af::free(data); Nan::AdjustExternalMemory(static_cast(reinterpret_cast(hint))); }; @@ -224,11 +224,11 @@ NAN_METHOD(Pinned) unsigned udtype = info[1]->Uint32Value(); auto allocPars = getAllocPars(elements, udtype); - Guard(); + Guard guard; char* ptr = (char*)af::pinned(elements, allocPars.first); auto gcCallback = [](char* data, void* hint) { - Guard(); + Guard guard; af::freePinned(data); Nan::AdjustExternalMemory(static_cast(reinterpret_cast(hint))); }; diff --git a/src/helpers.h b/src/helpers.h index 23f9167..bb37cd9 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -101,7 +101,7 @@ NAN_METHOD(F)\ {\ ARGS_LEN(1);\ \ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0))));\ }\ ARRAYFIRE_CATCH\ @@ -118,7 +118,7 @@ NAN_METHOD(F)\ \ int dim = 0;\ if (info.Length() > 1) dim = info[1]->Int32Value();\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), dim)));\ }\ ARRAYFIRE_CATCH\ @@ -135,7 +135,7 @@ NAN_METHOD(F)\ \ bool v = defV;\ if (info.Length() > 1) v = info[1]->BooleanValue();\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v)));\ }\ ARRAYFIRE_CATCH\ @@ -152,7 +152,7 @@ NAN_METHOD(F)\ \ bool v = defV;\ if (info.Length() > 1) v = info[1]->BooleanValue();\ - Guard();\ + Guard guard;\ af::f(*ArrayWrapper::GetArrayAt(info, 0), v);\ info.GetReturnValue().SetUndefined();\ }\ @@ -174,7 +174,7 @@ NAN_METHOD(F)\ if (info.Length() > 1) v1 = info[1]->NumberValue();\ if (info.Length() > 2) v1 = info[2]->NumberValue();\ if (info.Length() > 3) v1 = info[3]->NumberValue();\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v1, v2, v3)));\ }\ ARRAYFIRE_CATCH\ @@ -189,7 +189,7 @@ NAN_METHOD(F)\ {\ ARGS_LEN(2);\ \ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1))));\ }\ ARRAYFIRE_CATCH\ @@ -204,7 +204,7 @@ NAN_METHOD(F)\ {\ ARGS_LEN(3);\ \ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), *ArrayWrapper::GetArrayAt(info, 2))));\ }\ ARRAYFIRE_CATCH\ @@ -219,7 +219,7 @@ NAN_METHOD(F)\ {\ ARGS_LEN(4);\ \ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), *ArrayWrapper::GetArrayAt(info, 2), *ArrayWrapper::GetArrayAt(info, 3))));\ }\ ARRAYFIRE_CATCH\ @@ -236,7 +236,7 @@ NAN_METHOD(F)\ \ int dim = 0;\ if (info.Length() > 2) dim = info[2]->Int32Value();\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), dim)));\ }\ ARRAYFIRE_CATCH\ @@ -253,7 +253,7 @@ NAN_METHOD(F)\ \ bool v = defV;\ if (info.Length() > 2) v = info[2]->BooleanValue();\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), v)));\ }\ ARRAYFIRE_CATCH\ @@ -269,7 +269,7 @@ NAN_METHOD(F)\ \ auto pArray1 = ArrayWrapper::TryGetArrayAt(info, 0);\ auto pArray2 = ArrayWrapper::TryGetArrayAt(info, 1);\ - Guard();\ + Guard guard;\ if (pArray1)\ {\ if (pArray2)\ @@ -317,20 +317,20 @@ NAN_METHOD(F)\ if (info.Length() > 2)\ {\ int dim = info[1]->Int32Value();\ - return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::f(array, dim)); });\ + return ArrayWrapper::NewAsync(info, [=]() { Guard guard; return new af::array(af::f(array, dim)); });\ }\ else\ {\ if (NeedsDouble(array))\ {\ - auto exec = [=]() { Guard(); return af::f(array); };\ + auto exec = [=]() { Guard guard; return af::f(array); };\ auto worker = new Worker(GetCallback(info), std::move(exec));\ Nan::AsyncQueueWorker(worker);\ info.GetReturnValue().SetUndefined();\ }\ else\ {\ - auto exec = [=]() { Guard(); return af::f(array); };\ + auto exec = [=]() { Guard guard; return af::f(array); };\ auto worker = new Worker(GetCallback(info), std::move(exec));\ Nan::AsyncQueueWorker(worker);\ info.GetReturnValue().SetUndefined();\ @@ -356,7 +356,7 @@ NAN_METHOD(F)\ typedef Worker WorkerT;\ auto exec = [=]()\ {\ - Guard();\ + Guard guard;\ af::array v;\ af::array at;\ af::f(v, at, array, dim);\ @@ -382,7 +382,7 @@ NAN_METHOD(F)\ typedef Worker WorkerT;\ auto exec = [=]()\ {\ - Guard();\ + Guard guard;\ double v;\ unsigned at;\ af::f(&v, &at, array);\ @@ -406,7 +406,7 @@ NAN_METHOD(F)\ typedef Worker WorkerT;\ auto exec = [=]()\ {\ - Guard();\ + Guard guard;\ float v;\ unsigned at;\ af::f(&v, &at, array);\ @@ -443,20 +443,20 @@ NAN_METHOD(F)\ if (info.Length() > 3)\ {\ int dim = info[2]->Int32Value();\ - return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::f(array1, array2, dim)); });\ + return ArrayWrapper::NewAsync(info, [=]() { Guard guard; return new af::array(af::f(array1, array2, dim)); });\ }\ else\ {\ if (NeedsDouble(array1))\ {\ - auto exec = [=]() { Guard(); return af::f(array1, array2); };\ + auto exec = [=]() { Guard guard; return af::f(array1, array2); };\ auto worker = new Worker(GetCallback(info), std::move(exec));\ Nan::AsyncQueueWorker(worker);\ info.GetReturnValue().SetUndefined();\ }\ else\ {\ - auto exec = [=]() { Guard(); return af::f(array1, array2); };\ + auto exec = [=]() { Guard guard; return af::f(array1, array2); };\ auto worker = new Worker(GetCallback(info), std::move(exec));\ Nan::AsyncQueueWorker(worker);\ info.GetReturnValue().SetUndefined();\ @@ -504,7 +504,7 @@ NAN_METHOD(F)\ w = info[4]->Uint32Value();\ }\ }\ - Guard();\ + Guard guard;\ info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray, x, y, z, w)));\ }\ ARRAYFIRE_CATCH\ diff --git a/src/imageprocessing.cpp b/src/imageprocessing.cpp index 5de1fc6..03f62d5 100644 --- a/src/imageprocessing.cpp +++ b/src/imageprocessing.cpp @@ -56,7 +56,7 @@ NAN_METHOD(LoadImage) } ArrayWrapper::NewAsync( info, - [=](){ Guard(); return new af::array(af::loadImage(fn.c_str(), isColor)); }); + [=](){ Guard guard; return new af::array(af::loadImage(fn.c_str(), isColor)); }); } ARRAYFIRE_CATCH; } @@ -72,7 +72,7 @@ NAN_METHOD(SaveImage) auto array = *ArrayWrapper::GetArrayAt(info, 1); auto exec = [=]() { - Guard(); + Guard guard; af::saveImage(fn.c_str(), array); }; auto worker = new Worker(GetCallback(info), move(exec)); @@ -91,7 +91,7 @@ NAN_METHOD(ColorSpace) auto pArray = ArrayWrapper::GetArrayAt(info, 0); auto to = (af::CSpace)info[1]->Uint32Value(); auto from = (af::CSpace)info[2]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::colorSpace(*pArray, to, from)); } ARRAYFIRE_CATCH; @@ -113,7 +113,7 @@ NAN_METHOD(Regions) af::dtype dtype = f32; if (info.Length() > 1) conn = (af::connectivity)info[1]->Uint32Value(); if (info.Length() > 2) dtype = GetDTypeInfo(info[2]).first; - Guard(); + Guard guard; ArrayWrapper::New(af::regions(*pArray, conn, dtype)); } ARRAYFIRE_CATCH; @@ -130,7 +130,7 @@ NAN_METHOD(Bilateral) float chromaticSigma = info[2]->NumberValue(); bool isColor = false; if (info.Length() > 3) isColor = info[3]->BooleanValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::bilateral(*pArray, spatialSigma, chromaticSigma, isColor)); } ARRAYFIRE_CATCH; @@ -150,7 +150,7 @@ NAN_METHOD(F)\ if (info.Length() > 1) windLength = info[1]->Uint32Value();\ if (info.Length() > 2) windWidth = info[2]->Uint32Value();\ if (info.Length() > 3) edgePad = (af::borderType)info[3]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, windLength, windWidth, edgePad));\ }\ ARRAYFIRE_CATCH;\ @@ -173,7 +173,7 @@ NAN_METHOD(MeanShift) unsigned iter = info[3]->Uint32Value(); bool isColor = false; if (info.Length() > 4) isColor = info[4]->BooleanValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::meanShift(*pArray, spatialSigma, chromaticSigma, iter, isColor)); } ARRAYFIRE_CATCH; @@ -188,7 +188,7 @@ NAN_METHOD(Sobel) auto pArray = ArrayWrapper::GetArrayAt(info, 0); unsigned kerSize = 3; if (info.Length() > 1) kerSize = info[1]->Uint32Value(); - Guard(); + Guard guard; af::array dx, dy; af::sobel(dx, dy, *pArray, kerSize); auto result = Nan::New(); @@ -213,7 +213,7 @@ NAN_METHOD(Histogram) double maxval = numeric_limits::max(); if (info.Length() > 2) minval = info[2]->NumberValue(); if (info.Length() > 3) maxval = info[3]->NumberValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::histogram(*pArray, nbins, minval, maxval)); } ARRAYFIRE_CATCH; @@ -232,7 +232,7 @@ NAN_METHOD(Resize) dim_t odim0 = info[1]->Uint32Value(); dim_t odim1 = info[2]->Uint32Value(); if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::resize(*pIn, odim0, odim1, method)); } else @@ -242,7 +242,7 @@ NAN_METHOD(Resize) { float scale = info[0]->NumberValue(); if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::resize(scale, *pIn, method)); } else @@ -251,7 +251,7 @@ NAN_METHOD(Resize) float scale1 = info[1]->NumberValue(); pIn = ArrayWrapper::GetArrayAt(info, 2); if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::resize(scale0, scale1, *pIn, method)); } } @@ -271,7 +271,7 @@ NAN_METHOD(Rotate) af::interpType method = AF_INTERP_NEAREST; if (info.Length() > 2) crop = info[2]->BooleanValue(); if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::rotate(*pArray, theta, crop, method)); } ARRAYFIRE_CATCH; @@ -292,7 +292,7 @@ NAN_METHOD(Scale) if (info.Length() > 3) odim0 = info[3]->Uint32Value(); if (info.Length() > 4) odim1 = info[4]->Uint32Value(); if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::scale(*pArray, scale0, scale1, odim0, odim1, method)); } ARRAYFIRE_CATCH; @@ -315,7 +315,7 @@ NAN_METHOD(Skew) if (info.Length() > 4) odim1 = info[4]->Uint32Value(); if (info.Length() > 5) inverse = info[5]->BooleanValue(); if (info.Length() > 6) method = (af::interpType)info[6]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::skew(*pArray, skew0, skew1, odim0, odim1, inverse, method)); } ARRAYFIRE_CATCH; @@ -337,7 +337,7 @@ NAN_METHOD(Transform) if (info.Length() > 3) odim1 = info[3]->Uint32Value(); if (info.Length() > 4) inverse = info[4]->BooleanValue(); if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::transform(*pArray1, *pArray2, odim0, odim1, method, inverse)); } ARRAYFIRE_CATCH; @@ -358,7 +358,7 @@ NAN_METHOD(Translate) if (info.Length() > 3) odim0 = info[3]->Uint32Value(); if (info.Length() > 4) odim1 = info[4]->Uint32Value(); if (info.Length() > 5) method = (af::interpType)info[5]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::translate(*pArray, trans0, trans1, odim0, odim1, method)); } ARRAYFIRE_CATCH; @@ -381,7 +381,7 @@ NAN_METHOD(GaussianKernel) double sigC = 0; if (info.Length() > 2) sigR = info[2]->NumberValue(); if (info.Length() > 3) sigC = info[3]->NumberValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::gaussianKernel(rows, cols, sigR, sigC)); } ARRAYFIRE_CATCH; diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index 644c601..09ba0c2 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -53,7 +53,7 @@ NAN_METHOD(Dot) af::matProp optRhs = AF_MAT_NONE; if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::dot(*pArray1, *pArray2, optLhs, optRhs))); } ARRAYFIRE_CATCH; @@ -74,7 +74,7 @@ NAN_METHOD(MatMul) af::matProp optRhs = AF_MAT_NONE; if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, optLhs, optRhs))); } else @@ -82,12 +82,12 @@ NAN_METHOD(MatMul) auto pArray4 = (info.Length() > 3) ? ArrayWrapper::TryGetArrayAt(info, 3) : nullptr; if (pArray4 == nullptr) { - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3))); } else { - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3, *pArray4))); } } @@ -113,7 +113,7 @@ NAN_METHOD(Solve) auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matProp options = AF_MAT_NONE; if (info.Length() > 2) options = (af::matProp)info[2]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); } ARRAYFIRE_CATCH; @@ -130,7 +130,7 @@ NAN_METHOD(SolveLU) auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::matProp options = AF_MAT_NONE; if (info.Length() > 3) options = (af::matProp)info[3]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); } ARRAYFIRE_CATCH; @@ -149,7 +149,7 @@ NAN_METHOD(Cholesky) typedef Worker WorkerT; auto exec = [=]() { - Guard(); + Guard guard; af::array out; int r = af::cholesky(out, array, isUpper); return move(make_pair(out, r)); @@ -177,7 +177,7 @@ NAN_METHOD(CholeskyInPlace) auto array = *ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; if (info.Length() > 1) isUpper = info[1]->BooleanValue(); - Nan::AsyncQueueWorker(new Worker(GetCallback(info), [=]() mutable { Guard(); return af::choleskyInPlace(array, isUpper); })); + Nan::AsyncQueueWorker(new Worker(GetCallback(info), [=]() mutable { Guard guard; return af::choleskyInPlace(array, isUpper); })); info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; @@ -192,7 +192,7 @@ NAN_METHOD(LuPacked) auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - Guard(); + Guard guard; af::array out, pivot; af::lu(out, pivot, (const af::array&)*pArray, isLapackPiv); auto result = Nan::New(); @@ -210,7 +210,7 @@ NAN_METHOD(Lu) { ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard guard; af::array lower, upper, pivot; af::lu(lower, upper, pivot, *pArray); auto result = Nan::New(); @@ -231,7 +231,7 @@ NAN_METHOD(LuInPlace) auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - Guard(); + Guard guard; af::array pivot; af::luInPlace(pivot, *pArray, isLapackPiv); info.GetReturnValue().Set(ArrayWrapper::New(pivot)); @@ -246,7 +246,7 @@ NAN_METHOD(QrPacked) { ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard guard; af::array out, tau; af::qr(out, tau, *pArray); auto result = Nan::New(); @@ -264,7 +264,7 @@ NAN_METHOD(Qr) { ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard guard; af::array q, r, tau; af::qr(q, r, tau, *pArray); auto result = Nan::New(); @@ -283,7 +283,7 @@ NAN_METHOD(QrInPlace) { ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard guard; af::array tau; af::qrInPlace(tau, *pArray); info.GetReturnValue().Set(ArrayWrapper::New(tau)); @@ -301,14 +301,14 @@ NAN_METHOD(Det) auto array = *ArrayWrapper::GetArrayAt(info, 0); if (NeedsDouble(array)) { - auto exec = [=]() { Guard(); return af::det(array); }; + auto exec = [=]() { Guard guard; return af::det(array); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); } else { - auto exec = [=]() { Guard(); return af::det(array); }; + auto exec = [=]() { Guard guard; return af::det(array); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); @@ -326,7 +326,7 @@ NAN_METHOD(Inverse) auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::matProp options = AF_MAT_NONE; if (info.Length() > 1) options = (af::matProp)info[1]->Uint32Value(); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::inverse(*pArray, options))); } ARRAYFIRE_CATCH; @@ -346,7 +346,7 @@ NAN_METHOD(Norm) if (info.Length() > 1) type = (af::normType)info[1]->Uint32Value(); if (info.Length() > 2) p = info[2]->NumberValue(); if (info.Length() > 3) q = info[3]->NumberValue(); - auto exec = [=]() { Guard(); return af::norm(array, type, p, q); }; + auto exec = [=]() { Guard guard; return af::norm(array, type, p, q); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); @@ -364,7 +364,7 @@ NAN_METHOD(Rank) auto array = *ArrayWrapper::GetArrayAt(info, 0); double tol = 1E-5; if (info.Length() > 1) tol = info[1]->NumberValue(); - auto exec = [=]() { Guard(); return af::rank(array, tol); }; + auto exec = [=]() { Guard guard; return af::rank(array, tol); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); diff --git a/src/moveandreorderarray.cpp b/src/moveandreorderarray.cpp index 9186d4a..ab345cf 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -51,7 +51,7 @@ NAN_METHOD(Join) af::dtype dim = GetDTypeInfo(info[0]).first; auto pArray1 = ArrayWrapper::GetArrayAt(info, 1); auto pArray2 = ArrayWrapper::GetArrayAt(info, 2); - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::join(dim, *pArray1, *pArray2)));; } ARRAYFIRE_CATCH @@ -77,7 +77,7 @@ NAN_METHOD(Flip) auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::dtype dim = GetDTypeInfo(info[1]).first; - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::flip(*pArray, dim)));; } ARRAYFIRE_CATCH diff --git a/src/signalprocessing.cpp b/src/signalprocessing.cpp index a21b6c2..aa1110f 100644 --- a/src/signalprocessing.cpp +++ b/src/signalprocessing.cpp @@ -51,7 +51,7 @@ NAN_METHOD(ConvolveSeparable) auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::convMode mode = AF_CONV_DEFAULT; if (info.Length() > 3) mode = (af::convMode)info[3]->Uint32Value(); - Guard(); + Guard guard; ArrayWrapper::New(af::convolve(*pArray1, *pArray2, *pArray3, mode)); } ARRAYFIRE_CATCH; @@ -70,7 +70,7 @@ NAN_METHOD(F)\ af::convDomain domain = AF_CONV_AUTO;\ if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ if (info.Length() > 3) domain = (af::convDomain)info[3]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode, domain));\ }\ ARRAYFIRE_CATCH;\ @@ -93,7 +93,7 @@ NAN_METHOD(F)\ auto pArray2 = ArrayWrapper::GetArrayAt(info, 1);\ af::convMode mode = AF_CONV_DEFAULT;\ if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode));\ }\ ARRAYFIRE_CATCH;\ @@ -115,7 +115,7 @@ NAN_METHOD(F)\ double factor = info[1]->NumberValue();\ dim_t odim0 = 0;\ if (info.Length() > 2) odim0 = info[2]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, factor, odim0));\ }\ ARRAYFIRE_CATCH;\ @@ -135,7 +135,7 @@ NAN_METHOD(F)\ auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ dim_t odim0 = 0;\ if (info.Length() > 1) odim0 = info[1]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, odim0));\ }\ ARRAYFIRE_CATCH;\ @@ -155,17 +155,17 @@ NAN_METHOD(F)\ auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ if (info.Length() == 1)\ {\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray));\ }\ else if (info.Length() == 2)\ {\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, ToDim4(info[1])));\ }\ else if (info.Length() == 3)\ {\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, info[1]->NumberValue(), ToDim4(info[2])));\ }\ else \ @@ -192,7 +192,7 @@ NAN_METHOD(F)\ dim_t dim1 = 0;\ if (info.Length() > 1) dim0 = info[1]->Uint32Value();\ if (info.Length() > 2) dim1 = info[2]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, dim0, dim1));\ }\ ARRAYFIRE_CATCH;\ @@ -216,7 +216,7 @@ NAN_METHOD(F)\ if (info.Length() > 1) dim0 = info[1]->Uint32Value();\ if (info.Length() > 2) dim1 = info[2]->Uint32Value();\ if (info.Length() > 3) dim2 = info[3]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, dim0, dim1, dim2));\ }\ ARRAYFIRE_CATCH;\ @@ -239,7 +239,7 @@ NAN_METHOD(F)\ dim_t dim1 = 0;\ if (info.Length() > 2) dim0 = info[2]->Uint32Value();\ if (info.Length() > 3) dim1 = info[3]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1));\ }\ ARRAYFIRE_CATCH;\ @@ -264,7 +264,7 @@ NAN_METHOD(F)\ if (info.Length() > 2) dim0 = info[2]->Uint32Value();\ if (info.Length() > 3) dim1 = info[3]->Uint32Value();\ if (info.Length() > 4) dim2 = info[4]->Uint32Value();\ - Guard();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1, dim2));\ }\ ARRAYFIRE_CATCH;\ @@ -290,7 +290,7 @@ NAN_METHOD(Approx1) float offGrid = 0.0f; if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); if (info.Length() > 3) offGrid = info[3]->NumberValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::approx1(*pArray1, *pArray2, method, offGrid)); } ARRAYFIRE_CATCH; @@ -309,7 +309,7 @@ NAN_METHOD(Approx2) float offGrid = 0.0f; if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); if (info.Length() > 4) offGrid = info[4]->NumberValue(); - Guard(); + Guard guard; ArrayWrapper::New(af::approx2(*pArray1, *pArray2, *pArray3, method, offGrid)); } ARRAYFIRE_CATCH; diff --git a/src/statistics.cpp b/src/statistics.cpp index fc812af..58b6189 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -59,20 +59,20 @@ NAN_METHOD(Var) if (info.Length() > 3) { int dim = info[2]->Int32Value(); - return ArrayWrapper::NewAsync(info, [=]() { Guard(); return new af::array(af::var(array, biased, dim)); }); + return ArrayWrapper::NewAsync(info, [=]() { Guard guard; return new af::array(af::var(array, biased, dim)); }); } else { if (NeedsDouble(array)) { - auto exec = [=]() { Guard(); return af::var(array, biased); }; + auto exec = [=]() { Guard guard; return af::var(array, biased); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); } else { - auto exec = [=]() { Guard(); return af::var(array, biased); }; + auto exec = [=]() { Guard guard; return af::var(array, biased); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); @@ -95,14 +95,14 @@ NAN_METHOD(CorrCoef) auto array2 = *ArrayWrapper::GetArrayAt(info, 1); if (NeedsDouble(array1)) { - auto exec = [=]() { Guard(); return af::corrcoef(array1, array2); }; + auto exec = [=]() { Guard guard; return af::corrcoef(array1, array2); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); } else { - auto exec = [=]() { Guard(); return af::corrcoef(array1, array2); }; + auto exec = [=]() { Guard guard; return af::corrcoef(array1, array2); }; auto worker = new Worker(GetCallback(info), std::move(exec)); Nan::AsyncQueueWorker(worker); info.GetReturnValue().SetUndefined(); diff --git a/src/vectoralgorithms.cpp b/src/vectoralgorithms.cpp index 22fdf27..ae67bbc 100644 --- a/src/vectoralgorithms.cpp +++ b/src/vectoralgorithms.cpp @@ -68,7 +68,7 @@ NAN_METHOD(Sort) { asc = info[2]->BooleanValue(); } - Guard(); + Guard guard; info.GetReturnValue().Set(ArrayWrapper::New(af::sort(*pArray, dim, asc)));; } ARRAYFIRE_CATCH @@ -93,7 +93,7 @@ NAN_METHOD(SortByKey) asc = info[3]->BooleanValue(); } - Guard(); + Guard guard; af::array outKeys, outValues; af::sort(outKeys, outValues, *pKeys, *pValues, dim, asc); @@ -124,7 +124,7 @@ NAN_METHOD(SortIndex) asc = info[2]->BooleanValue(); } - Guard(); + Guard guard; af::array outValues, outIndices; af::sort(outValues, outIndices, *pArray, dim, asc); @@ -152,7 +152,7 @@ NAN_METHOD(Grad) ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard guard; af::array dx, dy; af::grad(dx, dy, *pArray); From 4093f596803f9865e3959bc7f88656cda0c4b1e9 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 1 Sep 2015 14:23:00 +0200 Subject: [PATCH 09/45] more async functions --- src/computervision.cpp | 109 +++++++++++++------ src/linearalgebra.cpp | 232 +++++++++++++++++++++++++++++------------ 2 files changed, 247 insertions(+), 94 deletions(-) diff --git a/src/computervision.cpp b/src/computervision.cpp index 45dca1f..9d298f8 100644 --- a/src/computervision.cpp +++ b/src/computervision.cpp @@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "arraywrapper.h" #include "errors.h" #include "guard.h" +#include "worker.h" using namespace v8; using namespace std; @@ -45,8 +46,8 @@ NAN_METHOD(Orb) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); float fastThr=20.f; unsigned maxFeat=400; float sclFctr=1.5f; @@ -72,14 +73,26 @@ NAN_METHOD(Orb) { blurImg = info[5]->BooleanValue(); } - Guard guard; - af::features feat; - af::array desc; - af::orb(feat, desc, *pArray, fastThr, maxFeat, sclFctr, levels, blurImg); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Feat), ToV8Features(feat)); - result->Set(Nan::New(Symbols::Desc), ArrayWrapper::New(desc)); - info.GetReturnValue().Set(result); + typedef std::pair result_t; + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + result_t result; + af::orb(result.first, result.second, array, fastThr, maxFeat, sclFctr, levels, blurImg); + return result; + }; + auto conv = [=](worker_t* worker, const result_t& r) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Feat), ToV8Features(r.first)); + result->Set(Nan::New(Symbols::Desc), ArrayWrapper::New(r.second)); + return scope.Escape(result); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -89,8 +102,8 @@ NAN_METHOD(Fast) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); float thr=20.0f; unsigned arcLength=9; bool nonMax=true; @@ -116,9 +129,20 @@ NAN_METHOD(Fast) { edge = info[5]->Uint32Value(); } - Guard guard; - auto feat = af::fast(*pArray, thr, arcLength, nonMax, featureRatio, edge); - info.GetReturnValue().Set(ToV8Features(feat)); + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + return af::fast(array, thr, arcLength, nonMax, featureRatio, edge); + }; + auto conv = [=](worker_t* worker, const af::features& feat) + { + return ToV8Features(feat); + }; + + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -128,9 +152,9 @@ NAN_METHOD(HammingMatcher) try { - ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(3); + auto array1 = *ArrayWrapper::GetArrayAt(info, 0); + auto array2 = *ArrayWrapper::GetArrayAt(info, 1); dim_t distDim = 0; unsigned nDist = 1; if (info.Length() > 2) @@ -141,13 +165,26 @@ NAN_METHOD(HammingMatcher) { nDist = info[3]->Uint32Value(); } - Guard guard; - af::array idx, dist; - af::hammingMatcher(idx, dist, *pArray1, *pArray2, distDim, nDist); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Idx), ArrayWrapper::New(idx)); - result->Set(Nan::New(Symbols::Dist), ArrayWrapper::New(dist)); - info.GetReturnValue().Set(result); + typedef std::pair result_t; + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + result_t result; + af::hammingMatcher(result.first, result.second, array1, array2, distDim, nDist); + return result; + }; + auto conv = [=](worker_t* worker, const result_t& r) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Idx), ArrayWrapper::New(r.first)); + result->Set(Nan::New(Symbols::Dist), ArrayWrapper::New(r.second)); + return scope.Escape(result); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -157,16 +194,28 @@ NAN_METHOD(MatchTemplate) try { - ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(3); + auto array1 = *ArrayWrapper::GetArrayAt(info, 0); + auto array2 = *ArrayWrapper::GetArrayAt(info, 1); af::matchType mType = AF_SAD; if (info.Length() > 2) { mType = (af::matchType)(info[2]->Uint32Value()); } - Guard guard; - info.GetReturnValue().Set(ArrayWrapper::New(af::matchTemplate(*pArray1, *pArray2, mType))); + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + return af::matchTemplate(array1, array2, mType); + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index 09ba0c2..fec6373 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -108,13 +108,25 @@ NAN_METHOD(Solve) try { - ARGS_LEN(2); - auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(3); + auto array1 = *ArrayWrapper::GetArrayAt(info, 0); + auto array2 = *ArrayWrapper::GetArrayAt(info, 1); af::matProp options = AF_MAT_NONE; if (info.Length() > 2) options = (af::matProp)info[2]->Uint32Value(); - Guard guard; - info.GetReturnValue().Set(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + return af::solve(array1, array2, options); + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -124,14 +136,25 @@ NAN_METHOD(SolveLU) try { - ARGS_LEN(3); - auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); - auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); - auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); + ARGS_LEN(4); + auto array1 = *ArrayWrapper::GetArrayAt(info, 0); + auto array2 = *ArrayWrapper::GetArrayAt(info, 1); + auto array3 = *ArrayWrapper::GetArrayAt(info, 2); af::matProp options = AF_MAT_NONE; if (info.Length() > 3) options = (af::matProp)info[3]->Uint32Value(); - Guard guard; - info.GetReturnValue().Set(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); + typedef Worker worker_t; + auto exec = [=]() + { + Guard guard; + return af::solveLU(array1, array2, array3, options); + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -188,17 +211,29 @@ NAN_METHOD(LuPacked) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - Guard guard; - af::array out, pivot; - af::lu(out, pivot, (const af::array&)*pArray, isLapackPiv); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); - result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); - info.GetReturnValue().Set(result); + typedef pair ResultT; + typedef Worker WorkerT; + auto exec = [=]() + { + Guard guard; + af::array out, pivot; + af::lu(out, pivot, array, isLapackPiv); + return move(make_pair(out, pivot)); + }; + auto conv = [=](WorkerT* w, ResultT v) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(v.second)); + return scope.Escape(result); + }; + Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -208,16 +243,28 @@ NAN_METHOD(Lu) try { - ARGS_LEN(1); + ARGS_LEN(2); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard guard; - af::array lower, upper, pivot; - af::lu(lower, upper, pivot, *pArray); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Lower), ArrayWrapper::New(lower)); - result->Set(Nan::New(Symbols::Upper), ArrayWrapper::New(upper)); - result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); - info.GetReturnValue().Set(result); + typedef tuple ResultT; + typedef Worker WorkerT; + auto exec = [=]() + { + Guard guard; + af::array lower, upper, pivot; + af::lu(lower, upper, pivot, *pArray); + return move(make_tuple(lower, upper, pivot)); + }; + auto conv = [=](WorkerT* w, ResultT v) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Lower), ArrayWrapper::New(get<0>(v))); + result->Set(Nan::New(Symbols::Upper), ArrayWrapper::New(get<1>(v))); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(get<2>(v))); + return scope.Escape(result); + }; + Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -227,14 +274,25 @@ NAN_METHOD(LuInPlace) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - Guard guard; - af::array pivot; - af::luInPlace(pivot, *pArray, isLapackPiv); - info.GetReturnValue().Set(ArrayWrapper::New(pivot)); + typedef Worker worker_t; + auto exec = [=]() mutable + { + Guard guard; + af::array pivot; + af::luInPlace(pivot, array, isLapackPiv); + return pivot; + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -244,15 +302,27 @@ NAN_METHOD(QrPacked) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard guard; - af::array out, tau; - af::qr(out, tau, *pArray); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); - result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); - info.GetReturnValue().Set(result); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); + typedef pair ResultT; + typedef Worker WorkerT; + auto exec = [=]() + { + Guard guard; + af::array out, tau; + af::qr(out, tau, array); + return move(make_pair(out, tau)); + }; + auto conv = [=](WorkerT* w, ResultT v) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(v.second)); + return scope.Escape(result); + }; + Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -262,16 +332,28 @@ NAN_METHOD(Qr) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard guard; - af::array q, r, tau; - af::qr(q, r, tau, *pArray); - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Q), ArrayWrapper::New(q)); - result->Set(Nan::New(Symbols::R), ArrayWrapper::New(r)); - result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); - info.GetReturnValue().Set(result); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); + typedef tuple ResultT; + typedef Worker WorkerT; + auto exec = [=]() + { + Guard guard; + af::array q, r, tau; + af::qr(q, r, tau, array); + return move(make_tuple(q, r, tau)); + }; + auto conv = [=](WorkerT* w, ResultT v) + { + Nan::EscapableHandleScope scope; + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Q), ArrayWrapper::New(get<0>(v))); + result->Set(Nan::New(Symbols::R), ArrayWrapper::New(get<1>(v))); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(get<2>(v))); + return scope.Escape(result); + }; + Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -281,12 +363,23 @@ NAN_METHOD(QrInPlace) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard guard; - af::array tau; - af::qrInPlace(tau, *pArray); - info.GetReturnValue().Set(ArrayWrapper::New(tau)); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); + typedef Worker worker_t; + auto exec = [=]() mutable + { + Guard guard; + af::array tau; + af::qrInPlace(tau, array); + return tau; + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -322,12 +415,23 @@ NAN_METHOD(Inverse) try { - ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(2); + auto array = *ArrayWrapper::GetArrayAt(info, 0); af::matProp options = AF_MAT_NONE; if (info.Length() > 1) options = (af::matProp)info[1]->Uint32Value(); - Guard guard; - info.GetReturnValue().Set(ArrayWrapper::New(af::inverse(*pArray, options))); + typedef Worker worker_t; + auto exec = [=]() mutable + { + Guard guard; + return af::inverse(array, options); + }; + auto conv = [=](worker_t* worker, const af::array& arr) + { + return ArrayWrapper::New(arr); + }; + auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } From fc202485d118bfd9cd889236bf073fbd2e797275 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 1 Sep 2015 14:28:28 +0200 Subject: [PATCH 10/45] notice added to readme --- README.md | 6 +++++- package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59ea399..8679771 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +# NOTICE: The next release (0.16) will rename this module as arrayfire-js + +The old `arrayfire_js` module will be available on the npm for a while. + # ArrayFire.js **Please follow [this issue](https://github.com/arrayfire/arrayfire_js/issues/1) for tracking the progress towards release of 1.0.0-beta.** @@ -122,7 +126,7 @@ Performance on Linux Mint x64, i5 3570, Radeon R9: ## API Docs -[http://arrayfire.github.io/arrayfire_js](http://arrayfire.github.io/arrayfire_js/) +[http://arrayfire.github.io/arrayfire_js](http://arrayfire.github.io/arrayfire-js/) ## Wanna Contribute? diff --git a/package.json b/package.json index d541b93..023d9ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire_js", - "version": "0.15.0", + "version": "0.15.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { From b1d873d9a1c21322287a6b8476e6b78ffb487854 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sat, 17 Oct 2015 21:56:48 +0200 Subject: [PATCH 11/45] 0.15.2 - minor fixes, CMake.js 2.0 compatibility --- changelog.md | 5 +++++ examples/es5/common/index.js | 6 +++--- lib/es5/ext.js | 4 ++-- lib/es5/index.js | 4 ++-- lib/index.js | 2 +- package.json | 11 +++++------ src/helpers.cpp | 3 ++- tests/es5/deviceTests.js | 4 ++-- tests/index.js | 2 +- 9 files changed, 23 insertions(+), 18 deletions(-) diff --git a/changelog.md b/changelog.md index d8c8cbe..d35561c 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +# 0.15.2 (2015-08-29) + +- CMake.js 2.0.0 support +- Fix: pre io.js - traceur-runtime replaced to traceur module + # 0.15.0 (2015-08-29) - NAN 2.0 compatibility diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index 78848cb..df01349 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -31,7 +31,7 @@ var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__8(pla $ctx.state = 18; break; case 18: - $__2 = void 0, $__1 = (afOfPlatform.getDevices())[$traceurRuntime.toProperty(Symbol.iterator)](); + $__2 = void 0, $__1 = (afOfPlatform.getDevices())[Symbol.iterator](); $ctx.state = 14; break; case 14: @@ -139,7 +139,7 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ $ctx.state = 13; break; case 13: - $__2 = void 0, $__1 = (platfroms)[$traceurRuntime.toProperty(Symbol.iterator)](); + $__2 = void 0, $__1 = (platfroms)[Symbol.iterator](); $ctx.state = 9; break; case 9: @@ -286,4 +286,4 @@ module.exports = { runOnBestDevice: runOnBestDevice, printDeviceInfo: printDeviceInfo }; -//# sourceMappingURL=data:application/json;base64,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Q0FBQzs7QUE3RTdDLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBVSxVQUFTLENBQUc7QUFDeEMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25CZXN0RGV2aWNlID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgbGV0IG9yZGVyID0gW1wiQ1VEQVwiLCBcIk9wZW5DTFwiLCBcIkNQVVwiXTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGJlc3QgYXZhaWxhYmxlIGRldmljZS5cXG5gKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAoXyhwbGF0ZnJvbXMpLmNvbnRhaW5zKG9yZGVyWzBdKSkge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzBdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMV0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMV0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKG9yZGVyWzJdLCBmLCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIH1cbn0pO1xuXG5sZXQgcHJpbnREZXZpY2VJbmZvID0gZnVuY3Rpb24gKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 +//# sourceMappingURL=data:application/json;base64,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T0FBTyxBQUFDLEVBQUMsQ0FBQzs7OztBQUNDLGFBQUcsT0FBTyxBQUFDLEVBQUMsQ0FBQztBQUNiLGFBQUcsaUJBQWlCLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLFlBQW9CLENBQUEsSUFBRyxnQkFBZ0IsQ0FBQzs7OztBQThFOUMsZ0JBQU0sTUFBTSxBQUFDLENBQUMsQ0FBQSxNQUFNLENBQUMsQ0FBQzs7OztBQWpGOUIsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUFpRnRDLENBbkZ1RCxDQW1GdEQsQ0FBQztBQUVGLEFBQUksRUFBQSxDQUFBLGVBQWMsRUFBSSxVQUFVLFVBQVMsQ0FBRztBQUN4QyxRQUFNLElBQUksQUFBQyxFQUFDLE1BQU0sRUFBQyxDQUFBLFVBQVMsR0FBRyxFQUFDLFdBQVUsRUFBQyxDQUFBLFVBQVMsS0FBSyxFQUFDLGVBQWMsRUFBQyxDQUFBLFVBQVMsU0FBUyxFQUFDLGNBQWEsRUFBQyxDQUFBLFVBQVMsUUFBUSxFQUFDLGNBQWEsRUFBQyxDQUFBLFVBQVMsUUFBUSxFQUFHLENBQUM7QUFDbkssQ0FBQztBQUVELEtBQUssUUFBUSxFQUFJO0FBQ2Isa0JBQWdCLENBQUcsa0JBQWdCO0FBQ25DLGdCQUFjLENBQUcsZ0JBQWM7QUFDL0IsZ0JBQWMsQ0FBRyxnQkFBYztBQUFBLEFBQ25DLENBQUM7QUFDRCIsImZpbGUiOiJjb21tb24vaW5kZXguanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGFmID0gcmVxdWlyZShcIi4uLy4uLy4uXCIpO1xubGV0IHV0aWwgPSByZXF1aXJlKFwidXRpbFwiKTtcbmxldCBub3cgPSByZXF1aXJlKFwicGVyZm9ybWFuY2Utbm93XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG5sZXQgcnVuT25EZXZpY2VzID0gYXN5bmMoZnVuY3Rpb24qKHBsYXRmb3JtSUQsIGYsIG9uSUQpIHtcbiAgICBsZXQgYWZPZlBsYXRmb3JtID0gYWYocGxhdGZvcm1JRCk7XG4gICAgZm9yIChsZXQgZGV2aWNlSW5mbyBvZiBhZk9mUGxhdGZvcm0uZ2V0RGV2aWNlcygpKSB7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG9uSUQpIHx8IG9uSUQgPT09IGRldmljZUluZm8uaWQpIHtcbiAgICAgICAgICAgIGFmT2ZQbGF0Zm9ybS5zZXREZXZpY2UoZGV2aWNlSW5mby5pZCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgICAgICAgICAgeWllbGQgZihhZk9mUGxhdGZvcm0sIGRldmljZUluZm8pO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gbm93KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuLS0gdG9vayAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCgxMCl9IHNlY29uZHNcXG5gKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25BbGxQbGF0Zm9ybXMgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGFsbCBzdXBwb3J0ZWQgcGxhdGZyb21zOiAke3BsYXRmcm9tcy5qb2luKFwiLCBcIil9XFxuYCk7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgcGxhdGZyb21zKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMoaWQsIGYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBydW5PbkJlc3REZXZpY2UgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBsZXQgb3JkZXIgPSBbXCJDVURBXCIsIFwiT3BlbkNMXCIsIFwiQ1BVXCJdO1xuICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nICR7bmFtZX0gb24gYmVzdCBhdmFpbGFibGUgZGV2aWNlLlxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMF0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMF0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF8ocGxhdGZyb21zKS5jb250YWlucyhvcmRlclsxXSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHJ1bk9uRGV2aWNlcyhvcmRlclsxXSwgZiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMl0sIGYsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBwcmludERldmljZUluZm8gPSBmdW5jdGlvbiAoZGV2aWNlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKGBJRDogJHtkZXZpY2VJbmZvLmlkfVxcbk5hbWU6ICR7ZGV2aWNlSW5mby5uYW1lfVxcblBsYXRmb3JtOiAke2RldmljZUluZm8ucGxhdGZvcm19XFxuVG9vbGtpdDogJHtkZXZpY2VJbmZvLnRvb2xraXR9XFxuQ29tcHV0ZTogJHtkZXZpY2VJbmZvLmNvbXB1dGV9YCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBydW5PbkFsbFBsYXRmb3JtczogcnVuT25BbGxQbGF0Zm9ybXMsXG4gICAgcnVuT25CZXN0RGV2aWNlOiBydW5PbkJlc3REZXZpY2UsXG4gICAgcHJpbnREZXZpY2VJbmZvOiBwcmludERldmljZUluZm9cbn07XG4iXX0= diff --git a/lib/es5/ext.js b/lib/es5/ext.js index 3e6639d..52608f2 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -46,7 +46,7 @@ function installAsyncAndSync(af, obj, name) { var $__6 = undefined; try { for (var $__2 = void 0, - $__1 = (_.keys(obj))[$traceurRuntime.toProperty(Symbol.iterator)](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { + $__1 = (_.keys(obj))[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { var key = $__2.value; { installAsyncAndSync(af, obj, key); @@ -231,4 +231,4 @@ function ext(af) { }); } module.exports = ext; -//# sourceMappingURL=data:application/json;base64,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Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBpbnZva2VHQyhhZikge1xuICAgIGFmLmdjKGdjVGltZSk7XG59XG5cbmZ1bmN0aW9uIHN5bmNocm9uaWZ5KGFmLCBmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycjtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgcmVzID0gcjtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBhcmdzID0gXy50b0FycmF5KGFyZ3VtZW50cykuY29uY2F0KGNiKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgZi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkgYWYuX2RvRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmx1ZWJpcmQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3V0T2ZNZW1vcnlFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiU3luY1wiXSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZSArIFwiU3luY1wiXSA9IHN5bmNocm9uaWZ5KGFmLCBmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHQoYWYpIHtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZik7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheSk7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYuQUZBcnJheS5wcm90b3R5cGUpO1xuXG4gICAgXy5leHRlbmQoYWYsIHtcbiAgICAgICAgZW5kOiAtMSxcbiAgICAgICAgc3BhbjogbnVsbCxcbiAgICAgICAgYWxsOiAtMSxcbiAgICAgICAgZHR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBkVHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIHNvdXJjZTogcmVxdWlyZShcIi4vc291cmNlXCIpLFxuICAgICAgICBtYXRjaFR5cGU6IHJlcXVpcmUoXCIuL21hdGNoVHlwZVwiKSxcbiAgICAgICAgY1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIENTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBjb25uZWN0aXZpdHk6IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eVwiKSxcbiAgICAgICAgYm9yZGVyVHlwZTogcmVxdWlyZShcIi4vYm9yZGVyVHlwZVwiKSxcbiAgICAgICAgaW50ZXJwVHlwZTogcmVxdWlyZShcIi4vaW50ZXJwVHlwZVwiKSxcbiAgICAgICAgbWF0UHJvcDogcmVxdWlyZShcIi4vbWF0UHJvcFwiKSxcbiAgICAgICAgbm9ybVR5cGU6IHJlcXVpcmUoXCIuL25vcm1UeXBlXCIpLFxuICAgICAgICBjb252TW9kZTogcmVxdWlyZShcIi4vY29udk1vZGVcIiksXG4gICAgICAgIGNvbnZEb21haW46IHJlcXVpcmUoXCIuL2NvbnZEb21haW5cIiksXG4gICAgICAgIERpbTQ6IHJlcXVpcmUoXCIuL2RpbTRcIiksXG4gICAgICAgIFNlcTogcmVxdWlyZShcIi4vc2VxXCIpLFxuICAgICAgICBDb21wbGV4OiByZXF1aXJlKFwiLi9jb21wbGV4XCIpLFxuICAgICAgICBSb3c6IHJlcXVpcmUoXCIuL3Jvd1wiKSxcbiAgICAgICAgQ29sOiByZXF1aXJlKFwiLi9jb2xcIiksXG4gICAgICAgIFJvd3M6IHJlcXVpcmUoXCIuL3Jvd3NcIiksXG4gICAgICAgIENvbHM6IHJlcXVpcmUoXCIuL2NvbHNcIiksXG4gICAgICAgIGdldERldmljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5nZXREZXZpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5nZXREZXZpY2VDb3VudCgpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoaSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5kZXZpY2VJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZm8uaWQgPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZm9yOiByZXF1aXJlKFwiLi9tYWtlR2ZvclwiKShhZilcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHQ7Il19 +//# sourceMappingURL=data:application/json;base64,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b3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xuXG5jb25zdCByZXRyeUNvdW50ID0gNTtcbmNvbnN0IGdjVGltZSA9IDEwMDA7XG5cbmZ1bmN0aW9uIGlzT3V0T2ZNZW1vcnlFcnJvcihlKSB7XG4gICAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKFwiOTk4XCIpID4gMDtcbn1cblxuZnVuY3Rpb24gaW52b2tlR0MoYWYpIHtcbiAgICBhZi5nYyhnY1RpbWUpO1xufVxuXG5mdW5jdGlvbiBzeW5jaHJvbmlmeShhZiwgZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlcnI7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHZhciBkb25lO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIHJlcyA9IHI7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpLmNvbmNhdChjYik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGYuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB3aGlsZSAoIWRvbmUpIGFmLl9kb0V2ZW50cygpO1xuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycikgdGhyb3cgZXJyO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgb2JqLCBuYW1lKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgICAgICAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSBcIkFGQXJyYXlcIikge1xuICAgICAgICBsZXQgZiA9IG9ialtuYW1lXTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihmKSkge1xuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIkFzeW5jXCJdKSkge1xuICAgICAgICAgICAgICAgIG9ialtuYW1lICsgXCJBc3luY1wiXSA9IGFzeW5jKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3MgPSBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsdWViaXJkKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIGNhbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIlN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIlN5bmNcIl0gPSBzeW5jaHJvbmlmeShhZiwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVyciA9IG51bGw7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPdXRPZk1lbW9yeUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZXh0KGFmKSB7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYpO1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmLkFGQXJyYXkpO1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmLkFGQXJyYXkucHJvdG90eXBlKTtcblxuICAgIF8uZXh0ZW5kKGFmLCB7XG4gICAgICAgIGVuZDogLTEsXG4gICAgICAgIHNwYW46IG51bGwsXG4gICAgICAgIGFsbDogLTEsXG4gICAgICAgIGR0eXBlOiByZXF1aXJlKFwiLi9kdHlwZVwiKSxcbiAgICAgICAgZFR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBzb3VyY2U6IHJlcXVpcmUoXCIuL3NvdXJjZVwiKSxcbiAgICAgICAgbWF0Y2hUeXBlOiByZXF1aXJlKFwiLi9tYXRjaFR5cGVcIiksXG4gICAgICAgIGNTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBDU3BhY2U6IHJlcXVpcmUoXCIuL2NTcGFjZVwiKSxcbiAgICAgICAgY29ubmVjdGl2aXR5OiByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHlcIiksXG4gICAgICAgIGJvcmRlclR5cGU6IHJlcXVpcmUoXCIuL2JvcmRlclR5cGVcIiksXG4gICAgICAgIGludGVycFR5cGU6IHJlcXVpcmUoXCIuL2ludGVycFR5cGVcIiksXG4gICAgICAgIG1hdFByb3A6IHJlcXVpcmUoXCIuL21hdFByb3BcIiksXG4gICAgICAgIG5vcm1UeXBlOiByZXF1aXJlKFwiLi9ub3JtVHlwZVwiKSxcbiAgICAgICAgY29udk1vZGU6IHJlcXVpcmUoXCIuL2NvbnZNb2RlXCIpLFxuICAgICAgICBjb252RG9tYWluOiByZXF1aXJlKFwiLi9jb252RG9tYWluXCIpLFxuICAgICAgICBEaW00OiByZXF1aXJlKFwiLi9kaW00XCIpLFxuICAgICAgICBTZXE6IHJlcXVpcmUoXCIuL3NlcVwiKSxcbiAgICAgICAgQ29tcGxleDogcmVxdWlyZShcIi4vY29tcGxleFwiKSxcbiAgICAgICAgUm93OiByZXF1aXJlKFwiLi9yb3dcIiksXG4gICAgICAgIENvbDogcmVxdWlyZShcIi4vY29sXCIpLFxuICAgICAgICBSb3dzOiByZXF1aXJlKFwiLi9yb3dzXCIpLFxuICAgICAgICBDb2xzOiByZXF1aXJlKFwiLi9jb2xzXCIpLFxuICAgICAgICBnZXREZXZpY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuZ2V0RGV2aWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZGV2aWNlSW5mbygpO1xuICAgICAgICAgICAgICAgICAgICBpbmZvLmlkID0gaTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERldmljZShjdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2ZvcjogcmVxdWlyZShcIi4vbWFrZUdmb3JcIikoYWYpXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0OyJdfQ== diff --git a/lib/es5/index.js b/lib/es5/index.js index d5abaeb..00e3e2b 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -31,7 +31,7 @@ entry.supportedPlatforms = function() { var $__5 = undefined; try { for (var $__1 = void 0, - $__0 = (["CPU", "CUDA", "OpenCL"])[$traceurRuntime.toProperty(Symbol.iterator)](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { + $__0 = (["CPU", "CUDA", "OpenCL"])[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { var id = $__1.value; { try { @@ -56,4 +56,4 @@ entry.supportedPlatforms = function() { } return platforms; }; -//# sourceMappingURL=data:application/json;base64,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TUFBSTtBQUNGLFNBQUksS0FBaUIsR0FBSyxDQUFBLFdBQXVCLEdBQUssS0FBRyxDQUFHO0FBQzFELGtCQUF3QixBQUFDLEVBQUMsQ0FBQztNQUM3QjtBQUFBLElBQ0YsQ0FBRSxPQUFRO0FBQ1IsY0FBd0I7QUFDdEIsa0JBQXdCO01BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxBQW1ESixPQUFPLFVBQVEsQ0FBQztBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGV4dCA9IHJlcXVpcmUoXCIuL2V4dFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxubGV0IGVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpZCkge1xuICAgIGxldCBkaWQgPSBfLmlzU3RyaW5nKGlkKSA/IGlkLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBkaWQgPSBkaWQgfHwgXCJjcHVcIjtcbiAgICBmdW5jdGlvbiBjcmVhdGVBRigpIHtcbiAgICAgICAgc3dpdGNoIChkaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjcHVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX0NQVVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJjdWRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DVURBXCIpO1xuICAgICAgICAgICAgY2FzZSBcIm9wZW5jbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfT3BlbkNMXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGF0Zm9ybSAnXCIgKyBpZCArIFwiJyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgYWYgPSBjcmVhdGVBRigpO1xuICAgIGlmICghYWYuX19leHRlbmRlZCkge1xuICAgICAgICBleHQoYWYpO1xuICAgICAgICBhZi5fX2V4dGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFmO1xufTtcblxuZW50cnkuc3VwcG9ydGVkUGxhdGZvcm1zID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHBsYXRmb3JtcyA9IFtdO1xuICAgIGZvciAobGV0IGlkIG9mIFtcIkNQVVwiLCBcIkNVREFcIiwgXCJPcGVuQ0xcIl0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmaXJlID0gZW50cnkoaWQpO1xuICAgICAgICAgICAgcGxhdGZvcm1zLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGxhdGZvcm1zO1xufTsiXX0= +//# sourceMappingURL=data:application/json;base64,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Q0FBQSxXQUF1QixHQUFLLEtBQUcsQ0FBRztBQUMxRCxrQkFBd0IsQUFBQyxFQUFDLENBQUM7TUFDN0I7QUFBQSxJQUNGLENBQUUsT0FBUTtBQUNSLGNBQXdCO0FBQ3RCLGtCQUF3QjtNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsQUFtREosT0FBTyxVQUFRLENBQUM7QUFDcEIsQ0FBQztBQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBleHQgPSByZXF1aXJlKFwiLi9leHRcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5cbmxldCBlbnRyeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgZGlkID0gXy5pc1N0cmluZyhpZCkgPyBpZC50cmltKCkudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgZGlkID0gZGlkIHx8IFwiY3B1XCI7XG4gICAgZnVuY3Rpb24gY3JlYXRlQUYoKSB7XG4gICAgICAgIHN3aXRjaCAoZGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwiY3B1XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DUFVcIik7XG4gICAgICAgICAgICBjYXNlIFwiY3VkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfQ1VEQVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJvcGVuY2xcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX09wZW5DTFwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhdGZvcm0gJ1wiICsgaWQgKyBcIicgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGFmID0gY3JlYXRlQUYoKTtcbiAgICBpZiAoIWFmLl9fZXh0ZW5kZWQpIHtcbiAgICAgICAgZXh0KGFmKTtcbiAgICAgICAgYWYuX19leHRlbmRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhZjtcbn07XG5cbmVudHJ5LnN1cHBvcnRlZFBsYXRmb3JtcyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBwbGF0Zm9ybXMgPSBbXTtcbiAgICBmb3IgKGxldCBpZCBvZiBbXCJDUFVcIiwgXCJDVURBXCIsIFwiT3BlbkNMXCJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZmlyZSA9IGVudHJ5KGlkKTtcbiAgICAgICAgICAgIHBsYXRmb3Jtcy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsYXRmb3Jtcztcbn07Il19 diff --git a/lib/index.js b/lib/index.js index 452e722..b295396 100644 --- a/lib/index.js +++ b/lib/index.js @@ -42,6 +42,6 @@ if (es6) { module.exports = require("./es6"); } else { - require("traceur-runtime"); + require("traceur/bin/traceur-runtime"); module.exports = require("./es5"); } \ No newline at end of file diff --git a/package.json b/package.json index 023d9ae..626adba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire_js", - "version": "0.15.1", + "version": "0.15.2", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -9,13 +9,13 @@ }, "dependencies": { "bindings": "*", - "cmake-js": "*", + "cmake-js": "2", "lodash": "*", "nan": "2", - "traceur-runtime": "*" + "traceur": "0" }, "scripts": { - "install": "cmake-js rebuild" + "install": "cmake-js compile" }, "main": "lib/", "devDependencies": { @@ -29,7 +29,6 @@ "merge2": "*", "mocha": "*", "performance-now": "*", - "ref": "*", - "traceur": "*" + "ref": "*" } } diff --git a/src/helpers.cpp b/src/helpers.cpp index a985156..39af10b 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -142,7 +142,8 @@ string ErrToString(af_err err) v8::Local WrapPointer(void* ptr) { Nan::EscapableHandleScope scope; - return scope.Escape(Nan::NewBuffer(reinterpret_cast(ptr), 0, [](char*v1, void*v2) {}, nullptr).ToLocalChecked()); + if (ptr == nullptr) length = 0; + return scope.Escape(Nan::NewBuffer(ptr, length, [](char*v1, void*v2) {}, NULL).ToLocalChecked()); } af::dim4 ToDim4(v8::Local obj) diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index b56cc19..407f7a6 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -17,7 +17,7 @@ function testPlatform(id) { var $__5 = undefined; try { for (var $__1 = void 0, - $__0 = (infos)[$traceurRuntime.toProperty(Symbol.iterator)](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { + $__0 = (infos)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { var info = $__1.value; { assert(_.isString(info.name) && info.name); @@ -62,4 +62,4 @@ describe("device methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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LDhCQUE2QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzlDLFNBQUMsS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDakIsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNkJBQTRCLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDN0MsU0FBQyxVQUFVLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4Q0FBNkMsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5RCxTQUFDLFVBQVUsQUFBQyxDQUFDLEdBQUUsQ0FBQyxLQUNSLEFBQUMsQ0FBQyxTQUFTLEFBQUQsQ0FBRztBQUNiLGFBQUcsQUFBQyxDQUFDLEdBQUksTUFBSSxBQUFDLENBQUMsbUJBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQ0EsVUFBUyxBQUFELENBQUc7QUFDUCxhQUFHLEFBQUMsRUFBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsZ0JBQWUsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNsQyxhQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUNuQixhQUFXLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN0QixhQUFXLEFBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRiIsImZpbGUiOiJkZXZpY2VUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtKGlkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W1wiVEVTVF9cIiArIGlkXSA9PT0gXCIxXCIpIHtcbiAgICAgICAgZGVzY3JpYmUoaWQgKyBcIiBwbGF0Zm9ybVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYWYgPSByZXF1aXJlKFwiLi4vLi5cIikoaWQpO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCByZXR1cm4gYXZhaWxhYmxlIGRldmljZXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRldmljZUNvdW50ID0gYWYuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNlQ291bnQgPiAwKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5mb3MgPSBhZi5nZXREZXZpY2VzKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNBcnJheShpbmZvcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmZvcy5sZW5ndGggPT09IGRldmljZUNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIGluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ubmFtZSkgJiYgaW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNTdHJpbmcoaW5mby5wbGF0Zm9ybSkgJiYgaW5mby5wbGF0Zm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8uY29tcHV0ZSkgJiYgaW5mby5jb21wdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNCb29sZWFuKGluZm8uaXNEb3VibGVBdmFpbGFibGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZG8gc3luYyB3aXRoIGNhbGxiYWNrXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jKGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBwcm9taXNlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic3luYyBzaG91bGQgZmFpbGVkIGlmIGRldmljZSBpcyBvdXQgb2YgcmFuZ2VcIiwgZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICAgICAgICAgIGFmLnN5bmNBc3luYygxMDApXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBmYWlsIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiZGV2aWNlIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRldmljZVRlc3RzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBRWxDLE9BQVMsYUFBVyxDQUFFLEVBQUM7QUFDbkIsS0FBSSxPQUFNLElBQUksQ0FBRSxPQUFNLEVBQUksR0FBQyxDQUFDLElBQU0sSUFBRSxDQUFHO0FBQ25DLFdBQU8sQUFBQyxDQUFDLEVBQUMsRUFBSSxZQUFVLENBQUcsVUFBVSxBQUFEO0FBQ2hDLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsT0FBQyxBQUFDLENBQUMsaUNBQWdDLENBQUcsVUFBUyxBQUFEO0FBQzFDLEFBQUksVUFBQSxDQUFBLFdBQVUsRUFBSSxDQUFBLEVBQUMsZUFBZSxBQUFDLEVBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxXQUFVLEVBQUksRUFBQSxDQUFDLENBQUM7QUFDdkIsQUFBSSxVQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsRUFBQyxXQUFXLEFBQUMsRUFBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLENBQUEsUUFBUSxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sSUFBTSxZQUFVLENBQUMsQ0FBQztBQTlDNUMsQUFBSSxVQUFBLE9BQW9CLEtBQUcsQ0FBQztBQUM1QixBQUFJLFVBQUEsT0FBb0IsTUFBSSxDQUFDO0FBQzdCLEFBQUksVUFBQSxPQUFvQixVQUFRLENBQUM7QUFDakMsVUFBSTtBQUhKLGNBQVMsR0FBQSxPQURqQixLQUFLLEVBQUEsQUFDNEI7QUFDaEIsbUJBQW9CLENBQUEsQ0E4Q0osS0FBSSxDQTlDa0IsQ0FBRSxNQUFLLFNBQVMsQ0FBQyxBQUFDLEVBQUMsQ0FDN0QsRUFBQyxDQUFDLE1BQW9CLENBQUEsQ0FBQyxNQUFvQixDQUFBLFNBQXFCLEFBQUMsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUN6RSxPQUFvQixLQUFHLENBQUc7Y0E0Q2QsS0FBRztBQUFZO0FBQ3BCLG1CQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsS0FBSyxDQUFDLENBQUEsRUFBSyxDQUFBLElBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsbUJBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxTQUFTLENBQUMsQ0FBQSxFQUFLLENBQUEsSUFBRyxTQUFTLENBQUMsQ0FBQztBQUNsRCxtQkFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLFFBQVEsQ0FBQyxDQUFBLEVBQUssQ0FBQSxJQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELG1CQUFLLEFBQUMsQ0FBQyxDQUFBLFVBQVUsQUFBQyxDQUFDLElBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQy9DO1VBOUNSO0FBQUEsUUFEQSxDQUFFLFlBQTBCO0FBQzFCLGVBQW9CLEtBQUcsQ0FBQztBQUN4QixvQkFBb0MsQ0FBQztRQUN2QyxDQUFFLE9BQVE7QUFDUixZQUFJO0FBQ0YsZUFBSSxLQUFpQixHQUFLLENBQUEsV0FBdUIsR0FBSyxLQUFHLENBQUc7QUFDMUQsd0JBQXdCLEFBQUMsRUFBQyxDQUFDO1lBQzdCO0FBQUEsVUFDRixDQUFFLE9BQVE7QUFDUixvQkFBd0I7QUFDdEIsd0JBQXdCO1lBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQW1DSSxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4QkFBNkIsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5QyxTQUFDLEtBQUssQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDO01BQ2pCLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDZCQUE0QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzdDLFNBQUMsVUFBVSxBQUFDLEVBQUMsUUFBUSxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDaEMsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsOENBQTZDLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDOUQsU0FBQyxVQUFVLEFBQUMsQ0FBQyxHQUFFLENBQUMsS0FDUixBQUFDLENBQUMsU0FBUyxBQUFELENBQUc7QUFDYixhQUFHLEFBQUMsQ0FBQyxHQUFJLE1BQUksQUFBQyxDQUFDLG1CQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUNBLFVBQVMsQUFBRCxDQUFHO0FBQ1AsYUFBRyxBQUFDLEVBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQztNQUNWLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUVBLE9BQU8sQUFBQyxDQUFDLGdCQUFlLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbEMsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQ0YiLCJmaWxlIjoiZGV2aWNlVGVzdHMuanMiLCJzb3VyY2VSb290IjoidGVzdHMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgcmV0dXJuIGF2YWlsYWJsZSBkZXZpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBkZXZpY2VDb3VudCA9IGFmLmdldERldmljZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRldmljZUNvdW50ID4gMCk7XG4gICAgICAgICAgICAgICAgbGV0IGluZm9zID0gYWYuZ2V0RGV2aWNlcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzQXJyYXkoaW5mb3MpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5mb3MubGVuZ3RoID09PSBkZXZpY2VDb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5mbyBvZiBpbmZvcykge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1N0cmluZyhpbmZvLm5hbWUpICYmIGluZm8ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ucGxhdGZvcm0pICYmIGluZm8ucGxhdGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1N0cmluZyhpbmZvLmNvbXB1dGUpICYmIGluZm8uY29tcHV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzQm9vbGVhbihpbmZvLmlzRG91YmxlQXZhaWxhYmxlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBjYWxsYmFja1wiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgYWYuc3luYyhkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBkbyBzeW5jIHdpdGggcHJvbWlzZVwiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgYWYuc3luY0FzeW5jKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInN5bmMgc2hvdWxkIGZhaWxlZCBpZiBkZXZpY2UgaXMgb3V0IG9mIHJhbmdlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoMTAwKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiVGhpcyBzaG91bGQgZmFpbCFcIikpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcImRldmljZSBtZXRob2RzXCIsIGZ1bmN0aW9uKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pO1xuIl19 diff --git a/tests/index.js b/tests/index.js index 452e722..b295396 100644 --- a/tests/index.js +++ b/tests/index.js @@ -42,6 +42,6 @@ if (es6) { module.exports = require("./es6"); } else { - require("traceur-runtime"); + require("traceur/bin/traceur-runtime"); module.exports = require("./es5"); } \ No newline at end of file From c6f68de50e4c0f1a061b45e6c3d9e95c086e2c57 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sun, 18 Oct 2015 12:49:04 +0200 Subject: [PATCH 12/45] 0.16.0 - renamed to arrayfire-js --- README.md | 26 +++++++++---------- changelog.md | 6 ++++- documentation/docs/devices.md | 4 +-- documentation/docs/enums.md | 2 +- documentation/docs/index.md | 8 +++--- examples/es5/bechmarks/pi.js | 3 ++- examples/es5/bechmarks/pi.js.map | 1 + examples/es5/common/index.js | 3 ++- examples/es5/common/index.js.map | 1 + examples/es5/machine-learning/ann.js | 3 ++- examples/es5/machine-learning/ann.js.map | 1 + examples/es5/machine-learning/mnist.js | 3 ++- examples/es5/machine-learning/mnist.js.map | 1 + .../es5/machine-learning/neuralNetwork.js | 3 ++- .../es5/machine-learning/neuralNetwork.js.map | 1 + gulpfile.js | 13 +++++++--- lib/es5/borderType.js | 3 ++- lib/es5/borderType.js.map | 1 + lib/es5/cSpace.js | 3 ++- lib/es5/cSpace.js.map | 1 + lib/es5/col.js | 3 ++- lib/es5/col.js.map | 1 + lib/es5/cols.js | 3 ++- lib/es5/cols.js.map | 1 + lib/es5/complex.js | 3 ++- lib/es5/complex.js.map | 1 + lib/es5/connectivity.js | 3 ++- lib/es5/connectivity.js.map | 1 + lib/es5/convDomain.js | 3 ++- lib/es5/convDomain.js.map | 1 + lib/es5/convMode.js | 3 ++- lib/es5/convMode.js.map | 1 + lib/es5/dim4.js | 3 ++- lib/es5/dim4.js.map | 1 + lib/es5/dtype.js | 3 ++- lib/es5/dtype.js.map | 1 + lib/es5/ext.js | 3 ++- lib/es5/ext.js.map | 1 + lib/es5/index.js | 3 ++- lib/es5/index.js.map | 1 + lib/es5/interpType.js | 3 ++- lib/es5/interpType.js.map | 1 + lib/es5/makeGfor.js | 3 ++- lib/es5/makeGfor.js.map | 1 + lib/es5/matProp.js | 3 ++- lib/es5/matProp.js.map | 1 + lib/es5/matchType.js | 3 ++- lib/es5/matchType.js.map | 1 + lib/es5/normType.js | 3 ++- lib/es5/normType.js.map | 1 + lib/es5/row.js | 3 ++- lib/es5/row.js.map | 1 + lib/es5/rows.js | 3 ++- lib/es5/rows.js.map | 1 + lib/es5/seq.js | 3 ++- lib/es5/seq.js.map | 1 + lib/es5/source.js | 3 ++- lib/es5/source.js.map | 1 + package.json | 5 ++-- tests/es5/afArrayTests.js | 3 ++- tests/es5/afArrayTests.js.map | 1 + tests/es5/createArrayFunctionTests.js | 3 ++- tests/es5/createArrayFunctionTests.js.map | 1 + tests/es5/deviceTests.js | 3 ++- tests/es5/deviceTests.js.map | 1 + tests/es5/index.js | 3 ++- tests/es5/index.js.map | 1 + tests/es5/moveAndReorderArrayTests.js | 3 ++- tests/es5/moveAndReorderArrayTests.js.map | 1 + 69 files changed, 131 insertions(+), 57 deletions(-) create mode 100644 examples/es5/bechmarks/pi.js.map create mode 100644 examples/es5/common/index.js.map create mode 100644 examples/es5/machine-learning/ann.js.map create mode 100644 examples/es5/machine-learning/mnist.js.map create mode 100644 examples/es5/machine-learning/neuralNetwork.js.map create mode 100644 lib/es5/borderType.js.map create mode 100644 lib/es5/cSpace.js.map create mode 100644 lib/es5/col.js.map create mode 100644 lib/es5/cols.js.map create mode 100644 lib/es5/complex.js.map create mode 100644 lib/es5/connectivity.js.map create mode 100644 lib/es5/convDomain.js.map create mode 100644 lib/es5/convMode.js.map create mode 100644 lib/es5/dim4.js.map create mode 100644 lib/es5/dtype.js.map create mode 100644 lib/es5/ext.js.map create mode 100644 lib/es5/index.js.map create mode 100644 lib/es5/interpType.js.map create mode 100644 lib/es5/makeGfor.js.map create mode 100644 lib/es5/matProp.js.map create mode 100644 lib/es5/matchType.js.map create mode 100644 lib/es5/normType.js.map create mode 100644 lib/es5/row.js.map create mode 100644 lib/es5/rows.js.map create mode 100644 lib/es5/seq.js.map create mode 100644 lib/es5/source.js.map create mode 100644 tests/es5/afArrayTests.js.map create mode 100644 tests/es5/createArrayFunctionTests.js.map create mode 100644 tests/es5/deviceTests.js.map create mode 100644 tests/es5/index.js.map create mode 100644 tests/es5/moveAndReorderArrayTests.js.map diff --git a/README.md b/README.md index 8679771..fbec41f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# NOTICE: The next release (0.16) will rename this module as arrayfire-js +# NOTICE: -The old `arrayfire_js` module will be available on the npm for a while. +As of 0.16.0 this module has been renamed from `arrayfire_js` to `arrayfire-js`. The old `arrayfire_js` module will be available on the npm for a while. # ArrayFire.js -**Please follow [this issue](https://github.com/arrayfire/arrayfire_js/issues/1) for tracking the progress towards release of 1.0.0-beta.** +**Please follow [this issue](https://github.com/arrayfire/arrayfire-js/issues/1) for tracking the progress towards release of 1.0.0-beta.** ## About ArrayFire @@ -51,18 +51,18 @@ On Windows the installer do this for you, so there is nothing to do on this plat The above have to be done only once. After you can install ArrayFire.js from the npm: ``` -npm install arrayfire_js --save +npm install arrayfire-js --save ``` ## Usage ```js // CPU -var af = require("arrayfire_js")("CPU"); +var af = require("arrayfire-js")("CPU"); // OpenCL -var af = require("arrayfire_js")("OpenCL"); +var af = require("arrayfire-js")("OpenCL"); // CUDA -var af = require("arrayfire_js")("CUDA"); +var af = require("arrayfire-js")("CUDA"); ``` ## Examples @@ -86,7 +86,7 @@ af_print(pi); **JavaScript** -*Notice: Remember, in Node.js everything that blocks or might blocks should be asynchronous, so it is advised to call asynchronous variants of ArrayFire.js functions, however there are synchronous counterparts available too for supporting REPL scenarios. (I suggest use [ES6 generators](http://arrayfire.github.io/arrayfire_js/#how-to-use-es6-generators) instead of callback hell or even instead of bare promises).* +*Notice: Remember, in Node.js everything that blocks or might blocks should be asynchronous, so it is advised to call asynchronous variants of ArrayFire.js functions, however there are synchronous counterparts available too for supporting REPL scenarios. (I suggest use [ES6 generators](http://arrayfire.github.io/arrayfire-js/#how-to-use-es6-generators) instead of callback hell or even instead of bare promises).* ```js const numberOfPoints = 20000000; @@ -102,7 +102,7 @@ let piVal = (4.0 * numInside) / numberOfPoints; console.log(`PI = ${piVal}`); ``` -It's included in the [examples folder](https://github.com/arrayfire/arrayfire_js/blob/master/examples/es6/bechmarks/pi.js). To run on: +It's included in the [examples folder](https://github.com/arrayfire/arrayfire-js/blob/master/examples/es6/bechmarks/pi.js). To run on: - io.js, enter: `iojs examples/es6/bechmarks/pi.js` - Node.js 0.12 or above, enter: `node --harmony examples/es6/bechmarks/pi.js` @@ -112,7 +112,7 @@ It's included in the [examples folder](https://github.com/arrayfire/arrayfire_js There is an example of a neural network with batch backpropagation trained to learn the famous [MNIST](http://yann.lecun.com/exdb/mnist/) data set. It will run on the fastest device available. -It's in the [examples folder](https://github.com/arrayfire/arrayfire_js/blob/master/examples/es6/machine-learning/neuralNetwork.js). To run on: +It's in the [examples folder](https://github.com/arrayfire/arrayfire-js/blob/master/examples/es6/machine-learning/neuralNetwork.js). To run on: - io.js, enter: `iojs examples/es6/machine-learning/neuralNetwork.js` - Node.js 0.12 or above, enter: `node --harmony examples/es6/machine-learning/neuralNetwork.js` @@ -126,15 +126,15 @@ Performance on Linux Mint x64, i5 3570, Radeon R9: ## API Docs -[http://arrayfire.github.io/arrayfire_js](http://arrayfire.github.io/arrayfire-js/) +[http://arrayfire.github.io/arrayfire-js](http://arrayfire.github.io/arrayfire-js/) ## Wanna Contribute? -PRs are welcome, but please read the [Contributing Guide](https://github.com/arrayfire/arrayfire_js/blob/master/CONTRIBUTING.md) first. +PRs are welcome, but please read the [Contributing Guide](https://github.com/arrayfire/arrayfire-js/blob/master/CONTRIBUTING.md) first. ## License -[New BSD](https://github.com/arrayfire/arrayfire_js/blob/master/LICENSE) +[New BSD](https://github.com/arrayfire/arrayfire-js/blob/master/LICENSE) ``` Copyright (c) 2014-2015, ArrayFire diff --git a/changelog.md b/changelog.md index d35561c..07244a1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,8 @@ -# 0.15.2 (2015-08-29) +# 0.16.0 (2015-10-18) + +- Renamed to arrayfire-js + +# 0.15.2 (2015-10-17) - CMake.js 2.0.0 support - Fix: pre io.js - traceur-runtime replaced to traceur module diff --git a/documentation/docs/devices.md b/documentation/docs/devices.md index a9b57d9..8c7be1c 100644 --- a/documentation/docs/devices.md +++ b/documentation/docs/devices.md @@ -33,7 +33,7 @@ Supported platform IDs: **Example:** ```js -var af = require("arrayfire_js"); +var af = require("arrayfire-js"); var cpuPlatform = af("CPU"); ``` @@ -48,7 +48,7 @@ Gets the number of devices on the given platform. **Example:** ```js -var af = require("arrayfire_js"); +var af = require("arrayfire-js"); var cpuPlatform = af("CPU"); var deviceCount = cpuPlatform.getDeviceCount(); ``` diff --git a/documentation/docs/enums.md b/documentation/docs/enums.md index b58dc01..bec10c9 100644 --- a/documentation/docs/enums.md +++ b/documentation/docs/enums.md @@ -3,7 +3,7 @@ They are accessible from the main Fire.js context object, eg.: ```js -var af = require("arrayfire_js")("CPU"); +var af = require("arrayfire-js")("CPU"); // dType: var dType = af.dType; diff --git a/documentation/docs/index.md b/documentation/docs/index.md index e16308d..95366e0 100644 --- a/documentation/docs/index.md +++ b/documentation/docs/index.md @@ -8,7 +8,7 @@ You can read its introduction [int its documentation's index page](http://www.ar ArrayFire.js is the Node.js bindings for ArrayFire, it uses [CMake.js](https://github.com/unbornchikken/cmake-js) as of its build system. It takes Node.js' insane level of productivity and mix that with ArrayFire's insane level of performance and simplicity. You'll get something like Matlab just in familiar JavaScript with performance of level of x100 (with a good GPU). -Install instructions can be found in the [project's readme at Github](https://github.com/arrayfire/arrayfire_js#install). +Install instructions can be found in the [project's readme at Github](https://github.com/arrayfire/arrayfire-js#install). ## (How To) Use ES6 Generators @@ -40,7 +40,7 @@ And voila, you can write asynchronous code that looks like synchronous. It's exa To run ES6 code you can use io.js that supports it inherently. Or use Node.js 0.12+ with --harmony flag. Or you can go with older Node.js versions with Gulp and Traceur modules. -Even you can use feature detection and can write code that can run on each platform choosing ES5 or ES6 code paths depending of the actual runtime. ArrayFire.js uses that method too. It has been developed in ES6, and uses [Gulp/Traceur](https://github.com/arrayfire/arrayfire_js/blob/master/gulpfile.js) and [feature detection](https://github.com/arrayfire/arrayfire_js/blob/master/lib/index.js#L19) to fallback to manually compiled ES5 code on older runtimes. If you need further information about this topic, please open up an issue on Github, and I'll help you out with this there. +Even you can use feature detection and can write code that can run on each platform choosing ES5 or ES6 code paths depending of the actual runtime. ArrayFire.js uses that method too. It has been developed in ES6, and uses [Gulp/Traceur](https://github.com/arrayfire/arrayfire-js/blob/master/gulpfile.js) and [feature detection](https://github.com/arrayfire/arrayfire-js/blob/master/lib/index.js#L19) to fallback to manually compiled ES5 code on older runtimes. If you need further information about this topic, please open up an issue on Github, and I'll help you out with this there. ## API @@ -81,7 +81,7 @@ let piVal = (4.0 * numInside) / numberOfPoints; console.log(`PI = ${piVal}`); ``` -It's included in the [examples folder](https://github.com/arrayfire/arrayfire_js/blob/master/examples/es6/bechmarks/pi.js). To run on: +It's included in the [examples folder](https://github.com/arrayfire/arrayfire-js/blob/master/examples/es6/bechmarks/pi.js). To run on: - io.js, enter: `iojs examples/es6/bechmarks/pi.js` - Node.js 0.12 or above, enter: `node --harmony examples/es6/bechmarks/pi.js` @@ -89,4 +89,4 @@ It's included in the [examples folder](https://github.com/arrayfire/arrayfire_js ## License -[New BSD](https://github.com/arrayfire/arrayfire_js/blob/master/LICENSE) \ No newline at end of file +[New BSD](https://github.com/arrayfire/arrayfire-js/blob/master/LICENSE) \ No newline at end of file diff --git a/examples/es5/bechmarks/pi.js b/examples/es5/bechmarks/pi.js index ed12f53..bcef183 100644 --- a/examples/es5/bechmarks/pi.js +++ b/examples/es5/bechmarks/pi.js @@ -41,4 +41,5 @@ var pi = async($traceurRuntime.initGeneratorFunction(function $__0(af, deviceInf }, $__0, this); })); common.runOnAllPlatforms(pi, "pi example"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUNBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztlQUNuQixDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsSUFBRyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQzs7b0JBaERoRCxDQUFBLElBQUcsS0FBSzs7OztnQkFpRFEsQ0FBQSxDQUFDLEdBQUUsRUFBSyxVQUFRLENBQUMsRUFBSSxlQUFhO0FBRTlDLGdCQUFNLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBQyxNQUFJLEVBQUcsQ0FBQzs7OztBQW5EaEMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFrRHRDLENBcER1RCxDQW9EdEQsQ0FBQztBQUVGLEtBQUssa0JBQWtCLEFBQUMsQ0FBQyxFQUFDLENBQUcsYUFBVyxDQUFDLENBQUM7QUFDMUMiLCJmaWxlIjoiYmVjaG1hcmtzL3BpLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBjb21tb24gPSByZXF1aXJlKFwiLi4vY29tbW9uXCIpO1xuXG5jb25zdCBudW1iZXJPZlBvaW50cyA9IDIwMDAwMDAwO1xuXG5sZXQgcGkgPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICBjb25zb2xlLmxvZyhcIkNhbGN1bGF0aW5nIHBpIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGxldCB4ID0gYWYucmFuZHUobnVtYmVyT2ZQb2ludHMsIGFmLmR0eXBlLmYzMik7XG4gICAgbGV0IHkgPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgZGlzdCA9IGFmLnNxcnQoeC5tdWwoeCkuYWRkKHkubXVsKHkpKSk7XG4gICAgbGV0IG51bUluc2lkZSA9IHlpZWxkIGFmLnN1bUFzeW5jKGRpc3QubHQoMSkpO1xuICAgIGxldCBwaVZhbCA9ICg0LjAgKiAgbnVtSW5zaWRlKSAvIG51bWJlck9mUG9pbnRzO1xuXG4gICAgY29uc29sZS5sb2coYFBJID0gJHtwaVZhbH1gKTtcbn0pO1xuXG5jb21tb24ucnVuT25BbGxQbGF0Zm9ybXMocGksIFwicGkgZXhhbXBsZVwiKTtcbiJdfQ== + +//# sourceMappingURL=pi.js.map diff --git a/examples/es5/bechmarks/pi.js.map b/examples/es5/bechmarks/pi.js.map new file mode 100644 index 0000000..6767100 --- /dev/null +++ b/examples/es5/bechmarks/pi.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["bechmarks/pi.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\n\nconst numberOfPoints = 20000000;\n\nlet pi = async(function*(af, deviceInfo) {\n let AFArray = af.AFArray;\n\n console.log(\"Calculating pi on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n let x = af.randu(numberOfPoints, af.dtype.f32);\n let y = af.randu(numberOfPoints, af.dtype.f32);\n let dist = af.sqrt(x.mul(x).add(y.mul(y)));\n let numInside = yield af.sumAsync(dist.lt(1));\n let piVal = (4.0 * numInside) / numberOfPoints;\n\n console.log(`PI = ${piVal}`);\n});\n\ncommon.runOnAllPlatforms(pi, \"pi example\");\n"],"file":"bechmarks/pi.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index df01349..de89083 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -286,4 +286,5 @@ module.exports = { runOnBestDevice: runOnBestDevice, printDeviceInfo: printDeviceInfo }; -//# sourceMappingURL=data:application/json;base64,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T0FBTyxBQUFDLEVBQUMsQ0FBQzs7OztBQUNDLGFBQUcsT0FBTyxBQUFDLEVBQUMsQ0FBQztBQUNiLGFBQUcsaUJBQWlCLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLFlBQW9CLENBQUEsSUFBRyxnQkFBZ0IsQ0FBQzs7OztBQThFOUMsZ0JBQU0sTUFBTSxBQUFDLENBQUMsQ0FBQSxNQUFNLENBQUMsQ0FBQzs7OztBQWpGOUIsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUFpRnRDLENBbkZ1RCxDQW1GdEQsQ0FBQztBQUVGLEFBQUksRUFBQSxDQUFBLGVBQWMsRUFBSSxVQUFVLFVBQVMsQ0FBRztBQUN4QyxRQUFNLElBQUksQUFBQyxFQUFDLE1BQU0sRUFBQyxDQUFBLFVBQVMsR0FBRyxFQUFDLFdBQVUsRUFBQyxDQUFBLFVBQVMsS0FBSyxFQUFDLGVBQWMsRUFBQyxDQUFBLFVBQVMsU0FBUyxFQUFDLGNBQWEsRUFBQyxDQUFBLFVBQVMsUUFBUSxFQUFDLGNBQWEsRUFBQyxDQUFBLFVBQVMsUUFBUSxFQUFHLENBQUM7QUFDbkssQ0FBQztBQUVELEtBQUssUUFBUSxFQUFJO0FBQ2Isa0JBQWdCLENBQUcsa0JBQWdCO0FBQ25DLGdCQUFjLENBQUcsZ0JBQWM7QUFDL0IsZ0JBQWMsQ0FBRyxnQkFBYztBQUFBLEFBQ25DLENBQUM7QUFDRCIsImZpbGUiOiJjb21tb24vaW5kZXguanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGFmID0gcmVxdWlyZShcIi4uLy4uLy4uXCIpO1xubGV0IHV0aWwgPSByZXF1aXJlKFwidXRpbFwiKTtcbmxldCBub3cgPSByZXF1aXJlKFwicGVyZm9ybWFuY2Utbm93XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG5sZXQgcnVuT25EZXZpY2VzID0gYXN5bmMoZnVuY3Rpb24qKHBsYXRmb3JtSUQsIGYsIG9uSUQpIHtcbiAgICBsZXQgYWZPZlBsYXRmb3JtID0gYWYocGxhdGZvcm1JRCk7XG4gICAgZm9yIChsZXQgZGV2aWNlSW5mbyBvZiBhZk9mUGxhdGZvcm0uZ2V0RGV2aWNlcygpKSB7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG9uSUQpIHx8IG9uSUQgPT09IGRldmljZUluZm8uaWQpIHtcbiAgICAgICAgICAgIGFmT2ZQbGF0Zm9ybS5zZXREZXZpY2UoZGV2aWNlSW5mby5pZCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgICAgICAgICAgeWllbGQgZihhZk9mUGxhdGZvcm0sIGRldmljZUluZm8pO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gbm93KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuLS0gdG9vayAkeygoZW5kIC0gc3RhcnQpIC8gMTAwMCkudG9GaXhlZCgxMCl9IHNlY29uZHNcXG5gKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5sZXQgcnVuT25BbGxQbGF0Zm9ybXMgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBjb25zb2xlLmxvZyhgUnVubmluZyAke25hbWV9IG9uIGFsbCBzdXBwb3J0ZWQgcGxhdGZyb21zOiAke3BsYXRmcm9tcy5qb2luKFwiLCBcIil9XFxuYCk7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgcGxhdGZyb21zKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMoaWQsIGYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBydW5PbkJlc3REZXZpY2UgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBsZXQgb3JkZXIgPSBbXCJDVURBXCIsIFwiT3BlbkNMXCIsIFwiQ1BVXCJdO1xuICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nICR7bmFtZX0gb24gYmVzdCBhdmFpbGFibGUgZGV2aWNlLlxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMF0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMF0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF8ocGxhdGZyb21zKS5jb250YWlucyhvcmRlclsxXSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHJ1bk9uRGV2aWNlcyhvcmRlclsxXSwgZiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMl0sIGYsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBwcmludERldmljZUluZm8gPSBmdW5jdGlvbiAoZGV2aWNlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKGBJRDogJHtkZXZpY2VJbmZvLmlkfVxcbk5hbWU6ICR7ZGV2aWNlSW5mby5uYW1lfVxcblBsYXRmb3JtOiAke2RldmljZUluZm8ucGxhdGZvcm19XFxuVG9vbGtpdDogJHtkZXZpY2VJbmZvLnRvb2xraXR9XFxuQ29tcHV0ZTogJHtkZXZpY2VJbmZvLmNvbXB1dGV9YCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBydW5PbkFsbFBsYXRmb3JtczogcnVuT25BbGxQbGF0Zm9ybXMsXG4gICAgcnVuT25CZXN0RGV2aWNlOiBydW5PbkJlc3REZXZpY2UsXG4gICAgcHJpbnREZXZpY2VJbmZvOiBwcmludERldmljZUluZm9cbn07XG4iXX0= + +//# sourceMappingURL=index.js.map diff --git a/examples/es5/common/index.js.map b/examples/es5/common/index.js.map new file mode 100644 index 0000000..f362fe4 --- /dev/null +++ b/examples/es5/common/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["common/index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"file":"common/index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index 2ae7e0a..3a42520 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -182,4 +182,5 @@ proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, }, $__11, this); })); module.exports = ANN; -//# sourceMappingURL=data:application/json;base64,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QSxJQUFHLEdBQUcsSUFBSSxDQUFDO0FBR3JCLEFBQUksSUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLElBQUcsT0FBTyxDQUFFLElBQUcsVUFBVSxFQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQzVDLEFBQUksSUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE1BQUssSUFBSSxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDNUIsQUFBSSxJQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsTUFBSyxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztBQUV0QixhQUFhLENBQUEsSUFBRyxVQUFVLEVBQUksRUFBQSxDQUFHLENBQUEsQ0FBQSxHQUFLLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBRSxDQUFHO0FBQzFDLEFBQUksTUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLElBQUcsUUFBUSxBQUFDLENBQUMsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQztBQUN4QyxBQUFJLE1BQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxFQUFDLFVBQVUsQUFBQyxDQUFDLElBQUcsTUFBTSxBQUFDLENBQUMsTUFBSyxDQUFDLElBQUksQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7QUFHckQsQUFBSSxNQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsRUFBQyxPQUFPLEFBQUMsQ0FBQyxLQUFJLENBQUcsTUFBSSxDQUFDLElBQUksQUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLEFBQUMsRUFBQyxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztBQUMxRCxPQUFHLFFBQVEsQ0FBRSxDQUFBLENBQUMsVUFBVSxBQUFDLENBQUMsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRzdDLFNBQUssRUFBSSxDQUFBLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ3ZCLE1BQUUsSUFBSSxBQUFDLENBQUMsSUFBRyxHQUFHLFNBQVMsQUFBQyxDQUFDLEtBQUksQ0FBRyxDQUFBLElBQUcsUUFB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LENBQUEsQ0FBQyxlQUFjLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLFdBQVMsRUFBQyxDQUFDOzs7O0FBM0d4SCxhQUFHLE1BQU0sRUFBSSxDQUFBLENBOEdELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQTlHRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBOEdBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQS9HdEQsYUFBRyxZQUFZLEVBb0hKLElBQUUsQUFwSHNCLENBQUE7Ozs7QUFBbkMsZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsUUFBNkIsS0FBRyxDQUFDLENBQUM7QUFtSHRDLENBckh1RCxDQXFIdEQsQ0FBQztBQUVGLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvYW5uLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJhZjphbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxuZnVuY3Rpb24gQU5OKGFmLCBsYXllcnMsIHJhbmdlKSB7XG4gICAgcmFuZ2UgPSByYW5nZSB8fCAwLjA1O1xuICAgIHRoaXMuYWYgPSBhZjtcbiAgICB0aGlzLm51bUxheWVycyA9IGxheWVycy5sZW5ndGg7XG4gICAgdGhpcy5zaWduYWwgPSBbXTtcbiAgICB0aGlzLndlaWdodHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtTGF5ZXJzOyBpKyspIHtcbiAgICAgICAgdGhpcy5zaWduYWwucHVzaChuZXcgYWYuQUZBcnJheSgpKTtcbiAgICAgICAgaWYgKGkgPCB0aGlzLm51bUxheWVycyAtIDEpIHtcbiAgICAgICAgICAgIGxldCB3ID0gYWYucmFuZHUobGF5ZXJzW2ldICsgMSwgbGF5ZXJzW2kgKyAxXSwgYWYuZFR5cGUuZjMyKS5tdWwocmFuZ2UpLnN1YihyYW5nZSAvIDIpO1xuICAgICAgICAgICAgdGhpcy53ZWlnaHRzLnB1c2godyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmxldCBwcm90byA9IEFOTi5wcm90b3R5cGU7XG5cbnByb3RvLmRlcml2ID0gZnVuY3Rpb24gKG91dCkge1xuICAgIHJldHVybiBvdXQucmhzU3ViKDEpLm11bChvdXQpO1xufTtcblxucHJvdG8uYWRkQmlhcyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLmFmLmpvaW4oMSwgdGhpcy5hZi5jb25zdGFudCgxLCBpbnB1dC5kaW1zKDApLCB0aGlzLmFmLmRUeXBlLmYzMiksIGlucHV0KTtcbn07XG5cbnByb3RvLl9jYWxjdWxhdGVFcnJvciA9IGFzeW5jKGZ1bmN0aW9uKihvdXQsIHByZWQpIHtcbiAgICBsZXQgZGlmID0gb3V0LnN1YihwcmVkKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHlpZWxkIHRoaXMuYWYuc3VtQXN5bmMoZGlmLm11bChkaWYpKSk7XG59KTtcblxucHJvdG8uZm9yd2FyZFByb3BhZ2F0ZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHRoaXMuc2lnbmFsWzBdLnNldChpbnB1dCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bUxheWVycyAtIDE7IGkrKykge1xuICAgICAgICBsZXQgaW5WZWMgPSB0aGlzLmFkZEJpYXModGhpcy5zaWduYWxbaV0pO1xuICAgICAgICBsZXQgb3V0VmVjID0gdGhpcy5hZi5tYXRNdWwoaW5WZWMsIHRoaXMud2VpZ2h0c1tpXSk7XG4gICAgICAgIHRoaXMuc2lnbmFsW2kgKyAxXS5zZXQodGhpcy5hZi5zaWdtb2lkKG91dFZlYykpO1xuICAgIH1cbn07XG5cbnByb3RvLmJhY2tQcm9wYWdhdGUgPSBmdW5jdGlvbiAodGFyZ2V0LCBhbHBoYSkge1xuICAgIGxldCBhZiA9IHRoaXMuYWY7XG4gICAgbGV0IFNlcSA9IHRoaXMuYWYuU2VxO1xuXG4gICAgLy8gR2V0IGVycm9yIGZvciBvdXRwdXQgbGF5ZXJcbiAgICBsZXQgb3V0VmVjID0gdGhpcy5zaWduYWxbdGhpcy5udW1MYXllcnMgLSAxXTtcbiAgICBsZXQgZXJyID0gb3V0VmVjLnN1Yih0YXJnZXQpO1xuICAgIGxldCBtID0gdGFyZ2V0LmRpbXMoMCk7XG5cbiAgICBmb3IgKGxldCBpID0gdGhpcy5udW1MYXllcnMgLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgICBsZXQgaW5WZWMgPSB0aGlzLmFkZEJpYXModGhpcy5zaWduYWxbaV0pO1xuICAgICAgICBsZXQgZGVsdGEgPSBhZi50cmFuc3Bvc2UodGhpcy5kZXJpdihvdXRWZWMpLm11bChlcnIpKTtcblxuICAgICAgICAvLyBBZGp1c3Qgd2VpZ2h0c1xuICAgICAgICBsZXQgZ3JhZCA9IGFmLm1hdE11bChkZWx0YSwgaW5WZWMpLm11bChhbHBoYSkubmVnKCkuZGl2KG0pO1xuICAgICAgICB0aGlzLndlaWdodHNbaV0uYWRkQXNzaWduKGFmLnRyYW5zcG9zZShncmFkKSk7XG5cbiAgICAgICAgLy8gSW5wdXQgdG8gY3VycmVudCBsYXllciBpcyBvdXRwdXQgb2YgcHJldmlvdXNcbiAgICAgICAgb3V0VmVjID0gdGhpcy5zaWduYWxbaV07XG4gICAgICAgIGVyci5zZXQodGhpcy5hZi5tYXRNdWxUVChkZWx0YSwgdGhpcy53ZWlnaHRzW2ldKSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlcnJvciBvZiBiaWFzIGFuZCBwcm9wYWdhdGUgYmFja3dhcmRcbiAgICAgICAgZXJyLnNldChlcnIuYXQoYWYuc3BhbiwgbmV3IFNlcSgxLCBvdXRWZWMuZGltcygxKSkpKTtcbiAgICB9XG59O1xuXG5wcm90by5wcmVkaWN0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdGhpcy5mb3J3YXJkUHJvcGFnYXRlKGlucHV0KTtcbiAgICByZXR1cm4gdGhpcy5zaWduYWxbdGhpcy5udW1MYXllcnMgLSAxXS5jb3B5KCk7XG59O1xuXG5wcm90by50cmFpbiA9IGFzeW5jKGZ1bmN0aW9uKihpbnB1dCwgdGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgbGV0IGFmID0gdGhpcy5hZjtcbiAgICBsZXQgU2VxID0gdGhpcy5hZi5TZXE7XG5cbiAgICBsZXQgbnVtU2FtcGxlcyA9IGlucHV0LmRpbXMoMCk7XG4gICAgbGV0IG51bUJhdGNoZXMgPSBudW1TYW1wbGVzIC8gb3B0aW9ucy5iYXRjaFNpemU7XG5cbiAgICBsZXQgZXJyID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5tYXhFcG9jaHM7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUJhdGNoZXMgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGxldCBzdGFydFBvcyA9IGogKiBvcHRpb25zLmJhdGNoU2l6ZTtcbiAgICAgICAgICAgIGxldCBlbmRQb3MgPSBzdGFydFBvcyArIG9wdGlvbnMuYmF0Y2hTaXplIC0gMTtcblxuICAgICAgICAgICAgbGV0IHggPSBpbnB1dC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcbiAgICAgICAgICAgIGxldCB5ID0gdGFyZ2V0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pO1xuXG4gICAgICAgICAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoeCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tQcm9wYWdhdGUoeSwgb3B0aW9ucy5hbHBoYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB3aXRoIGxhc3QgYmF0Y2hcbiAgICAgICAgbGV0IHN0YXJ0UG9zID0gKG51bUJhdGNoZXMgLSAxKSAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICBsZXQgZW5kUG9zID0gbnVtU2FtcGxlcyAtIDE7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLnByZWRpY3QoaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBlcnIgPSB5aWVsZCB0aGlzLl9jYWxjdWxhdGVFcnJvcihvdXRWZWMsIHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGBFcG9jaDogJHtpICsgMX0sIEVycm9yOiAke2Vyci50b0ZpeGVkKDQpfSwgRHVyYXRpb246ICR7KChlbmQgLSBzdGFydCkgLyAxMDAwKS50b0ZpeGVkKDQpfSBzZWNvbmRzYCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udmVyZ2VuY2UgY3JpdGVyaWEgaGFzIGJlZW4gbWV0XG4gICAgICAgIGlmIChlcnIgPCBvcHRpb25zLm1heEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVyZ2VkIG9uIEVwb2M6ICR7aSArIDF9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnI7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBTk47Il19 + +//# sourceMappingURL=ann.js.map diff --git a/examples/es5/machine-learning/ann.js.map b/examples/es5/machine-learning/ann.js.map new file mode 100644 index 0000000..7c67e9a --- /dev/null +++ b/examples/es5/machine-learning/ann.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["machine-learning/ann.js"],"sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let inVec = this.addBias(this.signal[i]);\n let outVec = this.af.matMul(inVec, this.weights[i]);\n this.signal[i + 1].set(this.af.sigmoid(outVec));\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let af = this.af;\n let Seq = this.af.Seq;\n\n // Get error for output layer\n let outVec = this.signal[this.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = this.numLayers - 2; i >= 0; i--) {\n let inVec = this.addBias(this.signal[i]);\n let delta = af.transpose(this.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n this.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = this.signal[i];\n err.set(this.af.matMulTT(delta, this.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n }\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let af = this.af;\n let Seq = this.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n this.forwardPropagate(x);\n this.backPropagate(y, options.alpha);\n }\n\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = this.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n const end = now();\n\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"file":"machine-learning/ann.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/mnist.js b/examples/es5/machine-learning/mnist.js index 5edcf88..c4e7be9 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -311,4 +311,5 @@ var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__12(a }, $__12, this); }))}; module.exports = mnist; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1uaXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBRUEsQUFBSSxFQUFBLENBQUEsUUFBTyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsQUFBSSxFQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsUUFBTyxVQUFVLENBQUM7QUFDOUIsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsUUFBTyxhQUFhLEFBQUMsQ0FBQyxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLEtBQUksQ0FBQyxDQUFDO0FBQ3hCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0IsQUFBSSxFQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsR0FBRSxNQUFNLEtBQUssQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxPQUFNLENBQUMsQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ3hDLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBRTFCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLEtBQUksQUFBQyxDQWJwQixlQUFjLHNCQUFzQixBQUFDLENBYWhCLGNBQVUsQ0FBQSxDQUFHLENBQUEsSUFBRzs7Ozs7OztBQWJyQyxPQUFPLENBQVAsZUFBYyx3QkFBd0IsQUFBZCxDQUF4QixTQUFTLElBQUcsQ0FBRztBQUNULFVBQU8sSUFBRzs7O2VBYVcsQ0FBQSxFQUFDLFVBQVU7ZUFBYyxDQUFBLElBQUcsT0FBTztlQUFuQyxVQUFZLENBQVosRUFBQyxDQUFZLEVBQUEsQ0FBRyxLQUFHLENBQUcsRUFBQSxPQUFnQixLQUFHLENBQUM7Ozs7Ozs7ZUFkckUsQ0FBQSxJQUFHLEtBQUs7Ozs7Z0JBY1ksTUFBb0QsQ0FBQSxDQUFDOzs7OztBQUNyRSxhQUFJLFNBQVEsSUFBTSxDQUFBLElBQUcsT0FBTyxDQUFHO0FBQzNCLGdCQUFNLElBQUksTUFBSSxBQUFDLENBQUMscUJBQW9CLENBQUMsQ0FBQztVQUMxQztBQUFBOzs7QUFqQkosZUFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsRUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7QUFnQnRDLENBbEJ1RCxDQWtCdEQsQ0FBQztBQUVGLEFBQUksRUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLEtBQUksQUFBQyxDQXBCbkIsZUFBYyxzQkFBc0IsQUFBQyxDQW9CakIsZUFBVSxJQUFHLENBQUcsQ0FBQSxJQUFHOzs7Ozs7Ozs7Ozs7QUFwQnZDLE9BQU8sQ0FBUCxlQUFjLHdCQUF3QixBQUFkLENBQXhCLFNBQVMsSUFBRyxDQUFHO0FBQ1QsVUFBTyxJQUFHOzs7O2VBb0JLLENBQUEsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLENBQUcsSUFBRSxDQUFDOztlQXJCM0MsQ0FBQSxJQUFHLEtBQUs7Ozs7QUFBUixhQUFHLFFBQVEsQUFBQyxVQUVpQixDQUFDOzs7O1lBcUJkLElBQUksT0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDOzs7OztlQUVkLENBQUEsUUFBTyxBQUFDLENBQUMsSUFBRyxDQUFHLEVBQUEsQ0FBQzs7QUF6QjlCLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQTJCUixhQUFJLENBQUEsQ0FBRSxDQUFBLENBQUMsR0FBSyxFQUFBLENBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQUksQUFBQyxDQUFDLHVCQUFzQixDQUFDLENBQUM7VUFDNUM7QUFBQSxrQkFFZ0IsQ0FBQSxDQUFBLENBQUUsQ0FBQSxDQUFDO2VBR1IsRUFBQTtlQUNBLEdBQUM7Ozs7WUFDQyxFQUFBOzs7O0FBcENyQixhQUFHLE1BQU0sRUFBSSxDQUFBLENBb0NXLENBQUEsRUFBSSxRQUFNLENBcENILFNBQXdDLENBQUM7QUFDaEUsZUFBSTs7QUFtQ3lCLFVBQUEsRUFBRTs7Ozs7ZUFDckIsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxJQUFHLENBQUcsRUFBQSxDQUFDOztBQXJDbEMsYUFBRyxXQUFXLEFBQUMsRUFBQyxDQUFBOzs7O2NBc0NNLENBQUEsQ0FBQSxhQUFhLEFBQUMsRUFBQztBQUN6QixhQUFHLEdBQUssSUFBRSxDQUFDO0FBQ1gsYUFBRyxLQUFLLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQzs7OztnQkFJTixJQUFJLE9BQUssQUFBQyxDQUFDLElBQUcsQ0FBQzs7Ozs7ZUFDckIsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxJQUFHLENBQUcsTUFBSSxDQUFDOztBQTdDbEMsYUFBRyxXQUFXLEFBQUMsRUFBQyxDQUFBOzs7O2VBOENHLElBQUksT0FBSyxBQUFDLENBQUMsS0FBSSxPQUFPLEVBQUksQ0FBQSxJQUFHLEtBQUssQ0FBQztBQUM5QyxxQkFBYSxFQUFBLENBQUcsUUFBSSxDQUFBLEtBQUksT0FBTyxDQUFHLFFBQUUsQ0FBRztpQkFDeEIsQ0FBQSxLQUFJLE9BQUc7QUFDbEIsZUFBRyxJQUFJLEFBQUMsQ0FBQyxJQUFHLENBQUcsUUFBSSxDQUFBLElBQUcsS0FBSyxDQUFHLEtBQUcsQ0FBQyxDQUFDO1VBQ3ZDO0FBQUE7OztBQWxEUixhQUFHLFlBQVksRUFvREE7QUFDSCxrQkFBTSxDQUFHLFFBQU07QUFDZixlQUFHLENBQUcsS0FBRztBQUNULGVBQUcsQ0FBRyxLQUFHO0FBQUEsVUFDYixBQXhEMkIsQ0FBQTs7QUFBbkMsYUFBRyxtQkFBbUIsS0FBb0IsQ0FBQTs7O0FBQTFDLGFBQUcsT0FBTyxBQUFDLEVBQUMsQ0FBQzs7Ozs7ZUEyREMsQ0FBQSxFQUFDLFdBQVcsQUFBQyxDQUFDLElBQUcsQ0FBQzs7QUEzRGhDLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUNNLGFBQUcsTUFBTSxFQUFJLENBQUEsSUFBRyxtQkFBbUIsQ0FBQztBQUNwQyxlQUFLOztBQUYzQixlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixRQUE2QixLQUFHLENBQUMsQ0FBQztBQTJEdEMsQ0E3RHVELENBNkR0RCxDQUFDO0FBRUYsQUFBSSxFQUFBLENBQUEsS0FBSSxFQUFJLEVBQ1IsS0FBSSxDQUFHLENBQUEsS0FBSSxBQUFDLENBaEVoQixlQUFjLHNCQUFzQixBQUFDLENBZ0VwQixlQUFVLEVBQUMsQ0FBRyxDQUFBLFlBQVcsQ0FBRyxDQUFBLElBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFoRWhELFNBQU8sQ0FBUCxlQUFjLHdCQUF3QixBQUFkLENBQXhCLFNBQVMsSUFBRyxDQUFHO0FBQ1QsWUFBTyxJQUFHOzs7QUFnRVIsZUFBRyxFQUFJLENBQUEsSUFBRyxJQUFJLEFBQUMsQ0FBQyxJQUFHLEdBQUssSUFBRSxDQUFHLElBQUUsQ0FBQyxDQUFDO3FCQUNsQiwwQkFBd0I7b0JBQ3pCLENBQUEsRUFBQyxRQUFRO2lCQUNaLENBQUEsRUFBQyxLQUFLOzs7OztpQkFFSyxDQUFBLE9BQU0sQUFBQyxDQUFDLElBQUcsS0FBSyxBQUFDLENBQUMsUUFBTyxDQUFHLGdCQUFjLENBQUMsQ0FBRyxNQUFJLENBQUM7O3NCQXRFakYsQ0FBQSxJQUFHLEtBQUs7Ozs7O2lCQXVFc0IsQ0FBQSxPQUFNLEFBQUMsQ0FBQyxJQUFHLEtBQUssQUFBQyxDQUFDLFFBQU8sQ0FBRyxnQkFBYyxDQUFDLENBQUcsS0FBRyxDQUFDOztzQkF2RWhGLENBQUEsSUFBRyxLQUFLOzs7O21CQXlFYSxJQUFJLEtBQUcsQUFBQyxDQUFDLENBQUEsQUFBQyxDQUFDLFNBQVEsS0FBSyxDQUFDLFFBQVEsQUFBQyxFQUFDLE1BQU0sQUFBQyxFQUFDLENBQUM7Ozs7O2lCQUN0QyxDQUFBLE9BQU0sWUFBWSxBQUFDLENBQUMsTUFBSyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBRyxDQUFBLFNBQVEsS0FBSyxDQUFDOzttQkExRW5GLENBQUEsSUFBRyxLQUFLOzs7O2NBNEVRLENBQUEsRUFBQyxNQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDO2lCQUN6QixDQUFBLENBQUEsR0FBRyxBQUFDLENBQUMsSUFBRyxDQUFDO3lCQUNELENBQUEsRUFBQyxNQUFNLEFBQUMsQ0FBQyxJQUFHLENBQUM7d0JBQ2QsQ0FBQSxFQUFDLE1BQU0sQUFBQyxDQUFDLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQzt3QkFFbkIsQ0FBQSxFQUFDLE9BQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxhQUFXLENBQUcsRUFBQSxDQUFDLElBQUksQUFBQyxDQUFDLEdBQUUsQ0FBQzt1QkFDM0MsQ0FBQSxFQUFDLE9BQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxZQUFVLENBQUcsRUFBQSxDQUFDLElBQUksQUFBQyxDQUFDLEdBQUUsQ0FBQzt1QkFFekMsR0FBQztxQkFDSCxDQUFBLFdBQVUsS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDO29CQUNuQixDQUFBLFVBQVMsS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDO0FBRS9CLGdCQUFJLEFBQUMsRUFBQyx5QkFBeUIsRUFBQyxTQUFPLEVBQUcsQ0FBQztBQUMzQyxnQkFBSSxBQUFDLEVBQUMscUJBQXFCLEVBQUMsUUFBTSxFQUFHLENBQUM7Ozs7QUF6RjlDLGVBQUcsTUFBTSxFQUFJLENBQUEsQ0E4RkQsWUFBVyxDQTlGUSxVQUF3QyxDQUFDO0FBQ2hFLGlCQUFJOztBQThGQSxzQkFBVSxFQUFJLENBQUEsRUFBQyxTQUFTLEFBQUMsQ0FBQyxDQUFBLENBQUcsV0FBUyxDQUFHLFNBQU8sQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoRSxxQkFBUyxFQUFJLENBQUEsRUFBQyxTQUFTLEFBQUMsQ0FBQyxDQUFBLENBQUcsV0FBUyxDQUFHLFFBQU0sQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUU5RCxpQkFBSyxBQUFDLENBQUMsWUFBVyxLQUFLLEFBQUMsRUFBQyxDQUFBLEdBQU0sQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDNUMsaUJBQUssQUFBQyxDQUFDLFdBQVUsS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDOzs7OztpQkFFckIsQ0FBQSxZQUFXLFVBQVUsQUFBQyxFQUFDOztzQkFyR3pELENBQUEsSUFBRyxLQUFLOzs7OztpQkFzR3lCLENBQUEsV0FBVSxVQUFVLEFBQUMsRUFBQzs7cUJBdEd2RCxDQUFBLElBQUcsS0FBSzs7OztBQXdHSSxtQkFBYSxFQUFBLENBQUcsQ0FBQSxDQUFBLEVBQUksU0FBTyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7a0JBQ3JCLENBQUEsSUFBRyxJQUFJLEFBQUMsQ0FBQyxTQUFRLENBQUcsQ0FBQSxDQUFBLEVBQUksQ0FBQSxJQUFHLEtBQUssQ0FBQztvQkFDL0IsQ0FBQSxJQUFHLElBQUksQUFBQyxDQUFDLFNBQVEsS0FBSyxDQUFHLENBQUEsR0FBRSxFQUFJLENBQUEsSUFBRyxLQUFLLENBQUM7QUFDcEQsbUJBQUssQUFBQyxDQUFDLEtBQUksR0FBSyxFQUFBLENBQUEsRUFBSyxDQUFBLEtBQUksR0FBSyxFQUFBLENBQUMsQ0FBQztBQUNoQyx3QkFBVSxJQUFJLEFBQUMsQ0FBQyxLQUFJLENBQUcsRUFBQSxDQUFHLEVBQUEsQ0FBQyxDQUFDO1lBQ2hDO0FBQUEsQUFFQSx1QkFBYSxFQUFBLENBQUcsUUFBSSxRQUFNLENBQUcsUUFBRSxDQUFHO3NCQUNwQixDQUFBLElBQUcsSUFBSSxBQUFDLENBQUMsUUFBTyxDQUFHLFFBQUksQ0FBQSxJQUFHLEtBQUssQ0FBQzt3QkFDOUIsQ0FBQSxJQUFHLElBQUksQUFBQyxDQUFDLFNBQVEsS0FBSyxDQUFHLFVBQU0sQ0FBQSxJQUFHLEtBQUssQ0FBQztBQUNwRCxtQkFBSyxBQUFDLENBQUMsWUFBUyxFQUFBLENBQUEsRUFBSyxhQUFTLEVBQUEsQ0FBQyxDQUFDO0FBQ2hDLHVCQUFTLElBQUksQUFBQyxrQkFBVyxFQUFBLENBQUMsQ0FBQztZQUMvQjtBQUFBOzs7O2lCQUdtQixDQUFBLE9BQU0sWUFBWSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUUsQ0FBQSxDQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFHLENBQUEsU0FBUSxLQUFLLENBQUM7O21CQXZIbEcsQ0FBQSxJQUFHLEtBQUs7Ozs7QUF3SEksc0JBQVUsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsWUFBVyxDQUFDLENBQUM7QUFDckMscUJBQVMsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsV0FBVSxDQUFDLENBQUM7Ozs7QUF6SC9DLGVBQUcsWUFBWSxFQTRIQTtBQUNILHVCQUFTLENBQUcsV0FBUztBQUNyQixxQkFBTyxDQUFHLFNBQU87QUFDakIsb0JBQU0sQ0FBRyxRQUFNO0FBQ2Ysd0JBQVUsQ0FBRyxZQUFVO0FBQ3ZCLHVCQUFTLENBQUcsV0FBUztBQUNyQix3QkFBVSxDQUFHLFlBQVU7QUFDdkIsdUJBQVMsQ0FBRyxXQUFTO0FBQUEsWUFDekIsQUFwSTJCLENBQUE7Ozs7QUFBbkMsaUJBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLElBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0VBbUlsQyxDQXJJbUQsQ0FxSWxELENBQ0wsQ0FBQztBQUVELEtBQUssUUFBUSxFQUFJLE1BQUksQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvbW5pc3QuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBmcyA9IEJsdWViaXJkLnByb21pc2lmeUFsbChyZXF1aXJlKFwiZnMtZXh0cmFcIikpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgZmxvYXQgPSByZWYudHlwZXMuZmxvYXQ7XG5sZXQgdWludCA9IHJlZi50eXBlcy51aW50O1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6bW5pc3RcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG5sZXQgcmVhZERhdGEgPSBhc3luYyhmdW5jdGlvbiooZiwgZGF0YSkge1xuICAgIGxldCBieXRlc1JlYWQgPSAoeWllbGQgZnMucmVhZEFzeW5jKGYsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBudWxsKSlbMF07XG4gICAgaWYgKGJ5dGVzUmVhZCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSByZWFkaW5nIGVycm9yIVwiKTtcbiAgICB9XG59KTtcblxubGV0IHJlYWRJZHggPSBhc3luYyhmdW5jdGlvbioocGF0aCwgdHlwZSkge1xuICAgIGxldCBmaWxlID0geWllbGQgZnMub3BlbkFzeW5jKHBhdGgsIFwiclwiKTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgZCA9IG5ldyBCdWZmZXIoNCk7XG5cbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgZCk7XG5cbiAgICAgICAgaWYgKGRbMl0gIT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtRGltcyA9IGRbM107XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGltZW5zaW9uc1xuICAgICAgICBsZXQgZWxlbSA9IDE7XG4gICAgICAgIGxldCBkaW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRGltczsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcbiAgICAgICAgICAgIGxldCBkaW0gPSBkLnJlYWRVSW50MzJCRSgpO1xuICAgICAgICAgICAgZWxlbSAqPSBkaW07XG4gICAgICAgICAgICBkaW1zLnB1c2goZGltKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYWQgdGhlIGRhdGFcbiAgICAgICAgbGV0IGJkYXRhID0gbmV3IEJ1ZmZlcihlbGVtKTtcbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgYmRhdGEpO1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBCdWZmZXIoYmRhdGEubGVuZ3RoICogdHlwZS5zaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ5dGUgPSBiZGF0YVtpXTtcbiAgICAgICAgICAgIHR5cGUuc2V0KGRhdGEsIGkgKiB0eXBlLnNpemUsIGJ5dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bURpbXM6IG51bURpbXMsXG4gICAgICAgICAgICBkaW1zOiBkaW1zLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgeWllbGQgZnMuY2xvc2VBc3luYyhmaWxlKTtcbiAgICB9XG59KTtcblxubGV0IG1uaXN0ID0ge1xuICAgIHNldHVwOiBhc3luYyhmdW5jdGlvbiooYWYsIGV4cGFuZExhYmVscywgZnJhYykge1xuICAgICAgICBmcmFjID0gTWF0aC5taW4oZnJhYyB8fCAxLjAsIDAuOCk7XG4gICAgICAgIGxldCBkYXRhUm9vdCA9IFwiLi4vLi4vbWxfbGFiL2RhdGEvbW5pc3RcIjtcbiAgICAgICAgbGV0IEFGQXJyYXkgPSBhZi5BRkFycmF5O1xuICAgICAgICBsZXQgRGltNCA9IGFmLkRpbTQ7XG5cbiAgICAgICAgbGV0IGltYWdlRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImltYWdlcy1zdWJzZXRcIiksIGZsb2F0KTtcbiAgICAgICAgbGV0IGxhYmVsRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImxhYmVscy1zdWJzZXRcIiksIHVpbnQpO1xuXG4gICAgICAgIGxldCBySURpbXMgPSBuZXcgRGltNChfKGltYWdlRGF0YS5kaW1zKS5yZXZlcnNlKCkudmFsdWUoKSk7XG4gICAgICAgIGxldCBpbWFnZXMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKHJJRGltcywgYWYuZFR5cGUuZjMyLCBpbWFnZURhdGEuZGF0YSk7XG5cbiAgICAgICAgbGV0IHIgPSBhZi5yYW5kdSgxMDAwMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgbGV0IGNvbmQgPSByLmx0KGZyYWMpO1xuICAgICAgICBsZXQgdHJhaW5JbmRpY2VzID0gYWYud2hlcmUoY29uZCk7XG4gICAgICAgIGxldCB0ZXN0SW5kaWNlcyA9IGFmLndoZXJlKGNvbmQubm90KCkpO1xuXG4gICAgICAgIGxldCB0cmFpbkltYWdlcyA9IGFmLmxvb2t1cChpbWFnZXMsIHRyYWluSW5kaWNlcywgMikuZGl2KDI1NSk7XG4gICAgICAgIGxldCB0ZXN0SW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdGVzdEluZGljZXMsIDIpLmRpdigyNTUpO1xuXG4gICAgICAgIGxldCBudW1DbGFzc2VzID0gMTA7XG4gICAgICAgIGxldCBudW1UcmFpbiA9IHRyYWluSW1hZ2VzLmRpbXMoMik7XG4gICAgICAgIGxldCBudW1UZXN0ID0gdGVzdEltYWdlcy5kaW1zKDIpO1xuXG4gICAgICAgIGRlYnVnKGBUcmFpbmluZyBzYW1wbGUgY291bnQ6ICR7bnVtVHJhaW59YCk7XG4gICAgICAgIGRlYnVnKGBUZXN0IHNhbXBsZSBjb3VudDogJHtudW1UZXN0fWApO1xuXG4gICAgICAgIGxldCB0cmFpbkxhYmVscztcbiAgICAgICAgbGV0IHRlc3RMYWJlbHM7XG5cbiAgICAgICAgaWYgKGV4cGFuZExhYmVscykge1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UcmFpbiwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UZXN0LCBhZi5kVHlwZS5mMzIpO1xuXG4gICAgICAgICAgICBhc3NlcnQodHJhaW5JbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcbiAgICAgICAgICAgIGFzc2VydCh0ZXN0SW5kaWNlcy50eXBlKCkgPT09IGFmLmRUeXBlLnUzMik7XG5cbiAgICAgICAgICAgIGxldCBoVHJhaW5JZHggPSB5aWVsZCB0cmFpbkluZGljZXMuaG9zdEFzeW5jKCk7XG4gICAgICAgICAgICBsZXQgaFRlc3RJZHggPSB5aWVsZCB0ZXN0SW5kaWNlcy5ob3N0QXN5bmMoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UcmFpbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkeCA9IHVpbnQuZ2V0KGhUcmFpbklkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdHJhaW5MYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UZXN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRlc3RJZHgsIGkgKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHVpbnQuZ2V0KGxhYmVsRGF0YS5kYXRhLCBpZHggKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChsYWJlbCA+PSAwICYmIGxhYmVsIDw9IDkpO1xuICAgICAgICAgICAgICAgIHRlc3RMYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsYWJlbHMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGxhYmVsRGF0YS5kaW1zWzBdLCBhZi5kVHlwZS51MzIsIGxhYmVsRGF0YS5kYXRhKTtcbiAgICAgICAgICAgIHRyYWluTGFiZWxzID0gbGFiZWxzLmF0KHRyYWluSW5kaWNlcyk7XG4gICAgICAgICAgICB0ZXN0TGFiZWxzID0gbGFiZWxzLmF0KHRlc3RJbmRpY2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudW1DbGFzc2VzOiBudW1DbGFzc2VzLFxuICAgICAgICAgICAgbnVtVHJhaW46IG51bVRyYWluLFxuICAgICAgICAgICAgbnVtVGVzdDogbnVtVGVzdCxcbiAgICAgICAgICAgIHRyYWluSW1hZ2VzOiB0cmFpbkltYWdlcyxcbiAgICAgICAgICAgIHRlc3RJbWFnZXM6IHRlc3RJbWFnZXMsXG4gICAgICAgICAgICB0cmFpbkxhYmVsczogdHJhaW5MYWJlbHMsXG4gICAgICAgICAgICB0ZXN0TGFiZWxzOiB0ZXN0TGFiZWxzXG4gICAgICAgIH07XG4gICAgfSlcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbW5pc3Q7Il19 + +//# sourceMappingURL=mnist.js.map diff --git a/examples/es5/machine-learning/mnist.js.map b/examples/es5/machine-learning/mnist.js.map new file mode 100644 index 0000000..760da95 --- /dev/null +++ b/examples/es5/machine-learning/mnist.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["machine-learning/mnist.js"],"sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet fs = Bluebird.promisifyAll(require(\"fs-extra\"));\nlet ref = require(\"ref\");\nlet float = ref.types.float;\nlet uint = ref.types.uint;\nlet debug = require(\"debug\")(\"af:mnist\");\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet path = require(\"path\");\n\nlet readData = async(function*(f, data) {\n let bytesRead = (yield fs.readAsync(f, data, 0, data.length, null))[0];\n if (bytesRead !== data.length) {\n throw new Error(\"File reading error!\");\n }\n});\n\nlet readIdx = async(function*(path, type) {\n let file = yield fs.openAsync(path, \"r\");\n try {\n let d = new Buffer(4);\n\n yield readData(file, d);\n\n if (d[2] != 8) {\n throw new Error(\"Unsupported data type\");\n }\n\n const numDims = d[3];\n\n // Read the dimensions\n let elem = 1;\n let dims = [];\n for (let i = 0; i < numDims; i++) {\n yield readData(file, d);\n let dim = d.readUInt32BE();\n elem *= dim;\n dims.push(dim);\n }\n\n // Read the data\n let bdata = new Buffer(elem);\n yield readData(file, bdata);\n let data = new Buffer(bdata.length * type.size);\n for (let i = 0; i < bdata.length; i++) {\n let byte = bdata[i];\n type.set(data, i * type.size, byte);\n }\n\n return {\n numDims: numDims,\n dims: dims,\n data: data\n };\n }\n finally {\n yield fs.closeAsync(file);\n }\n});\n\nlet mnist = {\n setup: async(function*(af, expandLabels, frac) {\n frac = Math.min(frac || 1.0, 0.8);\n let dataRoot = \"../../ml_lab/data/mnist\";\n let AFArray = af.AFArray;\n let Dim4 = af.Dim4;\n\n let imageData = yield readIdx(path.join(dataRoot, \"images-subset\"), float);\n let labelData = yield readIdx(path.join(dataRoot, \"labels-subset\"), uint);\n\n let rIDims = new Dim4(_(imageData.dims).reverse().value());\n let images = yield AFArray.createAsync(rIDims, af.dType.f32, imageData.data);\n\n let r = af.randu(10000, af.dType.f32);\n let cond = r.lt(frac);\n let trainIndices = af.where(cond);\n let testIndices = af.where(cond.not());\n\n let trainImages = af.lookup(images, trainIndices, 2).div(255);\n let testImages = af.lookup(images, testIndices, 2).div(255);\n\n let numClasses = 10;\n let numTrain = trainImages.dims(2);\n let numTest = testImages.dims(2);\n\n debug(`Training sample count: ${numTrain}`);\n debug(`Test sample count: ${numTest}`);\n\n let trainLabels;\n let testLabels;\n\n if (expandLabels) {\n trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32);\n testLabels = af.constant(0, numClasses, numTest, af.dType.f32);\n\n assert(trainIndices.type() === af.dType.u32);\n assert(testIndices.type() === af.dType.u32);\n\n let hTrainIdx = yield trainIndices.hostAsync();\n let hTestIdx = yield testIndices.hostAsync();\n\n for (let i = 0; i < numTrain; i++) {\n let idx = uint.get(hTrainIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n trainLabels.set(label, i, 1);\n }\n\n for (let i = 0; i < numTest; i++) {\n let idx = uint.get(hTestIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n testLabels.set(label, i, 1);\n }\n }\n else {\n let labels = yield AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data);\n trainLabels = labels.at(trainIndices);\n testLabels = labels.at(testIndices);\n }\n\n return {\n numClasses: numClasses,\n numTrain: numTrain,\n numTest: numTest,\n trainImages: trainImages,\n testImages: testImages,\n trainLabels: trainLabels,\n testLabels: testLabels\n };\n })\n};\n\nmodule.exports = mnist;"],"file":"machine-learning/mnist.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 32b344f..3c16e6a 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -199,4 +199,5 @@ var annDemo = async($traceurRuntime.initGeneratorFunction(function $__13(af, dev }, $__13, this); })); common.runOnBestDevice(annDemo, "ANN Demo"); -//# sourceMappingURL=data:application/json;base64,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OEJBQTZCO2dCQUF6QyxXQUFXLENBQVgsT0FBTSxRQUErRjs7OztBQUVyRyxnQkFBTSxJQUFJLEFBQUMsQ0FBQyxXQUFVLENBQUMsQ0FBQzs7OztnQkFDeEIsQ0FBQSxPQUFNLElBQUk7Z0JBQXVDLENBQUEsUUFBTyxBQUFDLENBQUMsRUFBQyxDQUFHLFdBQVMsQ0FBRyxXQUFTLENBQUM7Ozs7Ozs7Z0JBekR4RixDQUFBLElBQUcsS0FBSzs7OztnQkF5RHNDLGNBQW1EO2dCQUFuRCxXQUFvRCxPQUFDLEVBQUEsQ0FBQztnQkFBcEYsOEJBQTZCO2dCQUF6QyxXQUFXLENBQVgsT0FBTSxRQUE2Rjs7OztBQUVuRyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFBLENBQUMsQ0FBQyxHQUFFLEVBQUksTUFBSSxDQUFDLEVBQUksS0FBRyxDQUFDLFFBQVEsQUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUMsYUFBVyxFQUFDLENBQUM7Ozs7QUEzRGpGLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBMER0QyxDQTVEdUQsQ0E0RHRELENBQUM7QUFFRixLQUFLLGdCQUFnQixBQUFDLENBQUMsT0FBTSxDQUFHLFdBQVMsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibWFjaGluZS1sZWFybmluZy9uZXVyYWxOZXR3b3JrLmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgY29tbW9uID0gcmVxdWlyZShcIi4uL2NvbW1vblwiKTtcbmxldCBtbmlzdCA9IHJlcXVpcmUoXCIuL21uaXN0XCIpO1xubGV0IEFOTiA9IHJlcXVpcmUoXCIuL2FublwiKTtcbmxldCBub3cgPSByZXF1aXJlKFwicGVyZm9ybWFuY2Utbm93XCIpO1xuXG5sZXQgYWNjdXJhY3kgPSBhc3luYyhmdW5jdGlvbiooYWYsIHByZWRpY3RlZCwgdGFyZ2V0KSB7XG4gICAgbGV0IHBNYXggPSB5aWVsZCBhZi5maW5kTWF4QXRBc3luYyhwcmVkaWN0ZWQsIDEpO1xuICAgIGxldCB0TWF4ID0geWllbGQgYWYuZmluZE1heEF0QXN5bmModGFyZ2V0LCAxKTtcbiAgICByZXR1cm4gKDEwMCAqICh5aWVsZCBhZi5jb3VudEFzeW5jKHBNYXguaW5kZXguZXEodE1heC5pbmRleCkpKSkgLyB0TWF4LmluZGV4LmVsZW1lbnRzKCk7XG59KTtcblxubGV0IGFubkRlbW8gPSBhc3luYyhmdW5jdGlvbiooYWYsIGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIlJ1bm5pbmcgQU5OIERlbW8gb24gZGV2aWNlOlxcblwiKTtcbiAgICBjb21tb24ucHJpbnREZXZpY2VJbmZvKGRldmljZUluZm8pO1xuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuXG4gICAgY29uc29sZS5sb2coXCJTZXR0aW5nIHVwIHRyYWluaW5nIGRhdGEuXCIpO1xuICAgIGxldCBkYXRhID0geWllbGQgbW5pc3Quc2V0dXAoYWYsIHRydWUsIDAuNik7XG5cbiAgICBsZXQgZmVhdHVyZVNpemUgPSBkYXRhLnRyYWluSW1hZ2VzLmVsZW1lbnRzKCkgLyBkYXRhLm51bVRyYWluO1xuXG4gICAgLy8gUmVzaGFwZSBpbWFnZXMgaW50byBmZWF0dXJlIHZlY3RvcnNcbiAgICBsZXQgdHJhaW5GZWF0cyA9IGFmLnRyYW5zcG9zZShhZi5tb2REaW1zKGRhdGEudHJhaW5JbWFnZXMsIGZlYXR1cmVTaXplLCBkYXRhLm51bVRyYWluKSk7XG4gICAgbGV0IHRlc3RGZWF0cyA9IGFmLnRyYW5zcG9zZShhZi5tb2REaW1zKGRhdGEudGVzdEltYWdlcywgZmVhdHVyZVNpemUsIGRhdGEubnVtVGVzdCkpO1xuXG4gICAgbGV0IHRyYWluVGFyZ2V0ID0gYWYudHJhbnNwb3NlKGRhdGEudHJhaW5MYWJlbHMpO1xuICAgIGxldCB0ZXN0VGFyZ2V0ID0gYWYudHJhbnNwb3NlKGRhdGEudGVzdExhYmVscyk7XG5cbiAgICBsZXQgbmV0d29yayA9IG5ldyBBTk4oYWYsIFt0cmFpbkZlYXRzLmRpbXMoMSksIDEwMCwgNTAsIGRhdGEubnVtQ2xhc3Nlc10pO1xuXG4gICAgLy8gVHJhaW4gbmV0d29ya1xuICAgIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG4gICAgeWllbGQgbmV0d29yay50cmFpbihcbiAgICAgICAgdHJhaW5GZWF0cyxcbiAgICAgICAgdHJhaW5UYXJnZXQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAxLjAsXG4gICAgICAgICAgICBtYXhFcG9jaHM6IDMwMCxcbiAgICAgICAgICAgIGJhdGNoU2l6ZTogMTAwLFxuICAgICAgICAgICAgbWF4RXJyb3I6IDEuMFxuICAgICAgICB9XG4gICAgKTtcbiAgICB5aWVsZCBhZi53YWl0QXN5bmMoKTtcbiAgICBjb25zdCBlbmQgPSBub3coKTtcblxuICAgIC8vIFJ1biB0aGUgdHJhaW5lZCBuZXR3b3JrIGFuZCB0ZXN0IGFjY3VyYWN5LlxuICAgIGxldCB0cmFpbk91dHB1dCA9IG5ldHdvcmsucHJlZGljdCh0cmFpbkZlYXRzKTtcbiAgICBsZXQgdGVzdE91dHB1dCA9IG5ldHdvcmsucHJlZGljdCh0ZXN0RmVhdHMpO1xuXG4gICAgY29uc29sZS5sb2coXCJUcmFpbmluZyBzZXQ6XCIpO1xuICAgIGNvbnNvbGUubG9nKGBBY2N1cmFjeSBvbiB0cmFpbmluZyBkYXRhOiAkeyh5aWVsZCBhY2N1cmFjeShhZiwgdHJhaW5PdXRwdXQsIHRyYWluVGFyZ2V0KSkudG9GaXhlZCgyKX1gKTtcblxuICAgIGNvbnNvbGUubG9nKFwiVGVzdCBzZXQ6XCIpO1xuICAgIGNvbnNvbGUubG9nKGBBY2N1cmFjeSBvbiB0ZXN0aW5nICBkYXRhOiAkeyh5aWVsZCBhY2N1cmFjeShhZiwgdGVzdE91dHB1dCwgdGVzdFRhcmdldCkpLnRvRml4ZWQoMil9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhgVHJhaW5pbmcgdGltZTogJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG59KTtcblxuY29tbW9uLnJ1bk9uQmVzdERldmljZShhbm5EZW1vLCBcIkFOTiBEZW1vXCIpOyJdfQ== + +//# sourceMappingURL=neuralNetwork.js.map diff --git a/examples/es5/machine-learning/neuralNetwork.js.map b/examples/es5/machine-learning/neuralNetwork.js.map new file mode 100644 index 0000000..c07ba5b --- /dev/null +++ b/examples/es5/machine-learning/neuralNetwork.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["machine-learning/neuralNetwork.js"],"sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\nlet mnist = require(\"./mnist\");\nlet ANN = require(\"./ann\");\nlet now = require(\"performance-now\");\n\nlet accuracy = async(function*(af, predicted, target) {\n let pMax = yield af.findMaxAtAsync(predicted, 1);\n let tMax = yield af.findMaxAtAsync(target, 1);\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\n});\n\nlet annDemo = async(function*(af, deviceInfo) {\n console.log(\"Running ANN Demo on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n console.log(\"Setting up training data.\");\n let data = yield mnist.setup(af, true, 0.6);\n\n let featureSize = data.trainImages.elements() / data.numTrain;\n\n // Reshape images into feature vectors\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\n\n let trainTarget = af.transpose(data.trainLabels);\n let testTarget = af.transpose(data.testLabels);\n\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\n\n // Train network\n const start = now();\n yield network.train(\n trainFeats,\n trainTarget,\n {\n alpha: 1.0,\n maxEpochs: 300,\n batchSize: 100,\n maxError: 1.0\n }\n );\n yield af.waitAsync();\n const end = now();\n\n // Run the trained network and test accuracy.\n let trainOutput = network.predict(trainFeats);\n let testOutput = network.predict(testFeats);\n\n console.log(\"Training set:\");\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\n\n console.log(\"Test set:\");\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\n\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n});\n\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"file":"machine-learning/neuralNetwork.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 0c0ab31..3e1f2ff 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -33,22 +33,29 @@ var gulp = require("gulp"); var traceur = require("gulp-traceur"); var gulpSequence = require("gulp-sequence"); var exec = require("child_process").exec; +var sourcemaps = require("gulp-sourcemaps"); gulp.task("compile-test", function () { return gulp.src("tests/es6/**/*.js", {base: "tests/es6"}) - .pipe(traceur({sourceMaps: "inline"})) + .pipe(sourcemaps.init()) + .pipe(traceur()) + .pipe(sourcemaps.write(".")) .pipe(gulp.dest("tests/es5")); }); gulp.task("compile-lib", function () { return gulp.src("lib/es6/**/*.js", {base: "lib/es6"}) - .pipe(traceur({sourceMaps: "inline"})) + .pipe(sourcemaps.init()) + .pipe(traceur()) + .pipe(sourcemaps.write(".")) .pipe(gulp.dest("lib/es5")); }); gulp.task("compile-examples", function () { return gulp.src("examples/es6/**/*.js", {base: "examples/es6"}) - .pipe(traceur({sourceMaps: "inline"})) + .pipe(sourcemaps.init()) + .pipe(traceur()) + .pipe(sourcemaps.write(".")) .pipe(gulp.dest("examples/es5")); }); diff --git a/lib/es5/borderType.js b/lib/es5/borderType.js index 7b3b48f..382984f 100644 --- a/lib/es5/borderType.js +++ b/lib/es5/borderType.js @@ -5,4 +5,5 @@ var borderType = module.exports = { AF_PAD_ZERO: 0, AF_PAD_SYM: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvcmRlclR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFlBQVUsQ0FBRyxFQUFBO0FBQ2IsV0FBUyxDQUFHLEVBQUE7QUFBQSxBQUNoQixDQUFDO0FBQUEiLCJmaWxlIjoiYm9yZGVyVHlwZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgYm9yZGVyVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHBhZFplcm86IDAsXG4gICAgcGFkU3ltOiAxLFxuICAgIEFGX1BBRF9aRVJPOiAwLFxuICAgIEFGX1BBRF9TWU06IDFcbn07Il19 + +//# sourceMappingURL=borderType.js.map diff --git a/lib/es5/borderType.js.map b/lib/es5/borderType.js.map new file mode 100644 index 0000000..37d445e --- /dev/null +++ b/lib/es5/borderType.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["borderType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet borderType = module.exports = {\n padZero: 0,\n padSym: 1,\n AF_PAD_ZERO: 0,\n AF_PAD_SYM: 1\n};"],"file":"borderType.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cSpace.js b/lib/es5/cSpace.js index 7287135..e7716bf 100644 --- a/lib/es5/cSpace.js +++ b/lib/es5/cSpace.js @@ -7,4 +7,5 @@ var cSpace = module.exports = { AF_RGB: 1, AF_HSV: 2 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNTcGFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixLQUFHLENBQUcsRUFBQTtBQUNOLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxRQUFNLENBQUcsRUFBQTtBQUNULE9BQUssQ0FBRyxFQUFBO0FBQ1IsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJjU3BhY2UuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNTcGFjZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEdyYXk6IDAsIC8vLzwgR3JheXNjYWxlXG4gICAgUkdCOiAxLCAgICAgIC8vLzwgMy1jaGFubmVsIFJHQlxuICAgIEhTVjogMiwgICAgICAgLy8vPCAzLWNoYW5uZWwgSFNWXG4gICAgQUZfR1JBWTogMCwgLy8vPCBHcmF5c2NhbGVcbiAgICBBRl9SR0I6IDEsICAgICAgLy8vPCAzLWNoYW5uZWwgUkdCXG4gICAgQUZfSFNWOiAyICAgICAgIC8vLzwgMy1jaGFubmVsIEhTVlxufTsiXX0= + +//# sourceMappingURL=cSpace.js.map diff --git a/lib/es5/cSpace.js.map b/lib/es5/cSpace.js.map new file mode 100644 index 0000000..42bf7fa --- /dev/null +++ b/lib/es5/cSpace.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["cSpace.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet cSpace = module.exports = {\n Gray: 0, ///< Grayscale\n RGB: 1, ///< 3-channel RGB\n HSV: 2, ///< 3-channel HSV\n AF_GRAY: 0, ///< Grayscale\n AF_RGB: 1, ///< 3-channel RGB\n AF_HSV: 2 ///< 3-channel HSV\n};"],"file":"cSpace.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/col.js b/lib/es5/col.js index 87c01f9..5679ee9 100644 --- a/lib/es5/col.js +++ b/lib/es5/col.js @@ -6,4 +6,5 @@ function Col(index) { this.index = index; } module.exports = Col; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoiY29sLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gQ29sKGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2w7Il19 + +//# sourceMappingURL=col.js.map diff --git a/lib/es5/col.js.map b/lib/es5/col.js.map new file mode 100644 index 0000000..ab10ced --- /dev/null +++ b/lib/es5/col.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["col.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Col(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Col;"],"file":"col.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cols.js b/lib/es5/cols.js index 88d3470..2330a05 100644 --- a/lib/es5/cols.js +++ b/lib/es5/cols.js @@ -8,4 +8,5 @@ function Cols(firstIndex, lastIndex) { this.lastIndex = lastIndex; } module.exports = Cols; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoiY29scy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbHMoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2xzOyJdfQ== + +//# sourceMappingURL=cols.js.map diff --git a/lib/es5/cols.js.map b/lib/es5/cols.js.map new file mode 100644 index 0000000..e8f4175 --- /dev/null +++ b/lib/es5/cols.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["cols.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Cols(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Cols;"],"file":"cols.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/complex.js b/lib/es5/complex.js index 217e8f7..3fc3de1 100644 --- a/lib/es5/complex.js +++ b/lib/es5/complex.js @@ -8,4 +8,5 @@ function Complex(real, imag) { this.imag = imag; } module.exports = Complex; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxRQUFNLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ3pCLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEIsS0FBRyxLQUFLLEVBQUksS0FBRyxDQUFDO0FBQ2hCLEtBQUcsS0FBSyxFQUFJLEtBQUcsQ0FBQztBQUNwQjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksUUFBTSxDQUFDO0FBQUEiLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbXBsZXgocmVhbCwgaW1hZykge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKHJlYWwpKTtcbiAgICBhc3NlcnQoXy5pc051bWJlcihpbWFnKSk7XG5cbiAgICB0aGlzLnJlYWwgPSByZWFsO1xuICAgIHRoaXMuaW1hZyA9IGltYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcGxleDsiXX0= + +//# sourceMappingURL=complex.js.map diff --git a/lib/es5/complex.js.map b/lib/es5/complex.js.map new file mode 100644 index 0000000..b71c5a8 --- /dev/null +++ b/lib/es5/complex.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["complex.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Complex(real, imag) {\n assert(_.isNumber(real));\n assert(_.isNumber(imag));\n\n this.real = real;\n this.imag = imag;\n}\n\nmodule.exports = Complex;"],"file":"complex.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/connectivity.js b/lib/es5/connectivity.js index 8c993ef..8a4f9c0 100644 --- a/lib/es5/connectivity.js +++ b/lib/es5/connectivity.js @@ -5,4 +5,5 @@ var connectivity = module.exports = { AF_CONNECTIVITY_4: 4, AF_CONNECTIVITY_8: 8 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbm5lY3Rpdml0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxZQUFXLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUNoQyxjQUFZLENBQUcsRUFBQTtBQUNmLGNBQVksQ0FBRyxFQUFBO0FBQ2Ysa0JBQWdCLENBQUcsRUFBQTtBQUNuQixrQkFBZ0IsQ0FBRyxFQUFBO0FBQUEsQUFDdkIsQ0FBQztBQUFBIiwiZmlsZSI6ImNvbm5lY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29ubmVjdGl2aXR5ID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY29ubmVjdGl2aXR5NDogNCxcbiAgICBjb25uZWN0aXZpdHk4OiA4LFxuICAgIEFGX0NPTk5FQ1RJVklUWV80OiA0LFxuICAgIEFGX0NPTk5FQ1RJVklUWV84OiA4XG59OyJdfQ== + +//# sourceMappingURL=connectivity.js.map diff --git a/lib/es5/connectivity.js.map b/lib/es5/connectivity.js.map new file mode 100644 index 0000000..aa18153 --- /dev/null +++ b/lib/es5/connectivity.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["connectivity.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet connectivity = module.exports = {\n connectivity4: 4,\n connectivity8: 8,\n AF_CONNECTIVITY_4: 4,\n AF_CONNECTIVITY_8: 8\n};"],"file":"connectivity.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convDomain.js b/lib/es5/convDomain.js index e60b19d..b3fd12a 100644 --- a/lib/es5/convDomain.js +++ b/lib/es5/convDomain.js @@ -7,4 +7,5 @@ var convDomain = module.exports = { AF_CONV_SPATIAL: 1, AF_CONV_FREQ: 2 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZEb21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsS0FBRyxDQUFHLEVBQUE7QUFDTixRQUFNLENBQUcsRUFBQTtBQUNULEtBQUcsQ0FBRyxFQUFBO0FBQ04sYUFBVyxDQUFHLEVBQUE7QUFDZCxnQkFBYyxDQUFHLEVBQUE7QUFDakIsYUFBVyxDQUFHLEVBQUE7QUFBQSxBQUNsQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udkRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29udkRvbWFpbiA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGF1dG86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIHNwYXRpYWw6IDEsIC8vLzwgUGVyZm9ybSBjb252b2x1dGlvbiBpbiBzcGF0aWFsIGRvbWFpblxuICAgIGZyZXE6IDIsICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbiAgICBBRl9DT05WX0FVVE86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIEFGX0NPTlZfU1BBVElBTDogMSwgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIHNwYXRpYWwgZG9tYWluXG4gICAgQUZfQ09OVl9GUkVROiAyICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbn07Il19 + +//# sourceMappingURL=convDomain.js.map diff --git a/lib/es5/convDomain.js.map b/lib/es5/convDomain.js.map new file mode 100644 index 0000000..86aad15 --- /dev/null +++ b/lib/es5/convDomain.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["convDomain.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convDomain = module.exports = {\n auto: 0, ///< ArrayFire automatically picks the right convolution algorithm\n spatial: 1, ///< Perform convolution in spatial domain\n freq: 2, ///< Perform convolution in frequency domain\n AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm\n AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain\n AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain\n};"],"file":"convDomain.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convMode.js b/lib/es5/convMode.js index baa4f46..b6c7bbc 100644 --- a/lib/es5/convMode.js +++ b/lib/es5/convMode.js @@ -5,4 +5,5 @@ var convMode = module.exports = { AF_CONV_DEFAULT: 0, AF_CONV_EXPAND: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZNb2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBSTVCLFFBQU0sQ0FBRyxFQUFBO0FBS1QsT0FBSyxDQUFHLEVBQUE7QUFJUixnQkFBYyxDQUFHLEVBQUE7QUFLakIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udk1vZGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNvbnZNb2RlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIGRlZmF1bHQ6IDAsXG5cbiAgICAvLy9cbiAgICAvLy8gT3V0cHV0IG9mIHRoZSBjb252b2x1dGlvbiBpcyBzaWduYWxfbGVuICsgZmlsdGVyX2xlbiAtIDFcbiAgICAvLy9cbiAgICBleHBhbmQ6IDEsXG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIEFGX0NPTlZfREVGQVVMVDogMCxcblxuICAgIC8vL1xuICAgIC8vLyBPdXRwdXQgb2YgdGhlIGNvbnZvbHV0aW9uIGlzIHNpZ25hbF9sZW4gKyBmaWx0ZXJfbGVuIC0gMVxuICAgIC8vL1xuICAgIEFGX0NPTlZfRVhQQU5EOiAxXG59OyJdfQ== + +//# sourceMappingURL=convMode.js.map diff --git a/lib/es5/convMode.js.map b/lib/es5/convMode.js.map new file mode 100644 index 0000000..ceaead7 --- /dev/null +++ b/lib/es5/convMode.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["convMode.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convMode = module.exports = {\n ///\n /// Output of the convolution is the same size as input\n ///\n default: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n expand: 1,\n ///\n /// Output of the convolution is the same size as input\n ///\n AF_CONV_DEFAULT: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n AF_CONV_EXPAND: 1\n};"],"file":"convMode.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dim4.js b/lib/es5/dim4.js index 64f81a2..84abc32 100644 --- a/lib/es5/dim4.js +++ b/lib/es5/dim4.js @@ -36,4 +36,5 @@ function Dim4(dim0, dim1, dim2, dim3) { this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3]; } module.exports = Dim4; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpbTQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ2xDLEtBQUksQ0FBQSxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBRztBQUNqQixTQUFPLElBQUksS0FBRyxBQUFDLENBQUMsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFHLENBQUEsSUFBRyxDQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7RUFDdkQ7QUFBQSxBQUNBLEtBQUcsT0FBTyxFQUFJLEdBQUMsQ0FBQztBQUNoQixLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUM3RSxLQUFJLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUc7QUFBRSxPQUFHLE9BQU8sS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUE7RUFBRSxLQUFPO0FBQUUsT0FBRyxPQUFPLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0VBQUU7QUFBQSxBQUN6RSxJQUFBLENBQUEsS0FBSSxDQUFDO0FBQ1QsTUFBSyxLQUFJLEVBQUksRUFBQSxDQUFHLENBQUEsS0FBSSxHQUFLLEVBQUEsQ0FBRyxDQUFBLEtBQUksRUFBRSxDQUFHO0FBQ2pDLE9BQUksSUFBRyxPQUFPLENBQUUsS0FBSSxDQUFDLElBQU0sRUFBQSxDQUFHO0FBQzFCLFdBQUs7SUFDVDtBQUFBLEVBQ0o7QUFBQSxBQUNBLEtBQUcsTUFBTSxFQUFJLENBQUEsSUFBRyxNQUFNLEVBQUksQ0FBQSxLQUFJLEVBQUksRUFBQSxDQUFDO0FBQ25DLEtBQUcsU0FBUyxFQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLEVBQUksQ0FBQSxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsQ0FBQSxDQUFJLENBQUEsSUFBRyxPQUFPLENBQUUsQ0FBQSxDQUFDLENBQUEsQ0FBSSxDQUFBLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ3JGO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxLQUFHLENBQUM7QUFBQSIsImZpbGUiOiJkaW00LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gRGltNChkaW0wLCBkaW0xLCBkaW0yLCBkaW0zKSB7XG4gICAgaWYgKF8uaXNBcnJheShkaW0wKSkge1xuICAgICAgICByZXR1cm4gbmV3IERpbTQoZGltMFswXSwgZGltMFsxXSwgZGltMFsyXSwgZGltMFszXSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMCkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0wKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMSkpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0xKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMikpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0yKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgaWYgKF8uaXNOdW1iZXIoZGltMykpIHsgdGhpcy52YWx1ZXMucHVzaChkaW0zKSB9IGVsc2UgeyB0aGlzLnZhbHVlcy5wdXNoKDEpOyB9XG4gICAgbGV0IGluZGV4O1xuICAgIGZvciAoaW5kZXggPSAzOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRleF0gIT09IDEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMubmRpbXMgPSB0aGlzLm5EaW1zID0gaW5kZXggKyAxO1xuICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLnZhbHVlc1swXSAqIHRoaXMudmFsdWVzWzFdICogdGhpcy52YWx1ZXNbMl0gKiB0aGlzLnZhbHVlc1szXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaW00OyJdfQ== + +//# sourceMappingURL=dim4.js.map diff --git a/lib/es5/dim4.js.map b/lib/es5/dim4.js.map new file mode 100644 index 0000000..c83c87b --- /dev/null +++ b/lib/es5/dim4.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["dim4.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Dim4(dim0, dim1, dim2, dim3) {\n if (_.isArray(dim0)) {\n return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]);\n }\n this.values = [];\n if (_.isNumber(dim0)) { this.values.push(dim0) } else { this.values.push(1); }\n if (_.isNumber(dim1)) { this.values.push(dim1) } else { this.values.push(1); }\n if (_.isNumber(dim2)) { this.values.push(dim2) } else { this.values.push(1); }\n if (_.isNumber(dim3)) { this.values.push(dim3) } else { this.values.push(1); }\n let index;\n for (index = 3; index >= 0; index--) {\n if (this.values[index] !== 1) {\n break;\n }\n }\n this.ndims = this.nDims = index + 1;\n this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3];\n}\n\nmodule.exports = Dim4;"],"file":"dim4.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dtype.js b/lib/es5/dtype.js index 3ab28c2..752f41e 100644 --- a/lib/es5/dtype.js +++ b/lib/es5/dtype.js @@ -11,4 +11,5 @@ var dType = module.exports = { s64: 8, u64: 9 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR0eXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQ3pCLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQUEsQUFDVCxDQUFDO0FBQUEiLCJmaWxlIjoiZHR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGRUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZjMyOiAwLFxuICAgIGMzMjogMSxcbiAgICBmNjQ6IDIsXG4gICAgYzY0OiAzLFxuICAgIGI4OiA0LFxuICAgIHMzMjogNSxcbiAgICB1MzI6IDYsXG4gICAgdTg6IDcsXG4gICAgczY0OiA4LFxuICAgIHU2NDogOVxufTsiXX0= + +//# sourceMappingURL=dtype.js.map diff --git a/lib/es5/dtype.js.map b/lib/es5/dtype.js.map new file mode 100644 index 0000000..99d29f7 --- /dev/null +++ b/lib/es5/dtype.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["dtype.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet dType = module.exports = {\n f32: 0,\n c32: 1,\n f64: 2,\n c64: 3,\n b8: 4,\n s32: 5,\n u32: 6,\n u8: 7,\n s64: 8,\n u64: 9\n};"],"file":"dtype.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/ext.js b/lib/es5/ext.js index 52608f2..a7ea3a0 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -231,4 +231,5 @@ function ext(af) { }); } module.exports = ext; -//# sourceMappingURL=data:application/json;base64,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b3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xuXG5jb25zdCByZXRyeUNvdW50ID0gNTtcbmNvbnN0IGdjVGltZSA9IDEwMDA7XG5cbmZ1bmN0aW9uIGlzT3V0T2ZNZW1vcnlFcnJvcihlKSB7XG4gICAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKFwiOTk4XCIpID4gMDtcbn1cblxuZnVuY3Rpb24gaW52b2tlR0MoYWYpIHtcbiAgICBhZi5nYyhnY1RpbWUpO1xufVxuXG5mdW5jdGlvbiBzeW5jaHJvbmlmeShhZiwgZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlcnI7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHZhciBkb25lO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIHJlcyA9IHI7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpLmNvbmNhdChjYik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGYuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB3aGlsZSAoIWRvbmUpIGFmLl9kb0V2ZW50cygpO1xuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VHQyhhZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycikgdGhyb3cgZXJyO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgb2JqLCBuYW1lKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgICAgICAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSBcIkFGQXJyYXlcIikge1xuICAgICAgICBsZXQgZiA9IG9ialtuYW1lXTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihmKSkge1xuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIkFzeW5jXCJdKSkge1xuICAgICAgICAgICAgICAgIG9ialtuYW1lICsgXCJBc3luY1wiXSA9IGFzeW5jKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3MgPSBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsdWViaXJkKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIGNhbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlR0MoYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIlN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIlN5bmNcIl0gPSBzeW5jaHJvbmlmeShhZiwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVyciA9IG51bGw7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPdXRPZk1lbW9yeUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZUdDKGFmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZXh0KGFmKSB7XG4gICAgaW5zdGFsbEFzeW5jQW5kU3luYyhhZiwgYWYpO1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmLkFGQXJyYXkpO1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmLkFGQXJyYXkucHJvdG90eXBlKTtcblxuICAgIF8uZXh0ZW5kKGFmLCB7XG4gICAgICAgIGVuZDogLTEsXG4gICAgICAgIHNwYW46IG51bGwsXG4gICAgICAgIGFsbDogLTEsXG4gICAgICAgIGR0eXBlOiByZXF1aXJlKFwiLi9kdHlwZVwiKSxcbiAgICAgICAgZFR5cGU6IHJlcXVpcmUoXCIuL2R0eXBlXCIpLFxuICAgICAgICBzb3VyY2U6IHJlcXVpcmUoXCIuL3NvdXJjZVwiKSxcbiAgICAgICAgbWF0Y2hUeXBlOiByZXF1aXJlKFwiLi9tYXRjaFR5cGVcIiksXG4gICAgICAgIGNTcGFjZTogcmVxdWlyZShcIi4vY1NwYWNlXCIpLFxuICAgICAgICBDU3BhY2U6IHJlcXVpcmUoXCIuL2NTcGFjZVwiKSxcbiAgICAgICAgY29ubmVjdGl2aXR5OiByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHlcIiksXG4gICAgICAgIGJvcmRlclR5cGU6IHJlcXVpcmUoXCIuL2JvcmRlclR5cGVcIiksXG4gICAgICAgIGludGVycFR5cGU6IHJlcXVpcmUoXCIuL2ludGVycFR5cGVcIiksXG4gICAgICAgIG1hdFByb3A6IHJlcXVpcmUoXCIuL21hdFByb3BcIiksXG4gICAgICAgIG5vcm1UeXBlOiByZXF1aXJlKFwiLi9ub3JtVHlwZVwiKSxcbiAgICAgICAgY29udk1vZGU6IHJlcXVpcmUoXCIuL2NvbnZNb2RlXCIpLFxuICAgICAgICBjb252RG9tYWluOiByZXF1aXJlKFwiLi9jb252RG9tYWluXCIpLFxuICAgICAgICBEaW00OiByZXF1aXJlKFwiLi9kaW00XCIpLFxuICAgICAgICBTZXE6IHJlcXVpcmUoXCIuL3NlcVwiKSxcbiAgICAgICAgQ29tcGxleDogcmVxdWlyZShcIi4vY29tcGxleFwiKSxcbiAgICAgICAgUm93OiByZXF1aXJlKFwiLi9yb3dcIiksXG4gICAgICAgIENvbDogcmVxdWlyZShcIi4vY29sXCIpLFxuICAgICAgICBSb3dzOiByZXF1aXJlKFwiLi9yb3dzXCIpLFxuICAgICAgICBDb2xzOiByZXF1aXJlKFwiLi9jb2xzXCIpLFxuICAgICAgICBnZXREZXZpY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuZ2V0RGV2aWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGV2aWNlKGkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZGV2aWNlSW5mbygpO1xuICAgICAgICAgICAgICAgICAgICBpbmZvLmlkID0gaTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERldmljZShjdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2ZvcjogcmVxdWlyZShcIi4vbWFrZUdmb3JcIikoYWYpXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0OyJdfQ== + +//# sourceMappingURL=ext.js.map diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map new file mode 100644 index 0000000..8cca3f5 --- /dev/null +++ b/lib/es5/ext.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["ext.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"998\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n })\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af)\n });\n}\n\nmodule.exports = ext;"],"file":"ext.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/index.js b/lib/es5/index.js index 00e3e2b..14970e2 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -56,4 +56,5 @@ entry.supportedPlatforms = function() { } return platforms; }; -//# sourceMappingURL=data:application/json;base64,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Q0FBQSxXQUF1QixHQUFLLEtBQUcsQ0FBRztBQUMxRCxrQkFBd0IsQUFBQyxFQUFDLENBQUM7TUFDN0I7QUFBQSxJQUNGLENBQUUsT0FBUTtBQUNSLGNBQXdCO0FBQ3RCLGtCQUF3QjtNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsQUFtREosT0FBTyxVQUFRLENBQUM7QUFDcEIsQ0FBQztBQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBleHQgPSByZXF1aXJlKFwiLi9leHRcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5cbmxldCBlbnRyeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgZGlkID0gXy5pc1N0cmluZyhpZCkgPyBpZC50cmltKCkudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgZGlkID0gZGlkIHx8IFwiY3B1XCI7XG4gICAgZnVuY3Rpb24gY3JlYXRlQUYoKSB7XG4gICAgICAgIHN3aXRjaCAoZGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwiY3B1XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DUFVcIik7XG4gICAgICAgICAgICBjYXNlIFwiY3VkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfQ1VEQVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJvcGVuY2xcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX09wZW5DTFwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhdGZvcm0gJ1wiICsgaWQgKyBcIicgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGFmID0gY3JlYXRlQUYoKTtcbiAgICBpZiAoIWFmLl9fZXh0ZW5kZWQpIHtcbiAgICAgICAgZXh0KGFmKTtcbiAgICAgICAgYWYuX19leHRlbmRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhZjtcbn07XG5cbmVudHJ5LnN1cHBvcnRlZFBsYXRmb3JtcyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBwbGF0Zm9ybXMgPSBbXTtcbiAgICBmb3IgKGxldCBpZCBvZiBbXCJDUFVcIiwgXCJDVURBXCIsIFwiT3BlbkNMXCJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZmlyZSA9IGVudHJ5KGlkKTtcbiAgICAgICAgICAgIHBsYXRmb3Jtcy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsYXRmb3Jtcztcbn07Il19 + +//# sourceMappingURL=index.js.map diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map new file mode 100644 index 0000000..3572d66 --- /dev/null +++ b/lib/es5/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n }\n }\n return platforms;\n};"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/interpType.js b/lib/es5/interpType.js index 636f1e5..04d93d6 100644 --- a/lib/es5/interpType.js +++ b/lib/es5/interpType.js @@ -9,4 +9,5 @@ var interpType = module.exports = { AF_INTERP_BILINEAR: 2, AF_INTERP_CUBIC: 3 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVycFR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFVBQVEsQ0FBSSxFQUFBO0FBQ1osTUFBSSxDQUFHLEVBQUE7QUFDUCxrQkFBZ0IsQ0FBRyxFQUFBO0FBQ25CLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBSSxFQUFBO0FBQ3JCLGdCQUFjLENBQUcsRUFBQTtBQUFBLEFBQ3JCLENBQUM7QUFBQSIsImZpbGUiOiJpbnRlcnBUeXBlLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBpbnRlcnBUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmVhcmVzdDogMCwgIC8vLzwgTmVhcmVzdCBJbnRlcnBvbGF0aW9uXG4gICAgbGluZWFyOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBiaWxpbmVyYXIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBjdWJpYzogMywgICAgLy8vPCBDdWJpYyBJbnRlcnBvbGF0aW9uLFxuICAgIEFGX0lOVEVSUF9ORUFSRVNUOiAwLCAgLy8vPCBOZWFyZXN0IEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfTElORUFSOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQklMSU5FQVIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQ1VCSUM6IDMgICAgIC8vLzwgQ3ViaWMgSW50ZXJwb2xhdGlvblxufTsiXX0= + +//# sourceMappingURL=interpType.js.map diff --git a/lib/es5/interpType.js.map b/lib/es5/interpType.js.map new file mode 100644 index 0000000..d5ebc96 --- /dev/null +++ b/lib/es5/interpType.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["interpType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet interpType = module.exports = {\n nearest: 0, ///< Nearest Interpolation\n linear: 1, ///< Linear Interpolation\n bilinerar : 2, ///< Bilinear Interpolation\n cubic: 3, ///< Cubic Interpolation,\n AF_INTERP_NEAREST: 0, ///< Nearest Interpolation\n AF_INTERP_LINEAR: 1, ///< Linear Interpolation\n AF_INTERP_BILINEAR : 2, ///< Bilinear Interpolation\n AF_INTERP_CUBIC: 3 ///< Cubic Interpolation\n};"],"file":"interpType.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/makeGfor.js b/lib/es5/makeGfor.js index 15099a9..0ea2981 100644 --- a/lib/es5/makeGfor.js +++ b/lib/es5/makeGfor.js @@ -39,4 +39,5 @@ function makeGfor(af) { }; } module.exports = makeGfor; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ha2VHZm9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO0FBRTFCLE9BQVMsU0FBTyxDQUFFLEVBQUMsQ0FBRztBQUNsQixPQUFPLFNBQVMsS0FBRyxDQUFFLEFBQUQsQ0FBRztBQUNuQixBQUFJLE1BQUEsQ0FBQSxJQUFHLEVBQUksRUFBQyxDQUFBLENBQUM7QUFDYixlQUFZLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLFNBQVEsT0FBTyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7QUFDdEMsU0FBSSxDQUFBLFdBQVcsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFHO0FBQzVCLFdBQUcsRUFBSSxFQUFBLENBQUM7QUFDUixhQUFLO01BQ1Q7QUFBQSxJQUNKO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFDLENBQUEsQ0FBRztBQUNiLFVBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxrQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZEO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFBLENBQUc7QUFDWixVQUFNLElBQUksTUFBSSxBQUFDLENBQUMseUJBQXdCLENBQUMsQ0FBQztJQUM5QztBQUFBLEFBQ0ksTUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLFNBQVEsQ0FBRSxJQUFHLENBQUMsQ0FBQztBQUM3QixPQUFJLFNBQVEsT0FBTyxFQUFJLENBQUEsSUFBRyxFQUFJLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLEVBQUksRUFBQSxDQUFDLENBQUc7QUFDckQsWUFBTSxFQUFJLENBQUEsU0FBUSxDQUFFLElBQUcsRUFBSSxFQUFBLENBQUMsQ0FBQztJQUNqQztBQUFBLEFBQ0ksTUFBQSxDQUFBLEdBQUUsQ0FBQztBQUNQLE9BQUksSUFBRyxJQUFNLEVBQUEsQ0FBRztBQUNaLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQy9CLEtBQ0ssS0FBSSxJQUFHLElBQU0sRUFBQSxDQUFHO0FBQ2pCLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQ0s7QUFDRCxVQUFNLElBQUksTUFBSSxBQUFDLENBQUMsa0NBQWlDLENBQUMsQ0FBQztJQUN2RDtBQUFBLEFBQ0EsTUFBRSxPQUFPLEVBQUksS0FBRyxDQUFDO0FBQ2pCLEtBQUMsWUFBWSxBQUFDLEVBQUMsQ0FBQztBQUNoQixNQUFJO0FBQ0EsY0FBUSxDQUFFLElBQUcsQ0FBQyxLQUFLLEFBQUMsQ0FBQyxPQUFNLENBQUcsSUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FDQSxPQUFRO0FBQ0osT0FBQyxZQUFZLEFBQUMsRUFBQyxDQUFDO0lBQ3BCO0FBQUEsRUFDSixDQUFBO0FBQ0o7QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLFNBQU8sQ0FBQztBQUFBIiwiZmlsZSI6Im1ha2VHZm9yLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbiBDb3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IFNlcSA9IHJlcXVpcmUoXCIuL3NlcVwiKTtcblxuZnVuY3Rpb24gbWFrZUdmb3IoYWYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2ZvcigpIHtcbiAgICAgICAgbGV0IGZQb3MgPSAtMTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZlBvcyA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZQb3MgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb2R5IGZ1bmN0aW9uIGFyZ3VtZW50IGV4cGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZlBvcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VxIGFyZ3VtZW50cyBleHBlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvc107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gZlBvcyArIDEgJiYgXy5pc09iamVjdChmUG9zICsgMSkpIHtcbiAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvcyArIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXE7XG4gICAgICAgIGlmIChmUG9zID09PSAxKSB7XG4gICAgICAgICAgICBzZXEgPSBuZXcgU2VxKGFyZ3VtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZlBvcyA9PT0gMikge1xuICAgICAgICAgICAgc2VxID0gbmV3IFNlcShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBTZXEgYXJndW1lbnRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXEuaXNHRm9yID0gdHJ1ZTtcbiAgICAgICAgYWYuX2dmb3JUb2dnbGUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFyZ3VtZW50c1tmUG9zXS5jYWxsKHRoaXNBcmcsIHNlcSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhZi5fZ2ZvclRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1ha2VHZm9yOyJdfQ== + +//# sourceMappingURL=makeGfor.js.map diff --git a/lib/es5/makeGfor.js.map b/lib/es5/makeGfor.js.map new file mode 100644 index 0000000..02467a8 --- /dev/null +++ b/lib/es5/makeGfor.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["makeGfor.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet Seq = require(\"./seq\");\n\nfunction makeGfor(af) {\n return function gfor() {\n let fPos = -1;\n for(let i = 0; i < arguments.length; i++) {\n if (_.isFunction(arguments[i])) {\n fPos = i;\n break;\n }\n }\n if (fPos === -1) {\n throw new Error(\"Body function argument expected.\");\n }\n if (fPos === 0) {\n throw new Error(\"Seq arguments expected.\");\n }\n let thisArg = arguments[fPos];\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\n thisArg = arguments[fPos + 1];\n }\n let seq;\n if (fPos === 1) {\n seq = new Seq(arguments[0]);\n }\n else if (fPos === 2) {\n seq = new Seq(arguments[0], arguments[1]);\n }\n else {\n throw new Error(\"Invalid number of Seq arguments.\");\n }\n seq.isGFor = true;\n af._gforToggle();\n try {\n arguments[fPos].call(thisArg, seq);\n }\n finally {\n af._gforToggle();\n }\n }\n}\n\nmodule.exports = makeGfor;"],"file":"makeGfor.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matProp.js b/lib/es5/matProp.js index f7d0ce9..383daba 100644 --- a/lib/es5/matProp.js +++ b/lib/es5/matProp.js @@ -23,4 +23,5 @@ var matProp = module.exports = { AF_MAT_TRI_DIAG: 4096, AF_MAT_BLOCK_DIAG: 8192 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdFByb3AuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDM0IsS0FBRyxDQUFVLEVBQUE7QUFDYixNQUFJLENBQVMsRUFBQTtBQUNiLE9BQUssQ0FBUSxFQUFBO0FBQ2IsTUFBSSxDQUFTLEdBQUM7QUFDZCxNQUFJLENBQVMsR0FBQztBQUNkLFNBQU8sQ0FBTSxJQUFFO0FBQ2YsSUFBRSxDQUFXLElBQUU7QUFDZixPQUFLLENBQVEsS0FBRztBQUNoQixPQUFLLENBQVEsS0FBRztBQUNoQixRQUFNLENBQU8sS0FBRztBQUNoQixVQUFRLENBQUssS0FBRztBQUNoQixZQUFVLENBQVUsRUFBQTtBQUNwQixhQUFXLENBQVMsRUFBQTtBQUNwQixjQUFZLENBQVEsRUFBQTtBQUNwQixhQUFXLENBQVMsR0FBQztBQUNyQixhQUFXLENBQVMsR0FBQztBQUNyQixpQkFBZSxDQUFLLElBQUU7QUFDdEIsV0FBUyxDQUFXLElBQUU7QUFDdEIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsZ0JBQWMsQ0FBTSxLQUFHO0FBQ3ZCLGtCQUFnQixDQUFJLEtBQUc7QUFBQSxBQUMzQixDQUFDO0FBQUEiLCJmaWxlIjoibWF0UHJvcC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgbWF0UHJvcCA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5vbmUgICAgICAgOiAwLCAgICAvLy88IERlZmF1bHRcbiAgICB0cmFucyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBjVHJhbnMgICAgIDogMiwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIGNvbmp1Z2F0ZSB0YW5zcG9zZWRcbiAgICB1cHBlciAgICAgIDogMzIsICAgLy8vPCBNYXRyaXggaXMgdXBwZXIgdHJpYW5ndWxhclxuICAgIGxvd2VyICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgZGlhZ1VuaXQgICA6IDEyOCwgIC8vLzwgTWF0cml4IGRpYWdvbmFsIGNvbnRhaW5zIHVuaXRhcnkgdmFsdWVzXG4gICAgc3ltICAgICAgICA6IDUxMiwgIC8vLzwgTWF0cml4IGlzIHN5bW1ldHJpY1xuICAgIHBvc0RlZiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIG9ydGhvZyAgICAgOiAyMDQ4LCAvLy88IE1hdHJpeCBpcyBvcnRob2dvbmFsXG4gICAgdHJpRGlhZyAgICA6IDQwOTYsIC8vLzwgTWF0cml4IGlzIHRyaSBkaWFnb25hbFxuICAgIGJsb2NrRGlhZyAgOiA4MTkyLCAgLy8vPCBNYXRyaXggaXMgYmxvY2sgZGlhZ29uYWxcbiAgICBBRl9NQVRfTk9ORSAgICAgICA6IDAsICAgIC8vLzwgRGVmYXVsdFxuICAgIEFGX01BVF9UUkFOUyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBBRl9NQVRfQ1RSQU5TICAgICA6IDIsICAgIC8vLzwgRGF0YSBuZWVkcyB0byBiZSBjb25qdWdhdGUgdGFuc3Bvc2VkXG4gICAgQUZfTUFUX1VQUEVSICAgICAgOiAzMiwgICAvLy88IE1hdHJpeCBpcyB1cHBlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0xPV0VSICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0RJQUdfVU5JVCAgOiAxMjgsICAvLy88IE1hdHJpeCBkaWFnb25hbCBjb250YWlucyB1bml0YXJ5IHZhbHVlc1xuICAgIEFGX01BVF9TWU0gICAgICAgIDogNTEyLCAgLy8vPCBNYXRyaXggaXMgc3ltbWV0cmljXG4gICAgQUZfTUFUX1BPU0RFRiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIEFGX01BVF9PUlRIT0cgICAgIDogMjA0OCwgLy8vPCBNYXRyaXggaXMgb3J0aG9nb25hbFxuICAgIEFGX01BVF9UUklfRElBRyAgIDogNDA5NiwgLy8vPCBNYXRyaXggaXMgdHJpIGRpYWdvbmFsXG4gICAgQUZfTUFUX0JMT0NLX0RJQUcgOiA4MTkyICAvLy88IE1hdHJpeCBpcyBibG9jayBkaWFnb25hbFxufTsiXX0= + +//# sourceMappingURL=matProp.js.map diff --git a/lib/es5/matProp.js.map b/lib/es5/matProp.js.map new file mode 100644 index 0000000..be6c4a1 --- /dev/null +++ b/lib/es5/matProp.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["matProp.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matProp = module.exports = {\n none : 0, ///< Default\n trans : 1, ///< Data needs to be transposed\n cTrans : 2, ///< Data needs to be conjugate tansposed\n upper : 32, ///< Matrix is upper triangular\n lower : 64, ///< Matrix is lower triangular\n diagUnit : 128, ///< Matrix diagonal contains unitary values\n sym : 512, ///< Matrix is symmetric\n posDef : 1024, ///< Matrix is positive definite\n orthog : 2048, ///< Matrix is orthogonal\n triDiag : 4096, ///< Matrix is tri diagonal\n blockDiag : 8192, ///< Matrix is block diagonal\n AF_MAT_NONE : 0, ///< Default\n AF_MAT_TRANS : 1, ///< Data needs to be transposed\n AF_MAT_CTRANS : 2, ///< Data needs to be conjugate tansposed\n AF_MAT_UPPER : 32, ///< Matrix is upper triangular\n AF_MAT_LOWER : 64, ///< Matrix is lower triangular\n AF_MAT_DIAG_UNIT : 128, ///< Matrix diagonal contains unitary values\n AF_MAT_SYM : 512, ///< Matrix is symmetric\n AF_MAT_POSDEF : 1024, ///< Matrix is positive definite\n AF_MAT_ORTHOG : 2048, ///< Matrix is orthogonal\n AF_MAT_TRI_DIAG : 4096, ///< Matrix is tri diagonal\n AF_MAT_BLOCK_DIAG : 8192 ///< Matrix is block diagonal\n};"],"file":"matProp.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matchType.js b/lib/es5/matchType.js index 843c689..8fb1086 100644 --- a/lib/es5/matchType.js +++ b/lib/es5/matchType.js @@ -19,4 +19,5 @@ var matchType = module.exports = { AF_ZNCC: 7, AF_SHD: 8 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGNoVHlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxTQUFRLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUM3QixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sSUFBRSxDQUFHLEVBQUE7QUFDTCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJtYXRjaFR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG1hdGNoVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFNBRDogMCxcbiAgICB6U0FEOiAxLFxuICAgIGxTQUQ6IDIsXG4gICAgU1NEOiAzLFxuICAgIHpTU0Q6IDQsXG4gICAgbFNTRDogNSxcbiAgICBOQ0M6IDYsXG4gICAgek5DQzogNyxcbiAgICBTSEQ6IDgsXG4gICAgQUZfU0FEOiAwLFxuICAgIEFGX1pTQUQ6IDEsXG4gICAgQUZfTFNBRDogMixcbiAgICBBRl9TU0Q6IDMsXG4gICAgQUZfWlNTRDogNCxcbiAgICBBRl9MU1NEOiA1LFxuICAgIEFGX05DQzogNixcbiAgICBBRl9aTkNDOiA3LFxuICAgIEFGX1NIRDogOFxufTsiXX0= + +//# sourceMappingURL=matchType.js.map diff --git a/lib/es5/matchType.js.map b/lib/es5/matchType.js.map new file mode 100644 index 0000000..e35ad8d --- /dev/null +++ b/lib/es5/matchType.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["matchType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matchType = module.exports = {\n SAD: 0,\n zSAD: 1,\n lSAD: 2,\n SSD: 3,\n zSSD: 4,\n lSSD: 5,\n NCC: 6,\n zNCC: 7,\n SHD: 8,\n AF_SAD: 0,\n AF_ZSAD: 1,\n AF_LSAD: 2,\n AF_SSD: 3,\n AF_ZSSD: 4,\n AF_LSSD: 5,\n AF_NCC: 6,\n AF_ZNCC: 7,\n AF_SHD: 8\n};"],"file":"matchType.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/normType.js b/lib/es5/normType.js index 96bdd7b..da380e0 100644 --- a/lib/es5/normType.js +++ b/lib/es5/normType.js @@ -19,4 +19,5 @@ var normType = module.exports = { AF_NORM_MATRIX_L_PQ: 8, AF_NORM_EUCLID: 3 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1UeXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQzVCLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxRQUFNLENBQUcsRUFBQTtBQUNULFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxVQUFRLENBQUcsRUFBQTtBQUNYLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxPQUFLLENBQUcsRUFBQTtBQUNSLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBRyxFQUFBO0FBQ3BCLGlCQUFlLENBQUcsRUFBQTtBQUNsQixpQkFBZSxDQUFHLEVBQUE7QUFDbEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG1CQUFpQixDQUFHLEVBQUE7QUFDcEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG9CQUFrQixDQUFHLEVBQUE7QUFDckIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoibm9ybVR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG5vcm1UeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmVjdG9yMTogMSwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHN1bSBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICB2ZWN0b3JJbmY6IDIsICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgbWF4IG9mIGFic29sdXRlIHZhbHVlc1xuICAgIHZlY3RvcjI6IDMsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGV1Y2xpZGVhbiBub3JtXG4gICAgdmVjdG9yUDogNCwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHAtbm9ybVxuICAgIG1hdHJpeDE6IDUsICAgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiBjb2x1bW4gc3Vtc1xuICAgIG1hdHJpeEluZjogNiwgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiByb3cgc3Vtc1xuICAgIG1hdHJpeDI6IDcsICAgICAgLy8vPCByZXR1cm5zIHRoZSBtYXggc2luZ3VsYXIgdmFsdWUpLiBDdXJyZW50bHkgTk9UIFNVUFBPUlRFRFxuICAgIG1hdHJpeExQcTogOCwgICAvLy88IHJldHVybnMgTHBxLW5vcm1cbiAgICBldWNsaWQ6IDMsIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgdmVjdG9yMlxuICAgIEFGX05PUk1fVkVDVE9SXzE6IDEsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgYWJzb2x1dGUgdmFsdWVzXG4gICAgQUZfTk9STV9WRUNUT1JfSU5GOiAyLCAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1heCBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICBBRl9OT1JNX1ZFQ1RPUl8yOiAzLCAgICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyBldWNsaWRlYW4gbm9ybVxuICAgIEFGX05PUk1fVkVDVE9SX1A6IDQsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBwLW5vcm1cbiAgICBBRl9OT1JNX01BVFJJWF8xOiA1LCAgICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2YgY29sdW1uIHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF9JTkY6IDYsICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2Ygcm93IHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF8yOiA3LCAgICAgIC8vLzwgcmV0dXJucyB0aGUgbWF4IHNpbmd1bGFyIHZhbHVlKS4gQ3VycmVudGx5IE5PVCBTVVBQT1JURURcbiAgICBBRl9OT1JNX01BVFJJWF9MX1BROiA4LCAgIC8vLzwgcmV0dXJucyBMcHEtbm9ybVxuICAgIEFGX05PUk1fRVVDTElEOiAzIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgQUZfTk9STV9WRUNUT1JfMlxufTsiXX0= + +//# sourceMappingURL=normType.js.map diff --git a/lib/es5/normType.js.map b/lib/es5/normType.js.map new file mode 100644 index 0000000..1c04b7f --- /dev/null +++ b/lib/es5/normType.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["normType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet normType = module.exports = {\n vector1: 1, ///< treats the input as a vector and returns the sum of absolute values\n vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values\n vector2: 3, ///< treats the input as a vector and returns euclidean norm\n vectorP: 4, ///< treats the input as a vector and returns the p-norm\n matrix1: 5, ///< return the max of column sums\n matrixInf: 6, ///< return the max of row sums\n matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n matrixLPq: 8, ///< returns Lpq-norm\n euclid: 3, ///< The default. Same as vector2\n AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values\n AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values\n AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm\n AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm\n AF_NORM_MATRIX_1: 5, ///< return the max of column sums\n AF_NORM_MATRIX_INF: 6, ///< return the max of row sums\n AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm\n AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2\n};"],"file":"normType.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/row.js b/lib/es5/row.js index 6b6baea..0ccfa93 100644 --- a/lib/es5/row.js +++ b/lib/es5/row.js @@ -6,4 +6,5 @@ function Row(index) { this.index = index; } module.exports = Row; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvdy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoicm93LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gUm93KGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3c7Il19 + +//# sourceMappingURL=row.js.map diff --git a/lib/es5/row.js.map b/lib/es5/row.js.map new file mode 100644 index 0000000..d402d93 --- /dev/null +++ b/lib/es5/row.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["row.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Row(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Row;"],"file":"row.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/rows.js b/lib/es5/rows.js index ae0b6c0..87c8bc0 100644 --- a/lib/es5/rows.js +++ b/lib/es5/rows.js @@ -8,4 +8,5 @@ function Rows(firstIndex, lastIndex) { this.lastIndex = lastIndex; } module.exports = Rows; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvd3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBRUEsQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoicm93cy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIFJvd3MoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3dzOyJdfQ== + +//# sourceMappingURL=rows.js.map diff --git a/lib/es5/rows.js.map b/lib/es5/rows.js.map new file mode 100644 index 0000000..60140dd --- /dev/null +++ b/lib/es5/rows.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["rows.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Rows(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Rows;"],"file":"rows.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/seq.js b/lib/es5/seq.js index 716388c..aca07b5 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -17,4 +17,5 @@ function Seq(begin, end, step) { this.isGFor = false; } module.exports = Seq; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUcsQ0FBQSxHQUFFLENBQUcsQ0FBQSxJQUFHLENBQUc7QUFDM0IsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUksQ0FBQSxZQUFZLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBRztBQUNwQixRQUFJLEVBQUksRUFBQSxDQUFDO0FBQ1QsTUFBRSxFQUFJLE1BQUksQ0FBQztFQUNmLEtBQ0s7QUFDRCxTQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7RUFDM0I7QUFBQSxBQUNBLEtBQUcsRUFBSSxDQUFBLElBQUcsR0FBSyxFQUFBLENBQUM7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUNsQixLQUFHLElBQUksRUFBSSxJQUFFLENBQUM7QUFDZCxLQUFHLEtBQUssRUFBSSxLQUFHLENBQUM7QUFFaEIsS0FBRyxPQUFPLEVBQUksTUFBSSxDQUFDO0FBQ3ZCO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJzZXEuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xuXG5mdW5jdGlvbiBTZXEoYmVnaW4sIGVuZCwgc3RlcCkge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGJlZ2luKSk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZW5kKSkge1xuICAgICAgICBiZWdpbiA9IDA7XG4gICAgICAgIGVuZCA9IGJlZ2luO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KF8uaXNOdW1iZXIoZW5kKSk7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoc3RlcCkpO1xuXG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cbiAgICB0aGlzLmlzR0ZvciA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcTsiXX0= + +//# sourceMappingURL=seq.js.map diff --git a/lib/es5/seq.js.map b/lib/es5/seq.js.map new file mode 100644 index 0000000..941b75a --- /dev/null +++ b/lib/es5/seq.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["seq.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Seq(begin, end, step) {\n assert(_.isNumber(begin));\n if (_.isUndefined(end)) {\n begin = 0;\n end = begin;\n }\n else {\n assert(_.isNumber(end));\n }\n step = step || 1;\n assert(_.isNumber(step));\n\n this.begin = begin;\n this.end = end;\n this.step = step;\n\n this.isGFor = false;\n}\n\nmodule.exports = Seq;"],"file":"seq.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/source.js b/lib/es5/source.js index 269aa07..b23dee1 100644 --- a/lib/es5/source.js +++ b/lib/es5/source.js @@ -5,4 +5,5 @@ var source = module.exports = { afDevice: 0, afHost: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixPQUFLLENBQUcsRUFBQTtBQUNSLEtBQUcsQ0FBRyxFQUFBO0FBQ04sU0FBTyxDQUFHLEVBQUE7QUFDVixPQUFLLENBQUcsRUFBQTtBQUFBLEFBQ1osQ0FBQztBQUFBIiwiZmlsZSI6InNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgc291cmNlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGV2aWNlOiAwLFxuICAgIGhvc3Q6IDEsXG4gICAgYWZEZXZpY2U6IDAsXG4gICAgYWZIb3N0OiAxXG59OyJdfQ== + +//# sourceMappingURL=source.js.map diff --git a/lib/es5/source.js.map b/lib/es5/source.js.map new file mode 100644 index 0000000..bd641b3 --- /dev/null +++ b/lib/es5/source.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["source.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet source = module.exports = {\n device: 0,\n host: 1,\n afDevice: 0,\n afHost: 1\n};"],"file":"source.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 626adba..dc00aa4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "arrayfire_js", - "version": "0.15.2", + "name": "arrayfire-js", + "version": "0.16.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -25,6 +25,7 @@ "fs-extra": "*", "gulp": "*", "gulp-sequence": "*", + "gulp-sourcemaps": "*", "gulp-traceur": "*", "merge2": "*", "mocha": "*", diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 86c30cf..be63617 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -402,4 +402,5 @@ describe("AFArray class and methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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Q0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFB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LElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsS0FBSSxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsVUFBVSxBQUFDLEVBQUMsQ0FBQztBQUMzQixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxDQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sSUFBRSxDQUFDLENBQUM7QUFFakIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7QUFFdkIsUUFBQSxFQUFJLENBQUEsTUFBSyxHQUFHLEFBQUMsQ0FBQyxFQUFDLElBQUksRUFBSSxFQUFBLENBQUMsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxDQUFBLElBQU0sQ0FBQSxHQUFFLEVBQUksSUFBRSxDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0NBQXVDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxvREFBb0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMseUJBQXdCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDckMsY0FBTSxJQUFJLEFBQUMsRUFBQyxxQ0FBcUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDN0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdkMsY0FBTSxJQUFJLEFBQUMsRUFBQyx1Q0FBdUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMEJBQXlCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxzQ0FBc0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDeEMsY0FBTSxJQUFJLEFBQUMsRUFBQyx3Q0FBd0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDaEUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsd0JBQXVCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDcEMsY0FBTSxJQUFJLEFBQUMsRUFBQyxvQ0FBb0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDNUQsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsMENBQXlDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDdEQsY0FBTSxJQUFJLEFBQUMsRUFBQyxzREFBc0QsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDOUUsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsdUNBQXNDLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkQsY0FBTSxJQUFJLEFBQUMsRUFBQyxtREFBbUQsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7TUFDM0UsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsMkJBQTBCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDN0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiYWZBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcbiAgICAgICAgICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZXhwb3J0IEFGQXJyYXkgY29uc3RydWN0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGVtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdCkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oYXJyYXkuaG9zdEFzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdEFzeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RTeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNVbmRlZmluZWQoYXJyYXkuaG9zdFN5bmNBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jU3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY1N5bmMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBmYWlsIHdpdGggb25lIG51bWJlciBhcmd1bWVudFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBvbmUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0d28gZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LnR5cGUoKSA9PT0gYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkubnVtZGltcygpID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygwKSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDEpID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMikgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLm5kaW1zID09PSAyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMF0gPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMV0gPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbMl0gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyB0aHJlZSBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAxMCAqIDIwICogMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDEpO1xuICAgICAgICAgICAgICAgIGxldCBkaW1zID0gYXJyYXkuZGltcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGRpbXMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5lbGVtZW50cyA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMyk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2NhbGFyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXN2ZWN0b3IoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JvdygpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29sdW1uKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWxmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNmbG9hdGluZygpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNib29sKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB2ZXJpZnk0KGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoYXJyYXkpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwICogNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMykgPT09IDQwKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzNdID09PSA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgxMCwgMjAsIDMwLCA0MCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWwgZnJvbSBkaW00XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KHsgdmFsdWVzOiBbMTAsIDIwLCAzMCwgNDBdIH0sIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNCBhcnJheVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheShbMTAsIDIwLCAzMCwgNDBdLCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBhc3luY2hyb25vdXNseSB3LyBnZW5lcmF0b3JzXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlQXN5bmMpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuYnl0ZXMoKSA9PT0gY291bnQgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgYXJyYXkuaG9zdEFzeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIgaW5zdGFuY2VvZiBBRkFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0geWllbGQgYXJyYXkyLmhvc3RBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGRvIHNvbWUgaW5kZXhpbmc6XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0geWllbGQgYXJyYXkyLnZhbHVlQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDAuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdCgxKS52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGYoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXRpYWxpemUgZnJvbSBidWZmZXIsIGNvcHlhYmxlLCBhbmQgcmVhZGFibGUgLSBzeW5jaHJvbm91c2x5IChibG9ja2luZylcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGludCA9IHJlZi50eXBlcy5pbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSAxMDtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGludC5zZXQoYnVmZiwgdiAqIGludC5zaXplLCB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGVTeW5jKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBBRkFycmF5LmNyZWF0ZVN5bmMoY291bnQsIGFmLmRUeXBlLnMzMiwgYnVmZik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLnMzMik7XG5cbiAgICAgICAgICAgICAgICBsZXQgYnVmZjIgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGFycmF5Lmhvc3RTeW5jKGJ1ZmYyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYyLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5MiA9IGFycmF5LmNvcHkoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Mi5ieXRlcygpID09PSBhcnJheS5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZjMgPSBhcnJheTIuaG9zdFN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMgaW5zdGFuY2VvZiBCdWZmZXIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChidWZmMy5sZW5ndGggPT09IGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjEgPSBpbnQuZ2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MiA9IGludC5nZXQoYnVmZjMsIHYgKiBpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYgKiB2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgIGxldCB2ID0gYXJyYXkyLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5LmF0KDEpLnZhbHVlU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAxLjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdCgyKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDQuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KFwiZW5kXCIpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOS4wICogOS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoYWYuZW5kIC0gMSkuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA4LjAgKiA4LjApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc3NpZ25tZW50IG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGluZGV4aW5nIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGluZGV4aW5nIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciByb3dcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3cgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgY29sIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2UgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHJvd3MgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgY29sc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbHMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igc2xpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgc2xpY2VzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhcml0aG1ldGljIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBsb2dpY2FsIG9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGxvZ2ljYWwgb3BlcmF0b3IgdGVzdHMgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkFGQXJyYXkgY2xhc3MgYW5kIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7Il19 + +//# sourceMappingURL=afArrayTests.js.map diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map new file mode 100644 index 0000000..94c7569 --- /dev/null +++ b/tests/es5/afArrayTests.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\n\nfunction testPlatform(id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n\n it(\"should be tests for assignment operators\", function() {\n console.log(`TODO: implement array assignment operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for indexing operators\", function() {\n console.log(`TODO: implement array indexing operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for row\", function() {\n console.log(`TODO: implement array row test for ${id}\\n`);\n });\n\n it(\"should be tests for col\", function() {\n console.log(`TODO: implement array col test for ${id}\\n`);\n });\n\n it(\"should be tests for slice\", function() {\n console.log(`TODO: implement array slice test for ${id}\\n`);\n });\n\n it(\"should be tests for rows\", function() {\n console.log(`TODO: implement array rows test for ${id}\\n`);\n });\n\n it(\"should be tests for cols\", function() {\n console.log(`TODO: implement array cols test for ${id}\\n`);\n });\n\n it(\"should be tests for slices\", function() {\n console.log(`TODO: implement array slices test for ${id}\\n`);\n });\n\n it(\"should be tests for as\", function() {\n console.log(`TODO: implement array as test for ${id}\\n`);\n });\n\n it(\"should be tests for arithmetic operators\", function() {\n console.log(`TODO: implement array arithmetic operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for logical operators\", function() {\n console.log(`TODO: implement array logical operator tests for ${id}\\n`);\n });\n });\n }\n}\n\ndescribe(\"AFArray class and methods\", function() {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index dc76abc..43b803e 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -169,4 +169,5 @@ describe("Functions to create arrays", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFBQUMsQ0FnREgsY0FBVSxB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dEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTWF0aC5mbG9vcih2KSA9PT0gdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCB5aWVsZCB1bmlmb3JtIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmR1KFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8IHYgPT09IDEuMCB8fCAodiA+IDAgJiYgdiA8IDEuMCAmJiB2ICUgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZigpLm5vZGVpZnkoZG9uZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kZlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBpbnZva2luZyBub3JtYWwgcmFuZG9tIGludCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBhZi5yYW5kbigyLCA0LCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaW52YWxpZCBkdHlwZSBhcmd1bWVudC9pZy50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCB0aHJvdyBhcHByb3ByaWF0ZSBlcnJvci5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgdGhyb3cuXCIpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgbm9ybWFsIHJhbmRvbSBmbG9hdCBhcnJheSB3aXRoIDIgZGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGFzeW5jKGZ1bmN0aW9uKigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IGFmLnJhbmRuKFsyLCA0XSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBmbG9hdC5zaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAvIGZsb2F0LnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmbG9hdC5nZXQoZGF0YSwgaSAqIGZsb2F0LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwIHx8ICh2ID4gLTQuMCAmJiB2IDwgNC4wICYmIHYgJSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImlkZW50aXR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpZGVudGl0eSB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc2NyaWJlKFwicmFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IHJhbmdlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJpb3RhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJkaWFnXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBkaWFnIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJjb25zdGFudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgY29uc3RhbnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiRnVuY3Rpb25zIHRvIGNyZWF0ZSBhcnJheXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== + +//# sourceMappingURL=createArrayFunctionTests.js.map diff --git a/tests/es5/createArrayFunctionTests.js.map b/tests/es5/createArrayFunctionTests.js.map new file mode 100644 index 0000000..b1b1118 --- /dev/null +++ b/tests/es5/createArrayFunctionTests.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["createArrayFunctionTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\n\nfunction testPlatform (id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"identity\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement identity test for ${id}\\n`);\n });\n });\n\n describe(\"range\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement range test for ${id}\\n`);\n });\n });\n\n describe(\"iota\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement iota test for ${id}\\n`);\n });\n });\n\n describe(\"diag\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement diag test for ${id}\\n`);\n });\n });\n\n describe(\"constant\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement constant test for ${id}\\n`);\n });\n });\n });\n }\n}\n\ndescribe(\"Functions to create arrays\", function () {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"createArrayFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index 407f7a6..626b290 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -62,4 +62,5 @@ describe("device methods", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRldmljZVRlc3RzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUVBLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBRWxDLE9BQVMsYUFBVyxDQUFFLEVBQUM7QUFDbkIsS0FBSSxPQUFNLElBQUksQ0FBRSxPQUFNLEVBQUksR0FBQyxDQUFDLElBQU0sSUFBRSxDQUFHO0FBQ25DLFdBQU8sQUFBQyxDQUFDLEVBQUMsRUFBSSxZQUFVLENBQUcsVUFBVSxBQUFEO0FBQ2hDLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsT0FBQyxBQUFDLENBQUMsaUNBQWdDLENBQUcsVUFBUyxBQUFEO0FBQzFDLEFBQUksVUFBQSxDQUFBLFdBQVUsRUFBSSxDQUFBLEVBQUMsZUFBZSxBQUFDLEVBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxXQUFVLEVBQUksRUFBQSxDQUFDLENBQUM7QUFDdkIsQUFBSSxVQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsRUFBQyxXQUFXLEFBQUMsRUFBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLENBQUEsUUFBUSxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sSUFBTSxZQUFVLENBQUMsQ0FBQztBQTlDNUMsQUFBSSxVQUFBLE9BQW9CLEtBQUcsQ0FBQztBQUM1QixBQUFJLFVBQUEsT0FBb0IsTUFBSSxDQUFDO0FBQzdCLEFBQUksVUFBQSxPQUFvQixVQUFRLENBQUM7QUFDakMsVUFBSTtBQUhKLGNBQVMsR0FBQSxPQURqQixLQUFLLEVBQUEsQUFDNEI7QUFDaEIsbUJBQW9CLENBQUEsQ0E4Q0osS0FBSSxDQTlDa0IsQ0FBRSxNQUFLLFNBQVMsQ0FBQyxBQUFDLEVBQUMsQ0FDN0QsRUFBQyxDQUFDLE1BQW9CLENBQUEsQ0FBQyxNQUFvQixDQUFBLFNBQXFCLEFBQUMsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUN6RSxPQUFvQixLQUFHLENBQUc7Y0E0Q2QsS0FBRztBQUFZO0FBQ3BCLG1CQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsS0FBSyxDQUFDLENBQUEsRUFBSyxDQUFBLElBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsbUJBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxTQUFTLENBQUMsQ0FBQSxFQUFLLENBQUEsSUFBRyxTQUFTLENBQUMsQ0FBQztBQUNsRCxtQkFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLFFBQVEsQ0FBQyxDQUFBLEVBQUssQ0FBQSxJQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELG1CQUFLLEFBQUMsQ0FBQyxDQUFBLFVBQVUsQUFBQyxDQUFDLElBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQy9DO1VBOUNSO0FBQUEsUUFEQSxDQUFFLFlBQTBCO0FBQzFCLGVBQW9CLEtBQUcsQ0FBQztBQUN4QixvQkFBb0MsQ0FBQztRQUN2QyxDQUFFLE9BQVE7QUFDUixZQUFJO0FBQ0YsZUFBSSxLQUFpQixHQUFLLENBQUEsV0FBdUIsR0FBSyxLQUFHLENBQUc7QUFDMUQsd0JBQXdCLEFBQUMsRUFBQyxDQUFDO1lBQzdCO0FBQUEsVUFDRixDQUFFLE9BQVE7QUFDUixvQkFBd0I7QUFDdEIsd0JBQXdCO1lBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQW1DSSxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4QkFBNkIsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5QyxTQUFDLEtBQUssQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDO01BQ2pCLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDZCQUE0QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzdDLFNBQUMsVUFBVSxBQUFDLEVBQUMsUUFBUSxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDaEMsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsOENBQTZDLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDOUQsU0FBQyxVQUFVLEFBQUMsQ0FBQyxHQUFFLENBQUMsS0FDUixBQUFDLENBQUMsU0FBUyxBQUFELENBQUc7QUFDYixhQUFHLEFBQUMsQ0FBQyxHQUFJLE1BQUksQUFBQyxDQUFDLG1CQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUNBLFVBQVMsQUFBRCxDQUFHO0FBQ1AsYUFBRyxBQUFDLEVBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQztNQUNWLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUVBLE9BQU8sQUFBQyxDQUFDLGdCQUFlLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbEMsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQ0YiLCJmaWxlIjoiZGV2aWNlVGVzdHMuanMiLCJzb3VyY2VSb290IjoidGVzdHMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgcmV0dXJuIGF2YWlsYWJsZSBkZXZpY2VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBkZXZpY2VDb3VudCA9IGFmLmdldERldmljZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRldmljZUNvdW50ID4gMCk7XG4gICAgICAgICAgICAgICAgbGV0IGluZm9zID0gYWYuZ2V0RGV2aWNlcygpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzQXJyYXkoaW5mb3MpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5mb3MubGVuZ3RoID09PSBkZXZpY2VDb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5mbyBvZiBpbmZvcykge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1N0cmluZyhpbmZvLm5hbWUpICYmIGluZm8ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ucGxhdGZvcm0pICYmIGluZm8ucGxhdGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1N0cmluZyhpbmZvLmNvbXB1dGUpICYmIGluZm8uY29tcHV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzQm9vbGVhbihpbmZvLmlzRG91YmxlQXZhaWxhYmxlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBjYWxsYmFja1wiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgYWYuc3luYyhkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBkbyBzeW5jIHdpdGggcHJvbWlzZVwiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgYWYuc3luY0FzeW5jKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInN5bmMgc2hvdWxkIGZhaWxlZCBpZiBkZXZpY2UgaXMgb3V0IG9mIHJhbmdlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoMTAwKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiVGhpcyBzaG91bGQgZmFpbCFcIikpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcImRldmljZSBtZXRob2RzXCIsIGZ1bmN0aW9uKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pO1xuIl19 + +//# sourceMappingURL=deviceTests.js.map diff --git a/tests/es5/deviceTests.js.map b/tests/es5/deviceTests.js.map new file mode 100644 index 0000000..50846bd --- /dev/null +++ b/tests/es5/deviceTests.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["deviceTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\n\nfunction testPlatform(id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n }\n}\n\ndescribe(\"device methods\", function() {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});\n"],"file":"deviceTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/index.js b/tests/es5/index.js index cb1ec17..5aa7e0b 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -3,4 +3,5 @@ require("./deviceTests"); require("./afArrayTests"); require("./createArrayFunctionTests"); require("./moveAndReorderArrayTests"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLE1BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sQUFBQyxDQUFDLGdCQUFlLENBQUMsQ0FBQztBQUN6QixNQUFNLEFBQUMsQ0FBQyw0QkFBMkIsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sQUFBQyxDQUFDLDRCQUEyQixDQUFDLENBQUM7QUFDckMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoidGVzdHMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbnJlcXVpcmUoXCIuL2RldmljZVRlc3RzXCIpO1xucmVxdWlyZShcIi4vYWZBcnJheVRlc3RzXCIpO1xucmVxdWlyZShcIi4vY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzXCIpO1xucmVxdWlyZShcIi4vbW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzXCIpO1xuIl19 + +//# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map new file mode 100644 index 0000000..f5f3bfb --- /dev/null +++ b/tests/es5/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");\n"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/moveAndReorderArrayTests.js b/tests/es5/moveAndReorderArrayTests.js index a67121a..ae1557f 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -58,4 +58,5 @@ describe("Functions to create arrays", function() { testPlatform("OpenCL"); testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vdmVBbmRSZW9yZGVyQXJyYXlUZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFFQSxBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQyxDQUFHO0FBQ3ZCLEtBQUksT0FBTSxJQUFJLENBQUUsT0FBTSxFQUFJLEdBQUMsQ0FBQyxJQUFNLElBQUUsQ0FBRztBQUNuQyxXQUFPLEFBQUMsQ0FBQyxFQUFDLEVBQUksWUFBVSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ25DLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsVUFBVSxBQUFELENBQUc7QUFDekIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsZ0NBQWdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLFNBQVEsQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUM1QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxtQ0FBbUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsT0FBTSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQzFCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGlDQUFpQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxTQUFRLENBQUcsVUFBVSxBQUFELENBQUc7QUFDNUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsbUNBQW1DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUN6QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxnQ0FBZ0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxXQUFVLENBQUcsVUFBVSxBQUFELENBQUc7QUFDOUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUFBLEFBRUEsT0FBTyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBVSxBQUFELENBQUc7QUFDL0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJqb2luXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBqb2luIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJ0aWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCB0aWxlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyZW9yZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHJlb3JkZXIgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJzaGlmdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgc2hpZnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcIm1vZGRpbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IG1vZGRpbXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsYXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsYXQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsaXAgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcInRyYW5zcG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgdHJhbnNwb3NlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkZ1bmN0aW9ucyB0byBjcmVhdGUgYXJyYXlzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDUFVcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiT3BlbkNMXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIkNVREFcIik7XG59KTsiXX0= + +//# sourceMappingURL=moveAndReorderArrayTests.js.map diff --git a/tests/es5/moveAndReorderArrayTests.js.map b/tests/es5/moveAndReorderArrayTests.js.map new file mode 100644 index 0000000..3954fef --- /dev/null +++ b/tests/es5/moveAndReorderArrayTests.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["moveAndReorderArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\n\nfunction testPlatform (id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n describe(\"join\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement join test for ${id}\\n`);\n });\n });\n\n describe(\"tile\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement tile test for ${id}\\n`);\n });\n });\n\n describe(\"reorder\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement iota reorder for ${id}\\n`);\n });\n });\n\n describe(\"shift\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement shift test for ${id}\\n`);\n });\n });\n\n describe(\"moddims\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement moddims test for ${id}\\n`);\n });\n });\n\n describe(\"flat\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement flat test for ${id}\\n`);\n });\n });\n\n describe(\"flip\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement flip test for ${id}\\n`);\n });\n });\n\n describe(\"transpose\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement transpose test for ${id}\\n`);\n });\n });\n });\n }\n}\n\ndescribe(\"Functions to create arrays\", function () {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"moveAndReorderArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file From f6deb8138c0373b1cdc061a6c20c4cd7abb42711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Mez=C5=91?= Date: Thu, 5 Nov 2015 13:58:13 +0100 Subject: [PATCH 13/45] Update WinCUDASupport.cmake --- CMake/WinCUDASupport.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/WinCUDASupport.cmake b/CMake/WinCUDASupport.cmake index 9827e12..361a635 100644 --- a/CMake/WinCUDASupport.cmake +++ b/CMake/WinCUDASupport.cmake @@ -2,7 +2,7 @@ function(win_cuda_support) if(WIN32) set(cuda_path "$ENV{CUDA_PATH}") if (cuda_path) - message(STATUS "Creating target to copy CUDA DLLs to module binary folder.") + message(STATUS "Creating target to copy CUDA DLLs to module's binary folder.") file(TO_CMAKE_PATH "${cuda_path}/nvvm/bin" cuda_dll_path) message(STATUS "Searching CUDA DLLs in: ${cuda_dll_path}") file(GLOB cuda_dll "${cuda_dll_path}/nvvm64*.dll") @@ -16,4 +16,4 @@ function(win_cuda_support) endif() endif() endif(WIN32) -endfunction(win_cuda_support) \ No newline at end of file +endfunction(win_cuda_support) From f7f63343ff2ff8b62f87a53dd4e21ac71960929b Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 23 Nov 2015 22:04:25 +0100 Subject: [PATCH 14/45] 3.2 compat --- package.json | 7 ++++--- src/helpers.cpp | 3 +-- src/mathfunctions.cpp | 9 --------- tests/es6/testExec.js | 5 +++++ 4 files changed, 10 insertions(+), 14 deletions(-) create mode 100644 tests/es6/testExec.js diff --git a/package.json b/package.json index dc00aa4..8578c1f 100644 --- a/package.json +++ b/package.json @@ -9,13 +9,14 @@ }, "dependencies": { "bindings": "*", - "cmake-js": "2", + "cmake-js": "3", "lodash": "*", - "nan": "2", + "nan": "^2.1.0", "traceur": "0" }, "scripts": { - "install": "cmake-js compile" + "install": "cmake-js compile", + "test": "mocha tests" }, "main": "lib/", "devDependencies": { diff --git a/src/helpers.cpp b/src/helpers.cpp index 39af10b..c95697a 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -142,8 +142,7 @@ string ErrToString(af_err err) v8::Local WrapPointer(void* ptr) { Nan::EscapableHandleScope scope; - if (ptr == nullptr) length = 0; - return scope.Escape(Nan::NewBuffer(ptr, length, [](char*v1, void*v2) {}, NULL).ToLocalChecked()); + return scope.Escape(Nan::NewBuffer((char*)ptr, 0, [](char*v1, void*v2) {}, nullptr).ToLocalChecked()); } af::dim4 ToDim4(v8::Local obj) diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 7450b37..451a6f4 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -36,15 +36,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "errors.h" #include "guard.h" -namespace af -{ - // TODO: Remove this when next version comes out: - af::array sigmoid(const af::array val) - { - return 1 / (1 + exp(-val)); - } -} - using namespace v8; using namespace std; using namespace node; diff --git a/tests/es6/testExec.js b/tests/es6/testExec.js new file mode 100644 index 0000000..d534848 --- /dev/null +++ b/tests/es6/testExec.js @@ -0,0 +1,5 @@ +"use strict"; + +let testExec = {}; + +module.exports = testExec; From 3facebe643900a8a4126eb30650c51e09e2e5c7a Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 23 Nov 2015 22:48:12 +0100 Subject: [PATCH 15/45] floating point ex --- tests/es6/afArrayTests.js | 552 +++++++++++++------------- tests/es6/createArrayFunctionTests.js | 163 ++++---- tests/es6/deviceTests.js | 71 ++-- tests/es6/index.js | 2 +- tests/es6/moveAndReorderArrayTests.js | 79 ++-- tests/es6/testExec.js | 48 ++- 6 files changed, 463 insertions(+), 452 deletions(-) diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 68315dd..d2c861d 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -36,249 +36,192 @@ let _ = require("lodash"); let ref = require("ref"); let Bluebird = require("bluebird"); let async = Bluebird.coroutine; +let testExec = require("./testExec"); -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function () { - let af = require("../..")(id); - let AFArray = af.AFArray; - - it("should export AFArray constructor", function() { - assert(_.isFunction(AFArray)); - }); - - it("should create empty", function() { - let array = new AFArray(); - assert(_.isObject(array)); - assert(array.bytes() === 0); - assert(array.elements() === 0); - assert(array.isempty()); - assert(_.isFunction(array.host)); - assert(_.isFunction(array.hostAsync)); - assert(_.isUndefined(array.hostAsyncAsync)); - assert(_.isFunction(array.hostSync)); - assert(_.isUndefined(array.hostSyncAsync)); - assert(_.isUndefined(array.hostSyncSync)); - assert(_.isUndefined(array.hostAsyncSync)); - }); +describe("AFArray class and methods", function() { + testExec.run(function(af) { + let AFArray = af.AFArray; - it("should fail with one number argument", function() { - try { - let array = new AFArray(1); - assert(false); - } - catch (e) { - } - }); + it("should export AFArray constructor", function() { + assert(_.isFunction(AFArray)); + }); - it("should create new one dimensional", function() { - let array = new AFArray(10, af.dType.s32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 4); - assert(array.elements() === 10); - assert(array.type() === af.dType.s32); - assert(array.numdims() === 1); - assert(array.dims(0) === 10); - assert(array.dims(1) === 1); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - let dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10); - assert(dims.ndims === 1); - assert(dims.values[0] === 10); - assert(dims.values[1] === 1); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === true); - assert(array.isrow() === false); - assert(array.iscolumn() === true); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === false); - assert(array.isrealfloating() === false); - assert(array.isfloating() === false); - assert(array.isinteger() === true); - assert(array.isbool() === false); - }); + it("should create empty", function() { + let array = new AFArray(); + assert(_.isObject(array)); + assert(array.bytes() === 0); + assert(array.elements() === 0); + assert(array.isempty()); + assert(_.isFunction(array.host)); + assert(_.isFunction(array.hostAsync)); + assert(_.isUndefined(array.hostAsyncAsync)); + assert(_.isFunction(array.hostSync)); + assert(_.isUndefined(array.hostSyncAsync)); + assert(_.isUndefined(array.hostSyncSync)); + assert(_.isUndefined(array.hostAsyncSync)); + }); - it("should create new two dimensional", function() { - let array = new AFArray(10, 20, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 4); - assert(array.elements() === 10 * 20); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 2); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - let dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20); - assert(dims.ndims === 2); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); + it("should fail with one number argument", function() { + try { + let array = new AFArray(1); + assert(false); + } + catch (e) { + } + }); - it("should create new three dimensional", function() { - let array = new AFArray(10, 20, 30, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 4); - assert(array.elements() === 10 * 20 * 30); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 3); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 1); - let dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30); - assert(dims.ndims === 3); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); + it("should create new one dimensional", function() { + let array = new AFArray(10, af.dType.s32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 4); + assert(array.elements() === 10); + assert(array.type() === af.dType.s32); + assert(array.numdims() === 1); + assert(array.dims(0) === 10); + assert(array.dims(1) === 1); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + let dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10); + assert(dims.ndims === 1); + assert(dims.values[0] === 10); + assert(dims.values[1] === 1); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === true); + assert(array.isrow() === false); + assert(array.iscolumn() === true); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === false); + assert(array.isrealfloating() === false); + assert(array.isfloating() === false); + assert(array.isinteger() === true); + assert(array.isbool() === false); + }); - function verify4(array) { - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 40 * 4); - assert(array.elements() === 10 * 20 * 30 * 40); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 4); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 40); - let dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30 * 40); - assert(dims.ndims === 4); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 40); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - } + it("should create new two dimensional", function() { + let array = new AFArray(10, 20, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 4); + assert(array.elements() === 10 * 20); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 2); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + let dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20); + assert(dims.ndims === 2); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + }); - it("should create new four dimensional", function() { - let array = new AFArray(10, 20, 30, 40, af.dType.f32); - verify4(array); - }); + it("should create new three dimensional", function() { + let array = new AFArray(10, 20, 30, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 4); + assert(array.elements() === 10 * 20 * 30); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 3); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 1); + let dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30); + assert(dims.ndims === 3); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + }); - it("should create new four dimensional from dim4", function() { - let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32); - verify4(array); - }); + function verify4(array) { + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 40 * 4); + assert(array.elements() === 10 * 20 * 30 * 40); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 4); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 40); + let dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30 * 40); + assert(dims.ndims === 4); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 40); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + } + + it("should create new four dimensional", function() { + let array = new AFArray(10, 20, 30, 40, af.dType.f32); + verify4(array); + }); - it("should create new four dimensional from dim4 array", function() { - let array = new AFArray([10, 20, 30, 40], af.dType.f32); - verify4(array); - }); + it("should create new four dimensional from dim4", function() { + let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32); + verify4(array); + }); - it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { - let f = async(function*() { - let int = ref.types.int; - const count = 10; - let buff = new Buffer(int.size * count); - for (let v = 0; v < count; v++) { - int.set(buff, v * int.size, v * v); - } - - assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createAsync)); - - let array = yield AFArray.createAsync(count, af.dType.s32, buff); - assert(array.bytes() === count * int.size); - assert(array.type() === af.dType.s32); - - let buff2 = new Buffer(int.size * count); - yield array.hostAsync(buff2); - for (let v = 0; v < count; v++) { - let v1 = int.get(buff, v * int.size); - let v2 = int.get(buff2, v * int.size); - assert(v1 === v2); - assert(v1 === v * v); - } - - let array2 = array.copy(); - assert(array2 instanceof AFArray); - assert(array2.bytes() === array.bytes()); - let buff3 = yield array2.hostAsync(); - assert(buff3 instanceof Buffer); - assert(buff3.length === int.size * count); - for (let v = 0; v < count; v++) { - let v1 = int.get(buff, v * int.size); - let v2 = int.get(buff3, v * int.size); - assert(v1 === v2); - assert(v1 === v * v); - } - - // Let's do some indexing: - let v = yield array2.valueAsync(); - assert(v === 0.0); - - v = yield array2.at(1).valueAsync(); - assert(v === 1.0); - - v = yield array2.at(2).scalarAsync(); - assert(v === 4.0); - - v = yield array2.at("end").scalarAsync(); - assert(v === 9.0 * 9.0); - - v = yield array2.at(af.end - 1).scalarAsync(); - assert(v === 8.0 * 8.0); - }); - f().nodeify(done); - }); + it("should create new four dimensional from dim4 array", function() { + let array = new AFArray([10, 20, 30, 40], af.dType.f32); + verify4(array); + }); - it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { + it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { + let f = async(function*() { let int = ref.types.int; const count = 10; let buff = new Buffer(int.size * count); @@ -287,14 +230,14 @@ function testPlatform(id) { } assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createSync)); + assert(_.isFunction(AFArray.createAsync)); - let array = AFArray.createSync(count, af.dType.s32, buff); + let array = yield AFArray.createAsync(count, af.dType.s32, buff); assert(array.bytes() === count * int.size); assert(array.type() === af.dType.s32); let buff2 = new Buffer(int.size * count); - array.hostSync(buff2); + yield array.hostAsync(buff2); for (let v = 0; v < count; v++) { let v1 = int.get(buff, v * int.size); let v2 = int.get(buff2, v * int.size); @@ -305,7 +248,7 @@ function testPlatform(id) { let array2 = array.copy(); assert(array2 instanceof AFArray); assert(array2.bytes() === array.bytes()); - let buff3 = array2.hostSync(); + let buff3 = yield array2.hostAsync(); assert(buff3 instanceof Buffer); assert(buff3.length === int.size * count); for (let v = 0; v < count; v++) { @@ -316,71 +259,120 @@ function testPlatform(id) { } // Let's do some indexing: - let v = array2.valueSync(); + let v = yield array2.valueAsync(); assert(v === 0.0); - v = array.at(1).valueSync(); + v = yield array2.at(1).valueAsync(); assert(v === 1.0); - v = array2.at(2).scalarSync(); + v = yield array2.at(2).scalarAsync(); assert(v === 4.0); - v = array2.at("end").scalarSync(); + v = yield array2.at("end").scalarAsync(); assert(v === 9.0 * 9.0); - v = array2.at(af.end - 1).scalarSync(); + v = yield array2.at(af.end - 1).scalarAsync(); assert(v === 8.0 * 8.0); }); + f().nodeify(done); + }); - it("should be tests for assignment operators", function() { - console.log(`TODO: implement array assignment operator tests for ${id}\n`); - }); + it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { + let int = ref.types.int; + const count = 10; + let buff = new Buffer(int.size * count); + for (let v = 0; v < count; v++) { + int.set(buff, v * int.size, v * v); + } - it("should be tests for indexing operators", function() { - console.log(`TODO: implement array indexing operator tests for ${id}\n`); - }); + assert(_.isFunction(AFArray.create)); + assert(_.isFunction(AFArray.createSync)); - it("should be tests for row", function() { - console.log(`TODO: implement array row test for ${id}\n`); - }); + let array = AFArray.createSync(count, af.dType.s32, buff); + assert(array.bytes() === count * int.size); + assert(array.type() === af.dType.s32); - it("should be tests for col", function() { - console.log(`TODO: implement array col test for ${id}\n`); - }); + let buff2 = new Buffer(int.size * count); + array.hostSync(buff2); + for (let v = 0; v < count; v++) { + let v1 = int.get(buff, v * int.size); + let v2 = int.get(buff2, v * int.size); + assert(v1 === v2); + assert(v1 === v * v); + } - it("should be tests for slice", function() { - console.log(`TODO: implement array slice test for ${id}\n`); - }); + let array2 = array.copy(); + assert(array2 instanceof AFArray); + assert(array2.bytes() === array.bytes()); + let buff3 = array2.hostSync(); + assert(buff3 instanceof Buffer); + assert(buff3.length === int.size * count); + for (let v = 0; v < count; v++) { + let v1 = int.get(buff, v * int.size); + let v2 = int.get(buff3, v * int.size); + assert(v1 === v2); + assert(v1 === v * v); + } - it("should be tests for rows", function() { - console.log(`TODO: implement array rows test for ${id}\n`); - }); + // Let's do some indexing: + let v = array2.valueSync(); + assert(v === 0.0); - it("should be tests for cols", function() { - console.log(`TODO: implement array cols test for ${id}\n`); - }); + v = array.at(1).valueSync(); + assert(v === 1.0); - it("should be tests for slices", function() { - console.log(`TODO: implement array slices test for ${id}\n`); - }); + v = array2.at(2).scalarSync(); + assert(v === 4.0); - it("should be tests for as", function() { - console.log(`TODO: implement array as test for ${id}\n`); - }); + v = array2.at("end").scalarSync(); + assert(v === 9.0 * 9.0); - it("should be tests for arithmetic operators", function() { - console.log(`TODO: implement array arithmetic operator tests for ${id}\n`); - }); + v = array2.at(af.end - 1).scalarSync(); + assert(v === 8.0 * 8.0); + }); - it("should be tests for logical operators", function() { - console.log(`TODO: implement array logical operator tests for ${id}\n`); - }); + it("should be tests for assignment operators", function() { + console.log(`TODO: implement array assignment operator tests for ${id}\n`); }); - } -} -describe("AFArray class and methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + it("should be tests for indexing operators", function() { + console.log(`TODO: implement array indexing operator tests for ${id}\n`); + }); + + it("should be tests for row", function() { + console.log(`TODO: implement array row test for ${id}\n`); + }); + + it("should be tests for col", function() { + console.log(`TODO: implement array col test for ${id}\n`); + }); + + it("should be tests for slice", function() { + console.log(`TODO: implement array slice test for ${id}\n`); + }); + + it("should be tests for rows", function() { + console.log(`TODO: implement array rows test for ${id}\n`); + }); + + it("should be tests for cols", function() { + console.log(`TODO: implement array cols test for ${id}\n`); + }); + + it("should be tests for slices", function() { + console.log(`TODO: implement array slices test for ${id}\n`); + }); + + it("should be tests for as", function() { + console.log(`TODO: implement array as test for ${id}\n`); + }); + + it("should be tests for arithmetic operators", function() { + console.log(`TODO: implement array arithmetic operator tests for ${id}\n`); + }); + + it("should be tests for logical operators", function() { + console.log(`TODO: implement array logical operator tests for ${id}\n`); + }); + }); }); \ No newline at end of file diff --git a/tests/es6/createArrayFunctionTests.js b/tests/es6/createArrayFunctionTests.js index 95c8ba6..65acaa1 100644 --- a/tests/es6/createArrayFunctionTests.js +++ b/tests/es6/createArrayFunctionTests.js @@ -38,112 +38,103 @@ let Bluebird = require("bluebird"); let async = Bluebird.coroutine; let int = ref.types.int; let float = ref.types.float; +let testExec = require("./testExec"); -function testPlatform (id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function () { - let af = require("../..")(id); - - describe("randu", function () { - it("should yield uniform random int array with 2 dimensions", function (done) { - let f = async(function*() { - let array = af.randu(2, 4, af.dType.s32); - let data = yield array.copyToHostAsync(); - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * int.size); - - for (let i = 0; i < data.length / int.size; i++) { - const v = int.get(data, i * int.size); - assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); - assert(Math.floor(v) === v); - } - }); - f().nodeify(done); +describe("Functions to create arrays", function () { + testExec.run(function(af) { + describe("randu", function () { + it("should yield uniform random int array with 2 dimensions", function (done) { + let f = async(function*() { + let array = af.randu(2, 4, af.dType.s32); + let data = yield array.copyToHostAsync(); + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * int.size); + + for (let i = 0; i < data.length / int.size; i++) { + const v = int.get(data, i * int.size); + assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); + assert(Math.floor(v) === v); + } }); - it("should yield uniform random float array with 2 dimensions", function (done) { - let f = async(function*() { - let array = af.randu([2, 4], af.dType.f32); - let data = yield array.copyToHostAsync(); - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - - for (let i = 0; i < data.length / float.size; i++) { - const v = float.get(data, i * float.size); - assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1)); - } - }); - f().nodeify(done); + f().nodeify(done); + }); + it("should yield uniform random float array with 2 dimensions", function (done) { + let f = async(function*() { + let array = af.randu([2, 4], af.dType.f32); + let data = yield array.copyToHostAsync(); + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + + for (let i = 0; i < data.length / float.size; i++) { + const v = float.get(data, i * float.size); + assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1)); + } }); + f().nodeify(done); }); + }); - describe("randf", function () { - it("should throw error when invoking normal random int array with 2 dimensions", function () { - try { - let array = af.randn(2, 4, af.dType.s32); + describe("randf", function () { + it("should throw error when invoking normal random int array with 2 dimensions", function () { + try { + let array = af.randn(2, 4, af.dType.s32); + return; + } + catch(e) { + if (/invalid dtype argument/ig.test(e.message)) { return; } - catch(e) { - if (/invalid dtype argument/ig.test(e.message)) { - return; - } - else { - throw new Error("This should throw appropriate error."); - } + else { + throw new Error("This should throw appropriate error."); } - throw new Error("This should throw."); + } + throw new Error("This should throw."); - }); - it("should yield normal random float array with 2 dimensions", function (done) { - let f = async(function*() { - let array = af.randn([2, 4], af.dType.f32); - let data = yield array.copyToHostAsync(); - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - - for (let i = 0; i < data.length / float.size; i++) { - const v = float.get(data, i * float.size); - assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1)); - } - }); - f().nodeify(done); - }); }); - - describe("identity", function () { - it("should be implemented", function() { - console.log(`TODO: implement identity test for ${id}\n`); + it("should yield normal random float array with 2 dimensions", function (done) { + let f = async(function*() { + let array = af.randn([2, 4], af.dType.f32); + let data = yield array.copyToHostAsync(); + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + + for (let i = 0; i < data.length / float.size; i++) { + const v = float.get(data, i * float.size); + assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1)); + } }); + f().nodeify(done); }); + }); - describe("range", function () { - it("should be implemented", function() { - console.log(`TODO: implement range test for ${id}\n`); - }); + describe("identity", function () { + it("should be implemented", function() { + console.log(`TODO: implement identity test for ${id}\n`); }); + }); - describe("iota", function () { - it("should be implemented", function() { - console.log(`TODO: implement iota test for ${id}\n`); - }); + describe("range", function () { + it("should be implemented", function() { + console.log(`TODO: implement range test for ${id}\n`); }); + }); - describe("diag", function () { - it("should be implemented", function() { - console.log(`TODO: implement diag test for ${id}\n`); - }); + describe("iota", function () { + it("should be implemented", function() { + console.log(`TODO: implement iota test for ${id}\n`); }); + }); - describe("constant", function () { - it("should be implemented", function() { - console.log(`TODO: implement constant test for ${id}\n`); - }); + describe("diag", function () { + it("should be implemented", function() { + console.log(`TODO: implement diag test for ${id}\n`); }); }); - } -} -describe("Functions to create arrays", function () { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + describe("constant", function () { + it("should be implemented", function() { + console.log(`TODO: implement constant test for ${id}\n`); + }); + }); + }); }); \ No newline at end of file diff --git a/tests/es6/deviceTests.js b/tests/es6/deviceTests.js index 9b83236..ef65f27 100644 --- a/tests/es6/deviceTests.js +++ b/tests/es6/deviceTests.js @@ -34,49 +34,40 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. let assert = require("better-assert"); let _ = require("lodash"); let Bluebird = require("bluebird"); +let testExec = require("./testExec"); -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function () { - let af = require("../..")(id); - - it("should return available devices", function() { - let deviceCount = af.getDeviceCount(); - assert(deviceCount > 0); - let infos = af.getDevices(); - assert(_.isArray(infos)); - assert(infos.length === deviceCount); - for (let info of infos) { - assert(_.isString(info.name) && info.name); - assert(_.isString(info.platform) && info.platform); - assert(_.isString(info.compute) && info.compute); - assert(_.isBoolean(info.isDoubleAvailable)); - } - }); - - it("should do sync with callback", function(done) { - af.sync(done); - }); +describe("device methods", function() { + testExec.run(function(af) { + it("should return available devices", function() { + let deviceCount = af.getDeviceCount(); + assert(deviceCount > 0); + let infos = af.getDevices(); + assert(_.isArray(infos)); + assert(infos.length === deviceCount); + for (let info of infos) { + assert(_.isString(info.name) && info.name); + assert(_.isString(info.platform) && info.platform); + assert(_.isString(info.compute) && info.compute); + assert(_.isBoolean(info.isDoubleAvailable)); + } + }); - it("should do sync with promise", function(done) { - af.syncAsync().nodeify(done); - }); + it("should do sync with callback", function(done) { + af.sync(done); + }); - it("sync should failed if device is out of range", function(done) { - af.syncAsync(100) - .then(function() { - done(new Error("This should fail!")); - }, - function() { - done(); - }); - }); + it("should do sync with promise", function(done) { + af.syncAsync().nodeify(done); }); - } -} -describe("device methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + it("sync should failed if device is out of range", function(done) { + af.syncAsync(100) + .then(function() { + done(new Error("This should fail!")); + }, + function() { + done(); + }); + }); + }); }); diff --git a/tests/es6/index.js b/tests/es6/index.js index 74406c4..12a321f 100644 --- a/tests/es6/index.js +++ b/tests/es6/index.js @@ -30,6 +30,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ require("./deviceTests"); -require("./afArrayTests"); require("./createArrayFunctionTests"); require("./moveAndReorderArrayTests"); +require("./afArrayTests"); \ No newline at end of file diff --git a/tests/es6/moveAndReorderArrayTests.js b/tests/es6/moveAndReorderArrayTests.js index eb38596..333f1c5 100644 --- a/tests/es6/moveAndReorderArrayTests.js +++ b/tests/es6/moveAndReorderArrayTests.js @@ -38,65 +38,56 @@ let Bluebird = require("bluebird"); let async = Bluebird.coroutine; let int = ref.types.int; let float = ref.types.float; +let testExec = require("./testExec"); -function testPlatform (id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function () { - let af = require("../..")(id); - - describe("join", function () { - it("should be implemented", function() { - console.log(`TODO: implement join test for ${id}\n`); - }); +describe("Functions to create arrays", function () { + testExec.run(function(af) { + describe("join", function () { + it("should be implemented", function() { + console.log(`TODO: implement join test for ${id}\n`); }); + }); - describe("tile", function () { - it("should be implemented", function() { - console.log(`TODO: implement tile test for ${id}\n`); - }); + describe("tile", function () { + it("should be implemented", function() { + console.log(`TODO: implement tile test for ${id}\n`); }); + }); - describe("reorder", function () { - it("should be implemented", function() { - console.log(`TODO: implement iota reorder for ${id}\n`); - }); + describe("reorder", function () { + it("should be implemented", function() { + console.log(`TODO: implement iota reorder for ${id}\n`); }); + }); - describe("shift", function () { - it("should be implemented", function() { - console.log(`TODO: implement shift test for ${id}\n`); - }); + describe("shift", function () { + it("should be implemented", function() { + console.log(`TODO: implement shift test for ${id}\n`); }); + }); - describe("moddims", function () { - it("should be implemented", function() { - console.log(`TODO: implement moddims test for ${id}\n`); - }); + describe("moddims", function () { + it("should be implemented", function() { + console.log(`TODO: implement moddims test for ${id}\n`); }); + }); - describe("flat", function () { - it("should be implemented", function() { - console.log(`TODO: implement flat test for ${id}\n`); - }); + describe("flat", function () { + it("should be implemented", function() { + console.log(`TODO: implement flat test for ${id}\n`); }); + }); - describe("flip", function () { - it("should be implemented", function() { - console.log(`TODO: implement flip test for ${id}\n`); - }); + describe("flip", function () { + it("should be implemented", function() { + console.log(`TODO: implement flip test for ${id}\n`); }); + }); - describe("transpose", function () { - it("should be implemented", function() { - console.log(`TODO: implement transpose test for ${id}\n`); - }); + describe("transpose", function () { + it("should be implemented", function() { + console.log(`TODO: implement transpose test for ${id}\n`); }); }); - } -} - -describe("Functions to create arrays", function () { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + }); }); \ No newline at end of file diff --git a/tests/es6/testExec.js b/tests/es6/testExec.js index d534848..3f45160 100644 --- a/tests/es6/testExec.js +++ b/tests/es6/testExec.js @@ -1,5 +1,51 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + "use strict"; +let af = require("../.."); + +function runOn(id, f) { + describe(id + " platform", function () { + let afID = af(id); + f(afID); + }); +} -let testExec = {}; +let testExec = { + run: function(f) { + let platfroms = af.supportedPlatforms(); + for (let pl of platfroms) { + runOn(pl, f); + } + } +}; module.exports = testExec; From 5cb54b851e07fe1c28a03e7a21f908ee744f6e8e Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 24 Nov 2015 10:28:19 +0100 Subject: [PATCH 16/45] tests ran on windows --- .eslintrc | 20 +++++------ package.json | 2 +- tests/es6/afArrayTests.js | 46 +------------------------ tests/es6/createArrayFunctionTests.js | 32 +----------------- tests/es6/deviceTests.js | 2 +- tests/es6/moveAndReorderArrayTests.js | 48 +-------------------------- 6 files changed, 15 insertions(+), 135 deletions(-) diff --git a/.eslintrc b/.eslintrc index 35ea94b..7e0a7c5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -20,18 +20,18 @@ "jsx": true }, "rules": { - "no-underscore-dangle": false, - "no-unused-vars": false, - "no-duplicate-case": false, - "no-new-func": false, - "no-loop-func": false, - "no-eval": false, - "camelcase": false, - "eol-last": false, + "no-underscore-dangle": 0, + "no-unused-vars": 0, + "no-duplicate-case": 0, + "no-new-func": 0, + "no-loop-func": 0, + "no-eval": 0, + "camelcase": 0, + "eol-last": 0, "semi": 2, - "quotes": false, + "quotes": 0, "strict": 0, - "no-alert": false + "no-alert": 0 }, "env": { "browser": true, diff --git a/package.json b/package.json index 8578c1f..5e2e5f2 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "cmake-js": "3", "lodash": "*", "nan": "^2.1.0", - "traceur": "0" + "traceur": "*" }, "scripts": { "install": "cmake-js compile", diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index d2c861d..d4657bb 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ "use strict"; - +/* global describe,it */ let assert = require("better-assert"); let _ = require("lodash"); let ref = require("ref"); @@ -330,49 +330,5 @@ describe("AFArray class and methods", function() { v = array2.at(af.end - 1).scalarSync(); assert(v === 8.0 * 8.0); }); - - it("should be tests for assignment operators", function() { - console.log(`TODO: implement array assignment operator tests for ${id}\n`); - }); - - it("should be tests for indexing operators", function() { - console.log(`TODO: implement array indexing operator tests for ${id}\n`); - }); - - it("should be tests for row", function() { - console.log(`TODO: implement array row test for ${id}\n`); - }); - - it("should be tests for col", function() { - console.log(`TODO: implement array col test for ${id}\n`); - }); - - it("should be tests for slice", function() { - console.log(`TODO: implement array slice test for ${id}\n`); - }); - - it("should be tests for rows", function() { - console.log(`TODO: implement array rows test for ${id}\n`); - }); - - it("should be tests for cols", function() { - console.log(`TODO: implement array cols test for ${id}\n`); - }); - - it("should be tests for slices", function() { - console.log(`TODO: implement array slices test for ${id}\n`); - }); - - it("should be tests for as", function() { - console.log(`TODO: implement array as test for ${id}\n`); - }); - - it("should be tests for arithmetic operators", function() { - console.log(`TODO: implement array arithmetic operator tests for ${id}\n`); - }); - - it("should be tests for logical operators", function() { - console.log(`TODO: implement array logical operator tests for ${id}\n`); - }); }); }); \ No newline at end of file diff --git a/tests/es6/createArrayFunctionTests.js b/tests/es6/createArrayFunctionTests.js index 65acaa1..29b97d7 100644 --- a/tests/es6/createArrayFunctionTests.js +++ b/tests/es6/createArrayFunctionTests.js @@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ "use strict"; - +/* global describe,it */ let assert = require("better-assert"); let _ = require("lodash"); let ref = require("ref"); @@ -106,35 +106,5 @@ describe("Functions to create arrays", function () { f().nodeify(done); }); }); - - describe("identity", function () { - it("should be implemented", function() { - console.log(`TODO: implement identity test for ${id}\n`); - }); - }); - - describe("range", function () { - it("should be implemented", function() { - console.log(`TODO: implement range test for ${id}\n`); - }); - }); - - describe("iota", function () { - it("should be implemented", function() { - console.log(`TODO: implement iota test for ${id}\n`); - }); - }); - - describe("diag", function () { - it("should be implemented", function() { - console.log(`TODO: implement diag test for ${id}\n`); - }); - }); - - describe("constant", function () { - it("should be implemented", function() { - console.log(`TODO: implement constant test for ${id}\n`); - }); - }); }); }); \ No newline at end of file diff --git a/tests/es6/deviceTests.js b/tests/es6/deviceTests.js index ef65f27..454d1de 100644 --- a/tests/es6/deviceTests.js +++ b/tests/es6/deviceTests.js @@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ "use strict"; - +/* global describe,it */ let assert = require("better-assert"); let _ = require("lodash"); let Bluebird = require("bluebird"); diff --git a/tests/es6/moveAndReorderArrayTests.js b/tests/es6/moveAndReorderArrayTests.js index 333f1c5..152264d 100644 --- a/tests/es6/moveAndReorderArrayTests.js +++ b/tests/es6/moveAndReorderArrayTests.js @@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ "use strict"; - +/* global describe,it */ let assert = require("better-assert"); let _ = require("lodash"); let ref = require("ref"); @@ -42,52 +42,6 @@ let testExec = require("./testExec"); describe("Functions to create arrays", function () { testExec.run(function(af) { - describe("join", function () { - it("should be implemented", function() { - console.log(`TODO: implement join test for ${id}\n`); - }); - }); - - describe("tile", function () { - it("should be implemented", function() { - console.log(`TODO: implement tile test for ${id}\n`); - }); - }); - - describe("reorder", function () { - it("should be implemented", function() { - console.log(`TODO: implement iota reorder for ${id}\n`); - }); - }); - - describe("shift", function () { - it("should be implemented", function() { - console.log(`TODO: implement shift test for ${id}\n`); - }); - }); - - describe("moddims", function () { - it("should be implemented", function() { - console.log(`TODO: implement moddims test for ${id}\n`); - }); - }); - - describe("flat", function () { - it("should be implemented", function() { - console.log(`TODO: implement flat test for ${id}\n`); - }); - }); - - describe("flip", function () { - it("should be implemented", function() { - console.log(`TODO: implement flip test for ${id}\n`); - }); - }); - describe("transpose", function () { - it("should be implemented", function() { - console.log(`TODO: implement transpose test for ${id}\n`); - }); - }); }); }); \ No newline at end of file From 518d19ece967e1b746b5729908f05598cc694002 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 24 Nov 2015 12:42:18 +0100 Subject: [PATCH 17/45] 0.16.1 - minor fixes --- package.json | 2 +- tests/es5/afArrayTests.js | 750 ++++++++++------------ tests/es5/afArrayTests.js.map | 2 +- tests/es5/createArrayFunctionTests.js | 280 ++++---- tests/es5/createArrayFunctionTests.js.map | 2 +- tests/es5/deviceTests.js | 97 ++- tests/es5/deviceTests.js.map | 2 +- tests/es5/index.js | 2 +- tests/es5/index.js.map | 2 +- tests/es5/moveAndReorderArrayTests.js | 52 +- tests/es5/moveAndReorderArrayTests.js.map | 2 +- tests/es5/testExec.js | 39 ++ tests/es5/testExec.js.map | 1 + 13 files changed, 573 insertions(+), 660 deletions(-) create mode 100644 tests/es5/testExec.js create mode 100644 tests/es5/testExec.js.map diff --git a/package.json b/package.json index 5e2e5f2..7220b1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.16.0", + "version": "0.16.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index be63617..3fc4b8f 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -4,403 +4,363 @@ var _ = require("lodash"); var ref = require("ref"); var Bluebird = require("bluebird"); var async = Bluebird.coroutine; -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function() { - var af = require("../..")(id); - var AFArray = af.AFArray; - it("should export AFArray constructor", function() { - assert(_.isFunction(AFArray)); - }); - it("should create empty", function() { - var array = new AFArray(); - assert(_.isObject(array)); - assert(array.bytes() === 0); - assert(array.elements() === 0); - assert(array.isempty()); - assert(_.isFunction(array.host)); - assert(_.isFunction(array.hostAsync)); - assert(_.isUndefined(array.hostAsyncAsync)); - assert(_.isFunction(array.hostSync)); - assert(_.isUndefined(array.hostSyncAsync)); - assert(_.isUndefined(array.hostSyncSync)); - assert(_.isUndefined(array.hostAsyncSync)); - }); - it("should fail with one number argument", function() { - try { - var array = new AFArray(1); - assert(false); - } catch (e) {} - }); - it("should create new one dimensional", function() { - var array = new AFArray(10, af.dType.s32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 4); - assert(array.elements() === 10); - assert(array.type() === af.dType.s32); - assert(array.numdims() === 1); - assert(array.dims(0) === 10); - assert(array.dims(1) === 1); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10); - assert(dims.ndims === 1); - assert(dims.values[0] === 10); - assert(dims.values[1] === 1); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === true); - assert(array.isrow() === false); - assert(array.iscolumn() === true); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === false); - assert(array.isrealfloating() === false); - assert(array.isfloating() === false); - assert(array.isinteger() === true); - assert(array.isbool() === false); - }); - it("should create new two dimensional", function() { - var array = new AFArray(10, 20, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 4); - assert(array.elements() === 10 * 20); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 2); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20); - assert(dims.ndims === 2); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); - it("should create new three dimensional", function() { - var array = new AFArray(10, 20, 30, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 4); - assert(array.elements() === 10 * 20 * 30); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 3); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30); - assert(dims.ndims === 3); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); - function verify4(array) { - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 40 * 4); - assert(array.elements() === 10 * 20 * 30 * 40); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 4); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 40); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30 * 40); - assert(dims.ndims === 4); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 40); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); +var testExec = require("./testExec"); +describe("AFArray class and methods", function() { + testExec.run(function(af) { + var AFArray = af.AFArray; + it("should export AFArray constructor", function() { + assert(_.isFunction(AFArray)); + }); + it("should create empty", function() { + var array = new AFArray(); + assert(_.isObject(array)); + assert(array.bytes() === 0); + assert(array.elements() === 0); + assert(array.isempty()); + assert(_.isFunction(array.host)); + assert(_.isFunction(array.hostAsync)); + assert(_.isUndefined(array.hostAsyncAsync)); + assert(_.isFunction(array.hostSync)); + assert(_.isUndefined(array.hostSyncAsync)); + assert(_.isUndefined(array.hostSyncSync)); + assert(_.isUndefined(array.hostAsyncSync)); + }); + it("should fail with one number argument", function() { + try { + var array = new AFArray(1); + assert(false); + } catch (e) {} + }); + it("should create new one dimensional", function() { + var array = new AFArray(10, af.dType.s32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 4); + assert(array.elements() === 10); + assert(array.type() === af.dType.s32); + assert(array.numdims() === 1); + assert(array.dims(0) === 10); + assert(array.dims(1) === 1); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10); + assert(dims.ndims === 1); + assert(dims.values[0] === 10); + assert(dims.values[1] === 1); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === true); + assert(array.isrow() === false); + assert(array.iscolumn() === true); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === false); + assert(array.isrealfloating() === false); + assert(array.isfloating() === false); + assert(array.isinteger() === true); + assert(array.isbool() === false); + }); + it("should create new two dimensional", function() { + var array = new AFArray(10, 20, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 4); + assert(array.elements() === 10 * 20); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 2); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20); + assert(dims.ndims === 2); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + }); + it("should create new three dimensional", function() { + var array = new AFArray(10, 20, 30, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 4); + assert(array.elements() === 10 * 20 * 30); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 3); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30); + assert(dims.ndims === 3); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + }); + function verify4(array) { + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 40 * 4); + assert(array.elements() === 10 * 20 * 30 * 40); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 4); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 40); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30 * 40); + assert(dims.ndims === 4); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 40); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); + } + it("should create new four dimensional", function() { + var array = new AFArray(10, 20, 30, 40, af.dType.f32); + verify4(array); + }); + it("should create new four dimensional from dim4", function() { + var array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32); + verify4(array); + }); + it("should create new four dimensional from dim4 array", function() { + var array = new AFArray([10, 20, 30, 40], af.dType.f32); + verify4(array); + }); + it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { + var f = async($traceurRuntime.initGeneratorFunction(function $__11() { + var int, + count, + buff, + v$__1, + array, + buff2, + v$__2, + v1, + v2, + array2, + buff3, + v$__3, + v1$__4, + v2$__5, + v; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + int = ref.types.int; + count = 10; + buff = new Buffer(int.size * count); + for (v$__1 = 0; v$__1 < count; v$__1++) { + int.set(buff, v$__1 * int.size, v$__1 * v$__1); + } + assert(_.isFunction(AFArray.create)); + assert(_.isFunction(AFArray.createAsync)); + $ctx.state = 34; + break; + case 34: + $ctx.state = 2; + return AFArray.createAsync(count, af.dType.s32, buff); + case 2: + array = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(array.bytes() === count * int.size); + assert(array.type() === af.dType.s32); + buff2 = new Buffer(int.size * count); + $ctx.state = 36; + break; + case 36: + $ctx.state = 6; + return array.hostAsync(buff2); + case 6: + $ctx.maybeThrow(); + $ctx.state = 8; + break; + case 8: + for (v$__2 = 0; v$__2 < count; v$__2++) { + v1 = int.get(buff, v$__2 * int.size); + v2 = int.get(buff2, v$__2 * int.size); + assert(v1 === v2); + assert(v1 === v$__2 * v$__2); + } + array2 = array.copy(); + assert(array2 instanceof AFArray); + assert(array2.bytes() === array.bytes()); + $ctx.state = 38; + break; + case 38: + $ctx.state = 10; + return array2.hostAsync(); + case 10: + buff3 = $ctx.sent; + $ctx.state = 12; + break; + case 12: + assert(buff3 instanceof Buffer); + assert(buff3.length === int.size * count); + for (v$__3 = 0; v$__3 < count; v$__3++) { + v1$__4 = int.get(buff, v$__3 * int.size); + v2$__5 = int.get(buff3, v$__3 * int.size); + assert(v1$__4 === v2$__5); + assert(v1$__4 === v$__3 * v$__3); + } + $ctx.state = 40; + break; + case 40: + $ctx.state = 14; + return array2.valueAsync(); + case 14: + v = $ctx.sent; + $ctx.state = 16; + break; + case 16: + assert(v === 0.0); + $ctx.state = 42; + break; + case 42: + $ctx.state = 18; + return array2.at(1).valueAsync(); + case 18: + v = $ctx.sent; + $ctx.state = 20; + break; + case 20: + assert(v === 1.0); + $ctx.state = 44; + break; + case 44: + $ctx.state = 22; + return array2.at(2).scalarAsync(); + case 22: + v = $ctx.sent; + $ctx.state = 24; + break; + case 24: + assert(v === 4.0); + $ctx.state = 46; + break; + case 46: + $ctx.state = 26; + return array2.at("end").scalarAsync(); + case 26: + v = $ctx.sent; + $ctx.state = 28; + break; + case 28: + assert(v === 9.0 * 9.0); + $ctx.state = 48; + break; + case 48: + $ctx.state = 30; + return array2.at(af.end - 1).scalarAsync(); + case 30: + v = $ctx.sent; + $ctx.state = 32; + break; + case 32: + assert(v === 8.0 * 8.0); + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__11, this); + })); + f().nodeify(done); + }); + it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { + var int = ref.types.int; + var count = 10; + var buff = new Buffer(int.size * count); + for (var v$__6 = 0; v$__6 < count; v$__6++) { + int.set(buff, v$__6 * int.size, v$__6 * v$__6); } - it("should create new four dimensional", function() { - var array = new AFArray(10, 20, 30, 40, af.dType.f32); - verify4(array); - }); - it("should create new four dimensional from dim4", function() { - var array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32); - verify4(array); - }); - it("should create new four dimensional from dim4 array", function() { - var array = new AFArray([10, 20, 30, 40], af.dType.f32); - verify4(array); - }); - it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__11() { - var int, - count, - buff, - v$__1, - array, - buff2, - v$__2, - v1, - v2, - array2, - buff3, - v$__3, - v1$__4, - v2$__5, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - int = ref.types.int; - count = 10; - buff = new Buffer(int.size * count); - for (v$__1 = 0; v$__1 < count; v$__1++) { - int.set(buff, v$__1 * int.size, v$__1 * v$__1); - } - assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createAsync)); - $ctx.state = 34; - break; - case 34: - $ctx.state = 2; - return AFArray.createAsync(count, af.dType.s32, buff); - case 2: - array = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(array.bytes() === count * int.size); - assert(array.type() === af.dType.s32); - buff2 = new Buffer(int.size * count); - $ctx.state = 36; - break; - case 36: - $ctx.state = 6; - return array.hostAsync(buff2); - case 6: - $ctx.maybeThrow(); - $ctx.state = 8; - break; - case 8: - for (v$__2 = 0; v$__2 < count; v$__2++) { - v1 = int.get(buff, v$__2 * int.size); - v2 = int.get(buff2, v$__2 * int.size); - assert(v1 === v2); - assert(v1 === v$__2 * v$__2); - } - array2 = array.copy(); - assert(array2 instanceof AFArray); - assert(array2.bytes() === array.bytes()); - $ctx.state = 38; - break; - case 38: - $ctx.state = 10; - return array2.hostAsync(); - case 10: - buff3 = $ctx.sent; - $ctx.state = 12; - break; - case 12: - assert(buff3 instanceof Buffer); - assert(buff3.length === int.size * count); - for (v$__3 = 0; v$__3 < count; v$__3++) { - v1$__4 = int.get(buff, v$__3 * int.size); - v2$__5 = int.get(buff3, v$__3 * int.size); - assert(v1$__4 === v2$__5); - assert(v1$__4 === v$__3 * v$__3); - } - $ctx.state = 40; - break; - case 40: - $ctx.state = 14; - return array2.valueAsync(); - case 14: - v = $ctx.sent; - $ctx.state = 16; - break; - case 16: - assert(v === 0.0); - $ctx.state = 42; - break; - case 42: - $ctx.state = 18; - return array2.at(1).valueAsync(); - case 18: - v = $ctx.sent; - $ctx.state = 20; - break; - case 20: - assert(v === 1.0); - $ctx.state = 44; - break; - case 44: - $ctx.state = 22; - return array2.at(2).scalarAsync(); - case 22: - v = $ctx.sent; - $ctx.state = 24; - break; - case 24: - assert(v === 4.0); - $ctx.state = 46; - break; - case 46: - $ctx.state = 26; - return array2.at("end").scalarAsync(); - case 26: - v = $ctx.sent; - $ctx.state = 28; - break; - case 28: - assert(v === 9.0 * 9.0); - $ctx.state = 48; - break; - case 48: - $ctx.state = 30; - return array2.at(af.end - 1).scalarAsync(); - case 30: - v = $ctx.sent; - $ctx.state = 32; - break; - case 32: - assert(v === 8.0 * 8.0); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__11, this); - })); - f().nodeify(done); - }); - it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { - var int = ref.types.int; - var count = 10; - var buff = new Buffer(int.size * count); - for (var v$__6 = 0; v$__6 < count; v$__6++) { - int.set(buff, v$__6 * int.size, v$__6 * v$__6); - } - assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createSync)); - var array = AFArray.createSync(count, af.dType.s32, buff); - assert(array.bytes() === count * int.size); - assert(array.type() === af.dType.s32); - var buff2 = new Buffer(int.size * count); - array.hostSync(buff2); - for (var v$__7 = 0; v$__7 < count; v$__7++) { - var v1 = int.get(buff, v$__7 * int.size); - var v2 = int.get(buff2, v$__7 * int.size); - assert(v1 === v2); - assert(v1 === v$__7 * v$__7); - } - var array2 = array.copy(); - assert(array2 instanceof AFArray); - assert(array2.bytes() === array.bytes()); - var buff3 = array2.hostSync(); - assert(buff3 instanceof Buffer); - assert(buff3.length === int.size * count); - for (var v$__8 = 0; v$__8 < count; v$__8++) { - var v1$__9 = int.get(buff, v$__8 * int.size); - var v2$__10 = int.get(buff3, v$__8 * int.size); - assert(v1$__9 === v2$__10); - assert(v1$__9 === v$__8 * v$__8); - } - var v = array2.valueSync(); - assert(v === 0.0); - v = array.at(1).valueSync(); - assert(v === 1.0); - v = array2.at(2).scalarSync(); - assert(v === 4.0); - v = array2.at("end").scalarSync(); - assert(v === 9.0 * 9.0); - v = array2.at(af.end - 1).scalarSync(); - assert(v === 8.0 * 8.0); - }); - it("should be tests for assignment operators", function() { - console.log(("TODO: implement array assignment operator tests for " + id + "\n")); - }); - it("should be tests for indexing operators", function() { - console.log(("TODO: implement array indexing operator tests for " + id + "\n")); - }); - it("should be tests for row", function() { - console.log(("TODO: implement array row test for " + id + "\n")); - }); - it("should be tests for col", function() { - console.log(("TODO: implement array col test for " + id + "\n")); - }); - it("should be tests for slice", function() { - console.log(("TODO: implement array slice test for " + id + "\n")); - }); - it("should be tests for rows", function() { - console.log(("TODO: implement array rows test for " + id + "\n")); - }); - it("should be tests for cols", function() { - console.log(("TODO: implement array cols test for " + id + "\n")); - }); - it("should be tests for slices", function() { - console.log(("TODO: implement array slices test for " + id + "\n")); - }); - it("should be tests for as", function() { - console.log(("TODO: implement array as test for " + id + "\n")); - }); - it("should be tests for arithmetic operators", function() { - console.log(("TODO: implement array arithmetic operator tests for " + id + "\n")); - }); - it("should be tests for logical operators", function() { - console.log(("TODO: implement array logical operator tests for " + id + "\n")); - }); + assert(_.isFunction(AFArray.create)); + assert(_.isFunction(AFArray.createSync)); + var array = AFArray.createSync(count, af.dType.s32, buff); + assert(array.bytes() === count * int.size); + assert(array.type() === af.dType.s32); + var buff2 = new Buffer(int.size * count); + array.hostSync(buff2); + for (var v$__7 = 0; v$__7 < count; v$__7++) { + var v1 = int.get(buff, v$__7 * int.size); + var v2 = int.get(buff2, v$__7 * int.size); + assert(v1 === v2); + assert(v1 === v$__7 * v$__7); + } + var array2 = array.copy(); + assert(array2 instanceof AFArray); + assert(array2.bytes() === array.bytes()); + var buff3 = array2.hostSync(); + assert(buff3 instanceof Buffer); + assert(buff3.length === int.size * count); + for (var v$__8 = 0; v$__8 < count; v$__8++) { + var v1$__9 = int.get(buff, v$__8 * int.size); + var v2$__10 = int.get(buff3, v$__8 * int.size); + assert(v1$__9 === v2$__10); + assert(v1$__9 === v$__8 * v$__8); + } + var v = array2.valueSync(); + assert(v === 0.0); + v = array.at(1).valueSync(); + assert(v === 1.0); + v = array2.at(2).scalarSync(); + assert(v === 4.0); + v = array2.at("end").scalarSync(); + assert(v === 9.0 * 9.0); + v = array2.at(af.end - 1).scalarSync(); + assert(v === 8.0 * 8.0); }); - } -} -describe("AFArray class and methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + }); }); //# sourceMappingURL=afArrayTests.js.map diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index 94c7569..2f991e6 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\n\nfunction testPlatform(id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n\n it(\"should be tests for assignment operators\", function() {\n console.log(`TODO: implement array assignment operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for indexing operators\", function() {\n console.log(`TODO: implement array indexing operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for row\", function() {\n console.log(`TODO: implement array row test for ${id}\\n`);\n });\n\n it(\"should be tests for col\", function() {\n console.log(`TODO: implement array col test for ${id}\\n`);\n });\n\n it(\"should be tests for slice\", function() {\n console.log(`TODO: implement array slice test for ${id}\\n`);\n });\n\n it(\"should be tests for rows\", function() {\n console.log(`TODO: implement array rows test for ${id}\\n`);\n });\n\n it(\"should be tests for cols\", function() {\n console.log(`TODO: implement array cols test for ${id}\\n`);\n });\n\n it(\"should be tests for slices\", function() {\n console.log(`TODO: implement array slices test for ${id}\\n`);\n });\n\n it(\"should be tests for as\", function() {\n console.log(`TODO: implement array as test for ${id}\\n`);\n });\n\n it(\"should be tests for arithmetic operators\", function() {\n console.log(`TODO: implement array arithmetic operator tests for ${id}\\n`);\n });\n\n it(\"should be tests for logical operators\", function() {\n console.log(`TODO: implement array logical operator tests for ${id}\\n`);\n });\n });\n }\n}\n\ndescribe(\"AFArray class and methods\", function() {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n });\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index 43b803e..af78bd6 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -6,168 +6,136 @@ var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var int = ref.types.int; var float = ref.types.float; -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function() { - var af = require("../..")(id); - describe("randu", function() { - it("should yield uniform random int array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randu(2, 4, af.dType.s32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * int.size); - for (i = 0; i < data.length / int.size; i++) { - v = int.get(data, i * int.size); - assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); - assert(Math.floor(v) === v); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); - it("should yield uniform random float array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randu([2, 4], af.dType.f32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - for (i = 0; i < data.length / float.size; i++) { - v = float.get(data, i * float.size); - assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1)); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); +var testExec = require("./testExec"); +describe("Functions to create arrays", function() { + testExec.run(function(af) { + describe("randu", function() { + it("should yield uniform random int array with 2 dimensions", function(done) { + var f = async($traceurRuntime.initGeneratorFunction(function $__0() { + var array, + data, + i, + v; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + array = af.randu(2, 4, af.dType.s32); + $ctx.state = 6; + break; + case 6: + $ctx.state = 2; + return array.copyToHostAsync(); + case 2: + data = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * int.size); + for (i = 0; i < data.length / int.size; i++) { + v = int.get(data, i * int.size); + assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); + assert(Math.floor(v) === v); + } + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__0, this); + })); + f().nodeify(done); + }); + it("should yield uniform random float array with 2 dimensions", function(done) { + var f = async($traceurRuntime.initGeneratorFunction(function $__0() { + var array, + data, + i, + v; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + array = af.randu([2, 4], af.dType.f32); + $ctx.state = 6; + break; + case 6: + $ctx.state = 2; + return array.copyToHostAsync(); + case 2: + data = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + for (i = 0; i < data.length / float.size; i++) { + v = float.get(data, i * float.size); + assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1)); + } + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__0, this); + })); + f().nodeify(done); }); - describe("randf", function() { - it("should throw error when invoking normal random int array with 2 dimensions", function() { - try { - var array = af.randn(2, 4, af.dType.s32); + }); + describe("randf", function() { + it("should throw error when invoking normal random int array with 2 dimensions", function() { + try { + var array = af.randn(2, 4, af.dType.s32); + return; + } catch (e) { + if (/invalid dtype argument/ig.test(e.message)) { return; - } catch (e) { - if (/invalid dtype argument/ig.test(e.message)) { - return; - } else { - throw new Error("This should throw appropriate error."); - } + } else { + throw new Error("This should throw appropriate error."); } - throw new Error("This should throw."); - }); - it("should yield normal random float array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randn([2, 4], af.dType.f32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - for (i = 0; i < data.length / float.size; i++) { - v = float.get(data, i * float.size); - assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1)); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); - }); - describe("identity", function() { - it("should be implemented", function() { - console.log(("TODO: implement identity test for " + id + "\n")); - }); + } + throw new Error("This should throw."); }); - describe("range", function() { - it("should be implemented", function() { - console.log(("TODO: implement range test for " + id + "\n")); - }); - }); - describe("iota", function() { - it("should be implemented", function() { - console.log(("TODO: implement iota test for " + id + "\n")); - }); - }); - describe("diag", function() { - it("should be implemented", function() { - console.log(("TODO: implement diag test for " + id + "\n")); - }); - }); - describe("constant", function() { - it("should be implemented", function() { - console.log(("TODO: implement constant test for " + id + "\n")); - }); + it("should yield normal random float array with 2 dimensions", function(done) { + var f = async($traceurRuntime.initGeneratorFunction(function $__0() { + var array, + data, + i, + v; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + array = af.randn([2, 4], af.dType.f32); + $ctx.state = 6; + break; + case 6: + $ctx.state = 2; + return array.copyToHostAsync(); + case 2: + data = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + for (i = 0; i < data.length / float.size; i++) { + v = float.get(data, i * float.size); + assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1)); + } + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__0, this); + })); + f().nodeify(done); }); }); - } -} -describe("Functions to create arrays", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + }); }); //# sourceMappingURL=createArrayFunctionTests.js.map diff --git a/tests/es5/createArrayFunctionTests.js.map b/tests/es5/createArrayFunctionTests.js.map index b1b1118..3084f0e 100644 --- a/tests/es5/createArrayFunctionTests.js.map +++ b/tests/es5/createArrayFunctionTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["createArrayFunctionTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\n\nfunction testPlatform (id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"identity\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement identity test for ${id}\\n`);\n });\n });\n\n describe(\"range\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement range test for ${id}\\n`);\n });\n });\n\n describe(\"iota\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement iota test for ${id}\\n`);\n });\n });\n\n describe(\"diag\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement diag test for ${id}\\n`);\n });\n });\n\n describe(\"constant\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement constant test for ${id}\\n`);\n });\n });\n });\n }\n}\n\ndescribe(\"Functions to create arrays\", function () {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"createArrayFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["createArrayFunctionTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n });\n});"],"file":"createArrayFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index 626b290..48b8f31 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -2,65 +2,58 @@ var assert = require("better-assert"); var _ = require("lodash"); var Bluebird = require("bluebird"); -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function() { - var af = require("../..")(id); - it("should return available devices", function() { - var deviceCount = af.getDeviceCount(); - assert(deviceCount > 0); - var infos = af.getDevices(); - assert(_.isArray(infos)); - assert(infos.length === deviceCount); - var $__3 = true; - var $__4 = false; - var $__5 = undefined; +var testExec = require("./testExec"); +describe("device methods", function() { + testExec.run(function(af) { + it("should return available devices", function() { + var deviceCount = af.getDeviceCount(); + assert(deviceCount > 0); + var infos = af.getDevices(); + assert(_.isArray(infos)); + assert(infos.length === deviceCount); + var $__3 = true; + var $__4 = false; + var $__5 = undefined; + try { + for (var $__1 = void 0, + $__0 = (infos)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { + var info = $__1.value; + { + assert(_.isString(info.name) && info.name); + assert(_.isString(info.platform) && info.platform); + assert(_.isString(info.compute) && info.compute); + assert(_.isBoolean(info.isDoubleAvailable)); + } + } + } catch ($__6) { + $__4 = true; + $__5 = $__6; + } finally { try { - for (var $__1 = void 0, - $__0 = (infos)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { - var info = $__1.value; - { - assert(_.isString(info.name) && info.name); - assert(_.isString(info.platform) && info.platform); - assert(_.isString(info.compute) && info.compute); - assert(_.isBoolean(info.isDoubleAvailable)); - } + if (!$__3 && $__0.return != null) { + $__0.return(); } - } catch ($__6) { - $__4 = true; - $__5 = $__6; } finally { - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; - } + if ($__4) { + throw $__5; } } - }); - it("should do sync with callback", function(done) { - af.sync(done); - }); - it("should do sync with promise", function(done) { - af.syncAsync().nodeify(done); - }); - it("sync should failed if device is out of range", function(done) { - af.syncAsync(100).then(function() { - done(new Error("This should fail!")); - }, function() { - done(); - }); + } + }); + it("should do sync with callback", function(done) { + af.sync(done); + }); + it("should do sync with promise", function(done) { + af.syncAsync().nodeify(done); + }); + it("sync should failed if device is out of range", function(done) { + af.syncAsync(100).then(function() { + done(new Error("This should fail!")); + }, function() { + done(); }); }); - } -} -describe("device methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + }); }); //# sourceMappingURL=deviceTests.js.map diff --git a/tests/es5/deviceTests.js.map b/tests/es5/deviceTests.js.map index 50846bd..d144085 100644 --- a/tests/es5/deviceTests.js.map +++ b/tests/es5/deviceTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["deviceTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\n\nfunction testPlatform(id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n }\n}\n\ndescribe(\"device methods\", function() {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});\n"],"file":"deviceTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["deviceTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet testExec = require(\"./testExec\");\n\ndescribe(\"device methods\", function() {\n testExec.run(function(af) {\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n});\n"],"file":"deviceTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/index.js b/tests/es5/index.js index 5aa7e0b..b88a118 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -1,7 +1,7 @@ "use strict"; require("./deviceTests"); -require("./afArrayTests"); require("./createArrayFunctionTests"); require("./moveAndReorderArrayTests"); +require("./afArrayTests"); //# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map index f5f3bfb..beed1e5 100644 --- a/tests/es5/index.js.map +++ b/tests/es5/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");\n"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");\nrequire(\"./afArrayTests\");"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/moveAndReorderArrayTests.js b/tests/es5/moveAndReorderArrayTests.js index ae1557f..183af2c 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -6,57 +6,9 @@ var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var int = ref.types.int; var float = ref.types.float; -function testPlatform(id) { - if (process.env["TEST_" + id] === "1") { - describe(id + " platform", function() { - var af = require("../..")(id); - describe("join", function() { - it("should be implemented", function() { - console.log(("TODO: implement join test for " + id + "\n")); - }); - }); - describe("tile", function() { - it("should be implemented", function() { - console.log(("TODO: implement tile test for " + id + "\n")); - }); - }); - describe("reorder", function() { - it("should be implemented", function() { - console.log(("TODO: implement iota reorder for " + id + "\n")); - }); - }); - describe("shift", function() { - it("should be implemented", function() { - console.log(("TODO: implement shift test for " + id + "\n")); - }); - }); - describe("moddims", function() { - it("should be implemented", function() { - console.log(("TODO: implement moddims test for " + id + "\n")); - }); - }); - describe("flat", function() { - it("should be implemented", function() { - console.log(("TODO: implement flat test for " + id + "\n")); - }); - }); - describe("flip", function() { - it("should be implemented", function() { - console.log(("TODO: implement flip test for " + id + "\n")); - }); - }); - describe("transpose", function() { - it("should be implemented", function() { - console.log(("TODO: implement transpose test for " + id + "\n")); - }); - }); - }); - } -} +var testExec = require("./testExec"); describe("Functions to create arrays", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + testExec.run(function(af) {}); }); //# sourceMappingURL=moveAndReorderArrayTests.js.map diff --git a/tests/es5/moveAndReorderArrayTests.js.map b/tests/es5/moveAndReorderArrayTests.js.map index 3954fef..54892f2 100644 --- a/tests/es5/moveAndReorderArrayTests.js.map +++ b/tests/es5/moveAndReorderArrayTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["moveAndReorderArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\n\nfunction testPlatform (id) {\n if (process.env[\"TEST_\" + id] === \"1\") {\n describe(id + \" platform\", function () {\n let af = require(\"../..\")(id);\n\n describe(\"join\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement join test for ${id}\\n`);\n });\n });\n\n describe(\"tile\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement tile test for ${id}\\n`);\n });\n });\n\n describe(\"reorder\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement iota reorder for ${id}\\n`);\n });\n });\n\n describe(\"shift\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement shift test for ${id}\\n`);\n });\n });\n\n describe(\"moddims\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement moddims test for ${id}\\n`);\n });\n });\n\n describe(\"flat\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement flat test for ${id}\\n`);\n });\n });\n\n describe(\"flip\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement flip test for ${id}\\n`);\n });\n });\n\n describe(\"transpose\", function () {\n it(\"should be implemented\", function() {\n console.log(`TODO: implement transpose test for ${id}\\n`);\n });\n });\n });\n }\n}\n\ndescribe(\"Functions to create arrays\", function () {\n testPlatform(\"CPU\");\n testPlatform(\"OpenCL\");\n testPlatform(\"CUDA\");\n});"],"file":"moveAndReorderArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["moveAndReorderArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n\n });\n});"],"file":"moveAndReorderArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testExec.js b/tests/es5/testExec.js new file mode 100644 index 0000000..f4e5fbb --- /dev/null +++ b/tests/es5/testExec.js @@ -0,0 +1,39 @@ +"use strict"; +var af = require("../.."); +function runOn(id, f) { + describe(id + " platform", function() { + var afID = af(id); + f(afID); + }); +} +var testExec = {run: function(f) { + var platfroms = af.supportedPlatforms(); + var $__4 = true; + var $__5 = false; + var $__6 = undefined; + try { + for (var $__2 = void 0, + $__1 = (platfroms)[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { + var pl = $__2.value; + { + runOn(pl, f); + } + } + } catch ($__7) { + $__5 = true; + $__6 = $__7; + } finally { + try { + if (!$__4 && $__1.return != null) { + $__1.return(); + } + } finally { + if ($__5) { + throw $__6; + } + } + } + }}; +module.exports = testExec; + +//# sourceMappingURL=testExec.js.map diff --git a/tests/es5/testExec.js.map b/tests/es5/testExec.js.map new file mode 100644 index 0000000..3f10b8d --- /dev/null +++ b/tests/es5/testExec.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["testExec.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet af = require(\"../..\");\n\nfunction runOn(id, f) {\n describe(id + \" platform\", function () {\n let afID = af(id);\n f(afID);\n });\n}\n\nlet testExec = {\n run: function(f) {\n let platfroms = af.supportedPlatforms();\n for (let pl of platfroms) {\n runOn(pl, f);\n }\n }\n};\n\nmodule.exports = testExec;\n"],"file":"testExec.js","sourceRoot":"/source/"} \ No newline at end of file From 4309d36252e515f5c8bfe5d7645cc3c1f35db611 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 24 Nov 2015 16:00:54 +0100 Subject: [PATCH 18/45] 0.16.2 --- changelog.md | 8 ++++++++ package.json | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index 07244a1..787ca56 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,11 @@ +# 0.16.2 (2015-10-18) + +- better-asser dependency fixed + +# 0.16.1 (2015-10-18) + +- Runs with ArrayFire 3.2 + # 0.16.0 (2015-10-18) - Renamed to arrayfire-js diff --git a/package.json b/package.json index 7220b1a..2265b06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.16.1", + "version": "0.16.2", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -12,7 +12,8 @@ "cmake-js": "3", "lodash": "*", "nan": "^2.1.0", - "traceur": "*" + "traceur": "*", + "better-assert": "*" }, "scripts": { "install": "cmake-js compile", @@ -20,7 +21,6 @@ }, "main": "lib/", "devDependencies": { - "better-assert": "*", "bluebird": "*", "debug": "*", "fs-extra": "*", From 565984e228192b86562e8c058e587c1e9f8da74d Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 25 Nov 2015 16:37:47 +0100 Subject: [PATCH 19/45] select added --- changelog.md | 6 +++++- package.json | 2 +- src/linearalgebra.cpp | 2 +- src/moveandreorderarray.cpp | 37 +++++++++++++++++++++++++++++++++---- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/changelog.md b/changelog.md index 787ca56..b904a61 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,8 @@ -# 0.16.2 (2015-10-18) +# 0.17.0 (2015-11-25) + +- select wrapper implemented + +# 0.16.2 (2015-11-23) - better-asser dependency fixed diff --git a/package.json b/package.json index 2265b06..6e19a8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.16.2", + "version": "0.17.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index fec6373..f8fef73 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -221,7 +221,7 @@ NAN_METHOD(LuPacked) { Guard guard; af::array out, pivot; - af::lu(out, pivot, array, isLapackPiv); + af::lu(out, pivot, (const af::array&)array, isLapackPiv); return move(make_pair(out, pivot)); }; auto conv = [=](WorkerT* w, ResultT v) diff --git a/src/moveandreorderarray.cpp b/src/moveandreorderarray.cpp index ab345cf..596eb84 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -42,8 +42,6 @@ using namespace node; NAN_METHOD(Join) { - - try { ARGS_LEN(3); @@ -69,8 +67,6 @@ ARRAYFIRE_SYNC_METHOD_ARR(Flat, flat) NAN_METHOD(Flip) { - - try { ARGS_LEN(2); @@ -83,6 +79,36 @@ NAN_METHOD(Flip) ARRAYFIRE_CATCH } +NAN_METHOD(Select) +{ + try + { + ARGS_LEN(3); + + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + auto pArray1 = ArrayWrapper::TryGetArrayAt(info, 1); + auto pArray2 = ArrayWrapper::TryGetArrayAt(info, 2); + Guard guard; + if (pArray1 && pArray2) + { + info.GetReturnValue().Set(ArrayWrapper::New(af::select(*pArray, *pArray1, *pArray2))); + } + else if (pArray1 && info[2]->IsNumber()) + { + info.GetReturnValue().Set(ArrayWrapper::New(af::select(*pArray, *pArray1, info[2]->NumberValue()))); + } + else if (pArray2 && info[1]->IsNumber()) + { + info.GetReturnValue().Set(ArrayWrapper::New(af::select(*pArray, info[1]->NumberValue(), *pArray2))); + } + else + { + NAN_THROW_INVALID_ARGS(); + } + } + ARRAYFIRE_CATCH +} + NAN_MODULE_INIT(InitMoveAndReorderArray) { Nan::HandleScope scope; @@ -110,4 +136,7 @@ NAN_MODULE_INIT(InitMoveAndReorderArray) Nan::Set(target, Nan::New("flip").ToLocalChecked(), Nan::New(Flip)->GetFunction()); + + Nan::Set(target, Nan::New("select").ToLocalChecked(), + Nan::New(Select)->GetFunction()); } From 72b0f9306dd7d9699e3e063643bfc9a1eb279331 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 25 Nov 2015 22:57:25 +0100 Subject: [PATCH 20/45] 0.17.1 --- changelog.md | 4 ++++ package.json | 2 +- src/mathfunctions.cpp | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index b904a61..1f3b8ff 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # 0.17.0 (2015-11-25) +- missing mod export added + +# 0.17.0 (2015-11-25) + - select wrapper implemented # 0.16.2 (2015-11-23) diff --git a/package.json b/package.json index 6e19a8f..5dde654 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.17.0", + "version": "0.17.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 451a6f4..920f557 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -109,6 +109,7 @@ NAN_MODULE_INIT(InitMathFunctions) Nan::Set(target, Nan::New("hypot").ToLocalChecked(), Nan::New(Hypot)->GetFunction()); Nan::Set(target, Nan::New("max").ToLocalChecked(), Nan::New(Max)->GetFunction()); Nan::Set(target, Nan::New("min").ToLocalChecked(), Nan::New(Min)->GetFunction()); + Nan::Set(target, Nan::New("mod").ToLocalChecked(), Nan::New(Mod)->GetFunction()); Nan::Set(target, Nan::New("round").ToLocalChecked(), Nan::New(Round)->GetFunction()); Nan::Set(target, Nan::New("sign").ToLocalChecked(), Nan::New(Sign)->GetFunction()); Nan::Set(target, Nan::New("trunc").ToLocalChecked(), Nan::New(Trunc)->GetFunction()); From 68a10a317d89fe0b0511e5a575ab84e43889e987 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 25 Nov 2015 23:14:49 +0100 Subject: [PATCH 21/45] mod export fixed --- changelog.md | 6 +++++- package.json | 2 +- src/helpers.h | 10 ++-------- src/mathfunctions.cpp | 8 ++++---- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/changelog.md b/changelog.md index 1f3b8ff..2c70c37 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,8 @@ -# 0.17.0 (2015-11-25) +# 0.17.2 (2015-11-25) + +- mod export fixed + +# 0.17.1 (2015-11-25) - missing mod export added diff --git a/package.json b/package.json index 5dde654..0e4bda9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.17.1", + "version": "0.17.2", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/helpers.h b/src/helpers.h index bb37cd9..06915db 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -280,10 +280,7 @@ NAN_METHOD(F)\ else if (info[1]->IsNumber())\ {\ double d = info[1]->NumberValue();\ - if (NeedsDouble(*pArray1))\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, d)));\ - else\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, (float)d)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, d)));\ return;\ }\ }\ @@ -292,10 +289,7 @@ NAN_METHOD(F)\ double d = info[0]->NumberValue();\ if (pArray2)\ {\ - if (NeedsDouble(*pArray2))\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(d, *pArray2)));\ - else\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f((float)d, *pArray2)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(d, *pArray2)));\ return;\ }\ }\ diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 920f557..7cc522c 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -44,10 +44,10 @@ ARRAYFIRE_SYNC_METHOD_ARR(Abs, abs) ARRAYFIRE_SYNC_METHOD_ARR(Arg, arg) ARRAYFIRE_SYNC_METHOD_ARR(Ceil, ceil) ARRAYFIRE_SYNC_METHOD_ARR(Floor, floor) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Hypot, hypot) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Max, max) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Min, min) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Mod, mod) +ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Hypot, hypot) +ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Max, max) +ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Min, min) +ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Mod, mod) ARRAYFIRE_SYNC_METHOD_ARR(Round, round) ARRAYFIRE_SYNC_METHOD_ARR(Sign, sign) ARRAYFIRE_SYNC_METHOD_ARR(Trunc, trunc) From 4589e0eda53850c8ab15af9c90dab045cbb1f0b7 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Thu, 26 Nov 2015 14:47:29 +0100 Subject: [PATCH 22/45] more tests --- lib/es6/index.js | 2 + src/arrayhelperfunctions.cpp | 6 +-- src/createarray.cpp | 6 +-- src/helpers.h | 30 +++++------ src/imageprocessing.cpp | 18 +++---- src/linearalgebra.cpp | 10 ++-- src/mathfunctions.cpp | 98 +++++++++++++++++----------------- src/moveandreorderarray.cpp | 10 ++-- src/signalprocessing.cpp | 4 +- src/statistics.cpp | 12 ++--- src/vectoralgorithms.cpp | 32 +++++------ tests/es6/index.js | 5 +- tests/es6/mathFunctionTests.js | 59 ++++++++++++++++++++ tests/es6/testHelpers.js | 56 +++++++++++++++++++ 14 files changed, 233 insertions(+), 115 deletions(-) create mode 100644 tests/es6/mathFunctionTests.js create mode 100644 tests/es6/testHelpers.js diff --git a/lib/es6/index.js b/lib/es6/index.js index 4a001f6..bde73df 100644 --- a/lib/es6/index.js +++ b/lib/es6/index.js @@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. let _ = require("lodash"); let ext = require("./ext"); let Bluebird = require("bluebird"); +let debug = require("debug")("af"); let entry = module.exports = function(id) { let did = _.isString(id) ? id.trim().toLowerCase() : null; @@ -66,6 +67,7 @@ entry.supportedPlatforms = function() { platforms.push(id); } catch(e) { + debug("Cannot create ArrayFire binding of platform %s, because of error:\n%s", id, e.stack); } } return platforms; diff --git a/src/arrayhelperfunctions.cpp b/src/arrayhelperfunctions.cpp index bc646a8..5c95ce3 100644 --- a/src/arrayhelperfunctions.cpp +++ b/src/arrayhelperfunctions.cpp @@ -40,9 +40,9 @@ using namespace v8; using namespace std; using namespace node; -ARRAYFIRE_SYNC_METHOD_ARR(IsZero, iszero) -ARRAYFIRE_SYNC_METHOD_ARR(IsInf, isInf) -ARRAYFIRE_SYNC_METHOD_ARR(IsNaN, isNaN) +AF_SM_ARR(IsZero, iszero) +AF_SM_ARR(IsInf, isInf) +AF_SM_ARR(IsNaN, isNaN) NAN_METHOD(Print) { diff --git a/src/createarray.cpp b/src/createarray.cpp index 1246d9d..88189da 100644 --- a/src/createarray.cpp +++ b/src/createarray.cpp @@ -231,8 +231,8 @@ NAN_METHOD(Constant) ARRAYFIRE_CATCH } -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Lower, lower, false) -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Upper, upper, false) +AF_SM_ARR_BOOL(Lower, lower, false) +AF_SM_ARR_BOOL(Upper, upper, false) NAN_METHOD(GetSeed) { @@ -270,7 +270,7 @@ NAN_METHOD(SetSeed) ARRAYFIRE_CATCH; } -ARRAYFIRE_SYNC_METHOD_ARR_ARR_DIM(Lookup, lookup) +AF_SM_ARR_ARR_DIM(Lookup, lookup) NAN_MODULE_INIT(InitCreateArray) { diff --git a/src/helpers.h b/src/helpers.h index 06915db..39ed8ef 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -92,7 +92,7 @@ RegionIndex ToRegionIndex(v8::Local value); #define ARGS_LEN(n) if (info.Length() < n) return NAN_THROW_INVALID_NO_OF_ARGS(); -#define ARRAYFIRE_SYNC_METHOD_ARR(F, f)\ +#define AF_SM_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -107,7 +107,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_DIM(F, f)\ +#define AF_SM_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ \ @@ -124,7 +124,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_BOOL(F, f, defV)\ +#define AF_SM_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -141,7 +141,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(F, f, defV)\ +#define AF_SM_VOID_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -159,7 +159,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ +#define AF_SM_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ NAN_METHOD(F)\ {\ \ @@ -180,7 +180,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR(F, f)\ +#define AF_SM_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -195,7 +195,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(F, f)\ +#define AF_SM_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -210,7 +210,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR_ARR(F, f)\ +#define AF_SM_ARR_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -225,7 +225,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_DIM(F, f)\ +#define AF_SM_ARR_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ \ @@ -242,7 +242,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(F, f, defV)\ +#define AF_SM_ARR_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -259,7 +259,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(F, f)\ +#define AF_SM_ARR_DOUBLE_COMB(F, f)\ NAN_METHOD(F)\ {\ \ @@ -299,7 +299,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V1(F, f)\ +#define AF_AM_ALGO_V1(F, f)\ NAN_METHOD(F)\ {\ \ @@ -334,7 +334,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V2(F, f)\ +#define AF_AM_ALGO_V2(F, f)\ NAN_METHOD(F)\ {\ \ @@ -424,7 +424,7 @@ NAN_METHOD(F)\ } // weighted mean like stuff: -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V3(F, f)\ +#define AF_AM_ALGO_V3(F, f)\ NAN_METHOD(F)\ {\ \ @@ -460,7 +460,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_XYZW(F, f, iy, iz, iw)\ +#define AF_SM_XYZW(F, f, iy, iz, iw)\ NAN_METHOD(F)\ {\ \ diff --git a/src/imageprocessing.cpp b/src/imageprocessing.cpp index 03f62d5..2062824 100644 --- a/src/imageprocessing.cpp +++ b/src/imageprocessing.cpp @@ -97,10 +97,10 @@ NAN_METHOD(ColorSpace) ARRAYFIRE_CATCH; } -ARRAYFIRE_SYNC_METHOD_ARR_FLOAT_FLOAT_FLOAT(Gray2RGB, gray2rgb, 1.0f, 1.0f, 1.0f) -ARRAYFIRE_SYNC_METHOD_ARR_FLOAT_FLOAT_FLOAT(RGB2Gray, rgb2gray, 0.2126f, 0.7152f, 0.0722f) -ARRAYFIRE_SYNC_METHOD_ARR(HSV2RGB, hsv2rgb) -ARRAYFIRE_SYNC_METHOD_ARR(RGB2HSV, rgb2hsv) +AF_SM_ARR_FLOAT_FLOAT_FLOAT(Gray2RGB, gray2rgb, 1.0f, 1.0f, 1.0f) +AF_SM_ARR_FLOAT_FLOAT_FLOAT(RGB2Gray, rgb2gray, 0.2126f, 0.7152f, 0.0722f) +AF_SM_ARR(HSV2RGB, hsv2rgb) +AF_SM_ARR(RGB2HSV, rgb2hsv) NAN_METHOD(Regions) { @@ -199,7 +199,7 @@ NAN_METHOD(Sobel) ARRAYFIRE_CATCH; } -ARRAYFIRE_SYNC_METHOD_ARR_ARR(HistEqual, histEqual) +AF_SM_ARR_ARR(HistEqual, histEqual) NAN_METHOD(Histogram) { @@ -364,10 +364,10 @@ NAN_METHOD(Translate) ARRAYFIRE_CATCH; } -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Dilate, dilate) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Dilate3, dilate3) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Erode, erode) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Erode3, erode3) +AF_SM_ARR_ARR(Dilate, dilate) +AF_SM_ARR_ARR(Dilate3, dilate3) +AF_SM_ARR_ARR(Erode, erode) +AF_SM_ARR_ARR(Erode3, erode3) NAN_METHOD(GaussianKernel) { diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index f8fef73..4cd1786 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -96,12 +96,12 @@ NAN_METHOD(MatMul) } -ARRAYFIRE_SYNC_METHOD_ARR_ARR(MatMulNT, matmulNT) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(MatMulTN, matmulTN) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(MatMulTT, matmulTT) +AF_SM_ARR_ARR(MatMulNT, matmulNT) +AF_SM_ARR_ARR(MatMulTN, matmulTN) +AF_SM_ARR_ARR(MatMulTT, matmulTT) -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Transpose, transpose, false) -ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) +AF_SM_ARR_BOOL(Transpose, transpose, false) +AF_SM_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) NAN_METHOD(Solve) { diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 7cc522c..412fc5f 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -40,55 +40,55 @@ using namespace v8; using namespace std; using namespace node; -ARRAYFIRE_SYNC_METHOD_ARR(Abs, abs) -ARRAYFIRE_SYNC_METHOD_ARR(Arg, arg) -ARRAYFIRE_SYNC_METHOD_ARR(Ceil, ceil) -ARRAYFIRE_SYNC_METHOD_ARR(Floor, floor) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Hypot, hypot) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Max, max) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Min, min) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Mod, mod) -ARRAYFIRE_SYNC_METHOD_ARR(Round, round) -ARRAYFIRE_SYNC_METHOD_ARR(Sign, sign) -ARRAYFIRE_SYNC_METHOD_ARR(Trunc, trunc) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Rem, rem) - -ARRAYFIRE_SYNC_METHOD_ARR(ACos, acos) -ARRAYFIRE_SYNC_METHOD_ARR(ASin, asin) -ARRAYFIRE_SYNC_METHOD_ARR(ATan, atan) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(ATan2, atan2) -ARRAYFIRE_SYNC_METHOD_ARR(Cos, cos) -ARRAYFIRE_SYNC_METHOD_ARR(Sin, sin) -ARRAYFIRE_SYNC_METHOD_ARR(Tan, tan) - -ARRAYFIRE_SYNC_METHOD_ARR(Cbrt, cbrt) -ARRAYFIRE_SYNC_METHOD_ARR(Erf, erf) -ARRAYFIRE_SYNC_METHOD_ARR(Erfc, erfc) -ARRAYFIRE_SYNC_METHOD_ARR(Exp, exp) -ARRAYFIRE_SYNC_METHOD_ARR(ExpM1, expm1) -ARRAYFIRE_SYNC_METHOD_ARR(Factorial, factorial) -ARRAYFIRE_SYNC_METHOD_ARR(LGamma, lgamma) -ARRAYFIRE_SYNC_METHOD_ARR(TGamma, tgamma) -ARRAYFIRE_SYNC_METHOD_ARR(Log, log) -ARRAYFIRE_SYNC_METHOD_ARR(Log10, log10) -ARRAYFIRE_SYNC_METHOD_ARR(Log1P, log1p) -ARRAYFIRE_SYNC_METHOD_ARR_ARR(Pow, pow) -ARRAYFIRE_SYNC_METHOD_ARR(Pow2, pow2) -ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(Root, root) -ARRAYFIRE_SYNC_METHOD_ARR(Sqrt, sqrt) -ARRAYFIRE_SYNC_METHOD_ARR(Sigmoid, sigmoid) - -ARRAYFIRE_SYNC_METHOD_ARR(ACosH, acosh) -ARRAYFIRE_SYNC_METHOD_ARR(ASinH, asinh) -ARRAYFIRE_SYNC_METHOD_ARR(ATanH, atanh) -ARRAYFIRE_SYNC_METHOD_ARR(CosH, cosh) -ARRAYFIRE_SYNC_METHOD_ARR(SinH, sinh) -ARRAYFIRE_SYNC_METHOD_ARR(TanH, tanh) - -ARRAYFIRE_SYNC_METHOD_ARR(Complex, complex) -ARRAYFIRE_SYNC_METHOD_ARR(Conjg, conjg) -ARRAYFIRE_SYNC_METHOD_ARR(Imag, imag) -ARRAYFIRE_SYNC_METHOD_ARR(Real, real) +AF_SM_ARR(Abs, abs) +AF_SM_ARR(Arg, arg) +AF_SM_ARR(Ceil, ceil) +AF_SM_ARR(Floor, floor) +AF_SM_ARR_DOUBLE_COMB(Hypot, hypot) +AF_SM_ARR_DOUBLE_COMB(Max, max) +AF_SM_ARR_DOUBLE_COMB(Min, min) +AF_SM_ARR_DOUBLE_COMB(Mod, mod) +AF_SM_ARR(Round, round) +AF_SM_ARR(Sign, sign) +AF_SM_ARR(Trunc, trunc) +AF_SM_ARR_DOUBLE_COMB(Rem, rem) + +AF_SM_ARR(ACos, acos) +AF_SM_ARR(ASin, asin) +AF_SM_ARR(ATan, atan) +AF_SM_ARR_DOUBLE_COMB(ATan2, atan2) +AF_SM_ARR(Cos, cos) +AF_SM_ARR(Sin, sin) +AF_SM_ARR(Tan, tan) + +AF_SM_ARR(Cbrt, cbrt) +AF_SM_ARR(Erf, erf) +AF_SM_ARR(Erfc, erfc) +AF_SM_ARR(Exp, exp) +AF_SM_ARR(ExpM1, expm1) +AF_SM_ARR(Factorial, factorial) +AF_SM_ARR(LGamma, lgamma) +AF_SM_ARR(TGamma, tgamma) +AF_SM_ARR(Log, log) +AF_SM_ARR(Log10, log10) +AF_SM_ARR(Log1P, log1p) +AF_SM_ARR_ARR(Pow, pow) +AF_SM_ARR(Pow2, pow2) +AF_SM_ARR_DOUBLE_COMB(Root, root) +AF_SM_ARR(Sqrt, sqrt) +AF_SM_ARR(Sigmoid, sigmoid) + +AF_SM_ARR(ACosH, acosh) +AF_SM_ARR(ASinH, asinh) +AF_SM_ARR(ATanH, atanh) +AF_SM_ARR(CosH, cosh) +AF_SM_ARR(SinH, sinh) +AF_SM_ARR(TanH, tanh) + +AF_SM_ARR(Complex, complex) +AF_SM_ARR(Conjg, conjg) +AF_SM_ARR(Imag, imag) +AF_SM_ARR(Real, real) NAN_MODULE_INIT(InitMathFunctions) { diff --git a/src/moveandreorderarray.cpp b/src/moveandreorderarray.cpp index 596eb84..17f6e53 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -55,15 +55,15 @@ NAN_METHOD(Join) ARRAYFIRE_CATCH } -ARRAYFIRE_SYNC_METHOD_XYZW(Tile, tile, 1, 1, 1) +AF_SM_XYZW(Tile, tile, 1, 1, 1) -ARRAYFIRE_SYNC_METHOD_XYZW(Reorder, reorder, 1, 2, 3) +AF_SM_XYZW(Reorder, reorder, 1, 2, 3) -ARRAYFIRE_SYNC_METHOD_XYZW(Shift, shift, 0, 0, 0) +AF_SM_XYZW(Shift, shift, 0, 0, 0) -ARRAYFIRE_SYNC_METHOD_XYZW(ModDims, moddims, 1, 1, 1) +AF_SM_XYZW(ModDims, moddims, 1, 1, 1) -ARRAYFIRE_SYNC_METHOD_ARR(Flat, flat) +AF_SM_ARR(Flat, flat) NAN_METHOD(Flip) { diff --git a/src/signalprocessing.cpp b/src/signalprocessing.cpp index aa1110f..ce5545e 100644 --- a/src/signalprocessing.cpp +++ b/src/signalprocessing.cpp @@ -275,8 +275,8 @@ ARRAYFIRE_FFT3NORM(IFFT3Norm, ifft3Norm) #undef ARRAYFIRE_FFT3NORM -ARRAYFIRE_SYNC_METHOD_ARR_ARR(FIR, fir) -ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(IIR, iir) +AF_SM_ARR_ARR(FIR, fir) +AF_SM_ARR_ARR_ARR(IIR, iir) NAN_METHOD(Approx1) { diff --git a/src/statistics.cpp b/src/statistics.cpp index 58b6189..120d129 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -41,11 +41,11 @@ using namespace v8; using namespace std; using namespace node; -ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(Cov, cov, false) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(Mean, mean) -ARRAYFIRE_ASYNC_METHOD_ALGO_V3(WeightedMean, mean) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(Median, median) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(StDev, stdev) +AF_SM_ARR_ARR_BOOL(Cov, cov, false) +AF_AM_ALGO_V1(Mean, mean) +AF_AM_ALGO_V3(WeightedMean, mean) +AF_AM_ALGO_V1(Median, median) +AF_AM_ALGO_V1(StDev, stdev) NAN_METHOD(Var) { @@ -82,7 +82,7 @@ NAN_METHOD(Var) ARRAYFIRE_CATCH } -ARRAYFIRE_ASYNC_METHOD_ALGO_V3(WeightedVar, var) +AF_AM_ALGO_V3(WeightedVar, var) NAN_METHOD(CorrCoef) { diff --git a/src/vectoralgorithms.cpp b/src/vectoralgorithms.cpp index ae67bbc..96c5182 100644 --- a/src/vectoralgorithms.cpp +++ b/src/vectoralgorithms.cpp @@ -41,15 +41,15 @@ using namespace v8; using namespace std; using namespace node; -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(AllTrue, allTrue) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(AnyTrue, anyTrue) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(Count, count) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(FindMax, max) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(FindMin, min) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(Product, product) -ARRAYFIRE_ASYNC_METHOD_ALGO_V1(Sum, sum) -ARRAYFIRE_ASYNC_METHOD_ALGO_V2(FindMinAt, min) -ARRAYFIRE_ASYNC_METHOD_ALGO_V2(FindMaxAt, max) +AF_AM_ALGO_V1(AllTrue, allTrue) +AF_AM_ALGO_V1(AnyTrue, anyTrue) +AF_AM_ALGO_V1(Count, count) +AF_AM_ALGO_V1(FindMax, max) +AF_AM_ALGO_V1(FindMin, min) +AF_AM_ALGO_V1(Product, product) +AF_AM_ALGO_V1(Sum, sum) +AF_AM_ALGO_V2(FindMinAt, min) +AF_AM_ALGO_V2(FindMaxAt, max) NAN_METHOD(Sort) { @@ -136,14 +136,14 @@ NAN_METHOD(SortIndex) ARRAYFIRE_CATCH } -ARRAYFIRE_SYNC_METHOD_ARR_DIM(Accum, accum) -ARRAYFIRE_SYNC_METHOD_ARR(Where, where) +AF_SM_ARR_DIM(Accum, accum) +AF_SM_ARR(Where, where) -ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(SetIntersect, setIntersect, false) -ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(SetUnion, setUnion, false) -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(SetUnique, setUnique, false) -ARRAYFIRE_SYNC_METHOD_ARR_DIM(Diff1, diff1) -ARRAYFIRE_SYNC_METHOD_ARR_DIM(Diff2, diff2) +AF_SM_ARR_ARR_BOOL(SetIntersect, setIntersect, false) +AF_SM_ARR_ARR_BOOL(SetUnion, setUnion, false) +AF_SM_ARR_BOOL(SetUnique, setUnique, false) +AF_SM_ARR_DIM(Diff1, diff1) +AF_SM_ARR_DIM(Diff2, diff2) NAN_METHOD(Grad) { diff --git a/tests/es6/index.js b/tests/es6/index.js index 12a321f..bd49681 100644 --- a/tests/es6/index.js +++ b/tests/es6/index.js @@ -30,6 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ require("./deviceTests"); +require("./afArrayTests"); require("./createArrayFunctionTests"); -require("./moveAndReorderArrayTests"); -require("./afArrayTests"); \ No newline at end of file +require("./mathFunctionTests"); +require("./moveAndReorderArrayTests"); \ No newline at end of file diff --git a/tests/es6/mathFunctionTests.js b/tests/es6/mathFunctionTests.js new file mode 100644 index 0000000..ebf80af --- /dev/null +++ b/tests/es6/mathFunctionTests.js @@ -0,0 +1,59 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +"use strict"; +/* global describe,it */ +let assert = require("better-assert"); +let _ = require("lodash"); +let ref = require("ref"); +let Bluebird = require("bluebird"); +let async = Bluebird.coroutine; +let int = ref.types.int; +let float = ref.types.float; +let testExec = require("./testExec"); +let testHelpers = require("./testHelpers"); + +describe("Math functions", function () { + testExec.run(function(af) { + it("should invoke hypot", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.hypot); + }); + it("should invoke max", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.max); + }); + it("should invoke min", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.min); + }); + it("should invoke mod", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.mod); + }); + }); +}); \ No newline at end of file diff --git a/tests/es6/testHelpers.js b/tests/es6/testHelpers.js new file mode 100644 index 0000000..c9f146f --- /dev/null +++ b/tests/es6/testHelpers.js @@ -0,0 +1,56 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +"use strict"; +let _ = require("lodash"); +let assert = require("better-assert"); + +let testHelpers = { + testIntfSyncArrDoubleComb: function(af, func) { + let result; + let arr1 = new af.AFArray(10, af.dType.f32); + let arr2 = new af.AFArray(10, af.dType.f32); + result = func(arr1, arr2); + assert(result instanceof af.AFArray); + result = func(arr1, 42); + assert(result instanceof af.AFArray); + result = func(42, arr2); + assert(result instanceof af.AFArray); + try { + func(42, 42); + } + catch (e) { + _.noop(e); + } + } +}; + +module.exports = testHelpers; \ No newline at end of file From c3186ca39fe67458b45b76b505729f70c8ac0245 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Thu, 26 Nov 2015 15:16:03 +0100 Subject: [PATCH 23/45] math function fixes --- changelog.md | 4 + lib/es5/index.js | 5 +- lib/es5/index.js.map | 2 +- package.json | 2 +- src/arraywrapper.cpp | 2 +- src/mathfunctions.cpp | 7 ++ tests/es5/index.js | 3 +- tests/es5/index.js.map | 2 +- tests/es5/mathFunctionTests.js | 148 +++++++++++++++++++++++++++++ tests/es5/mathFunctionTests.js.map | 1 + tests/es5/testHelpers.js | 48 ++++++++++ tests/es5/testHelpers.js.map | 1 + tests/es6/mathFunctionTests.js | 120 +++++++++++++++++++++++ tests/es6/testHelpers.js | 28 +++++- 14 files changed, 366 insertions(+), 7 deletions(-) create mode 100644 tests/es5/mathFunctionTests.js create mode 100644 tests/es5/mathFunctionTests.js.map create mode 100644 tests/es5/testHelpers.js create mode 100644 tests/es5/testHelpers.js.map diff --git a/changelog.md b/changelog.md index 2c70c37..99ed801 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.17.3 (2015-11-26) + +- Math function fixes + # 0.17.2 (2015-11-25) - mod export fixed diff --git a/lib/es5/index.js b/lib/es5/index.js index 14970e2..2f936bf 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -2,6 +2,7 @@ var _ = require("lodash"); var ext = require("./ext"); var Bluebird = require("bluebird"); +var debug = require("debug")("af"); var entry = module.exports = function(id) { var did = _.isString(id) ? id.trim().toLowerCase() : null; did = did || "cpu"; @@ -37,7 +38,9 @@ entry.supportedPlatforms = function() { try { var fire = entry(id); platforms.push(id); - } catch (e) {} + } catch (e) { + debug("Cannot create ArrayFire binding of platform %s, because of error:\n%s", id, e.stack); + } } } } catch ($__6) { diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map index 3572d66..814c116 100644 --- a/lib/es5/index.js.map +++ b/lib/es5/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n }\n }\n return platforms;\n};"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\nlet debug = require(\"debug\")(\"af\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\n }\n }\n return platforms;\n};"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 0e4bda9..d314ecc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.17.2", + "version": "0.17.3", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 186a755..2f0f508 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -270,7 +270,7 @@ af::array* ArrayWrapper::TryGetArrayAt(const Nan::FunctionCallbackInfo("atanh").ToLocalChecked(), Nan::New(ATanH)->GetFunction()); Nan::Set(target, Nan::New("aTanH").ToLocalChecked(), Nan::New(ATanH)->GetFunction()); + Nan::Set(target, Nan::New("cosh").ToLocalChecked(), Nan::New(CosH)->GetFunction()); + Nan::Set(target, Nan::New("CosH").ToLocalChecked(), Nan::New(CosH)->GetFunction()); + Nan::Set(target, Nan::New("sinh").ToLocalChecked(), Nan::New(SinH)->GetFunction()); + Nan::Set(target, Nan::New("SinH").ToLocalChecked(), Nan::New(SinH)->GetFunction()); + Nan::Set(target, Nan::New("tanh").ToLocalChecked(), Nan::New(TanH)->GetFunction()); + Nan::Set(target, Nan::New("TanH").ToLocalChecked(), Nan::New(TanH)->GetFunction()); + Nan::Set(target, Nan::New("complex").ToLocalChecked(), Nan::New(Complex)->GetFunction()); Nan::Set(target, Nan::New("conjg").ToLocalChecked(), Nan::New(Conjg)->GetFunction()); Nan::Set(target, Nan::New("imag").ToLocalChecked(), Nan::New(Imag)->GetFunction()); diff --git a/tests/es5/index.js b/tests/es5/index.js index b88a118..e3b5759 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -1,7 +1,8 @@ "use strict"; require("./deviceTests"); +require("./afArrayTests"); require("./createArrayFunctionTests"); +require("./mathFunctionTests"); require("./moveAndReorderArrayTests"); -require("./afArrayTests"); //# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map index beed1e5..63bf0f3 100644 --- a/tests/es5/index.js.map +++ b/tests/es5/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");\nrequire(\"./afArrayTests\");"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./mathFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/mathFunctionTests.js b/tests/es5/mathFunctionTests.js new file mode 100644 index 0000000..60f5989 --- /dev/null +++ b/tests/es5/mathFunctionTests.js @@ -0,0 +1,148 @@ +"use strict"; +var assert = require("better-assert"); +var _ = require("lodash"); +var ref = require("ref"); +var Bluebird = require("bluebird"); +var async = Bluebird.coroutine; +var int = ref.types.int; +var float = ref.types.float; +var testExec = require("./testExec"); +var testHelpers = require("./testHelpers"); +describe("Math functions", function() { + testExec.run(function(af) { + it("should invoke abs", function() { + testHelpers.testIntfSyncArr(af, af.abs); + }); + it("should invoke arg", function() { + testHelpers.testIntfSyncArr(af, af.arg); + }); + it("should invoke ceil", function() { + testHelpers.testIntfSyncArr(af, af.ceil); + }); + it("should invoke floor", function() { + testHelpers.testIntfSyncArr(af, af.floor); + }); + it("should invoke hypot", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.hypot); + }); + it("should invoke max", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.max); + }); + it("should invoke min", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.min); + }); + it("should invoke mod", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.mod); + }); + it("should invoke round", function() { + testHelpers.testIntfSyncArr(af, af.round); + }); + it("should invoke sign", function() { + testHelpers.testIntfSyncArr(af, af.sign); + }); + it("should invoke trunc", function() { + testHelpers.testIntfSyncArr(af, af.trunc); + }); + it("should invoke rem", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.rem); + }); + it("should invoke acos", function() { + testHelpers.testIntfSyncArr(af, af.acos); + }); + it("should invoke asin", function() { + testHelpers.testIntfSyncArr(af, af.asin); + }); + it("should invoke atan", function() { + testHelpers.testIntfSyncArr(af, af.atan); + }); + it("should invoke atan2", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.atan2); + }); + it("should invoke cos", function() { + testHelpers.testIntfSyncArr(af, af.cos); + }); + it("should invoke sin", function() { + testHelpers.testIntfSyncArr(af, af.sin); + }); + it("should invoke tan", function() { + testHelpers.testIntfSyncArr(af, af.tan); + }); + it("should invoke cbrt", function() { + testHelpers.testIntfSyncArr(af, af.cbrt); + }); + it("should invoke erf", function() { + testHelpers.testIntfSyncArr(af, af.erf); + }); + it("should invoke erfc", function() { + testHelpers.testIntfSyncArr(af, af.erfc); + }); + it("should invoke exp", function() { + testHelpers.testIntfSyncArr(af, af.exp); + }); + it("should invoke expm1", function() { + testHelpers.testIntfSyncArr(af, af.expm1); + }); + it("should invoke factorial", function() { + testHelpers.testIntfSyncArr(af, af.factorial); + }); + it("should invoke lgamma", function() { + testHelpers.testIntfSyncArr(af, af.lgamma); + }); + it("should invoke tgamma", function() { + testHelpers.testIntfSyncArr(af, af.tgamma); + }); + it("should invoke log", function() { + testHelpers.testIntfSyncArr(af, af.log); + }); + it("should invoke log10", function() { + testHelpers.testIntfSyncArr(af, af.log10); + }); + it("should invoke log1p", function() { + testHelpers.testIntfSyncArr(af, af.log1p); + }); + it("should invoke pow", function() { + testHelpers.testIntfSyncArrArr(af, af.pow); + }); + it("should invoke pow2", function() { + testHelpers.testIntfSyncArr(af, af.pow2); + }); + it("should invoke root", function() { + testHelpers.testIntfSyncArrDoubleComb(af, af.root); + }); + it("should invoke sqrt", function() { + testHelpers.testIntfSyncArr(af, af.sqrt); + }); + it("should invoke sigmoid", function() { + testHelpers.testIntfSyncArr(af, af.sigmoid); + }); + it("should invoke acosh", function() { + testHelpers.testIntfSyncArr(af, af.acosh); + }); + it("should invoke asinh", function() { + testHelpers.testIntfSyncArr(af, af.asinh); + }); + it("should invoke atanh", function() { + testHelpers.testIntfSyncArr(af, af.atanh); + }); + it("should invoke cosh", function() { + testHelpers.testIntfSyncArr(af, af.cosh); + }); + it("should invoke sinh", function() { + testHelpers.testIntfSyncArr(af, af.sinh); + }); + it("should invoke complex", function() { + testHelpers.testIntfSyncArr(af, af.complex); + }); + it("should invoke conjg", function() { + testHelpers.testIntfSyncArr(af, af.conjg); + }); + it("should invoke imag", function() { + testHelpers.testIntfSyncArr(af, af.imag); + }); + it("should invoke real", function() { + testHelpers.testIntfSyncArr(af, af.real); + }); + }); +}); + +//# sourceMappingURL=mathFunctionTests.js.map diff --git a/tests/es5/mathFunctionTests.js.map b/tests/es5/mathFunctionTests.js.map new file mode 100644 index 0000000..5e4e1b2 --- /dev/null +++ b/tests/es5/mathFunctionTests.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["mathFunctionTests.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\nlet testHelpers = require(\"./testHelpers\");\n\ndescribe(\"Math functions\", function () {\n testExec.run(function(af) {\n it(\"should invoke abs\", function () {\n testHelpers.testIntfSyncArr(af, af.abs);\n });\n it(\"should invoke arg\", function () {\n testHelpers.testIntfSyncArr(af, af.arg);\n });\n it(\"should invoke ceil\", function () {\n testHelpers.testIntfSyncArr(af, af.ceil);\n });\n it(\"should invoke floor\", function () {\n testHelpers.testIntfSyncArr(af, af.floor);\n });\n it(\"should invoke hypot\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.hypot);\n });\n it(\"should invoke max\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.max);\n });\n it(\"should invoke min\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.min);\n });\n it(\"should invoke mod\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.mod);\n });\n it(\"should invoke round\", function () {\n testHelpers.testIntfSyncArr(af, af.round);\n });\n it(\"should invoke sign\", function () {\n testHelpers.testIntfSyncArr(af, af.sign);\n });\n it(\"should invoke trunc\", function () {\n testHelpers.testIntfSyncArr(af, af.trunc);\n });\n it(\"should invoke rem\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.rem);\n });\n it(\"should invoke acos\", function () {\n testHelpers.testIntfSyncArr(af, af.acos);\n });\n it(\"should invoke asin\", function () {\n testHelpers.testIntfSyncArr(af, af.asin);\n });\n it(\"should invoke atan\", function () {\n testHelpers.testIntfSyncArr(af, af.atan);\n });\n it(\"should invoke atan2\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.atan2);\n });\n it(\"should invoke cos\", function () {\n testHelpers.testIntfSyncArr(af, af.cos);\n });\n it(\"should invoke sin\", function () {\n testHelpers.testIntfSyncArr(af, af.sin);\n });\n it(\"should invoke tan\", function () {\n testHelpers.testIntfSyncArr(af, af.tan);\n });\n it(\"should invoke cbrt\", function () {\n testHelpers.testIntfSyncArr(af, af.cbrt);\n });\n it(\"should invoke erf\", function () {\n testHelpers.testIntfSyncArr(af, af.erf);\n });\n it(\"should invoke erfc\", function () {\n testHelpers.testIntfSyncArr(af, af.erfc);\n });\n it(\"should invoke exp\", function () {\n testHelpers.testIntfSyncArr(af, af.exp);\n });\n it(\"should invoke expm1\", function () {\n testHelpers.testIntfSyncArr(af, af.expm1);\n });\n it(\"should invoke factorial\", function () {\n testHelpers.testIntfSyncArr(af, af.factorial);\n });\n it(\"should invoke lgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.lgamma);\n });\n it(\"should invoke tgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.tgamma);\n });\n it(\"should invoke log\", function () {\n testHelpers.testIntfSyncArr(af, af.log);\n });\n it(\"should invoke log10\", function () {\n testHelpers.testIntfSyncArr(af, af.log10);\n });\n it(\"should invoke log1p\", function () {\n testHelpers.testIntfSyncArr(af, af.log1p);\n });\n it(\"should invoke pow\", function () {\n testHelpers.testIntfSyncArrArr(af, af.pow);\n });\n it(\"should invoke pow2\", function () {\n testHelpers.testIntfSyncArr(af, af.pow2);\n });\n it(\"should invoke root\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.root);\n });\n it(\"should invoke sqrt\", function () {\n testHelpers.testIntfSyncArr(af, af.sqrt);\n });\n it(\"should invoke sigmoid\", function () {\n testHelpers.testIntfSyncArr(af, af.sigmoid);\n });\n it(\"should invoke acosh\", function () {\n testHelpers.testIntfSyncArr(af, af.acosh);\n });\n it(\"should invoke asinh\", function () {\n testHelpers.testIntfSyncArr(af, af.asinh);\n });\n it(\"should invoke atanh\", function () {\n testHelpers.testIntfSyncArr(af, af.atanh);\n });\n it(\"should invoke cosh\", function () {\n testHelpers.testIntfSyncArr(af, af.cosh);\n });\n it(\"should invoke sinh\", function () {\n testHelpers.testIntfSyncArr(af, af.sinh);\n });\n it(\"should invoke complex\", function () {\n testHelpers.testIntfSyncArr(af, af.complex);\n });\n it(\"should invoke conjg\", function () {\n testHelpers.testIntfSyncArr(af, af.conjg);\n });\n it(\"should invoke imag\", function () {\n testHelpers.testIntfSyncArr(af, af.imag);\n });\n it(\"should invoke real\", function () {\n testHelpers.testIntfSyncArr(af, af.real);\n });\n });\n});"],"file":"mathFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testHelpers.js b/tests/es5/testHelpers.js new file mode 100644 index 0000000..fa21716 --- /dev/null +++ b/tests/es5/testHelpers.js @@ -0,0 +1,48 @@ +"use strict"; +var _ = require("lodash"); +var assert = require("better-assert"); +var testHelpers = { + testIntfSyncArrDoubleComb: function(af, func) { + var result; + var arr1 = new af.AFArray(10, af.dType.f32); + var arr2 = new af.AFArray(10, af.dType.f32); + result = func(arr1, arr2); + assert(result instanceof af.AFArray); + result = func(arr1, 42); + assert(result instanceof af.AFArray); + result = func(42, arr2); + assert(result instanceof af.AFArray); + try { + func(42, {}); + assert(false); + } catch (e) { + _.noop(e); + } + }, + testIntfSyncArrArr: function(af, func) { + var arr1 = new af.AFArray(10, af.dType.f32); + var arr2 = new af.AFArray(10, af.dType.f32); + var result = func(arr1, arr2); + assert(result instanceof af.AFArray); + try { + func(42, {}); + assert(false); + } catch (e) { + _.noop(e); + } + }, + testIntfSyncArr: function(af, func) { + var arr = new af.AFArray(10, af.dType.f32); + var result = func(arr); + assert(result instanceof af.AFArray); + try { + func({}); + assert(false); + } catch (e) { + _.noop(e); + } + } +}; +module.exports = testHelpers; + +//# sourceMappingURL=testHelpers.js.map diff --git a/tests/es5/testHelpers.js.map b/tests/es5/testHelpers.js.map new file mode 100644 index 0000000..9e0ce60 --- /dev/null +++ b/tests/es5/testHelpers.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["testHelpers.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nlet testHelpers = {\n testIntfSyncArrDoubleComb: function(af, func) {\n let result;\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n result = func(arr1, 42);\n assert(result instanceof af.AFArray);\n result = func(42, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArrArr: function(af, func) {\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n let result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArr: function(af, func) {\n let arr = new af.AFArray(10, af.dType.f32);\n let result = func(arr);\n assert(result instanceof af.AFArray);\n try {\n func({});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n }\n};\n\nmodule.exports = testHelpers;"],"file":"testHelpers.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/mathFunctionTests.js b/tests/es6/mathFunctionTests.js index ebf80af..11d3754 100644 --- a/tests/es6/mathFunctionTests.js +++ b/tests/es6/mathFunctionTests.js @@ -43,6 +43,18 @@ let testHelpers = require("./testHelpers"); describe("Math functions", function () { testExec.run(function(af) { + it("should invoke abs", function () { + testHelpers.testIntfSyncArr(af, af.abs); + }); + it("should invoke arg", function () { + testHelpers.testIntfSyncArr(af, af.arg); + }); + it("should invoke ceil", function () { + testHelpers.testIntfSyncArr(af, af.ceil); + }); + it("should invoke floor", function () { + testHelpers.testIntfSyncArr(af, af.floor); + }); it("should invoke hypot", function () { testHelpers.testIntfSyncArrDoubleComb(af, af.hypot); }); @@ -55,5 +67,113 @@ describe("Math functions", function () { it("should invoke mod", function () { testHelpers.testIntfSyncArrDoubleComb(af, af.mod); }); + it("should invoke round", function () { + testHelpers.testIntfSyncArr(af, af.round); + }); + it("should invoke sign", function () { + testHelpers.testIntfSyncArr(af, af.sign); + }); + it("should invoke trunc", function () { + testHelpers.testIntfSyncArr(af, af.trunc); + }); + it("should invoke rem", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.rem); + }); + it("should invoke acos", function () { + testHelpers.testIntfSyncArr(af, af.acos); + }); + it("should invoke asin", function () { + testHelpers.testIntfSyncArr(af, af.asin); + }); + it("should invoke atan", function () { + testHelpers.testIntfSyncArr(af, af.atan); + }); + it("should invoke atan2", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.atan2); + }); + it("should invoke cos", function () { + testHelpers.testIntfSyncArr(af, af.cos); + }); + it("should invoke sin", function () { + testHelpers.testIntfSyncArr(af, af.sin); + }); + it("should invoke tan", function () { + testHelpers.testIntfSyncArr(af, af.tan); + }); + it("should invoke cbrt", function () { + testHelpers.testIntfSyncArr(af, af.cbrt); + }); + it("should invoke erf", function () { + testHelpers.testIntfSyncArr(af, af.erf); + }); + it("should invoke erfc", function () { + testHelpers.testIntfSyncArr(af, af.erfc); + }); + it("should invoke exp", function () { + testHelpers.testIntfSyncArr(af, af.exp); + }); + it("should invoke expm1", function () { + testHelpers.testIntfSyncArr(af, af.expm1); + }); + it("should invoke factorial", function () { + testHelpers.testIntfSyncArr(af, af.factorial); + }); + it("should invoke lgamma", function () { + testHelpers.testIntfSyncArr(af, af.lgamma); + }); + it("should invoke tgamma", function () { + testHelpers.testIntfSyncArr(af, af.tgamma); + }); + it("should invoke log", function () { + testHelpers.testIntfSyncArr(af, af.log); + }); + it("should invoke log10", function () { + testHelpers.testIntfSyncArr(af, af.log10); + }); + it("should invoke log1p", function () { + testHelpers.testIntfSyncArr(af, af.log1p); + }); + it("should invoke pow", function () { + testHelpers.testIntfSyncArrArr(af, af.pow); + }); + it("should invoke pow2", function () { + testHelpers.testIntfSyncArr(af, af.pow2); + }); + it("should invoke root", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.root); + }); + it("should invoke sqrt", function () { + testHelpers.testIntfSyncArr(af, af.sqrt); + }); + it("should invoke sigmoid", function () { + testHelpers.testIntfSyncArr(af, af.sigmoid); + }); + it("should invoke acosh", function () { + testHelpers.testIntfSyncArr(af, af.acosh); + }); + it("should invoke asinh", function () { + testHelpers.testIntfSyncArr(af, af.asinh); + }); + it("should invoke atanh", function () { + testHelpers.testIntfSyncArr(af, af.atanh); + }); + it("should invoke cosh", function () { + testHelpers.testIntfSyncArr(af, af.cosh); + }); + it("should invoke sinh", function () { + testHelpers.testIntfSyncArr(af, af.sinh); + }); + it("should invoke complex", function () { + testHelpers.testIntfSyncArr(af, af.complex); + }); + it("should invoke conjg", function () { + testHelpers.testIntfSyncArr(af, af.conjg); + }); + it("should invoke imag", function () { + testHelpers.testIntfSyncArr(af, af.imag); + }); + it("should invoke real", function () { + testHelpers.testIntfSyncArr(af, af.real); + }); }); }); \ No newline at end of file diff --git a/tests/es6/testHelpers.js b/tests/es6/testHelpers.js index c9f146f..f101c2a 100644 --- a/tests/es6/testHelpers.js +++ b/tests/es6/testHelpers.js @@ -45,7 +45,33 @@ let testHelpers = { result = func(42, arr2); assert(result instanceof af.AFArray); try { - func(42, 42); + func(42, {}); + assert(false); + } + catch (e) { + _.noop(e); + } + }, + testIntfSyncArrArr: function(af, func) { + let arr1 = new af.AFArray(10, af.dType.f32); + let arr2 = new af.AFArray(10, af.dType.f32); + let result = func(arr1, arr2); + assert(result instanceof af.AFArray); + try { + func(42, {}); + assert(false); + } + catch (e) { + _.noop(e); + } + }, + testIntfSyncArr: function(af, func) { + let arr = new af.AFArray(10, af.dType.f32); + let result = func(arr); + assert(result instanceof af.AFArray); + try { + func({}); + assert(false); } catch (e) { _.noop(e); From dba6ae86dd0d15a15f8639cb09d132e31b70a677 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sun, 6 Dec 2015 22:33:43 +0100 Subject: [PATCH 24/45] 0.17.4 --- .vscode/launch.json | 33 +++++++++++++++++++++++++++++++++ changelog.md | 4 ++++ jsconfig.json | 6 ++++++ package.json | 2 +- src/arraywrapper.cpp | 16 ++++++++++++---- tests/es6/afArrayTests.js | 18 ++++++++++++++++++ 6 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 jsconfig.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..164c901 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch", + "type": "node", + "request": "launch", + "program": "./node_modules/mocha/bin/_mocha", + "stopOnEntry": false, + "args": [ + "tests", + "--timeout=10000" + ], + "cwd": ".", + "runtimeExecutable": null, + "runtimeArgs": [ + "--nolazy" + ], + "env": { + "NODE_ENV": "development" + }, + "externalConsole": false, + "sourceMaps": false, + "outDir": null + }, + { + "name": "Attach", + "type": "node", + "request": "attach", + "port": 5858 + } + ] +} \ No newline at end of file diff --git a/changelog.md b/changelog.md index 99ed801..346fe9b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.17.4 (2015-12-06) + +- Missing AFArray constructor added + # 0.17.3 (2015-11-26) - Math function fixes diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..56705ea --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/package.json b/package.json index d314ecc..910057a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.17.3", + "version": "0.17.4", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 2f0f508..76cca36 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -1,3 +1,4 @@ + /* Copyright (c) 2014-2015, ArrayFire Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) @@ -277,8 +278,6 @@ af::array* ArrayWrapper::TryGetArrayAt(const Nan::FunctionCallbackInfo& info) { - - try { ArrayWrapper* instance = nullptr; @@ -299,8 +298,17 @@ void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) else { Guard guard; - auto dimAndType = ParseDimAndTypeArgs(info); - instance = new ArrayWrapper(new af::array(dimAndType.first, dimAndType.second)); + auto arr = TryGetArrayAt(info, 0); + if (arr) + { + auto dims = ToDim4(info[1]); + instance = new ArrayWrapper(new af::array(*arr, dims)); + } + else + { + auto dimAndType = ParseDimAndTypeArgs(info); + instance = new ArrayWrapper(new af::array(dimAndType.first, dimAndType.second)); + } } } catch (...) diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index d4657bb..ff84c48 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -37,6 +37,7 @@ let ref = require("ref"); let Bluebird = require("bluebird"); let async = Bluebird.coroutine; let testExec = require("./testExec"); +let float = ref.types.float; describe("AFArray class and methods", function() { testExec.run(function(af) { @@ -330,5 +331,22 @@ describe("AFArray class and methods", function() { v = array2.at(af.end - 1).scalarSync(); assert(v === 8.0 * 8.0); }); + + it("should be created of a part of another with new dimensions", function (done) { + async(function* () { + let arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + let sub = arr.at(new af.Seq(3, 6)); + let sub2 = new af.AFArray(sub, new af.Dim4(2, 2)); + + let buff = yield sub2.hostAsync(); + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + })().nodeify(done); + }); }); }); \ No newline at end of file From 4f9cad063f21518d79a9cc1800361a62730af72e Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 7 Dec 2015 17:03:57 +0100 Subject: [PATCH 25/45] RAII pattern implemented --- lib/es6/ext.js | 5 ++- lib/es6/tmp.js | 68 ++++++++++++++++++++++++++++++++ src/arraywrapper.cpp | 37 +++++++++++++++--- src/arraywrapper.h | 4 ++ tests/es6/afArrayTests.js | 81 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 189 insertions(+), 6 deletions(-) create mode 100644 lib/es6/tmp.js diff --git a/lib/es6/ext.js b/lib/es6/ext.js index ac9775f..5df63d6 100644 --- a/lib/es6/ext.js +++ b/lib/es6/ext.js @@ -154,6 +154,8 @@ function ext(af) { installAsyncAndSync(af, af.AFArray); installAsyncAndSync(af, af.AFArray.prototype); + let tmp = af.AFArray.tmp = require("./tmp"); + _.extend(af, { end: -1, span: null, @@ -195,7 +197,8 @@ function ext(af) { this.setDevice(current); } }, - gfor: require("./makeGfor")(af) + gfor: require("./makeGfor")(af), + tmp: tmp }); } diff --git a/lib/es6/tmp.js b/lib/es6/tmp.js new file mode 100644 index 0000000..5114a37 --- /dev/null +++ b/lib/es6/tmp.js @@ -0,0 +1,68 @@ +"use strict"; +let Bluebird = require("bluebird"); +let _ = require("lodash"); + +let temporaries = []; + +function tmp(f) { + if (_.isFunction(f)) { + tmp.begin(); + try { + let result = f.call(tmp); + if (_.isObject(result) && _.isFunction(result.then)) { + return Bluebird.resolve(result) + .then(function() { + return tmp; + }) + .finally(function() { + tmp.end(); + }); + } + else { + tmp.end(); + return tmp; + } + } + catch(e) { + tmp.end(); + throw e; + } + } +} + +tmp.begin = function() { + temporaries.push(new Set()); + return tmp; +}; + +tmp.end = function() { + if (temporaries.length) { + let set = temporaries[temporaries.length - 1]; + temporaries.length--; + free(set); + } + return tmp; +}; + +tmp.register = function(array) { + if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { + let set = temporaries[temporaries.length - 1]; + set.add(array); + } +}; + +tmp.result = function(array) { + if (temporaries.length && _.isObject(array)) { + let set = temporaries[temporaries.length - 1]; + set.delete(array); + } + return tmp; +}; + +function free(arrays) { + for (let array of arrays.values()) { + array.free(); + } +} + +module.exports = tmp; \ No newline at end of file diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 76cca36..f1e5bd1 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -51,7 +51,7 @@ int GetMemSize(const af::array* array) // so we won't triggrer out of memory errors. // TODO: If ArrayFire's CUDA error handling gets fixed, // TODO: then we should only report memory usage for CPU based devices. - return static_cast(sizeof(af::array)) + array->elements() + 200; + return static_cast(sizeof(af::array)) + static_cast(sizeof(ArrayWrapper)) + static_cast(array->bytes()); } ArrayWrapper::ArrayWrapper(af::array* array) : @@ -63,8 +63,17 @@ ArrayWrapper::ArrayWrapper(af::array* array) : ArrayWrapper::~ArrayWrapper() { - Nan::AdjustExternalMemory(-GetMemSize(_array)); - delete _array; + Free(); +} + +void ArrayWrapper::Free() +{ + if (_array) + { + Nan::AdjustExternalMemory(-GetMemSize(_array)); + delete _array; + _array = nullptr; + } } NAN_MODULE_INIT(ArrayWrapper::Init) @@ -76,6 +85,7 @@ NAN_MODULE_INIT(ArrayWrapper::Init) int noOfMethods = 21; tmpl->InstanceTemplate()->SetInternalFieldCount(noOfMethods); + Nan::SetPrototypeTemplate(tmpl, Nan::New("free").ToLocalChecked(), Nan::New(V8Free), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("elements").ToLocalChecked(), Nan::New(Elements), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("host").ToLocalChecked(), Nan::New(Host), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("copyToHost").ToLocalChecked(), Nan::New(Host), v8::None); @@ -215,7 +225,7 @@ af::array* ArrayWrapper::GetArray(v8::Local value) { auto array = TryGetArray(value); if (array) return array; - ARRAYFIRE_THROW("Argument is not an AFArray instance."); + ARRAYFIRE_THROW("Argument is not an AFArray instance or wrapped array has been destroyed by calling its free() method."); } af::array* ArrayWrapper::TryGetArray(v8::Local value) @@ -242,7 +252,7 @@ af::array* ArrayWrapper::GetArray(v8::Local value) { auto array = TryGetArray(value); if (array) return array; - ARRAYFIRE_THROW("Argument is not an AFArray instance."); + ARRAYFIRE_THROW("Argument is not an AFArray instance or wrapped array has been destroyed by calling its free() method."); } af::array* ArrayWrapper::TryGetArray(v8::Local value) @@ -323,6 +333,7 @@ void ArrayWrapper::New(const Nan::FunctionCallbackInfo& info) } instance->Wrap(info.Holder()); + RegisterInTmp(info.Holder()); info.GetReturnValue().Set(info.Holder()); } ARRAYFIRE_CATCH @@ -335,6 +346,13 @@ af::array* ArrayWrapper::CreateArray(void* ptr, af_source src, const af::dim4& d return new af::array(dim4, (T*)ptr, src); } +NAN_METHOD(ArrayWrapper::V8Free) +{ + auto self = ObjectWrap::Unwrap(info.This()); + self->Free(); + info.GetReturnValue().SetUndefined(); +} + NAN_METHOD(ArrayWrapper::Create) { try @@ -422,6 +440,15 @@ NAN_METHOD(ArrayWrapper::Create) ARRAYFIRE_CATCH } +void ArrayWrapper::RegisterInTmp(v8::Local instance) +{ + Local args[] = { instance }; + auto tmp = Nan::New(constructor)->Get(Nan::New("tmp").ToLocalChecked()).As(); + auto reg = tmp->Get(Nan::New("register").ToLocalChecked()); + auto regF = reg.As().As(); + regF->Call(tmp, 1, args); +} + NAN_METHOD(ArrayWrapper::Elements) { try diff --git a/src/arraywrapper.h b/src/arraywrapper.h index 955af23..ea00eeb 100644 --- a/src/arraywrapper.h +++ b/src/arraywrapper.h @@ -39,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct ArrayWrapper : public node::ObjectWrap { ArrayWrapper(const ArrayWrapper&) = delete; + void Free(); ~ArrayWrapper(); static NAN_MODULE_INIT(Init); @@ -55,6 +56,9 @@ struct ArrayWrapper : public node::ObjectWrap static af::array* GetArrayAt(const Nan::FunctionCallbackInfo& info, int index); static af::array* TryGetArrayAt(const Nan::FunctionCallbackInfo& info, int index); + static void RegisterInTmp(v8::Local instance); + + static NAN_METHOD(V8Free); static NAN_METHOD(Create); static NAN_METHOD(Elements); static NAN_METHOD(Host); diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index ff84c48..57f0faa 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -346,7 +346,88 @@ describe("AFArray class and methods", function() { assert(float.get(buff, 0 * float.size) === 1); assert(float.get(buff, 1 * float.size) === 2); + + arr.set(3, 2); + arr.set(4, 3); + + buff = yield sub2.hostAsync(); + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); })().nodeify(done); }); + + describe("RAII", function() { + describe("tmp", function() { + it("should exported as a function", function () { + assert(_.isFunction(af.tmp)); + }); + + it("should support RAII interface", function () { + assert(_.isFunction(af.tmp.begin)); + assert(_.isFunction(af.tmp.end)); + assert(_.isFunction(af.tmp.result)); + }); + }); + + it("should destroy temporaries (sync)", function() { + let arr, sub; + af.tmp(function() { + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + + this.result(arr); + }); + + arr.set(3, 2); + + try { + sub.set(0, 2); + assert(false); + } + catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); + + it("should destroy temporaries (async)", function(done) { + async(function*() { + let arr, sub; + yield af.tmp(async(function* () { + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + + let buff = yield sub.hostAsync(); + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + + this.result(sub); + })); + + try { + arr.set(3, 2); + assert(false); + } + catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + + sub.set(0, 2); + })().asCallback(done); + }); + }); }); }); \ No newline at end of file From ffe9fc5495b0ef6c6c829de246b69b546d9fb991 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 7 Dec 2015 17:12:41 +0100 Subject: [PATCH 26/45] tmp is this assert --- tests/es6/afArrayTests.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 57f0faa..96c7aac 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -373,6 +373,7 @@ describe("AFArray class and methods", function() { it("should destroy temporaries (sync)", function() { let arr, sub; af.tmp(function() { + assert(this === af.tmp); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); arr.set(3, 1); @@ -400,6 +401,7 @@ describe("AFArray class and methods", function() { async(function*() { let arr, sub; yield af.tmp(async(function* () { + assert(this === af.tmp); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); arr.set(3, 1); From 31768bb5d6ba19de5b281dfc096a9f0ed5831626 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 7 Dec 2015 22:14:02 +0100 Subject: [PATCH 27/45] scope support --- changelog.md | 4 + examples/es5/common/index.js | 38 ++-- examples/es5/common/index.js.map | 2 +- examples/es5/machine-learning/ann.js | 229 +++++++++++++++-------- examples/es5/machine-learning/ann.js.map | 2 +- examples/es6/common/index.js | 9 +- examples/es6/machine-learning/ann.js | 89 +++++---- lib/es5/ext.js | 6 +- lib/es5/ext.js.map | 2 +- lib/es5/scope.js | 80 ++++++++ lib/es5/scope.js.map | 1 + lib/es6/ext.js | 6 +- lib/es6/{tmp.js => scope.js} | 32 ++-- package.json | 2 +- src/arraywrapper.cpp | 6 +- src/fire.cpp | 7 +- tests/es5/afArrayTests.js | 148 +++++++++++++++ tests/es5/afArrayTests.js.map | 2 +- tests/es6/afArrayTests.js | 18 +- 19 files changed, 518 insertions(+), 165 deletions(-) create mode 100644 lib/es5/scope.js create mode 100644 lib/es5/scope.js.map rename lib/es6/{tmp.js => scope.js} (71%) diff --git a/changelog.md b/changelog.md index 346fe9b..dfcb810 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.18.0 (2015-12-07) + +- RAII support by scope + # 0.17.4 (2015-12-06) - Missing AFArray constructor added diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index de89083..43ea3f9 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -218,6 +218,7 @@ var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10(f, name) { var platfroms, order, + onCPU, e; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) @@ -226,14 +227,15 @@ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10 platfroms = af.supportedPlatforms(); order = ["CUDA", "OpenCL", "CPU"]; console.log(("Running " + name + " on best available device.\n")); - $ctx.state = 25; + onCPU = false; + $ctx.state = 32; break; - case 25: - $ctx.pushTry(15, null); - $ctx.state = 18; + case 32: + $ctx.pushTry(24, null); + $ctx.state = 27; break; - case 18: - $ctx.state = (_(platfroms).contains(order[0])) ? 1 : 13; + case 27: + $ctx.state = (_(platfroms).contains(order[0])) ? 1 : 15; break; case 1: $ctx.state = 2; @@ -242,8 +244,8 @@ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10 $ctx.maybeThrow(); $ctx.state = 4; break; - case 13: - $ctx.state = (_(platfroms).contains(order[1])) ? 5 : 9; + case 15: + $ctx.state = (_(platfroms).contains(order[1])) ? 5 : 13; break; case 5: $ctx.state = 6; @@ -252,7 +254,11 @@ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10 $ctx.maybeThrow(); $ctx.state = 4; break; - case 9: + case 13: + onCPU = true; + $ctx.state = 14; + break; + case 14: $ctx.state = 10; return runOnDevices(order[2], f, 0); case 10: @@ -263,16 +269,26 @@ var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10 $ctx.popTry(); $ctx.state = -2; break; - case 15: + case 24: $ctx.popTry(); $ctx.maybeUncatchable(); e = $ctx.storedException; - $ctx.state = 21; + $ctx.state = 23; + break; + case 23: + $ctx.state = (onCPU) ? 21 : 17; break; case 21: console.error(e.stack); $ctx.state = -2; break; + case 17: + $ctx.state = 18; + return runOnDevices(order[2], f, 0); + case 18: + $ctx.maybeThrow(); + $ctx.state = -2; + break; default: return $ctx.end(); } diff --git a/examples/es5/common/index.js.map b/examples/es5/common/index.js.map index f362fe4..d00673f 100644 --- a/examples/es5/common/index.js.map +++ b/examples/es5/common/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["common/index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"file":"common/index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["common/index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n let onCPU = false;\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n onCPU = true;\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n if (onCPU) {\n console.error(e.stack);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"file":"common/index.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index 3a42520..eb681f8 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -25,16 +25,16 @@ proto.deriv = function(out) { proto.addBias = function(input) { return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); }; -proto._calculateError = async($traceurRuntime.initGeneratorFunction(function $__2(out, pred) { +proto._calculateError = async($traceurRuntime.initGeneratorFunction(function $__4(out, pred) { var dif, - $__3, - $__4, $__5, $__6, $__7, $__8, $__9, - $__10; + $__10, + $__11, + $__12; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { @@ -43,143 +43,220 @@ proto._calculateError = async($traceurRuntime.initGeneratorFunction(function $__ $ctx.state = 12; break; case 12: - $__3 = Math.sqrt; - $__4 = this.af; - $__5 = $__4.sumAsync; - $__6 = dif.mul; - $__7 = $__6.call(dif, dif); - $__8 = $__5.call($__4, $__7); + $__5 = Math.sqrt; + $__6 = this.af; + $__7 = $__6.sumAsync; + $__8 = dif.mul; + $__9 = $__8.call(dif, dif); + $__10 = $__7.call($__6, $__9); $ctx.state = 6; break; case 6: $ctx.state = 2; - return $__8; + return $__10; case 2: - $__9 = $ctx.sent; + $__11 = $ctx.sent; $ctx.state = 4; break; case 4: - $__10 = $__3.call(Math, $__9); + $__12 = $__5.call(Math, $__11); $ctx.state = 8; break; case 8: - $ctx.returnValue = $__10; + $ctx.returnValue = $__12; $ctx.state = -2; break; default: return $ctx.end(); } - }, $__2, this); + }, $__4, this); })); proto.forwardPropagate = function(input) { this.signal[0].set(input); + var $__0 = this, + $__1 = function(i) { + var self = $__0; + $__0.af.scope(function() { + var inVec = self.addBias(self.signal[i]); + var outVec = self.af.matMul(inVec, self.weights[i]); + self.signal[i + 1].set(self.af.sigmoid(outVec)); + }); + }; for (var i = 0; i < this.numLayers - 1; i++) { - var inVec = this.addBias(this.signal[i]); - var outVec = this.af.matMul(inVec, this.weights[i]); - this.signal[i + 1].set(this.af.sigmoid(outVec)); + $__1(i); } }; proto.backPropagate = function(target, alpha) { - var af = this.af; - var Seq = this.af.Seq; - var outVec = this.signal[this.numLayers - 1]; - var err = outVec.sub(target); - var m = target.dims(0); - for (var i = this.numLayers - 2; i >= 0; i--) { - var inVec = this.addBias(this.signal[i]); - var delta = af.transpose(this.deriv(outVec).mul(err)); - var grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); - this.weights[i].addAssign(af.transpose(grad)); - outVec = this.signal[i]; - err.set(this.af.matMulTT(delta, this.weights[i])); - err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); - } + var self = this; + var af = self.af; + var Seq = self.af.Seq; + af.scope(function() { + var outVec = self.signal[self.numLayers - 1]; + var err = outVec.sub(target); + var m = target.dims(0); + var $__2 = function(i) { + af.scope(function() { + var inVec = self.addBias(self.signal[i]); + var delta = af.transpose(self.deriv(outVec).mul(err)); + var grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); + self.weights[i].addAssign(af.transpose(grad)); + outVec = self.signal[i]; + err.set(self.af.matMulTT(delta, self.weights[i])); + err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); + }); + }; + for (var i = self.numLayers - 2; i >= 0; i--) { + $__2(i); + } + }); }; proto.predict = function(input) { this.forwardPropagate(input); return this.signal[this.numLayers - 1].copy(); }; -proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, target, options) { - var af, +proto.train = async($traceurRuntime.initGeneratorFunction(function $__13(input, target, options) { + var self, + af, Seq, numSamples, numBatches, err, i, start, + $__3, j, - startPos$__0, - endPos$__1, - x, - y, - startPos, - endPos, - outVec, - end; + end, + $__16, + $__17; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: - af = this.af; - Seq = this.af.Seq; + self = this; + af = self.af; + Seq = self.af.Seq; numSamples = input.dims(0); numBatches = numSamples / options.batchSize; err = 0; - $ctx.state = 20; + $ctx.state = 35; break; - case 20: + case 35: i = 0; - $ctx.state = 16; + $ctx.state = 31; break; - case 16: - $ctx.state = (i < options.maxEpochs) ? 10 : 14; + case 31: + $ctx.state = (i < options.maxEpochs) ? 25 : 29; break; - case 6: + case 21: i++; - $ctx.state = 16; + $ctx.state = 31; break; - case 10: + case 25: start = now(); - for (j = 0; j < numBatches - 1; j++) { - startPos$__0 = j * options.batchSize; - endPos$__1 = startPos$__0 + options.batchSize - 1; - x = input.at(new Seq(startPos$__0, endPos$__1), af.span); - y = target.at(new Seq(startPos$__0, endPos$__1), af.span); - this.forwardPropagate(x); - this.backPropagate(y, options.alpha); - } - startPos = (numBatches - 1) * options.batchSize; - endPos = numSamples - 1; - outVec = this.predict(input.at(new Seq(startPos, endPos), af.span)); - $ctx.state = 11; + $__3 = $traceurRuntime.initGeneratorFunction(function $__14(j) { + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + af.scope(function() { + var startPos = j * options.batchSize; + var endPos = startPos + options.batchSize - 1; + var x = input.at(new Seq(startPos, endPos), af.span); + var y = target.at(new Seq(startPos, endPos), af.span); + self.forwardPropagate(x); + self.backPropagate(y, options.alpha); + }); + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__14, this); + }); + $ctx.state = 26; + break; + case 26: + j = 0; + $ctx.state = 15; + break; + case 15: + $ctx.state = (j < numBatches - 1) ? 11 : 13; + break; + case 10: + j++; + $ctx.state = 15; break; case 11: - $ctx.state = 2; - return this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + $__16 = $ctx.wrapYieldStar($__3(j)[Symbol.iterator]()); + $ctx.sent = void 0; + $ctx.action = 'next'; + $ctx.state = 12; + break; + case 12: + $__17 = $__16[$ctx.action]($ctx.sentIgnoreThrow); + $ctx.state = 9; + break; + case 9: + $ctx.state = ($__17.done) ? 3 : 2; + break; + case 3: + $ctx.sent = $__17.value; + $ctx.state = 10; + break; case 2: - err = $ctx.sent; - $ctx.state = 4; + $ctx.state = 12; + return $__17.value; + case 13: + $ctx.state = 17; + return af.scope(async($traceurRuntime.initGeneratorFunction(function $__15() { + var startPos, + endPos, + outVec; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + startPos = (numBatches - 1) * options.batchSize; + endPos = numSamples - 1; + outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); + $ctx.state = 6; + break; + case 6: + $ctx.state = 2; + return self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + case 2: + err = $ctx.sent; + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__15, this); + }))); + case 17: + $ctx.maybeThrow(); + $ctx.state = 19; break; - case 4: + case 19: end = now(); console.log(("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds")); - $ctx.state = 13; + $ctx.state = 28; break; - case 13: - $ctx.state = (err < options.maxError) ? 7 : 6; + case 28: + $ctx.state = (err < options.maxError) ? 22 : 21; break; - case 7: + case 22: console.log(("Converged on Epoc: " + (i + 1))); - $ctx.state = 14; + $ctx.state = 29; break; - case 14: + case 29: $ctx.returnValue = err; $ctx.state = -2; break; default: return $ctx.end(); } - }, $__11, this); + }, $__13, this); })); module.exports = ANN; diff --git a/examples/es5/machine-learning/ann.js.map b/examples/es5/machine-learning/ann.js.map index 7c67e9a..d6686b0 100644 --- a/examples/es5/machine-learning/ann.js.map +++ b/examples/es5/machine-learning/ann.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["machine-learning/ann.js"],"sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let inVec = this.addBias(this.signal[i]);\n let outVec = this.af.matMul(inVec, this.weights[i]);\n this.signal[i + 1].set(this.af.sigmoid(outVec));\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let af = this.af;\n let Seq = this.af.Seq;\n\n // Get error for output layer\n let outVec = this.signal[this.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = this.numLayers - 2; i >= 0; i--) {\n let inVec = this.addBias(this.signal[i]);\n let delta = af.transpose(this.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n this.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = this.signal[i];\n err.set(this.af.matMulTT(delta, this.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n }\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let af = this.af;\n let Seq = this.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n this.forwardPropagate(x);\n this.backPropagate(y, options.alpha);\n }\n\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = this.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n const end = now();\n\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"file":"machine-learning/ann.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["machine-learning/ann.js"],"sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let self = this;\n this.af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let outVec = self.af.matMul(inVec, self.weights[i]);\n self.signal[i + 1].set(self.af.sigmoid(outVec));\n });\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n // Get error for output layer\n af.scope(function() {\n let outVec = self.signal[self.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = self.numLayers - 2; i >= 0; i--) {\n af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let delta = af.transpose(self.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n self.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = self.signal[i];\n err.set(self.af.matMulTT(delta, self.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n });\n }\n });\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n af.scope(function() {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n self.forwardPropagate(x);\n self.backPropagate(y, options.alpha);\n });\n }\n\n yield af.scope(async(function*() {\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n }));\n\n const end = now();\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"file":"machine-learning/ann.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es6/common/index.js b/examples/es6/common/index.js index ff49174..34e13e9 100644 --- a/examples/es6/common/index.js +++ b/examples/es6/common/index.js @@ -67,6 +67,7 @@ let runOnBestDevice = async(function*(f, name) { let platfroms = af.supportedPlatforms(); let order = ["CUDA", "OpenCL", "CPU"]; console.log(`Running ${name} on best available device.\n`); + let onCPU = false; try { if (_(platfroms).contains(order[0])) { yield runOnDevices(order[0], f, 0); @@ -75,11 +76,17 @@ let runOnBestDevice = async(function*(f, name) { yield runOnDevices(order[1], f, 0); } else { + onCPU = true; yield runOnDevices(order[2], f, 0); } } catch (e) { - console.error(e.stack); + if (onCPU) { + console.error(e.stack); + } + else { + yield runOnDevices(order[2], f, 0); + } } }); diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 8aaa269..26d3c1b 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -39,36 +39,44 @@ proto._calculateError = async(function*(out, pred) { proto.forwardPropagate = function (input) { this.signal[0].set(input); for (let i = 0; i < this.numLayers - 1; i++) { - let inVec = this.addBias(this.signal[i]); - let outVec = this.af.matMul(inVec, this.weights[i]); - this.signal[i + 1].set(this.af.sigmoid(outVec)); + let self = this; + this.af.scope(function() { + let inVec = self.addBias(self.signal[i]); + let outVec = self.af.matMul(inVec, self.weights[i]); + self.signal[i + 1].set(self.af.sigmoid(outVec)); + }); } }; proto.backPropagate = function (target, alpha) { - let af = this.af; - let Seq = this.af.Seq; + let self = this; + let af = self.af; + let Seq = self.af.Seq; // Get error for output layer - let outVec = this.signal[this.numLayers - 1]; - let err = outVec.sub(target); - let m = target.dims(0); - - for (let i = this.numLayers - 2; i >= 0; i--) { - let inVec = this.addBias(this.signal[i]); - let delta = af.transpose(this.deriv(outVec).mul(err)); - - // Adjust weights - let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); - this.weights[i].addAssign(af.transpose(grad)); - - // Input to current layer is output of previous - outVec = this.signal[i]; - err.set(this.af.matMulTT(delta, this.weights[i])); - - // Remove the error of bias and propagate backward - err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); - } + af.scope(function() { + let outVec = self.signal[self.numLayers - 1]; + let err = outVec.sub(target); + let m = target.dims(0); + + for (let i = self.numLayers - 2; i >= 0; i--) { + af.scope(function() { + let inVec = self.addBias(self.signal[i]); + let delta = af.transpose(self.deriv(outVec).mul(err)); + + // Adjust weights + let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); + self.weights[i].addAssign(af.transpose(grad)); + + // Input to current layer is output of previous + outVec = self.signal[i]; + err.set(self.af.matMulTT(delta, self.weights[i])); + + // Remove the error of bias and propagate backward + err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); + }); + } + }); }; proto.predict = function (input) { @@ -77,8 +85,9 @@ proto.predict = function (input) { }; proto.train = async(function*(input, target, options) { - let af = this.af; - let Seq = this.af.Seq; + let self = this; + let af = self.af; + let Seq = self.af.Seq; let numSamples = input.dims(0); let numBatches = numSamples / options.batchSize; @@ -88,23 +97,27 @@ proto.train = async(function*(input, target, options) { for (let i = 0; i < options.maxEpochs; i++) { const start = now(); for (let j = 0; j < numBatches - 1; j++) { - let startPos = j * options.batchSize; - let endPos = startPos + options.batchSize - 1; + af.scope(function() { + let startPos = j * options.batchSize; + let endPos = startPos + options.batchSize - 1; - let x = input.at(new Seq(startPos, endPos), af.span); - let y = target.at(new Seq(startPos, endPos), af.span); + let x = input.at(new Seq(startPos, endPos), af.span); + let y = target.at(new Seq(startPos, endPos), af.span); - this.forwardPropagate(x); - this.backPropagate(y, options.alpha); + self.forwardPropagate(x); + self.backPropagate(y, options.alpha); + }); } - // Validate with last batch - let startPos = (numBatches - 1) * options.batchSize; - let endPos = numSamples - 1; - let outVec = this.predict(input.at(new Seq(startPos, endPos), af.span)); - err = yield this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); - const end = now(); + yield af.scope(async(function*() { + // Validate with last batch + let startPos = (numBatches - 1) * options.batchSize; + let endPos = numSamples - 1; + let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); + err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + })); + const end = now(); console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); // Check if convergence criteria has been met diff --git a/lib/es5/ext.js b/lib/es5/ext.js index a7ea3a0..e043102 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -5,7 +5,7 @@ var async = Bluebird.coroutine; var retryCount = 5; var gcTime = 1000; function isOutOfMemoryError(e) { - return e.message.indexOf("998") > 0; + return e.message.indexOf("out of memory") > 0; } function invokeGC(af) { af.gc(gcTime); @@ -187,6 +187,7 @@ function ext(af) { installAsyncAndSync(af, af); installAsyncAndSync(af, af.AFArray); installAsyncAndSync(af, af.AFArray.prototype); + var scope = af.AFArray.scope = require("./scope"); _.extend(af, { end: -1, span: null, @@ -227,7 +228,8 @@ function ext(af) { this.setDevice(current); } }, - gfor: require("./makeGfor")(af) + gfor: require("./makeGfor")(af), + scope: scope }); } module.exports = ext; diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map index 8cca3f5..392ba1c 100644 --- a/lib/es5/ext.js.map +++ b/lib/es5/ext.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["ext.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"998\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n })\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af)\n });\n}\n\nmodule.exports = ext;"],"file":"ext.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["ext.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"out of memory\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n })\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n let scope = af.AFArray.scope = require(\"./scope\");\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af),\n scope: scope\n });\n}\n\nmodule.exports = ext;"],"file":"ext.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/scope.js b/lib/es5/scope.js new file mode 100644 index 0000000..bf31b76 --- /dev/null +++ b/lib/es5/scope.js @@ -0,0 +1,80 @@ +"use strict"; +var Bluebird = require("bluebird"); +var _ = require("lodash"); +var temporaries = []; +function scope(f) { + if (_.isFunction(f)) { + scope.begin(); + try { + var result = f.call(scope); + if (_.isObject(result) && _.isFunction(result.then)) { + return Bluebird.resolve(result).then(function() { + return scope; + }).finally(function() { + scope.end(); + }); + } else { + scope.end(); + return scope; + } + } catch (e) { + scope.end(); + throw e; + } + } +} +scope.begin = function() { + temporaries.push(new Set()); + return scope; +}; +scope.end = function() { + if (temporaries.length) { + var set = temporaries[temporaries.length - 1]; + temporaries.length--; + free(set); + } + return scope; +}; +scope.register = function(array) { + if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { + var set = temporaries[temporaries.length - 1]; + set.add(array); + } +}; +scope.result = function(array) { + if (temporaries.length && _.isObject(array)) { + var set = temporaries[temporaries.length - 1]; + set.delete(array); + } + return scope; +}; +function free(arrays) { + var $__3 = true; + var $__4 = false; + var $__5 = undefined; + try { + for (var $__1 = void 0, + $__0 = (arrays.values())[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { + var array = $__1.value; + { + array.free(); + } + } + } catch ($__6) { + $__4 = true; + $__5 = $__6; + } finally { + try { + if (!$__3 && $__0.return != null) { + $__0.return(); + } + } finally { + if ($__4) { + throw $__5; + } + } + } +} +module.exports = scope; + +//# sourceMappingURL=scope.js.map diff --git a/lib/es5/scope.js.map b/lib/es5/scope.js.map new file mode 100644 index 0000000..d2384d2 --- /dev/null +++ b/lib/es5/scope.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["scope.js"],"sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function() {\n return scope;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return scope;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"file":"scope.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/ext.js b/lib/es6/ext.js index 5df63d6..ae4772a 100644 --- a/lib/es6/ext.js +++ b/lib/es6/ext.js @@ -39,7 +39,7 @@ const retryCount = 5; const gcTime = 1000; function isOutOfMemoryError(e) { - return e.message.indexOf("998") > 0; + return e.message.indexOf("out of memory") > 0; } function invokeGC(af) { @@ -154,7 +154,7 @@ function ext(af) { installAsyncAndSync(af, af.AFArray); installAsyncAndSync(af, af.AFArray.prototype); - let tmp = af.AFArray.tmp = require("./tmp"); + let scope = af.AFArray.scope = require("./scope"); _.extend(af, { end: -1, @@ -198,7 +198,7 @@ function ext(af) { } }, gfor: require("./makeGfor")(af), - tmp: tmp + scope: scope }); } diff --git a/lib/es6/tmp.js b/lib/es6/scope.js similarity index 71% rename from lib/es6/tmp.js rename to lib/es6/scope.js index 5114a37..ab53d40 100644 --- a/lib/es6/tmp.js +++ b/lib/es6/scope.js @@ -4,59 +4,59 @@ let _ = require("lodash"); let temporaries = []; -function tmp(f) { +function scope(f) { if (_.isFunction(f)) { - tmp.begin(); + scope.begin(); try { - let result = f.call(tmp); + let result = f.call(scope); if (_.isObject(result) && _.isFunction(result.then)) { return Bluebird.resolve(result) .then(function() { - return tmp; + return scope; }) .finally(function() { - tmp.end(); + scope.end(); }); } else { - tmp.end(); - return tmp; + scope.end(); + return scope; } } catch(e) { - tmp.end(); + scope.end(); throw e; } } } -tmp.begin = function() { +scope.begin = function() { temporaries.push(new Set()); - return tmp; + return scope; }; -tmp.end = function() { +scope.end = function() { if (temporaries.length) { let set = temporaries[temporaries.length - 1]; temporaries.length--; free(set); } - return tmp; + return scope; }; -tmp.register = function(array) { +scope.register = function(array) { if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { let set = temporaries[temporaries.length - 1]; set.add(array); } }; -tmp.result = function(array) { +scope.result = function(array) { if (temporaries.length && _.isObject(array)) { let set = temporaries[temporaries.length - 1]; set.delete(array); } - return tmp; + return scope; }; function free(arrays) { @@ -65,4 +65,4 @@ function free(arrays) { } } -module.exports = tmp; \ No newline at end of file +module.exports = scope; \ No newline at end of file diff --git a/package.json b/package.json index 910057a..4fe2fca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.17.4", + "version": "0.18.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index f1e5bd1..177146e 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -443,10 +443,10 @@ NAN_METHOD(ArrayWrapper::Create) void ArrayWrapper::RegisterInTmp(v8::Local instance) { Local args[] = { instance }; - auto tmp = Nan::New(constructor)->Get(Nan::New("tmp").ToLocalChecked()).As(); - auto reg = tmp->Get(Nan::New("register").ToLocalChecked()); + auto scope = Nan::New(constructor)->Get(Nan::New("scope").ToLocalChecked()).As(); + auto reg = scope->Get(Nan::New("register").ToLocalChecked()); auto regF = reg.As().As(); - regF->Call(tmp, 1, args); + regF->Call(scope, 1, args); } NAN_METHOD(ArrayWrapper::Elements) diff --git a/src/fire.cpp b/src/fire.cpp index 8eaf91e..a16a53d 100644 --- a/src/fire.cpp +++ b/src/fire.cpp @@ -44,6 +44,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "imageprocessing.h" #include "linearalgebra.h" #include "signalprocessing.h" +#include "errors.h" using namespace v8; using namespace std; @@ -67,7 +68,11 @@ NAN_METHOD(GC) unsigned ms = info.Length() ? info[0]->Uint32Value() : 1000; Nan::IdleNotification(ms); - af::sync(); + try + { + af::sync(); + } + ARRAYFIRE_CATCH info.GetReturnValue().SetUndefined(); } diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 3fc4b8f..9da76f6 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -5,6 +5,7 @@ var ref = require("ref"); var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var testExec = require("./testExec"); +var float = ref.types.float; describe("AFArray class and methods", function() { testExec.run(function(af) { var AFArray = af.AFArray; @@ -360,6 +361,153 @@ describe("AFArray class and methods", function() { v = array2.at(af.end - 1).scalarSync(); assert(v === 8.0 * 8.0); }); + it("should be created of a part of another with new dimensions", function(done) { + async($traceurRuntime.initGeneratorFunction(function $__11() { + var arr, + sub, + sub2, + buff; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + sub = arr.at(new af.Seq(3, 6)); + sub2 = new af.AFArray(sub, new af.Dim4(2, 2)); + $ctx.state = 10; + break; + case 10: + $ctx.state = 2; + return sub2.hostAsync(); + case 2: + buff = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + arr.set(3, 2); + arr.set(4, 3); + $ctx.state = 12; + break; + case 12: + $ctx.state = 6; + return sub2.hostAsync(); + case 6: + buff = $ctx.sent; + $ctx.state = 8; + break; + case 8: + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__11, this); + }))().nodeify(done); + }); + describe("RAII", function() { + describe("scope", function() { + it("should exported as a function", function() { + assert(_.isFunction(af.scope)); + }); + it("should support RAII interface", function() { + assert(_.isFunction(af.scope.begin)); + assert(_.isFunction(af.scope.end)); + assert(_.isFunction(af.scope.result)); + }); + }); + it("should destroy temporaries (sync)", function() { + var arr, + sub; + af.scope(function() { + assert(this === af.scope); + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + sub = arr.at(new af.Seq(3, 6)); + this.result(arr); + }); + arr.set(3, 2); + try { + sub.set(0, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); + it("should destroy temporaries (async)", function(done) { + async($traceurRuntime.initGeneratorFunction(function $__11() { + var arr, + sub; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + $ctx.state = 2; + return af.scope(async($traceurRuntime.initGeneratorFunction(function $__12() { + var buff; + return $traceurRuntime.createGeneratorInstance(function($ctx) { + while (true) + switch ($ctx.state) { + case 0: + assert(this === af.scope); + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + sub = arr.at(new af.Seq(3, 6)); + $ctx.state = 6; + break; + case 6: + $ctx.state = 2; + return sub.hostAsync(); + case 2: + buff = $ctx.sent; + $ctx.state = 4; + break; + case 4: + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + this.result(sub); + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__12, this); + }))); + case 2: + $ctx.maybeThrow(); + $ctx.state = 4; + break; + case 4: + try { + arr.set(3, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + sub.set(0, 2); + $ctx.state = -2; + break; + default: + return $ctx.end(); + } + }, $__11, this); + }))().asCallback(done); + }); + }); }); }); diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index 2f991e6..927cdf1 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n });\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n });\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n }));\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n });\n });\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 96c7aac..57138bd 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -358,22 +358,22 @@ describe("AFArray class and methods", function() { }); describe("RAII", function() { - describe("tmp", function() { + describe("scope", function() { it("should exported as a function", function () { - assert(_.isFunction(af.tmp)); + assert(_.isFunction(af.scope)); }); it("should support RAII interface", function () { - assert(_.isFunction(af.tmp.begin)); - assert(_.isFunction(af.tmp.end)); - assert(_.isFunction(af.tmp.result)); + assert(_.isFunction(af.scope.begin)); + assert(_.isFunction(af.scope.end)); + assert(_.isFunction(af.scope.result)); }); }); it("should destroy temporaries (sync)", function() { let arr, sub; - af.tmp(function() { - assert(this === af.tmp); + af.scope(function() { + assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); arr.set(3, 1); @@ -400,8 +400,8 @@ describe("AFArray class and methods", function() { it("should destroy temporaries (async)", function(done) { async(function*() { let arr, sub; - yield af.tmp(async(function* () { - assert(this === af.tmp); + yield af.scope(async(function* () { + assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); arr.set(3, 1); From d2f8ec3d398731a5931857d1bcb931c5abd21355 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 8 Dec 2015 13:46:46 +0100 Subject: [PATCH 28/45] 0.19.0 --- CMakeLists.txt | 2 +- changelog.md | 5 + examples/es5/bechmarks/pi.js | 82 +- examples/es5/bechmarks/pi.js.map | 2 +- examples/es5/common/index.js | 564 +++++---- examples/es5/common/index.js.map | 2 +- examples/es5/machine-learning/ann.js | 432 +++---- examples/es5/machine-learning/ann.js.map | 2 +- examples/es5/machine-learning/mnist.js | 530 ++++----- examples/es5/machine-learning/mnist.js.map | 2 +- .../es5/machine-learning/neuralNetwork.js | 306 ++--- .../es5/machine-learning/neuralNetwork.js.map | 2 +- gulpfile.js | 25 +- lib/es5/borderType.js | 33 +- lib/es5/borderType.js.map | 2 +- lib/es5/cSpace.js | 45 +- lib/es5/cSpace.js.map | 2 +- lib/es5/col.js | 36 +- lib/es5/col.js.map | 2 +- lib/es5/cols.js | 36 +- lib/es5/cols.js.map | 2 +- lib/es5/complex.js | 36 +- lib/es5/complex.js.map | 2 +- lib/es5/connectivity.js | 33 +- lib/es5/connectivity.js.map | 2 +- lib/es5/convDomain.js | 45 +- lib/es5/convDomain.js.map | 2 +- lib/es5/convMode.js | 47 +- lib/es5/convMode.js.map | 2 +- lib/es5/dim4.js | 97 +- lib/es5/dim4.js.map | 2 +- lib/es5/dtype.js | 33 +- lib/es5/dtype.js.map | 2 +- lib/es5/ext.js | 457 +++---- lib/es5/ext.js.map | 2 +- lib/es5/index.js | 113 +- lib/es5/index.js.map | 2 +- lib/es5/interpType.js | 49 +- lib/es5/interpType.js.map | 2 +- lib/es5/makeGfor.js | 103 +- lib/es5/makeGfor.js.map | 2 +- lib/es5/matProp.js | 77 +- lib/es5/matProp.js.map | 2 +- lib/es5/matchType.js | 33 +- lib/es5/matchType.js.map | 2 +- lib/es5/normType.js | 69 +- lib/es5/normType.js.map | 2 +- lib/es5/row.js | 36 +- lib/es5/row.js.map | 2 +- lib/es5/rows.js | 36 +- lib/es5/rows.js.map | 2 +- lib/es5/scope.js | 131 +- lib/es5/scope.js.map | 2 +- lib/es5/seq.js | 37 +- lib/es5/seq.js.map | 2 +- lib/es5/source.js | 33 +- lib/es5/source.js.map | 2 +- lib/es6/ext.js | 2 +- lib/index.js | 18 +- package.json | 24 +- runTests.js | 60 - tests/es5/afArrayTests.js | 1060 +++++++++-------- tests/es5/afArrayTests.js.map | 2 +- tests/es5/createArrayFunctionTests.js | 284 +++-- tests/es5/createArrayFunctionTests.js.map | 2 +- tests/es5/deviceTests.js | 139 ++- tests/es5/deviceTests.js.map | 2 +- tests/es5/index.js | 33 +- tests/es5/index.js.map | 2 +- tests/es5/mathFunctionTests.js | 305 ++--- tests/es5/mathFunctionTests.js.map | 2 +- tests/es5/moveAndReorderArrayTests.js | 41 +- tests/es5/moveAndReorderArrayTests.js.map | 2 +- tests/es5/testExec.js | 97 +- tests/es5/testExec.js.map | 2 +- tests/es5/testHelpers.js | 113 +- tests/es5/testHelpers.js.map | 2 +- tests/es6/afArrayTests.js | 111 +- tests/index.js | 37 +- 79 files changed, 3368 insertions(+), 2587 deletions(-) delete mode 100644 runTests.js diff --git a/CMakeLists.txt b/CMakeLists.txt index 19cc9f4..6194f54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,7 +122,7 @@ add_library(${PROJECT_NAME}_OpenCL SHARED "${TRAN_SOURCE_FILES};src/init/init_Op set_target_properties(${PROJECT_NAME}_OpenCL PROPERTIES PREFIX "" SUFFIX ".node") -target_link_libraries(${PROJECT_NAME}_OpenCL "${CMAKE_JS_LIB};${ArrayFire_OpenCL_LIBRARIES};${PROJECT_NAME}_Common") +target_link_libraries(${PROJECT_NAME}_OpenCL "${CMAKE_JS_LIB};${ArrayFire_OpenCL_LIBRARIES};${PROJECT_NAME}_Common;${OpenCL}") # CUDA diff --git a/changelog.md b/changelog.md index dfcb810..581cf79 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +# 0.19.0 (2015-12-08) + +- scope.register exposed as public API (unit test added) +- core ES6 support changed to Node 5 feature matrix, legacy support switched to Babel + # 0.18.0 (2015-12-07) - RAII support by scope diff --git a/examples/es5/bechmarks/pi.js b/examples/es5/bechmarks/pi.js index bcef183..b9c6492 100644 --- a/examples/es5/bechmarks/pi.js +++ b/examples/es5/bechmarks/pi.js @@ -1,45 +1,73 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var common = require("../common"); + var numberOfPoints = 20000000; -var pi = async($traceurRuntime.initGeneratorFunction(function $__0(af, deviceInfo) { - var AFArray, - x, - y, - dist, - numInside, - piVal; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { + +var pi = async(regeneratorRuntime.mark(function _callee(af, deviceInfo) { + var AFArray, x, y, dist, numInside, piVal; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { case 0: AFArray = af.AFArray; + console.log("Calculating pi on device:\n"); common.printDeviceInfo(deviceInfo); console.log(""); + x = af.randu(numberOfPoints, af.dtype.f32); y = af.randu(numberOfPoints, af.dtype.f32); dist = af.sqrt(x.mul(x).add(y.mul(y))); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; + _context.next = 9; return af.sumAsync(dist.lt(1)); - case 2: - numInside = $ctx.sent; - $ctx.state = 4; - break; - case 4: - piVal = (4.0 * numInside) / numberOfPoints; - console.log(("PI = " + piVal)); - $ctx.state = -2; - break; - default: - return $ctx.end(); + + case 9: + numInside = _context.sent; + piVal = 4.0 * numInside / numberOfPoints; + + console.log("PI = " + piVal); + + case 12: + case "end": + return _context.stop(); } - }, $__0, this); + } + }, _callee, this); })); -common.runOnAllPlatforms(pi, "pi example"); +common.runOnAllPlatforms(pi, "pi example"); //# sourceMappingURL=pi.js.map diff --git a/examples/es5/bechmarks/pi.js.map b/examples/es5/bechmarks/pi.js.map index 6767100..074ce9d 100644 --- a/examples/es5/bechmarks/pi.js.map +++ b/examples/es5/bechmarks/pi.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["bechmarks/pi.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\n\nconst numberOfPoints = 20000000;\n\nlet pi = async(function*(af, deviceInfo) {\n let AFArray = af.AFArray;\n\n console.log(\"Calculating pi on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n let x = af.randu(numberOfPoints, af.dtype.f32);\n let y = af.randu(numberOfPoints, af.dtype.f32);\n let dist = af.sqrt(x.mul(x).add(y.mul(y)));\n let numInside = yield af.sumAsync(dist.lt(1));\n let piVal = (4.0 * numInside) / numberOfPoints;\n\n console.log(`PI = ${piVal}`);\n});\n\ncommon.runOnAllPlatforms(pi, \"pi example\");\n"],"file":"bechmarks/pi.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["bechmarks/pi.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;;AAElC,IAAM,cAAc,GAAG,QAAQ,CAAC;;AAEhC,IAAI,EAAE,GAAG,KAAK,yBAAC,iBAAU,EAAE,EAAE,UAAU;MAC/B,OAAO,EAMP,CAAC,EACD,CAAC,EACD,IAAI,EACJ,SAAS,EACT,KAAK;;;;;AAVL,iBAAO,GAAG,EAAE,CAAC,OAAO;;AAExB,iBAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC3C,gBAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACnC,iBAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEZ,WAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,WAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,cAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;iBACpB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;AAAzC,mBAAS;AACT,eAAK,GAAG,AAAC,GAAG,GAAI,SAAS,GAAI,cAAc;;AAE/C,iBAAO,CAAC,GAAG,WAAS,KAAK,CAAG,CAAC;;;;;;;;CAChC,EAAC,CAAC;;AAEH,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC","file":"bechmarks/pi.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\n\nconst numberOfPoints = 20000000;\n\nlet pi = async(function*(af, deviceInfo) {\n let AFArray = af.AFArray;\n\n console.log(\"Calculating pi on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n let x = af.randu(numberOfPoints, af.dtype.f32);\n let y = af.randu(numberOfPoints, af.dtype.f32);\n let dist = af.sqrt(x.mul(x).add(y.mul(y)));\n let numInside = yield af.sumAsync(dist.lt(1));\n let piVal = (4.0 * numInside) / numberOfPoints;\n\n console.log(`PI = ${piVal}`);\n});\n\ncommon.runOnAllPlatforms(pi, \"pi example\");\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index 43ea3f9..f05227f 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -1,306 +1,290 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var af = require("../../.."); var util = require("util"); var now = require("performance-now"); var _ = require("lodash"); -var runOnDevices = async($traceurRuntime.initGeneratorFunction(function $__8(platformID, f, onID) { - var afOfPlatform, - $__4, - $__5, - $__6, - $__2, - $__1, - deviceInfo, - start, - end, - $__7; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - afOfPlatform = af(platformID); - $__4 = true; - $__5 = false; - $__6 = undefined; - $ctx.state = 29; - break; - case 29: - $ctx.pushTry(15, 16); - $ctx.state = 18; - break; - case 18: - $__2 = void 0, $__1 = (afOfPlatform.getDevices())[Symbol.iterator](); - $ctx.state = 14; - break; - case 14: - $ctx.state = (!($__4 = ($__2 = $__1.next()).done)) ? 10 : 12; - break; - case 8: - $__4 = true; - $ctx.state = 14; - break; - case 10: - deviceInfo = $__2.value; - $ctx.state = 11; - break; - case 11: - $ctx.state = (_.isUndefined(onID) || onID === deviceInfo.id) ? 5 : 8; - break; - case 5: - afOfPlatform.setDevice(deviceInfo.id); - start = now(); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return f(afOfPlatform, deviceInfo); - case 2: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 4: - end = now(); - console.log(("\n-- took " + ((end - start) / 1000).toFixed(10) + " seconds\n")); - $ctx.state = 8; - break; - case 12: - $ctx.popTry(); - $ctx.state = 16; - $ctx.finallyFallThrough = -2; - break; - case 15: - $ctx.popTry(); - $ctx.maybeUncatchable(); - $__7 = $ctx.storedException; - $ctx.state = 21; - break; - case 21: - $__5 = true; - $__6 = $__7; - $ctx.state = 16; - $ctx.finallyFallThrough = -2; - break; - case 16: - $ctx.popTry(); - $ctx.state = 27; - break; - case 27: - try { - if (!$__4 && $__1.return != null) { - $__1.return(); - } - } finally { - if ($__5) { - throw $__6; + +var runOnDevices = async(regeneratorRuntime.mark(function _callee(platformID, f, onID) { + var afOfPlatform, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, deviceInfo, start, end; + + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + afOfPlatform = af(platformID); + _iteratorNormalCompletion = true; + _didIteratorError = false; + _iteratorError = undefined; + _context.prev = 4; + _iterator = afOfPlatform.getDevices()[Symbol.iterator](); + + case 6: + if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { + _context.next = 18; + break; + } + + deviceInfo = _step.value; + + if (!(_.isUndefined(onID) || onID === deviceInfo.id)) { + _context.next = 15; + break; + } + + afOfPlatform.setDevice(deviceInfo.id); + start = now(); + _context.next = 13; + return f(afOfPlatform, deviceInfo); + + case 13: + end = now(); + + console.log("\n-- took " + ((end - start) / 1000).toFixed(10) + " seconds\n"); + + case 15: + _iteratorNormalCompletion = true; + _context.next = 6; + break; + + case 18: + _context.next = 24; + break; + + case 20: + _context.prev = 20; + _context.t0 = _context["catch"](4); + _didIteratorError = true; + _iteratorError = _context.t0; + + case 24: + _context.prev = 24; + _context.prev = 25; + + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + + case 27: + _context.prev = 27; + + if (!_didIteratorError) { + _context.next = 30; + break; + } + + throw _iteratorError; + + case 30: + return _context.finish(27); + + case 31: + return _context.finish(24); + + case 32: + case "end": + return _context.stop(); } - } - $ctx.state = 25; - break; - case 25: - $ctx.state = $ctx.finallyFallThrough; - break; - default: - return $ctx.end(); - } - }, $__8, this); + } + }, _callee, this, [[4, 20, 24, 32], [25,, 27, 31]]); })); -var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__9(f, name) { - var platfroms, - $__4, - $__5, - $__6, - $__2, - $__1, - id, - $__7, - e; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - platfroms = af.supportedPlatforms(); - console.log(("Running " + name + " on all supported platfroms: " + platfroms.join(", ") + "\n")); - $ctx.state = 35; - break; - case 35: - $ctx.pushTry(25, null); - $ctx.state = 28; - break; - case 28: - $__4 = true; - $__5 = false; - $__6 = undefined; - $ctx.state = 24; - break; - case 24: - $ctx.pushTry(10, 11); - $ctx.state = 13; - break; - case 13: - $__2 = void 0, $__1 = (platfroms)[Symbol.iterator](); - $ctx.state = 9; - break; - case 9: - $ctx.state = (!($__4 = ($__2 = $__1.next()).done)) ? 5 : 7; - break; - case 4: - $__4 = true; - $ctx.state = 9; - break; - case 5: - id = $__2.value; - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return runOnDevices(id, f); - case 2: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 7: - $ctx.popTry(); - $ctx.state = 11; - $ctx.finallyFallThrough = 15; - break; - case 10: - $ctx.popTry(); - $ctx.maybeUncatchable(); - $__7 = $ctx.storedException; - $ctx.state = 16; - break; - case 16: - $__5 = true; - $__6 = $__7; - $ctx.state = 11; - $ctx.finallyFallThrough = 15; - break; - case 11: - $ctx.popTry(); - $ctx.state = 22; - break; - case 22: - try { - if (!$__4 && $__1.return != null) { - $__1.return(); - } - } finally { - if ($__5) { - throw $__6; + +var runOnAllPlatforms = async(regeneratorRuntime.mark(function _callee2(f, name) { + var platfroms, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, id; + + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + platfroms = af.supportedPlatforms(); + + console.log("Running " + name + " on all supported platfroms: " + platfroms.join(", ") + "\n"); + _context2.prev = 2; + _iteratorNormalCompletion2 = true; + _didIteratorError2 = false; + _iteratorError2 = undefined; + _context2.prev = 6; + _iterator2 = platfroms[Symbol.iterator](); + + case 8: + if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { + _context2.next = 15; + break; + } + + id = _step2.value; + _context2.next = 12; + return runOnDevices(id, f); + + case 12: + _iteratorNormalCompletion2 = true; + _context2.next = 8; + break; + + case 15: + _context2.next = 21; + break; + + case 17: + _context2.prev = 17; + _context2.t0 = _context2["catch"](6); + _didIteratorError2 = true; + _iteratorError2 = _context2.t0; + + case 21: + _context2.prev = 21; + _context2.prev = 22; + + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + + case 24: + _context2.prev = 24; + + if (!_didIteratorError2) { + _context2.next = 27; + break; + } + + throw _iteratorError2; + + case 27: + return _context2.finish(24); + + case 28: + return _context2.finish(21); + + case 29: + _context2.next = 34; + break; + + case 31: + _context2.prev = 31; + _context2.t1 = _context2["catch"](2); + + console.error(_context2.t1.stack); + + case 34: + case "end": + return _context2.stop(); } - } - $ctx.state = 20; - break; - case 15: - $ctx.popTry(); - $ctx.state = -2; - break; - case 25: - $ctx.popTry(); - $ctx.maybeUncatchable(); - e = $ctx.storedException; - $ctx.state = 31; - break; - case 31: - console.error(e.stack); - $ctx.state = -2; - break; - case 20: - $ctx.state = $ctx.finallyFallThrough; - break; - default: - return $ctx.end(); - } - }, $__9, this); + } + }, _callee2, this, [[2, 31], [6, 17, 21, 29], [22,, 24, 28]]); })); -var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__10(f, name) { - var platfroms, - order, - onCPU, - e; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - platfroms = af.supportedPlatforms(); - order = ["CUDA", "OpenCL", "CPU"]; - console.log(("Running " + name + " on best available device.\n")); - onCPU = false; - $ctx.state = 32; - break; - case 32: - $ctx.pushTry(24, null); - $ctx.state = 27; - break; - case 27: - $ctx.state = (_(platfroms).contains(order[0])) ? 1 : 15; - break; - case 1: - $ctx.state = 2; - return runOnDevices(order[0], f, 0); - case 2: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 15: - $ctx.state = (_(platfroms).contains(order[1])) ? 5 : 13; - break; - case 5: - $ctx.state = 6; - return runOnDevices(order[1], f, 0); - case 6: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 13: - onCPU = true; - $ctx.state = 14; - break; - case 14: - $ctx.state = 10; - return runOnDevices(order[2], f, 0); - case 10: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 4: - $ctx.popTry(); - $ctx.state = -2; - break; - case 24: - $ctx.popTry(); - $ctx.maybeUncatchable(); - e = $ctx.storedException; - $ctx.state = 23; - break; - case 23: - $ctx.state = (onCPU) ? 21 : 17; - break; - case 21: - console.error(e.stack); - $ctx.state = -2; - break; - case 17: - $ctx.state = 18; - return runOnDevices(order[2], f, 0); - case 18: - $ctx.maybeThrow(); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__10, this); + +var runOnBestDevice = async(regeneratorRuntime.mark(function _callee3(f, name) { + var platfroms, order, onCPU; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + platfroms = af.supportedPlatforms(); + order = ["CUDA", "OpenCL", "CPU"]; + + console.log("Running " + name + " on best available device.\n"); + onCPU = false; + _context3.prev = 4; + + if (!_(platfroms).contains(order[0])) { + _context3.next = 10; + break; + } + + _context3.next = 8; + return runOnDevices(order[0], f, 0); + + case 8: + _context3.next = 18; + break; + + case 10: + if (!_(platfroms).contains(order[1])) { + _context3.next = 15; + break; + } + + _context3.next = 13; + return runOnDevices(order[1], f, 0); + + case 13: + _context3.next = 18; + break; + + case 15: + onCPU = true; + _context3.next = 18; + return runOnDevices(order[2], f, 0); + + case 18: + _context3.next = 28; + break; + + case 20: + _context3.prev = 20; + _context3.t0 = _context3["catch"](4); + + if (!onCPU) { + _context3.next = 26; + break; + } + + console.error(_context3.t0.stack); + _context3.next = 28; + break; + + case 26: + _context3.next = 28; + return runOnDevices(order[2], f, 0); + + case 28: + case "end": + return _context3.stop(); + } + } + }, _callee3, this, [[4, 20]]); })); -var printDeviceInfo = function(deviceInfo) { - console.log(("ID: " + deviceInfo.id + "\nName: " + deviceInfo.name + "\nPlatform: " + deviceInfo.platform + "\nToolkit: " + deviceInfo.toolkit + "\nCompute: " + deviceInfo.compute)); + +var printDeviceInfo = function printDeviceInfo(deviceInfo) { + console.log("ID: " + deviceInfo.id + "\nName: " + deviceInfo.name + "\nPlatform: " + deviceInfo.platform + "\nToolkit: " + deviceInfo.toolkit + "\nCompute: " + deviceInfo.compute); }; + module.exports = { - runOnAllPlatforms: runOnAllPlatforms, - runOnBestDevice: runOnBestDevice, - printDeviceInfo: printDeviceInfo + runOnAllPlatforms: runOnAllPlatforms, + runOnBestDevice: runOnBestDevice, + printDeviceInfo: printDeviceInfo }; - //# sourceMappingURL=index.js.map diff --git a/examples/es5/common/index.js.map b/examples/es5/common/index.js.map index d00673f..d15949a 100644 --- a/examples/es5/common/index.js.map +++ b/examples/es5/common/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["common/index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n let onCPU = false;\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n onCPU = true;\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n if (onCPU) {\n console.error(e.stack);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"file":"common/index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["common/index.js"],"names":[],"mappings":"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","file":"common/index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n let onCPU = false;\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n onCPU = true;\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n if (onCPU) {\n console.error(e.stack);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index eb681f8..efcb2b5 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -1,263 +1,213 @@ "use strict"; + var _ = require("lodash"); var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var debug = require("debug")("af:ann"); var now = require("performance-now"); + function ANN(af, layers, range) { - range = range || 0.05; - this.af = af; - this.numLayers = layers.length; - this.signal = []; - this.weights = []; - for (var i = 0; i < this.numLayers; i++) { - this.signal.push(new af.AFArray()); - if (i < this.numLayers - 1) { - var w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2); - this.weights.push(w); + range = range || 0.05; + this.af = af; + this.numLayers = layers.length; + this.signal = []; + this.weights = []; + for (var i = 0; i < this.numLayers; i++) { + this.signal.push(new af.AFArray()); + if (i < this.numLayers - 1) { + var w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2); + this.weights.push(w); + } } - } } + var proto = ANN.prototype; -proto.deriv = function(out) { - return out.rhsSub(1).mul(out); + +proto.deriv = function (out) { + return out.rhsSub(1).mul(out); }; -proto.addBias = function(input) { - return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); + +proto.addBias = function (input) { + return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); }; -proto._calculateError = async($traceurRuntime.initGeneratorFunction(function $__4(out, pred) { - var dif, - $__5, - $__6, - $__7, - $__8, - $__9, - $__10, - $__11, - $__12; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - dif = out.sub(pred); - $ctx.state = 12; - break; - case 12: - $__5 = Math.sqrt; - $__6 = this.af; - $__7 = $__6.sumAsync; - $__8 = dif.mul; - $__9 = $__8.call(dif, dif); - $__10 = $__7.call($__6, $__9); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__10; - case 2: - $__11 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $__12 = $__5.call(Math, $__11); - $ctx.state = 8; - break; - case 8: - $ctx.returnValue = $__12; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__4, this); + +proto._calculateError = async(regeneratorRuntime.mark(function _callee(out, pred) { + var dif; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + dif = out.sub(pred); + _context.t0 = Math; + _context.next = 4; + return this.af.sumAsync(dif.mul(dif)); + + case 4: + _context.t1 = _context.sent; + return _context.abrupt("return", _context.t0.sqrt.call(_context.t0, _context.t1)); + + case 6: + case "end": + return _context.stop(); + } + } + }, _callee, this); })); -proto.forwardPropagate = function(input) { - this.signal[0].set(input); - var $__0 = this, - $__1 = function(i) { - var self = $__0; - $__0.af.scope(function() { - var inVec = self.addBias(self.signal[i]); - var outVec = self.af.matMul(inVec, self.weights[i]); - self.signal[i + 1].set(self.af.sigmoid(outVec)); + +proto.forwardPropagate = function (input) { + var _this = this; + + this.signal[0].set(input); + + var _loop = function _loop(i) { + var self = _this; + _this.af.scope(function () { + var inVec = self.addBias(self.signal[i]); + var outVec = self.af.matMul(inVec, self.weights[i]); + self.signal[i + 1].set(self.af.sigmoid(outVec)); }); - }; - for (var i = 0; i < this.numLayers - 1; i++) { - $__1(i); - } -}; -proto.backPropagate = function(target, alpha) { - var self = this; - var af = self.af; - var Seq = self.af.Seq; - af.scope(function() { - var outVec = self.signal[self.numLayers - 1]; - var err = outVec.sub(target); - var m = target.dims(0); - var $__2 = function(i) { - af.scope(function() { - var inVec = self.addBias(self.signal[i]); - var delta = af.transpose(self.deriv(outVec).mul(err)); - var grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); - self.weights[i].addAssign(af.transpose(grad)); - outVec = self.signal[i]; - err.set(self.af.matMulTT(delta, self.weights[i])); - err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); - }); }; - for (var i = self.numLayers - 2; i >= 0; i--) { - $__2(i); + + for (var i = 0; i < this.numLayers - 1; i++) { + _loop(i); } - }); }; -proto.predict = function(input) { - this.forwardPropagate(input); - return this.signal[this.numLayers - 1].copy(); + +proto.backPropagate = function (target, alpha) { + var self = this; + var af = self.af; + var Seq = self.af.Seq; + + // Get error for output layer + af.scope(function () { + var outVec = self.signal[self.numLayers - 1]; + var err = outVec.sub(target); + var m = target.dims(0); + + var _loop2 = function _loop2(i) { + af.scope(function () { + var inVec = self.addBias(self.signal[i]); + var delta = af.transpose(self.deriv(outVec).mul(err)); + + // Adjust weights + var grad = af.matMul(delta, inVec).mul(alpha).neg().div(m); + self.weights[i].addAssign(af.transpose(grad)); + + // Input to current layer is output of previous + outVec = self.signal[i]; + err.set(self.af.matMulTT(delta, self.weights[i])); + + // Remove the error of bias and propagate backward + err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); + }); + }; + + for (var i = self.numLayers - 2; i >= 0; i--) { + _loop2(i); + } + }); }; -proto.train = async($traceurRuntime.initGeneratorFunction(function $__13(input, target, options) { - var self, - af, - Seq, - numSamples, - numBatches, - err, - i, - start, - $__3, - j, - end, - $__16, - $__17; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - self = this; - af = self.af; - Seq = self.af.Seq; - numSamples = input.dims(0); - numBatches = numSamples / options.batchSize; - err = 0; - $ctx.state = 35; - break; - case 35: - i = 0; - $ctx.state = 31; - break; - case 31: - $ctx.state = (i < options.maxEpochs) ? 25 : 29; - break; - case 21: - i++; - $ctx.state = 31; - break; - case 25: - start = now(); - $__3 = $traceurRuntime.initGeneratorFunction(function $__14(j) { - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - af.scope(function() { - var startPos = j * options.batchSize; - var endPos = startPos + options.batchSize - 1; - var x = input.at(new Seq(startPos, endPos), af.span); - var y = target.at(new Seq(startPos, endPos), af.span); - self.forwardPropagate(x); - self.backPropagate(y, options.alpha); - }); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__14, this); - }); - $ctx.state = 26; - break; - case 26: - j = 0; - $ctx.state = 15; - break; - case 15: - $ctx.state = (j < numBatches - 1) ? 11 : 13; - break; - case 10: - j++; - $ctx.state = 15; - break; - case 11: - $__16 = $ctx.wrapYieldStar($__3(j)[Symbol.iterator]()); - $ctx.sent = void 0; - $ctx.action = 'next'; - $ctx.state = 12; - break; - case 12: - $__17 = $__16[$ctx.action]($ctx.sentIgnoreThrow); - $ctx.state = 9; - break; - case 9: - $ctx.state = ($__17.done) ? 3 : 2; - break; - case 3: - $ctx.sent = $__17.value; - $ctx.state = 10; - break; - case 2: - $ctx.state = 12; - return $__17.value; - case 13: - $ctx.state = 17; - return af.scope(async($traceurRuntime.initGeneratorFunction(function $__15() { - var startPos, - endPos, - outVec; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - startPos = (numBatches - 1) * options.batchSize; - endPos = numSamples - 1; - outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); - case 2: - err = $ctx.sent; - $ctx.state = -2; + +proto.predict = function (input) { + this.forwardPropagate(input); + return this.signal[this.numLayers - 1].copy(); +}; + +proto.train = async(regeneratorRuntime.mark(function _callee3(input, target, options) { + var self, af, Seq, numSamples, numBatches, err, i, start, _loop3, j, end; + + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + self = this; + af = self.af; + Seq = self.af.Seq; + numSamples = input.dims(0); + numBatches = numSamples / options.batchSize; + err = 0; + i = 0; + + case 7: + if (!(i < options.maxEpochs)) { + _context3.next = 21; + break; + } + + start = now(); + + _loop3 = function _loop3(j) { + af.scope(function () { + var startPos = j * options.batchSize; + var endPos = startPos + options.batchSize - 1; + + var x = input.at(new Seq(startPos, endPos), af.span); + var y = target.at(new Seq(startPos, endPos), af.span); + + self.forwardPropagate(x); + self.backPropagate(y, options.alpha); + }); + }; + + for (j = 0; j < numBatches - 1; j++) { + _loop3(j); + } + + _context3.next = 13; + return af.scope(async(regeneratorRuntime.mark(function _callee2() { + var startPos, endPos, outVec; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + // Validate with last batch + startPos = (numBatches - 1) * options.batchSize; + endPos = numSamples - 1; + outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); + _context2.next = 5; + return self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + + case 5: + err = _context2.sent; + + case 6: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + }))); + + case 13: + end = now(); + + console.log("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds"); + + // Check if convergence criteria has been met + + if (!(err < options.maxError)) { + _context3.next = 18; + break; + } + + console.log("Converged on Epoc: " + (i + 1)); + return _context3.abrupt("break", 21); + + case 18: + i++; + _context3.next = 7; break; - default: - return $ctx.end(); - } - }, $__15, this); - }))); - case 17: - $ctx.maybeThrow(); - $ctx.state = 19; - break; - case 19: - end = now(); - console.log(("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds")); - $ctx.state = 28; - break; - case 28: - $ctx.state = (err < options.maxError) ? 22 : 21; - break; - case 22: - console.log(("Converged on Epoc: " + (i + 1))); - $ctx.state = 29; - break; - case 29: - $ctx.returnValue = err; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__13, this); + + case 21: + return _context3.abrupt("return", err); + + case 22: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); })); -module.exports = ANN; +module.exports = ANN; //# sourceMappingURL=ann.js.map diff --git a/examples/es5/machine-learning/ann.js.map b/examples/es5/machine-learning/ann.js.map index d6686b0..5cac9e1 100644 --- a/examples/es5/machine-learning/ann.js.map +++ b/examples/es5/machine-learning/ann.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["machine-learning/ann.js"],"sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let self = this;\n this.af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let outVec = self.af.matMul(inVec, self.weights[i]);\n self.signal[i + 1].set(self.af.sigmoid(outVec));\n });\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n // Get error for output layer\n af.scope(function() {\n let outVec = self.signal[self.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = self.numLayers - 2; i >= 0; i--) {\n af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let delta = af.transpose(self.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n self.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = self.signal[i];\n err.set(self.af.matMulTT(delta, self.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n });\n }\n });\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n af.scope(function() {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n self.forwardPropagate(x);\n self.backPropagate(y, options.alpha);\n });\n }\n\n yield af.scope(async(function*() {\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n }));\n\n const end = now();\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"file":"machine-learning/ann.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/ann.js"],"names":[],"mappings":"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","file":"machine-learning/ann.js","sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let self = this;\n this.af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let outVec = self.af.matMul(inVec, self.weights[i]);\n self.signal[i + 1].set(self.af.sigmoid(outVec));\n });\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n // Get error for output layer\n af.scope(function() {\n let outVec = self.signal[self.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = self.numLayers - 2; i >= 0; i--) {\n af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let delta = af.transpose(self.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n self.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = self.signal[i];\n err.set(self.af.matMulTT(delta, self.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n });\n }\n });\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n af.scope(function() {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n self.forwardPropagate(x);\n self.backPropagate(y, options.alpha);\n });\n }\n\n yield af.scope(async(function*() {\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n }));\n\n const end = now();\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/mnist.js b/examples/es5/machine-learning/mnist.js index c4e7be9..26bff83 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -1,4 +1,5 @@ "use strict"; + var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var fs = Bluebird.promisifyAll(require("fs-extra")); @@ -9,307 +10,238 @@ var debug = require("debug")("af:mnist"); var _ = require("lodash"); var assert = require("better-assert"); var path = require("path"); -var readData = async($traceurRuntime.initGeneratorFunction(function $__5(f, data) { - var bytesRead, - $__6, - $__7, - $__8, - $__9, - $__10; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - $__6 = fs.readAsync; - $__7 = data.length; - $__8 = $__6.call(fs, f, data, 0, $__7, null); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__8; - case 2: - $__9 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $__10 = $__9[0]; - bytesRead = $__10; - $ctx.state = 8; - break; - case 8: - if (bytesRead !== data.length) { - throw new Error("File reading error!"); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__5, this); -})); -var readIdx = async($traceurRuntime.initGeneratorFunction(function $__11(path, type) { - var file, - d, - numDims, - elem, - dims, - i, - dim, - bdata, - data, - i$__1, - byte; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - $ctx.state = 2; - return fs.openAsync(path, "r"); - case 2: - file = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $ctx.pushTry(null, 37); - $ctx.state = 39; - break; - case 39: - d = new Buffer(4); - $ctx.state = 25; - break; - case 25: - $ctx.state = 6; - return readData(file, d); - case 6: - $ctx.maybeThrow(); - $ctx.state = 8; - break; - case 8: - if (d[2] != 8) { - throw new Error("Unsupported data type"); - } - numDims = d[3]; - elem = 1; - dims = []; - $ctx.state = 27; - break; - case 27: - i = 0; - $ctx.state = 17; - break; - case 17: - $ctx.state = (i < numDims) ? 9 : 15; - break; - case 14: - i++; - $ctx.state = 17; - break; - case 9: - $ctx.state = 10; - return readData(file, d); - case 10: - $ctx.maybeThrow(); - $ctx.state = 12; - break; - case 12: - dim = d.readUInt32BE(); - elem *= dim; - dims.push(dim); - $ctx.state = 14; - break; - case 15: - bdata = new Buffer(elem); - $ctx.state = 29; - break; - case 29: - $ctx.state = 19; - return readData(file, bdata); - case 19: - $ctx.maybeThrow(); - $ctx.state = 21; - break; - case 21: - data = new Buffer(bdata.length * type.size); - for (i$__1 = 0; i$__1 < bdata.length; i$__1++) { - byte = bdata[i$__1]; - type.set(data, i$__1 * type.size, byte); - } - $ctx.state = 31; - break; - case 31: - $ctx.returnValue = { - numDims: numDims, - dims: dims, - data: data - }; - $ctx.state = 37; - $ctx.finallyFallThrough = -2; - break; - case 37: - $ctx.popTry(); - $ctx.state = 41; - break; - case 41: - $ctx.state = 33; - return fs.closeAsync(file); - case 33: - $ctx.maybeThrow(); - $ctx.state = 35; - break; - case 35: - $ctx.state = $ctx.finallyFallThrough; - break; - default: - return $ctx.end(); - } - }, $__11, this); -})); -var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__12(af, expandLabels, frac) { - var dataRoot, - AFArray, - Dim4, - imageData, - labelData, - rIDims, - images, - r, - cond, - trainIndices, - testIndices, - trainImages, - testImages, - numClasses, - numTrain, - numTest, - trainLabels, - testLabels, - hTrainIdx, - hTestIdx, - i, - idx, - label, - i$__2, - idx$__3, - label$__4, - labels; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - frac = Math.min(frac || 1.0, 0.8); - dataRoot = "../../ml_lab/data/mnist"; - AFArray = af.AFArray; - Dim4 = af.Dim4; - $ctx.state = 35; - break; - case 35: - $ctx.state = 2; - return readIdx(path.join(dataRoot, "images-subset"), float); - case 2: - imageData = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $ctx.state = 6; - return readIdx(path.join(dataRoot, "labels-subset"), uint); - case 6: - labelData = $ctx.sent; - $ctx.state = 8; - break; - case 8: - rIDims = new Dim4(_(imageData.dims).reverse().value()); - $ctx.state = 37; - break; - case 37: - $ctx.state = 10; - return AFArray.createAsync(rIDims, af.dType.f32, imageData.data); - case 10: - images = $ctx.sent; - $ctx.state = 12; - break; - case 12: - r = af.randu(10000, af.dType.f32); - cond = r.lt(frac); - trainIndices = af.where(cond); - testIndices = af.where(cond.not()); - trainImages = af.lookup(images, trainIndices, 2).div(255); - testImages = af.lookup(images, testIndices, 2).div(255); - numClasses = 10; - numTrain = trainImages.dims(2); - numTest = testImages.dims(2); - debug(("Training sample count: " + numTrain)); - debug(("Test sample count: " + numTest)); - $ctx.state = 39; - break; - case 39: - $ctx.state = (expandLabels) ? 21 : 25; - break; - case 21: - trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32); - testLabels = af.constant(0, numClasses, numTest, af.dType.f32); - assert(trainIndices.type() === af.dType.u32); - assert(testIndices.type() === af.dType.u32); - $ctx.state = 22; - break; - case 22: - $ctx.state = 14; - return trainIndices.hostAsync(); - case 14: - hTrainIdx = $ctx.sent; - $ctx.state = 16; - break; - case 16: - $ctx.state = 18; - return testIndices.hostAsync(); - case 18: - hTestIdx = $ctx.sent; - $ctx.state = 20; - break; - case 20: - for (i = 0; i < numTrain; i++) { - idx = uint.get(hTrainIdx, i * uint.size); - label = uint.get(labelData.data, idx * uint.size); - assert(label >= 0 && label <= 9); - trainLabels.set(label, i, 1); + +var readData = async(regeneratorRuntime.mark(function _callee(f, data) { + var bytesRead; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return fs.readAsync(f, data, 0, data.length, null); + + case 2: + bytesRead = _context.sent[0]; + + if (!(bytesRead !== data.length)) { + _context.next = 5; + break; + } + + throw new Error("File reading error!"); + + case 5: + case "end": + return _context.stop(); } - for (i$__2 = 0; i$__2 < numTest; i$__2++) { - idx$__3 = uint.get(hTestIdx, i$__2 * uint.size); - label$__4 = uint.get(labelData.data, idx$__3 * uint.size); - assert(label$__4 >= 0 && label$__4 <= 9); - testLabels.set(label$__4, i$__2, 1); + } + }, _callee, this); +})); + +var readIdx = async(regeneratorRuntime.mark(function _callee2(path, type) { + var file, d, numDims, elem, dims, i, dim, bdata, data, byte; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return fs.openAsync(path, "r"); + + case 2: + file = _context2.sent; + _context2.prev = 3; + d = new Buffer(4); + _context2.next = 7; + return readData(file, d); + + case 7: + if (!(d[2] != 8)) { + _context2.next = 9; + break; + } + + throw new Error("Unsupported data type"); + + case 9: + numDims = d[3]; + + // Read the dimensions + + elem = 1; + dims = []; + i = 0; + + case 13: + if (!(i < numDims)) { + _context2.next = 22; + break; + } + + _context2.next = 16; + return readData(file, d); + + case 16: + dim = d.readUInt32BE(); + + elem *= dim; + dims.push(dim); + + case 19: + i++; + _context2.next = 13; + break; + + case 22: + + // Read the data + bdata = new Buffer(elem); + _context2.next = 25; + return readData(file, bdata); + + case 25: + data = new Buffer(bdata.length * type.size); + + for (i = 0; i < bdata.length; i++) { + byte = bdata[i]; + + type.set(data, i * type.size, byte); + } + + return _context2.abrupt("return", { + numDims: numDims, + dims: dims, + data: data + }); + + case 28: + _context2.prev = 28; + _context2.next = 31; + return fs.closeAsync(file); + + case 31: + return _context2.finish(28); + + case 32: + case "end": + return _context2.stop(); } - $ctx.state = 24; - break; - case 25: - $ctx.state = 26; - return AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data); - case 26: - labels = $ctx.sent; - $ctx.state = 28; - break; - case 28: - trainLabels = labels.at(trainIndices); - testLabels = labels.at(testIndices); - $ctx.state = 24; - break; - case 24: - $ctx.returnValue = { - numClasses: numClasses, - numTrain: numTrain, - numTest: numTest, - trainImages: trainImages, - testImages: testImages, - trainLabels: trainLabels, - testLabels: testLabels - }; - $ctx.state = -2; - break; - default: - return $ctx.end(); } - }, $__12, this); - }))}; -module.exports = mnist; + }, _callee2, this, [[3,, 28, 32]]); +})); + +var mnist = { + setup: async(regeneratorRuntime.mark(function _callee3(af, expandLabels, frac) { + var dataRoot, AFArray, Dim4, imageData, labelData, rIDims, images, r, cond, trainIndices, testIndices, trainImages, testImages, numClasses, numTrain, numTest, trainLabels, testLabels, hTrainIdx, hTestIdx, _i, idx, label, _i2, labels; + + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + frac = Math.min(frac || 1.0, 0.8); + dataRoot = "../../ml_lab/data/mnist"; + AFArray = af.AFArray; + Dim4 = af.Dim4; + _context3.next = 6; + return readIdx(path.join(dataRoot, "images-subset"), float); + + case 6: + imageData = _context3.sent; + _context3.next = 9; + return readIdx(path.join(dataRoot, "labels-subset"), uint); + + case 9: + labelData = _context3.sent; + rIDims = new Dim4(_(imageData.dims).reverse().value()); + _context3.next = 13; + return AFArray.createAsync(rIDims, af.dType.f32, imageData.data); + + case 13: + images = _context3.sent; + r = af.randu(10000, af.dType.f32); + cond = r.lt(frac); + trainIndices = af.where(cond); + testIndices = af.where(cond.not()); + trainImages = af.lookup(images, trainIndices, 2).div(255); + testImages = af.lookup(images, testIndices, 2).div(255); + numClasses = 10; + numTrain = trainImages.dims(2); + numTest = testImages.dims(2); + + debug("Training sample count: " + numTrain); + debug("Test sample count: " + numTest); + + trainLabels = undefined; + testLabels = undefined; + + if (!expandLabels) { + _context3.next = 42; + break; + } + + trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32); + testLabels = af.constant(0, numClasses, numTest, af.dType.f32); + + assert(trainIndices.type() === af.dType.u32); + assert(testIndices.type() === af.dType.u32); + _context3.next = 34; + return trainIndices.hostAsync(); + + case 34: + hTrainIdx = _context3.sent; + _context3.next = 37; + return testIndices.hostAsync(); + + case 37: + hTestIdx = _context3.sent; + + for (_i = 0; _i < numTrain; _i++) { + idx = uint.get(hTrainIdx, _i * uint.size); + label = uint.get(labelData.data, idx * uint.size); + + assert(label >= 0 && label <= 9); + trainLabels.set(label, _i, 1); + } + + for (_i2 = 0; _i2 < numTest; _i2++) { + idx = uint.get(hTestIdx, _i2 * uint.size); + label = uint.get(labelData.data, idx * uint.size); + + assert(label >= 0 && label <= 9); + testLabels.set(label, _i2, 1); + } + _context3.next = 47; + break; + + case 42: + _context3.next = 44; + return AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data); + + case 44: + labels = _context3.sent; + + trainLabels = labels.at(trainIndices); + testLabels = labels.at(testIndices); + + case 47: + return _context3.abrupt("return", { + numClasses: numClasses, + numTrain: numTrain, + numTest: numTest, + trainImages: trainImages, + testImages: testImages, + trainLabels: trainLabels, + testLabels: testLabels + }); + + case 48: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })) +}; + +module.exports = mnist; //# sourceMappingURL=mnist.js.map diff --git a/examples/es5/machine-learning/mnist.js.map b/examples/es5/machine-learning/mnist.js.map index 760da95..82b6e6c 100644 --- a/examples/es5/machine-learning/mnist.js.map +++ b/examples/es5/machine-learning/mnist.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["machine-learning/mnist.js"],"sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet fs = Bluebird.promisifyAll(require(\"fs-extra\"));\nlet ref = require(\"ref\");\nlet float = ref.types.float;\nlet uint = ref.types.uint;\nlet debug = require(\"debug\")(\"af:mnist\");\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet path = require(\"path\");\n\nlet readData = async(function*(f, data) {\n let bytesRead = (yield fs.readAsync(f, data, 0, data.length, null))[0];\n if (bytesRead !== data.length) {\n throw new Error(\"File reading error!\");\n }\n});\n\nlet readIdx = async(function*(path, type) {\n let file = yield fs.openAsync(path, \"r\");\n try {\n let d = new Buffer(4);\n\n yield readData(file, d);\n\n if (d[2] != 8) {\n throw new Error(\"Unsupported data type\");\n }\n\n const numDims = d[3];\n\n // Read the dimensions\n let elem = 1;\n let dims = [];\n for (let i = 0; i < numDims; i++) {\n yield readData(file, d);\n let dim = d.readUInt32BE();\n elem *= dim;\n dims.push(dim);\n }\n\n // Read the data\n let bdata = new Buffer(elem);\n yield readData(file, bdata);\n let data = new Buffer(bdata.length * type.size);\n for (let i = 0; i < bdata.length; i++) {\n let byte = bdata[i];\n type.set(data, i * type.size, byte);\n }\n\n return {\n numDims: numDims,\n dims: dims,\n data: data\n };\n }\n finally {\n yield fs.closeAsync(file);\n }\n});\n\nlet mnist = {\n setup: async(function*(af, expandLabels, frac) {\n frac = Math.min(frac || 1.0, 0.8);\n let dataRoot = \"../../ml_lab/data/mnist\";\n let AFArray = af.AFArray;\n let Dim4 = af.Dim4;\n\n let imageData = yield readIdx(path.join(dataRoot, \"images-subset\"), float);\n let labelData = yield readIdx(path.join(dataRoot, \"labels-subset\"), uint);\n\n let rIDims = new Dim4(_(imageData.dims).reverse().value());\n let images = yield AFArray.createAsync(rIDims, af.dType.f32, imageData.data);\n\n let r = af.randu(10000, af.dType.f32);\n let cond = r.lt(frac);\n let trainIndices = af.where(cond);\n let testIndices = af.where(cond.not());\n\n let trainImages = af.lookup(images, trainIndices, 2).div(255);\n let testImages = af.lookup(images, testIndices, 2).div(255);\n\n let numClasses = 10;\n let numTrain = trainImages.dims(2);\n let numTest = testImages.dims(2);\n\n debug(`Training sample count: ${numTrain}`);\n debug(`Test sample count: ${numTest}`);\n\n let trainLabels;\n let testLabels;\n\n if (expandLabels) {\n trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32);\n testLabels = af.constant(0, numClasses, numTest, af.dType.f32);\n\n assert(trainIndices.type() === af.dType.u32);\n assert(testIndices.type() === af.dType.u32);\n\n let hTrainIdx = yield trainIndices.hostAsync();\n let hTestIdx = yield testIndices.hostAsync();\n\n for (let i = 0; i < numTrain; i++) {\n let idx = uint.get(hTrainIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n trainLabels.set(label, i, 1);\n }\n\n for (let i = 0; i < numTest; i++) {\n let idx = uint.get(hTestIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n testLabels.set(label, i, 1);\n }\n }\n else {\n let labels = yield AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data);\n trainLabels = labels.at(trainIndices);\n testLabels = labels.at(testIndices);\n }\n\n return {\n numClasses: numClasses,\n numTrain: numTrain,\n numTest: numTest,\n trainImages: trainImages,\n testImages: testImages,\n trainLabels: trainLabels,\n testLabels: testLabels\n };\n })\n};\n\nmodule.exports = mnist;"],"file":"machine-learning/mnist.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/mnist.js"],"names":[],"mappings":"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","file":"machine-learning/mnist.js","sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet fs = Bluebird.promisifyAll(require(\"fs-extra\"));\nlet ref = require(\"ref\");\nlet float = ref.types.float;\nlet uint = ref.types.uint;\nlet debug = require(\"debug\")(\"af:mnist\");\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet path = require(\"path\");\n\nlet readData = async(function*(f, data) {\n let bytesRead = (yield fs.readAsync(f, data, 0, data.length, null))[0];\n if (bytesRead !== data.length) {\n throw new Error(\"File reading error!\");\n }\n});\n\nlet readIdx = async(function*(path, type) {\n let file = yield fs.openAsync(path, \"r\");\n try {\n let d = new Buffer(4);\n\n yield readData(file, d);\n\n if (d[2] != 8) {\n throw new Error(\"Unsupported data type\");\n }\n\n const numDims = d[3];\n\n // Read the dimensions\n let elem = 1;\n let dims = [];\n for (let i = 0; i < numDims; i++) {\n yield readData(file, d);\n let dim = d.readUInt32BE();\n elem *= dim;\n dims.push(dim);\n }\n\n // Read the data\n let bdata = new Buffer(elem);\n yield readData(file, bdata);\n let data = new Buffer(bdata.length * type.size);\n for (let i = 0; i < bdata.length; i++) {\n let byte = bdata[i];\n type.set(data, i * type.size, byte);\n }\n\n return {\n numDims: numDims,\n dims: dims,\n data: data\n };\n }\n finally {\n yield fs.closeAsync(file);\n }\n});\n\nlet mnist = {\n setup: async(function*(af, expandLabels, frac) {\n frac = Math.min(frac || 1.0, 0.8);\n let dataRoot = \"../../ml_lab/data/mnist\";\n let AFArray = af.AFArray;\n let Dim4 = af.Dim4;\n\n let imageData = yield readIdx(path.join(dataRoot, \"images-subset\"), float);\n let labelData = yield readIdx(path.join(dataRoot, \"labels-subset\"), uint);\n\n let rIDims = new Dim4(_(imageData.dims).reverse().value());\n let images = yield AFArray.createAsync(rIDims, af.dType.f32, imageData.data);\n\n let r = af.randu(10000, af.dType.f32);\n let cond = r.lt(frac);\n let trainIndices = af.where(cond);\n let testIndices = af.where(cond.not());\n\n let trainImages = af.lookup(images, trainIndices, 2).div(255);\n let testImages = af.lookup(images, testIndices, 2).div(255);\n\n let numClasses = 10;\n let numTrain = trainImages.dims(2);\n let numTest = testImages.dims(2);\n\n debug(`Training sample count: ${numTrain}`);\n debug(`Test sample count: ${numTest}`);\n\n let trainLabels;\n let testLabels;\n\n if (expandLabels) {\n trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32);\n testLabels = af.constant(0, numClasses, numTest, af.dType.f32);\n\n assert(trainIndices.type() === af.dType.u32);\n assert(testIndices.type() === af.dType.u32);\n\n let hTrainIdx = yield trainIndices.hostAsync();\n let hTestIdx = yield testIndices.hostAsync();\n\n for (let i = 0; i < numTrain; i++) {\n let idx = uint.get(hTrainIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n trainLabels.set(label, i, 1);\n }\n\n for (let i = 0; i < numTest; i++) {\n let idx = uint.get(hTestIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n testLabels.set(label, i, 1);\n }\n }\n else {\n let labels = yield AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data);\n trainLabels = labels.at(trainIndices);\n testLabels = labels.at(testIndices);\n }\n\n return {\n numClasses: numClasses,\n numTrain: numTrain,\n numTest: numTest,\n trainImages: trainImages,\n testImages: testImages,\n trainLabels: trainLabels,\n testLabels: testLabels\n };\n })\n};\n\nmodule.exports = mnist;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 3c16e6a..2636f53 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -1,203 +1,125 @@ "use strict"; + var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var common = require("../common"); var mnist = require("./mnist"); var ANN = require("./ann"); var now = require("performance-now"); -var accuracy = async($traceurRuntime.initGeneratorFunction(function $__1(af, predicted, target) { - var pMax, - tMax, - $__2, - $__3, - $__4, - $__5, - $__6, - $__7, - $__8, - $__9, - $__10, - $__11, - $__12; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - $ctx.state = 2; - return af.findMaxAtAsync(predicted, 1); - case 2: - pMax = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $ctx.state = 6; - return af.findMaxAtAsync(target, 1); - case 6: - tMax = $ctx.sent; - $ctx.state = 8; - break; - case 8: - $__2 = af.countAsync; - $__3 = pMax.index; - $__4 = $__3.eq; - $__5 = tMax.index; - $__6 = $__4.call($__3, $__5); - $__7 = $__2.call(af, $__6); - $ctx.state = 14; - break; - case 14: - $ctx.state = 10; - return $__7; - case 10: - $__8 = $ctx.sent; - $ctx.state = 12; - break; - case 12: - $__9 = 100 * $__8; - $__10 = tMax.index; - $__11 = $__10.elements; - $__12 = $__11.call($__10); - $ctx.state = 16; - break; - case 16: - $ctx.returnValue = $__9 / $__12; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__1, this); + +var accuracy = async(regeneratorRuntime.mark(function _callee(af, predicted, target) { + var pMax, tMax; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return af.findMaxAtAsync(predicted, 1); + + case 2: + pMax = _context.sent; + _context.next = 5; + return af.findMaxAtAsync(target, 1); + + case 5: + tMax = _context.sent; + _context.next = 8; + return af.countAsync(pMax.index.eq(tMax.index)); + + case 8: + _context.t0 = _context.sent; + _context.t1 = 100 * _context.t0; + _context.t2 = tMax.index.elements(); + return _context.abrupt("return", _context.t1 / _context.t2); + + case 12: + case "end": + return _context.stop(); + } + } + }, _callee, this); })); -var annDemo = async($traceurRuntime.initGeneratorFunction(function $__13(af, deviceInfo) { - var data, - featureSize, - trainFeats, - testFeats, - trainTarget, - testTarget, - network, - start, - end, - trainOutput, - testOutput, - $__14, - $__15, - $__16, - $__17, - $__18, - $__19, - $__20, - $__21, - $__22, - $__23, - $__24, - $__25, - $__26, - $__27; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - console.log("Running ANN Demo on device:\n"); - common.printDeviceInfo(deviceInfo); - console.log(""); - console.log("Setting up training data."); - $ctx.state = 30; - break; - case 30: - $ctx.state = 2; - return mnist.setup(af, true, 0.6); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - featureSize = data.trainImages.elements() / data.numTrain; - trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain)); - testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest)); - trainTarget = af.transpose(data.trainLabels); - testTarget = af.transpose(data.testLabels); - network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]); - start = now(); - $ctx.state = 32; - break; - case 32: - $ctx.state = 6; - return network.train(trainFeats, trainTarget, { - alpha: 1.0, - maxEpochs: 300, - batchSize: 100, - maxError: 1.0 - }); - case 6: - $ctx.maybeThrow(); - $ctx.state = 8; - break; - case 8: - $ctx.state = 10; - return af.waitAsync(); - case 10: - $ctx.maybeThrow(); - $ctx.state = 12; - break; - case 12: - end = now(); - trainOutput = network.predict(trainFeats); - testOutput = network.predict(testFeats); - console.log("Training set:"); - $ctx.state = 34; - break; - case 34: - $__14 = console.log; - $__15 = accuracy(af, trainOutput, trainTarget); - $ctx.state = 18; - break; - case 18: - $ctx.state = 14; - return $__15; - case 14: - $__16 = $ctx.sent; - $ctx.state = 16; - break; - case 16: - $__17 = $__16.toFixed; - $__18 = $__17.call($__16, 2); - $__19 = "Accuracy on training data: " + $__18; - $__20 = $__14.call(console, $__19); - $ctx.state = 20; - break; - case 20: - console.log("Test set:"); - $ctx.state = 36; - break; - case 36: - $__21 = console.log; - $__22 = accuracy(af, testOutput, testTarget); - $ctx.state = 26; - break; - case 26: - $ctx.state = 22; - return $__22; - case 22: - $__23 = $ctx.sent; - $ctx.state = 24; - break; - case 24: - $__24 = $__23.toFixed; - $__25 = $__24.call($__23, 2); - $__26 = "Accuracy on testing data: " + $__25; - $__27 = $__21.call(console, $__26); - $ctx.state = 28; - break; - case 28: - console.log(("Training time: " + ((end - start) / 1000).toFixed(10) + " seconds\n")); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__13, this); + +var annDemo = async(regeneratorRuntime.mark(function _callee2(af, deviceInfo) { + var data, featureSize, trainFeats, testFeats, trainTarget, testTarget, network, start, end, trainOutput, testOutput; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + console.log("Running ANN Demo on device:\n"); + common.printDeviceInfo(deviceInfo); + console.log(""); + + console.log("Setting up training data."); + _context2.next = 6; + return mnist.setup(af, true, 0.6); + + case 6: + data = _context2.sent; + featureSize = data.trainImages.elements() / data.numTrain; + + // Reshape images into feature vectors + + trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain)); + testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest)); + trainTarget = af.transpose(data.trainLabels); + testTarget = af.transpose(data.testLabels); + network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]); + + // Train network + + start = now(); + _context2.next = 16; + return network.train(trainFeats, trainTarget, { + alpha: 1.0, + maxEpochs: 300, + batchSize: 100, + maxError: 1.0 + }); + + case 16: + _context2.next = 18; + return af.waitAsync(); + + case 18: + end = now(); + + // Run the trained network and test accuracy. + + trainOutput = network.predict(trainFeats); + testOutput = network.predict(testFeats); + + console.log("Training set:"); + _context2.t0 = console; + _context2.next = 25; + return accuracy(af, trainOutput, trainTarget); + + case 25: + _context2.t1 = _context2.sent.toFixed(2); + _context2.t2 = "Accuracy on training data: " + _context2.t1; + + _context2.t0.log.call(_context2.t0, _context2.t2); + + console.log("Test set:"); + _context2.t3 = console; + _context2.next = 32; + return accuracy(af, testOutput, testTarget); + + case 32: + _context2.t4 = _context2.sent.toFixed(2); + _context2.t5 = "Accuracy on testing data: " + _context2.t4; + + _context2.t3.log.call(_context2.t3, _context2.t5); + + console.log("Training time: " + ((end - start) / 1000).toFixed(10) + " seconds\n"); + + case 36: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); })); -common.runOnBestDevice(annDemo, "ANN Demo"); +common.runOnBestDevice(annDemo, "ANN Demo"); //# sourceMappingURL=neuralNetwork.js.map diff --git a/examples/es5/machine-learning/neuralNetwork.js.map b/examples/es5/machine-learning/neuralNetwork.js.map index c07ba5b..10bdb68 100644 --- a/examples/es5/machine-learning/neuralNetwork.js.map +++ b/examples/es5/machine-learning/neuralNetwork.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["machine-learning/neuralNetwork.js"],"sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\nlet mnist = require(\"./mnist\");\nlet ANN = require(\"./ann\");\nlet now = require(\"performance-now\");\n\nlet accuracy = async(function*(af, predicted, target) {\n let pMax = yield af.findMaxAtAsync(predicted, 1);\n let tMax = yield af.findMaxAtAsync(target, 1);\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\n});\n\nlet annDemo = async(function*(af, deviceInfo) {\n console.log(\"Running ANN Demo on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n console.log(\"Setting up training data.\");\n let data = yield mnist.setup(af, true, 0.6);\n\n let featureSize = data.trainImages.elements() / data.numTrain;\n\n // Reshape images into feature vectors\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\n\n let trainTarget = af.transpose(data.trainLabels);\n let testTarget = af.transpose(data.testLabels);\n\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\n\n // Train network\n const start = now();\n yield network.train(\n trainFeats,\n trainTarget,\n {\n alpha: 1.0,\n maxEpochs: 300,\n batchSize: 100,\n maxError: 1.0\n }\n );\n yield af.waitAsync();\n const end = now();\n\n // Run the trained network and test accuracy.\n let trainOutput = network.predict(trainFeats);\n let testOutput = network.predict(testFeats);\n\n console.log(\"Training set:\");\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\n\n console.log(\"Test set:\");\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\n\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n});\n\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"file":"machine-learning/neuralNetwork.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/neuralNetwork.js"],"names":[],"mappings":"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","file":"machine-learning/neuralNetwork.js","sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\nlet mnist = require(\"./mnist\");\nlet ANN = require(\"./ann\");\nlet now = require(\"performance-now\");\n\nlet accuracy = async(function*(af, predicted, target) {\n let pMax = yield af.findMaxAtAsync(predicted, 1);\n let tMax = yield af.findMaxAtAsync(target, 1);\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\n});\n\nlet annDemo = async(function*(af, deviceInfo) {\n console.log(\"Running ANN Demo on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n console.log(\"Setting up training data.\");\n let data = yield mnist.setup(af, true, 0.6);\n\n let featureSize = data.trainImages.elements() / data.numTrain;\n\n // Reshape images into feature vectors\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\n\n let trainTarget = af.transpose(data.trainLabels);\n let testTarget = af.transpose(data.testLabels);\n\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\n\n // Train network\n const start = now();\n yield network.train(\n trainFeats,\n trainTarget,\n {\n alpha: 1.0,\n maxEpochs: 300,\n batchSize: 100,\n maxError: 1.0\n }\n );\n yield af.waitAsync();\n const end = now();\n\n // Run the trained network and test accuracy.\n let trainOutput = network.predict(trainFeats);\n let testOutput = network.predict(testFeats);\n\n console.log(\"Training set:\");\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\n\n console.log(\"Test set:\");\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\n\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n});\n\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 3e1f2ff..e5f5e3d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,16 +29,19 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var gulp = require("gulp"); -var traceur = require("gulp-traceur"); -var gulpSequence = require("gulp-sequence"); -var exec = require("child_process").exec; -var sourcemaps = require("gulp-sourcemaps"); +"use strict"; +let gulp = require("gulp"); +let babel = require("gulp-babel"); +let gulpSequence = require("gulp-sequence"); +let exec = require("child_process").exec; +let sourcemaps = require("gulp-sourcemaps"); gulp.task("compile-test", function () { return gulp.src("tests/es6/**/*.js", {base: "tests/es6"}) .pipe(sourcemaps.init()) - .pipe(traceur()) + .pipe(babel({ + presets: ['es2015'] + })) .pipe(sourcemaps.write(".")) .pipe(gulp.dest("tests/es5")); }); @@ -46,7 +49,9 @@ gulp.task("compile-test", function () { gulp.task("compile-lib", function () { return gulp.src("lib/es6/**/*.js", {base: "lib/es6"}) .pipe(sourcemaps.init()) - .pipe(traceur()) + .pipe(babel({ + presets: ['es2015'] + })) .pipe(sourcemaps.write(".")) .pipe(gulp.dest("lib/es5")); }); @@ -54,7 +59,9 @@ gulp.task("compile-lib", function () { gulp.task("compile-examples", function () { return gulp.src("examples/es6/**/*.js", {base: "examples/es6"}) .pipe(sourcemaps.init()) - .pipe(traceur()) + .pipe(babel({ + presets: ['es2015'] + })) .pipe(sourcemaps.write(".")) .pipe(gulp.dest("examples/es5")); }); @@ -74,4 +81,4 @@ gulp.task("npm-publish", function (done) { }); }); -gulp.task("publish", gulpSequence("compile", "npm-publish")); +gulp.task("publish", gulpSequence("compile", "npm-publish")); \ No newline at end of file diff --git a/lib/es5/borderType.js b/lib/es5/borderType.js index 382984f..e3a09e2 100644 --- a/lib/es5/borderType.js +++ b/lib/es5/borderType.js @@ -1,9 +1,40 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var borderType = module.exports = { padZero: 0, padSym: 1, AF_PAD_ZERO: 0, AF_PAD_SYM: 1 }; - //# sourceMappingURL=borderType.js.map diff --git a/lib/es5/borderType.js.map b/lib/es5/borderType.js.map index 37d445e..36631d9 100644 --- a/lib/es5/borderType.js.map +++ b/lib/es5/borderType.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["borderType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet borderType = module.exports = {\n padZero: 0,\n padSym: 1,\n AF_PAD_ZERO: 0,\n AF_PAD_SYM: 1\n};"],"file":"borderType.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["borderType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,aAAW,EAAE,CAAC;AACd,YAAU,EAAE,CAAC;CAChB,CAAC","file":"borderType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet borderType = module.exports = {\n padZero: 0,\n padSym: 1,\n AF_PAD_ZERO: 0,\n AF_PAD_SYM: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cSpace.js b/lib/es5/cSpace.js index e7716bf..62f3f4d 100644 --- a/lib/es5/cSpace.js +++ b/lib/es5/cSpace.js @@ -1,11 +1,42 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var cSpace = module.exports = { - Gray: 0, - RGB: 1, - HSV: 2, - AF_GRAY: 0, - AF_RGB: 1, - AF_HSV: 2 + Gray: 0, ///< Grayscale + RGB: 1, ///< 3-channel RGB + HSV: 2, ///< 3-channel HSV + AF_GRAY: 0, ///< Grayscale + AF_RGB: 1, ///< 3-channel RGB + AF_HSV: 2 ///< 3-channel HSV }; - //# sourceMappingURL=cSpace.js.map diff --git a/lib/es5/cSpace.js.map b/lib/es5/cSpace.js.map index 42bf7fa..6187b34 100644 --- a/lib/es5/cSpace.js.map +++ b/lib/es5/cSpace.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["cSpace.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet cSpace = module.exports = {\n Gray: 0, ///< Grayscale\n RGB: 1, ///< 3-channel RGB\n HSV: 2, ///< 3-channel HSV\n AF_GRAY: 0, ///< Grayscale\n AF_RGB: 1, ///< 3-channel RGB\n AF_HSV: 2 ///< 3-channel HSV\n};"],"file":"cSpace.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cSpace.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,QAAM,EAAE,CAAC;AAAA,CACZ,CAAC","file":"cSpace.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet cSpace = module.exports = {\n Gray: 0, ///< Grayscale\n RGB: 1, ///< 3-channel RGB\n HSV: 2, ///< 3-channel HSV\n AF_GRAY: 0, ///< Grayscale\n AF_RGB: 1, ///< 3-channel RGB\n AF_HSV: 2 ///< 3-channel HSV\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/col.js b/lib/es5/col.js index 5679ee9..04ebbea 100644 --- a/lib/es5/col.js +++ b/lib/es5/col.js @@ -1,10 +1,44 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Col(index) { assert(_.isNumber(index)); + this.index = index; } -module.exports = Col; +module.exports = Col; //# sourceMappingURL=col.js.map diff --git a/lib/es5/col.js.map b/lib/es5/col.js.map index ab10ced..65f2231 100644 --- a/lib/es5/col.js.map +++ b/lib/es5/col.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["col.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Col(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Col;"],"file":"col.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["col.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"col.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Col(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Col;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cols.js b/lib/es5/cols.js index 2330a05..33a2c35 100644 --- a/lib/es5/cols.js +++ b/lib/es5/cols.js @@ -1,12 +1,46 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Cols(firstIndex, lastIndex) { assert(_.isNumber(firstIndex)); assert(_.isNumber(lastIndex)); + this.firstIndex = firstIndex; this.lastIndex = lastIndex; } -module.exports = Cols; +module.exports = Cols; //# sourceMappingURL=cols.js.map diff --git a/lib/es5/cols.js.map b/lib/es5/cols.js.map index e8f4175..adb0b12 100644 --- a/lib/es5/cols.js.map +++ b/lib/es5/cols.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["cols.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Cols(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Cols;"],"file":"cols.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cols.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"cols.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Cols(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Cols;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/complex.js b/lib/es5/complex.js index 3fc3de1..d8beae8 100644 --- a/lib/es5/complex.js +++ b/lib/es5/complex.js @@ -1,12 +1,46 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Complex(real, imag) { assert(_.isNumber(real)); assert(_.isNumber(imag)); + this.real = real; this.imag = imag; } -module.exports = Complex; +module.exports = Complex; //# sourceMappingURL=complex.js.map diff --git a/lib/es5/complex.js.map b/lib/es5/complex.js.map index b71c5a8..cefa7db 100644 --- a/lib/es5/complex.js.map +++ b/lib/es5/complex.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["complex.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Complex(real, imag) {\n assert(_.isNumber(real));\n assert(_.isNumber(imag));\n\n this.real = real;\n this.imag = imag;\n}\n\nmodule.exports = Complex;"],"file":"complex.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["complex.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;CACpB;;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","file":"complex.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Complex(real, imag) {\n assert(_.isNumber(real));\n assert(_.isNumber(imag));\n\n this.real = real;\n this.imag = imag;\n}\n\nmodule.exports = Complex;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/connectivity.js b/lib/es5/connectivity.js index 8a4f9c0..3b9bcce 100644 --- a/lib/es5/connectivity.js +++ b/lib/es5/connectivity.js @@ -1,9 +1,40 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var connectivity = module.exports = { connectivity4: 4, connectivity8: 8, AF_CONNECTIVITY_4: 4, AF_CONNECTIVITY_8: 8 }; - //# sourceMappingURL=connectivity.js.map diff --git a/lib/es5/connectivity.js.map b/lib/es5/connectivity.js.map index aa18153..8f27e13 100644 --- a/lib/es5/connectivity.js.map +++ b/lib/es5/connectivity.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["connectivity.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet connectivity = module.exports = {\n connectivity4: 4,\n connectivity8: 8,\n AF_CONNECTIVITY_4: 4,\n AF_CONNECTIVITY_8: 8\n};"],"file":"connectivity.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["connectivity.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG;AAChC,eAAa,EAAE,CAAC;AAChB,eAAa,EAAE,CAAC;AAChB,mBAAiB,EAAE,CAAC;AACpB,mBAAiB,EAAE,CAAC;CACvB,CAAC","file":"connectivity.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet connectivity = module.exports = {\n connectivity4: 4,\n connectivity8: 8,\n AF_CONNECTIVITY_4: 4,\n AF_CONNECTIVITY_8: 8\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convDomain.js b/lib/es5/convDomain.js index b3fd12a..4b7fb44 100644 --- a/lib/es5/convDomain.js +++ b/lib/es5/convDomain.js @@ -1,11 +1,42 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var convDomain = module.exports = { - auto: 0, - spatial: 1, - freq: 2, - AF_CONV_AUTO: 0, - AF_CONV_SPATIAL: 1, - AF_CONV_FREQ: 2 + auto: 0, ///< ArrayFire automatically picks the right convolution algorithm + spatial: 1, ///< Perform convolution in spatial domain + freq: 2, ///< Perform convolution in frequency domain + AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm + AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain + AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain }; - //# sourceMappingURL=convDomain.js.map diff --git a/lib/es5/convDomain.js.map b/lib/es5/convDomain.js.map index 86aad15..7a2b447 100644 --- a/lib/es5/convDomain.js.map +++ b/lib/es5/convDomain.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["convDomain.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convDomain = module.exports = {\n auto: 0, ///< ArrayFire automatically picks the right convolution algorithm\n spatial: 1, ///< Perform convolution in spatial domain\n freq: 2, ///< Perform convolution in frequency domain\n AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm\n AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain\n AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain\n};"],"file":"convDomain.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["convDomain.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,MAAI,EAAE,CAAC;AACP,SAAO,EAAE,CAAC;AACV,MAAI,EAAE,CAAC;AACP,cAAY,EAAE,CAAC;AACf,iBAAe,EAAE,CAAC;AAClB,cAAY,EAAE,CAAC;AAAA,CAClB,CAAC","file":"convDomain.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convDomain = module.exports = {\n auto: 0, ///< ArrayFire automatically picks the right convolution algorithm\n spatial: 1, ///< Perform convolution in spatial domain\n freq: 2, ///< Perform convolution in frequency domain\n AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm\n AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain\n AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convMode.js b/lib/es5/convMode.js index b6c7bbc..aaefa3b 100644 --- a/lib/es5/convMode.js +++ b/lib/es5/convMode.js @@ -1,9 +1,54 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var convMode = module.exports = { + /// + /// Output of the convolution is the same size as input + /// default: 0, + + /// + /// Output of the convolution is signal_len + filter_len - 1 + /// expand: 1, + /// + /// Output of the convolution is the same size as input + /// AF_CONV_DEFAULT: 0, + + /// + /// Output of the convolution is signal_len + filter_len - 1 + /// AF_CONV_EXPAND: 1 }; - //# sourceMappingURL=convMode.js.map diff --git a/lib/es5/convMode.js.map b/lib/es5/convMode.js.map index ceaead7..467ab19 100644 --- a/lib/es5/convMode.js.map +++ b/lib/es5/convMode.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["convMode.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convMode = module.exports = {\n ///\n /// Output of the convolution is the same size as input\n ///\n default: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n expand: 1,\n ///\n /// Output of the convolution is the same size as input\n ///\n AF_CONV_DEFAULT: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n AF_CONV_EXPAND: 1\n};"],"file":"convMode.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["convMode.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;;;;AAI5B,SAAO,EAAE,CAAC;;;;;AAKV,QAAM,EAAE,CAAC;;;;AAIT,iBAAe,EAAE,CAAC;;;;;AAKlB,gBAAc,EAAE,CAAC;CACpB,CAAC","file":"convMode.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convMode = module.exports = {\n ///\n /// Output of the convolution is the same size as input\n ///\n default: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n expand: 1,\n ///\n /// Output of the convolution is the same size as input\n ///\n AF_CONV_DEFAULT: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n AF_CONV_EXPAND: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dim4.js b/lib/es5/dim4.js index 84abc32..0734729 100644 --- a/lib/es5/dim4.js +++ b/lib/es5/dim4.js @@ -1,40 +1,73 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Dim4(dim0, dim1, dim2, dim3) { - if (_.isArray(dim0)) { - return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]); - } - this.values = []; - if (_.isNumber(dim0)) { - this.values.push(dim0); - } else { - this.values.push(1); - } - if (_.isNumber(dim1)) { - this.values.push(dim1); - } else { - this.values.push(1); - } - if (_.isNumber(dim2)) { - this.values.push(dim2); - } else { - this.values.push(1); - } - if (_.isNumber(dim3)) { - this.values.push(dim3); - } else { - this.values.push(1); - } - var index; - for (index = 3; index >= 0; index--) { - if (this.values[index] !== 1) { - break; + if (_.isArray(dim0)) { + return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]); } - } - this.ndims = this.nDims = index + 1; - this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3]; + this.values = []; + if (_.isNumber(dim0)) { + this.values.push(dim0); + } else { + this.values.push(1); + } + if (_.isNumber(dim1)) { + this.values.push(dim1); + } else { + this.values.push(1); + } + if (_.isNumber(dim2)) { + this.values.push(dim2); + } else { + this.values.push(1); + } + if (_.isNumber(dim3)) { + this.values.push(dim3); + } else { + this.values.push(1); + } + var index = undefined; + for (index = 3; index >= 0; index--) { + if (this.values[index] !== 1) { + break; + } + } + this.ndims = this.nDims = index + 1; + this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3]; } -module.exports = Dim4; +module.exports = Dim4; //# sourceMappingURL=dim4.js.map diff --git a/lib/es5/dim4.js.map b/lib/es5/dim4.js.map index c83c87b..a797686 100644 --- a/lib/es5/dim4.js.map +++ b/lib/es5/dim4.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["dim4.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Dim4(dim0, dim1, dim2, dim3) {\n if (_.isArray(dim0)) {\n return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]);\n }\n this.values = [];\n if (_.isNumber(dim0)) { this.values.push(dim0) } else { this.values.push(1); }\n if (_.isNumber(dim1)) { this.values.push(dim1) } else { this.values.push(1); }\n if (_.isNumber(dim2)) { this.values.push(dim2) } else { this.values.push(1); }\n if (_.isNumber(dim3)) { this.values.push(dim3) } else { this.values.push(1); }\n let index;\n for (index = 3; index >= 0; index--) {\n if (this.values[index] !== 1) {\n break;\n }\n }\n this.ndims = this.nDims = index + 1;\n this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3];\n}\n\nmodule.exports = Dim4;"],"file":"dim4.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["dim4.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAClC,QAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,eAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD;AACD,QAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,KAAK,YAAA,CAAC;AACV,SAAK,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACjC,YAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC1B,kBAAM;SACT;KACJ;AACD,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AACpC,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACrF;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"dim4.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Dim4(dim0, dim1, dim2, dim3) {\n if (_.isArray(dim0)) {\n return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]);\n }\n this.values = [];\n if (_.isNumber(dim0)) { this.values.push(dim0) } else { this.values.push(1); }\n if (_.isNumber(dim1)) { this.values.push(dim1) } else { this.values.push(1); }\n if (_.isNumber(dim2)) { this.values.push(dim2) } else { this.values.push(1); }\n if (_.isNumber(dim3)) { this.values.push(dim3) } else { this.values.push(1); }\n let index;\n for (index = 3; index >= 0; index--) {\n if (this.values[index] !== 1) {\n break;\n }\n }\n this.ndims = this.nDims = index + 1;\n this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3];\n}\n\nmodule.exports = Dim4;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dtype.js b/lib/es5/dtype.js index 752f41e..43e0ec7 100644 --- a/lib/es5/dtype.js +++ b/lib/es5/dtype.js @@ -1,4 +1,36 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var dType = module.exports = { f32: 0, c32: 1, @@ -11,5 +43,4 @@ var dType = module.exports = { s64: 8, u64: 9 }; - //# sourceMappingURL=dtype.js.map diff --git a/lib/es5/dtype.js.map b/lib/es5/dtype.js.map index 99d29f7..392295a 100644 --- a/lib/es5/dtype.js.map +++ b/lib/es5/dtype.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["dtype.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet dType = module.exports = {\n f32: 0,\n c32: 1,\n f64: 2,\n c64: 3,\n b8: 4,\n s32: 5,\n u32: 6,\n u8: 7,\n s64: 8,\n u64: 9\n};"],"file":"dtype.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["dtype.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG;AACzB,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;CACT,CAAC","file":"dtype.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet dType = module.exports = {\n f32: 0,\n c32: 1,\n f64: 2,\n c64: 3,\n b8: 4,\n s32: 5,\n u32: 6,\n u8: 7,\n s64: 8,\n u64: 9\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/ext.js b/lib/es5/ext.js index e043102..df6bf98 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -1,237 +1,268 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var Bluebird = require("bluebird"); var _ = require("lodash"); var async = Bluebird.coroutine; + var retryCount = 5; var gcTime = 1000; + function isOutOfMemoryError(e) { - return e.message.indexOf("out of memory") > 0; + return e.message.indexOf("out of memory") > 0; } + function invokeGC(af) { - af.gc(gcTime); + af.gc(gcTime); } + function synchronify(af, f) { - return function() { - var err; - var res; - var done; - var cb = function(e, r) { - err = e; - res = r; - done = true; - }; - var args = _.toArray(arguments).concat(cb); - for (var i = 0; i < retryCount; i++) { - done = false; - f.apply(this, args); - while (!done) - af._doEvents(); - if (err) { - if (!isOutOfMemoryError(err)) { - throw err; - } else { - invokeGC(af); + return function () { + var err; + var res; + var done; + var cb = function cb(e, r) { + err = e; + res = r; + done = true; + }; + + var args = _.toArray(arguments).concat(cb); + + for (var i = 0; i < retryCount; i++) { + done = false; + f.apply(this, args); + while (!done) { + af._doEvents(); + }if (err) { + if (!isOutOfMemoryError(err)) { + throw err; + } else { + invokeGC(af); + } + } } - } - } - if (err) - throw err; - return res; - }; + + if (err) throw err; + + return res; + }; } + function installAsyncAndSync(af, obj, name) { - if (_.isUndefined(name)) { - var $__4 = true; - var $__5 = false; - var $__6 = undefined; - try { - for (var $__2 = void 0, - $__1 = (_.keys(obj))[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { - var key = $__2.value; - { - installAsyncAndSync(af, obj, key); - } - } - } catch ($__7) { - $__5 = true; - $__6 = $__7; - } finally { - try { - if (!$__4 && $__1.return != null) { - $__1.return(); - } - } finally { - if ($__5) { - throw $__6; + if (_.isUndefined(name)) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = _.keys(obj)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var key = _step.value; + + installAsyncAndSync(af, obj, key); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } - } + + return; } - return; - } - if (name !== "AFArray") { - var f = obj[name]; - if (_.isFunction(f)) { - if (!_.isFunction(obj[name + "Async"])) { - obj[name + "Async"] = async($traceurRuntime.initGeneratorFunction(function $__8() { - var self, - args, - call, - err, - i, - $__9, - $__10, - e; - var $arguments = arguments; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - self = this; - args = _.toArray($arguments); - call = function() { - return new Bluebird(function(resolve, reject) { - var cb = function(e, r) { - if (e) { - reject(e); - } else { - resolve(r); + + if (name !== "AFArray") { + (function () { + var f = obj[name]; + if (_.isFunction(f)) { + if (!_.isFunction(obj[name + "Async"])) { + obj[name + "Async"] = async(regeneratorRuntime.mark(function _callee() { + var self, + args, + call, + err, + i, + _args = arguments; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + self = this; + args = _.toArray(_args); + + call = function call() { + return new Bluebird(function (resolve, reject) { + var cb = function cb(e, r) { + if (e) { + reject(e); + } else { + resolve(r); + } + }; + args.push(cb); + f.apply(self, args); + }); + }; + + err = null; + i = 0; + + case 5: + if (!(i < retryCount)) { + _context.next = 21; + break; + } + + _context.prev = 6; + _context.next = 9; + return call(); + + case 9: + return _context.abrupt("return", _context.sent); + + case 12: + _context.prev = 12; + _context.t0 = _context["catch"](6); + + if (isOutOfMemoryError(_context.t0)) { + _context.next = 16; + break; + } + + throw _context.t0; + + case 16: + invokeGC(af); + err = _context.t0; + + case 18: + i++; + _context.next = 5; + break; + + case 21: + throw err; + + case 22: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[6, 12]]); + })); + } + if (!_.isFunction(obj[name + "Sync"])) { + obj[name + "Sync"] = synchronify(af, f); + } + obj[name] = function () { + var err = null; + for (var _i = 0; _i < retryCount; _i++) { + try { + return f.apply(this, arguments); + } catch (e) { + if (!isOutOfMemoryError(e)) { + throw e; + } + invokeGC(af); + err = e; } - }; - args.push(cb); - f.apply(self, args); - }); - }; - err = null; - $ctx.state = 22; - break; - case 22: - i = 0; - $ctx.state = 20; - break; - case 20: - $ctx.state = (i < retryCount) ? 11 : 18; - break; - case 14: - i++; - $ctx.state = 20; - break; - case 11: - $ctx.pushTry(9, null); - $ctx.state = 12; - break; - case 12: - $__9 = call(); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__9; - case 2: - $__10 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $ctx.returnValue = $__10; - $ctx.state = -2; - break; - case 8: - $ctx.popTry(); - $ctx.state = 14; - break; - case 9: - $ctx.popTry(); - $ctx.maybeUncatchable(); - e = $ctx.storedException; - $ctx.state = 15; - break; - case 15: - if (!isOutOfMemoryError(e)) { - throw e; - } - invokeGC(af); - err = e; - $ctx.state = 14; - break; - case 18: - throw err; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__8, this); - })); - } - if (!_.isFunction(obj[name + "Sync"])) { - obj[name + "Sync"] = synchronify(af, f); - } - obj[name] = function() { - var err = null; - for (var i = 0; i < retryCount; i++) { - try { - return f.apply(this, arguments); - } catch (e) { - if (!isOutOfMemoryError(e)) { - throw e; + } + throw err; + }; } - invokeGC(af); - err = e; - } - } - throw err; - }; + })(); } - } } + function ext(af) { - installAsyncAndSync(af, af); - installAsyncAndSync(af, af.AFArray); - installAsyncAndSync(af, af.AFArray.prototype); - var scope = af.AFArray.scope = require("./scope"); - _.extend(af, { - end: -1, - span: null, - all: -1, - dtype: require("./dtype"), - dType: require("./dtype"), - source: require("./source"), - matchType: require("./matchType"), - cSpace: require("./cSpace"), - CSpace: require("./cSpace"), - connectivity: require("./connectivity"), - borderType: require("./borderType"), - interpType: require("./interpType"), - matProp: require("./matProp"), - normType: require("./normType"), - convMode: require("./convMode"), - convDomain: require("./convDomain"), - Dim4: require("./dim4"), - Seq: require("./seq"), - Complex: require("./complex"), - Row: require("./row"), - Col: require("./col"), - Rows: require("./rows"), - Cols: require("./cols"), - getDevices: function() { - var current = this.getDevice(); - try { - var count = this.getDeviceCount(); - var result = []; - for (var i = 0; i < count; i++) { - this.setDevice(i); - var info = this.deviceInfo(); - info.id = i; - result.push(info); - } - return result; - } finally { - this.setDevice(current); - } - }, - gfor: require("./makeGfor")(af), - scope: scope - }); + installAsyncAndSync(af, af); + installAsyncAndSync(af, af.AFArray); + installAsyncAndSync(af, af.AFArray.prototype); + + var scope = af.AFArray.scope = require("./scope"); + + _.extend(af, { + end: -1, + span: null, + all: -1, + dtype: require("./dtype"), + dType: require("./dtype"), + source: require("./source"), + matchType: require("./matchType"), + cSpace: require("./cSpace"), + CSpace: require("./cSpace"), + connectivity: require("./connectivity"), + borderType: require("./borderType"), + interpType: require("./interpType"), + matProp: require("./matProp"), + normType: require("./normType"), + convMode: require("./convMode"), + convDomain: require("./convDomain"), + Dim4: require("./dim4"), + Seq: require("./seq"), + Complex: require("./complex"), + Row: require("./row"), + Col: require("./col"), + Rows: require("./rows"), + Cols: require("./cols"), + getDevices: function getDevices() { + var current = this.getDevice(); + try { + var count = this.getDeviceCount(); + var result = []; + for (var _i2 = 0; _i2 < count; _i2++) { + this.setDevice(_i2); + var info = this.deviceInfo(); + info.id = _i2; + result.push(info); + } + return result; + } finally { + this.setDevice(current); + } + }, + gfor: require("./makeGfor")(af), + scope: scope + }); } -module.exports = ext; +module.exports = ext; //# sourceMappingURL=ext.js.map diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map index 392ba1c..1999e5b 100644 --- a/lib/es5/ext.js.map +++ b/lib/es5/ext.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["ext.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"out of memory\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n })\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n let scope = af.AFArray.scope = require(\"./scope\");\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af),\n scope: scope\n });\n}\n\nmodule.exports = ext;"],"file":"ext.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ext.js"],"names":[],"mappings":"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","file":"ext.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"out of memory\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n });\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n let scope = af.AFArray.scope = require(\"./scope\");\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af),\n scope: scope\n });\n}\n\nmodule.exports = ext;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/index.js b/lib/es5/index.js index 2f936bf..f07dfea 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -1,63 +1,76 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var ext = require("./ext"); var Bluebird = require("bluebird"); var debug = require("debug")("af"); -var entry = module.exports = function(id) { - var did = _.isString(id) ? id.trim().toLowerCase() : null; - did = did || "cpu"; - function createAF() { - switch (did) { - case "cpu": - return require("bindings")("arrayfire_js_CPU"); - case "cuda": - return require("bindings")("arrayfire_js_CUDA"); - case "opencl": - return require("bindings")("arrayfire_js_OpenCL"); - default: - throw new Error("Platform '" + id + "' is not supported."); + +var entry = module.exports = function (id) { + var did = _.isString(id) ? id.trim().toLowerCase() : null; + did = did || "cpu"; + function createAF() { + switch (did) { + case "cpu": + return require("bindings")("arrayfire_js_CPU"); + case "cuda": + return require("bindings")("arrayfire_js_CUDA"); + case "opencl": + return require("bindings")("arrayfire_js_OpenCL"); + default: + throw new Error("Platform '" + id + "' is not supported."); + } + } + var af = createAF(); + if (!af.__extended) { + ext(af); + af.__extended = true; } - } - var af = createAF(); - if (!af.__extended) { - ext(af); - af.__extended = true; - } - return af; + return af; }; -entry.supportedPlatforms = function() { - var platforms = []; - var $__3 = true; - var $__4 = false; - var $__5 = undefined; - try { - for (var $__1 = void 0, - $__0 = (["CPU", "CUDA", "OpenCL"])[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { - var id = $__1.value; - { + +entry.supportedPlatforms = function () { + var platforms = []; + var _arr = ["CPU", "CUDA", "OpenCL"]; + for (var _i = 0; _i < _arr.length; _i++) { + var id = _arr[_i]; try { - var fire = entry(id); - platforms.push(id); + var fire = entry(id); + platforms.push(id); } catch (e) { - debug("Cannot create ArrayFire binding of platform %s, because of error:\n%s", id, e.stack); + debug("Cannot create ArrayFire binding of platform %s, because of error:\n%s", id, e.stack); } - } - } - } catch ($__6) { - $__4 = true; - $__5 = $__6; - } finally { - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; - } } - } - return platforms; + return platforms; }; - //# sourceMappingURL=index.js.map diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map index 814c116..65763c6 100644 --- a/lib/es5/index.js.map +++ b/lib/es5/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\nlet debug = require(\"debug\")(\"af\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\n }\n }\n return platforms;\n};"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEnC,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE;AACtC,QAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC1D,OAAG,GAAG,GAAG,IAAI,KAAK,CAAC;AACnB,aAAS,QAAQ,GAAG;AAChB,gBAAQ,GAAG;AACP,iBAAK,KAAK;AACN,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAAA,AACnD,iBAAK,MAAM;AACP,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAAA,AACpD,iBAAK,QAAQ;AACT,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAAA,AACtD;AACI,sBAAM,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC;AAAA,SAClE;KACJ;AACD,QAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpB,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAChB,WAAG,CAAC,EAAE,CAAC,CAAC;AACR,UAAE,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AACD,WAAO,EAAE,CAAC;CACb,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AAClC,QAAI,SAAS,GAAG,EAAE,CAAC;eACJ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAxC,6CAA0C;AAArC,YAAI,EAAE,WAAA,CAAA;AACP,YAAI;AACA,gBAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtB,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,uEAAuE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC/F;KACJ;AACD,WAAO,SAAS,CAAC;CACpB,CAAC","file":"index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\nlet debug = require(\"debug\")(\"af\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\n }\n }\n return platforms;\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/interpType.js b/lib/es5/interpType.js index 04d93d6..ce69197 100644 --- a/lib/es5/interpType.js +++ b/lib/es5/interpType.js @@ -1,13 +1,44 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var interpType = module.exports = { - nearest: 0, - linear: 1, - bilinerar: 2, - cubic: 3, - AF_INTERP_NEAREST: 0, - AF_INTERP_LINEAR: 1, - AF_INTERP_BILINEAR: 2, - AF_INTERP_CUBIC: 3 + nearest: 0, ///< Nearest Interpolation + linear: 1, ///< Linear Interpolation + bilinerar: 2, ///< Bilinear Interpolation + cubic: 3, ///< Cubic Interpolation, + AF_INTERP_NEAREST: 0, ///< Nearest Interpolation + AF_INTERP_LINEAR: 1, ///< Linear Interpolation + AF_INTERP_BILINEAR: 2, ///< Bilinear Interpolation + AF_INTERP_CUBIC: 3 ///< Cubic Interpolation }; - //# sourceMappingURL=interpType.js.map diff --git a/lib/es5/interpType.js.map b/lib/es5/interpType.js.map index d5ebc96..0f7b089 100644 --- a/lib/es5/interpType.js.map +++ b/lib/es5/interpType.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["interpType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet interpType = module.exports = {\n nearest: 0, ///< Nearest Interpolation\n linear: 1, ///< Linear Interpolation\n bilinerar : 2, ///< Bilinear Interpolation\n cubic: 3, ///< Cubic Interpolation,\n AF_INTERP_NEAREST: 0, ///< Nearest Interpolation\n AF_INTERP_LINEAR: 1, ///< Linear Interpolation\n AF_INTERP_BILINEAR : 2, ///< Bilinear Interpolation\n AF_INTERP_CUBIC: 3 ///< Cubic Interpolation\n};"],"file":"interpType.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["interpType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,WAAS,EAAG,CAAC;AACb,OAAK,EAAE,CAAC;AACR,mBAAiB,EAAE,CAAC;AACpB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAG,CAAC;AACtB,iBAAe,EAAE,CAAC;AAAA,CACrB,CAAC","file":"interpType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet interpType = module.exports = {\n nearest: 0, ///< Nearest Interpolation\n linear: 1, ///< Linear Interpolation\n bilinerar : 2, ///< Bilinear Interpolation\n cubic: 3, ///< Cubic Interpolation,\n AF_INTERP_NEAREST: 0, ///< Nearest Interpolation\n AF_INTERP_LINEAR: 1, ///< Linear Interpolation\n AF_INTERP_BILINEAR : 2, ///< Bilinear Interpolation\n AF_INTERP_CUBIC: 3 ///< Cubic Interpolation\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/makeGfor.js b/lib/es5/makeGfor.js index 0ea2981..efd4c04 100644 --- a/lib/es5/makeGfor.js +++ b/lib/es5/makeGfor.js @@ -1,43 +1,76 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); var Seq = require("./seq"); + function makeGfor(af) { - return function gfor() { - var fPos = -1; - for (var i = 0; i < arguments.length; i++) { - if (_.isFunction(arguments[i])) { - fPos = i; - break; - } - } - if (fPos === -1) { - throw new Error("Body function argument expected."); - } - if (fPos === 0) { - throw new Error("Seq arguments expected."); - } - var thisArg = arguments[fPos]; - if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) { - thisArg = arguments[fPos + 1]; - } - var seq; - if (fPos === 1) { - seq = new Seq(arguments[0]); - } else if (fPos === 2) { - seq = new Seq(arguments[0], arguments[1]); - } else { - throw new Error("Invalid number of Seq arguments."); - } - seq.isGFor = true; - af._gforToggle(); - try { - arguments[fPos].call(thisArg, seq); - } finally { - af._gforToggle(); - } - }; + return function gfor() { + var fPos = -1; + for (var i = 0; i < arguments.length; i++) { + if (_.isFunction(arguments[i])) { + fPos = i; + break; + } + } + if (fPos === -1) { + throw new Error("Body function argument expected."); + } + if (fPos === 0) { + throw new Error("Seq arguments expected."); + } + var thisArg = arguments[fPos]; + if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) { + thisArg = arguments[fPos + 1]; + } + var seq = undefined; + if (fPos === 1) { + seq = new Seq(arguments[0]); + } else if (fPos === 2) { + seq = new Seq(arguments[0], arguments[1]); + } else { + throw new Error("Invalid number of Seq arguments."); + } + seq.isGFor = true; + af._gforToggle(); + try { + arguments[fPos].call(thisArg, seq); + } finally { + af._gforToggle(); + } + }; } -module.exports = makeGfor; +module.exports = makeGfor; //# sourceMappingURL=makeGfor.js.map diff --git a/lib/es5/makeGfor.js.map b/lib/es5/makeGfor.js.map index 02467a8..c4e880a 100644 --- a/lib/es5/makeGfor.js.map +++ b/lib/es5/makeGfor.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["makeGfor.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet Seq = require(\"./seq\");\n\nfunction makeGfor(af) {\n return function gfor() {\n let fPos = -1;\n for(let i = 0; i < arguments.length; i++) {\n if (_.isFunction(arguments[i])) {\n fPos = i;\n break;\n }\n }\n if (fPos === -1) {\n throw new Error(\"Body function argument expected.\");\n }\n if (fPos === 0) {\n throw new Error(\"Seq arguments expected.\");\n }\n let thisArg = arguments[fPos];\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\n thisArg = arguments[fPos + 1];\n }\n let seq;\n if (fPos === 1) {\n seq = new Seq(arguments[0]);\n }\n else if (fPos === 2) {\n seq = new Seq(arguments[0], arguments[1]);\n }\n else {\n throw new Error(\"Invalid number of Seq arguments.\");\n }\n seq.isGFor = true;\n af._gforToggle();\n try {\n arguments[fPos].call(thisArg, seq);\n }\n finally {\n af._gforToggle();\n }\n }\n}\n\nmodule.exports = makeGfor;"],"file":"makeGfor.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["makeGfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,WAAO,SAAS,IAAI,GAAG;AACnB,YAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AACd,aAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,oBAAI,GAAG,CAAC,CAAC;AACT,sBAAM;aACT;SACJ;AACD,YAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACb,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,kBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;AACD,YAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAI,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;AACrD,mBAAO,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACjC;AACD,YAAI,GAAG,YAAA,CAAC;AACR,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MACI,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,MACI;AACD,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,WAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,UAAE,CAAC,WAAW,EAAE,CAAC;AACjB,YAAI;AACA,qBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtC,SACO;AACJ,cAAE,CAAC,WAAW,EAAE,CAAC;SACpB;KACJ,CAAA;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"makeGfor.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet Seq = require(\"./seq\");\n\nfunction makeGfor(af) {\n return function gfor() {\n let fPos = -1;\n for(let i = 0; i < arguments.length; i++) {\n if (_.isFunction(arguments[i])) {\n fPos = i;\n break;\n }\n }\n if (fPos === -1) {\n throw new Error(\"Body function argument expected.\");\n }\n if (fPos === 0) {\n throw new Error(\"Seq arguments expected.\");\n }\n let thisArg = arguments[fPos];\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\n thisArg = arguments[fPos + 1];\n }\n let seq;\n if (fPos === 1) {\n seq = new Seq(arguments[0]);\n }\n else if (fPos === 2) {\n seq = new Seq(arguments[0], arguments[1]);\n }\n else {\n throw new Error(\"Invalid number of Seq arguments.\");\n }\n seq.isGFor = true;\n af._gforToggle();\n try {\n arguments[fPos].call(thisArg, seq);\n }\n finally {\n af._gforToggle();\n }\n }\n}\n\nmodule.exports = makeGfor;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matProp.js b/lib/es5/matProp.js index 383daba..7d94218 100644 --- a/lib/es5/matProp.js +++ b/lib/es5/matProp.js @@ -1,27 +1,58 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var matProp = module.exports = { - none: 0, - trans: 1, - cTrans: 2, - upper: 32, - lower: 64, - diagUnit: 128, - sym: 512, - posDef: 1024, - orthog: 2048, - triDiag: 4096, - blockDiag: 8192, - AF_MAT_NONE: 0, - AF_MAT_TRANS: 1, - AF_MAT_CTRANS: 2, - AF_MAT_UPPER: 32, - AF_MAT_LOWER: 64, - AF_MAT_DIAG_UNIT: 128, - AF_MAT_SYM: 512, - AF_MAT_POSDEF: 1024, - AF_MAT_ORTHOG: 2048, - AF_MAT_TRI_DIAG: 4096, - AF_MAT_BLOCK_DIAG: 8192 + none: 0, ///< Default + trans: 1, ///< Data needs to be transposed + cTrans: 2, ///< Data needs to be conjugate tansposed + upper: 32, ///< Matrix is upper triangular + lower: 64, ///< Matrix is lower triangular + diagUnit: 128, ///< Matrix diagonal contains unitary values + sym: 512, ///< Matrix is symmetric + posDef: 1024, ///< Matrix is positive definite + orthog: 2048, ///< Matrix is orthogonal + triDiag: 4096, ///< Matrix is tri diagonal + blockDiag: 8192, ///< Matrix is block diagonal + AF_MAT_NONE: 0, ///< Default + AF_MAT_TRANS: 1, ///< Data needs to be transposed + AF_MAT_CTRANS: 2, ///< Data needs to be conjugate tansposed + AF_MAT_UPPER: 32, ///< Matrix is upper triangular + AF_MAT_LOWER: 64, ///< Matrix is lower triangular + AF_MAT_DIAG_UNIT: 128, ///< Matrix diagonal contains unitary values + AF_MAT_SYM: 512, ///< Matrix is symmetric + AF_MAT_POSDEF: 1024, ///< Matrix is positive definite + AF_MAT_ORTHOG: 2048, ///< Matrix is orthogonal + AF_MAT_TRI_DIAG: 4096, ///< Matrix is tri diagonal + AF_MAT_BLOCK_DIAG: 8192 ///< Matrix is block diagonal }; - //# sourceMappingURL=matProp.js.map diff --git a/lib/es5/matProp.js.map b/lib/es5/matProp.js.map index be6c4a1..6acaecf 100644 --- a/lib/es5/matProp.js.map +++ b/lib/es5/matProp.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["matProp.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matProp = module.exports = {\n none : 0, ///< Default\n trans : 1, ///< Data needs to be transposed\n cTrans : 2, ///< Data needs to be conjugate tansposed\n upper : 32, ///< Matrix is upper triangular\n lower : 64, ///< Matrix is lower triangular\n diagUnit : 128, ///< Matrix diagonal contains unitary values\n sym : 512, ///< Matrix is symmetric\n posDef : 1024, ///< Matrix is positive definite\n orthog : 2048, ///< Matrix is orthogonal\n triDiag : 4096, ///< Matrix is tri diagonal\n blockDiag : 8192, ///< Matrix is block diagonal\n AF_MAT_NONE : 0, ///< Default\n AF_MAT_TRANS : 1, ///< Data needs to be transposed\n AF_MAT_CTRANS : 2, ///< Data needs to be conjugate tansposed\n AF_MAT_UPPER : 32, ///< Matrix is upper triangular\n AF_MAT_LOWER : 64, ///< Matrix is lower triangular\n AF_MAT_DIAG_UNIT : 128, ///< Matrix diagonal contains unitary values\n AF_MAT_SYM : 512, ///< Matrix is symmetric\n AF_MAT_POSDEF : 1024, ///< Matrix is positive definite\n AF_MAT_ORTHOG : 2048, ///< Matrix is orthogonal\n AF_MAT_TRI_DIAG : 4096, ///< Matrix is tri diagonal\n AF_MAT_BLOCK_DIAG : 8192 ///< Matrix is block diagonal\n};"],"file":"matProp.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["matProp.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG;AAC3B,MAAI,EAAS,CAAC;AACd,OAAK,EAAQ,CAAC;AACd,QAAM,EAAO,CAAC;AACd,OAAK,EAAQ,EAAE;AACf,OAAK,EAAQ,EAAE;AACf,UAAQ,EAAK,GAAG;AAChB,KAAG,EAAU,GAAG;AAChB,QAAM,EAAO,IAAI;AACjB,QAAM,EAAO,IAAI;AACjB,SAAO,EAAM,IAAI;AACjB,WAAS,EAAI,IAAI;AACjB,aAAW,EAAS,CAAC;AACrB,cAAY,EAAQ,CAAC;AACrB,eAAa,EAAO,CAAC;AACrB,cAAY,EAAQ,EAAE;AACtB,cAAY,EAAQ,EAAE;AACtB,kBAAgB,EAAI,GAAG;AACvB,YAAU,EAAU,GAAG;AACvB,eAAa,EAAO,IAAI;AACxB,eAAa,EAAO,IAAI;AACxB,iBAAe,EAAK,IAAI;AACxB,mBAAiB,EAAG,IAAI;AAAA,CAC3B,CAAC","file":"matProp.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matProp = module.exports = {\n none : 0, ///< Default\n trans : 1, ///< Data needs to be transposed\n cTrans : 2, ///< Data needs to be conjugate tansposed\n upper : 32, ///< Matrix is upper triangular\n lower : 64, ///< Matrix is lower triangular\n diagUnit : 128, ///< Matrix diagonal contains unitary values\n sym : 512, ///< Matrix is symmetric\n posDef : 1024, ///< Matrix is positive definite\n orthog : 2048, ///< Matrix is orthogonal\n triDiag : 4096, ///< Matrix is tri diagonal\n blockDiag : 8192, ///< Matrix is block diagonal\n AF_MAT_NONE : 0, ///< Default\n AF_MAT_TRANS : 1, ///< Data needs to be transposed\n AF_MAT_CTRANS : 2, ///< Data needs to be conjugate tansposed\n AF_MAT_UPPER : 32, ///< Matrix is upper triangular\n AF_MAT_LOWER : 64, ///< Matrix is lower triangular\n AF_MAT_DIAG_UNIT : 128, ///< Matrix diagonal contains unitary values\n AF_MAT_SYM : 512, ///< Matrix is symmetric\n AF_MAT_POSDEF : 1024, ///< Matrix is positive definite\n AF_MAT_ORTHOG : 2048, ///< Matrix is orthogonal\n AF_MAT_TRI_DIAG : 4096, ///< Matrix is tri diagonal\n AF_MAT_BLOCK_DIAG : 8192 ///< Matrix is block diagonal\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matchType.js b/lib/es5/matchType.js index 8fb1086..6444be1 100644 --- a/lib/es5/matchType.js +++ b/lib/es5/matchType.js @@ -1,4 +1,36 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var matchType = module.exports = { SAD: 0, zSAD: 1, @@ -19,5 +51,4 @@ var matchType = module.exports = { AF_ZNCC: 7, AF_SHD: 8 }; - //# sourceMappingURL=matchType.js.map diff --git a/lib/es5/matchType.js.map b/lib/es5/matchType.js.map index e35ad8d..dc94fbb 100644 --- a/lib/es5/matchType.js.map +++ b/lib/es5/matchType.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["matchType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matchType = module.exports = {\n SAD: 0,\n zSAD: 1,\n lSAD: 2,\n SSD: 3,\n zSSD: 4,\n lSSD: 5,\n NCC: 6,\n zNCC: 7,\n SHD: 8,\n AF_SAD: 0,\n AF_ZSAD: 1,\n AF_LSAD: 2,\n AF_SSD: 3,\n AF_ZSSD: 4,\n AF_LSSD: 5,\n AF_NCC: 6,\n AF_ZNCC: 7,\n AF_SHD: 8\n};"],"file":"matchType.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["matchType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG;AAC7B,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;CACZ,CAAC","file":"matchType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matchType = module.exports = {\n SAD: 0,\n zSAD: 1,\n lSAD: 2,\n SSD: 3,\n zSSD: 4,\n lSSD: 5,\n NCC: 6,\n zNCC: 7,\n SHD: 8,\n AF_SAD: 0,\n AF_ZSAD: 1,\n AF_LSAD: 2,\n AF_SSD: 3,\n AF_ZSSD: 4,\n AF_LSSD: 5,\n AF_NCC: 6,\n AF_ZNCC: 7,\n AF_SHD: 8\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/normType.js b/lib/es5/normType.js index da380e0..77ba4eb 100644 --- a/lib/es5/normType.js +++ b/lib/es5/normType.js @@ -1,23 +1,54 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var normType = module.exports = { - vector1: 1, - vectorInf: 2, - vector2: 3, - vectorP: 4, - matrix1: 5, - matrixInf: 6, - matrix2: 7, - matrixLPq: 8, - euclid: 3, - AF_NORM_VECTOR_1: 1, - AF_NORM_VECTOR_INF: 2, - AF_NORM_VECTOR_2: 3, - AF_NORM_VECTOR_P: 4, - AF_NORM_MATRIX_1: 5, - AF_NORM_MATRIX_INF: 6, - AF_NORM_MATRIX_2: 7, - AF_NORM_MATRIX_L_PQ: 8, - AF_NORM_EUCLID: 3 + vector1: 1, ///< treats the input as a vector and returns the sum of absolute values + vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values + vector2: 3, ///< treats the input as a vector and returns euclidean norm + vectorP: 4, ///< treats the input as a vector and returns the p-norm + matrix1: 5, ///< return the max of column sums + matrixInf: 6, ///< return the max of row sums + matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED + matrixLPq: 8, ///< returns Lpq-norm + euclid: 3, ///< The default. Same as vector2 + AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values + AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values + AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm + AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm + AF_NORM_MATRIX_1: 5, ///< return the max of column sums + AF_NORM_MATRIX_INF: 6, ///< return the max of row sums + AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED + AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm + AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2 }; - //# sourceMappingURL=normType.js.map diff --git a/lib/es5/normType.js.map b/lib/es5/normType.js.map index 1c04b7f..0d7c958 100644 --- a/lib/es5/normType.js.map +++ b/lib/es5/normType.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["normType.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet normType = module.exports = {\n vector1: 1, ///< treats the input as a vector and returns the sum of absolute values\n vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values\n vector2: 3, ///< treats the input as a vector and returns euclidean norm\n vectorP: 4, ///< treats the input as a vector and returns the p-norm\n matrix1: 5, ///< return the max of column sums\n matrixInf: 6, ///< return the max of row sums\n matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n matrixLPq: 8, ///< returns Lpq-norm\n euclid: 3, ///< The default. Same as vector2\n AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values\n AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values\n AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm\n AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm\n AF_NORM_MATRIX_1: 5, ///< return the max of column sums\n AF_NORM_MATRIX_INF: 6, ///< return the max of row sums\n AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm\n AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2\n};"],"file":"normType.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["normType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;AAC5B,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,QAAM,EAAE,CAAC;AACT,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,qBAAmB,EAAE,CAAC;AACtB,gBAAc,EAAE,CAAC;AAAA,CACpB,CAAC","file":"normType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet normType = module.exports = {\n vector1: 1, ///< treats the input as a vector and returns the sum of absolute values\n vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values\n vector2: 3, ///< treats the input as a vector and returns euclidean norm\n vectorP: 4, ///< treats the input as a vector and returns the p-norm\n matrix1: 5, ///< return the max of column sums\n matrixInf: 6, ///< return the max of row sums\n matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n matrixLPq: 8, ///< returns Lpq-norm\n euclid: 3, ///< The default. Same as vector2\n AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values\n AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values\n AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm\n AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm\n AF_NORM_MATRIX_1: 5, ///< return the max of column sums\n AF_NORM_MATRIX_INF: 6, ///< return the max of row sums\n AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm\n AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/row.js b/lib/es5/row.js index 0ccfa93..cf03613 100644 --- a/lib/es5/row.js +++ b/lib/es5/row.js @@ -1,10 +1,44 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Row(index) { assert(_.isNumber(index)); + this.index = index; } -module.exports = Row; +module.exports = Row; //# sourceMappingURL=row.js.map diff --git a/lib/es5/row.js.map b/lib/es5/row.js.map index d402d93..ea2deaf 100644 --- a/lib/es5/row.js.map +++ b/lib/es5/row.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["row.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Row(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Row;"],"file":"row.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["row.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"row.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Row(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Row;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/rows.js b/lib/es5/rows.js index 87c8bc0..1f1034a 100644 --- a/lib/es5/rows.js +++ b/lib/es5/rows.js @@ -1,12 +1,46 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Rows(firstIndex, lastIndex) { assert(_.isNumber(firstIndex)); assert(_.isNumber(lastIndex)); + this.firstIndex = firstIndex; this.lastIndex = lastIndex; } -module.exports = Rows; +module.exports = Rows; //# sourceMappingURL=rows.js.map diff --git a/lib/es5/rows.js.map b/lib/es5/rows.js.map index 60140dd..324d334 100644 --- a/lib/es5/rows.js.map +++ b/lib/es5/rows.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["rows.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Rows(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Rows;"],"file":"rows.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["rows.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"rows.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Rows(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Rows;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/scope.js b/lib/es5/scope.js index bf31b76..399c6a9 100644 --- a/lib/es5/scope.js +++ b/lib/es5/scope.js @@ -1,80 +1,87 @@ "use strict"; + var Bluebird = require("bluebird"); var _ = require("lodash"); + var temporaries = []; + function scope(f) { - if (_.isFunction(f)) { - scope.begin(); - try { - var result = f.call(scope); - if (_.isObject(result) && _.isFunction(result.then)) { - return Bluebird.resolve(result).then(function() { - return scope; - }).finally(function() { - scope.end(); - }); - } else { - scope.end(); - return scope; - } - } catch (e) { - scope.end(); - throw e; + if (_.isFunction(f)) { + scope.begin(); + try { + var result = f.call(scope); + if (_.isObject(result) && _.isFunction(result.then)) { + return Bluebird.resolve(result).then(function () { + return scope; + }).finally(function () { + scope.end(); + }); + } else { + scope.end(); + return scope; + } + } catch (e) { + scope.end(); + throw e; + } } - } } -scope.begin = function() { - temporaries.push(new Set()); - return scope; + +scope.begin = function () { + temporaries.push(new Set()); + return scope; }; -scope.end = function() { - if (temporaries.length) { - var set = temporaries[temporaries.length - 1]; - temporaries.length--; - free(set); - } - return scope; + +scope.end = function () { + if (temporaries.length) { + var set = temporaries[temporaries.length - 1]; + temporaries.length--; + free(set); + } + return scope; }; -scope.register = function(array) { - if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { - var set = temporaries[temporaries.length - 1]; - set.add(array); - } + +scope.register = function (array) { + if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { + var set = temporaries[temporaries.length - 1]; + set.add(array); + } }; -scope.result = function(array) { - if (temporaries.length && _.isObject(array)) { - var set = temporaries[temporaries.length - 1]; - set.delete(array); - } - return scope; + +scope.result = function (array) { + if (temporaries.length && _.isObject(array)) { + var set = temporaries[temporaries.length - 1]; + set.delete(array); + } + return scope; }; + function free(arrays) { - var $__3 = true; - var $__4 = false; - var $__5 = undefined; - try { - for (var $__1 = void 0, - $__0 = (arrays.values())[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { - var array = $__1.value; - { - array.free(); - } - } - } catch ($__6) { - $__4 = true; - $__5 = $__6; - } finally { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } + for (var _iterator = arrays.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var array = _step.value; + + array.free(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; } finally { - if ($__4) { - throw $__5; - } + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } - } } -module.exports = scope; +module.exports = scope; //# sourceMappingURL=scope.js.map diff --git a/lib/es5/scope.js.map b/lib/es5/scope.js.map index d2384d2..8c925af 100644 --- a/lib/es5/scope.js.map +++ b/lib/es5/scope.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["scope.js"],"sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function() {\n return scope;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return scope;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"file":"scope.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["scope.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAE1B,IAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;AACd,QAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,YAAI;AACA,gBAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,gBAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjD,uBAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAC1B,IAAI,CAAC,YAAW;AACb,2BAAO,KAAK,CAAC;iBAChB,CAAC,CACD,OAAO,CAAC,YAAW;AAChB,yBAAK,CAAC,GAAG,EAAE,CAAC;iBACf,CAAC,CAAC;aACV,MACI;AACD,qBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,uBAAO,KAAK,CAAC;aAChB;SACJ,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,kBAAM,CAAC,CAAC;SACX;KACJ;CACJ;;AAED,KAAK,CAAC,KAAK,GAAG,YAAW;AACrB,eAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,GAAG,GAAG,YAAW;AACnB,QAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,mBAAW,CAAC,MAAM,EAAE,CAAC;AACrB,YAAI,CAAC,GAAG,CAAC,CAAC;KACb;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,QAAQ,GAAG,UAAS,KAAK,EAAE;AAC7B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAClB;CACJ,CAAC;;AAEF,KAAK,CAAC,MAAM,GAAG,UAAS,KAAK,EAAE;AAC3B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACrB;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,SAAS,IAAI,CAAC,MAAM,EAAE;;;;;;AAClB,6BAAkB,MAAM,CAAC,MAAM,EAAE,8HAAE;gBAA1B,KAAK;;AACV,iBAAK,CAAC,IAAI,EAAE,CAAC;SAChB;;;;;;;;;;;;;;;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","file":"scope.js","sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function() {\n return scope;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return scope;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/seq.js b/lib/es5/seq.js index aca07b5..9b5f50a 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -1,6 +1,39 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Seq(begin, end, step) { assert(_.isNumber(begin)); if (_.isUndefined(end)) { @@ -11,11 +44,13 @@ function Seq(begin, end, step) { } step = step || 1; assert(_.isNumber(step)); + this.begin = begin; this.end = end; this.step = step; + this.isGFor = false; } -module.exports = Seq; +module.exports = Seq; //# sourceMappingURL=seq.js.map diff --git a/lib/es5/seq.js.map b/lib/es5/seq.js.map index 941b75a..ab13264 100644 --- a/lib/es5/seq.js.map +++ b/lib/es5/seq.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["seq.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Seq(begin, end, step) {\n assert(_.isNumber(begin));\n if (_.isUndefined(end)) {\n begin = 0;\n end = begin;\n }\n else {\n assert(_.isNumber(end));\n }\n step = step || 1;\n assert(_.isNumber(step));\n\n this.begin = begin;\n this.end = end;\n this.step = step;\n\n this.isGFor = false;\n}\n\nmodule.exports = Seq;"],"file":"seq.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["seq.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,MAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACpB,SAAK,GAAG,CAAC,CAAC;AACV,OAAG,GAAG,KAAK,CAAC;GACf,MACI;AACD,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;GAC3B;AACD,MAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,MAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,MAAI,CAAC,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"seq.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Seq(begin, end, step) {\n assert(_.isNumber(begin));\n if (_.isUndefined(end)) {\n begin = 0;\n end = begin;\n }\n else {\n assert(_.isNumber(end));\n }\n step = step || 1;\n assert(_.isNumber(step));\n\n this.begin = begin;\n this.end = end;\n this.step = step;\n\n this.isGFor = false;\n}\n\nmodule.exports = Seq;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/source.js b/lib/es5/source.js index b23dee1..2e905eb 100644 --- a/lib/es5/source.js +++ b/lib/es5/source.js @@ -1,9 +1,40 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + "use strict"; + var source = module.exports = { device: 0, host: 1, afDevice: 0, afHost: 1 }; - //# sourceMappingURL=source.js.map diff --git a/lib/es5/source.js.map b/lib/es5/source.js.map index bd641b3..7cf852e 100644 --- a/lib/es5/source.js.map +++ b/lib/es5/source.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["source.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet source = module.exports = {\n device: 0,\n host: 1,\n afDevice: 0,\n afHost: 1\n};"],"file":"source.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["source.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,QAAM,EAAE,CAAC;AACT,MAAI,EAAE,CAAC;AACP,UAAQ,EAAE,CAAC;AACX,QAAM,EAAE,CAAC;CACZ,CAAC","file":"source.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet source = module.exports = {\n device: 0,\n host: 1,\n afDevice: 0,\n afHost: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/ext.js b/lib/es6/ext.js index ae4772a..252309d 100644 --- a/lib/es6/ext.js +++ b/lib/es6/ext.js @@ -107,7 +107,7 @@ function installAsyncAndSync(af, obj, name) { }; args.push(cb); f.apply(self, args); - }) + }); }; let err = null; diff --git a/lib/index.js b/lib/index.js index b295396..2248102 100644 --- a/lib/index.js +++ b/lib/index.js @@ -29,19 +29,17 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict"; - var es6 = true; try { - eval("(function *(){})"); -} catch(err) { + eval("(() => {})()"); +} catch (err) { es6 = false; } -if (es6) { - module.exports = require("./es6"); +var es = es6 ? "es6" : "es5"; + +if (!es6) { + require("babel-polyfill"); } -else { - require("traceur/bin/traceur-runtime"); - module.exports = require("./es5"); -} \ No newline at end of file + +module.exports = require("./" + es); \ No newline at end of file diff --git a/package.json b/package.json index 4fe2fca..6d9f4db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.18.0", + "version": "0.19.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -8,28 +8,32 @@ "url": "https://github.com/arrayfire/arrayfire-js.git" }, "dependencies": { + "babel-polyfill": "^6.2.0", + "bluebird": "^3.0.5", + "lodash": "^3.10.1", "bindings": "*", "cmake-js": "3", - "lodash": "*", "nan": "^2.1.0", - "traceur": "*", "better-assert": "*" }, "scripts": { "install": "cmake-js compile", - "test": "mocha tests" + "test": "mocha tests", + "test-es5": "mocha tests --old" }, "main": "lib/", "devDependencies": { - "bluebird": "*", + "babel": "^6.1.18", + "babel-preset-es2015": "^6.1.18", + "gulp": "^3.9.0", + "gulp-babel": "^6.1.0", + "gulp-sequence": "^0.4.1", + "gulp-sourcemaps": "^1.6.0", + "mocha": "^2.3.4", + "yargs": "^3.30.0", "debug": "*", "fs-extra": "*", - "gulp": "*", - "gulp-sequence": "*", - "gulp-sourcemaps": "*", - "gulp-traceur": "*", "merge2": "*", - "mocha": "*", "performance-now": "*", "ref": "*" } diff --git a/runTests.js b/runTests.js deleted file mode 100644 index 2dec0b1..0000000 --- a/runTests.js +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright (c) 2014-2015, ArrayFire -Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - * Neither the name of the ArrayFire nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -var Mocha = require("mocha"), - fs = require("fs"), - path = require("path"); - -// First, you need to instantiate a Mocha instance. -var mocha = new Mocha; - -// Then, you need to use the method "addFile" on the mocha -// object for each file. -var dir = path.join(__dirname, "tests"); - -// Here is an example: -fs.readdirSync(dir).filter(function(file){ - // Only keep the .js files - return file.substr(-3) === ".js"; - -}).forEach(function(file){ - // Use the method "addFile" to add the file to mocha - mocha.addFile( - path.join(dir, file) - ); -}); - -// Now, you can run the tests. -mocha.run(function(failures){ - process.on("exit", function () { - process.exit(failures); - }); -}); \ No newline at end of file diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 9da76f6..d3c47cb 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -1,4 +1,37 @@ -"use strict"; +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict" +/* global describe,it */ +; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -6,509 +39,542 @@ var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var testExec = require("./testExec"); var float = ref.types.float; -describe("AFArray class and methods", function() { - testExec.run(function(af) { - var AFArray = af.AFArray; - it("should export AFArray constructor", function() { - assert(_.isFunction(AFArray)); - }); - it("should create empty", function() { - var array = new AFArray(); - assert(_.isObject(array)); - assert(array.bytes() === 0); - assert(array.elements() === 0); - assert(array.isempty()); - assert(_.isFunction(array.host)); - assert(_.isFunction(array.hostAsync)); - assert(_.isUndefined(array.hostAsyncAsync)); - assert(_.isFunction(array.hostSync)); - assert(_.isUndefined(array.hostSyncAsync)); - assert(_.isUndefined(array.hostSyncSync)); - assert(_.isUndefined(array.hostAsyncSync)); - }); - it("should fail with one number argument", function() { - try { - var array = new AFArray(1); - assert(false); - } catch (e) {} - }); - it("should create new one dimensional", function() { - var array = new AFArray(10, af.dType.s32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 4); - assert(array.elements() === 10); - assert(array.type() === af.dType.s32); - assert(array.numdims() === 1); - assert(array.dims(0) === 10); - assert(array.dims(1) === 1); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10); - assert(dims.ndims === 1); - assert(dims.values[0] === 10); - assert(dims.values[1] === 1); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === true); - assert(array.isrow() === false); - assert(array.iscolumn() === true); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === false); - assert(array.isrealfloating() === false); - assert(array.isfloating() === false); - assert(array.isinteger() === true); - assert(array.isbool() === false); - }); - it("should create new two dimensional", function() { - var array = new AFArray(10, 20, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 4); - assert(array.elements() === 10 * 20); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 2); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 1); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20); - assert(dims.ndims === 2); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 1); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); - it("should create new three dimensional", function() { - var array = new AFArray(10, 20, 30, af.dType.f32); - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 4); - assert(array.elements() === 10 * 20 * 30); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 3); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 1); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30); - assert(dims.ndims === 3); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 1); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - }); - function verify4(array) { - assert(_.isObject(array)); - assert(array.bytes() === 10 * 20 * 30 * 40 * 4); - assert(array.elements() === 10 * 20 * 30 * 40); - assert(array.type() === af.dType.f32); - assert(array.numdims() === 4); - assert(array.dims(0) === 10); - assert(array.dims(1) === 20); - assert(array.dims(2) === 30); - assert(array.dims(3) === 40); - var dims = array.dims(); - assert(_.isObject(dims)); - assert(dims.elements === 10 * 20 * 30 * 40); - assert(dims.ndims === 4); - assert(dims.values[0] === 10); - assert(dims.values[1] === 20); - assert(dims.values[2] === 30); - assert(dims.values[3] === 40); - assert(array.isempty() === false); - assert(array.isscalar() === false); - assert(array.isvector() === false); - assert(array.isrow() === false); - assert(array.iscolumn() === false); - assert(array.iscomplex() === false); - assert(array.isreal() === true); - assert(array.isdouble() === false); - assert(array.issingle() === true); - assert(array.isrealfloating() === true); - assert(array.isfloating() === true); - assert(array.isinteger() === false); - assert(array.isbool() === false); - } - it("should create new four dimensional", function() { - var array = new AFArray(10, 20, 30, 40, af.dType.f32); - verify4(array); - }); - it("should create new four dimensional from dim4", function() { - var array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32); - verify4(array); - }); - it("should create new four dimensional from dim4 array", function() { - var array = new AFArray([10, 20, 30, 40], af.dType.f32); - verify4(array); - }); - it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__11() { - var int, - count, - buff, - v$__1, - array, - buff2, - v$__2, - v1, - v2, - array2, - buff3, - v$__3, - v1$__4, - v2$__5, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - int = ref.types.int; - count = 10; - buff = new Buffer(int.size * count); - for (v$__1 = 0; v$__1 < count; v$__1++) { - int.set(buff, v$__1 * int.size, v$__1 * v$__1); - } - assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createAsync)); - $ctx.state = 34; - break; - case 34: - $ctx.state = 2; - return AFArray.createAsync(count, af.dType.s32, buff); - case 2: - array = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(array.bytes() === count * int.size); - assert(array.type() === af.dType.s32); - buff2 = new Buffer(int.size * count); - $ctx.state = 36; - break; - case 36: - $ctx.state = 6; - return array.hostAsync(buff2); - case 6: - $ctx.maybeThrow(); - $ctx.state = 8; - break; - case 8: - for (v$__2 = 0; v$__2 < count; v$__2++) { - v1 = int.get(buff, v$__2 * int.size); - v2 = int.get(buff2, v$__2 * int.size); - assert(v1 === v2); - assert(v1 === v$__2 * v$__2); - } - array2 = array.copy(); - assert(array2 instanceof AFArray); - assert(array2.bytes() === array.bytes()); - $ctx.state = 38; - break; - case 38: - $ctx.state = 10; - return array2.hostAsync(); - case 10: - buff3 = $ctx.sent; - $ctx.state = 12; - break; - case 12: - assert(buff3 instanceof Buffer); - assert(buff3.length === int.size * count); - for (v$__3 = 0; v$__3 < count; v$__3++) { - v1$__4 = int.get(buff, v$__3 * int.size); - v2$__5 = int.get(buff3, v$__3 * int.size); - assert(v1$__4 === v2$__5); - assert(v1$__4 === v$__3 * v$__3); - } - $ctx.state = 40; - break; - case 40: - $ctx.state = 14; - return array2.valueAsync(); - case 14: - v = $ctx.sent; - $ctx.state = 16; - break; - case 16: - assert(v === 0.0); - $ctx.state = 42; - break; - case 42: - $ctx.state = 18; - return array2.at(1).valueAsync(); - case 18: - v = $ctx.sent; - $ctx.state = 20; - break; - case 20: - assert(v === 1.0); - $ctx.state = 44; - break; - case 44: - $ctx.state = 22; - return array2.at(2).scalarAsync(); - case 22: - v = $ctx.sent; - $ctx.state = 24; - break; - case 24: - assert(v === 4.0); - $ctx.state = 46; - break; - case 46: - $ctx.state = 26; - return array2.at("end").scalarAsync(); - case 26: - v = $ctx.sent; - $ctx.state = 28; - break; - case 28: - assert(v === 9.0 * 9.0); - $ctx.state = 48; - break; - case 48: - $ctx.state = 30; - return array2.at(af.end - 1).scalarAsync(); - case 30: - v = $ctx.sent; - $ctx.state = 32; - break; - case 32: - assert(v === 8.0 * 8.0); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__11, this); - })); - f().nodeify(done); - }); - it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { - var int = ref.types.int; - var count = 10; - var buff = new Buffer(int.size * count); - for (var v$__6 = 0; v$__6 < count; v$__6++) { - int.set(buff, v$__6 * int.size, v$__6 * v$__6); - } - assert(_.isFunction(AFArray.create)); - assert(_.isFunction(AFArray.createSync)); - var array = AFArray.createSync(count, af.dType.s32, buff); - assert(array.bytes() === count * int.size); - assert(array.type() === af.dType.s32); - var buff2 = new Buffer(int.size * count); - array.hostSync(buff2); - for (var v$__7 = 0; v$__7 < count; v$__7++) { - var v1 = int.get(buff, v$__7 * int.size); - var v2 = int.get(buff2, v$__7 * int.size); - assert(v1 === v2); - assert(v1 === v$__7 * v$__7); - } - var array2 = array.copy(); - assert(array2 instanceof AFArray); - assert(array2.bytes() === array.bytes()); - var buff3 = array2.hostSync(); - assert(buff3 instanceof Buffer); - assert(buff3.length === int.size * count); - for (var v$__8 = 0; v$__8 < count; v$__8++) { - var v1$__9 = int.get(buff, v$__8 * int.size); - var v2$__10 = int.get(buff3, v$__8 * int.size); - assert(v1$__9 === v2$__10); - assert(v1$__9 === v$__8 * v$__8); - } - var v = array2.valueSync(); - assert(v === 0.0); - v = array.at(1).valueSync(); - assert(v === 1.0); - v = array2.at(2).scalarSync(); - assert(v === 4.0); - v = array2.at("end").scalarSync(); - assert(v === 9.0 * 9.0); - v = array2.at(af.end - 1).scalarSync(); - assert(v === 8.0 * 8.0); - }); - it("should be created of a part of another with new dimensions", function(done) { - async($traceurRuntime.initGeneratorFunction(function $__11() { - var arr, - sub, - sub2, - buff; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - sub = arr.at(new af.Seq(3, 6)); - sub2 = new af.AFArray(sub, new af.Dim4(2, 2)); - $ctx.state = 10; - break; - case 10: - $ctx.state = 2; - return sub2.hostAsync(); - case 2: - buff = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - arr.set(3, 2); - arr.set(4, 3); - $ctx.state = 12; - break; - case 12: - $ctx.state = 6; - return sub2.hostAsync(); - case 6: - buff = $ctx.sent; - $ctx.state = 8; - break; - case 8: - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__11, this); - }))().nodeify(done); - }); - describe("RAII", function() { - describe("scope", function() { - it("should exported as a function", function() { - assert(_.isFunction(af.scope)); + +describe("AFArray class and methods", function () { + testExec.run(function (af) { + var AFArray = af.AFArray; + + it("should export AFArray constructor", function () { + assert(_.isFunction(AFArray)); + }); + + it("should create empty", function () { + var array = new AFArray(); + assert(_.isObject(array)); + assert(array.bytes() === 0); + assert(array.elements() === 0); + assert(array.isempty()); + assert(_.isFunction(array.host)); + assert(_.isFunction(array.hostAsync)); + assert(_.isUndefined(array.hostAsyncAsync)); + assert(_.isFunction(array.hostSync)); + assert(_.isUndefined(array.hostSyncAsync)); + assert(_.isUndefined(array.hostSyncSync)); + assert(_.isUndefined(array.hostAsyncSync)); + }); + + it("should fail with one number argument", function () { + try { + var array = new AFArray(1); + assert(false); + } catch (e) {} + }); + + it("should create new one dimensional", function () { + var array = new AFArray(10, af.dType.s32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 4); + assert(array.elements() === 10); + assert(array.type() === af.dType.s32); + assert(array.numdims() === 1); + assert(array.dims(0) === 10); + assert(array.dims(1) === 1); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10); + assert(dims.ndims === 1); + assert(dims.values[0] === 10); + assert(dims.values[1] === 1); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === true); + assert(array.isrow() === false); + assert(array.iscolumn() === true); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === false); + assert(array.isrealfloating() === false); + assert(array.isfloating() === false); + assert(array.isinteger() === true); + assert(array.isbool() === false); }); - it("should support RAII interface", function() { - assert(_.isFunction(af.scope.begin)); - assert(_.isFunction(af.scope.end)); - assert(_.isFunction(af.scope.result)); + + it("should create new two dimensional", function () { + var array = new AFArray(10, 20, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 4); + assert(array.elements() === 10 * 20); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 2); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 1); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20); + assert(dims.ndims === 2); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 1); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); }); - }); - it("should destroy temporaries (sync)", function() { - var arr, - sub; - af.scope(function() { - assert(this === af.scope); - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - sub = arr.at(new af.Seq(3, 6)); - this.result(arr); + + it("should create new three dimensional", function () { + var array = new AFArray(10, 20, 30, af.dType.f32); + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 4); + assert(array.elements() === 10 * 20 * 30); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 3); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 1); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30); + assert(dims.ndims === 3); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 1); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); }); - arr.set(3, 2); - try { - sub.set(0, 2); - assert(false); - } catch (e) { - if (!/free\(\)/.test(e.message)) { - throw e; - } + + function verify4(array) { + assert(_.isObject(array)); + assert(array.bytes() === 10 * 20 * 30 * 40 * 4); + assert(array.elements() === 10 * 20 * 30 * 40); + assert(array.type() === af.dType.f32); + assert(array.numdims() === 4); + assert(array.dims(0) === 10); + assert(array.dims(1) === 20); + assert(array.dims(2) === 30); + assert(array.dims(3) === 40); + var dims = array.dims(); + assert(_.isObject(dims)); + assert(dims.elements === 10 * 20 * 30 * 40); + assert(dims.ndims === 4); + assert(dims.values[0] === 10); + assert(dims.values[1] === 20); + assert(dims.values[2] === 30); + assert(dims.values[3] === 40); + assert(array.isempty() === false); + assert(array.isscalar() === false); + assert(array.isvector() === false); + assert(array.isrow() === false); + assert(array.iscolumn() === false); + assert(array.iscomplex() === false); + assert(array.isreal() === true); + assert(array.isdouble() === false); + assert(array.issingle() === true); + assert(array.isrealfloating() === true); + assert(array.isfloating() === true); + assert(array.isinteger() === false); + assert(array.isbool() === false); } - }); - it("should destroy temporaries (async)", function(done) { - async($traceurRuntime.initGeneratorFunction(function $__11() { - var arr, - sub; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - $ctx.state = 2; - return af.scope(async($traceurRuntime.initGeneratorFunction(function $__12() { - var buff; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - assert(this === af.scope); - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - sub = arr.at(new af.Seq(3, 6)); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return sub.hostAsync(); - case 2: - buff = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - this.result(sub); - $ctx.state = -2; - break; - default: - return $ctx.end(); + + it("should create new four dimensional", function () { + var array = new AFArray(10, 20, 30, 40, af.dType.f32); + verify4(array); + }); + + it("should create new four dimensional from dim4", function () { + var array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32); + verify4(array); + }); + + it("should create new four dimensional from dim4 array", function () { + var array = new AFArray([10, 20, 30, 40], af.dType.f32); + verify4(array); + }); + + it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function (done) { + var f = async(regeneratorRuntime.mark(function _callee() { + var int, count, buff, _v, array, buff2, _v2, v1, v2, array2, buff3, _v3, v; + + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + int = ref.types.int; + count = 10; + buff = new Buffer(int.size * count); + + for (_v = 0; _v < count; _v++) { + int.set(buff, _v * int.size, _v * _v); + } + + assert(_.isFunction(AFArray.create)); + assert(_.isFunction(AFArray.createAsync)); + + _context.next = 8; + return AFArray.createAsync(count, af.dType.s32, buff); + + case 8: + array = _context.sent; + + assert(array.bytes() === count * int.size); + assert(array.type() === af.dType.s32); + + buff2 = new Buffer(int.size * count); + _context.next = 14; + return array.hostAsync(buff2); + + case 14: + for (_v2 = 0; _v2 < count; _v2++) { + v1 = int.get(buff, _v2 * int.size); + v2 = int.get(buff2, _v2 * int.size); + + assert(v1 === v2); + assert(v1 === _v2 * _v2); + } + + array2 = array.copy(); + + assert(array2 instanceof AFArray); + assert(array2.bytes() === array.bytes()); + _context.next = 20; + return array2.hostAsync(); + + case 20: + buff3 = _context.sent; + + assert(buff3 instanceof Buffer); + assert(buff3.length === int.size * count); + for (_v3 = 0; _v3 < count; _v3++) { + v1 = int.get(buff, _v3 * int.size); + v2 = int.get(buff3, _v3 * int.size); + + assert(v1 === v2); + assert(v1 === _v3 * _v3); + } + + // Let's do some indexing: + _context.next = 26; + return array2.valueAsync(); + + case 26: + v = _context.sent; + + assert(v === 0.0); + + _context.next = 30; + return array2.at(1).valueAsync(); + + case 30: + v = _context.sent; + + assert(v === 1.0); + + _context.next = 34; + return array2.at(2).scalarAsync(); + + case 34: + v = _context.sent; + + assert(v === 4.0); + + _context.next = 38; + return array2.at("end").scalarAsync(); + + case 38: + v = _context.sent; + + assert(v === 9.0 * 9.0); + + _context.next = 42; + return array2.at(af.end - 1).scalarAsync(); + + case 42: + v = _context.sent; + + assert(v === 8.0 * 8.0); + + case 44: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + f().nodeify(done); + }); + + it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function () { + var int = ref.types.int; + var count = 10; + var buff = new Buffer(int.size * count); + for (var _v4 = 0; _v4 < count; _v4++) { + int.set(buff, _v4 * int.size, _v4 * _v4); + } + + assert(_.isFunction(AFArray.create)); + assert(_.isFunction(AFArray.createSync)); + + var array = AFArray.createSync(count, af.dType.s32, buff); + assert(array.bytes() === count * int.size); + assert(array.type() === af.dType.s32); + + var buff2 = new Buffer(int.size * count); + array.hostSync(buff2); + for (var _v5 = 0; _v5 < count; _v5++) { + var _v6 = int.get(buff, _v5 * int.size); + var _v7 = int.get(buff2, _v5 * int.size); + assert(_v6 === _v7); + assert(_v6 === _v5 * _v5); + } + + var array2 = array.copy(); + assert(array2 instanceof AFArray); + assert(array2.bytes() === array.bytes()); + var buff3 = array2.hostSync(); + assert(buff3 instanceof Buffer); + assert(buff3.length === int.size * count); + for (var _v8 = 0; _v8 < count; _v8++) { + var _v9 = int.get(buff, _v8 * int.size); + var _v10 = int.get(buff3, _v8 * int.size); + assert(_v9 === _v10); + assert(_v9 === _v8 * _v8); + } + + // Let's do some indexing: + var v = array2.valueSync(); + assert(v === 0.0); + + v = array.at(1).valueSync(); + assert(v === 1.0); + + v = array2.at(2).scalarSync(); + assert(v === 4.0); + + v = array2.at("end").scalarSync(); + assert(v === 9.0 * 9.0); + + v = array2.at(af.end - 1).scalarSync(); + assert(v === 8.0 * 8.0); + }); + + it("should be created of a part of another with new dimensions", function (done) { + async(regeneratorRuntime.mark(function _callee2() { + var arr, sub, sub2, buff; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + arr = new af.AFArray(10, af.dType.f32); + + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + sub2 = new af.AFArray(sub, new af.Dim4(2, 2)); + _context2.next = 8; + return sub2.hostAsync(); + + case 8: + buff = _context2.sent; + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + + arr.set(3, 2); + arr.set(4, 3); + + _context2.next = 15; + return sub2.hostAsync(); + + case 15: + buff = _context2.sent; + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + + case 18: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + }))().nodeify(done); + }); + + describe("RAII", function () { + describe("scope", function () { + it("should exported as a function", function () { + assert(_.isFunction(af.scope)); + }); + + it("should support RAII interface", function () { + assert(_.isFunction(af.scope.begin)); + assert(_.isFunction(af.scope.end)); + assert(_.isFunction(af.scope.result)); + assert(_.isFunction(af.scope.register)); + }); + + it("should destroy temporaries (sync)", function () { + var arr = undefined, + sub = undefined; + af.scope(function () { + assert(this === af.scope); + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + + this.result(arr); + }); + + arr.set(3, 2); + + try { + sub.set(0, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; } - }, $__12, this); - }))); - case 2: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 4: - try { + } + }); + + it("should destroy temporaries (async)", function (done) { + async(regeneratorRuntime.mark(function _callee4() { + var arr, sub; + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + arr = undefined, sub = undefined; + _context4.next = 3; + return af.scope(async(regeneratorRuntime.mark(function _callee3() { + var buff; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + assert(this === af.scope); + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + + _context3.next = 8; + return sub.hostAsync(); + + case 8: + buff = _context3.sent; + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + + this.result(sub); + + case 12: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + }))); + + case 3: + _context4.prev = 3; + + arr.set(3, 2); + assert(false); + _context4.next = 12; + break; + + case 8: + _context4.prev = 8; + _context4.t0 = _context4["catch"](3); + + if (/free\(\)/.test(_context4.t0.message)) { + _context4.next = 12; + break; + } + + throw _context4.t0; + + case 12: + + sub.set(0, 2); + + case 13: + case "end": + return _context4.stop(); + } + } + }, _callee4, this, [[3, 8]]); + }))().asCallback(done); + }); + + it("should destroy registered arrays", function () { + var arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + var sub = arr.at(new af.Seq(3, 6)); + + af.scope(function () { + assert(this === af.scope); + + sub.set(0, 0); + + // PArt of the scope, hence will be destroyed. + this.register(sub); + }); + arr.set(3, 2); - assert(false); - } catch (e) { - if (!/free\(\)/.test(e.message)) { - throw e; + + try { + sub.set(0, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } } - } - sub.set(0, 2); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__11, this); - }))().asCallback(done); - }); + }); + }); + }); }); - }); }); - //# sourceMappingURL=afArrayTests.js.map diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index 927cdf1..e58d77a 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["afArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n });\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n }));\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n });\n });\n});"],"file":"afArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n assert(_.isFunction(af.scope.register));\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n }));\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n\n it(\"should destroy registered arrays\", function() {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n\n af.scope(function() {\n assert(this === af.scope);\n\n sub.set(0, 0);\n\n // PArt of the scope, hence will be destroyed.\n this.register(sub);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index af78bd6..796ed44 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -1,4 +1,37 @@ -"use strict"; +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict" +/* global describe,it */ +; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -7,135 +40,126 @@ var async = Bluebird.coroutine; var int = ref.types.int; var float = ref.types.float; var testExec = require("./testExec"); -describe("Functions to create arrays", function() { - testExec.run(function(af) { - describe("randu", function() { - it("should yield uniform random int array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randu(2, 4, af.dType.s32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * int.size); - for (i = 0; i < data.length / int.size; i++) { - v = int.get(data, i * int.size); - assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); - assert(Math.floor(v) === v); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); - it("should yield uniform random float array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randu([2, 4], af.dType.f32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - for (i = 0; i < data.length / float.size; i++) { - v = float.get(data, i * float.size); - assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1)); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); - }); - describe("randf", function() { - it("should throw error when invoking normal random int array with 2 dimensions", function() { - try { - var array = af.randn(2, 4, af.dType.s32); - return; - } catch (e) { - if (/invalid dtype argument/ig.test(e.message)) { - return; - } else { - throw new Error("This should throw appropriate error."); - } - } - throw new Error("This should throw."); - }); - it("should yield normal random float array with 2 dimensions", function(done) { - var f = async($traceurRuntime.initGeneratorFunction(function $__0() { - var array, - data, - i, - v; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - array = af.randn([2, 4], af.dType.f32); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return array.copyToHostAsync(); - case 2: - data = $ctx.sent; - $ctx.state = 4; - break; - case 4: - assert(data instanceof Buffer); - assert(data.length == 2 * 4 * float.size); - for (i = 0; i < data.length / float.size; i++) { - v = float.get(data, i * float.size); - assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1)); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); - })); - f().nodeify(done); - }); + +describe("Functions to create arrays", function () { + testExec.run(function (af) { + describe("randu", function () { + it("should yield uniform random int array with 2 dimensions", function (done) { + var f = async(regeneratorRuntime.mark(function _callee() { + var array, data, i, v; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + array = af.randu(2, 4, af.dType.s32); + _context.next = 3; + return array.copyToHostAsync(); + + case 3: + data = _context.sent; + + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * int.size); + + for (i = 0; i < data.length / int.size; i++) { + v = int.get(data, i * int.size); + + assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER); + assert(Math.floor(v) === v); + } + + case 7: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + f().nodeify(done); + }); + it("should yield uniform random float array with 2 dimensions", function (done) { + var f = async(regeneratorRuntime.mark(function _callee2() { + var array, data, _i, _v; + + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + array = af.randu([2, 4], af.dType.f32); + _context2.next = 3; + return array.copyToHostAsync(); + + case 3: + data = _context2.sent; + + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + + for (_i = 0; _i < data.length / float.size; _i++) { + _v = float.get(data, _i * float.size); + + assert(_v === 0 || _v === 1.0 || _v > 0 && _v < 1.0 && _v % 1); + } + + case 7: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + f().nodeify(done); + }); + }); + + describe("randf", function () { + it("should throw error when invoking normal random int array with 2 dimensions", function () { + try { + var array = af.randn(2, 4, af.dType.s32); + return; + } catch (e) { + if (/invalid dtype argument/ig.test(e.message)) { + return; + } else { + throw new Error("This should throw appropriate error."); + } + } + throw new Error("This should throw."); + }); + it("should yield normal random float array with 2 dimensions", function (done) { + var f = async(regeneratorRuntime.mark(function _callee3() { + var array, data, _i2, _v2; + + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + array = af.randn([2, 4], af.dType.f32); + _context3.next = 3; + return array.copyToHostAsync(); + + case 3: + data = _context3.sent; + + assert(data instanceof Buffer); + assert(data.length == 2 * 4 * float.size); + + for (_i2 = 0; _i2 < data.length / float.size; _i2++) { + _v2 = float.get(data, _i2 * float.size); + + assert(_v2 === 0 || _v2 > -4.0 && _v2 < 4.0 && _v2 % 1); + } + + case 7: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + f().nodeify(done); + }); + }); }); - }); }); - //# sourceMappingURL=createArrayFunctionTests.js.map diff --git a/tests/es5/createArrayFunctionTests.js.map b/tests/es5/createArrayFunctionTests.js.map index 3084f0e..679a537 100644 --- a/tests/es5/createArrayFunctionTests.js.map +++ b/tests/es5/createArrayFunctionTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["createArrayFunctionTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n });\n});"],"file":"createArrayFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["createArrayFunctionTests.js"],"names":[],"mappings":"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","file":"createArrayFunctionTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index 48b8f31..9224329 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -1,59 +1,94 @@ -"use strict"; +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict" +/* global describe,it */ +; var assert = require("better-assert"); var _ = require("lodash"); var Bluebird = require("bluebird"); var testExec = require("./testExec"); -describe("device methods", function() { - testExec.run(function(af) { - it("should return available devices", function() { - var deviceCount = af.getDeviceCount(); - assert(deviceCount > 0); - var infos = af.getDevices(); - assert(_.isArray(infos)); - assert(infos.length === deviceCount); - var $__3 = true; - var $__4 = false; - var $__5 = undefined; - try { - for (var $__1 = void 0, - $__0 = (infos)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { - var info = $__1.value; - { - assert(_.isString(info.name) && info.name); - assert(_.isString(info.platform) && info.platform); - assert(_.isString(info.compute) && info.compute); - assert(_.isBoolean(info.isDoubleAvailable)); - } - } - } catch ($__6) { - $__4 = true; - $__5 = $__6; - } finally { - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; - } - } - } - }); - it("should do sync with callback", function(done) { - af.sync(done); - }); - it("should do sync with promise", function(done) { - af.syncAsync().nodeify(done); - }); - it("sync should failed if device is out of range", function(done) { - af.syncAsync(100).then(function() { - done(new Error("This should fail!")); - }, function() { - done(); - }); + +describe("device methods", function () { + testExec.run(function (af) { + it("should return available devices", function () { + var deviceCount = af.getDeviceCount(); + assert(deviceCount > 0); + var infos = af.getDevices(); + assert(_.isArray(infos)); + assert(infos.length === deviceCount); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = infos[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var info = _step.value; + + assert(_.isString(info.name) && info.name); + assert(_.isString(info.platform) && info.platform); + assert(_.isString(info.compute) && info.compute); + assert(_.isBoolean(info.isDoubleAvailable)); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }); + + it("should do sync with callback", function (done) { + af.sync(done); + }); + + it("should do sync with promise", function (done) { + af.syncAsync().nodeify(done); + }); + + it("sync should failed if device is out of range", function (done) { + af.syncAsync(100).then(function () { + done(new Error("This should fail!")); + }, function () { + done(); + }); + }); }); - }); }); - //# sourceMappingURL=deviceTests.js.map diff --git a/tests/es5/deviceTests.js.map b/tests/es5/deviceTests.js.map index d144085..acb8ac3 100644 --- a/tests/es5/deviceTests.js.map +++ b/tests/es5/deviceTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["deviceTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet testExec = require(\"./testExec\");\n\ndescribe(\"device methods\", function() {\n testExec.run(function(af) {\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n});\n"],"file":"deviceTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["deviceTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAAY,CAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,gBAAgB,EAAE,YAAW;AAClC,YAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE;AACtB,UAAE,CAAC,iCAAiC,EAAE,YAAW;AAC7C,gBAAI,WAAW,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;AACtC,kBAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACxB,gBAAI,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5B,kBAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;;;;;;AACrC,qCAAiB,KAAK,8HAAE;wBAAf,IAAI;;AACT,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnD,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,0BAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBAC/C;;;;;;;;;;;;;;;SACJ,CAAC,CAAC;;AAEH,UAAE,CAAC,8BAA8B,EAAE,UAAS,IAAI,EAAE;AAC9C,cAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB,CAAC,CAAC;;AAEH,UAAE,CAAC,6BAA6B,EAAE,UAAS,IAAI,EAAE;AAC7C,cAAE,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC,CAAC,CAAC;;AAEH,UAAE,CAAC,8CAA8C,EAAE,UAAS,IAAI,EAAE;AAC9D,cAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACZ,IAAI,CAAC,YAAW;AACb,oBAAI,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;aACxC,EACD,YAAW;AACP,oBAAI,EAAE,CAAC;aACV,CAAC,CAAC;SACV,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"deviceTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet testExec = require(\"./testExec\");\n\ndescribe(\"device methods\", function() {\n testExec.run(function(af) {\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n});\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/index.js b/tests/es5/index.js index e3b5759..6432cb1 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -1,8 +1,39 @@ "use strict"; + +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + require("./deviceTests"); require("./afArrayTests"); require("./createArrayFunctionTests"); require("./mathFunctionTests"); require("./moveAndReorderArrayTests"); - //# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map index 63bf0f3..103c04d 100644 --- a/tests/es5/index.js.map +++ b/tests/es5/index.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["index.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./mathFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");"],"file":"index.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/B,OAAO,CAAC,4BAA4B,CAAC,CAAC","file":"index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./mathFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/mathFunctionTests.js b/tests/es5/mathFunctionTests.js index 60f5989..0c20e8f 100644 --- a/tests/es5/mathFunctionTests.js +++ b/tests/es5/mathFunctionTests.js @@ -1,4 +1,37 @@ -"use strict"; +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +"use strict" +/* global describe,it */ +; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -8,141 +41,141 @@ var int = ref.types.int; var float = ref.types.float; var testExec = require("./testExec"); var testHelpers = require("./testHelpers"); -describe("Math functions", function() { - testExec.run(function(af) { - it("should invoke abs", function() { - testHelpers.testIntfSyncArr(af, af.abs); - }); - it("should invoke arg", function() { - testHelpers.testIntfSyncArr(af, af.arg); - }); - it("should invoke ceil", function() { - testHelpers.testIntfSyncArr(af, af.ceil); - }); - it("should invoke floor", function() { - testHelpers.testIntfSyncArr(af, af.floor); - }); - it("should invoke hypot", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.hypot); - }); - it("should invoke max", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.max); - }); - it("should invoke min", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.min); - }); - it("should invoke mod", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.mod); - }); - it("should invoke round", function() { - testHelpers.testIntfSyncArr(af, af.round); - }); - it("should invoke sign", function() { - testHelpers.testIntfSyncArr(af, af.sign); - }); - it("should invoke trunc", function() { - testHelpers.testIntfSyncArr(af, af.trunc); - }); - it("should invoke rem", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.rem); - }); - it("should invoke acos", function() { - testHelpers.testIntfSyncArr(af, af.acos); - }); - it("should invoke asin", function() { - testHelpers.testIntfSyncArr(af, af.asin); - }); - it("should invoke atan", function() { - testHelpers.testIntfSyncArr(af, af.atan); - }); - it("should invoke atan2", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.atan2); - }); - it("should invoke cos", function() { - testHelpers.testIntfSyncArr(af, af.cos); - }); - it("should invoke sin", function() { - testHelpers.testIntfSyncArr(af, af.sin); - }); - it("should invoke tan", function() { - testHelpers.testIntfSyncArr(af, af.tan); - }); - it("should invoke cbrt", function() { - testHelpers.testIntfSyncArr(af, af.cbrt); - }); - it("should invoke erf", function() { - testHelpers.testIntfSyncArr(af, af.erf); - }); - it("should invoke erfc", function() { - testHelpers.testIntfSyncArr(af, af.erfc); - }); - it("should invoke exp", function() { - testHelpers.testIntfSyncArr(af, af.exp); - }); - it("should invoke expm1", function() { - testHelpers.testIntfSyncArr(af, af.expm1); - }); - it("should invoke factorial", function() { - testHelpers.testIntfSyncArr(af, af.factorial); - }); - it("should invoke lgamma", function() { - testHelpers.testIntfSyncArr(af, af.lgamma); - }); - it("should invoke tgamma", function() { - testHelpers.testIntfSyncArr(af, af.tgamma); - }); - it("should invoke log", function() { - testHelpers.testIntfSyncArr(af, af.log); - }); - it("should invoke log10", function() { - testHelpers.testIntfSyncArr(af, af.log10); - }); - it("should invoke log1p", function() { - testHelpers.testIntfSyncArr(af, af.log1p); - }); - it("should invoke pow", function() { - testHelpers.testIntfSyncArrArr(af, af.pow); - }); - it("should invoke pow2", function() { - testHelpers.testIntfSyncArr(af, af.pow2); - }); - it("should invoke root", function() { - testHelpers.testIntfSyncArrDoubleComb(af, af.root); - }); - it("should invoke sqrt", function() { - testHelpers.testIntfSyncArr(af, af.sqrt); - }); - it("should invoke sigmoid", function() { - testHelpers.testIntfSyncArr(af, af.sigmoid); - }); - it("should invoke acosh", function() { - testHelpers.testIntfSyncArr(af, af.acosh); - }); - it("should invoke asinh", function() { - testHelpers.testIntfSyncArr(af, af.asinh); - }); - it("should invoke atanh", function() { - testHelpers.testIntfSyncArr(af, af.atanh); - }); - it("should invoke cosh", function() { - testHelpers.testIntfSyncArr(af, af.cosh); - }); - it("should invoke sinh", function() { - testHelpers.testIntfSyncArr(af, af.sinh); - }); - it("should invoke complex", function() { - testHelpers.testIntfSyncArr(af, af.complex); - }); - it("should invoke conjg", function() { - testHelpers.testIntfSyncArr(af, af.conjg); - }); - it("should invoke imag", function() { - testHelpers.testIntfSyncArr(af, af.imag); - }); - it("should invoke real", function() { - testHelpers.testIntfSyncArr(af, af.real); + +describe("Math functions", function () { + testExec.run(function (af) { + it("should invoke abs", function () { + testHelpers.testIntfSyncArr(af, af.abs); + }); + it("should invoke arg", function () { + testHelpers.testIntfSyncArr(af, af.arg); + }); + it("should invoke ceil", function () { + testHelpers.testIntfSyncArr(af, af.ceil); + }); + it("should invoke floor", function () { + testHelpers.testIntfSyncArr(af, af.floor); + }); + it("should invoke hypot", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.hypot); + }); + it("should invoke max", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.max); + }); + it("should invoke min", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.min); + }); + it("should invoke mod", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.mod); + }); + it("should invoke round", function () { + testHelpers.testIntfSyncArr(af, af.round); + }); + it("should invoke sign", function () { + testHelpers.testIntfSyncArr(af, af.sign); + }); + it("should invoke trunc", function () { + testHelpers.testIntfSyncArr(af, af.trunc); + }); + it("should invoke rem", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.rem); + }); + it("should invoke acos", function () { + testHelpers.testIntfSyncArr(af, af.acos); + }); + it("should invoke asin", function () { + testHelpers.testIntfSyncArr(af, af.asin); + }); + it("should invoke atan", function () { + testHelpers.testIntfSyncArr(af, af.atan); + }); + it("should invoke atan2", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.atan2); + }); + it("should invoke cos", function () { + testHelpers.testIntfSyncArr(af, af.cos); + }); + it("should invoke sin", function () { + testHelpers.testIntfSyncArr(af, af.sin); + }); + it("should invoke tan", function () { + testHelpers.testIntfSyncArr(af, af.tan); + }); + it("should invoke cbrt", function () { + testHelpers.testIntfSyncArr(af, af.cbrt); + }); + it("should invoke erf", function () { + testHelpers.testIntfSyncArr(af, af.erf); + }); + it("should invoke erfc", function () { + testHelpers.testIntfSyncArr(af, af.erfc); + }); + it("should invoke exp", function () { + testHelpers.testIntfSyncArr(af, af.exp); + }); + it("should invoke expm1", function () { + testHelpers.testIntfSyncArr(af, af.expm1); + }); + it("should invoke factorial", function () { + testHelpers.testIntfSyncArr(af, af.factorial); + }); + it("should invoke lgamma", function () { + testHelpers.testIntfSyncArr(af, af.lgamma); + }); + it("should invoke tgamma", function () { + testHelpers.testIntfSyncArr(af, af.tgamma); + }); + it("should invoke log", function () { + testHelpers.testIntfSyncArr(af, af.log); + }); + it("should invoke log10", function () { + testHelpers.testIntfSyncArr(af, af.log10); + }); + it("should invoke log1p", function () { + testHelpers.testIntfSyncArr(af, af.log1p); + }); + it("should invoke pow", function () { + testHelpers.testIntfSyncArrArr(af, af.pow); + }); + it("should invoke pow2", function () { + testHelpers.testIntfSyncArr(af, af.pow2); + }); + it("should invoke root", function () { + testHelpers.testIntfSyncArrDoubleComb(af, af.root); + }); + it("should invoke sqrt", function () { + testHelpers.testIntfSyncArr(af, af.sqrt); + }); + it("should invoke sigmoid", function () { + testHelpers.testIntfSyncArr(af, af.sigmoid); + }); + it("should invoke acosh", function () { + testHelpers.testIntfSyncArr(af, af.acosh); + }); + it("should invoke asinh", function () { + testHelpers.testIntfSyncArr(af, af.asinh); + }); + it("should invoke atanh", function () { + testHelpers.testIntfSyncArr(af, af.atanh); + }); + it("should invoke cosh", function () { + testHelpers.testIntfSyncArr(af, af.cosh); + }); + it("should invoke sinh", function () { + testHelpers.testIntfSyncArr(af, af.sinh); + }); + it("should invoke complex", function () { + testHelpers.testIntfSyncArr(af, af.complex); + }); + it("should invoke conjg", function () { + testHelpers.testIntfSyncArr(af, af.conjg); + }); + it("should invoke imag", function () { + testHelpers.testIntfSyncArr(af, af.imag); + }); + it("should invoke real", function () { + testHelpers.testIntfSyncArr(af, af.real); + }); }); - }); }); - //# sourceMappingURL=mathFunctionTests.js.map diff --git a/tests/es5/mathFunctionTests.js.map b/tests/es5/mathFunctionTests.js.map index 5e4e1b2..fc6f273 100644 --- a/tests/es5/mathFunctionTests.js.map +++ b/tests/es5/mathFunctionTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["mathFunctionTests.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\nlet testHelpers = require(\"./testHelpers\");\n\ndescribe(\"Math functions\", function () {\n testExec.run(function(af) {\n it(\"should invoke abs\", function () {\n testHelpers.testIntfSyncArr(af, af.abs);\n });\n it(\"should invoke arg\", function () {\n testHelpers.testIntfSyncArr(af, af.arg);\n });\n it(\"should invoke ceil\", function () {\n testHelpers.testIntfSyncArr(af, af.ceil);\n });\n it(\"should invoke floor\", function () {\n testHelpers.testIntfSyncArr(af, af.floor);\n });\n it(\"should invoke hypot\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.hypot);\n });\n it(\"should invoke max\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.max);\n });\n it(\"should invoke min\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.min);\n });\n it(\"should invoke mod\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.mod);\n });\n it(\"should invoke round\", function () {\n testHelpers.testIntfSyncArr(af, af.round);\n });\n it(\"should invoke sign\", function () {\n testHelpers.testIntfSyncArr(af, af.sign);\n });\n it(\"should invoke trunc\", function () {\n testHelpers.testIntfSyncArr(af, af.trunc);\n });\n it(\"should invoke rem\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.rem);\n });\n it(\"should invoke acos\", function () {\n testHelpers.testIntfSyncArr(af, af.acos);\n });\n it(\"should invoke asin\", function () {\n testHelpers.testIntfSyncArr(af, af.asin);\n });\n it(\"should invoke atan\", function () {\n testHelpers.testIntfSyncArr(af, af.atan);\n });\n it(\"should invoke atan2\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.atan2);\n });\n it(\"should invoke cos\", function () {\n testHelpers.testIntfSyncArr(af, af.cos);\n });\n it(\"should invoke sin\", function () {\n testHelpers.testIntfSyncArr(af, af.sin);\n });\n it(\"should invoke tan\", function () {\n testHelpers.testIntfSyncArr(af, af.tan);\n });\n it(\"should invoke cbrt\", function () {\n testHelpers.testIntfSyncArr(af, af.cbrt);\n });\n it(\"should invoke erf\", function () {\n testHelpers.testIntfSyncArr(af, af.erf);\n });\n it(\"should invoke erfc\", function () {\n testHelpers.testIntfSyncArr(af, af.erfc);\n });\n it(\"should invoke exp\", function () {\n testHelpers.testIntfSyncArr(af, af.exp);\n });\n it(\"should invoke expm1\", function () {\n testHelpers.testIntfSyncArr(af, af.expm1);\n });\n it(\"should invoke factorial\", function () {\n testHelpers.testIntfSyncArr(af, af.factorial);\n });\n it(\"should invoke lgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.lgamma);\n });\n it(\"should invoke tgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.tgamma);\n });\n it(\"should invoke log\", function () {\n testHelpers.testIntfSyncArr(af, af.log);\n });\n it(\"should invoke log10\", function () {\n testHelpers.testIntfSyncArr(af, af.log10);\n });\n it(\"should invoke log1p\", function () {\n testHelpers.testIntfSyncArr(af, af.log1p);\n });\n it(\"should invoke pow\", function () {\n testHelpers.testIntfSyncArrArr(af, af.pow);\n });\n it(\"should invoke pow2\", function () {\n testHelpers.testIntfSyncArr(af, af.pow2);\n });\n it(\"should invoke root\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.root);\n });\n it(\"should invoke sqrt\", function () {\n testHelpers.testIntfSyncArr(af, af.sqrt);\n });\n it(\"should invoke sigmoid\", function () {\n testHelpers.testIntfSyncArr(af, af.sigmoid);\n });\n it(\"should invoke acosh\", function () {\n testHelpers.testIntfSyncArr(af, af.acosh);\n });\n it(\"should invoke asinh\", function () {\n testHelpers.testIntfSyncArr(af, af.asinh);\n });\n it(\"should invoke atanh\", function () {\n testHelpers.testIntfSyncArr(af, af.atanh);\n });\n it(\"should invoke cosh\", function () {\n testHelpers.testIntfSyncArr(af, af.cosh);\n });\n it(\"should invoke sinh\", function () {\n testHelpers.testIntfSyncArr(af, af.sinh);\n });\n it(\"should invoke complex\", function () {\n testHelpers.testIntfSyncArr(af, af.complex);\n });\n it(\"should invoke conjg\", function () {\n testHelpers.testIntfSyncArr(af, af.conjg);\n });\n it(\"should invoke imag\", function () {\n testHelpers.testIntfSyncArr(af, af.imag);\n });\n it(\"should invoke real\", function () {\n testHelpers.testIntfSyncArr(af, af.real);\n });\n });\n});"],"file":"mathFunctionTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["mathFunctionTests.js"],"names":[],"mappings":"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","file":"mathFunctionTests.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\nlet testHelpers = require(\"./testHelpers\");\n\ndescribe(\"Math functions\", function () {\n testExec.run(function(af) {\n it(\"should invoke abs\", function () {\n testHelpers.testIntfSyncArr(af, af.abs);\n });\n it(\"should invoke arg\", function () {\n testHelpers.testIntfSyncArr(af, af.arg);\n });\n it(\"should invoke ceil\", function () {\n testHelpers.testIntfSyncArr(af, af.ceil);\n });\n it(\"should invoke floor\", function () {\n testHelpers.testIntfSyncArr(af, af.floor);\n });\n it(\"should invoke hypot\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.hypot);\n });\n it(\"should invoke max\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.max);\n });\n it(\"should invoke min\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.min);\n });\n it(\"should invoke mod\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.mod);\n });\n it(\"should invoke round\", function () {\n testHelpers.testIntfSyncArr(af, af.round);\n });\n it(\"should invoke sign\", function () {\n testHelpers.testIntfSyncArr(af, af.sign);\n });\n it(\"should invoke trunc\", function () {\n testHelpers.testIntfSyncArr(af, af.trunc);\n });\n it(\"should invoke rem\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.rem);\n });\n it(\"should invoke acos\", function () {\n testHelpers.testIntfSyncArr(af, af.acos);\n });\n it(\"should invoke asin\", function () {\n testHelpers.testIntfSyncArr(af, af.asin);\n });\n it(\"should invoke atan\", function () {\n testHelpers.testIntfSyncArr(af, af.atan);\n });\n it(\"should invoke atan2\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.atan2);\n });\n it(\"should invoke cos\", function () {\n testHelpers.testIntfSyncArr(af, af.cos);\n });\n it(\"should invoke sin\", function () {\n testHelpers.testIntfSyncArr(af, af.sin);\n });\n it(\"should invoke tan\", function () {\n testHelpers.testIntfSyncArr(af, af.tan);\n });\n it(\"should invoke cbrt\", function () {\n testHelpers.testIntfSyncArr(af, af.cbrt);\n });\n it(\"should invoke erf\", function () {\n testHelpers.testIntfSyncArr(af, af.erf);\n });\n it(\"should invoke erfc\", function () {\n testHelpers.testIntfSyncArr(af, af.erfc);\n });\n it(\"should invoke exp\", function () {\n testHelpers.testIntfSyncArr(af, af.exp);\n });\n it(\"should invoke expm1\", function () {\n testHelpers.testIntfSyncArr(af, af.expm1);\n });\n it(\"should invoke factorial\", function () {\n testHelpers.testIntfSyncArr(af, af.factorial);\n });\n it(\"should invoke lgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.lgamma);\n });\n it(\"should invoke tgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.tgamma);\n });\n it(\"should invoke log\", function () {\n testHelpers.testIntfSyncArr(af, af.log);\n });\n it(\"should invoke log10\", function () {\n testHelpers.testIntfSyncArr(af, af.log10);\n });\n it(\"should invoke log1p\", function () {\n testHelpers.testIntfSyncArr(af, af.log1p);\n });\n it(\"should invoke pow\", function () {\n testHelpers.testIntfSyncArrArr(af, af.pow);\n });\n it(\"should invoke pow2\", function () {\n testHelpers.testIntfSyncArr(af, af.pow2);\n });\n it(\"should invoke root\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.root);\n });\n it(\"should invoke sqrt\", function () {\n testHelpers.testIntfSyncArr(af, af.sqrt);\n });\n it(\"should invoke sigmoid\", function () {\n testHelpers.testIntfSyncArr(af, af.sigmoid);\n });\n it(\"should invoke acosh\", function () {\n testHelpers.testIntfSyncArr(af, af.acosh);\n });\n it(\"should invoke asinh\", function () {\n testHelpers.testIntfSyncArr(af, af.asinh);\n });\n it(\"should invoke atanh\", function () {\n testHelpers.testIntfSyncArr(af, af.atanh);\n });\n it(\"should invoke cosh\", function () {\n testHelpers.testIntfSyncArr(af, af.cosh);\n });\n it(\"should invoke sinh\", function () {\n testHelpers.testIntfSyncArr(af, af.sinh);\n });\n it(\"should invoke complex\", function () {\n testHelpers.testIntfSyncArr(af, af.complex);\n });\n it(\"should invoke conjg\", function () {\n testHelpers.testIntfSyncArr(af, af.conjg);\n });\n it(\"should invoke imag\", function () {\n testHelpers.testIntfSyncArr(af, af.imag);\n });\n it(\"should invoke real\", function () {\n testHelpers.testIntfSyncArr(af, af.real);\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/moveAndReorderArrayTests.js b/tests/es5/moveAndReorderArrayTests.js index 183af2c..38e80d6 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -1,4 +1,37 @@ -"use strict"; +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict" +/* global describe,it */ +; var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -7,8 +40,8 @@ var async = Bluebird.coroutine; var int = ref.types.int; var float = ref.types.float; var testExec = require("./testExec"); -describe("Functions to create arrays", function() { - testExec.run(function(af) {}); -}); +describe("Functions to create arrays", function () { + testExec.run(function (af) {}); +}); //# sourceMappingURL=moveAndReorderArrayTests.js.map diff --git a/tests/es5/moveAndReorderArrayTests.js.map b/tests/es5/moveAndReorderArrayTests.js.map index 54892f2..ed47878 100644 --- a/tests/es5/moveAndReorderArrayTests.js.map +++ b/tests/es5/moveAndReorderArrayTests.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["moveAndReorderArrayTests.js"],"sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n\n });\n});"],"file":"moveAndReorderArrayTests.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["moveAndReorderArrayTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAAY,CAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,4BAA4B,EAAE,YAAY;AAC/C,UAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE,EAEzB,CAAC,CAAC;CACN,CAAC,CAAC","file":"moveAndReorderArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testExec.js b/tests/es5/testExec.js index f4e5fbb..6d7d31c 100644 --- a/tests/es5/testExec.js +++ b/tests/es5/testExec.js @@ -1,39 +1,74 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + "use strict"; + var af = require("../.."); + function runOn(id, f) { - describe(id + " platform", function() { - var afID = af(id); - f(afID); - }); + describe(id + " platform", function () { + var afID = af(id); + f(afID); + }); } -var testExec = {run: function(f) { - var platfroms = af.supportedPlatforms(); - var $__4 = true; - var $__5 = false; - var $__6 = undefined; - try { - for (var $__2 = void 0, - $__1 = (platfroms)[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { - var pl = $__2.value; - { - runOn(pl, f); - } - } - } catch ($__7) { - $__5 = true; - $__6 = $__7; - } finally { - try { - if (!$__4 && $__1.return != null) { - $__1.return(); - } - } finally { - if ($__5) { - throw $__6; + +var testExec = { + run: function run(f) { + var platfroms = af.supportedPlatforms(); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = platfroms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var pl = _step.value; + + runOn(pl, f); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } - } } - }}; -module.exports = testExec; +}; +module.exports = testExec; //# sourceMappingURL=testExec.js.map diff --git a/tests/es5/testExec.js.map b/tests/es5/testExec.js.map index 3f10b8d..8fcd853 100644 --- a/tests/es5/testExec.js.map +++ b/tests/es5/testExec.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["testExec.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet af = require(\"../..\");\n\nfunction runOn(id, f) {\n describe(id + \" platform\", function () {\n let afID = af(id);\n f(afID);\n });\n}\n\nlet testExec = {\n run: function(f) {\n let platfroms = af.supportedPlatforms();\n for (let pl of platfroms) {\n runOn(pl, f);\n }\n }\n};\n\nmodule.exports = testExec;\n"],"file":"testExec.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["testExec.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE1B,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;AAClB,YAAQ,CAAC,EAAE,GAAG,WAAW,EAAE,YAAY;AACnC,YAAI,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,SAAC,CAAC,IAAI,CAAC,CAAC;KACX,CAAC,CAAC;CACN;;AAED,IAAI,QAAQ,GAAG;AACX,OAAG,EAAE,aAAS,CAAC,EAAE;AACb,YAAI,SAAS,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;;;;;;AACxC,iCAAe,SAAS,8HAAE;oBAAjB,EAAE;;AACP,qBAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChB;;;;;;;;;;;;;;;KACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"testExec.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet af = require(\"../..\");\n\nfunction runOn(id, f) {\n describe(id + \" platform\", function () {\n let afID = af(id);\n f(afID);\n });\n}\n\nlet testExec = {\n run: function(f) {\n let platfroms = af.supportedPlatforms();\n for (let pl of platfroms) {\n runOn(pl, f);\n }\n }\n};\n\nmodule.exports = testExec;\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testHelpers.js b/tests/es5/testHelpers.js index fa21716..6c6bdea 100644 --- a/tests/es5/testHelpers.js +++ b/tests/es5/testHelpers.js @@ -1,48 +1,81 @@ +/* + Copyright (c) 2014-2015, ArrayFire + Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + "use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + var testHelpers = { - testIntfSyncArrDoubleComb: function(af, func) { - var result; - var arr1 = new af.AFArray(10, af.dType.f32); - var arr2 = new af.AFArray(10, af.dType.f32); - result = func(arr1, arr2); - assert(result instanceof af.AFArray); - result = func(arr1, 42); - assert(result instanceof af.AFArray); - result = func(42, arr2); - assert(result instanceof af.AFArray); - try { - func(42, {}); - assert(false); - } catch (e) { - _.noop(e); - } - }, - testIntfSyncArrArr: function(af, func) { - var arr1 = new af.AFArray(10, af.dType.f32); - var arr2 = new af.AFArray(10, af.dType.f32); - var result = func(arr1, arr2); - assert(result instanceof af.AFArray); - try { - func(42, {}); - assert(false); - } catch (e) { - _.noop(e); + testIntfSyncArrDoubleComb: function testIntfSyncArrDoubleComb(af, func) { + var result = undefined; + var arr1 = new af.AFArray(10, af.dType.f32); + var arr2 = new af.AFArray(10, af.dType.f32); + result = func(arr1, arr2); + assert(result instanceof af.AFArray); + result = func(arr1, 42); + assert(result instanceof af.AFArray); + result = func(42, arr2); + assert(result instanceof af.AFArray); + try { + func(42, {}); + assert(false); + } catch (e) { + _.noop(e); + } + }, + testIntfSyncArrArr: function testIntfSyncArrArr(af, func) { + var arr1 = new af.AFArray(10, af.dType.f32); + var arr2 = new af.AFArray(10, af.dType.f32); + var result = func(arr1, arr2); + assert(result instanceof af.AFArray); + try { + func(42, {}); + assert(false); + } catch (e) { + _.noop(e); + } + }, + testIntfSyncArr: function testIntfSyncArr(af, func) { + var arr = new af.AFArray(10, af.dType.f32); + var result = func(arr); + assert(result instanceof af.AFArray); + try { + func({}); + assert(false); + } catch (e) { + _.noop(e); + } } - }, - testIntfSyncArr: function(af, func) { - var arr = new af.AFArray(10, af.dType.f32); - var result = func(arr); - assert(result instanceof af.AFArray); - try { - func({}); - assert(false); - } catch (e) { - _.noop(e); - } - } }; -module.exports = testHelpers; +module.exports = testHelpers; //# sourceMappingURL=testHelpers.js.map diff --git a/tests/es5/testHelpers.js.map b/tests/es5/testHelpers.js.map index 9e0ce60..22f0f53 100644 --- a/tests/es5/testHelpers.js.map +++ b/tests/es5/testHelpers.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["testHelpers.js"],"sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nlet testHelpers = {\n testIntfSyncArrDoubleComb: function(af, func) {\n let result;\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n result = func(arr1, 42);\n assert(result instanceof af.AFArray);\n result = func(42, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArrArr: function(af, func) {\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n let result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArr: function(af, func) {\n let arr = new af.AFArray(10, af.dType.f32);\n let result = func(arr);\n assert(result instanceof af.AFArray);\n try {\n func({});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n }\n};\n\nmodule.exports = testHelpers;"],"file":"testHelpers.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["testHelpers.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,IAAI,WAAW,GAAG;AACd,6BAAyB,EAAE,mCAAS,EAAE,EAAE,IAAI,EAAE;AAC1C,YAAI,MAAM,YAAA,CAAC;AACX,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,sBAAkB,EAAE,4BAAS,EAAE,EAAE,IAAI,EAAE;AACnC,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,mBAAe,EAAE,yBAAS,EAAE,EAAE,IAAI,EAAE;AAChC,YAAI,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,CAAC,CAAC;AACT,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC","file":"testHelpers.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nlet testHelpers = {\n testIntfSyncArrDoubleComb: function(af, func) {\n let result;\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n result = func(arr1, 42);\n assert(result instanceof af.AFArray);\n result = func(42, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArrArr: function(af, func) {\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n let result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArr: function(af, func) {\n let arr = new af.AFArray(10, af.dType.f32);\n let result = func(arr);\n assert(result instanceof af.AFArray);\n try {\n func({});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n }\n};\n\nmodule.exports = testHelpers;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 57138bd..7d12c6f 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -367,40 +367,12 @@ describe("AFArray class and methods", function() { assert(_.isFunction(af.scope.begin)); assert(_.isFunction(af.scope.end)); assert(_.isFunction(af.scope.result)); + assert(_.isFunction(af.scope.register)); }); - }); - - it("should destroy temporaries (sync)", function() { - let arr, sub; - af.scope(function() { - assert(this === af.scope); - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - - sub = arr.at(new af.Seq(3, 6)); - this.result(arr); - }); - - arr.set(3, 2); - - try { - sub.set(0, 2); - assert(false); - } - catch (e) { - if (!/free\(\)/.test(e.message)) { - throw e; - } - } - }); - - it("should destroy temporaries (async)", function(done) { - async(function*() { + it("should destroy temporaries (sync)", function() { let arr, sub; - yield af.scope(async(function* () { + af.scope(function() { assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -409,16 +381,13 @@ describe("AFArray class and methods", function() { sub = arr.at(new af.Seq(3, 6)); - let buff = yield sub.hostAsync(); + this.result(arr); + }); - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - - this.result(sub); - })); + arr.set(3, 2); try { - arr.set(3, 2); + sub.set(0, 2); assert(false); } catch (e) { @@ -426,9 +395,71 @@ describe("AFArray class and methods", function() { throw e; } } + }); + + it("should destroy temporaries (async)", function(done) { + async(function*() { + let arr, sub; + yield af.scope(async(function* () { + assert(this === af.scope); + arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + sub = arr.at(new af.Seq(3, 6)); + + let buff = yield sub.hostAsync(); + + assert(float.get(buff, 0 * float.size) === 1); + assert(float.get(buff, 1 * float.size) === 2); + + this.result(sub); + })); + + try { + arr.set(3, 2); + assert(false); + } + catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + + sub.set(0, 2); + })().asCallback(done); + }); + + it("should destroy registered arrays", function() { + let arr = new af.AFArray(10, af.dType.f32); + arr.set(new af.Col(0), 0); + arr.set(3, 1); + arr.set(4, 2); + + let sub = arr.at(new af.Seq(3, 6)); + + af.scope(function() { + assert(this === af.scope); + + sub.set(0, 0); - sub.set(0, 2); - })().asCallback(done); + // PArt of the scope, hence will be destroyed. + this.register(sub); + }); + + arr.set(3, 2); + + try { + sub.set(0, 2); + assert(false); + } + catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); }); }); }); diff --git a/tests/index.js b/tests/index.js index b295396..591a4d5 100644 --- a/tests/index.js +++ b/tests/index.js @@ -29,19 +29,32 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict"; - -var es6 = true; -try { - eval("(function *(){})"); -} catch(err) { +var yargs = require("yargs") + .options({ + old: { + demand: false, + type: "boolean" + } + }); +var argv = yargs.argv; + +var es6; + +if (argv.old) { es6 = false; } +else { + es6 = true; + try { + eval("(() => {})()"); + } catch (err) { + es6 = false; + } +} -if (es6) { - module.exports = require("./es6"); +if (!es6) { + console.log("Testing in ES5 mode ..."); + require("babel-polyfill"); } -else { - require("traceur/bin/traceur-runtime"); - module.exports = require("./es5"); -} \ No newline at end of file + +require(es6 ? "./es6" : "./es5"); \ No newline at end of file From 02df2bb88b2c87211764c7903a4afed29b1d53c4 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 8 Dec 2015 14:11:14 +0100 Subject: [PATCH 29/45] scope result fixed --- changelog.md | 4 ++++ lib/es5/scope.js | 6 +++--- lib/es5/scope.js.map | 2 +- lib/es6/scope.js | 6 +++--- package.json | 2 +- tests/es5/afArrayTests.js | 34 ++++++++++++++++++++++------------ tests/es5/afArrayTests.js.map | 2 +- tests/es6/afArrayTests.js | 12 ++++++++++-- 8 files changed, 45 insertions(+), 23 deletions(-) diff --git a/changelog.md b/changelog.md index 581cf79..a91fa27 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.19.1 (2015-12-08) + +- FIX: scope returns correct value + # 0.19.0 (2015-12-08) - scope.register exposed as public API (unit test added) diff --git a/lib/es5/scope.js b/lib/es5/scope.js index 399c6a9..fdfd6f1 100644 --- a/lib/es5/scope.js +++ b/lib/es5/scope.js @@ -11,14 +11,14 @@ function scope(f) { try { var result = f.call(scope); if (_.isObject(result) && _.isFunction(result.then)) { - return Bluebird.resolve(result).then(function () { - return scope; + return Bluebird.resolve(result).then(function (r) { + return r; }).finally(function () { scope.end(); }); } else { scope.end(); - return scope; + return result; } } catch (e) { scope.end(); diff --git a/lib/es5/scope.js.map b/lib/es5/scope.js.map index 8c925af..cd85e5f 100644 --- a/lib/es5/scope.js.map +++ b/lib/es5/scope.js.map @@ -1 +1 @@ -{"version":3,"sources":["scope.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAE1B,IAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;AACd,QAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,YAAI;AACA,gBAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,gBAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjD,uBAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAC1B,IAAI,CAAC,YAAW;AACb,2BAAO,KAAK,CAAC;iBAChB,CAAC,CACD,OAAO,CAAC,YAAW;AAChB,yBAAK,CAAC,GAAG,EAAE,CAAC;iBACf,CAAC,CAAC;aACV,MACI;AACD,qBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,uBAAO,KAAK,CAAC;aAChB;SACJ,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,kBAAM,CAAC,CAAC;SACX;KACJ;CACJ;;AAED,KAAK,CAAC,KAAK,GAAG,YAAW;AACrB,eAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,GAAG,GAAG,YAAW;AACnB,QAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,mBAAW,CAAC,MAAM,EAAE,CAAC;AACrB,YAAI,CAAC,GAAG,CAAC,CAAC;KACb;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,QAAQ,GAAG,UAAS,KAAK,EAAE;AAC7B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAClB;CACJ,CAAC;;AAEF,KAAK,CAAC,MAAM,GAAG,UAAS,KAAK,EAAE;AAC3B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACrB;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,SAAS,IAAI,CAAC,MAAM,EAAE;;;;;;AAClB,6BAAkB,MAAM,CAAC,MAAM,EAAE,8HAAE;gBAA1B,KAAK;;AACV,iBAAK,CAAC,IAAI,EAAE,CAAC;SAChB;;;;;;;;;;;;;;;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","file":"scope.js","sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function() {\n return scope;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return scope;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["scope.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAE1B,IAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;AACd,QAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,YAAI;AACA,gBAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,gBAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjD,uBAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAC1B,IAAI,CAAC,UAAS,CAAC,EAAE;AACd,2BAAO,CAAC,CAAC;iBACZ,CAAC,CACD,OAAO,CAAC,YAAW;AAChB,yBAAK,CAAC,GAAG,EAAE,CAAC;iBACf,CAAC,CAAC;aACV,MACI;AACD,qBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,uBAAO,MAAM,CAAC;aACjB;SACJ,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,kBAAM,CAAC,CAAC;SACX;KACJ;CACJ;;AAED,KAAK,CAAC,KAAK,GAAG,YAAW;AACrB,eAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,GAAG,GAAG,YAAW;AACnB,QAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,mBAAW,CAAC,MAAM,EAAE,CAAC;AACrB,YAAI,CAAC,GAAG,CAAC,CAAC;KACb;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,QAAQ,GAAG,UAAS,KAAK,EAAE;AAC7B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAClB;CACJ,CAAC;;AAEF,KAAK,CAAC,MAAM,GAAG,UAAS,KAAK,EAAE;AAC3B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACrB;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,SAAS,IAAI,CAAC,MAAM,EAAE;;;;;;AAClB,6BAAkB,MAAM,CAAC,MAAM,EAAE,8HAAE;gBAA1B,KAAK;;AACV,iBAAK,CAAC,IAAI,EAAE,CAAC;SAChB;;;;;;;;;;;;;;;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","file":"scope.js","sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function(r) {\n return r;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return result;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/scope.js b/lib/es6/scope.js index ab53d40..4f23e6c 100644 --- a/lib/es6/scope.js +++ b/lib/es6/scope.js @@ -11,8 +11,8 @@ function scope(f) { let result = f.call(scope); if (_.isObject(result) && _.isFunction(result.then)) { return Bluebird.resolve(result) - .then(function() { - return scope; + .then(function(r) { + return r; }) .finally(function() { scope.end(); @@ -20,7 +20,7 @@ function scope(f) { } else { scope.end(); - return scope; + return result; } } catch(e) { diff --git a/package.json b/package.json index 6d9f4db..942a6f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.19.0", + "version": "0.19.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index d3c47cb..06798e1 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -447,7 +447,7 @@ describe("AFArray class and methods", function () { it("should destroy temporaries (sync)", function () { var arr = undefined, sub = undefined; - af.scope(function () { + var x = af.scope(function () { assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -457,8 +457,12 @@ describe("AFArray class and methods", function () { sub = arr.at(new af.Seq(3, 6)); this.result(arr); + + return 1; }); + assert(x === 1); + arr.set(3, 2); try { @@ -473,7 +477,7 @@ describe("AFArray class and methods", function () { it("should destroy temporaries (async)", function (done) { async(regeneratorRuntime.mark(function _callee4() { - var arr, sub; + var arr, sub, x; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { @@ -505,7 +509,9 @@ describe("AFArray class and methods", function () { this.result(sub); - case 12: + return _context3.abrupt("return", 1); + + case 13: case "end": return _context3.stop(); } @@ -514,34 +520,38 @@ describe("AFArray class and methods", function () { }))); case 3: - _context4.prev = 3; + x = _context4.sent; + + assert(x === 1); + + _context4.prev = 5; arr.set(3, 2); assert(false); - _context4.next = 12; + _context4.next = 14; break; - case 8: - _context4.prev = 8; - _context4.t0 = _context4["catch"](3); + case 10: + _context4.prev = 10; + _context4.t0 = _context4["catch"](5); if (/free\(\)/.test(_context4.t0.message)) { - _context4.next = 12; + _context4.next = 14; break; } throw _context4.t0; - case 12: + case 14: sub.set(0, 2); - case 13: + case 15: case "end": return _context4.stop(); } } - }, _callee4, this, [[3, 8]]); + }, _callee4, this, [[5, 10]]); }))().asCallback(done); }); diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index e58d77a..e5d6439 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n assert(_.isFunction(af.scope.register));\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n }));\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n\n it(\"should destroy registered arrays\", function() {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n\n af.scope(function() {\n assert(this === af.scope);\n\n sub.set(0, 0);\n\n // PArt of the scope, hence will be destroyed.\n this.register(sub);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAAY,CAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,QAAQ,CAAC,2BAA2B,EAAE,YAAW;AAC7C,YAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE;AACtB,YAAI,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;AAEzB,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;SACjC,CAAC,CAAC;;AAEH,UAAE,CAAC,qBAAqB,EAAE,YAAW;AACjC,gBAAI,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAC1B,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5C,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrC,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3C,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1C,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;;AAEH,UAAE,CAAC,sCAAsC,EAAE,YAAW;AAClD,gBAAI;AACA,oBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,sBAAM,CAAC,KAAK,CAAC,CAAC;aACjB,CACD,OAAO,CAAC,EAAE,EACT;SACJ,CAAC,CAAC;;AAEH,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACjC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,KAAK,CAAC,CAAC;AACzC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,CAAC;AACrC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9C,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACrC,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAClC,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,UAAE,CAAC,qCAAqC,EAAE,YAAW;AACjD,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,iBAAS,OAAO,CAAC,KAAK,EAAE;AACpB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5C,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC;;AAED,UAAE,CAAC,oCAAoC,EAAE,YAAW;AAChD,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtD,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,8CAA8C,EAAE,YAAW;AAC1D,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpE,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,oDAAoD,EAAE,YAAW;AAChE,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,sFAAsF,EAAE,UAAS,IAAI,EAAE;AACtG,gBAAI,CAAC,GAAG,KAAK,yBAAC;oBACN,GAAG,EACD,KAAK,EACP,IAAI,EACC,EAAC,EAON,KAAK,EAIL,KAAK,EAEA,GAAC,EAcF,EAAE,EACF,EAAE,EARN,MAAM,EAGN,KAAK,EAGA,GAAC,EAQN,CAAC;;;;;;AArCD,mCAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG;AACjB,qCAAK,GAAG,EAAE;AACZ,oCAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;;AACvC,qCAAS,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,KAAK,EAAE,EAAC,EAAE,EAAE;AAC5B,uCAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC,GAAG,GAAG,CAAC,IAAI,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;iCACtC;;AAED,sCAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,sCAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;;;uCAExB,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;;;AAA5D,qCAAK;;AACT,sCAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,sCAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAElC,qCAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;;uCAClC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;;;AAC5B,qCAAS,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AACxB,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAChC,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;AACrC,0CAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClB,0CAAM,CAAC,EAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;iCACxB;;AAEG,sCAAM,GAAG,KAAK,CAAC,IAAI,EAAE;;AACzB,sCAAM,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC;AAClC,sCAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;;uCACvB,MAAM,CAAC,SAAS,EAAE;;;AAAhC,qCAAK;;AACT,sCAAM,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC;AAChC,sCAAM,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC1C,qCAAS,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AACxB,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAChC,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;AACrC,0CAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClB,0CAAM,CAAC,EAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;iCACxB;;;AAAA;uCAGa,MAAM,CAAC,UAAU,EAAE;;;AAA7B,iCAAC;;AACL,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;;;AAAnC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;;;AAApC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;;;AAAxC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;;uCAEd,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;;;AAA7C,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;;;;;;;aAC3B,EAAC,CAAC;AACH,aAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrB,CAAC,CAAC;;AAEH,UAAE,CAAC,kFAAkF,EAAE,YAAW;AAC9F,gBAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,gBAAM,KAAK,GAAG,EAAE,CAAC;AACjB,gBAAI,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACxC,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,mBAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAC,CAAC,CAAC;aACtC;;AAED,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEzC,gBAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1D,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEtC,gBAAI,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACzC,iBAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtB,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,sBAAM,CAAC,GAAE,KAAK,GAAE,CAAC,CAAC;AAClB,sBAAM,CAAC,GAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;aACxB;;AAED,gBAAI,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1B,kBAAM,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC;AAClC,kBAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACzC,gBAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9B,kBAAM,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC1C,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAI,IAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,sBAAM,CAAC,GAAE,KAAK,IAAE,CAAC,CAAC;AAClB,sBAAM,CAAC,GAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;aACxB;;;AAAA,AAGD,gBAAI,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAC3B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAC9B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;AAClC,kBAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;AAExB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACvC,kBAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;SAC3B,CAAC,CAAC;;AAEH,UAAE,CAAC,4DAA4D,EAAE,UAAU,IAAI,EAAE;AAC7E,iBAAK,yBAAC;oBACE,GAAG,EAKH,GAAG,EACH,IAAI,EAEJ,IAAI;;;;;AARJ,mCAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;;AAC1C,mCAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEV,mCAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,oCAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;uCAEhC,IAAI,CAAC,SAAS,EAAE;;;AAA7B,oCAAI;;AAER,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE9C,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;;uCAED,IAAI,CAAC,SAAS,EAAE;;;AAA7B,oCAAI;;AAEJ,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;;;;;;;aACjD,EAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACtB,CAAC,CAAC;;AAEH,gBAAQ,CAAC,MAAM,EAAE,YAAW;AACxB,oBAAQ,CAAC,OAAO,EAAE,YAAW;AACzB,kBAAE,CAAC,+BAA+B,EAAE,YAAY;AAC5C,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClC,CAAC,CAAC;;AAEH,kBAAE,CAAC,+BAA+B,EAAE,YAAY;AAC5C,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC3C,CAAC,CAAC;;AAEH,kBAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,wBAAI,GAAG,YAAA;wBAAE,GAAG,YAAA,CAAC;AACb,wBAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,YAAW;AACxB,8BAAM,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,2BAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,2BAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,2BAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAE/B,4BAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAEjB,+BAAO,CAAC,CAAC;qBACZ,CAAC,CAAC;;AAEH,0BAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEhB,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI;AACA,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,8BAAM,CAAC,KAAK,CAAC,CAAC;qBACjB,CACD,OAAO,CAAC,EAAE;AACN,4BAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7B,kCAAM,CAAC,CAAC;yBACX;qBACJ;iBACJ,CAAC,CAAC;;AAEH,kBAAE,CAAC,oCAAoC,EAAE,UAAS,IAAI,EAAE;AACpD,yBAAK,yBAAC;4BACE,GAAG,EAAE,GAAG,EACR,CAAC;;;;;AADD,2CAAG,cAAE,GAAG;;+CACE,EAAE,CAAC,KAAK,CAAC,KAAK,yBAAC;gDASrB,IAAI;;;;;AARR,kEAAM,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,+DAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,+DAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,+DAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,+DAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,+DAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;mEAEd,GAAG,CAAC,SAAS,EAAE;;;AAA5B,gEAAI;;AAER,kEAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,kEAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE9C,gEAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;8FAEV,CAAC;;;;;;;;yCACX,EAAC,CAAC;;;AAjBC,yCAAC;;AAmBL,8CAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;;;AAGZ,2CAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,8CAAM,CAAC,KAAK,CAAC,CAAC;;;;;;;;4CAGT,UAAU,CAAC,IAAI,CAAC,aAAE,OAAO,CAAC;;;;;;;;;AAKnC,2CAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;;;;;;;qBACjB,EAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACzB,CAAC,CAAC;;AAEH,kBAAE,CAAC,kCAAkC,EAAE,YAAW;AAC9C,wBAAI,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,uBAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAEnC,sBAAE,CAAC,KAAK,CAAC,YAAW;AAChB,8BAAM,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;;AAE1B,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;;AAAC,AAGd,4BAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;qBACtB,CAAC,CAAC;;AAEH,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI;AACA,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,8BAAM,CAAC,KAAK,CAAC,CAAC;qBACjB,CACD,OAAO,CAAC,EAAE;AACN,4BAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7B,kCAAM,CAAC,CAAC;yBACX;qBACJ;iBACJ,CAAC,CAAC;aACN,CAAC,CAAC;SACN,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"afArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n assert(_.isFunction(af.scope.register));\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n let x = af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n\n return 1;\n });\n\n assert(x === 1);\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n let x = yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n\n return 1;\n }));\n\n assert(x === 1);\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n\n it(\"should destroy registered arrays\", function() {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n\n af.scope(function() {\n assert(this === af.scope);\n\n sub.set(0, 0);\n\n // PArt of the scope, hence will be destroyed.\n this.register(sub);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 7d12c6f..00a965a 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -372,7 +372,7 @@ describe("AFArray class and methods", function() { it("should destroy temporaries (sync)", function() { let arr, sub; - af.scope(function() { + let x = af.scope(function() { assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -382,8 +382,12 @@ describe("AFArray class and methods", function() { sub = arr.at(new af.Seq(3, 6)); this.result(arr); + + return 1; }); + assert(x === 1); + arr.set(3, 2); try { @@ -400,7 +404,7 @@ describe("AFArray class and methods", function() { it("should destroy temporaries (async)", function(done) { async(function*() { let arr, sub; - yield af.scope(async(function* () { + let x = yield af.scope(async(function* () { assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -415,8 +419,12 @@ describe("AFArray class and methods", function() { assert(float.get(buff, 1 * float.size) === 2); this.result(sub); + + return 1; })); + assert(x === 1); + try { arr.set(3, 2); assert(false); From 4ed5f13fd2a078e9ede99c2dc1c4db1dfe008e64 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 8 Dec 2015 16:37:44 +0100 Subject: [PATCH 30/45] warning fixd --- examples/es6/machine-learning/ann.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 26d3c1b..1351895 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -97,7 +97,7 @@ proto.train = async(function*(input, target, options) { for (let i = 0; i < options.maxEpochs; i++) { const start = now(); for (let j = 0; j < numBatches - 1; j++) { - af.scope(function() { + af.scope(() => { let startPos = j * options.batchSize; let endPos = startPos + options.batchSize - 1; From d9afcc7b619c541f06ee39b723fcd02d3109c7d7 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Thu, 10 Dec 2015 09:24:13 +0100 Subject: [PATCH 31/45] wat --- examples/es6/common/index.js | 9 +-------- examples/es6/machine-learning/ann.js | 5 +++-- examples/es6/machine-learning/mnist.js | 4 ++-- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/examples/es6/common/index.js b/examples/es6/common/index.js index 34e13e9..ff49174 100644 --- a/examples/es6/common/index.js +++ b/examples/es6/common/index.js @@ -67,7 +67,6 @@ let runOnBestDevice = async(function*(f, name) { let platfroms = af.supportedPlatforms(); let order = ["CUDA", "OpenCL", "CPU"]; console.log(`Running ${name} on best available device.\n`); - let onCPU = false; try { if (_(platfroms).contains(order[0])) { yield runOnDevices(order[0], f, 0); @@ -76,17 +75,11 @@ let runOnBestDevice = async(function*(f, name) { yield runOnDevices(order[1], f, 0); } else { - onCPU = true; yield runOnDevices(order[2], f, 0); } } catch (e) { - if (onCPU) { - console.error(e.stack); - } - else { - yield runOnDevices(order[2], f, 0); - } + console.error(e.stack); } }); diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 1351895..04da596 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -33,7 +33,8 @@ proto.addBias = function (input) { proto._calculateError = async(function*(out, pred) { let dif = out.sub(pred); - return Math.sqrt(yield this.af.sumAsync(dif.mul(dif))); + let sq = dif.mul(dif); + return Math.sqrt(yield this.af.sumAsync(sq)); }); proto.forwardPropagate = function (input) { @@ -122,7 +123,7 @@ proto.train = async(function*(input, target, options) { // Check if convergence criteria has been met if (err < options.maxError) { - console.log(`Converged on Epoc: ${i + 1}`); + console.log(`Converged on Epoch: ${i + 1}`); break; } } diff --git a/examples/es6/machine-learning/mnist.js b/examples/es6/machine-learning/mnist.js index 4d78eef..c8f67c9 100644 --- a/examples/es6/machine-learning/mnist.js +++ b/examples/es6/machine-learning/mnist.js @@ -12,7 +12,7 @@ let assert = require("better-assert"); let path = require("path"); let readData = async(function*(f, data) { - let bytesRead = (yield fs.readAsync(f, data, 0, data.length, null))[0]; + let bytesRead = yield fs.readAsync(f, data, 0, data.length, null); if (bytesRead !== data.length) { throw new Error("File reading error!"); } @@ -64,7 +64,7 @@ let readIdx = async(function*(path, type) { let mnist = { setup: async(function*(af, expandLabels, frac) { frac = Math.min(frac || 1.0, 0.8); - let dataRoot = "../../ml_lab/data/mnist"; + let dataRoot = path.resolve(path.join(__dirname, "../../ml_lab/data/mnist")); let AFArray = af.AFArray; let Dim4 = af.Dim4; From cd0723f440de10a870442543a10b4c430c6e9746 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Thu, 10 Dec 2015 16:40:33 +0100 Subject: [PATCH 32/45] ann example fixed --- examples/es6/machine-learning/ann.js | 5 +++-- examples/es6/machine-learning/neuralNetwork.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 04da596..1de0645 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -34,7 +34,8 @@ proto.addBias = function (input) { proto._calculateError = async(function*(out, pred) { let dif = out.sub(pred); let sq = dif.mul(dif); - return Math.sqrt(yield this.af.sumAsync(sq)); + yield this.af.syncAsync(); + return Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements(); }); proto.forwardPropagate = function (input) { @@ -119,7 +120,7 @@ proto.train = async(function*(input, target, options) { })); const end = now(); - console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); + console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); // Check if convergence criteria has been met if (err < options.maxError) { diff --git a/examples/es6/machine-learning/neuralNetwork.js b/examples/es6/machine-learning/neuralNetwork.js index 85fb439..86aee24 100644 --- a/examples/es6/machine-learning/neuralNetwork.js +++ b/examples/es6/machine-learning/neuralNetwork.js @@ -41,7 +41,7 @@ let annDemo = async(function*(af, deviceInfo) { alpha: 1.0, maxEpochs: 300, batchSize: 100, - maxError: 1.0 + maxError: 0.0001 } ); yield af.waitAsync(); From 639991790ec45391738252b582b970912ca2173c Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Tue, 15 Dec 2015 12:33:24 +0100 Subject: [PATCH 33/45] scope's result's result fixed. --- lib/es6/scope.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/es6/scope.js b/lib/es6/scope.js index 4f23e6c..6615116 100644 --- a/lib/es6/scope.js +++ b/lib/es6/scope.js @@ -56,7 +56,7 @@ scope.result = function(array) { let set = temporaries[temporaries.length - 1]; set.delete(array); } - return scope; + return array; }; function free(arrays) { From a126b4d72f87c8fa9add1f6a43074a1d51a5f510 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 28 Dec 2015 13:30:22 +0100 Subject: [PATCH 34/45] 0.19.2 --- changelog.md | 4 + examples/es5/bechmarks/pi.js | 48 +++++------ examples/es5/bechmarks/pi.js.map | 2 +- examples/es5/common/index.js | 53 +++++------- examples/es5/common/index.js.map | 2 +- examples/es5/machine-learning/ann.js | 21 +++-- examples/es5/machine-learning/ann.js.map | 2 +- examples/es5/machine-learning/mnist.js | 4 +- examples/es5/machine-learning/mnist.js.map | 2 +- .../es5/machine-learning/neuralNetwork.js | 2 +- .../es5/machine-learning/neuralNetwork.js.map | 2 +- lib/es5/borderType.js.map | 2 +- lib/es5/cSpace.js.map | 2 +- lib/es5/col.js.map | 2 +- lib/es5/cols.js.map | 2 +- lib/es5/complex.js.map | 2 +- lib/es5/connectivity.js.map | 2 +- lib/es5/convDomain.js.map | 2 +- lib/es5/convMode.js | 36 ++++---- lib/es5/convMode.js.map | 2 +- lib/es5/dim4.js.map | 2 +- lib/es5/dtype.js.map | 2 +- lib/es5/ext.js.map | 2 +- lib/es5/index.js.map | 2 +- lib/es5/interpType.js.map | 2 +- lib/es5/makeGfor.js.map | 2 +- lib/es5/matProp.js.map | 2 +- lib/es5/matchType.js.map | 2 +- lib/es5/normType.js.map | 2 +- lib/es5/row.js.map | 2 +- lib/es5/rows.js.map | 2 +- lib/es5/scope.js | 17 +--- lib/es5/scope.js.map | 2 +- lib/es5/seq.js | 30 +++---- lib/es5/seq.js.map | 2 +- lib/es5/source.js.map | 2 +- lib/es6/scope.js | 18 +--- package.json | 2 +- tests/es5/afArrayTests.js | 86 +------------------ tests/es5/afArrayTests.js.map | 2 +- tests/es5/createArrayFunctionTests.js | 4 +- tests/es5/createArrayFunctionTests.js.map | 2 +- tests/es5/deviceTests.js | 4 +- tests/es5/deviceTests.js.map | 2 +- tests/es5/index.js.map | 2 +- tests/es5/mathFunctionTests.js | 4 +- tests/es5/mathFunctionTests.js.map | 2 +- tests/es5/moveAndReorderArrayTests.js | 4 +- tests/es5/moveAndReorderArrayTests.js.map | 2 +- tests/es5/testExec.js | 54 ++++++------ tests/es5/testExec.js.map | 2 +- tests/es5/testHelpers.js.map | 2 +- tests/es6/afArrayTests.js | 40 +-------- 53 files changed, 178 insertions(+), 323 deletions(-) diff --git a/changelog.md b/changelog.md index a91fa27..d7f13e8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.19.2 (2015-12-28) + +- Removed (mis)feature: scope cannot be async + # 0.19.1 (2015-12-08) - FIX: scope returns correct value diff --git a/examples/es5/bechmarks/pi.js b/examples/es5/bechmarks/pi.js index b9c6492..b97beea 100644 --- a/examples/es5/bechmarks/pi.js +++ b/examples/es5/bechmarks/pi.js @@ -38,35 +38,35 @@ var common = require("../common"); var numberOfPoints = 20000000; var pi = async(regeneratorRuntime.mark(function _callee(af, deviceInfo) { - var AFArray, x, y, dist, numInside, piVal; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - AFArray = af.AFArray; + var AFArray, x, y, dist, numInside, piVal; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + AFArray = af.AFArray; - console.log("Calculating pi on device:\n"); - common.printDeviceInfo(deviceInfo); - console.log(""); + console.log("Calculating pi on device:\n"); + common.printDeviceInfo(deviceInfo); + console.log(""); - x = af.randu(numberOfPoints, af.dtype.f32); - y = af.randu(numberOfPoints, af.dtype.f32); - dist = af.sqrt(x.mul(x).add(y.mul(y))); - _context.next = 9; - return af.sumAsync(dist.lt(1)); + x = af.randu(numberOfPoints, af.dtype.f32); + y = af.randu(numberOfPoints, af.dtype.f32); + dist = af.sqrt(x.mul(x).add(y.mul(y))); + _context.next = 9; + return af.sumAsync(dist.lt(1)); - case 9: - numInside = _context.sent; - piVal = 4.0 * numInside / numberOfPoints; + case 9: + numInside = _context.sent; + piVal = 4.0 * numInside / numberOfPoints; - console.log("PI = " + piVal); + console.log("PI = " + piVal); - case 12: - case "end": - return _context.stop(); - } - } - }, _callee, this); + case 12: + case "end": + return _context.stop(); + } + } + }, _callee, this); })); common.runOnAllPlatforms(pi, "pi example"); diff --git a/examples/es5/bechmarks/pi.js.map b/examples/es5/bechmarks/pi.js.map index 074ce9d..0a29baf 100644 --- a/examples/es5/bechmarks/pi.js.map +++ b/examples/es5/bechmarks/pi.js.map @@ -1 +1 @@ -{"version":3,"sources":["bechmarks/pi.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;;AAElC,IAAM,cAAc,GAAG,QAAQ,CAAC;;AAEhC,IAAI,EAAE,GAAG,KAAK,yBAAC,iBAAU,EAAE,EAAE,UAAU;MAC/B,OAAO,EAMP,CAAC,EACD,CAAC,EACD,IAAI,EACJ,SAAS,EACT,KAAK;;;;;AAVL,iBAAO,GAAG,EAAE,CAAC,OAAO;;AAExB,iBAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC3C,gBAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACnC,iBAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEZ,WAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,WAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,cAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;iBACpB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;AAAzC,mBAAS;AACT,eAAK,GAAG,AAAC,GAAG,GAAI,SAAS,GAAI,cAAc;;AAE/C,iBAAO,CAAC,GAAG,WAAS,KAAK,CAAG,CAAC;;;;;;;;CAChC,EAAC,CAAC;;AAEH,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC","file":"bechmarks/pi.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\n\nconst numberOfPoints = 20000000;\n\nlet pi = async(function*(af, deviceInfo) {\n let AFArray = af.AFArray;\n\n console.log(\"Calculating pi on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n let x = af.randu(numberOfPoints, af.dtype.f32);\n let y = af.randu(numberOfPoints, af.dtype.f32);\n let dist = af.sqrt(x.mul(x).add(y.mul(y)));\n let numInside = yield af.sumAsync(dist.lt(1));\n let piVal = (4.0 * numInside) / numberOfPoints;\n\n console.log(`PI = ${piVal}`);\n});\n\ncommon.runOnAllPlatforms(pi, \"pi example\");\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["bechmarks/pi.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;;AAElC,IAAM,cAAc,GAAG,QAAQ,CAAC;;AAEhC,IAAI,EAAE,GAAG,KAAK,yBAAC,iBAAU,EAAE,EAAE,UAAU;QAC/B,OAAO,EAMP,CAAC,EACD,CAAC,EACD,IAAI,EACJ,SAAS,EACT,KAAK;;;;;AAVL,2BAAO,GAAG,EAAE,CAAC,OAAO;;AAExB,2BAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC3C,0BAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACnC,2BAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEZ,qBAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,qBAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,wBAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;2BACpB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;AAAzC,6BAAS;AACT,yBAAK,GAAG,AAAC,GAAG,GAAI,SAAS,GAAI,cAAc;;AAE/C,2BAAO,CAAC,GAAG,WAAS,KAAK,CAAG,CAAC;;;;;;;;CAChC,EAAC,CAAC;;AAEH,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC","file":"bechmarks/pi.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet common = require(\"../common\");\r\n\r\nconst numberOfPoints = 20000000;\r\n\r\nlet pi = async(function*(af, deviceInfo) {\r\n let AFArray = af.AFArray;\r\n\r\n console.log(\"Calculating pi on device:\\n\");\r\n common.printDeviceInfo(deviceInfo);\r\n console.log(\"\");\r\n\r\n let x = af.randu(numberOfPoints, af.dtype.f32);\r\n let y = af.randu(numberOfPoints, af.dtype.f32);\r\n let dist = af.sqrt(x.mul(x).add(y.mul(y)));\r\n let numInside = yield af.sumAsync(dist.lt(1));\r\n let piVal = (4.0 * numInside) / numberOfPoints;\r\n\r\n console.log(`PI = ${piVal}`);\r\n});\r\n\r\ncommon.runOnAllPlatforms(pi, \"pi example\");\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/common/index.js b/examples/es5/common/index.js index f05227f..673659b 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -207,7 +207,7 @@ var runOnAllPlatforms = async(regeneratorRuntime.mark(function _callee2(f, name) })); var runOnBestDevice = async(regeneratorRuntime.mark(function _callee3(f, name) { - var platfroms, order, onCPU; + var platfroms, order; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { @@ -216,66 +216,53 @@ var runOnBestDevice = async(regeneratorRuntime.mark(function _callee3(f, name) { order = ["CUDA", "OpenCL", "CPU"]; console.log("Running " + name + " on best available device.\n"); - onCPU = false; - _context3.prev = 4; + _context3.prev = 3; if (!_(platfroms).contains(order[0])) { - _context3.next = 10; + _context3.next = 9; break; } - _context3.next = 8; + _context3.next = 7; return runOnDevices(order[0], f, 0); - case 8: - _context3.next = 18; + case 7: + _context3.next = 16; break; - case 10: + case 9: if (!_(platfroms).contains(order[1])) { - _context3.next = 15; + _context3.next = 14; break; } - _context3.next = 13; + _context3.next = 12; return runOnDevices(order[1], f, 0); - case 13: - _context3.next = 18; + case 12: + _context3.next = 16; break; - case 15: - onCPU = true; - _context3.next = 18; + case 14: + _context3.next = 16; return runOnDevices(order[2], f, 0); - case 18: - _context3.next = 28; + case 16: + _context3.next = 21; break; - case 20: - _context3.prev = 20; - _context3.t0 = _context3["catch"](4); - - if (!onCPU) { - _context3.next = 26; - break; - } + case 18: + _context3.prev = 18; + _context3.t0 = _context3["catch"](3); console.error(_context3.t0.stack); - _context3.next = 28; - break; - case 26: - _context3.next = 28; - return runOnDevices(order[2], f, 0); - - case 28: + case 21: case "end": return _context3.stop(); } } - }, _callee3, this, [[4, 20]]); + }, _callee3, this, [[3, 18]]); })); var printDeviceInfo = function printDeviceInfo(deviceInfo) { diff --git a/examples/es5/common/index.js.map b/examples/es5/common/index.js.map index d15949a..a8fa1b7 100644 --- a/examples/es5/common/index.js.map +++ b/examples/es5/common/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["common/index.js"],"names":[],"mappings":"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","file":"common/index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet af = require(\"../../..\");\nlet util = require(\"util\");\nlet now = require(\"performance-now\");\nlet _ = require(\"lodash\");\n\nlet runOnDevices = async(function*(platformID, f, onID) {\n let afOfPlatform = af(platformID);\n for (let deviceInfo of afOfPlatform.getDevices()) {\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\n afOfPlatform.setDevice(deviceInfo.id);\n const start = now();\n yield f(afOfPlatform, deviceInfo);\n const end = now();\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n }\n }\n});\n\nlet runOnAllPlatforms = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\n try {\n for (let id of platfroms) {\n yield runOnDevices(id, f);\n }\n }\n catch (e) {\n console.error(e.stack);\n }\n});\n\nlet runOnBestDevice = async(function*(f, name) {\n let platfroms = af.supportedPlatforms();\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\n console.log(`Running ${name} on best available device.\\n`);\n let onCPU = false;\n try {\n if (_(platfroms).contains(order[0])) {\n yield runOnDevices(order[0], f, 0);\n }\n else if (_(platfroms).contains(order[1])) {\n yield runOnDevices(order[1], f, 0);\n }\n else {\n onCPU = true;\n yield runOnDevices(order[2], f, 0);\n }\n }\n catch (e) {\n if (onCPU) {\n console.error(e.stack);\n }\n else {\n yield runOnDevices(order[2], f, 0);\n }\n }\n});\n\nlet printDeviceInfo = function (deviceInfo) {\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\n};\n\nmodule.exports = {\n runOnAllPlatforms: runOnAllPlatforms,\n runOnBestDevice: runOnBestDevice,\n printDeviceInfo: printDeviceInfo\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["common/index.js"],"names":[],"mappings":"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","file":"common/index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet af = require(\"../../..\");\r\nlet util = require(\"util\");\r\nlet now = require(\"performance-now\");\r\nlet _ = require(\"lodash\");\r\n\r\nlet runOnDevices = async(function*(platformID, f, onID) {\r\n let afOfPlatform = af(platformID);\r\n for (let deviceInfo of afOfPlatform.getDevices()) {\r\n if (_.isUndefined(onID) || onID === deviceInfo.id) {\r\n afOfPlatform.setDevice(deviceInfo.id);\r\n const start = now();\r\n yield f(afOfPlatform, deviceInfo);\r\n const end = now();\r\n console.log(`\\n-- took ${((end - start) / 1000).toFixed(10)} seconds\\n`);\r\n }\r\n }\r\n});\r\n\r\nlet runOnAllPlatforms = async(function*(f, name) {\r\n let platfroms = af.supportedPlatforms();\r\n console.log(`Running ${name} on all supported platfroms: ${platfroms.join(\", \")}\\n`);\r\n try {\r\n for (let id of platfroms) {\r\n yield runOnDevices(id, f);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e.stack);\r\n }\r\n});\r\n\r\nlet runOnBestDevice = async(function*(f, name) {\r\n let platfroms = af.supportedPlatforms();\r\n let order = [\"CUDA\", \"OpenCL\", \"CPU\"];\r\n console.log(`Running ${name} on best available device.\\n`);\r\n try {\r\n if (_(platfroms).contains(order[0])) {\r\n yield runOnDevices(order[0], f, 0);\r\n }\r\n else if (_(platfroms).contains(order[1])) {\r\n yield runOnDevices(order[1], f, 0);\r\n }\r\n else {\r\n yield runOnDevices(order[2], f, 0);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e.stack);\r\n }\r\n});\r\n\r\nlet printDeviceInfo = function (deviceInfo) {\r\n console.log(`ID: ${deviceInfo.id}\\nName: ${deviceInfo.name}\\nPlatform: ${deviceInfo.platform}\\nToolkit: ${deviceInfo.toolkit}\\nCompute: ${deviceInfo.compute}`);\r\n};\r\n\r\nmodule.exports = {\r\n runOnAllPlatforms: runOnAllPlatforms,\r\n runOnBestDevice: runOnBestDevice,\r\n printDeviceInfo: printDeviceInfo\r\n};\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index efcb2b5..cd36490 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -32,21 +32,28 @@ proto.addBias = function (input) { }; proto._calculateError = async(regeneratorRuntime.mark(function _callee(out, pred) { - var dif; + var dif, sq; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: dif = out.sub(pred); - _context.t0 = Math; + sq = dif.mul(dif); _context.next = 4; - return this.af.sumAsync(dif.mul(dif)); + return this.af.syncAsync(); case 4: + _context.t0 = Math; + _context.next = 7; + return this.af.sumAsync(sq); + + case 7: _context.t1 = _context.sent; - return _context.abrupt("return", _context.t0.sqrt.call(_context.t0, _context.t1)); + _context.t2 = _context.t0.sqrt.call(_context.t0, _context.t1); + _context.t3 = sq.elements(); + return _context.abrupt("return", _context.t2 / _context.t3); - case 6: + case 11: case "end": return _context.stop(); } @@ -181,7 +188,7 @@ proto.train = async(regeneratorRuntime.mark(function _callee3(input, target, opt case 13: end = now(); - console.log("Epoch: " + (i + 1) + ", Error: " + err.toFixed(4) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds"); + console.log("Epoch: " + (i + 1) + ", Error: " + err.toFixed(6) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds"); // Check if convergence criteria has been met @@ -190,7 +197,7 @@ proto.train = async(regeneratorRuntime.mark(function _callee3(input, target, opt break; } - console.log("Converged on Epoc: " + (i + 1)); + console.log("Converged on Epoch: " + (i + 1)); return _context3.abrupt("break", 21); case 18: diff --git a/examples/es5/machine-learning/ann.js.map b/examples/es5/machine-learning/ann.js.map index 5cac9e1..acafa87 100644 --- a/examples/es5/machine-learning/ann.js.map +++ b/examples/es5/machine-learning/ann.js.map @@ -1 +1 @@ -{"version":3,"sources":["machine-learning/ann.js"],"names":[],"mappings":"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","file":"machine-learning/ann.js","sourcesContent":["\"use strict\";\n\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet debug = require(\"debug\")(\"af:ann\");\nlet now = require(\"performance-now\");\n\nfunction ANN(af, layers, range) {\n range = range || 0.05;\n this.af = af;\n this.numLayers = layers.length;\n this.signal = [];\n this.weights = [];\n for (let i = 0; i < this.numLayers; i++) {\n this.signal.push(new af.AFArray());\n if (i < this.numLayers - 1) {\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\n this.weights.push(w);\n }\n }\n}\n\nlet proto = ANN.prototype;\n\nproto.deriv = function (out) {\n return out.rhsSub(1).mul(out);\n};\n\nproto.addBias = function (input) {\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\n};\n\nproto._calculateError = async(function*(out, pred) {\n let dif = out.sub(pred);\n return Math.sqrt(yield this.af.sumAsync(dif.mul(dif)));\n});\n\nproto.forwardPropagate = function (input) {\n this.signal[0].set(input);\n for (let i = 0; i < this.numLayers - 1; i++) {\n let self = this;\n this.af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let outVec = self.af.matMul(inVec, self.weights[i]);\n self.signal[i + 1].set(self.af.sigmoid(outVec));\n });\n }\n};\n\nproto.backPropagate = function (target, alpha) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n // Get error for output layer\n af.scope(function() {\n let outVec = self.signal[self.numLayers - 1];\n let err = outVec.sub(target);\n let m = target.dims(0);\n\n for (let i = self.numLayers - 2; i >= 0; i--) {\n af.scope(function() {\n let inVec = self.addBias(self.signal[i]);\n let delta = af.transpose(self.deriv(outVec).mul(err));\n\n // Adjust weights\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\n self.weights[i].addAssign(af.transpose(grad));\n\n // Input to current layer is output of previous\n outVec = self.signal[i];\n err.set(self.af.matMulTT(delta, self.weights[i]));\n\n // Remove the error of bias and propagate backward\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\n });\n }\n });\n};\n\nproto.predict = function (input) {\n this.forwardPropagate(input);\n return this.signal[this.numLayers - 1].copy();\n};\n\nproto.train = async(function*(input, target, options) {\n let self = this;\n let af = self.af;\n let Seq = self.af.Seq;\n\n let numSamples = input.dims(0);\n let numBatches = numSamples / options.batchSize;\n\n let err = 0;\n\n for (let i = 0; i < options.maxEpochs; i++) {\n const start = now();\n for (let j = 0; j < numBatches - 1; j++) {\n af.scope(function() {\n let startPos = j * options.batchSize;\n let endPos = startPos + options.batchSize - 1;\n\n let x = input.at(new Seq(startPos, endPos), af.span);\n let y = target.at(new Seq(startPos, endPos), af.span);\n\n self.forwardPropagate(x);\n self.backPropagate(y, options.alpha);\n });\n }\n\n yield af.scope(async(function*() {\n // Validate with last batch\n let startPos = (numBatches - 1) * options.batchSize;\n let endPos = numSamples - 1;\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\n }));\n\n const end = now();\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\n\n // Check if convergence criteria has been met\n if (err < options.maxError) {\n console.log(`Converged on Epoc: ${i + 1}`);\n break;\n }\n }\n\n return err;\n});\n\nmodule.exports = ANN;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/ann.js"],"names":[],"mappings":"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","file":"machine-learning/ann.js","sourcesContent":["\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet debug = require(\"debug\")(\"af:ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nfunction ANN(af, layers, range) {\r\n range = range || 0.05;\r\n this.af = af;\r\n this.numLayers = layers.length;\r\n this.signal = [];\r\n this.weights = [];\r\n for (let i = 0; i < this.numLayers; i++) {\r\n this.signal.push(new af.AFArray());\r\n if (i < this.numLayers - 1) {\r\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\r\n this.weights.push(w);\r\n }\r\n }\r\n}\r\n\r\nlet proto = ANN.prototype;\r\n\r\nproto.deriv = function (out) {\r\n return out.rhsSub(1).mul(out);\r\n};\r\n\r\nproto.addBias = function (input) {\r\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\r\n};\r\n\r\nproto._calculateError = async(function*(out, pred) {\r\n let dif = out.sub(pred);\r\n let sq = dif.mul(dif);\r\n yield this.af.syncAsync();\r\n return Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements();\r\n});\r\n\r\nproto.forwardPropagate = function (input) {\r\n this.signal[0].set(input);\r\n for (let i = 0; i < this.numLayers - 1; i++) {\r\n let self = this;\r\n this.af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let outVec = self.af.matMul(inVec, self.weights[i]);\r\n self.signal[i + 1].set(self.af.sigmoid(outVec));\r\n });\r\n }\r\n};\r\n\r\nproto.backPropagate = function (target, alpha) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n // Get error for output layer\r\n af.scope(function() {\r\n let outVec = self.signal[self.numLayers - 1];\r\n let err = outVec.sub(target);\r\n let m = target.dims(0);\r\n\r\n for (let i = self.numLayers - 2; i >= 0; i--) {\r\n af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let delta = af.transpose(self.deriv(outVec).mul(err));\r\n\r\n // Adjust weights\r\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\r\n self.weights[i].addAssign(af.transpose(grad));\r\n\r\n // Input to current layer is output of previous\r\n outVec = self.signal[i];\r\n err.set(self.af.matMulTT(delta, self.weights[i]));\r\n\r\n // Remove the error of bias and propagate backward\r\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\r\n });\r\n }\r\n });\r\n};\r\n\r\nproto.predict = function (input) {\r\n this.forwardPropagate(input);\r\n return this.signal[this.numLayers - 1].copy();\r\n};\r\n\r\nproto.train = async(function*(input, target, options) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n let numSamples = input.dims(0);\r\n let numBatches = numSamples / options.batchSize;\r\n\r\n let err = 0;\r\n\r\n for (let i = 0; i < options.maxEpochs; i++) {\r\n const start = now();\r\n for (let j = 0; j < numBatches - 1; j++) {\r\n af.scope(() => {\r\n let startPos = j * options.batchSize;\r\n let endPos = startPos + options.batchSize - 1;\r\n\r\n let x = input.at(new Seq(startPos, endPos), af.span);\r\n let y = target.at(new Seq(startPos, endPos), af.span);\r\n\r\n self.forwardPropagate(x);\r\n self.backPropagate(y, options.alpha);\r\n });\r\n }\r\n\r\n yield af.scope(async(function*() {\r\n // Validate with last batch\r\n let startPos = (numBatches - 1) * options.batchSize;\r\n let endPos = numSamples - 1;\r\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\r\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\r\n }));\r\n\r\n const end = now();\r\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\r\n\r\n // Check if convergence criteria has been met\r\n if (err < options.maxError) {\r\n console.log(`Converged on Epoch: ${i + 1}`);\r\n break;\r\n }\r\n }\r\n\r\n return err;\r\n});\r\n\r\nmodule.exports = ANN;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/mnist.js b/examples/es5/machine-learning/mnist.js index 26bff83..3ea282c 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -21,7 +21,7 @@ var readData = async(regeneratorRuntime.mark(function _callee(f, data) { return fs.readAsync(f, data, 0, data.length, null); case 2: - bytesRead = _context.sent[0]; + bytesRead = _context.sent; if (!(bytesRead !== data.length)) { _context.next = 5; @@ -138,7 +138,7 @@ var mnist = { switch (_context3.prev = _context3.next) { case 0: frac = Math.min(frac || 1.0, 0.8); - dataRoot = "../../ml_lab/data/mnist"; + dataRoot = path.resolve(path.join(__dirname, "../../ml_lab/data/mnist")); AFArray = af.AFArray; Dim4 = af.Dim4; _context3.next = 6; diff --git a/examples/es5/machine-learning/mnist.js.map b/examples/es5/machine-learning/mnist.js.map index 82b6e6c..af2062a 100644 --- a/examples/es5/machine-learning/mnist.js.map +++ b/examples/es5/machine-learning/mnist.js.map @@ -1 +1 @@ -{"version":3,"sources":["machine-learning/mnist.js"],"names":[],"mappings":"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","file":"machine-learning/mnist.js","sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet fs = Bluebird.promisifyAll(require(\"fs-extra\"));\nlet ref = require(\"ref\");\nlet float = ref.types.float;\nlet uint = ref.types.uint;\nlet debug = require(\"debug\")(\"af:mnist\");\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet path = require(\"path\");\n\nlet readData = async(function*(f, data) {\n let bytesRead = (yield fs.readAsync(f, data, 0, data.length, null))[0];\n if (bytesRead !== data.length) {\n throw new Error(\"File reading error!\");\n }\n});\n\nlet readIdx = async(function*(path, type) {\n let file = yield fs.openAsync(path, \"r\");\n try {\n let d = new Buffer(4);\n\n yield readData(file, d);\n\n if (d[2] != 8) {\n throw new Error(\"Unsupported data type\");\n }\n\n const numDims = d[3];\n\n // Read the dimensions\n let elem = 1;\n let dims = [];\n for (let i = 0; i < numDims; i++) {\n yield readData(file, d);\n let dim = d.readUInt32BE();\n elem *= dim;\n dims.push(dim);\n }\n\n // Read the data\n let bdata = new Buffer(elem);\n yield readData(file, bdata);\n let data = new Buffer(bdata.length * type.size);\n for (let i = 0; i < bdata.length; i++) {\n let byte = bdata[i];\n type.set(data, i * type.size, byte);\n }\n\n return {\n numDims: numDims,\n dims: dims,\n data: data\n };\n }\n finally {\n yield fs.closeAsync(file);\n }\n});\n\nlet mnist = {\n setup: async(function*(af, expandLabels, frac) {\n frac = Math.min(frac || 1.0, 0.8);\n let dataRoot = \"../../ml_lab/data/mnist\";\n let AFArray = af.AFArray;\n let Dim4 = af.Dim4;\n\n let imageData = yield readIdx(path.join(dataRoot, \"images-subset\"), float);\n let labelData = yield readIdx(path.join(dataRoot, \"labels-subset\"), uint);\n\n let rIDims = new Dim4(_(imageData.dims).reverse().value());\n let images = yield AFArray.createAsync(rIDims, af.dType.f32, imageData.data);\n\n let r = af.randu(10000, af.dType.f32);\n let cond = r.lt(frac);\n let trainIndices = af.where(cond);\n let testIndices = af.where(cond.not());\n\n let trainImages = af.lookup(images, trainIndices, 2).div(255);\n let testImages = af.lookup(images, testIndices, 2).div(255);\n\n let numClasses = 10;\n let numTrain = trainImages.dims(2);\n let numTest = testImages.dims(2);\n\n debug(`Training sample count: ${numTrain}`);\n debug(`Test sample count: ${numTest}`);\n\n let trainLabels;\n let testLabels;\n\n if (expandLabels) {\n trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32);\n testLabels = af.constant(0, numClasses, numTest, af.dType.f32);\n\n assert(trainIndices.type() === af.dType.u32);\n assert(testIndices.type() === af.dType.u32);\n\n let hTrainIdx = yield trainIndices.hostAsync();\n let hTestIdx = yield testIndices.hostAsync();\n\n for (let i = 0; i < numTrain; i++) {\n let idx = uint.get(hTrainIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n trainLabels.set(label, i, 1);\n }\n\n for (let i = 0; i < numTest; i++) {\n let idx = uint.get(hTestIdx, i * uint.size);\n let label = uint.get(labelData.data, idx * uint.size);\n assert(label >= 0 && label <= 9);\n testLabels.set(label, i, 1);\n }\n }\n else {\n let labels = yield AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data);\n trainLabels = labels.at(trainIndices);\n testLabels = labels.at(testIndices);\n }\n\n return {\n numClasses: numClasses,\n numTrain: numTrain,\n numTest: numTest,\n trainImages: trainImages,\n testImages: testImages,\n trainLabels: trainLabels,\n testLabels: testLabels\n };\n })\n};\n\nmodule.exports = mnist;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/mnist.js"],"names":[],"mappings":"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","file":"machine-learning/mnist.js","sourcesContent":["\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet fs = Bluebird.promisifyAll(require(\"fs-extra\"));\r\nlet ref = require(\"ref\");\r\nlet float = ref.types.float;\r\nlet uint = ref.types.uint;\r\nlet debug = require(\"debug\")(\"af:mnist\");\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\nlet path = require(\"path\");\r\n\r\nlet readData = async(function*(f, data) {\r\n let bytesRead = yield fs.readAsync(f, data, 0, data.length, null);\r\n if (bytesRead !== data.length) {\r\n throw new Error(\"File reading error!\");\r\n }\r\n});\r\n\r\nlet readIdx = async(function*(path, type) {\r\n let file = yield fs.openAsync(path, \"r\");\r\n try {\r\n let d = new Buffer(4);\r\n\r\n yield readData(file, d);\r\n\r\n if (d[2] != 8) {\r\n throw new Error(\"Unsupported data type\");\r\n }\r\n\r\n const numDims = d[3];\r\n\r\n // Read the dimensions\r\n let elem = 1;\r\n let dims = [];\r\n for (let i = 0; i < numDims; i++) {\r\n yield readData(file, d);\r\n let dim = d.readUInt32BE();\r\n elem *= dim;\r\n dims.push(dim);\r\n }\r\n\r\n // Read the data\r\n let bdata = new Buffer(elem);\r\n yield readData(file, bdata);\r\n let data = new Buffer(bdata.length * type.size);\r\n for (let i = 0; i < bdata.length; i++) {\r\n let byte = bdata[i];\r\n type.set(data, i * type.size, byte);\r\n }\r\n\r\n return {\r\n numDims: numDims,\r\n dims: dims,\r\n data: data\r\n };\r\n }\r\n finally {\r\n yield fs.closeAsync(file);\r\n }\r\n});\r\n\r\nlet mnist = {\r\n setup: async(function*(af, expandLabels, frac) {\r\n frac = Math.min(frac || 1.0, 0.8);\r\n let dataRoot = path.resolve(path.join(__dirname, \"../../ml_lab/data/mnist\"));\r\n let AFArray = af.AFArray;\r\n let Dim4 = af.Dim4;\r\n\r\n let imageData = yield readIdx(path.join(dataRoot, \"images-subset\"), float);\r\n let labelData = yield readIdx(path.join(dataRoot, \"labels-subset\"), uint);\r\n\r\n let rIDims = new Dim4(_(imageData.dims).reverse().value());\r\n let images = yield AFArray.createAsync(rIDims, af.dType.f32, imageData.data);\r\n\r\n let r = af.randu(10000, af.dType.f32);\r\n let cond = r.lt(frac);\r\n let trainIndices = af.where(cond);\r\n let testIndices = af.where(cond.not());\r\n\r\n let trainImages = af.lookup(images, trainIndices, 2).div(255);\r\n let testImages = af.lookup(images, testIndices, 2).div(255);\r\n\r\n let numClasses = 10;\r\n let numTrain = trainImages.dims(2);\r\n let numTest = testImages.dims(2);\r\n\r\n debug(`Training sample count: ${numTrain}`);\r\n debug(`Test sample count: ${numTest}`);\r\n\r\n let trainLabels;\r\n let testLabels;\r\n\r\n if (expandLabels) {\r\n trainLabels = af.constant(0, numClasses, numTrain, af.dType.f32);\r\n testLabels = af.constant(0, numClasses, numTest, af.dType.f32);\r\n\r\n assert(trainIndices.type() === af.dType.u32);\r\n assert(testIndices.type() === af.dType.u32);\r\n\r\n let hTrainIdx = yield trainIndices.hostAsync();\r\n let hTestIdx = yield testIndices.hostAsync();\r\n\r\n for (let i = 0; i < numTrain; i++) {\r\n let idx = uint.get(hTrainIdx, i * uint.size);\r\n let label = uint.get(labelData.data, idx * uint.size);\r\n assert(label >= 0 && label <= 9);\r\n trainLabels.set(label, i, 1);\r\n }\r\n\r\n for (let i = 0; i < numTest; i++) {\r\n let idx = uint.get(hTestIdx, i * uint.size);\r\n let label = uint.get(labelData.data, idx * uint.size);\r\n assert(label >= 0 && label <= 9);\r\n testLabels.set(label, i, 1);\r\n }\r\n }\r\n else {\r\n let labels = yield AFArray.createAsync(labelData.dims[0], af.dType.u32, labelData.data);\r\n trainLabels = labels.at(trainIndices);\r\n testLabels = labels.at(testIndices);\r\n }\r\n\r\n return {\r\n numClasses: numClasses,\r\n numTrain: numTrain,\r\n numTest: numTest,\r\n trainImages: trainImages,\r\n testImages: testImages,\r\n trainLabels: trainLabels,\r\n testLabels: testLabels\r\n };\r\n })\r\n};\r\n\r\nmodule.exports = mnist;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 2636f53..2e7be93 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -74,7 +74,7 @@ var annDemo = async(regeneratorRuntime.mark(function _callee2(af, deviceInfo) { alpha: 1.0, maxEpochs: 300, batchSize: 100, - maxError: 1.0 + maxError: 0.0001 }); case 16: diff --git a/examples/es5/machine-learning/neuralNetwork.js.map b/examples/es5/machine-learning/neuralNetwork.js.map index 10bdb68..c02d7ff 100644 --- a/examples/es5/machine-learning/neuralNetwork.js.map +++ b/examples/es5/machine-learning/neuralNetwork.js.map @@ -1 +1 @@ -{"version":3,"sources":["machine-learning/neuralNetwork.js"],"names":[],"mappings":"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","file":"machine-learning/neuralNetwork.js","sourcesContent":["\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet common = require(\"../common\");\nlet mnist = require(\"./mnist\");\nlet ANN = require(\"./ann\");\nlet now = require(\"performance-now\");\n\nlet accuracy = async(function*(af, predicted, target) {\n let pMax = yield af.findMaxAtAsync(predicted, 1);\n let tMax = yield af.findMaxAtAsync(target, 1);\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\n});\n\nlet annDemo = async(function*(af, deviceInfo) {\n console.log(\"Running ANN Demo on device:\\n\");\n common.printDeviceInfo(deviceInfo);\n console.log(\"\");\n\n console.log(\"Setting up training data.\");\n let data = yield mnist.setup(af, true, 0.6);\n\n let featureSize = data.trainImages.elements() / data.numTrain;\n\n // Reshape images into feature vectors\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\n\n let trainTarget = af.transpose(data.trainLabels);\n let testTarget = af.transpose(data.testLabels);\n\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\n\n // Train network\n const start = now();\n yield network.train(\n trainFeats,\n trainTarget,\n {\n alpha: 1.0,\n maxEpochs: 300,\n batchSize: 100,\n maxError: 1.0\n }\n );\n yield af.waitAsync();\n const end = now();\n\n // Run the trained network and test accuracy.\n let trainOutput = network.predict(trainFeats);\n let testOutput = network.predict(testFeats);\n\n console.log(\"Training set:\");\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\n\n console.log(\"Test set:\");\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\n\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\n});\n\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/neuralNetwork.js"],"names":[],"mappings":"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","file":"machine-learning/neuralNetwork.js","sourcesContent":["\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet common = require(\"../common\");\r\nlet mnist = require(\"./mnist\");\r\nlet ANN = require(\"./ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nlet accuracy = async(function*(af, predicted, target) {\r\n let pMax = yield af.findMaxAtAsync(predicted, 1);\r\n let tMax = yield af.findMaxAtAsync(target, 1);\r\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\r\n});\r\n\r\nlet annDemo = async(function*(af, deviceInfo) {\r\n console.log(\"Running ANN Demo on device:\\n\");\r\n common.printDeviceInfo(deviceInfo);\r\n console.log(\"\");\r\n\r\n console.log(\"Setting up training data.\");\r\n let data = yield mnist.setup(af, true, 0.6);\r\n\r\n let featureSize = data.trainImages.elements() / data.numTrain;\r\n\r\n // Reshape images into feature vectors\r\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\r\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\r\n\r\n let trainTarget = af.transpose(data.trainLabels);\r\n let testTarget = af.transpose(data.testLabels);\r\n\r\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\r\n\r\n // Train network\r\n const start = now();\r\n yield network.train(\r\n trainFeats,\r\n trainTarget,\r\n {\r\n alpha: 1.0,\r\n maxEpochs: 300,\r\n batchSize: 100,\r\n maxError: 0.0001\r\n }\r\n );\r\n yield af.waitAsync();\r\n const end = now();\r\n\r\n // Run the trained network and test accuracy.\r\n let trainOutput = network.predict(trainFeats);\r\n let testOutput = network.predict(testFeats);\r\n\r\n console.log(\"Training set:\");\r\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\r\n\r\n console.log(\"Test set:\");\r\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\r\n\r\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\r\n});\r\n\r\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/borderType.js.map b/lib/es5/borderType.js.map index 36631d9..d91100e 100644 --- a/lib/es5/borderType.js.map +++ b/lib/es5/borderType.js.map @@ -1 +1 @@ -{"version":3,"sources":["borderType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,aAAW,EAAE,CAAC;AACd,YAAU,EAAE,CAAC;CAChB,CAAC","file":"borderType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet borderType = module.exports = {\n padZero: 0,\n padSym: 1,\n AF_PAD_ZERO: 0,\n AF_PAD_SYM: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["borderType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,aAAW,EAAE,CAAC;AACd,YAAU,EAAE,CAAC;CAChB,CAAC","file":"borderType.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet borderType = module.exports = {\r\n padZero: 0,\r\n padSym: 1,\r\n AF_PAD_ZERO: 0,\r\n AF_PAD_SYM: 1\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cSpace.js.map b/lib/es5/cSpace.js.map index 6187b34..74cf4d2 100644 --- a/lib/es5/cSpace.js.map +++ b/lib/es5/cSpace.js.map @@ -1 +1 @@ -{"version":3,"sources":["cSpace.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,QAAM,EAAE,CAAC;AAAA,CACZ,CAAC","file":"cSpace.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet cSpace = module.exports = {\n Gray: 0, ///< Grayscale\n RGB: 1, ///< 3-channel RGB\n HSV: 2, ///< 3-channel HSV\n AF_GRAY: 0, ///< Grayscale\n AF_RGB: 1, ///< 3-channel RGB\n AF_HSV: 2 ///< 3-channel HSV\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cSpace.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,QAAM,EAAE,CAAC;AAAA,CACZ,CAAC","file":"cSpace.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet cSpace = module.exports = {\r\n Gray: 0, ///< Grayscale\r\n RGB: 1, ///< 3-channel RGB\r\n HSV: 2, ///< 3-channel HSV\r\n AF_GRAY: 0, ///< Grayscale\r\n AF_RGB: 1, ///< 3-channel RGB\r\n AF_HSV: 2 ///< 3-channel HSV\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/col.js.map b/lib/es5/col.js.map index 65f2231..acaa97b 100644 --- a/lib/es5/col.js.map +++ b/lib/es5/col.js.map @@ -1 +1 @@ -{"version":3,"sources":["col.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"col.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Col(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Col;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["col.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"col.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Col(index) {\r\n assert(_.isNumber(index));\r\n\r\n this.index = index;\r\n}\r\n\r\nmodule.exports = Col;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/cols.js.map b/lib/es5/cols.js.map index adb0b12..d380aac 100644 --- a/lib/es5/cols.js.map +++ b/lib/es5/cols.js.map @@ -1 +1 @@ -{"version":3,"sources":["cols.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"cols.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Cols(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Cols;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cols.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"cols.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Cols(firstIndex, lastIndex) {\r\n assert(_.isNumber(firstIndex));\r\n assert(_.isNumber(lastIndex));\r\n\r\n this.firstIndex = firstIndex;\r\n this.lastIndex = lastIndex;\r\n}\r\n\r\nmodule.exports = Cols;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/complex.js.map b/lib/es5/complex.js.map index cefa7db..6849a23 100644 --- a/lib/es5/complex.js.map +++ b/lib/es5/complex.js.map @@ -1 +1 @@ -{"version":3,"sources":["complex.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;CACpB;;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","file":"complex.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Complex(real, imag) {\n assert(_.isNumber(real));\n assert(_.isNumber(imag));\n\n this.real = real;\n this.imag = imag;\n}\n\nmodule.exports = Complex;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["complex.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;CACpB;;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","file":"complex.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Complex(real, imag) {\r\n assert(_.isNumber(real));\r\n assert(_.isNumber(imag));\r\n\r\n this.real = real;\r\n this.imag = imag;\r\n}\r\n\r\nmodule.exports = Complex;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/connectivity.js.map b/lib/es5/connectivity.js.map index 8f27e13..ca48d12 100644 --- a/lib/es5/connectivity.js.map +++ b/lib/es5/connectivity.js.map @@ -1 +1 @@ -{"version":3,"sources":["connectivity.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG;AAChC,eAAa,EAAE,CAAC;AAChB,eAAa,EAAE,CAAC;AAChB,mBAAiB,EAAE,CAAC;AACpB,mBAAiB,EAAE,CAAC;CACvB,CAAC","file":"connectivity.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet connectivity = module.exports = {\n connectivity4: 4,\n connectivity8: 8,\n AF_CONNECTIVITY_4: 4,\n AF_CONNECTIVITY_8: 8\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["connectivity.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG;AAChC,eAAa,EAAE,CAAC;AAChB,eAAa,EAAE,CAAC;AAChB,mBAAiB,EAAE,CAAC;AACpB,mBAAiB,EAAE,CAAC;CACvB,CAAC","file":"connectivity.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet connectivity = module.exports = {\r\n connectivity4: 4,\r\n connectivity8: 8,\r\n AF_CONNECTIVITY_4: 4,\r\n AF_CONNECTIVITY_8: 8\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convDomain.js.map b/lib/es5/convDomain.js.map index 7a2b447..773626a 100644 --- a/lib/es5/convDomain.js.map +++ b/lib/es5/convDomain.js.map @@ -1 +1 @@ -{"version":3,"sources":["convDomain.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,MAAI,EAAE,CAAC;AACP,SAAO,EAAE,CAAC;AACV,MAAI,EAAE,CAAC;AACP,cAAY,EAAE,CAAC;AACf,iBAAe,EAAE,CAAC;AAClB,cAAY,EAAE,CAAC;AAAA,CAClB,CAAC","file":"convDomain.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convDomain = module.exports = {\n auto: 0, ///< ArrayFire automatically picks the right convolution algorithm\n spatial: 1, ///< Perform convolution in spatial domain\n freq: 2, ///< Perform convolution in frequency domain\n AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm\n AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain\n AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["convDomain.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,MAAI,EAAE,CAAC;AACP,SAAO,EAAE,CAAC;AACV,MAAI,EAAE,CAAC;AACP,cAAY,EAAE,CAAC;AACf,iBAAe,EAAE,CAAC;AAClB,cAAY,EAAE,CAAC;AAAA,CAClB,CAAC","file":"convDomain.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet convDomain = module.exports = {\r\n auto: 0, ///< ArrayFire automatically picks the right convolution algorithm\r\n spatial: 1, ///< Perform convolution in spatial domain\r\n freq: 2, ///< Perform convolution in frequency domain\r\n AF_CONV_AUTO: 0, ///< ArrayFire automatically picks the right convolution algorithm\r\n AF_CONV_SPATIAL: 1, ///< Perform convolution in spatial domain\r\n AF_CONV_FREQ: 2 ///< Perform convolution in frequency domain\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/convMode.js b/lib/es5/convMode.js index aaefa3b..a450cdb 100644 --- a/lib/es5/convMode.js +++ b/lib/es5/convMode.js @@ -32,23 +32,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. "use strict"; var convMode = module.exports = { - /// - /// Output of the convolution is the same size as input - /// - default: 0, - - /// - /// Output of the convolution is signal_len + filter_len - 1 - /// - expand: 1, - /// - /// Output of the convolution is the same size as input - /// - AF_CONV_DEFAULT: 0, - - /// - /// Output of the convolution is signal_len + filter_len - 1 - /// - AF_CONV_EXPAND: 1 + /// + /// Output of the convolution is the same size as input + /// + default: 0, + + /// + /// Output of the convolution is signal_len + filter_len - 1 + /// + expand: 1, + /// + /// Output of the convolution is the same size as input + /// + AF_CONV_DEFAULT: 0, + + /// + /// Output of the convolution is signal_len + filter_len - 1 + /// + AF_CONV_EXPAND: 1 }; //# sourceMappingURL=convMode.js.map diff --git a/lib/es5/convMode.js.map b/lib/es5/convMode.js.map index 467ab19..661e405 100644 --- a/lib/es5/convMode.js.map +++ b/lib/es5/convMode.js.map @@ -1 +1 @@ -{"version":3,"sources":["convMode.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;;;;AAI5B,SAAO,EAAE,CAAC;;;;;AAKV,QAAM,EAAE,CAAC;;;;AAIT,iBAAe,EAAE,CAAC;;;;;AAKlB,gBAAc,EAAE,CAAC;CACpB,CAAC","file":"convMode.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet convMode = module.exports = {\n ///\n /// Output of the convolution is the same size as input\n ///\n default: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n expand: 1,\n ///\n /// Output of the convolution is the same size as input\n ///\n AF_CONV_DEFAULT: 0,\n\n ///\n /// Output of the convolution is signal_len + filter_len - 1\n ///\n AF_CONV_EXPAND: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["convMode.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;;;;AAI5B,WAAO,EAAE,CAAC;;;;;AAKV,UAAM,EAAE,CAAC;;;;AAIT,mBAAe,EAAE,CAAC;;;;;AAKlB,kBAAc,EAAE,CAAC;CACpB,CAAC","file":"convMode.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet convMode = module.exports = {\r\n ///\r\n /// Output of the convolution is the same size as input\r\n ///\r\n default: 0,\r\n\r\n ///\r\n /// Output of the convolution is signal_len + filter_len - 1\r\n ///\r\n expand: 1,\r\n ///\r\n /// Output of the convolution is the same size as input\r\n ///\r\n AF_CONV_DEFAULT: 0,\r\n\r\n ///\r\n /// Output of the convolution is signal_len + filter_len - 1\r\n ///\r\n AF_CONV_EXPAND: 1\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dim4.js.map b/lib/es5/dim4.js.map index a797686..8e5d96a 100644 --- a/lib/es5/dim4.js.map +++ b/lib/es5/dim4.js.map @@ -1 +1 @@ -{"version":3,"sources":["dim4.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAClC,QAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,eAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD;AACD,QAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,KAAK,YAAA,CAAC;AACV,SAAK,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACjC,YAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC1B,kBAAM;SACT;KACJ;AACD,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AACpC,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACrF;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"dim4.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Dim4(dim0, dim1, dim2, dim3) {\n if (_.isArray(dim0)) {\n return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]);\n }\n this.values = [];\n if (_.isNumber(dim0)) { this.values.push(dim0) } else { this.values.push(1); }\n if (_.isNumber(dim1)) { this.values.push(dim1) } else { this.values.push(1); }\n if (_.isNumber(dim2)) { this.values.push(dim2) } else { this.values.push(1); }\n if (_.isNumber(dim3)) { this.values.push(dim3) } else { this.values.push(1); }\n let index;\n for (index = 3; index >= 0; index--) {\n if (this.values[index] !== 1) {\n break;\n }\n }\n this.ndims = this.nDims = index + 1;\n this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3];\n}\n\nmodule.exports = Dim4;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["dim4.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAClC,QAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,eAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD;AACD,QAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,MAAM;AAAE,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE;AAC9E,QAAI,KAAK,YAAA,CAAC;AACV,SAAK,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACjC,YAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC1B,kBAAM;SACT;KACJ;AACD,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AACpC,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACrF;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"dim4.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Dim4(dim0, dim1, dim2, dim3) {\r\n if (_.isArray(dim0)) {\r\n return new Dim4(dim0[0], dim0[1], dim0[2], dim0[3]);\r\n }\r\n this.values = [];\r\n if (_.isNumber(dim0)) { this.values.push(dim0) } else { this.values.push(1); }\r\n if (_.isNumber(dim1)) { this.values.push(dim1) } else { this.values.push(1); }\r\n if (_.isNumber(dim2)) { this.values.push(dim2) } else { this.values.push(1); }\r\n if (_.isNumber(dim3)) { this.values.push(dim3) } else { this.values.push(1); }\r\n let index;\r\n for (index = 3; index >= 0; index--) {\r\n if (this.values[index] !== 1) {\r\n break;\r\n }\r\n }\r\n this.ndims = this.nDims = index + 1;\r\n this.elements = this.values[0] * this.values[1] * this.values[2] * this.values[3];\r\n}\r\n\r\nmodule.exports = Dim4;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/dtype.js.map b/lib/es5/dtype.js.map index 392295a..58e17a2 100644 --- a/lib/es5/dtype.js.map +++ b/lib/es5/dtype.js.map @@ -1 +1 @@ -{"version":3,"sources":["dtype.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG;AACzB,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;CACT,CAAC","file":"dtype.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet dType = module.exports = {\n f32: 0,\n c32: 1,\n f64: 2,\n c64: 3,\n b8: 4,\n s32: 5,\n u32: 6,\n u8: 7,\n s64: 8,\n u64: 9\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["dtype.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG;AACzB,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;AACN,IAAE,EAAE,CAAC;AACL,KAAG,EAAE,CAAC;AACN,KAAG,EAAE,CAAC;CACT,CAAC","file":"dtype.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet dType = module.exports = {\r\n f32: 0,\r\n c32: 1,\r\n f64: 2,\r\n c64: 3,\r\n b8: 4,\r\n s32: 5,\r\n u32: 6,\r\n u8: 7,\r\n s64: 8,\r\n u64: 9\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map index 1999e5b..62ec29a 100644 --- a/lib/es5/ext.js.map +++ b/lib/es5/ext.js.map @@ -1 +1 @@ -{"version":3,"sources":["ext.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAE/B,IAAM,UAAU,GAAG,CAAC,CAAC;AACrB,IAAM,MAAM,GAAG,IAAI,CAAC;;AAEpB,SAAS,kBAAkB,CAAC,CAAC,EAAE;AAC3B,WAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;CACjD;;AAED,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,MAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;CACjB;;AAED,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE;AACxB,WAAO,YAAY;AACf,YAAI,GAAG,CAAC;AACR,YAAI,GAAG,CAAC;AACR,YAAI,IAAI,CAAC;AACT,YAAI,EAAE,GAAG,SAAL,EAAE,CAAa,CAAC,EAAE,CAAC,EAAE;AACrB,eAAG,GAAG,CAAC,CAAC;AACR,eAAG,GAAG,CAAC,CAAC;AACR,gBAAI,GAAG,IAAI,CAAC;SACf,CAAC;;AAEF,YAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAE3C,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAI,GAAG,KAAK,CAAC;AACb,aAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpB,mBAAO,CAAC,IAAI;AAAE,kBAAE,CAAC,SAAS,EAAE,CAAC;aAAA,AAE7B,IAAI,GAAG,EAAE;AACL,oBAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;AAC1B,0BAAM,GAAG,CAAC;iBACb,MACI;AACD,4BAAQ,CAAC,EAAE,CAAC,CAAC;iBAChB;aACJ;SACJ;;AAED,YAAI,GAAG,EAAE,MAAM,GAAG,CAAC;;AAEnB,eAAO,GAAG,CAAC;KACd,CAAC;CACL;;AAED,SAAS,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AACxC,QAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;;;;;;AACrB,iCAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,8HAAE;oBAApB,GAAG;;AACR,mCAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrC;;;;;;;;;;;;;;;;AACD,eAAO;KACV;;AAED,QAAI,IAAI,KAAK,SAAS,EAAE;;AACpB,gBAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,gBAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,oBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE;AACpC,uBAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,KAAK,yBAAC;4BACpB,IAAI;4BACJ,IAAI;4BACJ,IAAI;4BAeJ,GAAG;4BACE,CAAC;;;;;;AAlBN,4CAAI,GAAG,IAAI;AACX,4CAAI,GAAG,CAAC,CAAC,OAAO,OAAW;;AAC3B,4CAAI,GAAG,SAAP,IAAI,GAAe;AACnB,mDAAO,IAAI,QAAQ,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;AAC3C,oDAAI,EAAE,GAAG,SAAL,EAAE,CAAa,CAAC,EAAE,CAAC,EAAE;AACrB,wDAAI,CAAC,EAAE;AACH,8DAAM,CAAC,CAAC,CAAC,CAAC;qDACb,MACI;AACD,+DAAO,CAAC,CAAC,CAAC,CAAC;qDACd;iDACJ,CAAC;AACF,oDAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,iDAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;6CACvB,CAAC,CAAC;yCACN;;AAEG,2CAAG,GAAG,IAAI;AACL,yCAAC,GAAG,CAAC;;;8CAAE,CAAC,GAAG,UAAU,CAAA;;;;;;;+CAET,IAAI,EAAE;;;;;;;;;4CAGd,kBAAkB,aAAG;;;;;;;;AAG1B,gDAAQ,CAAC,EAAE,CAAC,CAAC;AACb,2CAAG,cAAI,CAAC;;;AATgB,yCAAC,EAAE;;;;;8CAY7B,GAAG;;;;;;;;qBACZ,EAAC,CAAC;iBACN;AACD,oBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE;AACnC,uBAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3C;AACD,mBAAG,CAAC,IAAI,CAAC,GAAG,YAAY;AACpB,wBAAI,GAAG,GAAG,IAAI,CAAC;AACf,yBAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,UAAU,EAAE,EAAC,EAAE,EAAE;AACjC,4BAAI;AACA,mCAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;yBACnC,CACD,OAAO,CAAC,EAAE;AACN,gCAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;AACxB,sCAAM,CAAC,CAAC;6BACX;AACD,oCAAQ,CAAC,EAAE,CAAC,CAAC;AACb,+BAAG,GAAG,CAAC,CAAC;yBACX;qBACJ;AACD,0BAAM,GAAG,CAAC;iBACb,CAAC;aACL;;KACJ;CACJ;;AAED,SAAS,GAAG,CAAC,EAAE,EAAE;AACb,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;AAE9C,QAAI,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,GAAI,OAAO,CAAC,SAAS,CAAC,CAAC;;AAEnD,KAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACT,WAAG,EAAE,CAAC,CAAC;AACP,YAAI,EAAE,IAAI;AACV,WAAG,EAAE,CAAC,CAAC;AACP,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,iBAAS,EAAE,OAAO,CAAC,aAAa,CAAC;AACjC,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,oBAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACvC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,kBAAU,EAAE,sBAAY;AACpB,gBAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,gBAAI;AACA,oBAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,oBAAI,MAAM,GAAG,EAAE,CAAC;AAChB,qBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,wBAAI,CAAC,SAAS,CAAC,GAAC,CAAC,CAAC;AAClB,wBAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,wBAAI,CAAC,EAAE,GAAG,GAAC,CAAC;AACZ,0BAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrB;AACD,uBAAO,MAAM,CAAC;aACjB,SACO;AACJ,oBAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAC3B;SACJ;AACD,YAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;AAC/B,aAAK,EAAE,KAAK;KACf,CAAC,CAAC;CACN;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"ext.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\nlet async = Bluebird.coroutine;\n\nconst retryCount = 5;\nconst gcTime = 1000;\n\nfunction isOutOfMemoryError(e) {\n return e.message.indexOf(\"out of memory\") > 0;\n}\n\nfunction invokeGC(af) {\n af.gc(gcTime);\n}\n\nfunction synchronify(af, f) {\n return function () {\n var err;\n var res;\n var done;\n let cb = function (e, r) {\n err = e;\n res = r;\n done = true;\n };\n\n let args = _.toArray(arguments).concat(cb);\n\n for (let i = 0; i < retryCount; i++) {\n done = false;\n f.apply(this, args);\n while (!done) af._doEvents();\n\n if (err) {\n if (!isOutOfMemoryError(err)) {\n throw err;\n }\n else {\n invokeGC(af);\n }\n }\n }\n\n if (err) throw err;\n\n return res;\n };\n}\n\nfunction installAsyncAndSync(af, obj, name) {\n if (_.isUndefined(name)) {\n for (let key of _.keys(obj)) {\n installAsyncAndSync(af, obj, key);\n }\n return;\n }\n\n if (name !== \"AFArray\") {\n let f = obj[name];\n if (_.isFunction(f)) {\n if (!_.isFunction(obj[name + \"Async\"])) {\n obj[name + \"Async\"] = async(function* () {\n let self = this;\n let args = _.toArray(arguments);\n let call = function () {\n return new Bluebird(function (resolve, reject) {\n let cb = function (e, r) {\n if (e) {\n reject(e);\n }\n else {\n resolve(r);\n }\n };\n args.push(cb);\n f.apply(self, args);\n });\n };\n\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return yield call();\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n });\n }\n if (!_.isFunction(obj[name + \"Sync\"])) {\n obj[name + \"Sync\"] = synchronify(af, f);\n }\n obj[name] = function () {\n let err = null;\n for (let i = 0; i < retryCount; i++) {\n try {\n return f.apply(this, arguments);\n }\n catch (e) {\n if (!isOutOfMemoryError(e)) {\n throw e;\n }\n invokeGC(af);\n err = e;\n }\n }\n throw err;\n };\n }\n }\n}\n\nfunction ext(af) {\n installAsyncAndSync(af, af);\n installAsyncAndSync(af, af.AFArray);\n installAsyncAndSync(af, af.AFArray.prototype);\n\n let scope = af.AFArray.scope = require(\"./scope\");\n\n _.extend(af, {\n end: -1,\n span: null,\n all: -1,\n dtype: require(\"./dtype\"),\n dType: require(\"./dtype\"),\n source: require(\"./source\"),\n matchType: require(\"./matchType\"),\n cSpace: require(\"./cSpace\"),\n CSpace: require(\"./cSpace\"),\n connectivity: require(\"./connectivity\"),\n borderType: require(\"./borderType\"),\n interpType: require(\"./interpType\"),\n matProp: require(\"./matProp\"),\n normType: require(\"./normType\"),\n convMode: require(\"./convMode\"),\n convDomain: require(\"./convDomain\"),\n Dim4: require(\"./dim4\"),\n Seq: require(\"./seq\"),\n Complex: require(\"./complex\"),\n Row: require(\"./row\"),\n Col: require(\"./col\"),\n Rows: require(\"./rows\"),\n Cols: require(\"./cols\"),\n getDevices: function () {\n let current = this.getDevice();\n try {\n let count = this.getDeviceCount();\n let result = [];\n for (let i = 0; i < count; i++) {\n this.setDevice(i);\n let info = this.deviceInfo();\n info.id = i;\n result.push(info);\n }\n return result;\n }\n finally {\n this.setDevice(current);\n }\n },\n gfor: require(\"./makeGfor\")(af),\n scope: scope\n });\n}\n\nmodule.exports = ext;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ext.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAE/B,IAAM,UAAU,GAAG,CAAC,CAAC;AACrB,IAAM,MAAM,GAAG,IAAI,CAAC;;AAEpB,SAAS,kBAAkB,CAAC,CAAC,EAAE;AAC3B,WAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;CACjD;;AAED,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,MAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;CACjB;;AAED,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE;AACxB,WAAO,YAAY;AACf,YAAI,GAAG,CAAC;AACR,YAAI,GAAG,CAAC;AACR,YAAI,IAAI,CAAC;AACT,YAAI,EAAE,GAAG,SAAL,EAAE,CAAa,CAAC,EAAE,CAAC,EAAE;AACrB,eAAG,GAAG,CAAC,CAAC;AACR,eAAG,GAAG,CAAC,CAAC;AACR,gBAAI,GAAG,IAAI,CAAC;SACf,CAAC;;AAEF,YAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAE3C,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAI,GAAG,KAAK,CAAC;AACb,aAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpB,mBAAO,CAAC,IAAI;AAAE,kBAAE,CAAC,SAAS,EAAE,CAAC;aAAA,AAE7B,IAAI,GAAG,EAAE;AACL,oBAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;AAC1B,0BAAM,GAAG,CAAC;iBACb,MACI;AACD,4BAAQ,CAAC,EAAE,CAAC,CAAC;iBAChB;aACJ;SACJ;;AAED,YAAI,GAAG,EAAE,MAAM,GAAG,CAAC;;AAEnB,eAAO,GAAG,CAAC;KACd,CAAC;CACL;;AAED,SAAS,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AACxC,QAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;;;;;;AACrB,iCAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,8HAAE;oBAApB,GAAG;;AACR,mCAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrC;;;;;;;;;;;;;;;;AACD,eAAO;KACV;;AAED,QAAI,IAAI,KAAK,SAAS,EAAE;;AACpB,gBAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,gBAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,oBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE;AACpC,uBAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,KAAK,yBAAC;4BACpB,IAAI;4BACJ,IAAI;4BACJ,IAAI;4BAeJ,GAAG;4BACE,CAAC;;;;;;AAlBN,4CAAI,GAAG,IAAI;AACX,4CAAI,GAAG,CAAC,CAAC,OAAO,OAAW;;AAC3B,4CAAI,GAAG,SAAP,IAAI,GAAe;AACnB,mDAAO,IAAI,QAAQ,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;AAC3C,oDAAI,EAAE,GAAG,SAAL,EAAE,CAAa,CAAC,EAAE,CAAC,EAAE;AACrB,wDAAI,CAAC,EAAE;AACH,8DAAM,CAAC,CAAC,CAAC,CAAC;qDACb,MACI;AACD,+DAAO,CAAC,CAAC,CAAC,CAAC;qDACd;iDACJ,CAAC;AACF,oDAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,iDAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;6CACvB,CAAC,CAAC;yCACN;;AAEG,2CAAG,GAAG,IAAI;AACL,yCAAC,GAAG,CAAC;;;8CAAE,CAAC,GAAG,UAAU,CAAA;;;;;;;+CAET,IAAI,EAAE;;;;;;;;;4CAGd,kBAAkB,aAAG;;;;;;;;AAG1B,gDAAQ,CAAC,EAAE,CAAC,CAAC;AACb,2CAAG,cAAI,CAAC;;;AATgB,yCAAC,EAAE;;;;;8CAY7B,GAAG;;;;;;;;qBACZ,EAAC,CAAC;iBACN;AACD,oBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE;AACnC,uBAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3C;AACD,mBAAG,CAAC,IAAI,CAAC,GAAG,YAAY;AACpB,wBAAI,GAAG,GAAG,IAAI,CAAC;AACf,yBAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,UAAU,EAAE,EAAC,EAAE,EAAE;AACjC,4BAAI;AACA,mCAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;yBACnC,CACD,OAAO,CAAC,EAAE;AACN,gCAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;AACxB,sCAAM,CAAC,CAAC;6BACX;AACD,oCAAQ,CAAC,EAAE,CAAC,CAAC;AACb,+BAAG,GAAG,CAAC,CAAC;yBACX;qBACJ;AACD,0BAAM,GAAG,CAAC;iBACb,CAAC;aACL;;KACJ;CACJ;;AAED,SAAS,GAAG,CAAC,EAAE,EAAE;AACb,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;AAE9C,QAAI,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,GAAI,OAAO,CAAC,SAAS,CAAC,CAAC;;AAEnD,KAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACT,WAAG,EAAE,CAAC,CAAC;AACP,YAAI,EAAE,IAAI;AACV,WAAG,EAAE,CAAC,CAAC;AACP,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,iBAAS,EAAE,OAAO,CAAC,aAAa,CAAC;AACjC,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,oBAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACvC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,kBAAU,EAAE,sBAAY;AACpB,gBAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,gBAAI;AACA,oBAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,oBAAI,MAAM,GAAG,EAAE,CAAC;AAChB,qBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,wBAAI,CAAC,SAAS,CAAC,GAAC,CAAC,CAAC;AAClB,wBAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,wBAAI,CAAC,EAAE,GAAG,GAAC,CAAC;AACZ,0BAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrB;AACD,uBAAO,MAAM,CAAC;aACjB,SACO;AACJ,oBAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAC3B;SACJ;AACD,YAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;AAC/B,aAAK,EAAE,KAAK;KACf,CAAC,CAAC;CACN;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"ext.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet _ = require(\"lodash\");\r\nlet async = Bluebird.coroutine;\r\n\r\nconst retryCount = 5;\r\nconst gcTime = 1000;\r\n\r\nfunction isOutOfMemoryError(e) {\r\n return e.message.indexOf(\"out of memory\") > 0;\r\n}\r\n\r\nfunction invokeGC(af) {\r\n af.gc(gcTime);\r\n}\r\n\r\nfunction synchronify(af, f) {\r\n return function () {\r\n var err;\r\n var res;\r\n var done;\r\n let cb = function (e, r) {\r\n err = e;\r\n res = r;\r\n done = true;\r\n };\r\n\r\n let args = _.toArray(arguments).concat(cb);\r\n\r\n for (let i = 0; i < retryCount; i++) {\r\n done = false;\r\n f.apply(this, args);\r\n while (!done) af._doEvents();\r\n\r\n if (err) {\r\n if (!isOutOfMemoryError(err)) {\r\n throw err;\r\n }\r\n else {\r\n invokeGC(af);\r\n }\r\n }\r\n }\r\n\r\n if (err) throw err;\r\n\r\n return res;\r\n };\r\n}\r\n\r\nfunction installAsyncAndSync(af, obj, name) {\r\n if (_.isUndefined(name)) {\r\n for (let key of _.keys(obj)) {\r\n installAsyncAndSync(af, obj, key);\r\n }\r\n return;\r\n }\r\n\r\n if (name !== \"AFArray\") {\r\n let f = obj[name];\r\n if (_.isFunction(f)) {\r\n if (!_.isFunction(obj[name + \"Async\"])) {\r\n obj[name + \"Async\"] = async(function* () {\r\n let self = this;\r\n let args = _.toArray(arguments);\r\n let call = function () {\r\n return new Bluebird(function (resolve, reject) {\r\n let cb = function (e, r) {\r\n if (e) {\r\n reject(e);\r\n }\r\n else {\r\n resolve(r);\r\n }\r\n };\r\n args.push(cb);\r\n f.apply(self, args);\r\n });\r\n };\r\n\r\n let err = null;\r\n for (let i = 0; i < retryCount; i++) {\r\n try {\r\n return yield call();\r\n }\r\n catch (e) {\r\n if (!isOutOfMemoryError(e)) {\r\n throw e;\r\n }\r\n invokeGC(af);\r\n err = e;\r\n }\r\n }\r\n throw err;\r\n });\r\n }\r\n if (!_.isFunction(obj[name + \"Sync\"])) {\r\n obj[name + \"Sync\"] = synchronify(af, f);\r\n }\r\n obj[name] = function () {\r\n let err = null;\r\n for (let i = 0; i < retryCount; i++) {\r\n try {\r\n return f.apply(this, arguments);\r\n }\r\n catch (e) {\r\n if (!isOutOfMemoryError(e)) {\r\n throw e;\r\n }\r\n invokeGC(af);\r\n err = e;\r\n }\r\n }\r\n throw err;\r\n };\r\n }\r\n }\r\n}\r\n\r\nfunction ext(af) {\r\n installAsyncAndSync(af, af);\r\n installAsyncAndSync(af, af.AFArray);\r\n installAsyncAndSync(af, af.AFArray.prototype);\r\n\r\n let scope = af.AFArray.scope = require(\"./scope\");\r\n\r\n _.extend(af, {\r\n end: -1,\r\n span: null,\r\n all: -1,\r\n dtype: require(\"./dtype\"),\r\n dType: require(\"./dtype\"),\r\n source: require(\"./source\"),\r\n matchType: require(\"./matchType\"),\r\n cSpace: require(\"./cSpace\"),\r\n CSpace: require(\"./cSpace\"),\r\n connectivity: require(\"./connectivity\"),\r\n borderType: require(\"./borderType\"),\r\n interpType: require(\"./interpType\"),\r\n matProp: require(\"./matProp\"),\r\n normType: require(\"./normType\"),\r\n convMode: require(\"./convMode\"),\r\n convDomain: require(\"./convDomain\"),\r\n Dim4: require(\"./dim4\"),\r\n Seq: require(\"./seq\"),\r\n Complex: require(\"./complex\"),\r\n Row: require(\"./row\"),\r\n Col: require(\"./col\"),\r\n Rows: require(\"./rows\"),\r\n Cols: require(\"./cols\"),\r\n getDevices: function () {\r\n let current = this.getDevice();\r\n try {\r\n let count = this.getDeviceCount();\r\n let result = [];\r\n for (let i = 0; i < count; i++) {\r\n this.setDevice(i);\r\n let info = this.deviceInfo();\r\n info.id = i;\r\n result.push(info);\r\n }\r\n return result;\r\n }\r\n finally {\r\n this.setDevice(current);\r\n }\r\n },\r\n gfor: require(\"./makeGfor\")(af),\r\n scope: scope\r\n });\r\n}\r\n\r\nmodule.exports = ext;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map index 65763c6..df85dc0 100644 --- a/lib/es5/index.js.map +++ b/lib/es5/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEnC,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE;AACtC,QAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC1D,OAAG,GAAG,GAAG,IAAI,KAAK,CAAC;AACnB,aAAS,QAAQ,GAAG;AAChB,gBAAQ,GAAG;AACP,iBAAK,KAAK;AACN,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAAA,AACnD,iBAAK,MAAM;AACP,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAAA,AACpD,iBAAK,QAAQ;AACT,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAAA,AACtD;AACI,sBAAM,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC;AAAA,SAClE;KACJ;AACD,QAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpB,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAChB,WAAG,CAAC,EAAE,CAAC,CAAC;AACR,UAAE,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AACD,WAAO,EAAE,CAAC;CACb,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AAClC,QAAI,SAAS,GAAG,EAAE,CAAC;eACJ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAxC,6CAA0C;AAArC,YAAI,EAAE,WAAA,CAAA;AACP,YAAI;AACA,gBAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtB,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,uEAAuE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC/F;KACJ;AACD,WAAO,SAAS,CAAC;CACpB,CAAC","file":"index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet ext = require(\"./ext\");\nlet Bluebird = require(\"bluebird\");\nlet debug = require(\"debug\")(\"af\");\n\nlet entry = module.exports = function(id) {\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\n did = did || \"cpu\";\n function createAF() {\n switch (did) {\n case \"cpu\":\n return require(\"bindings\")(\"arrayfire_js_CPU\");\n case \"cuda\":\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\n case \"opencl\":\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\n default:\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\n }\n }\n let af = createAF();\n if (!af.__extended) {\n ext(af);\n af.__extended = true;\n }\n return af;\n};\n\nentry.supportedPlatforms = function() {\n let platforms = [];\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\n try {\n let fire = entry(id);\n platforms.push(id);\n }\n catch(e) {\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\n }\n }\n return platforms;\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEnC,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE;AACtC,QAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC1D,OAAG,GAAG,GAAG,IAAI,KAAK,CAAC;AACnB,aAAS,QAAQ,GAAG;AAChB,gBAAQ,GAAG;AACP,iBAAK,KAAK;AACN,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAAA,AACnD,iBAAK,MAAM;AACP,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAAA,AACpD,iBAAK,QAAQ;AACT,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAAA,AACtD;AACI,sBAAM,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC;AAAA,SAClE;KACJ;AACD,QAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpB,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAChB,WAAG,CAAC,EAAE,CAAC,CAAC;AACR,UAAE,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AACD,WAAO,EAAE,CAAC;CACb,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AAClC,QAAI,SAAS,GAAG,EAAE,CAAC;eACJ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAxC,6CAA0C;AAArC,YAAI,EAAE,WAAA,CAAA;AACP,YAAI;AACA,gBAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtB,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,uEAAuE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC/F;KACJ;AACD,WAAO,SAAS,CAAC;CACpB,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet ext = require(\"./ext\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet debug = require(\"debug\")(\"af\");\r\n\r\nlet entry = module.exports = function(id) {\r\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\r\n did = did || \"cpu\";\r\n function createAF() {\r\n switch (did) {\r\n case \"cpu\":\r\n return require(\"bindings\")(\"arrayfire_js_CPU\");\r\n case \"cuda\":\r\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\r\n case \"opencl\":\r\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\r\n default:\r\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\r\n }\r\n }\r\n let af = createAF();\r\n if (!af.__extended) {\r\n ext(af);\r\n af.__extended = true;\r\n }\r\n return af;\r\n};\r\n\r\nentry.supportedPlatforms = function() {\r\n let platforms = [];\r\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\r\n try {\r\n let fire = entry(id);\r\n platforms.push(id);\r\n }\r\n catch(e) {\r\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\r\n }\r\n }\r\n return platforms;\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/interpType.js.map b/lib/es5/interpType.js.map index 0f7b089..d082e8b 100644 --- a/lib/es5/interpType.js.map +++ b/lib/es5/interpType.js.map @@ -1 +1 @@ -{"version":3,"sources":["interpType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,WAAS,EAAG,CAAC;AACb,OAAK,EAAE,CAAC;AACR,mBAAiB,EAAE,CAAC;AACpB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAG,CAAC;AACtB,iBAAe,EAAE,CAAC;AAAA,CACrB,CAAC","file":"interpType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet interpType = module.exports = {\n nearest: 0, ///< Nearest Interpolation\n linear: 1, ///< Linear Interpolation\n bilinerar : 2, ///< Bilinear Interpolation\n cubic: 3, ///< Cubic Interpolation,\n AF_INTERP_NEAREST: 0, ///< Nearest Interpolation\n AF_INTERP_LINEAR: 1, ///< Linear Interpolation\n AF_INTERP_BILINEAR : 2, ///< Bilinear Interpolation\n AF_INTERP_CUBIC: 3 ///< Cubic Interpolation\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["interpType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG;AAC9B,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,WAAS,EAAG,CAAC;AACb,OAAK,EAAE,CAAC;AACR,mBAAiB,EAAE,CAAC;AACpB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAG,CAAC;AACtB,iBAAe,EAAE,CAAC;AAAA,CACrB,CAAC","file":"interpType.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet interpType = module.exports = {\r\n nearest: 0, ///< Nearest Interpolation\r\n linear: 1, ///< Linear Interpolation\r\n bilinerar : 2, ///< Bilinear Interpolation\r\n cubic: 3, ///< Cubic Interpolation,\r\n AF_INTERP_NEAREST: 0, ///< Nearest Interpolation\r\n AF_INTERP_LINEAR: 1, ///< Linear Interpolation\r\n AF_INTERP_BILINEAR : 2, ///< Bilinear Interpolation\r\n AF_INTERP_CUBIC: 3 ///< Cubic Interpolation\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/makeGfor.js.map b/lib/es5/makeGfor.js.map index c4e880a..1717e09 100644 --- a/lib/es5/makeGfor.js.map +++ b/lib/es5/makeGfor.js.map @@ -1 +1 @@ -{"version":3,"sources":["makeGfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,WAAO,SAAS,IAAI,GAAG;AACnB,YAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AACd,aAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,oBAAI,GAAG,CAAC,CAAC;AACT,sBAAM;aACT;SACJ;AACD,YAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACb,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,kBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;AACD,YAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAI,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;AACrD,mBAAO,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACjC;AACD,YAAI,GAAG,YAAA,CAAC;AACR,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MACI,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,MACI;AACD,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,WAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,UAAE,CAAC,WAAW,EAAE,CAAC;AACjB,YAAI;AACA,qBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtC,SACO;AACJ,cAAE,CAAC,WAAW,EAAE,CAAC;SACpB;KACJ,CAAA;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"makeGfor.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\nlet Seq = require(\"./seq\");\n\nfunction makeGfor(af) {\n return function gfor() {\n let fPos = -1;\n for(let i = 0; i < arguments.length; i++) {\n if (_.isFunction(arguments[i])) {\n fPos = i;\n break;\n }\n }\n if (fPos === -1) {\n throw new Error(\"Body function argument expected.\");\n }\n if (fPos === 0) {\n throw new Error(\"Seq arguments expected.\");\n }\n let thisArg = arguments[fPos];\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\n thisArg = arguments[fPos + 1];\n }\n let seq;\n if (fPos === 1) {\n seq = new Seq(arguments[0]);\n }\n else if (fPos === 2) {\n seq = new Seq(arguments[0], arguments[1]);\n }\n else {\n throw new Error(\"Invalid number of Seq arguments.\");\n }\n seq.isGFor = true;\n af._gforToggle();\n try {\n arguments[fPos].call(thisArg, seq);\n }\n finally {\n af._gforToggle();\n }\n }\n}\n\nmodule.exports = makeGfor;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["makeGfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,WAAO,SAAS,IAAI,GAAG;AACnB,YAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AACd,aAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,oBAAI,GAAG,CAAC,CAAC;AACT,sBAAM;aACT;SACJ;AACD,YAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACb,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,kBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;AACD,YAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAI,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;AACrD,mBAAO,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACjC;AACD,YAAI,GAAG,YAAA,CAAC;AACR,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MACI,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,MACI;AACD,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,WAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,UAAE,CAAC,WAAW,EAAE,CAAC;AACjB,YAAI;AACA,qBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtC,SACO;AACJ,cAAE,CAAC,WAAW,EAAE,CAAC;SACpB;KACJ,CAAA;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"makeGfor.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\nlet Seq = require(\"./seq\");\r\n\r\nfunction makeGfor(af) {\r\n return function gfor() {\r\n let fPos = -1;\r\n for(let i = 0; i < arguments.length; i++) {\r\n if (_.isFunction(arguments[i])) {\r\n fPos = i;\r\n break;\r\n }\r\n }\r\n if (fPos === -1) {\r\n throw new Error(\"Body function argument expected.\");\r\n }\r\n if (fPos === 0) {\r\n throw new Error(\"Seq arguments expected.\");\r\n }\r\n let thisArg = arguments[fPos];\r\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\r\n thisArg = arguments[fPos + 1];\r\n }\r\n let seq;\r\n if (fPos === 1) {\r\n seq = new Seq(arguments[0]);\r\n }\r\n else if (fPos === 2) {\r\n seq = new Seq(arguments[0], arguments[1]);\r\n }\r\n else {\r\n throw new Error(\"Invalid number of Seq arguments.\");\r\n }\r\n seq.isGFor = true;\r\n af._gforToggle();\r\n try {\r\n arguments[fPos].call(thisArg, seq);\r\n }\r\n finally {\r\n af._gforToggle();\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = makeGfor;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matProp.js.map b/lib/es5/matProp.js.map index 6acaecf..5ac1789 100644 --- a/lib/es5/matProp.js.map +++ b/lib/es5/matProp.js.map @@ -1 +1 @@ -{"version":3,"sources":["matProp.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG;AAC3B,MAAI,EAAS,CAAC;AACd,OAAK,EAAQ,CAAC;AACd,QAAM,EAAO,CAAC;AACd,OAAK,EAAQ,EAAE;AACf,OAAK,EAAQ,EAAE;AACf,UAAQ,EAAK,GAAG;AAChB,KAAG,EAAU,GAAG;AAChB,QAAM,EAAO,IAAI;AACjB,QAAM,EAAO,IAAI;AACjB,SAAO,EAAM,IAAI;AACjB,WAAS,EAAI,IAAI;AACjB,aAAW,EAAS,CAAC;AACrB,cAAY,EAAQ,CAAC;AACrB,eAAa,EAAO,CAAC;AACrB,cAAY,EAAQ,EAAE;AACtB,cAAY,EAAQ,EAAE;AACtB,kBAAgB,EAAI,GAAG;AACvB,YAAU,EAAU,GAAG;AACvB,eAAa,EAAO,IAAI;AACxB,eAAa,EAAO,IAAI;AACxB,iBAAe,EAAK,IAAI;AACxB,mBAAiB,EAAG,IAAI;AAAA,CAC3B,CAAC","file":"matProp.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matProp = module.exports = {\n none : 0, ///< Default\n trans : 1, ///< Data needs to be transposed\n cTrans : 2, ///< Data needs to be conjugate tansposed\n upper : 32, ///< Matrix is upper triangular\n lower : 64, ///< Matrix is lower triangular\n diagUnit : 128, ///< Matrix diagonal contains unitary values\n sym : 512, ///< Matrix is symmetric\n posDef : 1024, ///< Matrix is positive definite\n orthog : 2048, ///< Matrix is orthogonal\n triDiag : 4096, ///< Matrix is tri diagonal\n blockDiag : 8192, ///< Matrix is block diagonal\n AF_MAT_NONE : 0, ///< Default\n AF_MAT_TRANS : 1, ///< Data needs to be transposed\n AF_MAT_CTRANS : 2, ///< Data needs to be conjugate tansposed\n AF_MAT_UPPER : 32, ///< Matrix is upper triangular\n AF_MAT_LOWER : 64, ///< Matrix is lower triangular\n AF_MAT_DIAG_UNIT : 128, ///< Matrix diagonal contains unitary values\n AF_MAT_SYM : 512, ///< Matrix is symmetric\n AF_MAT_POSDEF : 1024, ///< Matrix is positive definite\n AF_MAT_ORTHOG : 2048, ///< Matrix is orthogonal\n AF_MAT_TRI_DIAG : 4096, ///< Matrix is tri diagonal\n AF_MAT_BLOCK_DIAG : 8192 ///< Matrix is block diagonal\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["matProp.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG;AAC3B,MAAI,EAAS,CAAC;AACd,OAAK,EAAQ,CAAC;AACd,QAAM,EAAO,CAAC;AACd,OAAK,EAAQ,EAAE;AACf,OAAK,EAAQ,EAAE;AACf,UAAQ,EAAK,GAAG;AAChB,KAAG,EAAU,GAAG;AAChB,QAAM,EAAO,IAAI;AACjB,QAAM,EAAO,IAAI;AACjB,SAAO,EAAM,IAAI;AACjB,WAAS,EAAI,IAAI;AACjB,aAAW,EAAS,CAAC;AACrB,cAAY,EAAQ,CAAC;AACrB,eAAa,EAAO,CAAC;AACrB,cAAY,EAAQ,EAAE;AACtB,cAAY,EAAQ,EAAE;AACtB,kBAAgB,EAAI,GAAG;AACvB,YAAU,EAAU,GAAG;AACvB,eAAa,EAAO,IAAI;AACxB,eAAa,EAAO,IAAI;AACxB,iBAAe,EAAK,IAAI;AACxB,mBAAiB,EAAG,IAAI;AAAA,CAC3B,CAAC","file":"matProp.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet matProp = module.exports = {\r\n none : 0, ///< Default\r\n trans : 1, ///< Data needs to be transposed\r\n cTrans : 2, ///< Data needs to be conjugate tansposed\r\n upper : 32, ///< Matrix is upper triangular\r\n lower : 64, ///< Matrix is lower triangular\r\n diagUnit : 128, ///< Matrix diagonal contains unitary values\r\n sym : 512, ///< Matrix is symmetric\r\n posDef : 1024, ///< Matrix is positive definite\r\n orthog : 2048, ///< Matrix is orthogonal\r\n triDiag : 4096, ///< Matrix is tri diagonal\r\n blockDiag : 8192, ///< Matrix is block diagonal\r\n AF_MAT_NONE : 0, ///< Default\r\n AF_MAT_TRANS : 1, ///< Data needs to be transposed\r\n AF_MAT_CTRANS : 2, ///< Data needs to be conjugate tansposed\r\n AF_MAT_UPPER : 32, ///< Matrix is upper triangular\r\n AF_MAT_LOWER : 64, ///< Matrix is lower triangular\r\n AF_MAT_DIAG_UNIT : 128, ///< Matrix diagonal contains unitary values\r\n AF_MAT_SYM : 512, ///< Matrix is symmetric\r\n AF_MAT_POSDEF : 1024, ///< Matrix is positive definite\r\n AF_MAT_ORTHOG : 2048, ///< Matrix is orthogonal\r\n AF_MAT_TRI_DIAG : 4096, ///< Matrix is tri diagonal\r\n AF_MAT_BLOCK_DIAG : 8192 ///< Matrix is block diagonal\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/matchType.js.map b/lib/es5/matchType.js.map index dc94fbb..7e0546c 100644 --- a/lib/es5/matchType.js.map +++ b/lib/es5/matchType.js.map @@ -1 +1 @@ -{"version":3,"sources":["matchType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG;AAC7B,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;CACZ,CAAC","file":"matchType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet matchType = module.exports = {\n SAD: 0,\n zSAD: 1,\n lSAD: 2,\n SSD: 3,\n zSSD: 4,\n lSSD: 5,\n NCC: 6,\n zNCC: 7,\n SHD: 8,\n AF_SAD: 0,\n AF_ZSAD: 1,\n AF_LSAD: 2,\n AF_SSD: 3,\n AF_ZSSD: 4,\n AF_LSSD: 5,\n AF_NCC: 6,\n AF_ZNCC: 7,\n AF_SHD: 8\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["matchType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG;AAC7B,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,MAAI,EAAE,CAAC;AACP,KAAG,EAAE,CAAC;AACN,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;AACT,SAAO,EAAE,CAAC;AACV,QAAM,EAAE,CAAC;CACZ,CAAC","file":"matchType.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet matchType = module.exports = {\r\n SAD: 0,\r\n zSAD: 1,\r\n lSAD: 2,\r\n SSD: 3,\r\n zSSD: 4,\r\n lSSD: 5,\r\n NCC: 6,\r\n zNCC: 7,\r\n SHD: 8,\r\n AF_SAD: 0,\r\n AF_ZSAD: 1,\r\n AF_LSAD: 2,\r\n AF_SSD: 3,\r\n AF_ZSSD: 4,\r\n AF_LSSD: 5,\r\n AF_NCC: 6,\r\n AF_ZNCC: 7,\r\n AF_SHD: 8\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/normType.js.map b/lib/es5/normType.js.map index 0d7c958..9e1f255 100644 --- a/lib/es5/normType.js.map +++ b/lib/es5/normType.js.map @@ -1 +1 @@ -{"version":3,"sources":["normType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;AAC5B,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,QAAM,EAAE,CAAC;AACT,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,qBAAmB,EAAE,CAAC;AACtB,gBAAc,EAAE,CAAC;AAAA,CACpB,CAAC","file":"normType.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet normType = module.exports = {\n vector1: 1, ///< treats the input as a vector and returns the sum of absolute values\n vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values\n vector2: 3, ///< treats the input as a vector and returns euclidean norm\n vectorP: 4, ///< treats the input as a vector and returns the p-norm\n matrix1: 5, ///< return the max of column sums\n matrixInf: 6, ///< return the max of row sums\n matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n matrixLPq: 8, ///< returns Lpq-norm\n euclid: 3, ///< The default. Same as vector2\n AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values\n AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values\n AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm\n AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm\n AF_NORM_MATRIX_1: 5, ///< return the max of column sums\n AF_NORM_MATRIX_INF: 6, ///< return the max of row sums\n AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\n AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm\n AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["normType.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG;AAC5B,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,SAAO,EAAE,CAAC;AACV,WAAS,EAAE,CAAC;AACZ,QAAM,EAAE,CAAC;AACT,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,EAAE,CAAC;AACrB,kBAAgB,EAAE,CAAC;AACnB,qBAAmB,EAAE,CAAC;AACtB,gBAAc,EAAE,CAAC;AAAA,CACpB,CAAC","file":"normType.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet normType = module.exports = {\r\n vector1: 1, ///< treats the input as a vector and returns the sum of absolute values\r\n vectorInf: 2, ///< treats the input as a vector and returns the max of absolute values\r\n vector2: 3, ///< treats the input as a vector and returns euclidean norm\r\n vectorP: 4, ///< treats the input as a vector and returns the p-norm\r\n matrix1: 5, ///< return the max of column sums\r\n matrixInf: 6, ///< return the max of row sums\r\n matrix2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\r\n matrixLPq: 8, ///< returns Lpq-norm\r\n euclid: 3, ///< The default. Same as vector2\r\n AF_NORM_VECTOR_1: 1, ///< treats the input as a vector and returns the sum of absolute values\r\n AF_NORM_VECTOR_INF: 2, ///< treats the input as a vector and returns the max of absolute values\r\n AF_NORM_VECTOR_2: 3, ///< treats the input as a vector and returns euclidean norm\r\n AF_NORM_VECTOR_P: 4, ///< treats the input as a vector and returns the p-norm\r\n AF_NORM_MATRIX_1: 5, ///< return the max of column sums\r\n AF_NORM_MATRIX_INF: 6, ///< return the max of row sums\r\n AF_NORM_MATRIX_2: 7, ///< returns the max singular value). Currently NOT SUPPORTED\r\n AF_NORM_MATRIX_L_PQ: 8, ///< returns Lpq-norm\r\n AF_NORM_EUCLID: 3 ///< The default. Same as AF_NORM_VECTOR_2\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/row.js.map b/lib/es5/row.js.map index ea2deaf..8121f8b 100644 --- a/lib/es5/row.js.map +++ b/lib/es5/row.js.map @@ -1 +1 @@ -{"version":3,"sources":["row.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"row.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Row(index) {\n assert(_.isNumber(index));\n\n this.index = index;\n}\n\nmodule.exports = Row;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["row.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE;AAChB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1B,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACtB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"row.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Row(index) {\r\n assert(_.isNumber(index));\r\n\r\n this.index = index;\r\n}\r\n\r\nmodule.exports = Row;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/rows.js.map b/lib/es5/rows.js.map index 324d334..40d6cfd 100644 --- a/lib/es5/rows.js.map +++ b/lib/es5/rows.js.map @@ -1 +1 @@ -{"version":3,"sources":["rows.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"rows.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Rows(firstIndex, lastIndex) {\n assert(_.isNumber(firstIndex));\n assert(_.isNumber(lastIndex));\n\n this.firstIndex = firstIndex;\n this.lastIndex = lastIndex;\n}\n\nmodule.exports = Rows;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["rows.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AACjC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE9B,MAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,MAAI,CAAC,SAAS,GAAG,SAAS,CAAC;CAC9B;;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC","file":"rows.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Rows(firstIndex, lastIndex) {\r\n assert(_.isNumber(firstIndex));\r\n assert(_.isNumber(lastIndex));\r\n\r\n this.firstIndex = firstIndex;\r\n this.lastIndex = lastIndex;\r\n}\r\n\r\nmodule.exports = Rows;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/scope.js b/lib/es5/scope.js index fdfd6f1..fcf3d04 100644 --- a/lib/es5/scope.js +++ b/lib/es5/scope.js @@ -9,20 +9,9 @@ function scope(f) { if (_.isFunction(f)) { scope.begin(); try { - var result = f.call(scope); - if (_.isObject(result) && _.isFunction(result.then)) { - return Bluebird.resolve(result).then(function (r) { - return r; - }).finally(function () { - scope.end(); - }); - } else { - scope.end(); - return result; - } - } catch (e) { + return f.call(scope, scope); + } finally { scope.end(); - throw e; } } } @@ -53,7 +42,7 @@ scope.result = function (array) { var set = temporaries[temporaries.length - 1]; set.delete(array); } - return scope; + return array; }; function free(arrays) { diff --git a/lib/es5/scope.js.map b/lib/es5/scope.js.map index cd85e5f..daa46ff 100644 --- a/lib/es5/scope.js.map +++ b/lib/es5/scope.js.map @@ -1 +1 @@ -{"version":3,"sources":["scope.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAE1B,IAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;AACd,QAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,YAAI;AACA,gBAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,gBAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjD,uBAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAC1B,IAAI,CAAC,UAAS,CAAC,EAAE;AACd,2BAAO,CAAC,CAAC;iBACZ,CAAC,CACD,OAAO,CAAC,YAAW;AAChB,yBAAK,CAAC,GAAG,EAAE,CAAC;iBACf,CAAC,CAAC;aACV,MACI;AACD,qBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,uBAAO,MAAM,CAAC;aACjB;SACJ,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,GAAG,EAAE,CAAC;AACZ,kBAAM,CAAC,CAAC;SACX;KACJ;CACJ;;AAED,KAAK,CAAC,KAAK,GAAG,YAAW;AACrB,eAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,GAAG,GAAG,YAAW;AACnB,QAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,mBAAW,CAAC,MAAM,EAAE,CAAC;AACrB,YAAI,CAAC,GAAG,CAAC,CAAC;KACb;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,QAAQ,GAAG,UAAS,KAAK,EAAE;AAC7B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAClB;CACJ,CAAC;;AAEF,KAAK,CAAC,MAAM,GAAG,UAAS,KAAK,EAAE;AAC3B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACrB;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,SAAS,IAAI,CAAC,MAAM,EAAE;;;;;;AAClB,6BAAkB,MAAM,CAAC,MAAM,EAAE,8HAAE;gBAA1B,KAAK;;AACV,iBAAK,CAAC,IAAI,EAAE,CAAC;SAChB;;;;;;;;;;;;;;;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","file":"scope.js","sourcesContent":["\"use strict\";\nlet Bluebird = require(\"bluebird\");\nlet _ = require(\"lodash\");\n\nlet temporaries = [];\n\nfunction scope(f) {\n if (_.isFunction(f)) {\n scope.begin();\n try {\n let result = f.call(scope);\n if (_.isObject(result) && _.isFunction(result.then)) {\n return Bluebird.resolve(result)\n .then(function(r) {\n return r;\n })\n .finally(function() {\n scope.end();\n });\n }\n else {\n scope.end();\n return result;\n }\n }\n catch(e) {\n scope.end();\n throw e;\n }\n }\n}\n\nscope.begin = function() {\n temporaries.push(new Set());\n return scope;\n};\n\nscope.end = function() {\n if (temporaries.length) {\n let set = temporaries[temporaries.length - 1];\n temporaries.length--;\n free(set);\n }\n return scope;\n};\n\nscope.register = function(array) {\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\n let set = temporaries[temporaries.length - 1];\n set.add(array);\n }\n};\n\nscope.result = function(array) {\n if (temporaries.length && _.isObject(array)) {\n let set = temporaries[temporaries.length - 1];\n set.delete(array);\n }\n return scope;\n};\n\nfunction free(arrays) {\n for (let array of arrays.values()) {\n array.free();\n }\n}\n\nmodule.exports = scope;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["scope.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAE1B,IAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;AACd,QAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,YAAI;AACA,mBAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/B,SACO;AACJ,iBAAK,CAAC,GAAG,EAAE,CAAC;SACf;KACJ;CACJ;;AAED,KAAK,CAAC,KAAK,GAAG,YAAW;AACrB,eAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,GAAG,GAAG,YAAW;AACnB,QAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,mBAAW,CAAC,MAAM,EAAE,CAAC;AACrB,YAAI,CAAC,GAAG,CAAC,CAAC;KACb;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,KAAK,CAAC,QAAQ,GAAG,UAAS,KAAK,EAAE;AAC7B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAClB;CACJ,CAAC;;AAEF,KAAK,CAAC,MAAM,GAAG,UAAS,KAAK,EAAE;AAC3B,QAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,YAAI,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,WAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACrB;AACD,WAAO,KAAK,CAAC;CAChB,CAAC;;AAEF,SAAS,IAAI,CAAC,MAAM,EAAE;;;;;;AAClB,6BAAkB,MAAM,CAAC,MAAM,EAAE,8HAAE;gBAA1B,KAAK;;AACV,iBAAK,CAAC,IAAI,EAAE,CAAC;SAChB;;;;;;;;;;;;;;;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","file":"scope.js","sourcesContent":["\"use strict\";\r\nlet Bluebird = require(\"bluebird\");\r\nlet _ = require(\"lodash\");\r\n\r\nlet temporaries = [];\r\n\r\nfunction scope(f) {\r\n if (_.isFunction(f)) {\r\n scope.begin();\r\n try {\r\n return f.call(scope, scope);\r\n }\r\n finally {\r\n scope.end();\r\n }\r\n }\r\n}\r\n\r\nscope.begin = function() {\r\n temporaries.push(new Set());\r\n return scope;\r\n};\r\n\r\nscope.end = function() {\r\n if (temporaries.length) {\r\n let set = temporaries[temporaries.length - 1];\r\n temporaries.length--;\r\n free(set);\r\n }\r\n return scope;\r\n};\r\n\r\nscope.register = function(array) {\r\n if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) {\r\n let set = temporaries[temporaries.length - 1];\r\n set.add(array);\r\n }\r\n};\r\n\r\nscope.result = function(array) {\r\n if (temporaries.length && _.isObject(array)) {\r\n let set = temporaries[temporaries.length - 1];\r\n set.delete(array);\r\n }\r\n return array;\r\n};\r\n\r\nfunction free(arrays) {\r\n for (let array of arrays.values()) {\r\n array.free();\r\n }\r\n}\r\n\r\nmodule.exports = scope;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/seq.js b/lib/es5/seq.js index 9b5f50a..a4e7383 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -35,21 +35,21 @@ var _ = require("lodash"); var assert = require("better-assert"); function Seq(begin, end, step) { - assert(_.isNumber(begin)); - if (_.isUndefined(end)) { - begin = 0; - end = begin; - } else { - assert(_.isNumber(end)); - } - step = step || 1; - assert(_.isNumber(step)); - - this.begin = begin; - this.end = end; - this.step = step; - - this.isGFor = false; + assert(_.isNumber(begin)); + if (_.isUndefined(end)) { + begin = 0; + end = begin; + } else { + assert(_.isNumber(end)); + } + step = step || 1; + assert(_.isNumber(step)); + + this.begin = begin; + this.end = end; + this.step = step; + + this.isGFor = false; } module.exports = Seq; diff --git a/lib/es5/seq.js.map b/lib/es5/seq.js.map index ab13264..73b684c 100644 --- a/lib/es5/seq.js.map +++ b/lib/es5/seq.js.map @@ -1 +1 @@ -{"version":3,"sources":["seq.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3B,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,MAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACpB,SAAK,GAAG,CAAC,CAAC;AACV,OAAG,GAAG,KAAK,CAAC;GACf,MACI;AACD,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;GAC3B;AACD,MAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,MAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,MAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,MAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,MAAI,CAAC,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"seq.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nfunction Seq(begin, end, step) {\n assert(_.isNumber(begin));\n if (_.isUndefined(end)) {\n begin = 0;\n end = begin;\n }\n else {\n assert(_.isNumber(end));\n }\n step = step || 1;\n assert(_.isNumber(step));\n\n this.begin = begin;\n this.end = end;\n this.step = step;\n\n this.isGFor = false;\n}\n\nmodule.exports = Seq;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["seq.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3B,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACpB,aAAK,GAAG,CAAC,CAAC;AACV,WAAG,GAAG,KAAK,CAAC;KACf,MACI;AACD,cAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3B;AACD,QAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,QAAI,CAAC,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"seq.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Seq(begin, end, step) {\r\n assert(_.isNumber(begin));\r\n if (_.isUndefined(end)) {\r\n begin = 0;\r\n end = begin;\r\n }\r\n else {\r\n assert(_.isNumber(end));\r\n }\r\n step = step || 1;\r\n assert(_.isNumber(step));\r\n\r\n this.begin = begin;\r\n this.end = end;\r\n this.step = step;\r\n\r\n this.isGFor = false;\r\n}\r\n\r\nmodule.exports = Seq;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/source.js.map b/lib/es5/source.js.map index 7cf852e..f93081c 100644 --- a/lib/es5/source.js.map +++ b/lib/es5/source.js.map @@ -1 +1 @@ -{"version":3,"sources":["source.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,QAAM,EAAE,CAAC;AACT,MAAI,EAAE,CAAC;AACP,UAAQ,EAAE,CAAC;AACX,QAAM,EAAE,CAAC;CACZ,CAAC","file":"source.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n\nlet source = module.exports = {\n device: 0,\n host: 1,\n afDevice: 0,\n afHost: 1\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["source.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;AAC1B,QAAM,EAAE,CAAC;AACT,MAAI,EAAE,CAAC;AACP,UAAQ,EAAE,CAAC;AACX,QAAM,EAAE,CAAC;CACZ,CAAC","file":"source.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet source = module.exports = {\r\n device: 0,\r\n host: 1,\r\n afDevice: 0,\r\n afHost: 1\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/scope.js b/lib/es6/scope.js index 6615116..a004c24 100644 --- a/lib/es6/scope.js +++ b/lib/es6/scope.js @@ -8,24 +8,10 @@ function scope(f) { if (_.isFunction(f)) { scope.begin(); try { - let result = f.call(scope); - if (_.isObject(result) && _.isFunction(result.then)) { - return Bluebird.resolve(result) - .then(function(r) { - return r; - }) - .finally(function() { - scope.end(); - }); - } - else { - scope.end(); - return result; - } + return f.call(scope, scope); } - catch(e) { + finally { scope.end(); - throw e; } } } diff --git a/package.json b/package.json index 942a6f2..b73359f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.19.1", + "version": "0.19.2", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 06798e1..f2c5916 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -29,9 +29,9 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict" +"use strict"; /* global describe,it */ -; + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -475,86 +475,6 @@ describe("AFArray class and methods", function () { } }); - it("should destroy temporaries (async)", function (done) { - async(regeneratorRuntime.mark(function _callee4() { - var arr, sub, x; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - arr = undefined, sub = undefined; - _context4.next = 3; - return af.scope(async(regeneratorRuntime.mark(function _callee3() { - var buff; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - assert(this === af.scope); - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - - sub = arr.at(new af.Seq(3, 6)); - - _context3.next = 8; - return sub.hostAsync(); - - case 8: - buff = _context3.sent; - - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - - this.result(sub); - - return _context3.abrupt("return", 1); - - case 13: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - }))); - - case 3: - x = _context4.sent; - - assert(x === 1); - - _context4.prev = 5; - - arr.set(3, 2); - assert(false); - _context4.next = 14; - break; - - case 10: - _context4.prev = 10; - _context4.t0 = _context4["catch"](5); - - if (/free\(\)/.test(_context4.t0.message)) { - _context4.next = 14; - break; - } - - throw _context4.t0; - - case 14: - - sub.set(0, 2); - - case 15: - case "end": - return _context4.stop(); - } - } - }, _callee4, this, [[5, 10]]); - }))().asCallback(done); - }); - it("should destroy registered arrays", function () { var arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -568,7 +488,7 @@ describe("AFArray class and methods", function () { sub.set(0, 0); - // PArt of the scope, hence will be destroyed. + // Part of the scope, hence will be destroyed. this.register(sub); }); diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index e5d6439..0076ee5 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet testExec = require(\"./testExec\");\nlet float = ref.types.float;\n\ndescribe(\"AFArray class and methods\", function() {\n testExec.run(function(af) {\n let AFArray = af.AFArray;\n\n it(\"should export AFArray constructor\", function() {\n assert(_.isFunction(AFArray));\n });\n\n it(\"should create empty\", function() {\n let array = new AFArray();\n assert(_.isObject(array));\n assert(array.bytes() === 0);\n assert(array.elements() === 0);\n assert(array.isempty());\n assert(_.isFunction(array.host));\n assert(_.isFunction(array.hostAsync));\n assert(_.isUndefined(array.hostAsyncAsync));\n assert(_.isFunction(array.hostSync));\n assert(_.isUndefined(array.hostSyncAsync));\n assert(_.isUndefined(array.hostSyncSync));\n assert(_.isUndefined(array.hostAsyncSync));\n });\n\n it(\"should fail with one number argument\", function() {\n try {\n let array = new AFArray(1);\n assert(false);\n }\n catch (e) {\n }\n });\n\n it(\"should create new one dimensional\", function() {\n let array = new AFArray(10, af.dType.s32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 4);\n assert(array.elements() === 10);\n assert(array.type() === af.dType.s32);\n assert(array.numdims() === 1);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 1);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10);\n assert(dims.ndims === 1);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 1);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === true);\n assert(array.isrow() === false);\n assert(array.iscolumn() === true);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === false);\n assert(array.isrealfloating() === false);\n assert(array.isfloating() === false);\n assert(array.isinteger() === true);\n assert(array.isbool() === false);\n });\n\n it(\"should create new two dimensional\", function() {\n let array = new AFArray(10, 20, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 4);\n assert(array.elements() === 10 * 20);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 2);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 1);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20);\n assert(dims.ndims === 2);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 1);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n it(\"should create new three dimensional\", function() {\n let array = new AFArray(10, 20, 30, af.dType.f32);\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 4);\n assert(array.elements() === 10 * 20 * 30);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 3);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 1);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30);\n assert(dims.ndims === 3);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 1);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n });\n\n function verify4(array) {\n assert(_.isObject(array));\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\n assert(array.elements() === 10 * 20 * 30 * 40);\n assert(array.type() === af.dType.f32);\n assert(array.numdims() === 4);\n assert(array.dims(0) === 10);\n assert(array.dims(1) === 20);\n assert(array.dims(2) === 30);\n assert(array.dims(3) === 40);\n let dims = array.dims();\n assert(_.isObject(dims));\n assert(dims.elements === 10 * 20 * 30 * 40);\n assert(dims.ndims === 4);\n assert(dims.values[0] === 10);\n assert(dims.values[1] === 20);\n assert(dims.values[2] === 30);\n assert(dims.values[3] === 40);\n assert(array.isempty() === false);\n assert(array.isscalar() === false);\n assert(array.isvector() === false);\n assert(array.isrow() === false);\n assert(array.iscolumn() === false);\n assert(array.iscomplex() === false);\n assert(array.isreal() === true);\n assert(array.isdouble() === false);\n assert(array.issingle() === true);\n assert(array.isrealfloating() === true);\n assert(array.isfloating() === true);\n assert(array.isinteger() === false);\n assert(array.isbool() === false);\n }\n\n it(\"should create new four dimensional\", function() {\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4\", function() {\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\n verify4(array);\n });\n\n it(\"should create new four dimensional from dim4 array\", function() {\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\n verify4(array);\n });\n\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\n let f = async(function*() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createAsync));\n\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n yield array.hostAsync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = yield array2.hostAsync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = yield array2.valueAsync();\n assert(v === 0.0);\n\n v = yield array2.at(1).valueAsync();\n assert(v === 1.0);\n\n v = yield array2.at(2).scalarAsync();\n assert(v === 4.0);\n\n v = yield array2.at(\"end\").scalarAsync();\n assert(v === 9.0 * 9.0);\n\n v = yield array2.at(af.end - 1).scalarAsync();\n assert(v === 8.0 * 8.0);\n });\n f().nodeify(done);\n });\n\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\n let int = ref.types.int;\n const count = 10;\n let buff = new Buffer(int.size * count);\n for (let v = 0; v < count; v++) {\n int.set(buff, v * int.size, v * v);\n }\n\n assert(_.isFunction(AFArray.create));\n assert(_.isFunction(AFArray.createSync));\n\n let array = AFArray.createSync(count, af.dType.s32, buff);\n assert(array.bytes() === count * int.size);\n assert(array.type() === af.dType.s32);\n\n let buff2 = new Buffer(int.size * count);\n array.hostSync(buff2);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff2, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n let array2 = array.copy();\n assert(array2 instanceof AFArray);\n assert(array2.bytes() === array.bytes());\n let buff3 = array2.hostSync();\n assert(buff3 instanceof Buffer);\n assert(buff3.length === int.size * count);\n for (let v = 0; v < count; v++) {\n let v1 = int.get(buff, v * int.size);\n let v2 = int.get(buff3, v * int.size);\n assert(v1 === v2);\n assert(v1 === v * v);\n }\n\n // Let's do some indexing:\n let v = array2.valueSync();\n assert(v === 0.0);\n\n v = array.at(1).valueSync();\n assert(v === 1.0);\n\n v = array2.at(2).scalarSync();\n assert(v === 4.0);\n\n v = array2.at(\"end\").scalarSync();\n assert(v === 9.0 * 9.0);\n\n v = array2.at(af.end - 1).scalarSync();\n assert(v === 8.0 * 8.0);\n });\n \n it(\"should be created of a part of another with new dimensions\", function (done) {\n async(function* () {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\n\n let buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n arr.set(3, 2);\n arr.set(4, 3);\n\n buff = yield sub2.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n })().nodeify(done);\n });\n\n describe(\"RAII\", function() {\n describe(\"scope\", function() {\n it(\"should exported as a function\", function () {\n assert(_.isFunction(af.scope));\n });\n\n it(\"should support RAII interface\", function () {\n assert(_.isFunction(af.scope.begin));\n assert(_.isFunction(af.scope.end));\n assert(_.isFunction(af.scope.result));\n assert(_.isFunction(af.scope.register));\n });\n\n it(\"should destroy temporaries (sync)\", function() {\n let arr, sub;\n let x = af.scope(function() {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n this.result(arr);\n\n return 1;\n });\n\n assert(x === 1);\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n\n it(\"should destroy temporaries (async)\", function(done) {\n async(function*() {\n let arr, sub;\n let x = yield af.scope(async(function* () {\n assert(this === af.scope);\n arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n sub = arr.at(new af.Seq(3, 6));\n\n let buff = yield sub.hostAsync();\n\n assert(float.get(buff, 0 * float.size) === 1);\n assert(float.get(buff, 1 * float.size) === 2);\n\n this.result(sub);\n\n return 1;\n }));\n\n assert(x === 1);\n\n try {\n arr.set(3, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n\n sub.set(0, 2);\n })().asCallback(done);\n });\n\n it(\"should destroy registered arrays\", function() {\n let arr = new af.AFArray(10, af.dType.f32);\n arr.set(new af.Col(0), 0);\n arr.set(3, 1);\n arr.set(4, 2);\n\n let sub = arr.at(new af.Seq(3, 6));\n\n af.scope(function() {\n assert(this === af.scope);\n\n sub.set(0, 0);\n\n // PArt of the scope, hence will be destroyed.\n this.register(sub);\n });\n\n arr.set(3, 2);\n\n try {\n sub.set(0, 2);\n assert(false);\n }\n catch (e) {\n if (!/free\\(\\)/.test(e.message)) {\n throw e;\n }\n }\n });\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"AFArray class and methods\", function() {\r\n testExec.run(function(af) {\r\n let AFArray = af.AFArray;\r\n\r\n it(\"should export AFArray constructor\", function() {\r\n assert(_.isFunction(AFArray));\r\n });\r\n\r\n it(\"should create empty\", function() {\r\n let array = new AFArray();\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 0);\r\n assert(array.elements() === 0);\r\n assert(array.isempty());\r\n assert(_.isFunction(array.host));\r\n assert(_.isFunction(array.hostAsync));\r\n assert(_.isUndefined(array.hostAsyncAsync));\r\n assert(_.isFunction(array.hostSync));\r\n assert(_.isUndefined(array.hostSyncAsync));\r\n assert(_.isUndefined(array.hostSyncSync));\r\n assert(_.isUndefined(array.hostAsyncSync));\r\n });\r\n\r\n it(\"should fail with one number argument\", function() {\r\n try {\r\n let array = new AFArray(1);\r\n assert(false);\r\n }\r\n catch (e) {\r\n }\r\n });\r\n\r\n it(\"should create new one dimensional\", function() {\r\n let array = new AFArray(10, af.dType.s32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 4);\r\n assert(array.elements() === 10);\r\n assert(array.type() === af.dType.s32);\r\n assert(array.numdims() === 1);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 1);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10);\r\n assert(dims.ndims === 1);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 1);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === true);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === true);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === false);\r\n assert(array.isrealfloating() === false);\r\n assert(array.isfloating() === false);\r\n assert(array.isinteger() === true);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new two dimensional\", function() {\r\n let array = new AFArray(10, 20, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 4);\r\n assert(array.elements() === 10 * 20);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 2);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20);\r\n assert(dims.ndims === 2);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new three dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 4);\r\n assert(array.elements() === 10 * 20 * 30);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 3);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30);\r\n assert(dims.ndims === 3);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n function verify4(array) {\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\r\n assert(array.elements() === 10 * 20 * 30 * 40);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 4);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 40);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30 * 40);\r\n assert(dims.ndims === 4);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 40);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n }\r\n\r\n it(\"should create new four dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4\", function() {\r\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4 array\", function() {\r\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\r\n let f = async(function*() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createAsync));\r\n\r\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n yield array.hostAsync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = yield array2.hostAsync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = yield array2.valueAsync();\r\n assert(v === 0.0);\r\n\r\n v = yield array2.at(1).valueAsync();\r\n assert(v === 1.0);\r\n\r\n v = yield array2.at(2).scalarAsync();\r\n assert(v === 4.0);\r\n\r\n v = yield array2.at(\"end\").scalarAsync();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = yield array2.at(af.end - 1).scalarAsync();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n f().nodeify(done);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createSync));\r\n\r\n let array = AFArray.createSync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n array.hostSync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = array2.hostSync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.valueSync();\r\n assert(v === 0.0);\r\n\r\n v = array.at(1).valueSync();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalarSync();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalarSync();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalarSync();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n \r\n it(\"should be created of a part of another with new dimensions\", function (done) {\r\n async(function* () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\r\n\r\n let buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n\r\n arr.set(3, 2);\r\n arr.set(4, 3);\r\n\r\n buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n })().nodeify(done);\r\n });\r\n\r\n describe(\"RAII\", function() {\r\n describe(\"scope\", function() {\r\n it(\"should exported as a function\", function () {\r\n assert(_.isFunction(af.scope));\r\n });\r\n\r\n it(\"should support RAII interface\", function () {\r\n assert(_.isFunction(af.scope.begin));\r\n assert(_.isFunction(af.scope.end));\r\n assert(_.isFunction(af.scope.result));\r\n assert(_.isFunction(af.scope.register));\r\n });\r\n\r\n it(\"should destroy temporaries (sync)\", function() {\r\n let arr, sub;\r\n let x = af.scope(function() {\r\n assert(this === af.scope);\r\n arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n sub = arr.at(new af.Seq(3, 6));\r\n\r\n this.result(arr);\r\n\r\n return 1;\r\n });\r\n\r\n assert(x === 1);\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n\r\n it(\"should destroy registered arrays\", function() {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n\r\n af.scope(function() {\r\n assert(this === af.scope);\r\n\r\n sub.set(0, 0);\r\n\r\n // Part of the scope, hence will be destroyed.\r\n this.register(sub);\r\n });\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index 796ed44..be159e8 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -29,9 +29,9 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict" +"use strict"; /* global describe,it */ -; + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); diff --git a/tests/es5/createArrayFunctionTests.js.map b/tests/es5/createArrayFunctionTests.js.map index 679a537..a7386c7 100644 --- a/tests/es5/createArrayFunctionTests.js.map +++ b/tests/es5/createArrayFunctionTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["createArrayFunctionTests.js"],"names":[],"mappings":"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","file":"createArrayFunctionTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n describe(\"randu\", function () {\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu(2, 4, af.dType.s32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * int.size);\n\n for (let i = 0; i < data.length / int.size; i++) {\n const v = int.get(data, i * int.size);\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\n assert(Math.floor(v) === v);\n }\n });\n f().nodeify(done);\n });\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randu([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n\n describe(\"randf\", function () {\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\n try {\n let array = af.randn(2, 4, af.dType.s32);\n return;\n }\n catch(e) {\n if (/invalid dtype argument/ig.test(e.message)) {\n return;\n }\n else {\n throw new Error(\"This should throw appropriate error.\");\n }\n }\n throw new Error(\"This should throw.\");\n\n });\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\n let f = async(function*() {\n let array = af.randn([2, 4], af.dType.f32);\n let data = yield array.copyToHostAsync();\n assert(data instanceof Buffer);\n assert(data.length == 2 * 4 * float.size);\n\n for (let i = 0; i < data.length / float.size; i++) {\n const v = float.get(data, i * float.size);\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\n }\n });\n f().nodeify(done);\n });\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["createArrayFunctionTests.js"],"names":[],"mappings":"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","file":"createArrayFunctionTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet int = ref.types.int;\r\nlet float = ref.types.float;\r\nlet testExec = require(\"./testExec\");\r\n\r\ndescribe(\"Functions to create arrays\", function () {\r\n testExec.run(function(af) {\r\n describe(\"randu\", function () {\r\n it(\"should yield uniform random int array with 2 dimensions\", function (done) {\r\n let f = async(function*() {\r\n let array = af.randu(2, 4, af.dType.s32);\r\n let data = yield array.copyToHostAsync();\r\n assert(data instanceof Buffer);\r\n assert(data.length == 2 * 4 * int.size);\r\n\r\n for (let i = 0; i < data.length / int.size; i++) {\r\n const v = int.get(data, i * int.size);\r\n assert(v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER);\r\n assert(Math.floor(v) === v);\r\n }\r\n });\r\n f().nodeify(done);\r\n });\r\n it(\"should yield uniform random float array with 2 dimensions\", function (done) {\r\n let f = async(function*() {\r\n let array = af.randu([2, 4], af.dType.f32);\r\n let data = yield array.copyToHostAsync();\r\n assert(data instanceof Buffer);\r\n assert(data.length == 2 * 4 * float.size);\r\n\r\n for (let i = 0; i < data.length / float.size; i++) {\r\n const v = float.get(data, i * float.size);\r\n assert(v === 0 || v === 1.0 || (v > 0 && v < 1.0 && v % 1));\r\n }\r\n });\r\n f().nodeify(done);\r\n });\r\n });\r\n\r\n describe(\"randf\", function () {\r\n it(\"should throw error when invoking normal random int array with 2 dimensions\", function () {\r\n try {\r\n let array = af.randn(2, 4, af.dType.s32);\r\n return;\r\n }\r\n catch(e) {\r\n if (/invalid dtype argument/ig.test(e.message)) {\r\n return;\r\n }\r\n else {\r\n throw new Error(\"This should throw appropriate error.\");\r\n }\r\n }\r\n throw new Error(\"This should throw.\");\r\n\r\n });\r\n it(\"should yield normal random float array with 2 dimensions\", function (done) {\r\n let f = async(function*() {\r\n let array = af.randn([2, 4], af.dType.f32);\r\n let data = yield array.copyToHostAsync();\r\n assert(data instanceof Buffer);\r\n assert(data.length == 2 * 4 * float.size);\r\n\r\n for (let i = 0; i < data.length / float.size; i++) {\r\n const v = float.get(data, i * float.size);\r\n assert(v === 0 || (v > -4.0 && v < 4.0 && v % 1));\r\n }\r\n });\r\n f().nodeify(done);\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/deviceTests.js b/tests/es5/deviceTests.js index 9224329..57fb322 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -29,9 +29,9 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict" +"use strict"; /* global describe,it */ -; + var assert = require("better-assert"); var _ = require("lodash"); var Bluebird = require("bluebird"); diff --git a/tests/es5/deviceTests.js.map b/tests/es5/deviceTests.js.map index acb8ac3..6a9ede1 100644 --- a/tests/es5/deviceTests.js.map +++ b/tests/es5/deviceTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["deviceTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAAY,CAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,gBAAgB,EAAE,YAAW;AAClC,YAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE;AACtB,UAAE,CAAC,iCAAiC,EAAE,YAAW;AAC7C,gBAAI,WAAW,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;AACtC,kBAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACxB,gBAAI,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5B,kBAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;;;;;;AACrC,qCAAiB,KAAK,8HAAE;wBAAf,IAAI;;AACT,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnD,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,0BAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBAC/C;;;;;;;;;;;;;;;SACJ,CAAC,CAAC;;AAEH,UAAE,CAAC,8BAA8B,EAAE,UAAS,IAAI,EAAE;AAC9C,cAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB,CAAC,CAAC;;AAEH,UAAE,CAAC,6BAA6B,EAAE,UAAS,IAAI,EAAE;AAC7C,cAAE,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC,CAAC,CAAC;;AAEH,UAAE,CAAC,8CAA8C,EAAE,UAAS,IAAI,EAAE;AAC9D,cAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACZ,IAAI,CAAC,YAAW;AACb,oBAAI,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;aACxC,EACD,YAAW;AACP,oBAAI,EAAE,CAAC;aACV,CAAC,CAAC;SACV,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"deviceTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet Bluebird = require(\"bluebird\");\nlet testExec = require(\"./testExec\");\n\ndescribe(\"device methods\", function() {\n testExec.run(function(af) {\n it(\"should return available devices\", function() {\n let deviceCount = af.getDeviceCount();\n assert(deviceCount > 0);\n let infos = af.getDevices();\n assert(_.isArray(infos));\n assert(infos.length === deviceCount);\n for (let info of infos) {\n assert(_.isString(info.name) && info.name);\n assert(_.isString(info.platform) && info.platform);\n assert(_.isString(info.compute) && info.compute);\n assert(_.isBoolean(info.isDoubleAvailable));\n }\n });\n\n it(\"should do sync with callback\", function(done) {\n af.sync(done);\n });\n\n it(\"should do sync with promise\", function(done) {\n af.syncAsync().nodeify(done);\n });\n\n it(\"sync should failed if device is out of range\", function(done) {\n af.syncAsync(100)\n .then(function() {\n done(new Error(\"This should fail!\"));\n },\n function() {\n done();\n });\n });\n });\n});\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["deviceTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,gBAAgB,EAAE,YAAW;AAClC,YAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE;AACtB,UAAE,CAAC,iCAAiC,EAAE,YAAW;AAC7C,gBAAI,WAAW,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;AACtC,kBAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACxB,gBAAI,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5B,kBAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;;;;;;AACrC,qCAAiB,KAAK,8HAAE;wBAAf,IAAI;;AACT,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnD,0BAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,0BAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBAC/C;;;;;;;;;;;;;;;SACJ,CAAC,CAAC;;AAEH,UAAE,CAAC,8BAA8B,EAAE,UAAS,IAAI,EAAE;AAC9C,cAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB,CAAC,CAAC;;AAEH,UAAE,CAAC,6BAA6B,EAAE,UAAS,IAAI,EAAE;AAC7C,cAAE,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC,CAAC,CAAC;;AAEH,UAAE,CAAC,8CAA8C,EAAE,UAAS,IAAI,EAAE;AAC9D,cAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACZ,IAAI,CAAC,YAAW;AACb,oBAAI,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;aACxC,EACD,YAAW;AACP,oBAAI,EAAE,CAAC;aACV,CAAC,CAAC;SACV,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"deviceTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet testExec = require(\"./testExec\");\r\n\r\ndescribe(\"device methods\", function() {\r\n testExec.run(function(af) {\r\n it(\"should return available devices\", function() {\r\n let deviceCount = af.getDeviceCount();\r\n assert(deviceCount > 0);\r\n let infos = af.getDevices();\r\n assert(_.isArray(infos));\r\n assert(infos.length === deviceCount);\r\n for (let info of infos) {\r\n assert(_.isString(info.name) && info.name);\r\n assert(_.isString(info.platform) && info.platform);\r\n assert(_.isString(info.compute) && info.compute);\r\n assert(_.isBoolean(info.isDoubleAvailable));\r\n }\r\n });\r\n\r\n it(\"should do sync with callback\", function(done) {\r\n af.sync(done);\r\n });\r\n\r\n it(\"should do sync with promise\", function(done) {\r\n af.syncAsync().nodeify(done);\r\n });\r\n\r\n it(\"sync should failed if device is out of range\", function(done) {\r\n af.syncAsync(100)\r\n .then(function() {\r\n done(new Error(\"This should fail!\"));\r\n },\r\n function() {\r\n done();\r\n });\r\n });\r\n });\r\n});\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map index 103c04d..01b9d28 100644 --- a/tests/es5/index.js.map +++ b/tests/es5/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/B,OAAO,CAAC,4BAA4B,CAAC,CAAC","file":"index.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nrequire(\"./deviceTests\");\nrequire(\"./afArrayTests\");\nrequire(\"./createArrayFunctionTests\");\nrequire(\"./mathFunctionTests\");\nrequire(\"./moveAndReorderArrayTests\");"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/B,OAAO,CAAC,4BAA4B,CAAC,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\nrequire(\"./deviceTests\");\r\nrequire(\"./afArrayTests\");\r\nrequire(\"./createArrayFunctionTests\");\r\nrequire(\"./mathFunctionTests\");\r\nrequire(\"./moveAndReorderArrayTests\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/mathFunctionTests.js b/tests/es5/mathFunctionTests.js index 0c20e8f..5de174a 100644 --- a/tests/es5/mathFunctionTests.js +++ b/tests/es5/mathFunctionTests.js @@ -29,9 +29,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict" +"use strict"; /* global describe,it */ -; + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); diff --git a/tests/es5/mathFunctionTests.js.map b/tests/es5/mathFunctionTests.js.map index fc6f273..6613ff8 100644 --- a/tests/es5/mathFunctionTests.js.map +++ b/tests/es5/mathFunctionTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["mathFunctionTests.js"],"names":[],"mappings":"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","file":"mathFunctionTests.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\nlet testHelpers = require(\"./testHelpers\");\n\ndescribe(\"Math functions\", function () {\n testExec.run(function(af) {\n it(\"should invoke abs\", function () {\n testHelpers.testIntfSyncArr(af, af.abs);\n });\n it(\"should invoke arg\", function () {\n testHelpers.testIntfSyncArr(af, af.arg);\n });\n it(\"should invoke ceil\", function () {\n testHelpers.testIntfSyncArr(af, af.ceil);\n });\n it(\"should invoke floor\", function () {\n testHelpers.testIntfSyncArr(af, af.floor);\n });\n it(\"should invoke hypot\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.hypot);\n });\n it(\"should invoke max\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.max);\n });\n it(\"should invoke min\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.min);\n });\n it(\"should invoke mod\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.mod);\n });\n it(\"should invoke round\", function () {\n testHelpers.testIntfSyncArr(af, af.round);\n });\n it(\"should invoke sign\", function () {\n testHelpers.testIntfSyncArr(af, af.sign);\n });\n it(\"should invoke trunc\", function () {\n testHelpers.testIntfSyncArr(af, af.trunc);\n });\n it(\"should invoke rem\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.rem);\n });\n it(\"should invoke acos\", function () {\n testHelpers.testIntfSyncArr(af, af.acos);\n });\n it(\"should invoke asin\", function () {\n testHelpers.testIntfSyncArr(af, af.asin);\n });\n it(\"should invoke atan\", function () {\n testHelpers.testIntfSyncArr(af, af.atan);\n });\n it(\"should invoke atan2\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.atan2);\n });\n it(\"should invoke cos\", function () {\n testHelpers.testIntfSyncArr(af, af.cos);\n });\n it(\"should invoke sin\", function () {\n testHelpers.testIntfSyncArr(af, af.sin);\n });\n it(\"should invoke tan\", function () {\n testHelpers.testIntfSyncArr(af, af.tan);\n });\n it(\"should invoke cbrt\", function () {\n testHelpers.testIntfSyncArr(af, af.cbrt);\n });\n it(\"should invoke erf\", function () {\n testHelpers.testIntfSyncArr(af, af.erf);\n });\n it(\"should invoke erfc\", function () {\n testHelpers.testIntfSyncArr(af, af.erfc);\n });\n it(\"should invoke exp\", function () {\n testHelpers.testIntfSyncArr(af, af.exp);\n });\n it(\"should invoke expm1\", function () {\n testHelpers.testIntfSyncArr(af, af.expm1);\n });\n it(\"should invoke factorial\", function () {\n testHelpers.testIntfSyncArr(af, af.factorial);\n });\n it(\"should invoke lgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.lgamma);\n });\n it(\"should invoke tgamma\", function () {\n testHelpers.testIntfSyncArr(af, af.tgamma);\n });\n it(\"should invoke log\", function () {\n testHelpers.testIntfSyncArr(af, af.log);\n });\n it(\"should invoke log10\", function () {\n testHelpers.testIntfSyncArr(af, af.log10);\n });\n it(\"should invoke log1p\", function () {\n testHelpers.testIntfSyncArr(af, af.log1p);\n });\n it(\"should invoke pow\", function () {\n testHelpers.testIntfSyncArrArr(af, af.pow);\n });\n it(\"should invoke pow2\", function () {\n testHelpers.testIntfSyncArr(af, af.pow2);\n });\n it(\"should invoke root\", function () {\n testHelpers.testIntfSyncArrDoubleComb(af, af.root);\n });\n it(\"should invoke sqrt\", function () {\n testHelpers.testIntfSyncArr(af, af.sqrt);\n });\n it(\"should invoke sigmoid\", function () {\n testHelpers.testIntfSyncArr(af, af.sigmoid);\n });\n it(\"should invoke acosh\", function () {\n testHelpers.testIntfSyncArr(af, af.acosh);\n });\n it(\"should invoke asinh\", function () {\n testHelpers.testIntfSyncArr(af, af.asinh);\n });\n it(\"should invoke atanh\", function () {\n testHelpers.testIntfSyncArr(af, af.atanh);\n });\n it(\"should invoke cosh\", function () {\n testHelpers.testIntfSyncArr(af, af.cosh);\n });\n it(\"should invoke sinh\", function () {\n testHelpers.testIntfSyncArr(af, af.sinh);\n });\n it(\"should invoke complex\", function () {\n testHelpers.testIntfSyncArr(af, af.complex);\n });\n it(\"should invoke conjg\", function () {\n testHelpers.testIntfSyncArr(af, af.conjg);\n });\n it(\"should invoke imag\", function () {\n testHelpers.testIntfSyncArr(af, af.imag);\n });\n it(\"should invoke real\", function () {\n testHelpers.testIntfSyncArr(af, af.real);\n });\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["mathFunctionTests.js"],"names":[],"mappings":"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","file":"mathFunctionTests.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet int = ref.types.int;\r\nlet float = ref.types.float;\r\nlet testExec = require(\"./testExec\");\r\nlet testHelpers = require(\"./testHelpers\");\r\n\r\ndescribe(\"Math functions\", function () {\r\n testExec.run(function(af) {\r\n it(\"should invoke abs\", function () {\r\n testHelpers.testIntfSyncArr(af, af.abs);\r\n });\r\n it(\"should invoke arg\", function () {\r\n testHelpers.testIntfSyncArr(af, af.arg);\r\n });\r\n it(\"should invoke ceil\", function () {\r\n testHelpers.testIntfSyncArr(af, af.ceil);\r\n });\r\n it(\"should invoke floor\", function () {\r\n testHelpers.testIntfSyncArr(af, af.floor);\r\n });\r\n it(\"should invoke hypot\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.hypot);\r\n });\r\n it(\"should invoke max\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.max);\r\n });\r\n it(\"should invoke min\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.min);\r\n });\r\n it(\"should invoke mod\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.mod);\r\n });\r\n it(\"should invoke round\", function () {\r\n testHelpers.testIntfSyncArr(af, af.round);\r\n });\r\n it(\"should invoke sign\", function () {\r\n testHelpers.testIntfSyncArr(af, af.sign);\r\n });\r\n it(\"should invoke trunc\", function () {\r\n testHelpers.testIntfSyncArr(af, af.trunc);\r\n });\r\n it(\"should invoke rem\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.rem);\r\n });\r\n it(\"should invoke acos\", function () {\r\n testHelpers.testIntfSyncArr(af, af.acos);\r\n });\r\n it(\"should invoke asin\", function () {\r\n testHelpers.testIntfSyncArr(af, af.asin);\r\n });\r\n it(\"should invoke atan\", function () {\r\n testHelpers.testIntfSyncArr(af, af.atan);\r\n });\r\n it(\"should invoke atan2\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.atan2);\r\n });\r\n it(\"should invoke cos\", function () {\r\n testHelpers.testIntfSyncArr(af, af.cos);\r\n });\r\n it(\"should invoke sin\", function () {\r\n testHelpers.testIntfSyncArr(af, af.sin);\r\n });\r\n it(\"should invoke tan\", function () {\r\n testHelpers.testIntfSyncArr(af, af.tan);\r\n });\r\n it(\"should invoke cbrt\", function () {\r\n testHelpers.testIntfSyncArr(af, af.cbrt);\r\n });\r\n it(\"should invoke erf\", function () {\r\n testHelpers.testIntfSyncArr(af, af.erf);\r\n });\r\n it(\"should invoke erfc\", function () {\r\n testHelpers.testIntfSyncArr(af, af.erfc);\r\n });\r\n it(\"should invoke exp\", function () {\r\n testHelpers.testIntfSyncArr(af, af.exp);\r\n });\r\n it(\"should invoke expm1\", function () {\r\n testHelpers.testIntfSyncArr(af, af.expm1);\r\n });\r\n it(\"should invoke factorial\", function () {\r\n testHelpers.testIntfSyncArr(af, af.factorial);\r\n });\r\n it(\"should invoke lgamma\", function () {\r\n testHelpers.testIntfSyncArr(af, af.lgamma);\r\n });\r\n it(\"should invoke tgamma\", function () {\r\n testHelpers.testIntfSyncArr(af, af.tgamma);\r\n });\r\n it(\"should invoke log\", function () {\r\n testHelpers.testIntfSyncArr(af, af.log);\r\n });\r\n it(\"should invoke log10\", function () {\r\n testHelpers.testIntfSyncArr(af, af.log10);\r\n });\r\n it(\"should invoke log1p\", function () {\r\n testHelpers.testIntfSyncArr(af, af.log1p);\r\n });\r\n it(\"should invoke pow\", function () {\r\n testHelpers.testIntfSyncArrArr(af, af.pow);\r\n });\r\n it(\"should invoke pow2\", function () {\r\n testHelpers.testIntfSyncArr(af, af.pow2);\r\n });\r\n it(\"should invoke root\", function () {\r\n testHelpers.testIntfSyncArrDoubleComb(af, af.root);\r\n });\r\n it(\"should invoke sqrt\", function () {\r\n testHelpers.testIntfSyncArr(af, af.sqrt);\r\n });\r\n it(\"should invoke sigmoid\", function () {\r\n testHelpers.testIntfSyncArr(af, af.sigmoid);\r\n });\r\n it(\"should invoke acosh\", function () {\r\n testHelpers.testIntfSyncArr(af, af.acosh);\r\n });\r\n it(\"should invoke asinh\", function () {\r\n testHelpers.testIntfSyncArr(af, af.asinh);\r\n });\r\n it(\"should invoke atanh\", function () {\r\n testHelpers.testIntfSyncArr(af, af.atanh);\r\n });\r\n it(\"should invoke cosh\", function () {\r\n testHelpers.testIntfSyncArr(af, af.cosh);\r\n });\r\n it(\"should invoke sinh\", function () {\r\n testHelpers.testIntfSyncArr(af, af.sinh);\r\n });\r\n it(\"should invoke complex\", function () {\r\n testHelpers.testIntfSyncArr(af, af.complex);\r\n });\r\n it(\"should invoke conjg\", function () {\r\n testHelpers.testIntfSyncArr(af, af.conjg);\r\n });\r\n it(\"should invoke imag\", function () {\r\n testHelpers.testIntfSyncArr(af, af.imag);\r\n });\r\n it(\"should invoke real\", function () {\r\n testHelpers.testIntfSyncArr(af, af.real);\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/moveAndReorderArrayTests.js b/tests/es5/moveAndReorderArrayTests.js index 38e80d6..d18ee6c 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -29,9 +29,9 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -"use strict" +"use strict"; /* global describe,it */ -; + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); diff --git a/tests/es5/moveAndReorderArrayTests.js.map b/tests/es5/moveAndReorderArrayTests.js.map index ed47878..62ee0d2 100644 --- a/tests/es5/moveAndReorderArrayTests.js.map +++ b/tests/es5/moveAndReorderArrayTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["moveAndReorderArrayTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAAY,CAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,4BAA4B,EAAE,YAAY;AAC/C,UAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE,EAEzB,CAAC,CAAC;CACN,CAAC,CAAC","file":"moveAndReorderArrayTests.js","sourcesContent":["/*\nCopyright (c) 2014-2015, ArrayFire\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\"use strict\";\n/* global describe,it */\nlet assert = require(\"better-assert\");\nlet _ = require(\"lodash\");\nlet ref = require(\"ref\");\nlet Bluebird = require(\"bluebird\");\nlet async = Bluebird.coroutine;\nlet int = ref.types.int;\nlet float = ref.types.float;\nlet testExec = require(\"./testExec\");\n\ndescribe(\"Functions to create arrays\", function () {\n testExec.run(function(af) {\n\n });\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["moveAndReorderArrayTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAErC,QAAQ,CAAC,4BAA4B,EAAE,YAAY;AAC/C,UAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE,EAEzB,CAAC,CAAC;CACN,CAAC,CAAC","file":"moveAndReorderArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet int = ref.types.int;\r\nlet float = ref.types.float;\r\nlet testExec = require(\"./testExec\");\r\n\r\ndescribe(\"Functions to create arrays\", function () {\r\n testExec.run(function(af) {\r\n\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testExec.js b/tests/es5/testExec.js index 6d7d31c..fa6c8c3 100644 --- a/tests/es5/testExec.js +++ b/tests/es5/testExec.js @@ -34,40 +34,40 @@ var af = require("../.."); function runOn(id, f) { - describe(id + " platform", function () { - var afID = af(id); - f(afID); - }); + describe(id + " platform", function () { + var afID = af(id); + f(afID); + }); } var testExec = { - run: function run(f) { - var platfroms = af.supportedPlatforms(); - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; + run: function run(f) { + var platfroms = af.supportedPlatforms(); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - try { - for (var _iterator = platfroms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var pl = _step.value; + try { + for (var _iterator = platfroms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var pl = _step.value; - runOn(pl, f); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + runOn(pl, f); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } + } }; module.exports = testExec; diff --git a/tests/es5/testExec.js.map b/tests/es5/testExec.js.map index 8fcd853..968e8b4 100644 --- a/tests/es5/testExec.js.map +++ b/tests/es5/testExec.js.map @@ -1 +1 @@ -{"version":3,"sources":["testExec.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE1B,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;AAClB,YAAQ,CAAC,EAAE,GAAG,WAAW,EAAE,YAAY;AACnC,YAAI,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,SAAC,CAAC,IAAI,CAAC,CAAC;KACX,CAAC,CAAC;CACN;;AAED,IAAI,QAAQ,GAAG;AACX,OAAG,EAAE,aAAS,CAAC,EAAE;AACb,YAAI,SAAS,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;;;;;;AACxC,iCAAe,SAAS,8HAAE;oBAAjB,EAAE;;AACP,qBAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChB;;;;;;;;;;;;;;;KACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"testExec.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet af = require(\"../..\");\n\nfunction runOn(id, f) {\n describe(id + \" platform\", function () {\n let afID = af(id);\n f(afID);\n });\n}\n\nlet testExec = {\n run: function(f) {\n let platfroms = af.supportedPlatforms();\n for (let pl of platfroms) {\n runOn(pl, f);\n }\n }\n};\n\nmodule.exports = testExec;\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["testExec.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE1B,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;AAClB,UAAQ,CAAC,EAAE,GAAG,WAAW,EAAE,YAAY;AACnC,QAAI,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,KAAC,CAAC,IAAI,CAAC,CAAC;GACX,CAAC,CAAC;CACN;;AAED,IAAI,QAAQ,GAAG;AACX,KAAG,EAAE,aAAS,CAAC,EAAE;AACb,QAAI,SAAS,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;;;;;;AACxC,2BAAe,SAAS,8HAAE;YAAjB,EAAE;;AACP,aAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;OAChB;;;;;;;;;;;;;;;GACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"testExec.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\nlet af = require(\"../..\");\r\n\r\nfunction runOn(id, f) {\r\n describe(id + \" platform\", function () {\r\n let afID = af(id);\r\n f(afID);\r\n });\r\n}\r\n\r\nlet testExec = {\r\n run: function(f) {\r\n let platfroms = af.supportedPlatforms();\r\n for (let pl of platfroms) {\r\n runOn(pl, f);\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = testExec;\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/testHelpers.js.map b/tests/es5/testHelpers.js.map index 22f0f53..f399dd0 100644 --- a/tests/es5/testHelpers.js.map +++ b/tests/es5/testHelpers.js.map @@ -1 +1 @@ -{"version":3,"sources":["testHelpers.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,IAAI,WAAW,GAAG;AACd,6BAAyB,EAAE,mCAAS,EAAE,EAAE,IAAI,EAAE;AAC1C,YAAI,MAAM,YAAA,CAAC;AACX,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,sBAAkB,EAAE,4BAAS,EAAE,EAAE,IAAI,EAAE;AACnC,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,mBAAe,EAAE,yBAAS,EAAE,EAAE,IAAI,EAAE;AAChC,YAAI,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,CAAC,CAAC;AACT,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC","file":"testHelpers.js","sourcesContent":["/*\n Copyright (c) 2014-2015, ArrayFire\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n\n * Neither the name of the ArrayFire nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\"use strict\";\nlet _ = require(\"lodash\");\nlet assert = require(\"better-assert\");\n\nlet testHelpers = {\n testIntfSyncArrDoubleComb: function(af, func) {\n let result;\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n result = func(arr1, 42);\n assert(result instanceof af.AFArray);\n result = func(42, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArrArr: function(af, func) {\n let arr1 = new af.AFArray(10, af.dType.f32);\n let arr2 = new af.AFArray(10, af.dType.f32);\n let result = func(arr1, arr2);\n assert(result instanceof af.AFArray);\n try {\n func(42, {});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n },\n testIntfSyncArr: function(af, func) {\n let arr = new af.AFArray(10, af.dType.f32);\n let result = func(arr);\n assert(result instanceof af.AFArray);\n try {\n func({});\n assert(false);\n }\n catch (e) {\n _.noop(e);\n }\n }\n};\n\nmodule.exports = testHelpers;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["testHelpers.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AACb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,IAAI,WAAW,GAAG;AACd,6BAAyB,EAAE,mCAAS,EAAE,EAAE,IAAI,EAAE;AAC1C,YAAI,MAAM,YAAA,CAAC;AACX,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,cAAM,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,sBAAkB,EAAE,4BAAS,EAAE,EAAE,IAAI,EAAE;AACnC,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACb,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;AACD,mBAAe,EAAE,yBAAS,EAAE,EAAE,IAAI,EAAE;AAChC,YAAI,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,cAAM,CAAC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;AACrC,YAAI;AACA,gBAAI,CAAC,EAAE,CAAC,CAAC;AACT,kBAAM,CAAC,KAAK,CAAC,CAAC;SACjB,CACD,OAAO,CAAC,EAAE;AACN,aAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;CACJ,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC","file":"testHelpers.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nlet testHelpers = {\r\n testIntfSyncArrDoubleComb: function(af, func) {\r\n let result;\r\n let arr1 = new af.AFArray(10, af.dType.f32);\r\n let arr2 = new af.AFArray(10, af.dType.f32);\r\n result = func(arr1, arr2);\r\n assert(result instanceof af.AFArray);\r\n result = func(arr1, 42);\r\n assert(result instanceof af.AFArray);\r\n result = func(42, arr2);\r\n assert(result instanceof af.AFArray);\r\n try {\r\n func(42, {});\r\n assert(false);\r\n }\r\n catch (e) {\r\n _.noop(e);\r\n }\r\n },\r\n testIntfSyncArrArr: function(af, func) {\r\n let arr1 = new af.AFArray(10, af.dType.f32);\r\n let arr2 = new af.AFArray(10, af.dType.f32);\r\n let result = func(arr1, arr2);\r\n assert(result instanceof af.AFArray);\r\n try {\r\n func(42, {});\r\n assert(false);\r\n }\r\n catch (e) {\r\n _.noop(e);\r\n }\r\n },\r\n testIntfSyncArr: function(af, func) {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n let result = func(arr);\r\n assert(result instanceof af.AFArray);\r\n try {\r\n func({});\r\n assert(false);\r\n }\r\n catch (e) {\r\n _.noop(e);\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = testHelpers;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 00a965a..12bfeb0 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -401,44 +401,6 @@ describe("AFArray class and methods", function() { } }); - it("should destroy temporaries (async)", function(done) { - async(function*() { - let arr, sub; - let x = yield af.scope(async(function* () { - assert(this === af.scope); - arr = new af.AFArray(10, af.dType.f32); - arr.set(new af.Col(0), 0); - arr.set(3, 1); - arr.set(4, 2); - - sub = arr.at(new af.Seq(3, 6)); - - let buff = yield sub.hostAsync(); - - assert(float.get(buff, 0 * float.size) === 1); - assert(float.get(buff, 1 * float.size) === 2); - - this.result(sub); - - return 1; - })); - - assert(x === 1); - - try { - arr.set(3, 2); - assert(false); - } - catch (e) { - if (!/free\(\)/.test(e.message)) { - throw e; - } - } - - sub.set(0, 2); - })().asCallback(done); - }); - it("should destroy registered arrays", function() { let arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -452,7 +414,7 @@ describe("AFArray class and methods", function() { sub.set(0, 0); - // PArt of the scope, hence will be destroyed. + // Part of the scope, hence will be destroyed. this.register(sub); }); From fb386e21157d1701539e982f2f38326ed3a77c3f Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Mon, 28 Dec 2015 21:57:43 +0100 Subject: [PATCH 35/45] gfor fixes and test --- changelog.md | 5 +++ lib/es5/makeGfor.js.map | 2 +- lib/es5/seq.js | 2 +- lib/es5/seq.js.map | 2 +- lib/es6/makeGfor.js | 2 +- lib/es6/seq.js | 2 +- package.json | 12 +++--- src/symbols.cpp | 2 +- tests/es5/gfor.js | 94 +++++++++++++++++++++++++++++++++++++++++ tests/es5/gfor.js.map | 1 + tests/es5/index.js | 1 + tests/es5/index.js.map | 2 +- tests/es6/gfor.js | 63 +++++++++++++++++++++++++++ tests/es6/index.js | 3 +- 14 files changed, 179 insertions(+), 14 deletions(-) create mode 100644 tests/es5/gfor.js create mode 100644 tests/es5/gfor.js.map create mode 100644 tests/es6/gfor.js diff --git a/changelog.md b/changelog.md index d7f13e8..3a32c87 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +# 0.20.0 (2015-12-28) + +- FIX: gfor actually works +- gfor unit test added + # 0.19.2 (2015-12-28) - Removed (mis)feature: scope cannot be async diff --git a/lib/es5/makeGfor.js.map b/lib/es5/makeGfor.js.map index 1717e09..51f9e19 100644 --- a/lib/es5/makeGfor.js.map +++ b/lib/es5/makeGfor.js.map @@ -1 +1 @@ -{"version":3,"sources":["makeGfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,WAAO,SAAS,IAAI,GAAG;AACnB,YAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AACd,aAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,oBAAI,GAAG,CAAC,CAAC;AACT,sBAAM;aACT;SACJ;AACD,YAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACb,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,kBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;AACD,YAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAI,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;AACrD,mBAAO,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACjC;AACD,YAAI,GAAG,YAAA,CAAC;AACR,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MACI,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,MACI;AACD,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,WAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,UAAE,CAAC,WAAW,EAAE,CAAC;AACjB,YAAI;AACA,qBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtC,SACO;AACJ,cAAE,CAAC,WAAW,EAAE,CAAC;SACpB;KACJ,CAAA;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"makeGfor.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\nlet Seq = require(\"./seq\");\r\n\r\nfunction makeGfor(af) {\r\n return function gfor() {\r\n let fPos = -1;\r\n for(let i = 0; i < arguments.length; i++) {\r\n if (_.isFunction(arguments[i])) {\r\n fPos = i;\r\n break;\r\n }\r\n }\r\n if (fPos === -1) {\r\n throw new Error(\"Body function argument expected.\");\r\n }\r\n if (fPos === 0) {\r\n throw new Error(\"Seq arguments expected.\");\r\n }\r\n let thisArg = arguments[fPos];\r\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\r\n thisArg = arguments[fPos + 1];\r\n }\r\n let seq;\r\n if (fPos === 1) {\r\n seq = new Seq(arguments[0]);\r\n }\r\n else if (fPos === 2) {\r\n seq = new Seq(arguments[0], arguments[1]);\r\n }\r\n else {\r\n throw new Error(\"Invalid number of Seq arguments.\");\r\n }\r\n seq.isGFor = true;\r\n af._gforToggle();\r\n try {\r\n arguments[fPos].call(thisArg, seq);\r\n }\r\n finally {\r\n af._gforToggle();\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = makeGfor;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["makeGfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE;AAClB,WAAO,SAAS,IAAI,GAAG;AACnB,YAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AACd,aAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,oBAAI,GAAG,CAAC,CAAC;AACT,sBAAM;aACT;SACJ;AACD,YAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACb,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,kBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;AACD,YAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAI,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;AACrD,mBAAO,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACjC;AACD,YAAI,GAAG,YAAA,CAAC;AACR,YAAI,IAAI,KAAK,CAAC,EAAE;AACZ,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MACI,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,eAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,MACI;AACD,kBAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;AACD,WAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,UAAE,CAAC,WAAW,EAAE,CAAC;AACjB,YAAI;AACA,qBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtC,SACO;AACJ,cAAE,CAAC,WAAW,EAAE,CAAC;SACpB;KACJ,CAAC;CACL;;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC","file":"makeGfor.js","sourcesContent":["/*\r\n Copyright (c) 2014-2015, ArrayFire\r\n Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\n All rights reserved.\r\n\r\n Redistribution and use in source and binary forms, with or without modification,\r\n are permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\nlet Seq = require(\"./seq\");\r\n\r\nfunction makeGfor(af) {\r\n return function gfor() {\r\n let fPos = -1;\r\n for(let i = 0; i < arguments.length; i++) {\r\n if (_.isFunction(arguments[i])) {\r\n fPos = i;\r\n break;\r\n }\r\n }\r\n if (fPos === -1) {\r\n throw new Error(\"Body function argument expected.\");\r\n }\r\n if (fPos === 0) {\r\n throw new Error(\"Seq arguments expected.\");\r\n }\r\n let thisArg = arguments[fPos];\r\n if (arguments.length > fPos + 1 && _.isObject(fPos + 1)) {\r\n thisArg = arguments[fPos + 1];\r\n }\r\n let seq;\r\n if (fPos === 1) {\r\n seq = new Seq(arguments[0]);\r\n }\r\n else if (fPos === 2) {\r\n seq = new Seq(arguments[0], arguments[1]);\r\n }\r\n else {\r\n throw new Error(\"Invalid number of Seq arguments.\");\r\n }\r\n seq.isGFor = true;\r\n af._gforToggle();\r\n try {\r\n arguments[fPos].call(thisArg, seq);\r\n }\r\n finally {\r\n af._gforToggle();\r\n }\r\n };\r\n}\r\n\r\nmodule.exports = makeGfor;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/seq.js b/lib/es5/seq.js index a4e7383..f8c72da 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -37,8 +37,8 @@ var assert = require("better-assert"); function Seq(begin, end, step) { assert(_.isNumber(begin)); if (_.isUndefined(end)) { + end = begin - 1; begin = 0; - end = begin; } else { assert(_.isNumber(end)); } diff --git a/lib/es5/seq.js.map b/lib/es5/seq.js.map index 73b684c..d952a27 100644 --- a/lib/es5/seq.js.map +++ b/lib/es5/seq.js.map @@ -1 +1 @@ -{"version":3,"sources":["seq.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3B,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACpB,aAAK,GAAG,CAAC,CAAC;AACV,WAAG,GAAG,KAAK,CAAC;KACf,MACI;AACD,cAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3B;AACD,QAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,QAAI,CAAC,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"seq.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Seq(begin, end, step) {\r\n assert(_.isNumber(begin));\r\n if (_.isUndefined(end)) {\r\n begin = 0;\r\n end = begin;\r\n }\r\n else {\r\n assert(_.isNumber(end));\r\n }\r\n step = step || 1;\r\n assert(_.isNumber(step));\r\n\r\n this.begin = begin;\r\n this.end = end;\r\n this.step = step;\r\n\r\n this.isGFor = false;\r\n}\r\n\r\nmodule.exports = Seq;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["seq.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;;AAEtC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3B,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACpB,WAAG,GAAG,KAAK,GAAG,CAAC,CAAC;AAChB,aAAK,GAAG,CAAC,CAAC;KACb,MACI;AACD,cAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3B;AACD,QAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,UAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEzB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,QAAI,CAAC,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"seq.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet assert = require(\"better-assert\");\r\n\r\nfunction Seq(begin, end, step) {\r\n assert(_.isNumber(begin));\r\n if (_.isUndefined(end)) {\r\n end = begin - 1;\r\n begin = 0;\r\n }\r\n else {\r\n assert(_.isNumber(end));\r\n }\r\n step = step || 1;\r\n assert(_.isNumber(step));\r\n\r\n this.begin = begin;\r\n this.end = end;\r\n this.step = step;\r\n\r\n this.isGFor = false;\r\n}\r\n\r\nmodule.exports = Seq;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/makeGfor.js b/lib/es6/makeGfor.js index f6ebdfa..89fce9e 100644 --- a/lib/es6/makeGfor.js +++ b/lib/es6/makeGfor.js @@ -72,7 +72,7 @@ function makeGfor(af) { finally { af._gforToggle(); } - } + }; } module.exports = makeGfor; \ No newline at end of file diff --git a/lib/es6/seq.js b/lib/es6/seq.js index 8dc8107..348cf11 100644 --- a/lib/es6/seq.js +++ b/lib/es6/seq.js @@ -37,8 +37,8 @@ let assert = require("better-assert"); function Seq(begin, end, step) { assert(_.isNumber(begin)); if (_.isUndefined(end)) { + end = begin - 1; begin = 0; - end = begin; } else { assert(_.isNumber(end)); diff --git a/package.json b/package.json index b73359f..205d146 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.19.2", + "version": "0.20.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { @@ -25,16 +25,16 @@ "devDependencies": { "babel": "^6.1.18", "babel-preset-es2015": "^6.1.18", + "debug": "*", + "fs-extra": "*", "gulp": "^3.9.0", "gulp-babel": "^6.1.0", "gulp-sequence": "^0.4.1", "gulp-sourcemaps": "^1.6.0", - "mocha": "^2.3.4", - "yargs": "^3.30.0", - "debug": "*", - "fs-extra": "*", "merge2": "*", + "mocha": "^2.3.4", "performance-now": "*", - "ref": "*" + "ref": "*", + "yargs": "^3.31.0" } } diff --git a/src/symbols.cpp b/src/symbols.cpp index 94855a3..13bb4a5 100644 --- a/src/symbols.cpp +++ b/src/symbols.cpp @@ -96,7 +96,7 @@ void Symbols::Init() Begin.Reset(Nan::New("begin").ToLocalChecked()); End.Reset(Nan::New("end").ToLocalChecked()); Step.Reset(Nan::New("step").ToLocalChecked()); - IsGFor.Reset(Nan::New("IsGFor").ToLocalChecked()); + IsGFor.Reset(Nan::New("isGFor").ToLocalChecked()); Imag.Reset(Nan::New("imag").ToLocalChecked()); Real.Reset(Nan::New("real").ToLocalChecked()); Elements.Reset(Nan::New("elements").ToLocalChecked()); diff --git a/tests/es5/gfor.js b/tests/es5/gfor.js new file mode 100644 index 0000000..4c823c9 --- /dev/null +++ b/tests/es5/gfor.js @@ -0,0 +1,94 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict"; +/* global describe,it */ + +var assert = require("better-assert"); +var _ = require("lodash"); +var ref = require("ref"); +var Bluebird = require("bluebird"); +var async = Bluebird.coroutine; +var testExec = require("./testExec"); +var float = ref.types.float; + +describe("gfor", function () { + testExec.run(function (af) { + it("should work", function (done) { + async(regeneratorRuntime.mark(function _callee() { + var count, arr, val, idx, sum; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + count = 20; + arr = af.constant(0.0, count, 10, af.dType.f32); + val = af.range(new af.Dim4(1, 10), 1, af.dType.f32); + + af.gfor(count, function (seq) { + assert(seq instanceof af.Seq); + assert(seq.begin === 0); + assert(seq.end === 19); + assert(seq.isGFor); + arr.assign(seq, af.span, val); + }); + idx = 0; + + case 5: + if (!(idx < count)) { + _context.next = 13; + break; + } + + _context.next = 8; + return af.sumAsync(arr.at(idx, af.span)); + + case 8: + sum = _context.sent; + + assert(sum === 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); + + case 10: + idx++; + _context.next = 5; + break; + + case 13: + case "end": + return _context.stop(); + } + } + }, _callee, this); + }))().asCallback(done); + }); + }); +}); +//# sourceMappingURL=gfor.js.map diff --git a/tests/es5/gfor.js.map b/tests/es5/gfor.js.map new file mode 100644 index 0000000..c2e4b14 --- /dev/null +++ b/tests/es5/gfor.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["gfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,QAAQ,CAAC,MAAM,EAAE,YAAY;AACzB,YAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;AACvB,UAAE,CAAC,aAAa,EAAE,UAAU,IAAI,EAAE;AAC9B,iBAAK,yBAAC;oBACI,KAAK,EACP,GAAG,EACH,GAAG,EAQE,GAAG,EACJ,GAAG;;;;;AAXL,qCAAK,GAAG,EAAE;AACZ,mCAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,mCAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;;AACvD,kCAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE;AAC1B,0CAAM,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,0CAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACxB,0CAAM,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACvB,0CAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnB,uCAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iCACjC,CAAC,CAAC;AACM,mCAAG,GAAG,CAAC;;;sCAAE,GAAG,GAAG,KAAK,CAAA;;;;;;uCACT,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;;;AAA7C,mCAAG;;AACP,sCAAM,CAAC,GAAG,KAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC,CAAC,CAAC;;;AAFzB,mCAAG,EAAE;;;;;;;;;;aAIvC,EAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"gfor.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"gfor\", function () {\r\n testExec.run(function (af) {\r\n it(\"should work\", function (done) {\r\n async(function*() {\r\n const count = 20;\r\n let arr = af.constant(0.0, count, 10, af.dType.f32);\r\n let val = af.range(new af.Dim4(1, 10), 1, af.dType.f32);\r\n af.gfor(count, function (seq) {\r\n assert(seq instanceof af.Seq);\r\n assert(seq.begin === 0);\r\n assert(seq.end === 19);\r\n assert(seq.isGFor);\r\n arr.assign(seq, af.span, val);\r\n });\r\n for (let idx = 0; idx < count; idx++) {\r\n let sum = yield af.sumAsync(arr.at(idx, af.span));\r\n assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9));\r\n }\r\n })().asCallback(done);\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/index.js b/tests/es5/index.js index 6432cb1..f3dde4c 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -36,4 +36,5 @@ require("./afArrayTests"); require("./createArrayFunctionTests"); require("./mathFunctionTests"); require("./moveAndReorderArrayTests"); +require("./gfor"); //# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map index 01b9d28..733640e 100644 --- a/tests/es5/index.js.map +++ b/tests/es5/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/B,OAAO,CAAC,4BAA4B,CAAC,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\nrequire(\"./deviceTests\");\r\nrequire(\"./afArrayTests\");\r\nrequire(\"./createArrayFunctionTests\");\r\nrequire(\"./mathFunctionTests\");\r\nrequire(\"./moveAndReorderArrayTests\");"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACtC,OAAO,CAAC,QAAQ,CAAC,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\nrequire(\"./deviceTests\");\r\nrequire(\"./afArrayTests\");\r\nrequire(\"./createArrayFunctionTests\");\r\nrequire(\"./mathFunctionTests\");\r\nrequire(\"./moveAndReorderArrayTests\");\r\nrequire(\"./gfor\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es6/gfor.js b/tests/es6/gfor.js new file mode 100644 index 0000000..1d6bac9 --- /dev/null +++ b/tests/es6/gfor.js @@ -0,0 +1,63 @@ +/* +Copyright (c) 2014-2015, ArrayFire +Copyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + * Neither the name of the ArrayFire nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +"use strict"; +/* global describe,it */ +let assert = require("better-assert"); +let _ = require("lodash"); +let ref = require("ref"); +let Bluebird = require("bluebird"); +let async = Bluebird.coroutine; +let testExec = require("./testExec"); +let float = ref.types.float; + +describe("gfor", function () { + testExec.run(function (af) { + it("should work", function (done) { + async(function*() { + const count = 20; + let arr = af.constant(0.0, count, 10, af.dType.f32); + let val = af.range(new af.Dim4(1, 10), 1, af.dType.f32); + af.gfor(count, function (seq) { + assert(seq instanceof af.Seq); + assert(seq.begin === 0); + assert(seq.end === 19); + assert(seq.isGFor); + arr.assign(seq, af.span, val); + }); + for (let idx = 0; idx < count; idx++) { + let sum = yield af.sumAsync(arr.at(idx, af.span)); + assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)); + } + })().asCallback(done); + }); + }); +}); \ No newline at end of file diff --git a/tests/es6/index.js b/tests/es6/index.js index bd49681..6402f72 100644 --- a/tests/es6/index.js +++ b/tests/es6/index.js @@ -33,4 +33,5 @@ require("./deviceTests"); require("./afArrayTests"); require("./createArrayFunctionTests"); require("./mathFunctionTests"); -require("./moveAndReorderArrayTests"); \ No newline at end of file +require("./moveAndReorderArrayTests"); +require("./gfor"); \ No newline at end of file From 0348e581c40629a2107ae016511bfec137fee70d Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 13:59:58 +0100 Subject: [PATCH 36/45] some unnecessary asynchronity removed --- examples/es6/machine-learning/ann.js | 2 +- .../es6/machine-learning/neuralNetwork.js | 2 +- src/arrayhelperfunctions.cpp | 6 +- src/arraywrapper.cpp | 126 +------ src/computervision.cpp | 110 ++---- src/createarray.cpp | 6 +- src/helpers.h | 174 +++------ src/imageprocessing.cpp | 19 +- src/linearalgebra.cpp | 331 ++++++------------ src/mathfunctions.cpp | 98 +++--- src/moveandreorderarray.cpp | 10 +- src/signalprocessing.cpp | 4 +- src/statistics.cpp | 12 +- src/vectoralgorithms.cpp | 32 +- 14 files changed, 296 insertions(+), 636 deletions(-) diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index 1de0645..c8728a7 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -35,7 +35,7 @@ proto._calculateError = async(function*(out, pred) { let dif = out.sub(pred); let sq = dif.mul(dif); yield this.af.syncAsync(); - return Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements(); + return 5;//Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements(); }); proto.forwardPropagate = function (input) { diff --git a/examples/es6/machine-learning/neuralNetwork.js b/examples/es6/machine-learning/neuralNetwork.js index 86aee24..43b6b43 100644 --- a/examples/es6/machine-learning/neuralNetwork.js +++ b/examples/es6/machine-learning/neuralNetwork.js @@ -39,7 +39,7 @@ let annDemo = async(function*(af, deviceInfo) { trainTarget, { alpha: 1.0, - maxEpochs: 300, + maxEpochs: 5000, batchSize: 100, maxError: 0.0001 } diff --git a/src/arrayhelperfunctions.cpp b/src/arrayhelperfunctions.cpp index 5c95ce3..d839352 100644 --- a/src/arrayhelperfunctions.cpp +++ b/src/arrayhelperfunctions.cpp @@ -40,9 +40,9 @@ using namespace v8; using namespace std; using namespace node; -AF_SM_ARR(IsZero, iszero) -AF_SM_ARR(IsInf, isInf) -AF_SM_ARR(IsNaN, isNaN) +AF_ARR(IsZero, iszero) +AF_ARR(IsInf, isInf) +AF_ARR(IsNaN, isNaN) NAN_METHOD(Print) { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 177146e..39c826f 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -526,143 +526,43 @@ NAN_METHOD(ArrayWrapper::Scalar) try { ARGS_LEN(1) - + Guard guard; auto pArray = GetArray(info.This()); - af::array array(*pArray); - switch (array.type()) + switch (pArray->type()) { case f32: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case f64: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case s32: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case u32: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case u8: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case b8: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto worker = new Worker(GetCallback(info), move(exec)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case c32: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto conv = [=](Worker* w, af::cfloat data) - { - return ToV8Complex(data); - }; - auto worker = new Worker(GetCallback(info), move(exec), move(conv)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(ToV8Complex(pArray->scalar())); break; case c64: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto conv = [=](Worker* w, af::cdouble data) - { - return ToV8Complex(data); - }; - auto worker = new Worker(GetCallback(info), move(exec), move(conv)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(ToV8Complex(pArray->scalar())); break; case s64: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto conv = [=](Worker* w, long long data) - { - Nan::EscapableHandleScope scope; - return scope.Escape(Nan::New(to_string(data).c_str()).ToLocalChecked()); - }; - auto worker = new Worker(GetCallback(info), move(exec), move(conv)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(to_string(pArray->scalar()).c_str()).ToLocalChecked()); break; case u64: - { - auto exec = [=]() - { - Guard guard; - return array.scalar(); - }; - auto conv = [=](Worker* w, unsigned long long data) - { - Nan::EscapableHandleScope scope; - return scope.Escape(Nan::New(to_string(data).c_str()).ToLocalChecked()); - }; - auto worker = new Worker(GetCallback(info), move(exec), move(conv)); - Nan::AsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(to_string(pArray->scalar()).c_str()).ToLocalChecked()); break; default: - assert(false); + NAN_THROW_INVALID_ARGS(); } - info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } diff --git a/src/computervision.cpp b/src/computervision.cpp index 9d298f8..7a79fa2 100644 --- a/src/computervision.cpp +++ b/src/computervision.cpp @@ -35,7 +35,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "arraywrapper.h" #include "errors.h" #include "guard.h" -#include "worker.h" using namespace v8; using namespace std; @@ -46,8 +45,8 @@ NAN_METHOD(Orb) try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); float fastThr=20.f; unsigned maxFeat=400; float sclFctr=1.5f; @@ -73,26 +72,14 @@ NAN_METHOD(Orb) { blurImg = info[5]->BooleanValue(); } - typedef std::pair result_t; - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - result_t result; - af::orb(result.first, result.second, array, fastThr, maxFeat, sclFctr, levels, blurImg); - return result; - }; - auto conv = [=](worker_t* worker, const result_t& r) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Feat), ToV8Features(r.first)); - result->Set(Nan::New(Symbols::Desc), ArrayWrapper::New(r.second)); - return scope.Escape(result); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + af::features rf; + af::array ra; + af::orb(rf, ra, *pArray, fastThr, maxFeat, sclFctr, levels, blurImg); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Feat), ToV8Features(rf)); + result->Set(Nan::New(Symbols::Desc), ArrayWrapper::New(ra)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } @@ -102,8 +89,8 @@ NAN_METHOD(Fast) try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); float thr=20.0f; unsigned arcLength=9; bool nonMax=true; @@ -129,20 +116,10 @@ NAN_METHOD(Fast) { edge = info[5]->Uint32Value(); } - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - return af::fast(array, thr, arcLength, nonMax, featureRatio, edge); - }; - auto conv = [=](worker_t* worker, const af::features& feat) - { - return ToV8Features(feat); - }; - - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + af::features rf; + af::fast(*pArray, thr, arcLength, nonMax, featureRatio, edge); + info.GetReturnValue().Set(ToV8Features(rf)); } ARRAYFIRE_CATCH } @@ -152,9 +129,9 @@ NAN_METHOD(HammingMatcher) try { - ARGS_LEN(3); - auto array1 = *ArrayWrapper::GetArrayAt(info, 0); - auto array2 = *ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); dim_t distDim = 0; unsigned nDist = 1; if (info.Length() > 2) @@ -165,26 +142,13 @@ NAN_METHOD(HammingMatcher) { nDist = info[3]->Uint32Value(); } - typedef std::pair result_t; - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - result_t result; - af::hammingMatcher(result.first, result.second, array1, array2, distDim, nDist); - return result; - }; - auto conv = [=](worker_t* worker, const result_t& r) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Idx), ArrayWrapper::New(r.first)); - result->Set(Nan::New(Symbols::Dist), ArrayWrapper::New(r.second)); - return scope.Escape(result); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + std::pair r; + af::hammingMatcher(r.first, r.second, *pArray1, *pArray2, distDim, nDist); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Idx), ArrayWrapper::New(r.first)); + result->Set(Nan::New(Symbols::Dist), ArrayWrapper::New(r.second)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH } @@ -194,28 +158,16 @@ NAN_METHOD(MatchTemplate) try { - ARGS_LEN(3); - auto array1 = *ArrayWrapper::GetArrayAt(info, 0); - auto array2 = *ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matchType mType = AF_SAD; if (info.Length() > 2) { mType = (af::matchType)(info[2]->Uint32Value()); } - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - return af::matchTemplate(array1, array2, mType); - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::matchTemplate(*pArray1, *pArray2, mType))); } ARRAYFIRE_CATCH } diff --git a/src/createarray.cpp b/src/createarray.cpp index 88189da..240740f 100644 --- a/src/createarray.cpp +++ b/src/createarray.cpp @@ -231,8 +231,8 @@ NAN_METHOD(Constant) ARRAYFIRE_CATCH } -AF_SM_ARR_BOOL(Lower, lower, false) -AF_SM_ARR_BOOL(Upper, upper, false) +AF_ARR_BOOL(Lower, lower, false) +AF_ARR_BOOL(Upper, upper, false) NAN_METHOD(GetSeed) { @@ -270,7 +270,7 @@ NAN_METHOD(SetSeed) ARRAYFIRE_CATCH; } -AF_SM_ARR_ARR_DIM(Lookup, lookup) +AF_ARR_ARR_DIM(Lookup, lookup) NAN_MODULE_INIT(InitCreateArray) { diff --git a/src/helpers.h b/src/helpers.h index 39ed8ef..26a6485 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -92,7 +92,7 @@ RegionIndex ToRegionIndex(v8::Local value); #define ARGS_LEN(n) if (info.Length() < n) return NAN_THROW_INVALID_NO_OF_ARGS(); -#define AF_SM_ARR(F, f)\ +#define AF_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -107,7 +107,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_DIM(F, f)\ +#define AF_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ \ @@ -124,7 +124,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_BOOL(F, f, defV)\ +#define AF_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -141,7 +141,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_VOID_ARR_BOOL(F, f, defV)\ +#define AF_VOID_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -159,7 +159,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ +#define AF_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ NAN_METHOD(F)\ {\ \ @@ -180,7 +180,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_ARR(F, f)\ +#define AF_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -195,7 +195,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_ARR_ARR(F, f)\ +#define AF_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -210,7 +210,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_ARR_ARR_ARR(F, f)\ +#define AF_ARR_ARR_ARR_ARR(F, f)\ NAN_METHOD(F)\ {\ \ @@ -225,7 +225,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_ARR_DIM(F, f)\ +#define AF_ARR_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ \ @@ -242,7 +242,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_ARR_BOOL(F, f, defV)\ +#define AF_ARR_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ \ @@ -259,7 +259,7 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_SM_ARR_DOUBLE_COMB(F, f)\ +#define AF_ARR_DOUBLE_COMB(F, f)\ NAN_METHOD(F)\ {\ \ @@ -299,124 +299,72 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define AF_AM_ALGO_V1(F, f)\ +#define AF_ALGO_V1(F, f)\ NAN_METHOD(F)\ {\ - \ try\ {\ - ARGS_LEN(2);\ - \ - auto array = *ArrayWrapper::GetArrayAt(info, 0);\ - if (info.Length() > 2)\ + ARGS_LEN(1);\ + Guard guard;\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 1)\ {\ int dim = info[1]->Int32Value();\ - return ArrayWrapper::NewAsync(info, [=]() { Guard guard; return new af::array(af::f(array, dim)); });\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray, dim)));\ }\ else\ {\ - if (NeedsDouble(array))\ - {\ - auto exec = [=]() { Guard guard; return af::f(array); };\ - auto worker = new Worker(GetCallback(info), std::move(exec));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ - }\ + if (NeedsDouble(*pArray))\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray)));\ else\ - {\ - auto exec = [=]() { Guard guard; return af::f(array); };\ - auto worker = new Worker(GetCallback(info), std::move(exec));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ - }\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray)));\ }\ }\ ARRAYFIRE_CATCH\ } -#define AF_AM_ALGO_V2(F, f)\ +#define AF_ALGO_V2(F, f)\ NAN_METHOD(F)\ {\ \ try\ {\ - ARGS_LEN(2);\ + ARGS_LEN(1);\ + Guard guard;\ \ - auto array = *ArrayWrapper::GetArrayAt(info, 0);\ - if (info.Length() > 2)\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 1)\ {\ int dim = info[1]->Int32Value();\ - typedef std::pair PairT;\ - typedef Worker WorkerT;\ - auto exec = [=]()\ - {\ - Guard guard;\ - af::array v;\ - af::array at;\ - af::f(v, at, array, dim);\ - return make_pair(v, at);\ - };\ - auto conv = [=](WorkerT* w, PairT p)\ - {\ - Nan::EscapableHandleScope scope;\ - auto obj = Nan::New();\ - obj->Set(Nan::New(Symbols::Value), ArrayWrapper::New(p.first));\ - obj->Set(Nan::New(Symbols::Index), ArrayWrapper::New(p.second));\ - return scope.Escape(obj);\ - };\ - auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ + af::array v;\ + af::array at;\ + af::f(v, at, *pArray, dim);\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), ArrayWrapper::New(v));\ + obj->Set(Nan::New(Symbols::Index), ArrayWrapper::New(at));\ + info.GetReturnValue().Set(obj);\ }\ else\ {\ - if (NeedsDouble(array))\ + if (NeedsDouble(*pArray))\ {\ - typedef std::pair PairT;\ - typedef Worker WorkerT;\ - auto exec = [=]()\ - {\ - Guard guard;\ - double v;\ - unsigned at;\ - af::f(&v, &at, array);\ - return make_pair(v, at);\ - };\ - auto conv = [=](WorkerT* w, PairT p)\ - {\ - Nan::EscapableHandleScope scope;\ - auto obj = Nan::New();\ - obj->Set(Nan::New(Symbols::Value), Nan::New(p.first));\ - obj->Set(Nan::New(Symbols::Index), Nan::New(p.second));\ - return scope.Escape(obj);\ - };\ - auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ + double v;\ + unsigned at;\ + af::f(&v, &at, *pArray);\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), Nan::New(v));\ + obj->Set(Nan::New(Symbols::Index), Nan::New(at));\ + info.GetReturnValue().Set(obj);\ }\ else\ {\ - typedef std::pair PairT;\ - typedef Worker WorkerT;\ - auto exec = [=]()\ - {\ - Guard guard;\ - float v;\ - unsigned at;\ - af::f(&v, &at, array);\ - return make_pair(v, at);\ - };\ - auto conv = [=](WorkerT* w, PairT p)\ - {\ - Nan::EscapableHandleScope scope;\ - auto obj = Nan::New();\ - obj->Set(Nan::New(Symbols::Value), Nan::New(p.first));\ - obj->Set(Nan::New(Symbols::Index), Nan::New(p.second));\ - return scope.Escape(obj);\ - };\ - auto worker = new WorkerT(GetCallback(info), std::move(exec), std::move(conv));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ + float v;\ + unsigned at;\ + af::f(&v, &at, *pArray);\ + auto obj = Nan::New();\ + obj->Set(Nan::New(Symbols::Value), Nan::New(v));\ + obj->Set(Nan::New(Symbols::Index), Nan::New(at));\ + info.GetReturnValue().Set(obj);\ }\ }\ }\ @@ -424,43 +372,37 @@ NAN_METHOD(F)\ } // weighted mean like stuff: -#define AF_AM_ALGO_V3(F, f)\ +#define AF_ALGO_V3(F, f)\ NAN_METHOD(F)\ {\ \ try\ {\ - ARGS_LEN(3);\ - \ - auto array1 = *ArrayWrapper::GetArrayAt(info, 0);\ - auto array2 = *ArrayWrapper::GetArrayAt(info, 1);\ - if (info.Length() > 3)\ + ARGS_LEN(2);\ + Guard guard;\ + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1);\ + if (info.Length() > 2)\ {\ int dim = info[2]->Int32Value();\ - return ArrayWrapper::NewAsync(info, [=]() { Guard guard; return new af::array(af::f(array1, array2, dim)); });\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2, dim)));\ }\ else\ {\ - if (NeedsDouble(array1))\ + if (NeedsDouble(*pArray1))\ {\ - auto exec = [=]() { Guard guard; return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(info), std::move(exec));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ }\ else\ {\ - auto exec = [=]() { Guard guard; return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(info), std::move(exec));\ - Nan::AsyncQueueWorker(worker);\ - info.GetReturnValue().SetUndefined();\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ }\ }\ }\ ARRAYFIRE_CATCH\ } -#define AF_SM_XYZW(F, f, iy, iz, iw)\ +#define AF_XYZW(F, f, iy, iz, iw)\ NAN_METHOD(F)\ {\ \ diff --git a/src/imageprocessing.cpp b/src/imageprocessing.cpp index 2062824..6e9fd2d 100644 --- a/src/imageprocessing.cpp +++ b/src/imageprocessing.cpp @@ -57,6 +57,7 @@ NAN_METHOD(LoadImage) ArrayWrapper::NewAsync( info, [=](){ Guard guard; return new af::array(af::loadImage(fn.c_str(), isColor)); }); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } @@ -97,10 +98,10 @@ NAN_METHOD(ColorSpace) ARRAYFIRE_CATCH; } -AF_SM_ARR_FLOAT_FLOAT_FLOAT(Gray2RGB, gray2rgb, 1.0f, 1.0f, 1.0f) -AF_SM_ARR_FLOAT_FLOAT_FLOAT(RGB2Gray, rgb2gray, 0.2126f, 0.7152f, 0.0722f) -AF_SM_ARR(HSV2RGB, hsv2rgb) -AF_SM_ARR(RGB2HSV, rgb2hsv) +AF_ARR_FLOAT_FLOAT_FLOAT(Gray2RGB, gray2rgb, 1.0f, 1.0f, 1.0f) +AF_ARR_FLOAT_FLOAT_FLOAT(RGB2Gray, rgb2gray, 0.2126f, 0.7152f, 0.0722f) +AF_ARR(HSV2RGB, hsv2rgb) +AF_ARR(RGB2HSV, rgb2hsv) NAN_METHOD(Regions) { @@ -199,7 +200,7 @@ NAN_METHOD(Sobel) ARRAYFIRE_CATCH; } -AF_SM_ARR_ARR(HistEqual, histEqual) +AF_ARR_ARR(HistEqual, histEqual) NAN_METHOD(Histogram) { @@ -364,10 +365,10 @@ NAN_METHOD(Translate) ARRAYFIRE_CATCH; } -AF_SM_ARR_ARR(Dilate, dilate) -AF_SM_ARR_ARR(Dilate3, dilate3) -AF_SM_ARR_ARR(Erode, erode) -AF_SM_ARR_ARR(Erode3, erode3) +AF_ARR_ARR(Dilate, dilate) +AF_ARR_ARR(Dilate3, dilate3) +AF_ARR_ARR(Erode, erode) +AF_ARR_ARR(Erode3, erode3) NAN_METHOD(GaussianKernel) { diff --git a/src/linearalgebra.cpp b/src/linearalgebra.cpp index 4cd1786..071050b 100644 --- a/src/linearalgebra.cpp +++ b/src/linearalgebra.cpp @@ -96,315 +96,196 @@ NAN_METHOD(MatMul) } -AF_SM_ARR_ARR(MatMulNT, matmulNT) -AF_SM_ARR_ARR(MatMulTN, matmulTN) -AF_SM_ARR_ARR(MatMulTT, matmulTT) +AF_ARR_ARR(MatMulNT, matmulNT) +AF_ARR_ARR(MatMulTN, matmulTN) +AF_ARR_ARR(MatMulTT, matmulTT) -AF_SM_ARR_BOOL(Transpose, transpose, false) -AF_SM_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) +AF_ARR_BOOL(Transpose, transpose, false) +AF_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) NAN_METHOD(Solve) { - try { - ARGS_LEN(3); - auto array1 = *ArrayWrapper::GetArrayAt(info, 0); - auto array2 = *ArrayWrapper::GetArrayAt(info, 1); + ARGS_LEN(2); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); af::matProp options = AF_MAT_NONE; if (info.Length() > 2) options = (af::matProp)info[2]->Uint32Value(); - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - return af::solve(array1, array2, options); - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(SolveLU) { - try { - ARGS_LEN(4); - auto array1 = *ArrayWrapper::GetArrayAt(info, 0); - auto array2 = *ArrayWrapper::GetArrayAt(info, 1); - auto array3 = *ArrayWrapper::GetArrayAt(info, 2); + ARGS_LEN(3); + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray3 = ArrayWrapper::GetArrayAt(info, 2); af::matProp options = AF_MAT_NONE; if (info.Length() > 3) options = (af::matProp)info[3]->Uint32Value(); - typedef Worker worker_t; - auto exec = [=]() - { - Guard guard; - return af::solveLU(array1, array2, array3, options); - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(Cholesky) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; if (info.Length() > 1) isUpper = info[1]->BooleanValue(); - typedef pair ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard guard; - af::array out; - int r = af::cholesky(out, array, isUpper); - return move(make_pair(out, r)); - }; - auto conv = [=](WorkerT* w, ResultT v) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); - result->Set(Nan::New(Symbols::FailedAtRank), Nan::New(v.second)); - return scope.Escape(result); - }; - Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); - info.GetReturnValue().SetUndefined(); + Guard(); + af::array out; + int r = af::cholesky(out, *pArray, isUpper); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); + result->Set(Nan::New(Symbols::FailedAtRank), Nan::New(r)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(CholeskyInPlace) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; if (info.Length() > 1) isUpper = info[1]->BooleanValue(); - Nan::AsyncQueueWorker(new Worker(GetCallback(info), [=]() mutable { Guard guard; return af::choleskyInPlace(array, isUpper); })); - info.GetReturnValue().SetUndefined(); + Guard(); + af::array out; + int r = af::choleskyInPlace(*pArray, isUpper); + info.GetReturnValue().Set(r); } ARRAYFIRE_CATCH; } NAN_METHOD(LuPacked) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - typedef pair ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard guard; - af::array out, pivot; - af::lu(out, pivot, (const af::array&)array, isLapackPiv); - return move(make_pair(out, pivot)); - }; - auto conv = [=](WorkerT* w, ResultT v) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); - result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(v.second)); - return scope.Escape(result); - }; - Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); - info.GetReturnValue().SetUndefined(); + Guard guard; + af::array out, pivot; + af::lu(out, pivot, (const af::array&)*pArray, isLapackPiv); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(Lu) { - try { - ARGS_LEN(2); + ARGS_LEN(1); auto pArray = ArrayWrapper::GetArrayAt(info, 0); - typedef tuple ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard guard; - af::array lower, upper, pivot; - af::lu(lower, upper, pivot, *pArray); - return move(make_tuple(lower, upper, pivot)); - }; - auto conv = [=](WorkerT* w, ResultT v) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Lower), ArrayWrapper::New(get<0>(v))); - result->Set(Nan::New(Symbols::Upper), ArrayWrapper::New(get<1>(v))); - result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(get<2>(v))); - return scope.Escape(result); - }; - Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); - info.GetReturnValue().SetUndefined(); + Guard guard; + af::array lower, upper, pivot; + af::lu(lower, upper, pivot, *pArray); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Lower), ArrayWrapper::New(lower)); + result->Set(Nan::New(Symbols::Upper), ArrayWrapper::New(upper)); + result->Set(Nan::New(Symbols::Pivot), ArrayWrapper::New(pivot)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(LuInPlace) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isLapackPiv = true; if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); - typedef Worker worker_t; - auto exec = [=]() mutable - { - Guard guard; - af::array pivot; - af::luInPlace(pivot, array, isLapackPiv); - return pivot; - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + af::array pivot; + af::luInPlace(pivot, *pArray, isLapackPiv); + info.GetReturnValue().Set(ArrayWrapper::New(pivot)); } ARRAYFIRE_CATCH; } NAN_METHOD(QrPacked) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); - typedef pair ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard guard; - af::array out, tau; - af::qr(out, tau, array); - return move(make_pair(out, tau)); - }; - auto conv = [=](WorkerT* w, ResultT v) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(v.first)); - result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(v.second)); - return scope.Escape(result); - }; - Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); - info.GetReturnValue().SetUndefined(); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard guard; + af::array out, tau; + af::qr(out, tau, *pArray); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Result), ArrayWrapper::New(out)); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(Qr) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); - typedef tuple ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard guard; - af::array q, r, tau; - af::qr(q, r, tau, array); - return move(make_tuple(q, r, tau)); - }; - auto conv = [=](WorkerT* w, ResultT v) - { - Nan::EscapableHandleScope scope; - auto result = Nan::New(); - result->Set(Nan::New(Symbols::Q), ArrayWrapper::New(get<0>(v))); - result->Set(Nan::New(Symbols::R), ArrayWrapper::New(get<1>(v))); - result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(get<2>(v))); - return scope.Escape(result); - }; - Nan::AsyncQueueWorker(new WorkerT(GetCallback(info), move(exec), move(conv))); - info.GetReturnValue().SetUndefined(); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard guard; + af::array q, r, tau; + af::qr(q, r, tau, *pArray); + auto result = Nan::New(); + result->Set(Nan::New(Symbols::Q), ArrayWrapper::New(q)); + result->Set(Nan::New(Symbols::R), ArrayWrapper::New(r)); + result->Set(Nan::New(Symbols::Tau), ArrayWrapper::New(tau)); + info.GetReturnValue().Set(result); } ARRAYFIRE_CATCH; } NAN_METHOD(QrInPlace) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); - typedef Worker worker_t; - auto exec = [=]() mutable - { - Guard guard; - af::array tau; - af::qrInPlace(tau, array); - return tau; - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard guard; + af::array tau; + af::qrInPlace(tau, *pArray); + info.GetReturnValue().Set(ArrayWrapper::New(tau)); } ARRAYFIRE_CATCH; } NAN_METHOD(Det) { - try { - ARGS_LEN(2); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(info, 0); - if (NeedsDouble(array)) + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard guard; + if (NeedsDouble(*pArray)) { - auto exec = [=]() { Guard guard; return af::det(array); }; - auto worker = new Worker(GetCallback(info), std::move(exec)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + info.GetReturnValue().Set(ArrayWrapper::New(af::det(*pArray))); } else { - auto exec = [=]() { Guard guard; return af::det(array); }; - auto worker = new Worker(GetCallback(info), std::move(exec)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + info.GetReturnValue().Set(ArrayWrapper::New(af::det(*pArray))); } } ARRAYFIRE_CATCH @@ -412,26 +293,14 @@ NAN_METHOD(Det) NAN_METHOD(Inverse) { - try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::matProp options = AF_MAT_NONE; if (info.Length() > 1) options = (af::matProp)info[1]->Uint32Value(); - typedef Worker worker_t; - auto exec = [=]() mutable - { - Guard guard; - return af::inverse(array, options); - }; - auto conv = [=](worker_t* worker, const af::array& arr) - { - return ArrayWrapper::New(arr); - }; - auto worker = new worker_t(GetCallback(info), std::move(exec), std::move(conv)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::inverse(*pArray, options))); } ARRAYFIRE_CATCH; } @@ -441,19 +310,17 @@ NAN_METHOD(Norm) try { - ARGS_LEN(2); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); af::normType type = AF_NORM_EUCLID; double p = 1; double q = 1; if (info.Length() > 1) type = (af::normType)info[1]->Uint32Value(); if (info.Length() > 2) p = info[2]->NumberValue(); if (info.Length() > 3) q = info[3]->NumberValue(); - auto exec = [=]() { Guard guard; return af::norm(array, type, p, q); }; - auto worker = new Worker(GetCallback(info), std::move(exec)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::norm(*pArray, type, p, q))); } ARRAYFIRE_CATCH } @@ -463,15 +330,13 @@ NAN_METHOD(Rank) try { - ARGS_LEN(2); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(info, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); double tol = 1E-5; if (info.Length() > 1) tol = info[1]->NumberValue(); - auto exec = [=]() { Guard guard; return af::rank(array, tol); }; - auto worker = new Worker(GetCallback(info), std::move(exec)); - Nan::AsyncQueueWorker(worker); - info.GetReturnValue().SetUndefined(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::rank(*pArray, tol))); } ARRAYFIRE_CATCH } diff --git a/src/mathfunctions.cpp b/src/mathfunctions.cpp index 4813f87..8bad4b0 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -40,55 +40,55 @@ using namespace v8; using namespace std; using namespace node; -AF_SM_ARR(Abs, abs) -AF_SM_ARR(Arg, arg) -AF_SM_ARR(Ceil, ceil) -AF_SM_ARR(Floor, floor) -AF_SM_ARR_DOUBLE_COMB(Hypot, hypot) -AF_SM_ARR_DOUBLE_COMB(Max, max) -AF_SM_ARR_DOUBLE_COMB(Min, min) -AF_SM_ARR_DOUBLE_COMB(Mod, mod) -AF_SM_ARR(Round, round) -AF_SM_ARR(Sign, sign) -AF_SM_ARR(Trunc, trunc) -AF_SM_ARR_DOUBLE_COMB(Rem, rem) - -AF_SM_ARR(ACos, acos) -AF_SM_ARR(ASin, asin) -AF_SM_ARR(ATan, atan) -AF_SM_ARR_DOUBLE_COMB(ATan2, atan2) -AF_SM_ARR(Cos, cos) -AF_SM_ARR(Sin, sin) -AF_SM_ARR(Tan, tan) - -AF_SM_ARR(Cbrt, cbrt) -AF_SM_ARR(Erf, erf) -AF_SM_ARR(Erfc, erfc) -AF_SM_ARR(Exp, exp) -AF_SM_ARR(ExpM1, expm1) -AF_SM_ARR(Factorial, factorial) -AF_SM_ARR(LGamma, lgamma) -AF_SM_ARR(TGamma, tgamma) -AF_SM_ARR(Log, log) -AF_SM_ARR(Log10, log10) -AF_SM_ARR(Log1P, log1p) -AF_SM_ARR_ARR(Pow, pow) -AF_SM_ARR(Pow2, pow2) -AF_SM_ARR_DOUBLE_COMB(Root, root) -AF_SM_ARR(Sqrt, sqrt) -AF_SM_ARR(Sigmoid, sigmoid) - -AF_SM_ARR(ACosH, acosh) -AF_SM_ARR(ASinH, asinh) -AF_SM_ARR(ATanH, atanh) -AF_SM_ARR(CosH, cosh) -AF_SM_ARR(SinH, sinh) -AF_SM_ARR(TanH, tanh) - -AF_SM_ARR(Complex, complex) -AF_SM_ARR(Conjg, conjg) -AF_SM_ARR(Imag, imag) -AF_SM_ARR(Real, real) +AF_ARR(Abs, abs) +AF_ARR(Arg, arg) +AF_ARR(Ceil, ceil) +AF_ARR(Floor, floor) +AF_ARR_DOUBLE_COMB(Hypot, hypot) +AF_ARR_DOUBLE_COMB(Max, max) +AF_ARR_DOUBLE_COMB(Min, min) +AF_ARR_DOUBLE_COMB(Mod, mod) +AF_ARR(Round, round) +AF_ARR(Sign, sign) +AF_ARR(Trunc, trunc) +AF_ARR_DOUBLE_COMB(Rem, rem) + +AF_ARR(ACos, acos) +AF_ARR(ASin, asin) +AF_ARR(ATan, atan) +AF_ARR_DOUBLE_COMB(ATan2, atan2) +AF_ARR(Cos, cos) +AF_ARR(Sin, sin) +AF_ARR(Tan, tan) + +AF_ARR(Cbrt, cbrt) +AF_ARR(Erf, erf) +AF_ARR(Erfc, erfc) +AF_ARR(Exp, exp) +AF_ARR(ExpM1, expm1) +AF_ARR(Factorial, factorial) +AF_ARR(LGamma, lgamma) +AF_ARR(TGamma, tgamma) +AF_ARR(Log, log) +AF_ARR(Log10, log10) +AF_ARR(Log1P, log1p) +AF_ARR_ARR(Pow, pow) +AF_ARR(Pow2, pow2) +AF_ARR_DOUBLE_COMB(Root, root) +AF_ARR(Sqrt, sqrt) +AF_ARR(Sigmoid, sigmoid) + +AF_ARR(ACosH, acosh) +AF_ARR(ASinH, asinh) +AF_ARR(ATanH, atanh) +AF_ARR(CosH, cosh) +AF_ARR(SinH, sinh) +AF_ARR(TanH, tanh) + +AF_ARR(Complex, complex) +AF_ARR(Conjg, conjg) +AF_ARR(Imag, imag) +AF_ARR(Real, real) NAN_MODULE_INIT(InitMathFunctions) { diff --git a/src/moveandreorderarray.cpp b/src/moveandreorderarray.cpp index 17f6e53..c206552 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -55,15 +55,15 @@ NAN_METHOD(Join) ARRAYFIRE_CATCH } -AF_SM_XYZW(Tile, tile, 1, 1, 1) +AF_XYZW(Tile, tile, 1, 1, 1) -AF_SM_XYZW(Reorder, reorder, 1, 2, 3) +AF_XYZW(Reorder, reorder, 1, 2, 3) -AF_SM_XYZW(Shift, shift, 0, 0, 0) +AF_XYZW(Shift, shift, 0, 0, 0) -AF_SM_XYZW(ModDims, moddims, 1, 1, 1) +AF_XYZW(ModDims, moddims, 1, 1, 1) -AF_SM_ARR(Flat, flat) +AF_ARR(Flat, flat) NAN_METHOD(Flip) { diff --git a/src/signalprocessing.cpp b/src/signalprocessing.cpp index ce5545e..170cfce 100644 --- a/src/signalprocessing.cpp +++ b/src/signalprocessing.cpp @@ -275,8 +275,8 @@ ARRAYFIRE_FFT3NORM(IFFT3Norm, ifft3Norm) #undef ARRAYFIRE_FFT3NORM -AF_SM_ARR_ARR(FIR, fir) -AF_SM_ARR_ARR_ARR(IIR, iir) +AF_ARR_ARR(FIR, fir) +AF_ARR_ARR_ARR(IIR, iir) NAN_METHOD(Approx1) { diff --git a/src/statistics.cpp b/src/statistics.cpp index 120d129..3f66f0f 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -41,11 +41,11 @@ using namespace v8; using namespace std; using namespace node; -AF_SM_ARR_ARR_BOOL(Cov, cov, false) -AF_AM_ALGO_V1(Mean, mean) -AF_AM_ALGO_V3(WeightedMean, mean) -AF_AM_ALGO_V1(Median, median) -AF_AM_ALGO_V1(StDev, stdev) +AF_ARR_ARR_BOOL(Cov, cov, false) +AF_ALGO_V1(Mean, mean) +AF_ALGO_V3(WeightedMean, mean) +AF_ALGO_V1(Median, median) +AF_ALGO_V1(StDev, stdev) NAN_METHOD(Var) { @@ -82,7 +82,7 @@ NAN_METHOD(Var) ARRAYFIRE_CATCH } -AF_AM_ALGO_V3(WeightedVar, var) +AF_ALGO_V3(WeightedVar, var) NAN_METHOD(CorrCoef) { diff --git a/src/vectoralgorithms.cpp b/src/vectoralgorithms.cpp index 96c5182..80934a8 100644 --- a/src/vectoralgorithms.cpp +++ b/src/vectoralgorithms.cpp @@ -41,15 +41,15 @@ using namespace v8; using namespace std; using namespace node; -AF_AM_ALGO_V1(AllTrue, allTrue) -AF_AM_ALGO_V1(AnyTrue, anyTrue) -AF_AM_ALGO_V1(Count, count) -AF_AM_ALGO_V1(FindMax, max) -AF_AM_ALGO_V1(FindMin, min) -AF_AM_ALGO_V1(Product, product) -AF_AM_ALGO_V1(Sum, sum) -AF_AM_ALGO_V2(FindMinAt, min) -AF_AM_ALGO_V2(FindMaxAt, max) +AF_ALGO_V1(AllTrue, allTrue) +AF_ALGO_V1(AnyTrue, anyTrue) +AF_ALGO_V1(Count, count) +AF_ALGO_V1(FindMax, max) +AF_ALGO_V1(FindMin, min) +AF_ALGO_V1(Product, product) +AF_ALGO_V1(Sum, sum) +AF_ALGO_V2(FindMinAt, min) +AF_ALGO_V2(FindMaxAt, max) NAN_METHOD(Sort) { @@ -136,14 +136,14 @@ NAN_METHOD(SortIndex) ARRAYFIRE_CATCH } -AF_SM_ARR_DIM(Accum, accum) -AF_SM_ARR(Where, where) +AF_ARR_DIM(Accum, accum) +AF_ARR(Where, where) -AF_SM_ARR_ARR_BOOL(SetIntersect, setIntersect, false) -AF_SM_ARR_ARR_BOOL(SetUnion, setUnion, false) -AF_SM_ARR_BOOL(SetUnique, setUnique, false) -AF_SM_ARR_DIM(Diff1, diff1) -AF_SM_ARR_DIM(Diff2, diff2) +AF_ARR_ARR_BOOL(SetIntersect, setIntersect, false) +AF_ARR_ARR_BOOL(SetUnion, setUnion, false) +AF_ARR_BOOL(SetUnique, setUnique, false) +AF_ARR_DIM(Diff1, diff1) +AF_ARR_DIM(Diff2, diff2) NAN_METHOD(Grad) { From c8dc7e069f43bc0c52e6760facc30ffea824db7f Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 14:50:35 +0100 Subject: [PATCH 37/45] deasync done, 0.21.0 proposal --- .eslintrc | 3 +- examples/es6/machine-learning/ann.js | 17 +- .../es6/machine-learning/neuralNetwork.js | 18 +- lib/es6/doc/afArray.js | 293 ++++++++++++++++++ lib/es6/ext.js | 77 +---- package.json | 2 +- src/arraywrapper.cpp | 5 +- src/helpers.h | 8 +- tests/es6/afArrayTests.js | 20 +- tests/es6/gfor.js | 8 +- 10 files changed, 335 insertions(+), 116 deletions(-) create mode 100644 lib/es6/doc/afArray.js diff --git a/.eslintrc b/.eslintrc index 7e0a7c5..62c05ad 100644 --- a/.eslintrc +++ b/.eslintrc @@ -17,7 +17,8 @@ "templateStrings": true, "unicodeCodePointEscapes": true, "globalReturn": true, - "jsx": true + "jsx": true, + "classes": true }, "rules": { "no-underscore-dangle": 0, diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index c8728a7..cd3ed8b 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -31,12 +31,11 @@ proto.addBias = function (input) { return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); }; -proto._calculateError = async(function*(out, pred) { +proto._calculateError = function(out, pred) { let dif = out.sub(pred); let sq = dif.mul(dif); - yield this.af.syncAsync(); - return 5;//Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements(); -}); + return Math.sqrt(this.af.sum(sq)) / sq.elements(); +}; proto.forwardPropagate = function (input) { this.signal[0].set(input); @@ -86,7 +85,7 @@ proto.predict = function (input) { return this.signal[this.numLayers - 1].copy(); }; -proto.train = async(function*(input, target, options) { +proto.train = function(input, target, options) { let self = this; let af = self.af; let Seq = self.af.Seq; @@ -111,13 +110,13 @@ proto.train = async(function*(input, target, options) { }); } - yield af.scope(async(function*() { + af.scope(() => { // Validate with last batch let startPos = (numBatches - 1) * options.batchSize; let endPos = numSamples - 1; let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); - err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); - })); + err = self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + }); const end = now(); console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); @@ -130,6 +129,6 @@ proto.train = async(function*(input, target, options) { } return err; -}); +}; module.exports = ANN; \ No newline at end of file diff --git a/examples/es6/machine-learning/neuralNetwork.js b/examples/es6/machine-learning/neuralNetwork.js index 43b6b43..59f3a7a 100644 --- a/examples/es6/machine-learning/neuralNetwork.js +++ b/examples/es6/machine-learning/neuralNetwork.js @@ -7,11 +7,11 @@ let mnist = require("./mnist"); let ANN = require("./ann"); let now = require("performance-now"); -let accuracy = async(function*(af, predicted, target) { - let pMax = yield af.findMaxAtAsync(predicted, 1); - let tMax = yield af.findMaxAtAsync(target, 1); - return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements(); -}); +let accuracy = function(af, predicted, target) { + let pMax = af.findMaxAt(predicted, 1); + let tMax = af.findMaxAt(target, 1); + return (100 * (af.count(pMax.index.eq(tMax.index)))) / tMax.index.elements(); +}; let annDemo = async(function*(af, deviceInfo) { console.log("Running ANN Demo on device:\n"); @@ -34,12 +34,12 @@ let annDemo = async(function*(af, deviceInfo) { // Train network const start = now(); - yield network.train( + network.train( trainFeats, trainTarget, { alpha: 1.0, - maxEpochs: 5000, + maxEpochs: 300, batchSize: 100, maxError: 0.0001 } @@ -52,10 +52,10 @@ let annDemo = async(function*(af, deviceInfo) { let testOutput = network.predict(testFeats); console.log("Training set:"); - console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`); + console.log(`Accuracy on training data: ${(accuracy(af, trainOutput, trainTarget)).toFixed(2)}`); console.log("Test set:"); - console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`); + console.log(`Accuracy on testing data: ${(accuracy(af, testOutput, testTarget)).toFixed(2)}`); console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\n`); }); diff --git a/lib/es6/doc/afArray.js b/lib/es6/doc/afArray.js new file mode 100644 index 0000000..d30910b --- /dev/null +++ b/lib/es6/doc/afArray.js @@ -0,0 +1,293 @@ +"use strict"; + +class AFArray { + constructor() { + } + + free() { + } + + elements() { + } + + host() { + } + + copyToHost() { + } + + scalar() { + } + + value() { + } + + write() { + } + + type() { + } + + dims() { + } + + numdims() { + } + + numDims() { + } + + bytes() { + } + + copy() { + } + + isempty() { + } + + isEmpty() { + } + + isscalar() { + } + + isScalar() { + } + + isvector() { + } + + isVector() { + } + + isrow() { + } + + isRow() { + } + + iscolumn() { + } + + isColumn() { + } + + iscomplex() { + } + + isComplex() { + } + + isreal() { + } + + isReal() { + } + + isdouble() { + } + + isDouble() { + } + + issingle() { + } + + isSingle() { + } + + isrealfloating() { + } + + isRealFloating() { + } + + isfloating() { + } + + isFloating() { + } + + isinteger() { + } + + isInteger() { + } + + isbool() { + } + + isBool() { + } + + afEval() { + } + + at() { + } + + row() { + } + + col() { + } + + slice() { + } + + rows() { + } + + cols() { + } + + slices() { + } + + as() { + } + + assign() { + } + + set() { + } + + add() { + } + + addAssign() { + } + + sub() { + } + + subAssign() { + } + + mul() { + } + + mulAssign() { + } + + div() { + } + + divAssign() { + } + + bitshiftl() { + } + + bitShiftL() { + } + + bitshiftr() { + } + + bitShiftR() { + } + + lt() { + } + + gt() { + } + + le() { + } + + ge() { + } + + eq() { + } + + neq() { + } + + and() { + } + + or() { + } + + bitAnd() { + } + + bitOr() { + } + + bitXor() { + } + + rhsAdd() { + } + + rhsSub() { + } + + rhsMul() { + } + + rhsDiv() { + } + + rhsBitshiftl() { + } + + rhsBitShiftL() { + } + + rhsBitshiftr() { + } + + rhsBitShiftR() { + } + + rhsLt() { + } + + rhsGt() { + } + + rhsLe() { + } + + rhsGe() { + } + + rhsEq() { + } + + rhsNeq() { + } + + rhsAnd() { + } + + rhsOr() { + } + + rhsBitAnd() { + } + + rhsBitOr() { + } + + rhsBitXor() { + } + + neg() { + } + + not() { + } +} + +AFArray.create = function() { +}; + +module.exports = AFArray; diff --git a/lib/es6/ext.js b/lib/es6/ext.js index 252309d..fc0fb75 100644 --- a/lib/es6/ext.js +++ b/lib/es6/ext.js @@ -38,14 +38,6 @@ let async = Bluebird.coroutine; const retryCount = 5; const gcTime = 1000; -function isOutOfMemoryError(e) { - return e.message.indexOf("out of memory") > 0; -} - -function invokeGC(af) { - af.gc(gcTime); -} - function synchronify(af, f) { return function () { var err; @@ -58,23 +50,8 @@ function synchronify(af, f) { }; let args = _.toArray(arguments).concat(cb); - - for (let i = 0; i < retryCount; i++) { - done = false; - f.apply(this, args); - while (!done) af._doEvents(); - - if (err) { - if (!isOutOfMemoryError(err)) { - throw err; - } - else { - invokeGC(af); - } - } - } - - if (err) throw err; + f.apply(this, args); + while (!done) af._doEvents(); return res; }; @@ -92,59 +69,11 @@ function installAsyncAndSync(af, obj, name) { let f = obj[name]; if (_.isFunction(f)) { if (!_.isFunction(obj[name + "Async"])) { - obj[name + "Async"] = async(function* () { - let self = this; - let args = _.toArray(arguments); - let call = function () { - return new Bluebird(function (resolve, reject) { - let cb = function (e, r) { - if (e) { - reject(e); - } - else { - resolve(r); - } - }; - args.push(cb); - f.apply(self, args); - }); - }; - - let err = null; - for (let i = 0; i < retryCount; i++) { - try { - return yield call(); - } - catch (e) { - if (!isOutOfMemoryError(e)) { - throw e; - } - invokeGC(af); - err = e; - } - } - throw err; - }); + obj[name + "Async"] = Bluebird.promisify(f); } if (!_.isFunction(obj[name + "Sync"])) { obj[name + "Sync"] = synchronify(af, f); } - obj[name] = function () { - let err = null; - for (let i = 0; i < retryCount; i++) { - try { - return f.apply(this, arguments); - } - catch (e) { - if (!isOutOfMemoryError(e)) { - throw e; - } - invokeGC(af); - err = e; - } - } - throw err; - }; } } } diff --git a/package.json b/package.json index 205d146..6d1207f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.20.0", + "version": "0.21.0", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 39c826f..77d33b8 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -49,8 +49,6 @@ int GetMemSize(const af::array* array) // Make GC aware of device memory. // Event it's VRAM this should keep the usage on low (few hundred megabytes), // so we won't triggrer out of memory errors. - // TODO: If ArrayFire's CUDA error handling gets fixed, - // TODO: then we should only report memory usage for CPU based devices. return static_cast(sizeof(af::array)) + static_cast(sizeof(ArrayWrapper)) + static_cast(array->bytes()); } @@ -124,7 +122,7 @@ NAN_MODULE_INIT(ArrayWrapper::Init) Nan::SetPrototypeTemplate(tmpl, Nan::New("isInteger").ToLocalChecked(), Nan::New(IsInteger), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("isbool").ToLocalChecked(), Nan::New(IsBool), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("isBool").ToLocalChecked(), Nan::New(IsBool), v8::None); - Nan::SetPrototypeTemplate(tmpl, Nan::New("eval").ToLocalChecked(), Nan::New(Eval), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("afEval").ToLocalChecked(), Nan::New(Eval), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("at").ToLocalChecked(), Nan::New(At), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("row").ToLocalChecked(), Nan::New(Row), v8::None); @@ -525,7 +523,6 @@ NAN_METHOD(ArrayWrapper::Scalar) { try { - ARGS_LEN(1) Guard guard; auto pArray = GetArray(info.This()); switch (pArray->type()) diff --git a/src/helpers.h b/src/helpers.h index 26a6485..3fe0a5d 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -315,9 +315,9 @@ NAN_METHOD(F)\ else\ {\ if (NeedsDouble(*pArray))\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray)));\ + info.GetReturnValue().Set(af::f(*pArray));\ else\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray)));\ + info.GetReturnValue().Set(af::f(*pArray));\ }\ }\ ARRAYFIRE_CATCH\ @@ -391,11 +391,11 @@ NAN_METHOD(F)\ {\ if (NeedsDouble(*pArray1))\ {\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ + info.GetReturnValue().Set(af::f(*pArray1, *pArray2));\ }\ else\ {\ - info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2)));\ + info.GetReturnValue().Set(af::f(*pArray1, *pArray2));\ }\ }\ }\ diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 12bfeb0..597a05b 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -260,19 +260,19 @@ describe("AFArray class and methods", function() { } // Let's do some indexing: - let v = yield array2.valueAsync(); + let v = array2.value(); assert(v === 0.0); - v = yield array2.at(1).valueAsync(); + v = array2.at(1).value(); assert(v === 1.0); - v = yield array2.at(2).scalarAsync(); + v = array2.at(2).scalar(); assert(v === 4.0); - v = yield array2.at("end").scalarAsync(); + v = array2.at("end").scalar(); assert(v === 9.0 * 9.0); - v = yield array2.at(af.end - 1).scalarAsync(); + v = array2.at(af.end - 1).scalar(); assert(v === 8.0 * 8.0); }); f().nodeify(done); @@ -316,19 +316,19 @@ describe("AFArray class and methods", function() { } // Let's do some indexing: - let v = array2.valueSync(); + let v = array2.value(); assert(v === 0.0); - v = array.at(1).valueSync(); + v = array.at(1).value(); assert(v === 1.0); - v = array2.at(2).scalarSync(); + v = array2.at(2).scalar(); assert(v === 4.0); - v = array2.at("end").scalarSync(); + v = array2.at("end").scalar(); assert(v === 9.0 * 9.0); - v = array2.at(af.end - 1).scalarSync(); + v = array2.at(af.end - 1).scalar(); assert(v === 8.0 * 8.0); }); diff --git a/tests/es6/gfor.js b/tests/es6/gfor.js index 1d6bac9..10db310 100644 --- a/tests/es6/gfor.js +++ b/tests/es6/gfor.js @@ -41,8 +41,8 @@ let float = ref.types.float; describe("gfor", function () { testExec.run(function (af) { - it("should work", function (done) { - async(function*() { + it("should work", function () { + af.scope(() => { const count = 20; let arr = af.constant(0.0, count, 10, af.dType.f32); let val = af.range(new af.Dim4(1, 10), 1, af.dType.f32); @@ -54,10 +54,10 @@ describe("gfor", function () { arr.assign(seq, af.span, val); }); for (let idx = 0; idx < count; idx++) { - let sum = yield af.sumAsync(arr.at(idx, af.span)); + let sum = af.sum(arr.at(idx, af.span)); assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)); } - })().asCallback(done); + }); }); }); }); \ No newline at end of file From 21f1361ffc26b37c8ab1ae4da4881e743770b3bb Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 14:54:15 +0100 Subject: [PATCH 38/45] T/H --- lib/es6/doc/afArray.js | 6 ++++++ src/arraywrapper.cpp | 21 +++++++++++++++++++++ src/arraywrapper.h | 3 +++ 3 files changed, 30 insertions(+) diff --git a/lib/es6/doc/afArray.js b/lib/es6/doc/afArray.js index d30910b..66e0237 100644 --- a/lib/es6/doc/afArray.js +++ b/lib/es6/doc/afArray.js @@ -285,6 +285,12 @@ class AFArray { not() { } + + T() { + } + + H() { + } } AFArray.create = function() { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 77d33b8..bd54d34 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -182,6 +182,9 @@ NAN_MODULE_INIT(ArrayWrapper::Init) Nan::SetPrototypeTemplate(tmpl, Nan::New("neg").ToLocalChecked(), Nan::New(Neg), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("not").ToLocalChecked(), Nan::New(Not), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("T").ToLocalChecked(), Nan::New(T), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("S").ToLocalChecked(), Nan::New(S), v8::None); + auto f = tmpl->GetFunction(); f->Set(Nan::New("create").ToLocalChecked(), Nan::New(Create)->GetFunction()); constructor.Reset(f); @@ -1695,3 +1698,21 @@ NAN_METHOD(ArrayWrapper::F)\ AFARRAY_IMPL_UNOP(Neg, -) AFARRAY_IMPL_UNOP(Not, !) #undef AFARRAY_IMPL_UNOP + +NAN_METHOD(ArrayWrapper::T) +{ + try + { + info.GetReturnValue().Set(New(GetArray(info.This())->T())); + } + ARRAYFIRE_CATCH +} + +NAN_METHOD(ArrayWrapper::H) +{ + try + { + info.GetReturnValue().Set(New(GetArray(info.This())->H())); + } + ARRAYFIRE_CATCH +} \ No newline at end of file diff --git a/src/arraywrapper.h b/src/arraywrapper.h index ea00eeb..3c71c34 100644 --- a/src/arraywrapper.h +++ b/src/arraywrapper.h @@ -137,6 +137,9 @@ struct ArrayWrapper : public node::ObjectWrap static NAN_METHOD(Not); static NAN_METHOD(Neg); + static NAN_METHOD(T); + static NAN_METHOD(H); + private: explicit ArrayWrapper(af::array* array); From 009099298860999eb4ffae595eab8351a55b05a3 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 17:23:06 +0100 Subject: [PATCH 39/45] 0.21.0 --- changelog.md | 5 + examples/es5/machine-learning/ann.js | 177 +++------- examples/es5/machine-learning/ann.js.map | 2 +- .../es5/machine-learning/neuralNetwork.js | 83 ++--- .../es5/machine-learning/neuralNetwork.js.map | 2 +- lib/es5/doc/afArray.js | 308 ++++++++++++++++++ lib/es5/doc/afArray.js.map | 1 + lib/es5/ext.js | 142 +------- lib/es5/ext.js.map | 2 +- tests/es5/afArrayTests.js | 46 +-- tests/es5/afArrayTests.js.map | 2 +- tests/es5/gfor.js | 63 +--- tests/es5/gfor.js.map | 2 +- 13 files changed, 435 insertions(+), 400 deletions(-) create mode 100644 lib/es5/doc/afArray.js create mode 100644 lib/es5/doc/afArray.js.map diff --git a/changelog.md b/changelog.md index 3a32c87..a37a57b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +# 0.21.0 (2015-12-30) + +- All calculation methods synchronus +- T/H method added to AFArray + # 0.20.0 (2015-12-28) - FIX: gfor actually works diff --git a/examples/es5/machine-learning/ann.js b/examples/es5/machine-learning/ann.js index cd36490..0ae610b 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -31,35 +31,11 @@ proto.addBias = function (input) { return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); }; -proto._calculateError = async(regeneratorRuntime.mark(function _callee(out, pred) { - var dif, sq; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - dif = out.sub(pred); - sq = dif.mul(dif); - _context.next = 4; - return this.af.syncAsync(); - - case 4: - _context.t0 = Math; - _context.next = 7; - return this.af.sumAsync(sq); - - case 7: - _context.t1 = _context.sent; - _context.t2 = _context.t0.sqrt.call(_context.t0, _context.t1); - _context.t3 = sq.elements(); - return _context.abrupt("return", _context.t2 / _context.t3); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, this); -})); +proto._calculateError = function (out, pred) { + var dif = out.sub(pred); + var sq = dif.mul(dif); + return Math.sqrt(this.af.sum(sq)) / sq.elements(); +}; proto.forwardPropagate = function (input) { var _this = this; @@ -120,101 +96,56 @@ proto.predict = function (input) { return this.signal[this.numLayers - 1].copy(); }; -proto.train = async(regeneratorRuntime.mark(function _callee3(input, target, options) { - var self, af, Seq, numSamples, numBatches, err, i, start, _loop3, j, end; - - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - self = this; - af = self.af; - Seq = self.af.Seq; - numSamples = input.dims(0); - numBatches = numSamples / options.batchSize; - err = 0; - i = 0; - - case 7: - if (!(i < options.maxEpochs)) { - _context3.next = 21; - break; - } - - start = now(); - - _loop3 = function _loop3(j) { - af.scope(function () { - var startPos = j * options.batchSize; - var endPos = startPos + options.batchSize - 1; - - var x = input.at(new Seq(startPos, endPos), af.span); - var y = target.at(new Seq(startPos, endPos), af.span); - - self.forwardPropagate(x); - self.backPropagate(y, options.alpha); - }); - }; - - for (j = 0; j < numBatches - 1; j++) { - _loop3(j); - } - - _context3.next = 13; - return af.scope(async(regeneratorRuntime.mark(function _callee2() { - var startPos, endPos, outVec; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - // Validate with last batch - startPos = (numBatches - 1) * options.batchSize; - endPos = numSamples - 1; - outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); - _context2.next = 5; - return self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); - - case 5: - err = _context2.sent; - - case 6: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - }))); - - case 13: - end = now(); - - console.log("Epoch: " + (i + 1) + ", Error: " + err.toFixed(6) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds"); - - // Check if convergence criteria has been met - - if (!(err < options.maxError)) { - _context3.next = 18; - break; - } - - console.log("Converged on Epoch: " + (i + 1)); - return _context3.abrupt("break", 21); - - case 18: - i++; - _context3.next = 7; - break; - - case 21: - return _context3.abrupt("return", err); - - case 22: - case "end": - return _context3.stop(); - } +proto.train = function (input, target, options) { + var self = this; + var af = self.af; + var Seq = self.af.Seq; + + var numSamples = input.dims(0); + var numBatches = numSamples / options.batchSize; + + var err = 0; + + for (var i = 0; i < options.maxEpochs; i++) { + var start = now(); + + var _loop3 = function _loop3(j) { + af.scope(function () { + var startPos = j * options.batchSize; + var endPos = startPos + options.batchSize - 1; + + var x = input.at(new Seq(startPos, endPos), af.span); + var y = target.at(new Seq(startPos, endPos), af.span); + + self.forwardPropagate(x); + self.backPropagate(y, options.alpha); + }); + }; + + for (var j = 0; j < numBatches - 1; j++) { + _loop3(j); } - }, _callee3, this); -})); + + af.scope(function () { + // Validate with last batch + var startPos = (numBatches - 1) * options.batchSize; + var endPos = numSamples - 1; + var outVec = self.predict(input.at(new Seq(startPos, endPos), af.span)); + err = self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + }); + + var end = now(); + console.log("Epoch: " + (i + 1) + ", Error: " + err.toFixed(6) + ", Duration: " + ((end - start) / 1000).toFixed(4) + " seconds"); + + // Check if convergence criteria has been met + if (err < options.maxError) { + console.log("Converged on Epoch: " + (i + 1)); + break; + } + } + + return err; +}; module.exports = ANN; //# sourceMappingURL=ann.js.map diff --git a/examples/es5/machine-learning/ann.js.map b/examples/es5/machine-learning/ann.js.map index acafa87..c86e089 100644 --- a/examples/es5/machine-learning/ann.js.map +++ b/examples/es5/machine-learning/ann.js.map @@ -1 +1 @@ -{"version":3,"sources":["machine-learning/ann.js"],"names":[],"mappings":"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","file":"machine-learning/ann.js","sourcesContent":["\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet debug = require(\"debug\")(\"af:ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nfunction ANN(af, layers, range) {\r\n range = range || 0.05;\r\n this.af = af;\r\n this.numLayers = layers.length;\r\n this.signal = [];\r\n this.weights = [];\r\n for (let i = 0; i < this.numLayers; i++) {\r\n this.signal.push(new af.AFArray());\r\n if (i < this.numLayers - 1) {\r\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\r\n this.weights.push(w);\r\n }\r\n }\r\n}\r\n\r\nlet proto = ANN.prototype;\r\n\r\nproto.deriv = function (out) {\r\n return out.rhsSub(1).mul(out);\r\n};\r\n\r\nproto.addBias = function (input) {\r\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\r\n};\r\n\r\nproto._calculateError = async(function*(out, pred) {\r\n let dif = out.sub(pred);\r\n let sq = dif.mul(dif);\r\n yield this.af.syncAsync();\r\n return Math.sqrt(yield this.af.sumAsync(sq)) / sq.elements();\r\n});\r\n\r\nproto.forwardPropagate = function (input) {\r\n this.signal[0].set(input);\r\n for (let i = 0; i < this.numLayers - 1; i++) {\r\n let self = this;\r\n this.af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let outVec = self.af.matMul(inVec, self.weights[i]);\r\n self.signal[i + 1].set(self.af.sigmoid(outVec));\r\n });\r\n }\r\n};\r\n\r\nproto.backPropagate = function (target, alpha) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n // Get error for output layer\r\n af.scope(function() {\r\n let outVec = self.signal[self.numLayers - 1];\r\n let err = outVec.sub(target);\r\n let m = target.dims(0);\r\n\r\n for (let i = self.numLayers - 2; i >= 0; i--) {\r\n af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let delta = af.transpose(self.deriv(outVec).mul(err));\r\n\r\n // Adjust weights\r\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\r\n self.weights[i].addAssign(af.transpose(grad));\r\n\r\n // Input to current layer is output of previous\r\n outVec = self.signal[i];\r\n err.set(self.af.matMulTT(delta, self.weights[i]));\r\n\r\n // Remove the error of bias and propagate backward\r\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\r\n });\r\n }\r\n });\r\n};\r\n\r\nproto.predict = function (input) {\r\n this.forwardPropagate(input);\r\n return this.signal[this.numLayers - 1].copy();\r\n};\r\n\r\nproto.train = async(function*(input, target, options) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n let numSamples = input.dims(0);\r\n let numBatches = numSamples / options.batchSize;\r\n\r\n let err = 0;\r\n\r\n for (let i = 0; i < options.maxEpochs; i++) {\r\n const start = now();\r\n for (let j = 0; j < numBatches - 1; j++) {\r\n af.scope(() => {\r\n let startPos = j * options.batchSize;\r\n let endPos = startPos + options.batchSize - 1;\r\n\r\n let x = input.at(new Seq(startPos, endPos), af.span);\r\n let y = target.at(new Seq(startPos, endPos), af.span);\r\n\r\n self.forwardPropagate(x);\r\n self.backPropagate(y, options.alpha);\r\n });\r\n }\r\n\r\n yield af.scope(async(function*() {\r\n // Validate with last batch\r\n let startPos = (numBatches - 1) * options.batchSize;\r\n let endPos = numSamples - 1;\r\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\r\n err = yield self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\r\n }));\r\n\r\n const end = now();\r\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\r\n\r\n // Check if convergence criteria has been met\r\n if (err < options.maxError) {\r\n console.log(`Converged on Epoch: ${i + 1}`);\r\n break;\r\n }\r\n }\r\n\r\n return err;\r\n});\r\n\r\nmodule.exports = ANN;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/ann.js"],"names":[],"mappings":"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","file":"machine-learning/ann.js","sourcesContent":["\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet debug = require(\"debug\")(\"af:ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nfunction ANN(af, layers, range) {\r\n range = range || 0.05;\r\n this.af = af;\r\n this.numLayers = layers.length;\r\n this.signal = [];\r\n this.weights = [];\r\n for (let i = 0; i < this.numLayers; i++) {\r\n this.signal.push(new af.AFArray());\r\n if (i < this.numLayers - 1) {\r\n let w = af.randu(layers[i] + 1, layers[i + 1], af.dType.f32).mul(range).sub(range / 2);\r\n this.weights.push(w);\r\n }\r\n }\r\n}\r\n\r\nlet proto = ANN.prototype;\r\n\r\nproto.deriv = function (out) {\r\n return out.rhsSub(1).mul(out);\r\n};\r\n\r\nproto.addBias = function (input) {\r\n return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input);\r\n};\r\n\r\nproto._calculateError = function(out, pred) {\r\n let dif = out.sub(pred);\r\n let sq = dif.mul(dif);\r\n return Math.sqrt(this.af.sum(sq)) / sq.elements();\r\n};\r\n\r\nproto.forwardPropagate = function (input) {\r\n this.signal[0].set(input);\r\n for (let i = 0; i < this.numLayers - 1; i++) {\r\n let self = this;\r\n this.af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let outVec = self.af.matMul(inVec, self.weights[i]);\r\n self.signal[i + 1].set(self.af.sigmoid(outVec));\r\n });\r\n }\r\n};\r\n\r\nproto.backPropagate = function (target, alpha) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n // Get error for output layer\r\n af.scope(function() {\r\n let outVec = self.signal[self.numLayers - 1];\r\n let err = outVec.sub(target);\r\n let m = target.dims(0);\r\n\r\n for (let i = self.numLayers - 2; i >= 0; i--) {\r\n af.scope(function() {\r\n let inVec = self.addBias(self.signal[i]);\r\n let delta = af.transpose(self.deriv(outVec).mul(err));\r\n\r\n // Adjust weights\r\n let grad = af.matMul(delta, inVec).mul(alpha).neg().div(m);\r\n self.weights[i].addAssign(af.transpose(grad));\r\n\r\n // Input to current layer is output of previous\r\n outVec = self.signal[i];\r\n err.set(self.af.matMulTT(delta, self.weights[i]));\r\n\r\n // Remove the error of bias and propagate backward\r\n err.set(err.at(af.span, new Seq(1, outVec.dims(1))));\r\n });\r\n }\r\n });\r\n};\r\n\r\nproto.predict = function (input) {\r\n this.forwardPropagate(input);\r\n return this.signal[this.numLayers - 1].copy();\r\n};\r\n\r\nproto.train = function(input, target, options) {\r\n let self = this;\r\n let af = self.af;\r\n let Seq = self.af.Seq;\r\n\r\n let numSamples = input.dims(0);\r\n let numBatches = numSamples / options.batchSize;\r\n\r\n let err = 0;\r\n\r\n for (let i = 0; i < options.maxEpochs; i++) {\r\n const start = now();\r\n for (let j = 0; j < numBatches - 1; j++) {\r\n af.scope(() => {\r\n let startPos = j * options.batchSize;\r\n let endPos = startPos + options.batchSize - 1;\r\n\r\n let x = input.at(new Seq(startPos, endPos), af.span);\r\n let y = target.at(new Seq(startPos, endPos), af.span);\r\n\r\n self.forwardPropagate(x);\r\n self.backPropagate(y, options.alpha);\r\n });\r\n }\r\n\r\n af.scope(() => {\r\n // Validate with last batch\r\n let startPos = (numBatches - 1) * options.batchSize;\r\n let endPos = numSamples - 1;\r\n let outVec = self.predict(input.at(new Seq(startPos, endPos), af.span));\r\n err = self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span));\r\n });\r\n\r\n const end = now();\r\n console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`);\r\n\r\n // Check if convergence criteria has been met\r\n if (err < options.maxError) {\r\n console.log(`Converged on Epoch: ${i + 1}`);\r\n break;\r\n }\r\n }\r\n\r\n return err;\r\n};\r\n\r\nmodule.exports = ANN;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/es5/machine-learning/neuralNetwork.js b/examples/es5/machine-learning/neuralNetwork.js index 2e7be93..8a37427 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -7,55 +7,28 @@ var mnist = require("./mnist"); var ANN = require("./ann"); var now = require("performance-now"); -var accuracy = async(regeneratorRuntime.mark(function _callee(af, predicted, target) { - var pMax, tMax; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return af.findMaxAtAsync(predicted, 1); - - case 2: - pMax = _context.sent; - _context.next = 5; - return af.findMaxAtAsync(target, 1); - - case 5: - tMax = _context.sent; - _context.next = 8; - return af.countAsync(pMax.index.eq(tMax.index)); - - case 8: - _context.t0 = _context.sent; - _context.t1 = 100 * _context.t0; - _context.t2 = tMax.index.elements(); - return _context.abrupt("return", _context.t1 / _context.t2); - - case 12: - case "end": - return _context.stop(); - } - } - }, _callee, this); -})); +var accuracy = function accuracy(af, predicted, target) { + var pMax = af.findMaxAt(predicted, 1); + var tMax = af.findMaxAt(target, 1); + return 100 * af.count(pMax.index.eq(tMax.index)) / tMax.index.elements(); +}; -var annDemo = async(regeneratorRuntime.mark(function _callee2(af, deviceInfo) { +var annDemo = async(regeneratorRuntime.mark(function _callee(af, deviceInfo) { var data, featureSize, trainFeats, testFeats, trainTarget, testTarget, network, start, end, trainOutput, testOutput; - return regeneratorRuntime.wrap(function _callee2$(_context2) { + return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { - switch (_context2.prev = _context2.next) { + switch (_context.prev = _context.next) { case 0: console.log("Running ANN Demo on device:\n"); common.printDeviceInfo(deviceInfo); console.log(""); console.log("Setting up training data."); - _context2.next = 6; + _context.next = 6; return mnist.setup(af, true, 0.6); case 6: - data = _context2.sent; + data = _context.sent; featureSize = data.trainImages.elements() / data.numTrain; // Reshape images into feature vectors @@ -69,19 +42,17 @@ var annDemo = async(regeneratorRuntime.mark(function _callee2(af, deviceInfo) { // Train network start = now(); - _context2.next = 16; - return network.train(trainFeats, trainTarget, { + + network.train(trainFeats, trainTarget, { alpha: 1.0, maxEpochs: 300, batchSize: 100, maxError: 0.0001 }); - - case 16: - _context2.next = 18; + _context.next = 17; return af.waitAsync(); - case 18: + case 17: end = now(); // Run the trained network and test accuracy. @@ -90,35 +61,19 @@ var annDemo = async(regeneratorRuntime.mark(function _callee2(af, deviceInfo) { testOutput = network.predict(testFeats); console.log("Training set:"); - _context2.t0 = console; - _context2.next = 25; - return accuracy(af, trainOutput, trainTarget); - - case 25: - _context2.t1 = _context2.sent.toFixed(2); - _context2.t2 = "Accuracy on training data: " + _context2.t1; - - _context2.t0.log.call(_context2.t0, _context2.t2); + console.log("Accuracy on training data: " + accuracy(af, trainOutput, trainTarget).toFixed(2)); console.log("Test set:"); - _context2.t3 = console; - _context2.next = 32; - return accuracy(af, testOutput, testTarget); - - case 32: - _context2.t4 = _context2.sent.toFixed(2); - _context2.t5 = "Accuracy on testing data: " + _context2.t4; - - _context2.t3.log.call(_context2.t3, _context2.t5); + console.log("Accuracy on testing data: " + accuracy(af, testOutput, testTarget).toFixed(2)); console.log("Training time: " + ((end - start) / 1000).toFixed(10) + " seconds\n"); - case 36: + case 25: case "end": - return _context2.stop(); + return _context.stop(); } } - }, _callee2, this); + }, _callee, this); })); common.runOnBestDevice(annDemo, "ANN Demo"); diff --git a/examples/es5/machine-learning/neuralNetwork.js.map b/examples/es5/machine-learning/neuralNetwork.js.map index c02d7ff..d416389 100644 --- a/examples/es5/machine-learning/neuralNetwork.js.map +++ b/examples/es5/machine-learning/neuralNetwork.js.map @@ -1 +1 @@ -{"version":3,"sources":["machine-learning/neuralNetwork.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAClC,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;;AAErC,IAAI,QAAQ,GAAG,KAAK,yBAAC,iBAAU,EAAE,EAAE,SAAS,EAAE,MAAM;QAC5C,IAAI,EACJ,IAAI;;;;;;2BADS,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;;;AAA5C,wBAAI;;2BACS,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAAzC,wBAAI;;2BACa,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;;kCAArD,GAAG;kCAAuD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;;;;;;;;;CAC1F,EAAC,CAAC;;AAEH,IAAI,OAAO,GAAG,KAAK,yBAAC,kBAAU,EAAE,EAAE,UAAU;QAMpC,IAAI,EAEJ,WAAW,EAGX,UAAU,EACV,SAAS,EAET,WAAW,EACX,UAAU,EAEV,OAAO,EAGL,KAAK,EAYL,GAAG,EAGL,WAAW,EACX,UAAU;;;;;AAnCd,2BAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC7C,0BAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACnC,2BAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEhB,2BAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;;2BACxB,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC;;;AAAvC,wBAAI;AAEJ,+BAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ;;;;AAGzD,8BAAU,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnF,6BAAS,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhF,+BAAW,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5C,8BAAU,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAE1C,2BAAO,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;;;AAGnE,yBAAK,GAAG,GAAG,EAAE;;2BACb,OAAO,CAAC,KAAK,CACf,UAAU,EACV,WAAW,EACX;AACI,6BAAK,EAAE,GAAG;AACV,iCAAS,EAAE,GAAG;AACd,iCAAS,EAAE,GAAG;AACd,gCAAQ,EAAE,MAAM;qBACnB,CACJ;;;;2BACK,EAAE,CAAC,SAAS,EAAE;;;AACd,uBAAG,GAAG,GAAG,EAAE;;;;AAGb,+BAAW,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AACzC,8BAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;;AAE3C,2BAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;mCAC7B,OAAO;;2BAA0C,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC;;;kDAAE,OAAO,CAAC,CAAC;;;iCAA1F,GAAG;;AAEX,2BAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;mCACzB,OAAO;;2BAA0C,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC;;;kDAAE,OAAO,CAAC,CAAC;;;iCAAxF,GAAG;;AAEX,2BAAO,CAAC,GAAG,qBAAmB,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA,GAAI,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE,CAAC,gBAAa,CAAC;;;;;;;;CACjF,EAAC,CAAC;;AAEH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC","file":"machine-learning/neuralNetwork.js","sourcesContent":["\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet common = require(\"../common\");\r\nlet mnist = require(\"./mnist\");\r\nlet ANN = require(\"./ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nlet accuracy = async(function*(af, predicted, target) {\r\n let pMax = yield af.findMaxAtAsync(predicted, 1);\r\n let tMax = yield af.findMaxAtAsync(target, 1);\r\n return (100 * (yield af.countAsync(pMax.index.eq(tMax.index)))) / tMax.index.elements();\r\n});\r\n\r\nlet annDemo = async(function*(af, deviceInfo) {\r\n console.log(\"Running ANN Demo on device:\\n\");\r\n common.printDeviceInfo(deviceInfo);\r\n console.log(\"\");\r\n\r\n console.log(\"Setting up training data.\");\r\n let data = yield mnist.setup(af, true, 0.6);\r\n\r\n let featureSize = data.trainImages.elements() / data.numTrain;\r\n\r\n // Reshape images into feature vectors\r\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\r\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\r\n\r\n let trainTarget = af.transpose(data.trainLabels);\r\n let testTarget = af.transpose(data.testLabels);\r\n\r\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\r\n\r\n // Train network\r\n const start = now();\r\n yield network.train(\r\n trainFeats,\r\n trainTarget,\r\n {\r\n alpha: 1.0,\r\n maxEpochs: 300,\r\n batchSize: 100,\r\n maxError: 0.0001\r\n }\r\n );\r\n yield af.waitAsync();\r\n const end = now();\r\n\r\n // Run the trained network and test accuracy.\r\n let trainOutput = network.predict(trainFeats);\r\n let testOutput = network.predict(testFeats);\r\n\r\n console.log(\"Training set:\");\r\n console.log(`Accuracy on training data: ${(yield accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\r\n\r\n console.log(\"Test set:\");\r\n console.log(`Accuracy on testing data: ${(yield accuracy(af, testOutput, testTarget)).toFixed(2)}`);\r\n\r\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\r\n});\r\n\r\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["machine-learning/neuralNetwork.js"],"names":[],"mappings":"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","file":"machine-learning/neuralNetwork.js","sourcesContent":["\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet common = require(\"../common\");\r\nlet mnist = require(\"./mnist\");\r\nlet ANN = require(\"./ann\");\r\nlet now = require(\"performance-now\");\r\n\r\nlet accuracy = function(af, predicted, target) {\r\n let pMax = af.findMaxAt(predicted, 1);\r\n let tMax = af.findMaxAt(target, 1);\r\n return (100 * (af.count(pMax.index.eq(tMax.index)))) / tMax.index.elements();\r\n};\r\n\r\nlet annDemo = async(function*(af, deviceInfo) {\r\n console.log(\"Running ANN Demo on device:\\n\");\r\n common.printDeviceInfo(deviceInfo);\r\n console.log(\"\");\r\n\r\n console.log(\"Setting up training data.\");\r\n let data = yield mnist.setup(af, true, 0.6);\r\n\r\n let featureSize = data.trainImages.elements() / data.numTrain;\r\n\r\n // Reshape images into feature vectors\r\n let trainFeats = af.transpose(af.modDims(data.trainImages, featureSize, data.numTrain));\r\n let testFeats = af.transpose(af.modDims(data.testImages, featureSize, data.numTest));\r\n\r\n let trainTarget = af.transpose(data.trainLabels);\r\n let testTarget = af.transpose(data.testLabels);\r\n\r\n let network = new ANN(af, [trainFeats.dims(1), 100, 50, data.numClasses]);\r\n\r\n // Train network\r\n const start = now();\r\n network.train(\r\n trainFeats,\r\n trainTarget,\r\n {\r\n alpha: 1.0,\r\n maxEpochs: 300,\r\n batchSize: 100,\r\n maxError: 0.0001\r\n }\r\n );\r\n yield af.waitAsync();\r\n const end = now();\r\n\r\n // Run the trained network and test accuracy.\r\n let trainOutput = network.predict(trainFeats);\r\n let testOutput = network.predict(testFeats);\r\n\r\n console.log(\"Training set:\");\r\n console.log(`Accuracy on training data: ${(accuracy(af, trainOutput, trainTarget)).toFixed(2)}`);\r\n\r\n console.log(\"Test set:\");\r\n console.log(`Accuracy on testing data: ${(accuracy(af, testOutput, testTarget)).toFixed(2)}`);\r\n\r\n console.log(`Training time: ${((end - start) / 1000).toFixed(10)} seconds\\n`);\r\n});\r\n\r\ncommon.runOnBestDevice(annDemo, \"ANN Demo\");"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/doc/afArray.js b/lib/es5/doc/afArray.js new file mode 100644 index 0000000..cbc8d8b --- /dev/null +++ b/lib/es5/doc/afArray.js @@ -0,0 +1,308 @@ +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AFArray = (function () { + function AFArray() { + _classCallCheck(this, AFArray); + } + + _createClass(AFArray, [{ + key: "free", + value: function free() {} + }, { + key: "elements", + value: function elements() {} + }, { + key: "host", + value: function host() {} + }, { + key: "copyToHost", + value: function copyToHost() {} + }, { + key: "scalar", + value: function scalar() {} + }, { + key: "value", + value: function value() {} + }, { + key: "write", + value: function write() {} + }, { + key: "type", + value: function type() {} + }, { + key: "dims", + value: function dims() {} + }, { + key: "numdims", + value: function numdims() {} + }, { + key: "numDims", + value: function numDims() {} + }, { + key: "bytes", + value: function bytes() {} + }, { + key: "copy", + value: function copy() {} + }, { + key: "isempty", + value: function isempty() {} + }, { + key: "isEmpty", + value: function isEmpty() {} + }, { + key: "isscalar", + value: function isscalar() {} + }, { + key: "isScalar", + value: function isScalar() {} + }, { + key: "isvector", + value: function isvector() {} + }, { + key: "isVector", + value: function isVector() {} + }, { + key: "isrow", + value: function isrow() {} + }, { + key: "isRow", + value: function isRow() {} + }, { + key: "iscolumn", + value: function iscolumn() {} + }, { + key: "isColumn", + value: function isColumn() {} + }, { + key: "iscomplex", + value: function iscomplex() {} + }, { + key: "isComplex", + value: function isComplex() {} + }, { + key: "isreal", + value: function isreal() {} + }, { + key: "isReal", + value: function isReal() {} + }, { + key: "isdouble", + value: function isdouble() {} + }, { + key: "isDouble", + value: function isDouble() {} + }, { + key: "issingle", + value: function issingle() {} + }, { + key: "isSingle", + value: function isSingle() {} + }, { + key: "isrealfloating", + value: function isrealfloating() {} + }, { + key: "isRealFloating", + value: function isRealFloating() {} + }, { + key: "isfloating", + value: function isfloating() {} + }, { + key: "isFloating", + value: function isFloating() {} + }, { + key: "isinteger", + value: function isinteger() {} + }, { + key: "isInteger", + value: function isInteger() {} + }, { + key: "isbool", + value: function isbool() {} + }, { + key: "isBool", + value: function isBool() {} + }, { + key: "afEval", + value: function afEval() {} + }, { + key: "at", + value: function at() {} + }, { + key: "row", + value: function row() {} + }, { + key: "col", + value: function col() {} + }, { + key: "slice", + value: function slice() {} + }, { + key: "rows", + value: function rows() {} + }, { + key: "cols", + value: function cols() {} + }, { + key: "slices", + value: function slices() {} + }, { + key: "as", + value: function as() {} + }, { + key: "assign", + value: function assign() {} + }, { + key: "set", + value: function set() {} + }, { + key: "add", + value: function add() {} + }, { + key: "addAssign", + value: function addAssign() {} + }, { + key: "sub", + value: function sub() {} + }, { + key: "subAssign", + value: function subAssign() {} + }, { + key: "mul", + value: function mul() {} + }, { + key: "mulAssign", + value: function mulAssign() {} + }, { + key: "div", + value: function div() {} + }, { + key: "divAssign", + value: function divAssign() {} + }, { + key: "bitshiftl", + value: function bitshiftl() {} + }, { + key: "bitShiftL", + value: function bitShiftL() {} + }, { + key: "bitshiftr", + value: function bitshiftr() {} + }, { + key: "bitShiftR", + value: function bitShiftR() {} + }, { + key: "lt", + value: function lt() {} + }, { + key: "gt", + value: function gt() {} + }, { + key: "le", + value: function le() {} + }, { + key: "ge", + value: function ge() {} + }, { + key: "eq", + value: function eq() {} + }, { + key: "neq", + value: function neq() {} + }, { + key: "and", + value: function and() {} + }, { + key: "or", + value: function or() {} + }, { + key: "bitAnd", + value: function bitAnd() {} + }, { + key: "bitOr", + value: function bitOr() {} + }, { + key: "bitXor", + value: function bitXor() {} + }, { + key: "rhsAdd", + value: function rhsAdd() {} + }, { + key: "rhsSub", + value: function rhsSub() {} + }, { + key: "rhsMul", + value: function rhsMul() {} + }, { + key: "rhsDiv", + value: function rhsDiv() {} + }, { + key: "rhsBitshiftl", + value: function rhsBitshiftl() {} + }, { + key: "rhsBitShiftL", + value: function rhsBitShiftL() {} + }, { + key: "rhsBitshiftr", + value: function rhsBitshiftr() {} + }, { + key: "rhsBitShiftR", + value: function rhsBitShiftR() {} + }, { + key: "rhsLt", + value: function rhsLt() {} + }, { + key: "rhsGt", + value: function rhsGt() {} + }, { + key: "rhsLe", + value: function rhsLe() {} + }, { + key: "rhsGe", + value: function rhsGe() {} + }, { + key: "rhsEq", + value: function rhsEq() {} + }, { + key: "rhsNeq", + value: function rhsNeq() {} + }, { + key: "rhsAnd", + value: function rhsAnd() {} + }, { + key: "rhsOr", + value: function rhsOr() {} + }, { + key: "rhsBitAnd", + value: function rhsBitAnd() {} + }, { + key: "rhsBitOr", + value: function rhsBitOr() {} + }, { + key: "rhsBitXor", + value: function rhsBitXor() {} + }, { + key: "neg", + value: function neg() {} + }, { + key: "not", + value: function not() {} + }, { + key: "T", + value: function T() {} + }, { + key: "H", + value: function H() {} + }]); + + return AFArray; +})(); + +AFArray.create = function () {}; + +module.exports = AFArray; +//# sourceMappingURL=afArray.js.map diff --git a/lib/es5/doc/afArray.js.map b/lib/es5/doc/afArray.js.map new file mode 100644 index 0000000..0f4e907 --- /dev/null +++ b/lib/es5/doc/afArray.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["doc/afArray.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;IAEP,OAAO;AACT,aADE,OAAO,GACK;8BADZ,OAAO;KAER;;iBAFC,OAAO;;+BAIF,EACN;;;mCAEU,EACV;;;+BAEM,EACN;;;qCAEY,EACZ;;;iCAEQ,EACR;;;gCAEO,EACP;;;gCAEO,EACP;;;+BAEM,EACN;;;+BAEM,EACN;;;kCAES,EACT;;;kCAES,EACT;;;gCAEO,EACP;;;+BAEM,EACN;;;kCAES,EACT;;;kCAES,EACT;;;mCAEU,EACV;;;mCAEU,EACV;;;mCAEU,EACV;;;mCAEU,EACV;;;gCAEO,EACP;;;gCAEO,EACP;;;mCAEU,EACV;;;mCAEU,EACV;;;oCAEW,EACX;;;oCAEW,EACX;;;iCAEQ,EACR;;;iCAEQ,EACR;;;mCAEU,EACV;;;mCAEU,EACV;;;mCAEU,EACV;;;mCAEU,EACV;;;yCAEgB,EAChB;;;yCAEgB,EAChB;;;qCAEY,EACZ;;;qCAEY,EACZ;;;oCAEW,EACX;;;oCAEW,EACX;;;iCAEQ,EACR;;;iCAEQ,EACR;;;iCAEQ,EACR;;;6BAEI,EACJ;;;8BAEK,EACL;;;8BAEK,EACL;;;gCAEO,EACP;;;+BAEM,EACN;;;+BAEM,EACN;;;iCAEQ,EACR;;;6BAEI,EACJ;;;iCAEQ,EACR;;;8BAEK,EACL;;;8BAEK,EACL;;;oCAEW,EACX;;;8BAEK,EACL;;;oCAEW,EACX;;;8BAEK,EACL;;;oCAEW,EACX;;;8BAEK,EACL;;;oCAEW,EACX;;;oCAEW,EACX;;;oCAEW,EACX;;;oCAEW,EACX;;;oCAEW,EACX;;;6BAEI,EACJ;;;6BAEI,EACJ;;;6BAEI,EACJ;;;6BAEI,EACJ;;;6BAEI,EACJ;;;8BAEK,EACL;;;8BAEK,EACL;;;6BAEI,EACJ;;;iCAEQ,EACR;;;gCAEO,EACP;;;iCAEQ,EACR;;;iCAEQ,EACR;;;iCAEQ,EACR;;;iCAEQ,EACR;;;iCAEQ,EACR;;;uCAEc,EACd;;;uCAEc,EACd;;;uCAEc,EACd;;;uCAEc,EACd;;;gCAEO,EACP;;;gCAEO,EACP;;;gCAEO,EACP;;;gCAEO,EACP;;;gCAEO,EACP;;;iCAEQ,EACR;;;iCAEQ,EACR;;;gCAEO,EACP;;;oCAEW,EACX;;;mCAEU,EACV;;;oCAEW,EACX;;;8BAEK,EACL;;;8BAEK,EACL;;;4BAEG,EACH;;;4BAEG,EACH;;;WAlSC,OAAO;;;AAqSb,OAAO,CAAC,MAAM,GAAG,YAAW,EAC3B,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","file":"doc/afArray.js","sourcesContent":["\"use strict\";\r\n\r\nclass AFArray {\r\n constructor() {\r\n }\r\n\r\n free() {\r\n }\r\n\r\n elements() {\r\n }\r\n\r\n host() {\r\n }\r\n\r\n copyToHost() {\r\n }\r\n\r\n scalar() {\r\n }\r\n\r\n value() {\r\n }\r\n\r\n write() {\r\n }\r\n\r\n type() {\r\n }\r\n\r\n dims() {\r\n }\r\n\r\n numdims() {\r\n }\r\n\r\n numDims() {\r\n }\r\n\r\n bytes() {\r\n }\r\n\r\n copy() {\r\n }\r\n\r\n isempty() {\r\n }\r\n\r\n isEmpty() {\r\n }\r\n\r\n isscalar() {\r\n }\r\n\r\n isScalar() {\r\n }\r\n\r\n isvector() {\r\n }\r\n\r\n isVector() {\r\n }\r\n\r\n isrow() {\r\n }\r\n\r\n isRow() {\r\n }\r\n\r\n iscolumn() {\r\n }\r\n\r\n isColumn() {\r\n }\r\n\r\n iscomplex() {\r\n }\r\n\r\n isComplex() {\r\n }\r\n\r\n isreal() {\r\n }\r\n\r\n isReal() {\r\n }\r\n\r\n isdouble() {\r\n }\r\n\r\n isDouble() {\r\n }\r\n\r\n issingle() {\r\n }\r\n\r\n isSingle() {\r\n }\r\n\r\n isrealfloating() {\r\n }\r\n\r\n isRealFloating() {\r\n }\r\n\r\n isfloating() {\r\n }\r\n\r\n isFloating() {\r\n }\r\n\r\n isinteger() {\r\n }\r\n\r\n isInteger() {\r\n }\r\n\r\n isbool() {\r\n }\r\n\r\n isBool() {\r\n }\r\n\r\n afEval() {\r\n }\r\n\r\n at() {\r\n }\r\n\r\n row() {\r\n }\r\n\r\n col() {\r\n }\r\n\r\n slice() {\r\n }\r\n\r\n rows() {\r\n }\r\n\r\n cols() {\r\n }\r\n\r\n slices() {\r\n }\r\n\r\n as() {\r\n }\r\n\r\n assign() {\r\n }\r\n\r\n set() {\r\n }\r\n\r\n add() {\r\n }\r\n\r\n addAssign() {\r\n }\r\n\r\n sub() {\r\n }\r\n\r\n subAssign() {\r\n }\r\n\r\n mul() {\r\n }\r\n\r\n mulAssign() {\r\n }\r\n\r\n div() {\r\n }\r\n\r\n divAssign() {\r\n }\r\n\r\n bitshiftl() {\r\n }\r\n\r\n bitShiftL() {\r\n }\r\n\r\n bitshiftr() {\r\n }\r\n\r\n bitShiftR() {\r\n }\r\n\r\n lt() {\r\n }\r\n\r\n gt() {\r\n }\r\n\r\n le() {\r\n }\r\n\r\n ge() {\r\n }\r\n\r\n eq() {\r\n }\r\n\r\n neq() {\r\n }\r\n\r\n and() {\r\n }\r\n\r\n or() {\r\n }\r\n\r\n bitAnd() {\r\n }\r\n\r\n bitOr() {\r\n }\r\n\r\n bitXor() {\r\n }\r\n\r\n rhsAdd() {\r\n }\r\n\r\n rhsSub() {\r\n }\r\n\r\n rhsMul() {\r\n }\r\n\r\n rhsDiv() {\r\n }\r\n\r\n rhsBitshiftl() {\r\n }\r\n\r\n rhsBitShiftL() {\r\n }\r\n\r\n rhsBitshiftr() {\r\n }\r\n\r\n rhsBitShiftR() {\r\n }\r\n\r\n rhsLt() {\r\n }\r\n\r\n rhsGt() {\r\n }\r\n\r\n rhsLe() {\r\n }\r\n\r\n rhsGe() {\r\n }\r\n\r\n rhsEq() {\r\n }\r\n\r\n rhsNeq() {\r\n }\r\n\r\n rhsAnd() {\r\n }\r\n\r\n rhsOr() {\r\n }\r\n\r\n rhsBitAnd() {\r\n }\r\n\r\n rhsBitOr() {\r\n }\r\n\r\n rhsBitXor() {\r\n }\r\n\r\n neg() {\r\n }\r\n\r\n not() {\r\n }\r\n\r\n T() {\r\n }\r\n\r\n H() {\r\n }\r\n}\r\n\r\nAFArray.create = function() {\r\n};\r\n\r\nmodule.exports = AFArray;\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es5/ext.js b/lib/es5/ext.js index df6bf98..c8d5964 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -38,14 +38,6 @@ var async = Bluebird.coroutine; var retryCount = 5; var gcTime = 1000; -function isOutOfMemoryError(e) { - return e.message.indexOf("out of memory") > 0; -} - -function invokeGC(af) { - af.gc(gcTime); -} - function synchronify(af, f) { return function () { var err; @@ -58,24 +50,10 @@ function synchronify(af, f) { }; var args = _.toArray(arguments).concat(cb); - - for (var i = 0; i < retryCount; i++) { - done = false; - f.apply(this, args); - while (!done) { - af._doEvents(); - }if (err) { - if (!isOutOfMemoryError(err)) { - throw err; - } else { - invokeGC(af); - } - } - } - - if (err) throw err; - - return res; + f.apply(this, args); + while (!done) { + af._doEvents(); + }return res; }; } @@ -110,105 +88,15 @@ function installAsyncAndSync(af, obj, name) { } if (name !== "AFArray") { - (function () { - var f = obj[name]; - if (_.isFunction(f)) { - if (!_.isFunction(obj[name + "Async"])) { - obj[name + "Async"] = async(regeneratorRuntime.mark(function _callee() { - var self, - args, - call, - err, - i, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - self = this; - args = _.toArray(_args); - - call = function call() { - return new Bluebird(function (resolve, reject) { - var cb = function cb(e, r) { - if (e) { - reject(e); - } else { - resolve(r); - } - }; - args.push(cb); - f.apply(self, args); - }); - }; - - err = null; - i = 0; - - case 5: - if (!(i < retryCount)) { - _context.next = 21; - break; - } - - _context.prev = 6; - _context.next = 9; - return call(); - - case 9: - return _context.abrupt("return", _context.sent); - - case 12: - _context.prev = 12; - _context.t0 = _context["catch"](6); - - if (isOutOfMemoryError(_context.t0)) { - _context.next = 16; - break; - } - - throw _context.t0; - - case 16: - invokeGC(af); - err = _context.t0; - - case 18: - i++; - _context.next = 5; - break; - - case 21: - throw err; - - case 22: - case "end": - return _context.stop(); - } - } - }, _callee, this, [[6, 12]]); - })); - } - if (!_.isFunction(obj[name + "Sync"])) { - obj[name + "Sync"] = synchronify(af, f); - } - obj[name] = function () { - var err = null; - for (var _i = 0; _i < retryCount; _i++) { - try { - return f.apply(this, arguments); - } catch (e) { - if (!isOutOfMemoryError(e)) { - throw e; - } - invokeGC(af); - err = e; - } - } - throw err; - }; + var f = obj[name]; + if (_.isFunction(f)) { + if (!_.isFunction(obj[name + "Async"])) { + obj[name + "Async"] = Bluebird.promisify(f); + } + if (!_.isFunction(obj[name + "Sync"])) { + obj[name + "Sync"] = synchronify(af, f); } - })(); + } } } @@ -248,10 +136,10 @@ function ext(af) { try { var count = this.getDeviceCount(); var result = []; - for (var _i2 = 0; _i2 < count; _i2++) { - this.setDevice(_i2); + for (var i = 0; i < count; i++) { + this.setDevice(i); var info = this.deviceInfo(); - info.id = _i2; + info.id = i; result.push(info); } return result; diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map index 62ec29a..1e80d20 100644 --- a/lib/es5/ext.js.map +++ b/lib/es5/ext.js.map @@ -1 +1 @@ -{"version":3,"sources":["ext.js"],"names":[],"mappings":"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","file":"ext.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet _ = require(\"lodash\");\r\nlet async = Bluebird.coroutine;\r\n\r\nconst retryCount = 5;\r\nconst gcTime = 1000;\r\n\r\nfunction isOutOfMemoryError(e) {\r\n return e.message.indexOf(\"out of memory\") > 0;\r\n}\r\n\r\nfunction invokeGC(af) {\r\n af.gc(gcTime);\r\n}\r\n\r\nfunction synchronify(af, f) {\r\n return function () {\r\n var err;\r\n var res;\r\n var done;\r\n let cb = function (e, r) {\r\n err = e;\r\n res = r;\r\n done = true;\r\n };\r\n\r\n let args = _.toArray(arguments).concat(cb);\r\n\r\n for (let i = 0; i < retryCount; i++) {\r\n done = false;\r\n f.apply(this, args);\r\n while (!done) af._doEvents();\r\n\r\n if (err) {\r\n if (!isOutOfMemoryError(err)) {\r\n throw err;\r\n }\r\n else {\r\n invokeGC(af);\r\n }\r\n }\r\n }\r\n\r\n if (err) throw err;\r\n\r\n return res;\r\n };\r\n}\r\n\r\nfunction installAsyncAndSync(af, obj, name) {\r\n if (_.isUndefined(name)) {\r\n for (let key of _.keys(obj)) {\r\n installAsyncAndSync(af, obj, key);\r\n }\r\n return;\r\n }\r\n\r\n if (name !== \"AFArray\") {\r\n let f = obj[name];\r\n if (_.isFunction(f)) {\r\n if (!_.isFunction(obj[name + \"Async\"])) {\r\n obj[name + \"Async\"] = async(function* () {\r\n let self = this;\r\n let args = _.toArray(arguments);\r\n let call = function () {\r\n return new Bluebird(function (resolve, reject) {\r\n let cb = function (e, r) {\r\n if (e) {\r\n reject(e);\r\n }\r\n else {\r\n resolve(r);\r\n }\r\n };\r\n args.push(cb);\r\n f.apply(self, args);\r\n });\r\n };\r\n\r\n let err = null;\r\n for (let i = 0; i < retryCount; i++) {\r\n try {\r\n return yield call();\r\n }\r\n catch (e) {\r\n if (!isOutOfMemoryError(e)) {\r\n throw e;\r\n }\r\n invokeGC(af);\r\n err = e;\r\n }\r\n }\r\n throw err;\r\n });\r\n }\r\n if (!_.isFunction(obj[name + \"Sync\"])) {\r\n obj[name + \"Sync\"] = synchronify(af, f);\r\n }\r\n obj[name] = function () {\r\n let err = null;\r\n for (let i = 0; i < retryCount; i++) {\r\n try {\r\n return f.apply(this, arguments);\r\n }\r\n catch (e) {\r\n if (!isOutOfMemoryError(e)) {\r\n throw e;\r\n }\r\n invokeGC(af);\r\n err = e;\r\n }\r\n }\r\n throw err;\r\n };\r\n }\r\n }\r\n}\r\n\r\nfunction ext(af) {\r\n installAsyncAndSync(af, af);\r\n installAsyncAndSync(af, af.AFArray);\r\n installAsyncAndSync(af, af.AFArray.prototype);\r\n\r\n let scope = af.AFArray.scope = require(\"./scope\");\r\n\r\n _.extend(af, {\r\n end: -1,\r\n span: null,\r\n all: -1,\r\n dtype: require(\"./dtype\"),\r\n dType: require(\"./dtype\"),\r\n source: require(\"./source\"),\r\n matchType: require(\"./matchType\"),\r\n cSpace: require(\"./cSpace\"),\r\n CSpace: require(\"./cSpace\"),\r\n connectivity: require(\"./connectivity\"),\r\n borderType: require(\"./borderType\"),\r\n interpType: require(\"./interpType\"),\r\n matProp: require(\"./matProp\"),\r\n normType: require(\"./normType\"),\r\n convMode: require(\"./convMode\"),\r\n convDomain: require(\"./convDomain\"),\r\n Dim4: require(\"./dim4\"),\r\n Seq: require(\"./seq\"),\r\n Complex: require(\"./complex\"),\r\n Row: require(\"./row\"),\r\n Col: require(\"./col\"),\r\n Rows: require(\"./rows\"),\r\n Cols: require(\"./cols\"),\r\n getDevices: function () {\r\n let current = this.getDevice();\r\n try {\r\n let count = this.getDeviceCount();\r\n let result = [];\r\n for (let i = 0; i < count; i++) {\r\n this.setDevice(i);\r\n let info = this.deviceInfo();\r\n info.id = i;\r\n result.push(info);\r\n }\r\n return result;\r\n }\r\n finally {\r\n this.setDevice(current);\r\n }\r\n },\r\n gfor: require(\"./makeGfor\")(af),\r\n scope: scope\r\n });\r\n}\r\n\r\nmodule.exports = ext;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ext.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAE/B,IAAM,UAAU,GAAG,CAAC,CAAC;AACrB,IAAM,MAAM,GAAG,IAAI,CAAC;;AAEpB,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE;AACxB,WAAO,YAAY;AACf,YAAI,GAAG,CAAC;AACR,YAAI,GAAG,CAAC;AACR,YAAI,IAAI,CAAC;AACT,YAAI,EAAE,GAAG,SAAL,EAAE,CAAa,CAAC,EAAE,CAAC,EAAE;AACrB,eAAG,GAAG,CAAC,CAAC;AACR,eAAG,GAAG,CAAC,CAAC;AACR,gBAAI,GAAG,IAAI,CAAC;SACf,CAAC;;AAEF,YAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3C,SAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpB,eAAO,CAAC,IAAI;AAAE,cAAE,CAAC,SAAS,EAAE,CAAC;SAAA,AAE7B,OAAO,GAAG,CAAC;KACd,CAAC;CACL;;AAED,SAAS,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AACxC,QAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;;;;;;AACrB,iCAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,8HAAE;oBAApB,GAAG;;AACR,mCAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrC;;;;;;;;;;;;;;;;AACD,eAAO;KACV;;AAED,QAAI,IAAI,KAAK,SAAS,EAAE;AACpB,YAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,YAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjB,gBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE;AACpC,mBAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/C;AACD,gBAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE;AACnC,mBAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAC3C;SACJ;KACJ;CACJ;;AAED,SAAS,GAAG,CAAC,EAAE,EAAE;AACb,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;AAE9C,QAAI,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,GAAI,OAAO,CAAC,SAAS,CAAC,CAAC;;AAEnD,KAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACT,WAAG,EAAE,CAAC,CAAC;AACP,YAAI,EAAE,IAAI;AACV,WAAG,EAAE,CAAC,CAAC;AACP,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,aAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,iBAAS,EAAE,OAAO,CAAC,aAAa,CAAC;AACjC,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,cAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,oBAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACvC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,gBAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;AAC/B,kBAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACnC,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,eAAO,EAAE,OAAO,CAAC,WAAW,CAAC;AAC7B,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,WAAG,EAAE,OAAO,CAAC,OAAO,CAAC;AACrB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,YAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,kBAAU,EAAE,sBAAY;AACpB,gBAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,gBAAI;AACA,oBAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,oBAAI,MAAM,GAAG,EAAE,CAAC;AAChB,qBAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,wBAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClB,wBAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,wBAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACZ,0BAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrB;AACD,uBAAO,MAAM,CAAC;aACjB,SACO;AACJ,oBAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAC3B;SACJ;AACD,YAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;AAC/B,aAAK,EAAE,KAAK;KACf,CAAC,CAAC;CACN;;AAED,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC","file":"ext.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet Bluebird = require(\"bluebird\");\r\nlet _ = require(\"lodash\");\r\nlet async = Bluebird.coroutine;\r\n\r\nconst retryCount = 5;\r\nconst gcTime = 1000;\r\n\r\nfunction synchronify(af, f) {\r\n return function () {\r\n var err;\r\n var res;\r\n var done;\r\n let cb = function (e, r) {\r\n err = e;\r\n res = r;\r\n done = true;\r\n };\r\n\r\n let args = _.toArray(arguments).concat(cb);\r\n f.apply(this, args);\r\n while (!done) af._doEvents();\r\n\r\n return res;\r\n };\r\n}\r\n\r\nfunction installAsyncAndSync(af, obj, name) {\r\n if (_.isUndefined(name)) {\r\n for (let key of _.keys(obj)) {\r\n installAsyncAndSync(af, obj, key);\r\n }\r\n return;\r\n }\r\n\r\n if (name !== \"AFArray\") {\r\n let f = obj[name];\r\n if (_.isFunction(f)) {\r\n if (!_.isFunction(obj[name + \"Async\"])) {\r\n obj[name + \"Async\"] = Bluebird.promisify(f);\r\n }\r\n if (!_.isFunction(obj[name + \"Sync\"])) {\r\n obj[name + \"Sync\"] = synchronify(af, f);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ext(af) {\r\n installAsyncAndSync(af, af);\r\n installAsyncAndSync(af, af.AFArray);\r\n installAsyncAndSync(af, af.AFArray.prototype);\r\n\r\n let scope = af.AFArray.scope = require(\"./scope\");\r\n\r\n _.extend(af, {\r\n end: -1,\r\n span: null,\r\n all: -1,\r\n dtype: require(\"./dtype\"),\r\n dType: require(\"./dtype\"),\r\n source: require(\"./source\"),\r\n matchType: require(\"./matchType\"),\r\n cSpace: require(\"./cSpace\"),\r\n CSpace: require(\"./cSpace\"),\r\n connectivity: require(\"./connectivity\"),\r\n borderType: require(\"./borderType\"),\r\n interpType: require(\"./interpType\"),\r\n matProp: require(\"./matProp\"),\r\n normType: require(\"./normType\"),\r\n convMode: require(\"./convMode\"),\r\n convDomain: require(\"./convDomain\"),\r\n Dim4: require(\"./dim4\"),\r\n Seq: require(\"./seq\"),\r\n Complex: require(\"./complex\"),\r\n Row: require(\"./row\"),\r\n Col: require(\"./col\"),\r\n Rows: require(\"./rows\"),\r\n Cols: require(\"./cols\"),\r\n getDevices: function () {\r\n let current = this.getDevice();\r\n try {\r\n let count = this.getDeviceCount();\r\n let result = [];\r\n for (let i = 0; i < count; i++) {\r\n this.setDevice(i);\r\n let info = this.deviceInfo();\r\n info.id = i;\r\n result.push(info);\r\n }\r\n return result;\r\n }\r\n finally {\r\n this.setDevice(current);\r\n }\r\n },\r\n gfor: require(\"./makeGfor\")(af),\r\n scope: scope\r\n });\r\n}\r\n\r\nmodule.exports = ext;"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index f2c5916..f62b511 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -282,47 +282,23 @@ describe("AFArray class and methods", function () { } // Let's do some indexing: - _context.next = 26; - return array2.valueAsync(); - - case 26: - v = _context.sent; + v = array2.value(); assert(v === 0.0); - _context.next = 30; - return array2.at(1).valueAsync(); - - case 30: - v = _context.sent; - + v = array2.at(1).value(); assert(v === 1.0); - _context.next = 34; - return array2.at(2).scalarAsync(); - - case 34: - v = _context.sent; - + v = array2.at(2).scalar(); assert(v === 4.0); - _context.next = 38; - return array2.at("end").scalarAsync(); - - case 38: - v = _context.sent; - + v = array2.at("end").scalar(); assert(v === 9.0 * 9.0); - _context.next = 42; - return array2.at(af.end - 1).scalarAsync(); - - case 42: - v = _context.sent; - + v = array2.at(af.end - 1).scalar(); assert(v === 8.0 * 8.0); - case 44: + case 34: case "end": return _context.stop(); } @@ -370,19 +346,19 @@ describe("AFArray class and methods", function () { } // Let's do some indexing: - var v = array2.valueSync(); + var v = array2.value(); assert(v === 0.0); - v = array.at(1).valueSync(); + v = array.at(1).value(); assert(v === 1.0); - v = array2.at(2).scalarSync(); + v = array2.at(2).scalar(); assert(v === 4.0); - v = array2.at("end").scalarSync(); + v = array2.at("end").scalar(); assert(v === 9.0 * 9.0); - v = array2.at(af.end - 1).scalarSync(); + v = array2.at(af.end - 1).scalar(); assert(v === 8.0 * 8.0); }); diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index 0076ee5..82ab2b9 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,QAAQ,CAAC,2BAA2B,EAAE,YAAW;AAC7C,YAAQ,CAAC,GAAG,CAAC,UAAS,EAAE,EAAE;AACtB,YAAI,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;AAEzB,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;SACjC,CAAC,CAAC;;AAEH,UAAE,CAAC,qBAAqB,EAAE,YAAW;AACjC,gBAAI,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAC1B,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5C,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrC,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3C,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1C,kBAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;;AAEH,UAAE,CAAC,sCAAsC,EAAE,YAAW;AAClD,gBAAI;AACA,oBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,sBAAM,CAAC,KAAK,CAAC,CAAC;aACjB,CACD,OAAO,CAAC,EAAE,EACT;SACJ,CAAC,CAAC;;AAEH,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACjC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,KAAK,CAAC,CAAC;AACzC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,CAAC;AACrC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,UAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9C,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACrC,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAClC,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,UAAE,CAAC,qCAAqC,EAAE,YAAW;AACjD,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;;AAEH,iBAAS,OAAO,CAAC,KAAK,EAAE;AACpB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,kBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,gBAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,kBAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5C,kBAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACzB,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,kBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC;AACnC,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;AAClC,kBAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;AACxC,kBAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC;AACpC,kBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC;SACpC;;AAED,UAAE,CAAC,oCAAoC,EAAE,YAAW;AAChD,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtD,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,8CAA8C,EAAE,YAAW;AAC1D,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpE,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,oDAAoD,EAAE,YAAW;AAChE,gBAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,mBAAO,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CAAC;;AAEH,UAAE,CAAC,sFAAsF,EAAE,UAAS,IAAI,EAAE;AACtG,gBAAI,CAAC,GAAG,KAAK,yBAAC;oBACN,GAAG,EACD,KAAK,EACP,IAAI,EACC,EAAC,EAON,KAAK,EAIL,KAAK,EAEA,GAAC,EAcF,EAAE,EACF,EAAE,EARN,MAAM,EAGN,KAAK,EAGA,GAAC,EAQN,CAAC;;;;;;AArCD,mCAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG;AACjB,qCAAK,GAAG,EAAE;AACZ,oCAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;;AACvC,qCAAS,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,KAAK,EAAE,EAAC,EAAE,EAAE;AAC5B,uCAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC,GAAG,GAAG,CAAC,IAAI,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;iCACtC;;AAED,sCAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,sCAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;;;uCAExB,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;;;AAA5D,qCAAK;;AACT,sCAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,sCAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAElC,qCAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;;uCAClC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;;;AAC5B,qCAAS,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AACxB,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAChC,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;AACrC,0CAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClB,0CAAM,CAAC,EAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;iCACxB;;AAEG,sCAAM,GAAG,KAAK,CAAC,IAAI,EAAE;;AACzB,sCAAM,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC;AAClC,sCAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;;uCACvB,MAAM,CAAC,SAAS,EAAE;;;AAAhC,qCAAK;;AACT,sCAAM,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC;AAChC,sCAAM,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC1C,qCAAS,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AACxB,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAChC,sCAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;AACrC,0CAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClB,0CAAM,CAAC,EAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;iCACxB;;;AAAA;uCAGa,MAAM,CAAC,UAAU,EAAE;;;AAA7B,iCAAC;;AACL,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;;;AAAnC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;;;AAApC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;;uCAER,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;;;AAAxC,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;;uCAEd,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;;;AAA7C,iCAAC;;AACD,sCAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;;;;;;;aAC3B,EAAC,CAAC;AACH,aAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrB,CAAC,CAAC;;AAEH,UAAE,CAAC,kFAAkF,EAAE,YAAW;AAC9F,gBAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,gBAAM,KAAK,GAAG,EAAE,CAAC;AACjB,gBAAI,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACxC,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,mBAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAC,CAAC,CAAC;aACtC;;AAED,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,kBAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEzC,gBAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1D,kBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,kBAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEtC,gBAAI,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACzC,iBAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtB,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,sBAAM,CAAC,GAAE,KAAK,GAAE,CAAC,CAAC;AAClB,sBAAM,CAAC,GAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;aACxB;;AAED,gBAAI,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1B,kBAAM,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC;AAClC,kBAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACzC,gBAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9B,kBAAM,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC;AAChC,kBAAM,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC1C,iBAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,EAAE,GAAC,EAAE,EAAE;AAC5B,oBAAI,GAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAI,IAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,sBAAM,CAAC,GAAE,KAAK,IAAE,CAAC,CAAC;AAClB,sBAAM,CAAC,GAAE,KAAK,GAAC,GAAG,GAAC,CAAC,CAAC;aACxB;;;AAAA,AAGD,gBAAI,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAC3B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAC9B,kBAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;;AAElB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;AAClC,kBAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;;AAExB,aAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACvC,kBAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;SAC3B,CAAC,CAAC;;AAEH,UAAE,CAAC,4DAA4D,EAAE,UAAU,IAAI,EAAE;AAC7E,iBAAK,yBAAC;oBACE,GAAG,EAKH,GAAG,EACH,IAAI,EAEJ,IAAI;;;;;AARJ,mCAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;;AAC1C,mCAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEV,mCAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,oCAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;uCAEhC,IAAI,CAAC,SAAS,EAAE;;;AAA7B,oCAAI;;AAER,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE9C,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,mCAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;;uCAED,IAAI,CAAC,SAAS,EAAE;;;AAA7B,oCAAI;;AAEJ,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,sCAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;;;;;;;aACjD,EAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACtB,CAAC,CAAC;;AAEH,gBAAQ,CAAC,MAAM,EAAE,YAAW;AACxB,oBAAQ,CAAC,OAAO,EAAE,YAAW;AACzB,kBAAE,CAAC,+BAA+B,EAAE,YAAY;AAC5C,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClC,CAAC,CAAC;;AAEH,kBAAE,CAAC,+BAA+B,EAAE,YAAY;AAC5C,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,0BAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC3C,CAAC,CAAC;;AAEH,kBAAE,CAAC,mCAAmC,EAAE,YAAW;AAC/C,wBAAI,GAAG,YAAA;wBAAE,GAAG,YAAA,CAAC;AACb,wBAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,YAAW;AACxB,8BAAM,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,2BAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,2BAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,2BAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAE/B,4BAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAEjB,+BAAO,CAAC,CAAC;qBACZ,CAAC,CAAC;;AAEH,0BAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEhB,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI;AACA,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,8BAAM,CAAC,KAAK,CAAC,CAAC;qBACjB,CACD,OAAO,CAAC,EAAE;AACN,4BAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7B,kCAAM,CAAC,CAAC;yBACX;qBACJ;iBACJ,CAAC,CAAC;;AAEH,kBAAE,CAAC,kCAAkC,EAAE,YAAW;AAC9C,wBAAI,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,uBAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAEnC,sBAAE,CAAC,KAAK,CAAC,YAAW;AAChB,8BAAM,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;;AAE1B,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;;AAAC,AAGd,4BAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;qBACtB,CAAC,CAAC;;AAEH,uBAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEd,wBAAI;AACA,2BAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,8BAAM,CAAC,KAAK,CAAC,CAAC;qBACjB,CACD,OAAO,CAAC,EAAE;AACN,4BAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7B,kCAAM,CAAC,CAAC;yBACX;qBACJ;iBACJ,CAAC,CAAC;aACN,CAAC,CAAC;SACN,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"afArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"AFArray class and methods\", function() {\r\n testExec.run(function(af) {\r\n let AFArray = af.AFArray;\r\n\r\n it(\"should export AFArray constructor\", function() {\r\n assert(_.isFunction(AFArray));\r\n });\r\n\r\n it(\"should create empty\", function() {\r\n let array = new AFArray();\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 0);\r\n assert(array.elements() === 0);\r\n assert(array.isempty());\r\n assert(_.isFunction(array.host));\r\n assert(_.isFunction(array.hostAsync));\r\n assert(_.isUndefined(array.hostAsyncAsync));\r\n assert(_.isFunction(array.hostSync));\r\n assert(_.isUndefined(array.hostSyncAsync));\r\n assert(_.isUndefined(array.hostSyncSync));\r\n assert(_.isUndefined(array.hostAsyncSync));\r\n });\r\n\r\n it(\"should fail with one number argument\", function() {\r\n try {\r\n let array = new AFArray(1);\r\n assert(false);\r\n }\r\n catch (e) {\r\n }\r\n });\r\n\r\n it(\"should create new one dimensional\", function() {\r\n let array = new AFArray(10, af.dType.s32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 4);\r\n assert(array.elements() === 10);\r\n assert(array.type() === af.dType.s32);\r\n assert(array.numdims() === 1);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 1);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10);\r\n assert(dims.ndims === 1);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 1);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === true);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === true);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === false);\r\n assert(array.isrealfloating() === false);\r\n assert(array.isfloating() === false);\r\n assert(array.isinteger() === true);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new two dimensional\", function() {\r\n let array = new AFArray(10, 20, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 4);\r\n assert(array.elements() === 10 * 20);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 2);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20);\r\n assert(dims.ndims === 2);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new three dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 4);\r\n assert(array.elements() === 10 * 20 * 30);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 3);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30);\r\n assert(dims.ndims === 3);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n function verify4(array) {\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\r\n assert(array.elements() === 10 * 20 * 30 * 40);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 4);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 40);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30 * 40);\r\n assert(dims.ndims === 4);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 40);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n }\r\n\r\n it(\"should create new four dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4\", function() {\r\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4 array\", function() {\r\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\r\n let f = async(function*() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createAsync));\r\n\r\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n yield array.hostAsync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = yield array2.hostAsync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = yield array2.valueAsync();\r\n assert(v === 0.0);\r\n\r\n v = yield array2.at(1).valueAsync();\r\n assert(v === 1.0);\r\n\r\n v = yield array2.at(2).scalarAsync();\r\n assert(v === 4.0);\r\n\r\n v = yield array2.at(\"end\").scalarAsync();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = yield array2.at(af.end - 1).scalarAsync();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n f().nodeify(done);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createSync));\r\n\r\n let array = AFArray.createSync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n array.hostSync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = array2.hostSync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.valueSync();\r\n assert(v === 0.0);\r\n\r\n v = array.at(1).valueSync();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalarSync();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalarSync();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalarSync();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n \r\n it(\"should be created of a part of another with new dimensions\", function (done) {\r\n async(function* () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\r\n\r\n let buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n\r\n arr.set(3, 2);\r\n arr.set(4, 3);\r\n\r\n buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n })().nodeify(done);\r\n });\r\n\r\n describe(\"RAII\", function() {\r\n describe(\"scope\", function() {\r\n it(\"should exported as a function\", function () {\r\n assert(_.isFunction(af.scope));\r\n });\r\n\r\n it(\"should support RAII interface\", function () {\r\n assert(_.isFunction(af.scope.begin));\r\n assert(_.isFunction(af.scope.end));\r\n assert(_.isFunction(af.scope.result));\r\n assert(_.isFunction(af.scope.register));\r\n });\r\n\r\n it(\"should destroy temporaries (sync)\", function() {\r\n let arr, sub;\r\n let x = af.scope(function() {\r\n assert(this === af.scope);\r\n arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n sub = arr.at(new af.Seq(3, 6));\r\n\r\n this.result(arr);\r\n\r\n return 1;\r\n });\r\n\r\n assert(x === 1);\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n\r\n it(\"should destroy registered arrays\", function() {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n\r\n af.scope(function() {\r\n assert(this === af.scope);\r\n\r\n sub.set(0, 0);\r\n\r\n // Part of the scope, hence will be destroyed.\r\n this.register(sub);\r\n });\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"AFArray class and methods\", function() {\r\n testExec.run(function(af) {\r\n let AFArray = af.AFArray;\r\n\r\n it(\"should export AFArray constructor\", function() {\r\n assert(_.isFunction(AFArray));\r\n });\r\n\r\n it(\"should create empty\", function() {\r\n let array = new AFArray();\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 0);\r\n assert(array.elements() === 0);\r\n assert(array.isempty());\r\n assert(_.isFunction(array.host));\r\n assert(_.isFunction(array.hostAsync));\r\n assert(_.isUndefined(array.hostAsyncAsync));\r\n assert(_.isFunction(array.hostSync));\r\n assert(_.isUndefined(array.hostSyncAsync));\r\n assert(_.isUndefined(array.hostSyncSync));\r\n assert(_.isUndefined(array.hostAsyncSync));\r\n });\r\n\r\n it(\"should fail with one number argument\", function() {\r\n try {\r\n let array = new AFArray(1);\r\n assert(false);\r\n }\r\n catch (e) {\r\n }\r\n });\r\n\r\n it(\"should create new one dimensional\", function() {\r\n let array = new AFArray(10, af.dType.s32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 4);\r\n assert(array.elements() === 10);\r\n assert(array.type() === af.dType.s32);\r\n assert(array.numdims() === 1);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 1);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10);\r\n assert(dims.ndims === 1);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 1);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === true);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === true);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === false);\r\n assert(array.isrealfloating() === false);\r\n assert(array.isfloating() === false);\r\n assert(array.isinteger() === true);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new two dimensional\", function() {\r\n let array = new AFArray(10, 20, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 4);\r\n assert(array.elements() === 10 * 20);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 2);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20);\r\n assert(dims.ndims === 2);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new three dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 4);\r\n assert(array.elements() === 10 * 20 * 30);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 3);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30);\r\n assert(dims.ndims === 3);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n function verify4(array) {\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\r\n assert(array.elements() === 10 * 20 * 30 * 40);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 4);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 40);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30 * 40);\r\n assert(dims.ndims === 4);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 40);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n }\r\n\r\n it(\"should create new four dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4\", function() {\r\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4 array\", function() {\r\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\r\n let f = async(function*() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createAsync));\r\n\r\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n yield array.hostAsync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = yield array2.hostAsync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array2.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n f().nodeify(done);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createSync));\r\n\r\n let array = AFArray.createSync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n array.hostSync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = array2.hostSync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n \r\n it(\"should be created of a part of another with new dimensions\", function (done) {\r\n async(function* () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\r\n\r\n let buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n\r\n arr.set(3, 2);\r\n arr.set(4, 3);\r\n\r\n buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n })().nodeify(done);\r\n });\r\n\r\n describe(\"RAII\", function() {\r\n describe(\"scope\", function() {\r\n it(\"should exported as a function\", function () {\r\n assert(_.isFunction(af.scope));\r\n });\r\n\r\n it(\"should support RAII interface\", function () {\r\n assert(_.isFunction(af.scope.begin));\r\n assert(_.isFunction(af.scope.end));\r\n assert(_.isFunction(af.scope.result));\r\n assert(_.isFunction(af.scope.register));\r\n });\r\n\r\n it(\"should destroy temporaries (sync)\", function() {\r\n let arr, sub;\r\n let x = af.scope(function() {\r\n assert(this === af.scope);\r\n arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n sub = arr.at(new af.Seq(3, 6));\r\n\r\n this.result(arr);\r\n\r\n return 1;\r\n });\r\n\r\n assert(x === 1);\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n\r\n it(\"should destroy registered arrays\", function() {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n\r\n af.scope(function() {\r\n assert(this === af.scope);\r\n\r\n sub.set(0, 0);\r\n\r\n // Part of the scope, hence will be destroyed.\r\n this.register(sub);\r\n });\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/tests/es5/gfor.js b/tests/es5/gfor.js index 4c823c9..555aeba 100644 --- a/tests/es5/gfor.js +++ b/tests/es5/gfor.js @@ -42,52 +42,23 @@ var float = ref.types.float; describe("gfor", function () { testExec.run(function (af) { - it("should work", function (done) { - async(regeneratorRuntime.mark(function _callee() { - var count, arr, val, idx, sum; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - count = 20; - arr = af.constant(0.0, count, 10, af.dType.f32); - val = af.range(new af.Dim4(1, 10), 1, af.dType.f32); - - af.gfor(count, function (seq) { - assert(seq instanceof af.Seq); - assert(seq.begin === 0); - assert(seq.end === 19); - assert(seq.isGFor); - arr.assign(seq, af.span, val); - }); - idx = 0; - - case 5: - if (!(idx < count)) { - _context.next = 13; - break; - } - - _context.next = 8; - return af.sumAsync(arr.at(idx, af.span)); - - case 8: - sum = _context.sent; - - assert(sum === 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); - - case 10: - idx++; - _context.next = 5; - break; - - case 13: - case "end": - return _context.stop(); - } - } - }, _callee, this); - }))().asCallback(done); + it("should work", function () { + af.scope(function () { + var count = 20; + var arr = af.constant(0.0, count, 10, af.dType.f32); + var val = af.range(new af.Dim4(1, 10), 1, af.dType.f32); + af.gfor(count, function (seq) { + assert(seq instanceof af.Seq); + assert(seq.begin === 0); + assert(seq.end === 19); + assert(seq.isGFor); + arr.assign(seq, af.span, val); + }); + for (var idx = 0; idx < count; idx++) { + var sum = af.sum(arr.at(idx, af.span)); + assert(sum === 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); + } + }); }); }); }); diff --git a/tests/es5/gfor.js.map b/tests/es5/gfor.js.map index c2e4b14..8c994dc 100644 --- a/tests/es5/gfor.js.map +++ b/tests/es5/gfor.js.map @@ -1 +1 @@ -{"version":3,"sources":["gfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,QAAQ,CAAC,MAAM,EAAE,YAAY;AACzB,YAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;AACvB,UAAE,CAAC,aAAa,EAAE,UAAU,IAAI,EAAE;AAC9B,iBAAK,yBAAC;oBACI,KAAK,EACP,GAAG,EACH,GAAG,EAQE,GAAG,EACJ,GAAG;;;;;AAXL,qCAAK,GAAG,EAAE;AACZ,mCAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,mCAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;;AACvD,kCAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE;AAC1B,0CAAM,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,0CAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACxB,0CAAM,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACvB,0CAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnB,uCAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iCACjC,CAAC,CAAC;AACM,mCAAG,GAAG,CAAC;;;sCAAE,GAAG,GAAG,KAAK,CAAA;;;;;;uCACT,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;;;AAA7C,mCAAG;;AACP,sCAAM,CAAC,GAAG,KAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC,CAAC,CAAC;;;AAFzB,mCAAG,EAAE;;;;;;;;;;aAIvC,EAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"gfor.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"gfor\", function () {\r\n testExec.run(function (af) {\r\n it(\"should work\", function (done) {\r\n async(function*() {\r\n const count = 20;\r\n let arr = af.constant(0.0, count, 10, af.dType.f32);\r\n let val = af.range(new af.Dim4(1, 10), 1, af.dType.f32);\r\n af.gfor(count, function (seq) {\r\n assert(seq instanceof af.Seq);\r\n assert(seq.begin === 0);\r\n assert(seq.end === 19);\r\n assert(seq.isGFor);\r\n arr.assign(seq, af.span, val);\r\n });\r\n for (let idx = 0; idx < count; idx++) {\r\n let sum = yield af.sumAsync(arr.at(idx, af.span));\r\n assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9));\r\n }\r\n })().asCallback(done);\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["gfor.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY;;AAAC;AAEb,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,QAAQ,CAAC,MAAM,EAAE,YAAY;AACzB,YAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;AACvB,UAAE,CAAC,aAAa,EAAE,YAAY;AAC1B,cAAE,CAAC,KAAK,CAAC,YAAM;AACX,oBAAM,KAAK,GAAG,EAAE,CAAC;AACjB,oBAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,oBAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,kBAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE;AAC1B,0BAAM,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,0BAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACxB,0BAAM,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACvB,0BAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnB,uBAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACjC,CAAC,CAAC;AACH,qBAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;AAClC,wBAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,0BAAM,CAAC,GAAG,KAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC,CAAC,CAAC;iBACvD;aACJ,CAAC,CAAC;SACN,CAAC,CAAC;KACN,CAAC,CAAC;CACN,CAAC,CAAC","file":"gfor.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"gfor\", function () {\r\n testExec.run(function (af) {\r\n it(\"should work\", function () {\r\n af.scope(() => {\r\n const count = 20;\r\n let arr = af.constant(0.0, count, 10, af.dType.f32);\r\n let val = af.range(new af.Dim4(1, 10), 1, af.dType.f32);\r\n af.gfor(count, function (seq) {\r\n assert(seq instanceof af.Seq);\r\n assert(seq.begin === 0);\r\n assert(seq.end === 19);\r\n assert(seq.isGFor);\r\n arr.assign(seq, af.span, val);\r\n });\r\n for (let idx = 0; idx < count; idx++) {\r\n let sum = af.sum(arr.at(idx, af.span));\r\n assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9));\r\n }\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file From 9a5cfaf8ceceaaae84e0b4bd539e3420d8e161ea Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 17:27:27 +0100 Subject: [PATCH 40/45] 0.21.1 --- changelog.md | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index a37a57b..af352c3 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,6 @@ -# 0.21.0 (2015-12-30) +# 0.21.1 (2015-12-30) -- All calculation methods synchronus +- All calculation methods synchronous - T/H method added to AFArray # 0.20.0 (2015-12-28) diff --git a/package.json b/package.json index 6d1207f..67fc7de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.21.0", + "version": "0.21.1", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { From 9246baad8a31e68cc7cad38a959370731666e903 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 17:33:57 +0100 Subject: [PATCH 41/45] hotfix --- changelog.md | 2 +- package.json | 2 +- src/arraywrapper.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index af352c3..1b292ef 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,4 @@ -# 0.21.1 (2015-12-30) +# 0.21.2 (2015-12-30) - All calculation methods synchronous - T/H method added to AFArray diff --git a/package.json b/package.json index 67fc7de..3e900e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.21.1", + "version": "0.21.2", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index bd54d34..48a2396 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -183,7 +183,7 @@ NAN_MODULE_INIT(ArrayWrapper::Init) Nan::SetPrototypeTemplate(tmpl, Nan::New("not").ToLocalChecked(), Nan::New(Not), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("T").ToLocalChecked(), Nan::New(T), v8::None); - Nan::SetPrototypeTemplate(tmpl, Nan::New("S").ToLocalChecked(), Nan::New(S), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("S").ToLocalChecked(), Nan::New(H), v8::None); auto f = tmpl->GetFunction(); f->Set(Nan::New("create").ToLocalChecked(), Nan::New(Create)->GetFunction()); From d6203ac03f3fe6c97c579e5cd6c7e30837e95235 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 30 Dec 2015 18:02:45 +0100 Subject: [PATCH 42/45] hotfix --- changelog.md | 2 +- package.json | 2 +- src/arraywrapper.cpp | 10 ++++++---- src/arraywrapper.h | 4 ++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/changelog.md b/changelog.md index 1b292ef..cb67f02 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,4 @@ -# 0.21.2 (2015-12-30) +# 0.21.3 (2015-12-30) - All calculation methods synchronous - T/H method added to AFArray diff --git a/package.json b/package.json index 3e900e7..fa0ab3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.21.2", + "version": "0.21.3", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/src/arraywrapper.cpp b/src/arraywrapper.cpp index 48a2396..c4e5f77 100644 --- a/src/arraywrapper.cpp +++ b/src/arraywrapper.cpp @@ -182,8 +182,8 @@ NAN_MODULE_INIT(ArrayWrapper::Init) Nan::SetPrototypeTemplate(tmpl, Nan::New("neg").ToLocalChecked(), Nan::New(Neg), v8::None); Nan::SetPrototypeTemplate(tmpl, Nan::New("not").ToLocalChecked(), Nan::New(Not), v8::None); - Nan::SetPrototypeTemplate(tmpl, Nan::New("T").ToLocalChecked(), Nan::New(T), v8::None); - Nan::SetPrototypeTemplate(tmpl, Nan::New("S").ToLocalChecked(), Nan::New(H), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("T").ToLocalChecked(), Nan::New(AFT), v8::None); + Nan::SetPrototypeTemplate(tmpl, Nan::New("S").ToLocalChecked(), Nan::New(AFH), v8::None); auto f = tmpl->GetFunction(); f->Set(Nan::New("create").ToLocalChecked(), Nan::New(Create)->GetFunction()); @@ -1699,19 +1699,21 @@ AFARRAY_IMPL_UNOP(Neg, -) AFARRAY_IMPL_UNOP(Not, !) #undef AFARRAY_IMPL_UNOP -NAN_METHOD(ArrayWrapper::T) +NAN_METHOD(ArrayWrapper::AFT) { try { + Guard guard; info.GetReturnValue().Set(New(GetArray(info.This())->T())); } ARRAYFIRE_CATCH } -NAN_METHOD(ArrayWrapper::H) +NAN_METHOD(ArrayWrapper::AFH) { try { + Guard guard; info.GetReturnValue().Set(New(GetArray(info.This())->H())); } ARRAYFIRE_CATCH diff --git a/src/arraywrapper.h b/src/arraywrapper.h index 3c71c34..1eabf6a 100644 --- a/src/arraywrapper.h +++ b/src/arraywrapper.h @@ -137,8 +137,8 @@ struct ArrayWrapper : public node::ObjectWrap static NAN_METHOD(Not); static NAN_METHOD(Neg); - static NAN_METHOD(T); - static NAN_METHOD(H); + static NAN_METHOD(AFT); + static NAN_METHOD(AFH); private: explicit ArrayWrapper(af::array* array); From 91e2d7babd4b3b1856d05c1b54e729d697d78c45 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Sat, 2 Jan 2016 18:20:52 +0100 Subject: [PATCH 43/45] new test --- tests/es6/afArrayTests.js | 55 ++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/tests/es6/afArrayTests.js b/tests/es6/afArrayTests.js index 597a05b..58b0ca9 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -39,15 +39,15 @@ let async = Bluebird.coroutine; let testExec = require("./testExec"); let float = ref.types.float; -describe("AFArray class and methods", function() { - testExec.run(function(af) { +describe("AFArray class and methods", function () { + testExec.run(function (af) { let AFArray = af.AFArray; - it("should export AFArray constructor", function() { + it("should export AFArray constructor", function () { assert(_.isFunction(AFArray)); }); - it("should create empty", function() { + it("should create empty", function () { let array = new AFArray(); assert(_.isObject(array)); assert(array.bytes() === 0); @@ -62,7 +62,7 @@ describe("AFArray class and methods", function() { assert(_.isUndefined(array.hostAsyncSync)); }); - it("should fail with one number argument", function() { + it("should fail with one number argument", function () { try { let array = new AFArray(1); assert(false); @@ -71,7 +71,7 @@ describe("AFArray class and methods", function() { } }); - it("should create new one dimensional", function() { + it("should create new one dimensional", function () { let array = new AFArray(10, af.dType.s32); assert(_.isObject(array)); assert(array.bytes() === 10 * 4); @@ -105,7 +105,7 @@ describe("AFArray class and methods", function() { assert(array.isbool() === false); }); - it("should create new two dimensional", function() { + it("should create new two dimensional", function () { let array = new AFArray(10, 20, af.dType.f32); assert(_.isObject(array)); assert(array.bytes() === 10 * 20 * 4); @@ -139,7 +139,7 @@ describe("AFArray class and methods", function() { assert(array.isbool() === false); }); - it("should create new three dimensional", function() { + it("should create new three dimensional", function () { let array = new AFArray(10, 20, 30, af.dType.f32); assert(_.isObject(array)); assert(array.bytes() === 10 * 20 * 30 * 4); @@ -206,22 +206,22 @@ describe("AFArray class and methods", function() { assert(array.isbool() === false); } - it("should create new four dimensional", function() { + it("should create new four dimensional", function () { let array = new AFArray(10, 20, 30, 40, af.dType.f32); verify4(array); }); - it("should create new four dimensional from dim4", function() { - let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32); + it("should create new four dimensional from dim4", function () { + let array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32); verify4(array); }); - it("should create new four dimensional from dim4 array", function() { + it("should create new four dimensional from dim4 array", function () { let array = new AFArray([10, 20, 30, 40], af.dType.f32); verify4(array); }); - it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function(done) { + it("should initialize from buffer, copyable, and readable - asynchronously w/ generators", function (done) { let f = async(function*() { let int = ref.types.int; const count = 10; @@ -278,7 +278,7 @@ describe("AFArray class and methods", function() { f().nodeify(done); }); - it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function() { + it("should initialize from buffer, copyable, and readable - synchronously (blocking)", function () { let int = ref.types.int; const count = 10; let buff = new Buffer(int.size * count); @@ -331,7 +331,7 @@ describe("AFArray class and methods", function() { v = array2.at(af.end - 1).scalar(); assert(v === 8.0 * 8.0); }); - + it("should be created of a part of another with new dimensions", function (done) { async(function* () { let arr = new af.AFArray(10, af.dType.f32); @@ -357,8 +357,21 @@ describe("AFArray class and methods", function() { })().nodeify(done); }); - describe("RAII", function() { - describe("scope", function() { + it("should be multiplied by scalar", function (done) { + async(function* () { + let arr = af.constant(2.0, 10, 10, af.dType.f32); + assert(!arr.isScalar()); + let result = yield arr.mul(2).hostAsync(); + assert(result.length === float.size * 10 * 10); + for (let offset = 0; offset < result.length; offset += float.size) { + let value = float.get(result, offset); + assert(value === 4); + } + })().nodeify(done); + }); + + describe("RAII", function () { + describe("scope", function () { it("should exported as a function", function () { assert(_.isFunction(af.scope)); }); @@ -370,9 +383,9 @@ describe("AFArray class and methods", function() { assert(_.isFunction(af.scope.register)); }); - it("should destroy temporaries (sync)", function() { + it("should destroy temporaries (sync)", function () { let arr, sub; - let x = af.scope(function() { + let x = af.scope(function () { assert(this === af.scope); arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); @@ -401,7 +414,7 @@ describe("AFArray class and methods", function() { } }); - it("should destroy registered arrays", function() { + it("should destroy registered arrays", function () { let arr = new af.AFArray(10, af.dType.f32); arr.set(new af.Col(0), 0); arr.set(3, 1); @@ -409,7 +422,7 @@ describe("AFArray class and methods", function() { let sub = arr.at(new af.Seq(3, 6)); - af.scope(function() { + af.scope(function () { assert(this === af.scope); sub.set(0, 0); From 63b0bcbae13031cd8f188391ca2d6d4b255d2bd1 Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Fri, 4 Mar 2016 23:15:57 +0100 Subject: [PATCH 44/45] 0.21.4 --- .jshintrc | 7 ------- changelog.md | 4 ++++ lib/es5/index.js | 10 +++++++--- lib/es5/index.js.map | 2 +- lib/es6/index.js | 10 +++++++--- package.json | 2 +- tests/es5/afArrayTests.js | 32 ++++++++++++++++++++++++++++++++ tests/es5/afArrayTests.js.map | 2 +- 8 files changed, 53 insertions(+), 16 deletions(-) delete mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 8e22eab..0000000 --- a/.jshintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "onevar": true, - "esnext": true, - "node": true, - "browser": true, - "-W061": false -} \ No newline at end of file diff --git a/changelog.md b/changelog.md index cb67f02..c468002 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +# 0.21.4 (2016-03-04) + +- AFArray constructor speed optimization. + # 0.21.3 (2015-12-30) - All calculation methods synchronous diff --git a/lib/es5/index.js b/lib/es5/index.js index f07dfea..cb7989d 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -36,17 +36,21 @@ var ext = require("./ext"); var Bluebird = require("bluebird"); var debug = require("debug")("af"); +var cpuDriver = null; +var cudaDriver = null; +var openCLDriver = null; + var entry = module.exports = function (id) { var did = _.isString(id) ? id.trim().toLowerCase() : null; did = did || "cpu"; function createAF() { switch (did) { case "cpu": - return require("bindings")("arrayfire_js_CPU"); + return cpuDriver || (cpuDriver = require("bindings")("arrayfire_js_CPU")); case "cuda": - return require("bindings")("arrayfire_js_CUDA"); + return cudaDriver || (cudaDriver = require("bindings")("arrayfire_js_CUDA")); case "opencl": - return require("bindings")("arrayfire_js_OpenCL"); + return openCLDriver || (openCLDriver = require("bindings")("arrayfire_js_OpenCL")); default: throw new Error("Platform '" + id + "' is not supported."); } diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map index df85dc0..9b58d76 100644 --- a/lib/es5/index.js.map +++ b/lib/es5/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEnC,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE;AACtC,QAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC1D,OAAG,GAAG,GAAG,IAAI,KAAK,CAAC;AACnB,aAAS,QAAQ,GAAG;AAChB,gBAAQ,GAAG;AACP,iBAAK,KAAK;AACN,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAAA,AACnD,iBAAK,MAAM;AACP,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAAA,AACpD,iBAAK,QAAQ;AACT,uBAAO,OAAO,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAAA,AACtD;AACI,sBAAM,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC;AAAA,SAClE;KACJ;AACD,QAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpB,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAChB,WAAG,CAAC,EAAE,CAAC,CAAC;AACR,UAAE,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AACD,WAAO,EAAE,CAAC;CACb,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AAClC,QAAI,SAAS,GAAG,EAAE,CAAC;eACJ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAxC,6CAA0C;AAArC,YAAI,EAAE,WAAA,CAAA;AACP,YAAI;AACA,gBAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtB,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,uEAAuE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC/F;KACJ;AACD,WAAO,SAAS,CAAC;CACpB,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet ext = require(\"./ext\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet debug = require(\"debug\")(\"af\");\r\n\r\nlet entry = module.exports = function(id) {\r\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\r\n did = did || \"cpu\";\r\n function createAF() {\r\n switch (did) {\r\n case \"cpu\":\r\n return require(\"bindings\")(\"arrayfire_js_CPU\");\r\n case \"cuda\":\r\n return require(\"bindings\")(\"arrayfire_js_CUDA\");\r\n case \"opencl\":\r\n return require(\"bindings\")(\"arrayfire_js_OpenCL\");\r\n default:\r\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\r\n }\r\n }\r\n let af = createAF();\r\n if (!af.__extended) {\r\n ext(af);\r\n af.__extended = true;\r\n }\r\n return af;\r\n};\r\n\r\nentry.supportedPlatforms = function() {\r\n let platforms = [];\r\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\r\n try {\r\n let fire = entry(id);\r\n platforms.push(id);\r\n }\r\n catch(e) {\r\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\r\n }\r\n }\r\n return platforms;\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAY,CAAC;;AAEb,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEnC,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,IAAI,UAAU,GAAG,IAAI,CAAC;AACtB,IAAI,YAAY,GAAG,IAAI,CAAC;;AAExB,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE;AACtC,QAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC1D,OAAG,GAAG,GAAG,IAAI,KAAK,CAAC;AACnB,aAAS,QAAQ,GAAG;AAChB,gBAAQ,GAAG;AACP,iBAAK,KAAK;AACN,uBAAO,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAA,AAAC,CAAC;AAAA,AAC9E,iBAAK,MAAM;AACP,uBAAO,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAA,AAAC,CAAC;AAAA,AACjF,iBAAK,QAAQ;AACT,uBAAO,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAA,AAAC,CAAC;AAAA,AACvF;AACI,sBAAM,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC;AAAA,SAClE;KACJ;AACD,QAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpB,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAChB,WAAG,CAAC,EAAE,CAAC,CAAC;AACR,UAAE,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AACD,WAAO,EAAE,CAAC;CACb,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AAClC,QAAI,SAAS,GAAG,EAAE,CAAC;eACJ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAxC,6CAA0C;AAArC,YAAI,EAAE,WAAA,CAAA;AACP,YAAI;AACA,gBAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtB,CACD,OAAM,CAAC,EAAE;AACL,iBAAK,CAAC,uEAAuE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC/F;KACJ;AACD,WAAO,SAAS,CAAC;CACpB,CAAC","file":"index.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n\r\nlet _ = require(\"lodash\");\r\nlet ext = require(\"./ext\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet debug = require(\"debug\")(\"af\");\r\n\r\nlet cpuDriver = null;\r\nlet cudaDriver = null;\r\nlet openCLDriver = null;\r\n\r\nlet entry = module.exports = function(id) {\r\n let did = _.isString(id) ? id.trim().toLowerCase() : null;\r\n did = did || \"cpu\";\r\n function createAF() {\r\n switch (did) {\r\n case \"cpu\":\r\n return cpuDriver || (cpuDriver = require(\"bindings\")(\"arrayfire_js_CPU\"));\r\n case \"cuda\":\r\n return cudaDriver || (cudaDriver = require(\"bindings\")(\"arrayfire_js_CUDA\"));\r\n case \"opencl\":\r\n return openCLDriver || (openCLDriver = require(\"bindings\")(\"arrayfire_js_OpenCL\"));\r\n default:\r\n throw new Error(\"Platform '\" + id + \"' is not supported.\");\r\n }\r\n }\r\n let af = createAF();\r\n if (!af.__extended) {\r\n ext(af);\r\n af.__extended = true;\r\n }\r\n return af;\r\n};\r\n\r\nentry.supportedPlatforms = function() {\r\n let platforms = [];\r\n for (let id of [\"CPU\", \"CUDA\", \"OpenCL\"]) {\r\n try {\r\n let fire = entry(id);\r\n platforms.push(id);\r\n }\r\n catch(e) {\r\n debug(\"Cannot create ArrayFire binding of platform %s, because of error:\\n%s\", id, e.stack);\r\n }\r\n }\r\n return platforms;\r\n};"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/lib/es6/index.js b/lib/es6/index.js index bde73df..66c143b 100644 --- a/lib/es6/index.js +++ b/lib/es6/index.js @@ -36,17 +36,21 @@ let ext = require("./ext"); let Bluebird = require("bluebird"); let debug = require("debug")("af"); +let cpuDriver = null; +let cudaDriver = null; +let openCLDriver = null; + let entry = module.exports = function(id) { let did = _.isString(id) ? id.trim().toLowerCase() : null; did = did || "cpu"; function createAF() { switch (did) { case "cpu": - return require("bindings")("arrayfire_js_CPU"); + return cpuDriver || (cpuDriver = require("bindings")("arrayfire_js_CPU")); case "cuda": - return require("bindings")("arrayfire_js_CUDA"); + return cudaDriver || (cudaDriver = require("bindings")("arrayfire_js_CUDA")); case "opencl": - return require("bindings")("arrayfire_js_OpenCL"); + return openCLDriver || (openCLDriver = require("bindings")("arrayfire_js_OpenCL")); default: throw new Error("Platform '" + id + "' is not supported."); } diff --git a/package.json b/package.json index fa0ab3d..3017ca4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrayfire-js", - "version": "0.21.3", + "version": "0.21.4", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", "repository": { diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index f62b511..74e1234 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -407,6 +407,38 @@ describe("AFArray class and methods", function () { }))().nodeify(done); }); + it("should be multiplied by scalar", function (done) { + async(regeneratorRuntime.mark(function _callee3() { + var arr, result, offset, value; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + arr = af.constant(2.0, 10, 10, af.dType.f32); + + assert(!arr.isScalar()); + _context3.next = 4; + return arr.mul(2).hostAsync(); + + case 4: + result = _context3.sent; + + assert(result.length === float.size * 10 * 10); + for (offset = 0; offset < result.length; offset += float.size) { + value = float.get(result, offset); + + assert(value === 4); + } + + case 7: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + }))().nodeify(done); + }); + describe("RAII", function () { describe("scope", function () { it("should exported as a function", function () { diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map index 82ab2b9..271d17b 100644 --- a/tests/es5/afArrayTests.js.map +++ b/tests/es5/afArrayTests.js.map @@ -1 +1 @@ -{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"AFArray class and methods\", function() {\r\n testExec.run(function(af) {\r\n let AFArray = af.AFArray;\r\n\r\n it(\"should export AFArray constructor\", function() {\r\n assert(_.isFunction(AFArray));\r\n });\r\n\r\n it(\"should create empty\", function() {\r\n let array = new AFArray();\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 0);\r\n assert(array.elements() === 0);\r\n assert(array.isempty());\r\n assert(_.isFunction(array.host));\r\n assert(_.isFunction(array.hostAsync));\r\n assert(_.isUndefined(array.hostAsyncAsync));\r\n assert(_.isFunction(array.hostSync));\r\n assert(_.isUndefined(array.hostSyncAsync));\r\n assert(_.isUndefined(array.hostSyncSync));\r\n assert(_.isUndefined(array.hostAsyncSync));\r\n });\r\n\r\n it(\"should fail with one number argument\", function() {\r\n try {\r\n let array = new AFArray(1);\r\n assert(false);\r\n }\r\n catch (e) {\r\n }\r\n });\r\n\r\n it(\"should create new one dimensional\", function() {\r\n let array = new AFArray(10, af.dType.s32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 4);\r\n assert(array.elements() === 10);\r\n assert(array.type() === af.dType.s32);\r\n assert(array.numdims() === 1);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 1);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10);\r\n assert(dims.ndims === 1);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 1);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === true);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === true);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === false);\r\n assert(array.isrealfloating() === false);\r\n assert(array.isfloating() === false);\r\n assert(array.isinteger() === true);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new two dimensional\", function() {\r\n let array = new AFArray(10, 20, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 4);\r\n assert(array.elements() === 10 * 20);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 2);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20);\r\n assert(dims.ndims === 2);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new three dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 4);\r\n assert(array.elements() === 10 * 20 * 30);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 3);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30);\r\n assert(dims.ndims === 3);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n function verify4(array) {\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\r\n assert(array.elements() === 10 * 20 * 30 * 40);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 4);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 40);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30 * 40);\r\n assert(dims.ndims === 4);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 40);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n }\r\n\r\n it(\"should create new four dimensional\", function() {\r\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4\", function() {\r\n let array = new AFArray({ values: [10, 20, 30, 40] }, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4 array\", function() {\r\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function(done) {\r\n let f = async(function*() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createAsync));\r\n\r\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n yield array.hostAsync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = yield array2.hostAsync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array2.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n f().nodeify(done);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createSync));\r\n\r\n let array = AFArray.createSync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n array.hostSync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = array2.hostSync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n \r\n it(\"should be created of a part of another with new dimensions\", function (done) {\r\n async(function* () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\r\n\r\n let buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n\r\n arr.set(3, 2);\r\n arr.set(4, 3);\r\n\r\n buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n })().nodeify(done);\r\n });\r\n\r\n describe(\"RAII\", function() {\r\n describe(\"scope\", function() {\r\n it(\"should exported as a function\", function () {\r\n assert(_.isFunction(af.scope));\r\n });\r\n\r\n it(\"should support RAII interface\", function () {\r\n assert(_.isFunction(af.scope.begin));\r\n assert(_.isFunction(af.scope.end));\r\n assert(_.isFunction(af.scope.result));\r\n assert(_.isFunction(af.scope.register));\r\n });\r\n\r\n it(\"should destroy temporaries (sync)\", function() {\r\n let arr, sub;\r\n let x = af.scope(function() {\r\n assert(this === af.scope);\r\n arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n sub = arr.at(new af.Seq(3, 6));\r\n\r\n this.result(arr);\r\n\r\n return 1;\r\n });\r\n\r\n assert(x === 1);\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n\r\n it(\"should destroy registered arrays\", function() {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n\r\n af.scope(function() {\r\n assert(this === af.scope);\r\n\r\n sub.set(0, 0);\r\n\r\n // Part of the scope, hence will be destroyed.\r\n this.register(sub);\r\n });\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["afArrayTests.js"],"names":[],"mappings":"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","file":"afArrayTests.js","sourcesContent":["/*\r\nCopyright (c) 2014-2015, ArrayFire\r\nCopyright (c) 2015 Gábor Mező aka unbornchikken (gabor.mezo@outlook.com)\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice, this\r\n list of conditions and the following disclaimer in the documentation and/or\r\n other materials provided with the distribution.\r\n\r\n * Neither the name of the ArrayFire nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\n\"use strict\";\r\n/* global describe,it */\r\nlet assert = require(\"better-assert\");\r\nlet _ = require(\"lodash\");\r\nlet ref = require(\"ref\");\r\nlet Bluebird = require(\"bluebird\");\r\nlet async = Bluebird.coroutine;\r\nlet testExec = require(\"./testExec\");\r\nlet float = ref.types.float;\r\n\r\ndescribe(\"AFArray class and methods\", function () {\r\n testExec.run(function (af) {\r\n let AFArray = af.AFArray;\r\n\r\n it(\"should export AFArray constructor\", function () {\r\n assert(_.isFunction(AFArray));\r\n });\r\n\r\n it(\"should create empty\", function () {\r\n let array = new AFArray();\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 0);\r\n assert(array.elements() === 0);\r\n assert(array.isempty());\r\n assert(_.isFunction(array.host));\r\n assert(_.isFunction(array.hostAsync));\r\n assert(_.isUndefined(array.hostAsyncAsync));\r\n assert(_.isFunction(array.hostSync));\r\n assert(_.isUndefined(array.hostSyncAsync));\r\n assert(_.isUndefined(array.hostSyncSync));\r\n assert(_.isUndefined(array.hostAsyncSync));\r\n });\r\n\r\n it(\"should fail with one number argument\", function () {\r\n try {\r\n let array = new AFArray(1);\r\n assert(false);\r\n }\r\n catch (e) {\r\n }\r\n });\r\n\r\n it(\"should create new one dimensional\", function () {\r\n let array = new AFArray(10, af.dType.s32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 4);\r\n assert(array.elements() === 10);\r\n assert(array.type() === af.dType.s32);\r\n assert(array.numdims() === 1);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 1);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10);\r\n assert(dims.ndims === 1);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 1);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === true);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === true);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === false);\r\n assert(array.isrealfloating() === false);\r\n assert(array.isfloating() === false);\r\n assert(array.isinteger() === true);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new two dimensional\", function () {\r\n let array = new AFArray(10, 20, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 4);\r\n assert(array.elements() === 10 * 20);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 2);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 1);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20);\r\n assert(dims.ndims === 2);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 1);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n it(\"should create new three dimensional\", function () {\r\n let array = new AFArray(10, 20, 30, af.dType.f32);\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 4);\r\n assert(array.elements() === 10 * 20 * 30);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 3);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 1);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30);\r\n assert(dims.ndims === 3);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 1);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n });\r\n\r\n function verify4(array) {\r\n assert(_.isObject(array));\r\n assert(array.bytes() === 10 * 20 * 30 * 40 * 4);\r\n assert(array.elements() === 10 * 20 * 30 * 40);\r\n assert(array.type() === af.dType.f32);\r\n assert(array.numdims() === 4);\r\n assert(array.dims(0) === 10);\r\n assert(array.dims(1) === 20);\r\n assert(array.dims(2) === 30);\r\n assert(array.dims(3) === 40);\r\n let dims = array.dims();\r\n assert(_.isObject(dims));\r\n assert(dims.elements === 10 * 20 * 30 * 40);\r\n assert(dims.ndims === 4);\r\n assert(dims.values[0] === 10);\r\n assert(dims.values[1] === 20);\r\n assert(dims.values[2] === 30);\r\n assert(dims.values[3] === 40);\r\n assert(array.isempty() === false);\r\n assert(array.isscalar() === false);\r\n assert(array.isvector() === false);\r\n assert(array.isrow() === false);\r\n assert(array.iscolumn() === false);\r\n assert(array.iscomplex() === false);\r\n assert(array.isreal() === true);\r\n assert(array.isdouble() === false);\r\n assert(array.issingle() === true);\r\n assert(array.isrealfloating() === true);\r\n assert(array.isfloating() === true);\r\n assert(array.isinteger() === false);\r\n assert(array.isbool() === false);\r\n }\r\n\r\n it(\"should create new four dimensional\", function () {\r\n let array = new AFArray(10, 20, 30, 40, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4\", function () {\r\n let array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should create new four dimensional from dim4 array\", function () {\r\n let array = new AFArray([10, 20, 30, 40], af.dType.f32);\r\n verify4(array);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - asynchronously w/ generators\", function (done) {\r\n let f = async(function*() {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createAsync));\r\n\r\n let array = yield AFArray.createAsync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n yield array.hostAsync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = yield array2.hostAsync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array2.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n f().nodeify(done);\r\n });\r\n\r\n it(\"should initialize from buffer, copyable, and readable - synchronously (blocking)\", function () {\r\n let int = ref.types.int;\r\n const count = 10;\r\n let buff = new Buffer(int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n int.set(buff, v * int.size, v * v);\r\n }\r\n\r\n assert(_.isFunction(AFArray.create));\r\n assert(_.isFunction(AFArray.createSync));\r\n\r\n let array = AFArray.createSync(count, af.dType.s32, buff);\r\n assert(array.bytes() === count * int.size);\r\n assert(array.type() === af.dType.s32);\r\n\r\n let buff2 = new Buffer(int.size * count);\r\n array.hostSync(buff2);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff2, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n let array2 = array.copy();\r\n assert(array2 instanceof AFArray);\r\n assert(array2.bytes() === array.bytes());\r\n let buff3 = array2.hostSync();\r\n assert(buff3 instanceof Buffer);\r\n assert(buff3.length === int.size * count);\r\n for (let v = 0; v < count; v++) {\r\n let v1 = int.get(buff, v * int.size);\r\n let v2 = int.get(buff3, v * int.size);\r\n assert(v1 === v2);\r\n assert(v1 === v * v);\r\n }\r\n\r\n // Let's do some indexing:\r\n let v = array2.value();\r\n assert(v === 0.0);\r\n\r\n v = array.at(1).value();\r\n assert(v === 1.0);\r\n\r\n v = array2.at(2).scalar();\r\n assert(v === 4.0);\r\n\r\n v = array2.at(\"end\").scalar();\r\n assert(v === 9.0 * 9.0);\r\n\r\n v = array2.at(af.end - 1).scalar();\r\n assert(v === 8.0 * 8.0);\r\n });\r\n\r\n it(\"should be created of a part of another with new dimensions\", function (done) {\r\n async(function* () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n let sub2 = new af.AFArray(sub, new af.Dim4(2, 2));\r\n\r\n let buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n\r\n arr.set(3, 2);\r\n arr.set(4, 3);\r\n\r\n buff = yield sub2.hostAsync();\r\n\r\n assert(float.get(buff, 0 * float.size) === 1);\r\n assert(float.get(buff, 1 * float.size) === 2);\r\n })().nodeify(done);\r\n });\r\n\r\n it(\"should be multiplied by scalar\", function (done) {\r\n async(function* () {\r\n let arr = af.constant(2.0, 10, 10, af.dType.f32);\r\n assert(!arr.isScalar());\r\n let result = yield arr.mul(2).hostAsync();\r\n assert(result.length === float.size * 10 * 10);\r\n for (let offset = 0; offset < result.length; offset += float.size) {\r\n let value = float.get(result, offset);\r\n assert(value === 4);\r\n }\r\n })().nodeify(done);\r\n });\r\n\r\n describe(\"RAII\", function () {\r\n describe(\"scope\", function () {\r\n it(\"should exported as a function\", function () {\r\n assert(_.isFunction(af.scope));\r\n });\r\n\r\n it(\"should support RAII interface\", function () {\r\n assert(_.isFunction(af.scope.begin));\r\n assert(_.isFunction(af.scope.end));\r\n assert(_.isFunction(af.scope.result));\r\n assert(_.isFunction(af.scope.register));\r\n });\r\n\r\n it(\"should destroy temporaries (sync)\", function () {\r\n let arr, sub;\r\n let x = af.scope(function () {\r\n assert(this === af.scope);\r\n arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n sub = arr.at(new af.Seq(3, 6));\r\n\r\n this.result(arr);\r\n\r\n return 1;\r\n });\r\n\r\n assert(x === 1);\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n\r\n it(\"should destroy registered arrays\", function () {\r\n let arr = new af.AFArray(10, af.dType.f32);\r\n arr.set(new af.Col(0), 0);\r\n arr.set(3, 1);\r\n arr.set(4, 2);\r\n\r\n let sub = arr.at(new af.Seq(3, 6));\r\n\r\n af.scope(function () {\r\n assert(this === af.scope);\r\n\r\n sub.set(0, 0);\r\n\r\n // Part of the scope, hence will be destroyed.\r\n this.register(sub);\r\n });\r\n\r\n arr.set(3, 2);\r\n\r\n try {\r\n sub.set(0, 2);\r\n assert(false);\r\n }\r\n catch (e) {\r\n if (!/free\\(\\)/.test(e.message)) {\r\n throw e;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n});"],"sourceRoot":"/source/"} \ No newline at end of file From dd380645fd61c92cf1874cb2c880a4d00430925a Mon Sep 17 00:00:00 2001 From: unbornchikken Date: Wed, 10 Aug 2016 18:59:38 +0200 Subject: [PATCH 45/45] minor update for nn ex --- examples/es6/machine-learning/ann.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/es6/machine-learning/ann.js b/examples/es6/machine-learning/ann.js index cd3ed8b..7a43599 100644 --- a/examples/es6/machine-learning/ann.js +++ b/examples/es6/machine-learning/ann.js @@ -94,6 +94,7 @@ proto.train = function(input, target, options) { let numBatches = numSamples / options.batchSize; let err = 0; + let allTime = 0; for (let i = 0; i < options.maxEpochs; i++) { const start = now(); @@ -119,7 +120,12 @@ proto.train = function(input, target, options) { }); const end = now(); - console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${((end - start) / 1000).toFixed(4)} seconds`); + allTime += (end - start) / 1000; + + if ((i + 1) % 10 === 0) { + console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(6)}, Duration: ${(allTime / 10).toFixed(6)} seconds`); + allTime = 0; + } // Check if convergence criteria has been met if (err < options.maxError) { @@ -131,4 +137,4 @@ proto.train = function(input, target, options) { return err; }; -module.exports = ANN; \ No newline at end of file +module.exports = ANN;