diff --git a/.eslintrc b/.eslintrc index 35ea94b..62c05ad 100644 --- a/.eslintrc +++ b/.eslintrc @@ -17,21 +17,22 @@ "templateStrings": true, "unicodeCodePointEscapes": true, "globalReturn": true, - "jsx": true + "jsx": true, + "classes": 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/.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/.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/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) 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/README.md b/README.md index 8c0f899..fbec41f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ +# NOTICE: + +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 @@ -47,21 +51,23 @@ 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"); ``` -### Small Example +## Examples + +### Calculating pi Port of the PI calculator from [ArrayFire documentation](http://www.arrayfire.com/docs/index.htm): @@ -80,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; @@ -96,23 +102,39 @@ 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` - 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` + +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 -[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? -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 new file mode 100644 index 0000000..c468002 --- /dev/null +++ b/changelog.md @@ -0,0 +1,72 @@ +# 0.21.4 (2016-03-04) + +- AFArray constructor speed optimization. + +# 0.21.3 (2015-12-30) + +- All calculation methods synchronous +- T/H method added to AFArray + +# 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 + +# 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) +- core ES6 support changed to Node 5 feature matrix, legacy support switched to Babel + +# 0.18.0 (2015-12-07) + +- RAII support by scope + +# 0.17.4 (2015-12-06) + +- Missing AFArray constructor added + +# 0.17.3 (2015-11-26) + +- Math function fixes + +# 0.17.2 (2015-11-25) + +- mod export fixed + +# 0.17.1 (2015-11-25) + +- missing mod export added + +# 0.17.0 (2015-11-25) + +- select wrapper implemented + +# 0.16.2 (2015-11-23) + +- 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 + +# 0.15.2 (2015-10-17) + +- 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 +- io.js 3 compatibility (io.js 3.2+ needed) \ No newline at end of file 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 c930373..b97beea 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"; -"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) { - 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; - 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(); - } - }, $__0, this); + +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))); + _context.next = 9; + return af.sumAsync(dist.lt(1)); + + case 9: + numInside = _context.sent; + piVal = 4.0 * numInside / numberOfPoints; + + console.log("PI = " + piVal); + + case 12: + case "end": + return _context.stop(); + } + } + }, _callee, this); })); + common.runOnAllPlatforms(pi, "pi example"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUNaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ2xDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLFFBQU8sVUFBVSxDQUFDO0FBQzlCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFdBQVUsQ0FBQyxDQUFDO0FBRWpDLEFBQU0sRUFBQSxDQUFBLGNBQWEsRUFBSSxTQUFPLENBQUM7QUFFL0IsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsS0FBSSxBQUFDLENBdENkLGVBQWMsc0JBQXNCLEFBQUMsQ0FzQ3RCLGNBQVUsRUFBQyxDQUFHLENBQUEsVUFBUzs7Ozs7OztBQXRDdEMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7OztrQkFzQ0UsQ0FBQSxFQUFDLFFBQVE7QUFFdkIsZ0JBQU0sSUFBSSxBQUFDLENBQUMsNkJBQTRCLENBQUMsQ0FBQztBQUMxQyxlQUFLLGdCQUFnQixBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsZ0JBQU0sSUFBSSxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7WUFFUCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsY0FBYSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztlQUNsQyxDQUFBLEVBQUMsS0FBSyxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxJQUFJLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDOzs7OztBQS9DN0MsZUFnRDBCLENBQUEsRUFBQyxTQUFTLEFBQUMsQ0FBQyxJQUFHLEdBQUcsQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBaER6Qjs7b0JBQXZCLENBQUEsSUFBRyxLQUFLOzs7O2dCQWlEUSxDQUFBLENBQUMsR0FBRSxFQUFLLFVBQVEsQ0FBQyxFQUFJLGVBQWE7QUFFOUMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFDLE1BQUksRUFBRyxDQUFDOzs7O0FBbkRoQyxlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixPQUE2QixLQUFHLENBQUMsQ0FBQztBQWtEdEMsQ0FwRHVELENBb0R0RCxDQUFDO0FBRUYsS0FBSyxrQkFBa0IsQUFBQyxDQUFDLEVBQUMsQ0FBRyxhQUFXLENBQUMsQ0FBQztBQUMxQyIsImZpbGUiOiJiZWNobWFya3MvcGkuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGNvbW1vbiA9IHJlcXVpcmUoXCIuLi9jb21tb25cIik7XG5cbmNvbnN0IG51bWJlck9mUG9pbnRzID0gMjAwMDAwMDA7XG5cbmxldCBwaSA9IGFzeW5jKGZ1bmN0aW9uKihhZiwgZGV2aWNlSW5mbykge1xuICAgIGxldCBBRkFycmF5ID0gYWYuQUZBcnJheTtcblxuICAgIGNvbnNvbGUubG9nKFwiQ2FsY3VsYXRpbmcgcGkgb24gZGV2aWNlOlxcblwiKTtcbiAgICBjb21tb24ucHJpbnREZXZpY2VJbmZvKGRldmljZUluZm8pO1xuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuXG4gICAgbGV0IHggPSBhZi5yYW5kdShudW1iZXJPZlBvaW50cywgYWYuZHR5cGUuZjMyKTtcbiAgICBsZXQgeSA9IGFmLnJhbmR1KG51bWJlck9mUG9pbnRzLCBhZi5kdHlwZS5mMzIpO1xuICAgIGxldCBkaXN0ID0gYWYuc3FydCh4Lm11bCh4KS5hZGQoeS5tdWwoeSkpKTtcbiAgICBsZXQgbnVtSW5zaWRlID0geWllbGQgYWYuc3VtQXN5bmMoZGlzdC5sdCgxKSk7XG4gICAgbGV0IHBpVmFsID0gKDQuMCAqICBudW1JbnNpZGUpIC8gbnVtYmVyT2ZQb2ludHM7XG5cbiAgICBjb25zb2xlLmxvZyhgUEkgPSAke3BpVmFsfWApO1xufSk7XG5cbmNvbW1vbi5ydW5PbkFsbFBsYXRmb3JtcyhwaSwgXCJwaSBleGFtcGxlXCIpO1xuIl19 +//# 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..0a29baf --- /dev/null +++ b/examples/es5/bechmarks/pi.js.map @@ -0,0 +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;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 794a72b..673659b 100644 --- a/examples/es5/common/index.js +++ b/examples/es5/common/index.js @@ -1,290 +1,277 @@ +/* +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"; -"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 afOfPlatform, - $__3, - $__4, - $__5, - $__1, - $__0, - deviceInfo, - start, - end, - $__6; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - afOfPlatform = af(platformID); - $__3 = true; - $__4 = false; - $__5 = undefined; - $ctx.state = 29; - break; - case 29: - $ctx.pushTry(15, 16); - $ctx.state = 18; - break; - case 18: - $__1 = void 0, $__0 = (afOfPlatform.getDevices())[$traceurRuntime.toProperty(Symbol.iterator)](); - $ctx.state = 14; - break; - case 14: - $ctx.state = (!($__3 = ($__1 = $__0.next()).done)) ? 10 : 12; - break; - case 8: - $__3 = true; - $ctx.state = 14; - break; - case 10: - deviceInfo = $__1.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(); - $__6 = $ctx.storedException; - $ctx.state = 21; - break; - case 21: - $__4 = true; - $__5 = $__6; - $ctx.state = 16; - $ctx.finallyFallThrough = -2; - break; - case 16: - $ctx.popTry(); - $ctx.state = 27; - break; - case 27: - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; + +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(); - } - }, $__7, this); + } + }, _callee, this, [[4, 20, 24, 32], [25,, 27, 31]]); })); -var runOnAllPlatforms = async($traceurRuntime.initGeneratorFunction(function $__8(f, name) { - var platfroms, - $__3, - $__4, - $__5, - $__1, - $__0, - id, - $__6, - 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: - $__3 = true; - $__4 = false; - $__5 = undefined; - $ctx.state = 24; - break; - case 24: - $ctx.pushTry(10, 11); - $ctx.state = 13; - break; - case 13: - $__1 = void 0, $__0 = (platfroms)[$traceurRuntime.toProperty(Symbol.iterator)](); - $ctx.state = 9; - break; - case 9: - $ctx.state = (!($__3 = ($__1 = $__0.next()).done)) ? 5 : 7; - break; - case 4: - $__3 = true; - $ctx.state = 9; - break; - case 5: - id = $__1.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(); - $__6 = $ctx.storedException; - $ctx.state = 16; - break; - case 16: - $__4 = true; - $__5 = $__6; - $ctx.state = 11; - $ctx.finallyFallThrough = 15; - break; - case 11: - $ctx.popTry(); - $ctx.state = 22; - break; - case 22: - try { - if (!$__3 && $__0.return != null) { - $__0.return(); + +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(); } - } finally { - if ($__4) { - throw $__5; - } - } - $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(); - } - }, $__8, this); + } + }, _callee2, this, [[2, 31], [6, 17, 21, 29], [22,, 24, 28]]); })); -var runOnBestDevice = async($traceurRuntime.initGeneratorFunction(function $__9(f, name) { - var platfroms, - order, - 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")); - $ctx.state = 25; - break; - case 25: - $ctx.pushTry(15, null); - $ctx.state = 18; - break; - case 18: - $ctx.state = (_(platfroms).contains(order[0])) ? 1 : 13; - break; - case 1: - $ctx.state = 2; - return runOnDevices(order[0], f, 0); - case 2: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 13: - $ctx.state = (_(platfroms).contains(order[1])) ? 5 : 9; - break; - case 5: - $ctx.state = 6; - return runOnDevices(order[1], f, 0); - case 6: - $ctx.maybeThrow(); - $ctx.state = 4; - break; - case 9: - $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 15: - $ctx.popTry(); - $ctx.maybeUncatchable(); - e = $ctx.storedException; - $ctx.state = 21; - break; - case 21: - console.error(e.stack); - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__9, this); + +var runOnBestDevice = async(regeneratorRuntime.mark(function _callee3(f, name) { + var platfroms, order; + 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"); + _context3.prev = 3; + + if (!_(platfroms).contains(order[0])) { + _context3.next = 9; + break; + } + + _context3.next = 7; + return runOnDevices(order[0], f, 0); + + case 7: + _context3.next = 16; + break; + + case 9: + if (!_(platfroms).contains(order[1])) { + _context3.next = 14; + break; + } + + _context3.next = 12; + return runOnDevices(order[1], f, 0); + + case 12: + _context3.next = 16; + break; + + case 14: + _context3.next = 16; + return runOnDevices(order[2], f, 0); + + case 16: + _context3.next = 21; + break; + + case 18: + _context3.prev = 18; + _context3.t0 = _context3["catch"](3); + + console.error(_context3.t0.stack); + + case 21: + case "end": + return _context3.stop(); + } + } + }, _callee3, this, [[3, 18]]); })); -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=data:application/json;base64,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QUFoQixlQTZFa0IsQ0FBQSxZQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUUsQ0FBQSxDQUFDLENBQUcsRUFBQSxDQUFHLEVBQUEsQ0FBQyxDQTdFdEI7O0FBQXZCLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUFoQixhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7Ozs7QUFDQyxhQUFHLE9BQU8sQUFBQyxFQUFDLENBQUM7QUFDYixhQUFHLGlCQUFpQixBQUFDLEVBQUMsQ0FBQztBQUN2QixZQUFvQixDQUFBLElBQUcsZ0JBQWdCLENBQUM7Ozs7QUE4RTlDLGdCQUFNLE1BQU0sQUFBQyxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7Ozs7QUFqRjlCLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO0FBaUZ0QyxDQW5GdUQsQ0FtRnRELENBQUM7QUFFRixBQUFJLEVBQUEsQ0FBQSxlQUFjLEVBQUksVUFBUyxVQUFTLENBQUc7QUFDdkMsUUFBTSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQSxVQUFTLEdBQUcsRUFBQyxXQUFVLEVBQUMsQ0FBQSxVQUFTLEtBQUssRUFBQyxlQUFjLEVBQUMsQ0FBQSxVQUFTLFNBQVMsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBQyxjQUFhLEVBQUMsQ0FBQSxVQUFTLFFBQVEsRUFBRyxDQUFDO0FBQ25LLENBQUM7QUFFRCxLQUFLLFFBQVEsRUFBSTtBQUNiLGtCQUFnQixDQUFHLGtCQUFnQjtBQUNuQyxnQkFBYyxDQUFHLGdCQUFjO0FBQy9CLGdCQUFjLENBQUcsZ0JBQWM7QUFBQSxBQUNuQyxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tbW9uL2luZGV4LmpzIiwic291cmNlUm9vdCI6ImV4YW1wbGVzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLi8uLlwiKTtcbmxldCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxubGV0IHJ1bk9uRGV2aWNlcyA9IGFzeW5jKGZ1bmN0aW9uKihwbGF0Zm9ybUlELCBmLCBvbklEKSB7XG4gICAgbGV0IGFmT2ZQbGF0Zm9ybSA9IGFmKHBsYXRmb3JtSUQpO1xuICAgIGZvciAobGV0IGRldmljZUluZm8gb2YgYWZPZlBsYXRmb3JtLmdldERldmljZXMoKSkge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbklEKSB8fCBvbklEID09PSBkZXZpY2VJbmZvLmlkKSB7XG4gICAgICAgICAgICBhZk9mUGxhdGZvcm0uc2V0RGV2aWNlKGRldmljZUluZm8uaWQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgICAgICAgICAgIHlpZWxkIGYoYWZPZlBsYXRmb3JtLCBkZXZpY2VJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5vdygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxcbi0tIHRvb2sgJHsoKGVuZCAtIHN0YXJ0KSAvIDEwMDApLnRvRml4ZWQoMTApfSBzZWNvbmRzXFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubGV0IHJ1bk9uQWxsUGxhdGZvcm1zID0gYXN5bmMoZnVuY3Rpb24qKGYsIG5hbWUpIHtcbiAgICBsZXQgcGxhdGZyb21zID0gYWYuc3VwcG9ydGVkUGxhdGZvcm1zKCk7XG4gICAgY29uc29sZS5sb2coYFJ1bm5pbmcgJHtuYW1lfSBvbiBhbGwgc3VwcG9ydGVkIHBsYXRmcm9tczogJHtwbGF0ZnJvbXMuam9pbihcIiwgXCIpfVxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHBsYXRmcm9tcykge1xuICAgICAgICAgICAgeWllbGQgcnVuT25EZXZpY2VzKGlkLCBmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgfVxufSk7XG5cbmxldCBydW5PbkJlc3REZXZpY2UgPSBhc3luYyhmdW5jdGlvbiooZiwgbmFtZSkge1xuICAgIGxldCBwbGF0ZnJvbXMgPSBhZi5zdXBwb3J0ZWRQbGF0Zm9ybXMoKTtcbiAgICBsZXQgb3JkZXIgPSBbXCJDVURBXCIsIFwiT3BlbkNMXCIsIFwiQ1BVXCJdO1xuICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nICR7bmFtZX0gb24gYmVzdCBhdmFpbGFibGUgZGV2aWNlLlxcbmApO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChfKHBsYXRmcm9tcykuY29udGFpbnMob3JkZXJbMF0pKSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMF0sIGYsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF8ocGxhdGZyb21zKS5jb250YWlucyhvcmRlclsxXSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHJ1bk9uRGV2aWNlcyhvcmRlclsxXSwgZiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCBydW5PbkRldmljZXMob3JkZXJbMl0sIGYsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICB9XG59KTtcblxubGV0IHByaW50RGV2aWNlSW5mbyA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhgSUQ6ICR7ZGV2aWNlSW5mby5pZH1cXG5OYW1lOiAke2RldmljZUluZm8ubmFtZX1cXG5QbGF0Zm9ybTogJHtkZXZpY2VJbmZvLnBsYXRmb3JtfVxcblRvb2xraXQ6ICR7ZGV2aWNlSW5mby50b29sa2l0fVxcbkNvbXB1dGU6ICR7ZGV2aWNlSW5mby5jb21wdXRlfWApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcnVuT25BbGxQbGF0Zm9ybXM6IHJ1bk9uQWxsUGxhdGZvcm1zLFxuICAgIHJ1bk9uQmVzdERldmljZTogcnVuT25CZXN0RGV2aWNlLFxuICAgIHByaW50RGV2aWNlSW5mbzogcHJpbnREZXZpY2VJbmZvXG59O1xuIl19 +//# 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..a8fa1b7 --- /dev/null +++ b/examples/es5/common/index.js.map @@ -0,0 +1 @@ +{"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 bd7ddc1..0ae610b 100644 --- a/examples/es5/machine-learning/ann.js +++ b/examples/es5/machine-learning/ann.js @@ -1,184 +1,151 @@ "use strict"; -"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.sigmoid = function(val) { - return this.af.exp(val.neg()).add(1).rhsDiv(1); + +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.deriv = function(out) { - return out.rhsSub(1).mul(out); + +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.addBias = function(input) { - return this.af.join(1, this.af.constant(1, input.dims(0), this.af.dType.f32), input); + +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++) { + _loop(i); + } }; -proto._calculateError = async($traceurRuntime.initGeneratorFunction(function $__2(out, pred) { - var dif, - $__3, - $__4, - $__5, - $__6, - $__7, - $__8, - $__9, - $__10; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - dif = out.sub(pred); - $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); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__8; - case 2: - $__9 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $__10 = $__3.call(Math, $__9); - $ctx.state = 8; - break; - case 8: - $ctx.returnValue = $__10; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__2, this); -})); -proto.forwardPropagate = function(input) { - this.signal[0].set(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)); - } + +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.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(af.transpose(this.af.matMul(this.weights[i], delta))); - err.set(err.at(af.span, new Seq(1, outVec.dims(1)))); - } + +proto.predict = function (input) { + this.forwardPropagate(input); + return this.signal[this.numLayers - 1].copy(); }; -proto.predict = function(input) { - this.forwardPropagate(input); - return this.signal[this.numLayers - 1].copy(); + +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); + } + + 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; }; -proto.train = async($traceurRuntime.initGeneratorFunction(function $__11(input, target, options) { - var af, - Seq, - numSamples, - numBatches, - err, - i, - j, - startPos$__0, - endPos$__1, - x, - y, - startPos, - endPos, - outVec; - return $traceurRuntime.createGeneratorInstance(function($ctx) { - while (true) - switch ($ctx.state) { - case 0: - af = this.af; - Seq = this.af.Seq; - numSamples = input.dims(0); - numBatches = numSamples / options.batchSize; - err = 0; - $ctx.state = 20; - break; - case 20: - i = 0; - $ctx.state = 16; - break; - case 16: - $ctx.state = (i < options.maxEpochs) ? 10 : 14; - break; - case 13: - i++; - $ctx.state = 16; - break; - case 10: - for (j = 0; j < numBatches - 1; j++) { - startPos$__0 = j * options.batchSize; - endPos$__1 = startPos$__0 + options.batchSize; - 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; - break; - case 11: - $ctx.state = 2; - return this._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); - case 2: - err = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $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; - break; - default: - return $ctx.end(); - } - }, $__11, this); -})); + module.exports = ANN; -//# sourceMappingURL=data:application/json;base64,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LEVBQUksVUFBVSxNQUFLLENBQUcsQ0FBQSxLQUFJLENBQUc7QUFDM0MsQUFBSSxJQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsSUFBRyxHQUFHLENBQUM7QUFDaEIsQUFBSSxJQUFBLENBQUEsR0FBRSxFQUFJLENBQUEsSUFBRyxHQUFHLElBQUksQ0FBQztBQUdyQixBQUFJLElBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxJQUFHLE9BQU8sQ0FBRSxJQUFHLFVBQVUsRUFBSSxFQUFBLENBQUMsQ0FBQztBQUM1QyxBQUFJLElBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxNQUFLLElBQUksQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBQzVCLEFBQUksSUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE1BQUssS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFFdEIsYUFBYSxDQUFBLElBQUcsVUFBVSxFQUFJLEVBQUEsQ0FBRyxDQUFBLENBQUEsR0FBSyxFQUFBLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztBQUMxQyxBQUFJLE1BQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxJQUFHLFFBQVEsQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQUFBSSxNQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLE1BQU0sQUFBQyxDQUFDLE1BQUssQ0FBQyxJQUFJLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBR3JELEFBQUksTUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLEVBQUMsT0FBTyxBQUFDLENBQUMsS0FBSSxDQUFHLE1BQUksQ0FBQyxJQUFJLEFBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxBQUFDLEVBQUMsSUFBSSxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFDMUQsT0FBRyxRQUFRLENBQUUsQ0FBQSxDQUFDLFVBQVUsQUFBQyxDQUFDLEVBQUMsVUFBVSxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUc3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SSxDQUFBLENBOEdELEdBQUUsRUFBSSxDQUFBLE9BQU0sU0FBUyxDQTlHRixRQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBOEdBLGdCQUFNLElBQUksQUFBQyxFQUFDLHFCQUFxQixJQUFDLENBQUEsRUFBSSxFQUFBLEdBQUcsQ0FBQzs7OztBQUk5QyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxTQUFTLElBQUMsQ0FBQSxFQUFJLEVBQUEsR0FBQyxZQUFXLEVBQUMsQ0FBQSxHQUFFLFFBQVEsQUFBQyxDQUFDLENBQUEsQ0FBQyxFQUFHLENBQUM7Ozs7QUFuSGhFLGFBQUcsWUFBWSxFQXNISixJQUFFLEFBdEhzQixDQUFBOzs7O0FBQW5DLGVBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLEVBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0FBcUh0QyxDQXZIdUQsQ0F1SHRELENBQUM7QUFFRixLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJtYWNoaW5lLWxlYXJuaW5nL2Fubi5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6YW5uXCIpO1xuXG5mdW5jdGlvbiBBTk4oYWYsIGxheWVycywgcmFuZ2UpIHtcbiAgICByYW5nZSA9IHJhbmdlIHx8IDAuMDU7XG4gICAgdGhpcy5hZiA9IGFmO1xuICAgIHRoaXMubnVtTGF5ZXJzID0gbGF5ZXJzLmxlbmd0aDtcbiAgICB0aGlzLnNpZ25hbCA9IFtdO1xuICAgIHRoaXMud2VpZ2h0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1MYXllcnM7IGkrKykge1xuICAgICAgICB0aGlzLnNpZ25hbC5wdXNoKG5ldyBhZi5BRkFycmF5KCkpO1xuICAgICAgICBpZiAoaSA8IHRoaXMubnVtTGF5ZXJzIC0gMSkge1xuICAgICAgICAgICAgbGV0IHcgPSBhZi5yYW5kdShsYXllcnNbaV0gKyAxLCBsYXllcnNbaSArIDFdLCBhZi5kVHlwZS5mMzIpLm11bChyYW5nZSkuc3ViKHJhbmdlIC8gMik7XG4gICAgICAgICAgICB0aGlzLndlaWdodHMucHVzaCh3KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IHByb3RvID0gQU5OLnByb3RvdHlwZTtcblxucHJvdG8uc2lnbW9pZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyAxIC8gKDEgKyBleHAoLXZhbCkpO1xuICAgIHJldHVybiB0aGlzLmFmLmV4cCh2YWwubmVnKCkpLmFkZCgxKS5yaHNEaXYoMSk7XG59O1xuXG5wcm90by5kZXJpdiA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICByZXR1cm4gb3V0LnJoc1N1YigxKS5tdWwob3V0KTtcbn07XG5cbnByb3RvLmFkZEJpYXMgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICByZXR1cm4gdGhpcy5hZi5qb2luKDEsIHRoaXMuYWYuY29uc3RhbnQoMSwgaW5wdXQuZGltcygwKSwgdGhpcy5hZi5kVHlwZS5mMzIpLCBpbnB1dCk7XG59O1xuXG5wcm90by5fY2FsY3VsYXRlRXJyb3IgPSBhc3luYyhmdW5jdGlvbioob3V0LCBwcmVkKSB7XG4gICAgbGV0IGRpZiA9IG91dC5zdWIocHJlZCk7XG4gICAgcmV0dXJuIE1hdGguc3FydCh5aWVsZCB0aGlzLmFmLnN1bUFzeW5jKGRpZi5tdWwoZGlmKSkpO1xufSk7XG5cbnByb3RvLmZvcndhcmRQcm9wYWdhdGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB0aGlzLnNpZ25hbFswXS5zZXQoaW5wdXQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1MYXllcnMgLSAxOyBpKyspIHtcbiAgICAgICAgbGV0IGluVmVjID0gdGhpcy5hZGRCaWFzKHRoaXMuc2lnbmFsW2ldKTtcbiAgICAgICAgbGV0IG91dFZlYyA9IHRoaXMuYWYubWF0TXVsKGluVmVjLCB0aGlzLndlaWdodHNbaV0pO1xuICAgICAgICB0aGlzLnNpZ25hbFtpICsgMV0uc2V0KHRoaXMuc2lnbW9pZChvdXRWZWMpKTtcbiAgICB9XG59O1xuXG5wcm90by5iYWNrUHJvcGFnYXRlID0gZnVuY3Rpb24gKHRhcmdldCwgYWxwaGEpIHtcbiAgICBsZXQgYWYgPSB0aGlzLmFmO1xuICAgIGxldCBTZXEgPSB0aGlzLmFmLlNlcTtcblxuICAgIC8vIEdldCBlcnJvciBmb3Igb3V0cHV0IGxheWVyXG4gICAgbGV0IG91dFZlYyA9IHRoaXMuc2lnbmFsW3RoaXMubnVtTGF5ZXJzIC0gMV07XG4gICAgbGV0IGVyciA9IG91dFZlYy5zdWIodGFyZ2V0KTtcbiAgICBsZXQgbSA9IHRhcmdldC5kaW1zKDApO1xuXG4gICAgZm9yIChsZXQgaSA9IHRoaXMubnVtTGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgbGV0IGluVmVjID0gdGhpcy5hZGRCaWFzKHRoaXMuc2lnbmFsW2ldKTtcbiAgICAgICAgbGV0IGRlbHRhID0gYWYudHJhbnNwb3NlKHRoaXMuZGVyaXYob3V0VmVjKS5tdWwoZXJyKSk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHdlaWdodHNcbiAgICAgICAgbGV0IGdyYWQgPSBhZi5tYXRNdWwoZGVsdGEsIGluVmVjKS5tdWwoYWxwaGEpLm5lZygpLmRpdihtKTtcbiAgICAgICAgdGhpcy53ZWlnaHRzW2ldLmFkZEFzc2lnbihhZi50cmFuc3Bvc2UoZ3JhZCkpO1xuXG4gICAgICAgIC8vIElucHV0IHRvIGN1cnJlbnQgbGF5ZXIgaXMgb3V0cHV0IG9mIHByZXZpb3VzXG4gICAgICAgIG91dFZlYyA9IHRoaXMuc2lnbmFsW2ldO1xuICAgICAgICBlcnIuc2V0KGFmLnRyYW5zcG9zZSh0aGlzLmFmLm1hdE11bCh0aGlzLndlaWdodHNbaV0sIGRlbHRhKSkpO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZXJyb3Igb2YgYmlhcyBhbmQgcHJvcGFnYXRlIGJhY2t3YXJkXG4gICAgICAgIGVyci5zZXQoZXJyLmF0KGFmLnNwYW4sIG5ldyBTZXEoMSwgb3V0VmVjLmRpbXMoMSkpKSk7XG4gICAgfVxufTtcblxucHJvdG8ucHJlZGljdCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHRoaXMuZm9yd2FyZFByb3BhZ2F0ZShpbnB1dCk7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmFsW3RoaXMubnVtTGF5ZXJzIC0gMV0uY29weSgpO1xufTtcblxucHJvdG8udHJhaW4gPSBhc3luYyhmdW5jdGlvbiooaW5wdXQsIHRhcmdldCwgb3B0aW9ucykge1xuICAgIGxldCBhZiA9IHRoaXMuYWY7XG4gICAgbGV0IFNlcSA9IHRoaXMuYWYuU2VxO1xuXG4gICAgbGV0IG51bVNhbXBsZXMgPSBpbnB1dC5kaW1zKDApO1xuICAgIGxldCBudW1CYXRjaGVzID0gbnVtU2FtcGxlcyAvIG9wdGlvbnMuYmF0Y2hTaXplO1xuXG4gICAgbGV0IGVyciA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubWF4RXBvY2hzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1CYXRjaGVzIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRQb3MgPSBqICogb3B0aW9ucy5iYXRjaFNpemU7XG4gICAgICAgICAgICBsZXQgZW5kUG9zID0gc3RhcnRQb3MgKyBvcHRpb25zLmJhdGNoU2l6ZTtcblxuICAgICAgICAgICAgbGV0IHggPSBpbnB1dC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKTtcbiAgICAgICAgICAgIGxldCB5ID0gdGFyZ2V0LmF0KG5ldyBTZXEoc3RhcnRQb3MsIGVuZFBvcyksIGFmLnNwYW4pO1xuXG4gICAgICAgICAgICB0aGlzLmZvcndhcmRQcm9wYWdhdGUoeCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tQcm9wYWdhdGUoeSwgb3B0aW9ucy5hbHBoYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB3aXRoIGxhc3QgYmF0Y2hcbiAgICAgICAgbGV0IHN0YXJ0UG9zID0gKG51bUJhdGNoZXMgLSAxKSAqIG9wdGlvbnMuYmF0Y2hTaXplO1xuICAgICAgICBsZXQgZW5kUG9zID0gbnVtU2FtcGxlcyAtIDE7XG4gICAgICAgIGxldCBvdXRWZWMgPSB0aGlzLnByZWRpY3QoaW5wdXQuYXQobmV3IFNlcShzdGFydFBvcywgZW5kUG9zKSwgYWYuc3BhbikpO1xuICAgICAgICBlcnIgPSB5aWVsZCB0aGlzLl9jYWxjdWxhdGVFcnJvcihvdXRWZWMsIHRhcmdldC5hdChuZXcgU2VxKHN0YXJ0UG9zLCBlbmRQb3MpLCBhZi5zcGFuKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udmVyZ2VuY2UgY3JpdGVyaWEgaGFzIGJlZW4gbWV0XG4gICAgICAgIGlmIChlcnIgPCBvcHRpb25zLm1heEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVyZ2VkIG9uIEVwb2M6ICR7aSArIDF9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBFcG9jaDogJHtpICsgMX0sIEVycm9yOiAke2Vyci50b0ZpeGVkKDQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlcnI7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBTk47Il19 +//# 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..c86e089 --- /dev/null +++ b/examples/es5/machine-learning/ann.js.map @@ -0,0 +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 = 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/mnist.js b/examples/es5/machine-learning/mnist.js index 8fbf934..3ea282c 100644 --- a/examples/es5/machine-learning/mnist.js +++ b/examples/es5/machine-learning/mnist.js @@ -1,5 +1,5 @@ "use strict"; -"use strict"; + var Bluebird = require("bluebird"); var async = Bluebird.coroutine; var fs = Bluebird.promisifyAll(require("fs-extra")); @@ -10,306 +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 $__4(f, data) { - var bytesRead, - $__5, - $__6, - $__7, - $__8, - $__9; - 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); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__7; - case 2: - $__8 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $__9 = $__8[0]; - bytesRead = $__9; - $ctx.state = 8; - break; - case 8: - if (bytesRead !== data.length) { - throw new Error("File reading error!"); - } - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__4, this); -})); -var readIdx = async($traceurRuntime.initGeneratorFunction(function $__10(path, type) { - var file, - d, - numDims, - elem, - dims, - i, - dim, - bdata, - data, - i$__0, - 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$__0 = 0; i$__0 < bdata.length; i$__0++) { - byte = bdata[i$__0]; - type.set(data, i$__0 * 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(); - } - }, $__10, this); -})); -var mnist = {setup: async($traceurRuntime.initGeneratorFunction(function $__11(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$__1, - idx$__2, - label$__3, - 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; + + if (!(bytesRead !== data.length)) { + _context.next = 5; + break; + } + + throw new Error("File reading error!"); + + case 5: + case "end": + return _context.stop(); } - 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); + } + }, _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(); } - }, $__11, this); - }))}; + }, _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 = path.resolve(path.join(__dirname, "../../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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1uaXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsUUFBTyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUM7QUFDbEMsQUFBSSxFQUFBLENBQUEsS0FBSSxFQUFJLENBQUEsUUFBTyxVQUFVLENBQUM7QUFDOUIsQUFBSSxFQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsUUFBTyxhQUFhLEFBQUMsQ0FBQyxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLEtBQUksQ0FBQyxDQUFDO0FBQ3hCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0IsQUFBSSxFQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsR0FBRSxNQUFNLEtBQUssQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxPQUFNLENBQUMsQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQ3hDLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBRTFCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLEtBQUksQUFBQyxDQWJwQixlQUFjLHNCQUFzQixBQUFDLENBYWhCLGNBQVUsQ0FBQSxDQUFHLENBQUEsSUFBRzs7Ozs7OztBQWJyQyxPQUFPLENBQVAsZUFBYyx3QkFBd0IsQUFBZCxDQUF4QixTQUFTLElBQUcsQ0FBRztBQUNULFVBQU8sSUFBRzs7O2VBYVcsQ0FBQSxFQUFDLFVBQVU7ZUFBYyxDQUFBLElBQUcsT0FBTztlQUFuQyxVQUFZLENBQVosRUFBQyxDQUFZLEVBQUEsQ0FBRyxLQUFHLENBQUcsRUFBQSxPQUFnQixLQUFHLENBQUM7Ozs7O0FBZHJFLHFCQUF1Qjs7ZUFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7ZUFjWSxNQUFvRCxDQUFBLENBQUM7Ozs7O0FBQ3JFLGFBQUksU0FBUSxJQUFNLENBQUEsSUFBRyxPQUFPLENBQUc7QUFDM0IsZ0JBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxxQkFBb0IsQ0FBQyxDQUFDO1VBQzFDO0FBQUE7OztBQWpCSixlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixPQUE2QixLQUFHLENBQUMsQ0FBQztBQWdCdEMsQ0FsQnVELENBa0J0RCxDQUFDO0FBRUYsQUFBSSxFQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsS0FBSSxBQUFDLENBcEJuQixlQUFjLHNCQUFzQixBQUFDLENBb0JqQixlQUFVLElBQUcsQ0FBRyxDQUFBLElBQUc7Ozs7Ozs7Ozs7OztBQXBCdkMsT0FBTyxDQUFQLGVBQWMsd0JBQXdCLEFBQWQsQ0FBeEIsU0FBUyxJQUFHLENBQUc7QUFDVCxVQUFPLElBQUc7Ozs7QUFEaEIsZUFxQnFCLENBQUEsRUFBQyxVQUFVLEFBQUMsQ0FBQyxJQUFHLENBQUcsSUFBRSxDQUFDLENBckJwQjs7ZUFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7QUFBUixhQUFHLFFBQVEsQUFBQyxVQUVpQixDQUFDOzs7O1lBcUJkLElBQUksT0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDOzs7OztBQXZCNUIsZUF5QmMsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxJQUFHLENBQUcsRUFBQSxDQUFDLENBekJQOztBQUF2QixhQUFHLFdBQVcsQUFBQyxFQUFDLENBQUE7Ozs7QUEyQlIsYUFBSSxDQUFBLENBQUUsQ0FBQSxDQUFDLEdBQUssRUFBQSxDQUFHO0FBQ1gsZ0JBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBQyxDQUFDO1VBQzVDO0FBQUEsa0JBRWdCLENBQUEsQ0FBQSxDQUFFLENBQUEsQ0FBQztlQUdSLEVBQUE7ZUFDQSxHQUFDOzs7O1lBQ0MsRUFBQTs7OztBQXBDckIsYUFBRyxNQUFNLEVBQUksQ0FBQSxDQW9DVyxDQUFBLEVBQUksUUFBTSxDQXBDSCxTQUF3QyxDQUFDO0FBQ2hFLGVBQUk7O0FBbUN5QixVQUFBLEVBQUU7Ozs7O0FBcEN2QyxlQXFDa0IsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxJQUFHLENBQUcsRUFBQSxDQUFDLENBckNYOztBQUF2QixhQUFHLFdBQVcsQUFBQyxFQUFDLENBQUE7Ozs7Y0FzQ00sQ0FBQSxDQUFBLGFBQWEsQUFBQyxFQUFDO0FBQ3pCLGFBQUcsR0FBSyxJQUFFLENBQUM7QUFDWCxhQUFHLEtBQUssQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDOzs7O2dCQUlOLElBQUksT0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDOzs7OztBQTVDbkMsZUE2Q2MsQ0FBQSxRQUFPLEFBQUMsQ0FBQyxJQUFHLENBQUcsTUFBSSxDQUFDLENBN0NYOztBQUF2QixhQUFHLFdBQVcsQUFBQyxFQUFDLENBQUE7Ozs7ZUE4Q0csSUFBSSxPQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sRUFBSSxDQUFBLElBQUcsS0FBSyxDQUFDO0FBQzlDLHFCQUFhLEVBQUEsQ0FBRyxRQUFJLENBQUEsS0FBSSxPQUFPLENBQUcsUUFBRSxDQUFHO2lCQUN4QixDQUFBLEtBQUksT0FBRztBQUNsQixlQUFHLElBQUksQUFBQyxDQUFDLElBQUcsQ0FBRyxRQUFJLENBQUEsSUFBRyxLQUFLLENBQUcsS0FBRyxDQUFDLENBQUM7VUFDdkM7QUFBQTs7O0FBbERSLGFBQUcsWUFBWSxFQW9EQTtBQUNILGtCQUFNLENBQUcsUUFBTTtBQUNmLGVBQUcsQ0FBRyxLQUFHO0FBQ1QsZUFBRyxDQUFHLEtBQUc7QUFBQSxVQUNiLEFBeEQyQixDQUFBOztBQUFuQyxhQUFHLG1CQUFtQixLQUFvQixDQUFBOzs7QUFBMUMsYUFBRyxPQUFPLEFBQUMsRUFBQyxDQUFDOzs7OztBQUFiLGVBMkRjLENBQUEsRUFBQyxXQUFXLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0EzRFQ7O0FBQXZCLGFBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQTs7OztBQUNNLGFBQUcsTUFBTSxFQUFJLENBQUEsSUFBRyxtQkFBbUIsQ0FBQztBQUNwQyxlQUFLOztBQUYzQixlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixRQUE2QixLQUFHLENBQUMsQ0FBQztBQTJEdEMsQ0E3RHVELENBNkR0RCxDQUFDO0FBRUYsQUFBSSxFQUFBLENBQUEsS0FBSSxFQUFJLEVBQ1IsS0FBSSxDQUFHLENBQUEsS0FBSSxBQUFDLENBaEVoQixlQUFjLHNCQUFzQixBQUFDLENBZ0VwQixlQUFVLEVBQUMsQ0FBRyxDQUFBLFlBQVcsQ0FBRyxDQUFBLElBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFoRWhELFNBQU8sQ0FBUCxlQUFjLHdCQUF3QixBQUFkLENBQXhCLFNBQVMsSUFBRyxDQUFHO0FBQ1QsWUFBTyxJQUFHOzs7QUFnRVIsZUFBRyxFQUFJLENBQUEsSUFBRyxJQUFJLEFBQUMsQ0FBQyxJQUFHLEdBQUssSUFBRSxDQUFHLElBQUUsQ0FBQyxDQUFDO3FCQUNsQiwwQkFBd0I7b0JBQ3pCLENBQUEsRUFBQyxRQUFRO2lCQUNaLENBQUEsRUFBQyxLQUFLOzs7OztBQXBFekIsaUJBc0U4QixDQUFBLE9BQU0sQUFBQyxDQUFDLElBQUcsS0FBSyxBQUFDLENBQUMsUUFBTyxDQUFHLGdCQUFjLENBQUMsQ0FBRyxNQUFJLENBQUMsQ0F0RTFEOztzQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7O0FBQVIsaUJBdUU4QixDQUFBLE9BQU0sQUFBQyxDQUFDLElBQUcsS0FBSyxBQUFDLENBQUMsUUFBTyxDQUFHLGdCQUFjLENBQUMsQ0FBRyxLQUFHLENBQUMsQ0F2RXpEOztzQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7bUJBeUVhLElBQUksS0FBRyxBQUFDLENBQUMsQ0FBQSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUMsUUFBUSxBQUFDLEVBQUMsTUFBTSxBQUFDLEVBQUMsQ0FBQzs7Ozs7QUF6RWpFLGlCQTBFMkIsQ0FBQSxPQUFNLFlBQVksQUFBQyxDQUFDLE1BQUssQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUcsQ0FBQSxTQUFRLEtBQUssQ0FBQyxDQTFFNUQ7O21CQUF2QixDQUFBLElBQUcsS0FBSzs7OztjQTRFUSxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsS0FBSSxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQztpQkFDekIsQ0FBQSxDQUFBLEdBQUcsQUFBQyxDQUFDLElBQUcsQ0FBQzt5QkFDRCxDQUFBLEVBQUMsTUFBTSxBQUFDLENBQUMsSUFBRyxDQUFDO3dCQUNkLENBQUEsRUFBQyxNQUFNLEFBQUMsQ0FBQyxJQUFHLElBQUksQUFBQyxFQUFDLENBQUM7d0JBRW5CLENBQUEsRUFBQyxPQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsYUFBVyxDQUFHLEVBQUEsQ0FBQyxJQUFJLEFBQUMsQ0FBQyxHQUFFLENBQUM7dUJBQzNDLENBQUEsRUFBQyxPQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsWUFBVSxDQUFHLEVBQUEsQ0FBQyxJQUFJLEFBQUMsQ0FBQyxHQUFFLENBQUM7dUJBRXpDLEdBQUM7cUJBQ0gsQ0FBQSxXQUFVLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQztvQkFDbkIsQ0FBQSxVQUFTLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQztBQUUvQixnQkFBSSxBQUFDLEVBQUMseUJBQXlCLEVBQUMsU0FBTyxFQUFHLENBQUM7QUFDM0MsZ0JBQUksQUFBQyxFQUFDLHFCQUFxQixFQUFDLFFBQU0sRUFBRyxDQUFDOzs7O0FBekY5QyxlQUFHLE1BQU0sRUFBSSxDQUFBLENBOEZELFlBQVcsQ0E5RlEsVUFBd0MsQ0FBQztBQUNoRSxpQkFBSTs7QUE4RkEsc0JBQVUsRUFBSSxDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsQ0FBQSxDQUFHLFdBQVMsQ0FBRyxTQUFPLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEUscUJBQVMsRUFBSSxDQUFBLEVBQUMsU0FBUyxBQUFDLENBQUMsQ0FBQSxDQUFHLFdBQVMsQ0FBRyxRQUFNLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFFOUQsaUJBQUssQUFBQyxDQUFDLFlBQVcsS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzVDLGlCQUFLLEFBQUMsQ0FBQyxXQUFVLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzs7Ozs7QUFuR3ZELGlCQXFHa0MsQ0FBQSxZQUFXLFVBQVUsQUFBQyxFQUFDLENBckdsQzs7c0JBQXZCLENBQUEsSUFBRyxLQUFLOzs7OztBQUFSLGlCQXNHaUMsQ0FBQSxXQUFVLFVBQVUsQUFBQyxFQUFDLENBdEdoQzs7cUJBQXZCLENBQUEsSUFBRyxLQUFLOzs7O0FBd0dJLG1CQUFhLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxTQUFPLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztrQkFDckIsQ0FBQSxJQUFHLElBQUksQUFBQyxDQUFDLFNBQVEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLElBQUcsS0FBSyxDQUFDO29CQUMvQixDQUFBLElBQUcsSUFBSSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUcsQ0FBQSxHQUFFLEVBQUksQ0FBQSxJQUFHLEtBQUssQ0FBQztBQUNwRCxtQkFBSyxBQUFDLENBQUMsS0FBSSxHQUFLLEVBQUEsQ0FBQSxFQUFLLENBQUEsS0FBSSxHQUFLLEVBQUEsQ0FBQyxDQUFDO0FBQ2hDLHdCQUFVLElBQUksQUFBQyxDQUFDLEtBQUksQ0FBRyxFQUFBLENBQUcsRUFBQSxDQUFDLENBQUM7WUFDaEM7QUFBQSxBQUVBLHVCQUFhLEVBQUEsQ0FBRyxRQUFJLFFBQU0sQ0FBRyxRQUFFLENBQUc7c0JBQ3BCLENBQUEsSUFBRyxJQUFJLEFBQUMsQ0FBQyxRQUFPLENBQUcsUUFBSSxDQUFBLElBQUcsS0FBSyxDQUFDO3dCQUM5QixDQUFBLElBQUcsSUFBSSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUcsVUFBTSxDQUFBLElBQUcsS0FBSyxDQUFDO0FBQ3BELG1CQUFLLEFBQUMsQ0FBQyxZQUFTLEVBQUEsQ0FBQSxFQUFLLGFBQVMsRUFBQSxDQUFDLENBQUM7QUFDaEMsdUJBQVMsSUFBSSxBQUFDLGtCQUFXLEVBQUEsQ0FBQyxDQUFDO1lBQy9CO0FBQUE7Ozs7QUFwSFosaUJBdUgrQixDQUFBLE9BQU0sWUFBWSxBQUFDLENBQUMsU0FBUSxLQUFLLENBQUUsQ0FBQSxDQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFHLENBQUEsU0FBUSxLQUFLLENBQUMsQ0F2SDNFOzttQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7QUF3SEksc0JBQVUsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsWUFBVyxDQUFDLENBQUM7QUFDckMscUJBQVMsRUFBSSxDQUFBLE1BQUssR0FBRyxBQUFDLENBQUMsV0FBVSxDQUFDLENBQUM7Ozs7QUF6SC9DLGVBQUcsWUFBWSxFQTRIQTtBQUNILHVCQUFTLENBQUcsV0FBUztBQUNyQixxQkFBTyxDQUFHLFNBQU87QUFDakIsb0JBQU0sQ0FBRyxRQUFNO0FBQ2Ysd0JBQVUsQ0FBRyxZQUFVO0FBQ3ZCLHVCQUFTLENBQUcsV0FBUztBQUNyQix3QkFBVSxDQUFHLFlBQVU7QUFDdkIsdUJBQVMsQ0FBRyxXQUFTO0FBQUEsWUFDekIsQUFwSTJCLENBQUE7Ozs7QUFBbkMsaUJBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLElBQy9CLFFBQTZCLEtBQUcsQ0FBQyxDQUFDO0VBbUlsQyxDQXJJbUQsQ0FxSWxELENBQ0wsQ0FBQztBQUVELEtBQUssUUFBUSxFQUFJLE1BQUksQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvbW5pc3QuanMiLCJzb3VyY2VSb290IjoiZXhhbXBsZXMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbmxldCBhc3luYyA9IEJsdWViaXJkLmNvcm91dGluZTtcbmxldCBmcyA9IEJsdWViaXJkLnByb21pc2lmeUFsbChyZXF1aXJlKFwiZnMtZXh0cmFcIikpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgZmxvYXQgPSByZWYudHlwZXMuZmxvYXQ7XG5sZXQgdWludCA9IHJlZi50eXBlcy51aW50O1xubGV0IGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiYWY6bW5pc3RcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG5sZXQgcmVhZERhdGEgPSBhc3luYyhmdW5jdGlvbiooZiwgZGF0YSkge1xuICAgIGxldCBieXRlc1JlYWQgPSAoeWllbGQgZnMucmVhZEFzeW5jKGYsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBudWxsKSlbMF07XG4gICAgaWYgKGJ5dGVzUmVhZCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSByZWFkaW5nIGVycm9yIVwiKTtcbiAgICB9XG59KTtcblxubGV0IHJlYWRJZHggPSBhc3luYyhmdW5jdGlvbioocGF0aCwgdHlwZSkge1xuICAgIGxldCBmaWxlID0geWllbGQgZnMub3BlbkFzeW5jKHBhdGgsIFwiclwiKTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgZCA9IG5ldyBCdWZmZXIoNCk7XG5cbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgZCk7XG5cbiAgICAgICAgaWYgKGRbMl0gIT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtRGltcyA9IGRbM107XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgZGltZW5zaW9uc1xuICAgICAgICBsZXQgZWxlbSA9IDE7XG4gICAgICAgIGxldCBkaW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRGltczsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCByZWFkRGF0YShmaWxlLCBkKTtcbiAgICAgICAgICAgIGxldCBkaW0gPSBkLnJlYWRVSW50MzJCRSgpO1xuICAgICAgICAgICAgZWxlbSAqPSBkaW07XG4gICAgICAgICAgICBkaW1zLnB1c2goZGltKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYWQgdGhlIGRhdGFcbiAgICAgICAgbGV0IGJkYXRhID0gbmV3IEJ1ZmZlcihlbGVtKTtcbiAgICAgICAgeWllbGQgcmVhZERhdGEoZmlsZSwgYmRhdGEpO1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBCdWZmZXIoYmRhdGEubGVuZ3RoICogdHlwZS5zaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ5dGUgPSBiZGF0YVtpXTtcbiAgICAgICAgICAgIHR5cGUuc2V0KGRhdGEsIGkgKiB0eXBlLnNpemUsIGJ5dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bURpbXM6IG51bURpbXMsXG4gICAgICAgICAgICBkaW1zOiBkaW1zLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgeWllbGQgZnMuY2xvc2VBc3luYyhmaWxlKTtcbiAgICB9XG59KTtcblxubGV0IG1uaXN0ID0ge1xuICAgIHNldHVwOiBhc3luYyhmdW5jdGlvbiooYWYsIGV4cGFuZExhYmVscywgZnJhYykge1xuICAgICAgICBmcmFjID0gTWF0aC5taW4oZnJhYyB8fCAxLjAsIDAuOCk7XG4gICAgICAgIGxldCBkYXRhUm9vdCA9IFwiLi4vLi4vbWxfbGFiL2RhdGEvbW5pc3RcIjtcbiAgICAgICAgbGV0IEFGQXJyYXkgPSBhZi5BRkFycmF5O1xuICAgICAgICBsZXQgRGltNCA9IGFmLkRpbTQ7XG5cbiAgICAgICAgbGV0IGltYWdlRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImltYWdlcy1zdWJzZXRcIiksIGZsb2F0KTtcbiAgICAgICAgbGV0IGxhYmVsRGF0YSA9IHlpZWxkIHJlYWRJZHgocGF0aC5qb2luKGRhdGFSb290LCBcImxhYmVscy1zdWJzZXRcIiksIHVpbnQpO1xuXG4gICAgICAgIGxldCBySURpbXMgPSBuZXcgRGltNChfKGltYWdlRGF0YS5kaW1zKS5yZXZlcnNlKCkudmFsdWUoKSk7XG4gICAgICAgIGxldCBpbWFnZXMgPSB5aWVsZCBBRkFycmF5LmNyZWF0ZUFzeW5jKHJJRGltcywgYWYuZFR5cGUuZjMyLCBpbWFnZURhdGEuZGF0YSk7XG5cbiAgICAgICAgbGV0IHIgPSBhZi5yYW5kdSgxMDAwMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgbGV0IGNvbmQgPSByLmx0KGZyYWMpO1xuICAgICAgICBsZXQgdHJhaW5JbmRpY2VzID0gYWYud2hlcmUoY29uZCk7XG4gICAgICAgIGxldCB0ZXN0SW5kaWNlcyA9IGFmLndoZXJlKGNvbmQubm90KCkpO1xuXG4gICAgICAgIGxldCB0cmFpbkltYWdlcyA9IGFmLmxvb2t1cChpbWFnZXMsIHRyYWluSW5kaWNlcywgMikuZGl2KDI1NSk7XG4gICAgICAgIGxldCB0ZXN0SW1hZ2VzID0gYWYubG9va3VwKGltYWdlcywgdGVzdEluZGljZXMsIDIpLmRpdigyNTUpO1xuXG4gICAgICAgIGxldCBudW1DbGFzc2VzID0gMTA7XG4gICAgICAgIGxldCBudW1UcmFpbiA9IHRyYWluSW1hZ2VzLmRpbXMoMik7XG4gICAgICAgIGxldCBudW1UZXN0ID0gdGVzdEltYWdlcy5kaW1zKDIpO1xuXG4gICAgICAgIGRlYnVnKGBUcmFpbmluZyBzYW1wbGUgY291bnQ6ICR7bnVtVHJhaW59YCk7XG4gICAgICAgIGRlYnVnKGBUZXN0IHNhbXBsZSBjb3VudDogJHtudW1UZXN0fWApO1xuXG4gICAgICAgIGxldCB0cmFpbkxhYmVscztcbiAgICAgICAgbGV0IHRlc3RMYWJlbHM7XG5cbiAgICAgICAgaWYgKGV4cGFuZExhYmVscykge1xuICAgICAgICAgICAgdHJhaW5MYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UcmFpbiwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgIHRlc3RMYWJlbHMgPSBhZi5jb25zdGFudCgwLCBudW1DbGFzc2VzLCBudW1UZXN0LCBhZi5kVHlwZS5mMzIpO1xuXG4gICAgICAgICAgICBhc3NlcnQodHJhaW5JbmRpY2VzLnR5cGUoKSA9PT0gYWYuZFR5cGUudTMyKTtcbiAgICAgICAgICAgIGFzc2VydCh0ZXN0SW5kaWNlcy50eXBlKCkgPT09IGFmLmRUeXBlLnUzMik7XG5cbiAgICAgICAgICAgIGxldCBoVHJhaW5JZHggPSB5aWVsZCB0cmFpbkluZGljZXMuaG9zdEFzeW5jKCk7XG4gICAgICAgICAgICBsZXQgaFRlc3RJZHggPSB5aWVsZCB0ZXN0SW5kaWNlcy5ob3N0QXN5bmMoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UcmFpbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkeCA9IHVpbnQuZ2V0KGhUcmFpbklkeCwgaSAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdWludC5nZXQobGFiZWxEYXRhLmRhdGEsIGlkeCAqIHVpbnQuc2l6ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxhYmVsID49IDAgJiYgbGFiZWwgPD0gOSk7XG4gICAgICAgICAgICAgICAgdHJhaW5MYWJlbHMuc2V0KGxhYmVsLCBpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UZXN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4ID0gdWludC5nZXQoaFRlc3RJZHgsIGkgKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHVpbnQuZ2V0KGxhYmVsRGF0YS5kYXRhLCBpZHggKiB1aW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChsYWJlbCA+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..af2062a --- /dev/null +++ b/examples/es5/machine-learning/mnist.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["machine-learning/mnist.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,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1B,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AACzC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACtC,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;;AAE3B,IAAI,QAAQ,GAAG,KAAK,yBAAC,iBAAU,CAAC,EAAE,IAAI;QAC9B,SAAS;;;;;;2BAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;AAA7D,6BAAS;;0BACT,SAAS,KAAK,IAAI,CAAC,MAAM,CAAA;;;;;0BACnB,IAAI,KAAK,CAAC,qBAAqB,CAAC;;;;;;;;CAE7C,EAAC,CAAC;;AAEH,IAAI,OAAO,GAAG,KAAK,yBAAC,kBAAU,IAAI,EAAE,IAAI;QAChC,IAAI,EAEA,CAAC,EAQC,OAAO,EAGT,IAAI,EACJ,IAAI,EAYC,CAAC,EATF,GAAG,EAMP,KAAK,EAEL,IAAI,EAEA,IAAI;;;;;;2BA3BC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;;;AAApC,wBAAI;;AAEA,qBAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;;2BAEf,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;;;0BAEnB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;;;;;0BACH,IAAI,KAAK,CAAC,uBAAuB,CAAC;;;AAGtC,2BAAO,GAAG,CAAC,CAAC,CAAC,CAAC;;;;AAGhB,wBAAI,GAAG,CAAC;AACR,wBAAI,GAAG,EAAE;AACJ,qBAAC,GAAG,CAAC;;;0BAAE,CAAC,GAAG,OAAO,CAAA;;;;;;2BACjB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;;;AACnB,uBAAG,GAAG,CAAC,CAAC,YAAY,EAAE;;AAC1B,wBAAI,IAAI,GAAG,CAAC;AACZ,wBAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;;AAJU,qBAAC,EAAE;;;;;;;AAQ5B,yBAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;;2BACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;;;AACvB,wBAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;;AAC/C,yBAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,4BAAI,GAAG,KAAK,CAAC,CAAC,CAAC;;AACnB,4BAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACvC;;sDAEM;AACH,+BAAO,EAAE,OAAO;AAChB,4BAAI,EAAE,IAAI;AACV,4BAAI,EAAE,IAAI;qBACb;;;;;2BAGK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;CAEhC,EAAC,CAAC;;AAEH,IAAI,KAAK,GAAG;AACR,SAAK,EAAE,KAAK,yBAAC,kBAAU,EAAE,EAAE,YAAY,EAAE,IAAI;YAErC,QAAQ,EACR,OAAO,EACP,IAAI,EAEJ,SAAS,EACT,SAAS,EAET,MAAM,EACN,MAAM,EAEN,CAAC,EACD,IAAI,EACJ,YAAY,EACZ,WAAW,EAEX,WAAW,EACX,UAAU,EAEV,UAAU,EACV,QAAQ,EACR,OAAO,EAKP,WAAW,EACX,UAAU,EASN,SAAS,EACT,QAAQ,EAEH,EAAC,EAQF,GAAG,EACH,KAAK,EAFJ,GAAC,EAQN,MAAM;;;;;;AAtDd,4BAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,gCAAQ,GAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AACzE,+BAAO,GAAG,EAAE,CAAC,OAAO;AACpB,4BAAI,GAAG,EAAE,CAAC,IAAI;;+BAEI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC;;;AAAtE,iCAAS;;+BACS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC;;;AAArE,iCAAS;AAET,8BAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;;+BACvC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC;;;AAAxE,8BAAM;AAEN,yBAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,4BAAI,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AACjB,oCAAY,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,mCAAW,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAElC,mCAAW,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACzD,kCAAU,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AAEvD,kCAAU,GAAG,EAAE;AACf,gCAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,+BAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEhC,6BAAK,6BAA2B,QAAQ,CAAG,CAAC;AAC5C,6BAAK,yBAAuB,OAAO,CAAG,CAAC;;AAEnC,mCAAW;AACX,kCAAU;;6BAEV,YAAY;;;;;AACZ,mCAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjE,kCAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAE/D,8BAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7C,8BAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;+BAEtB,YAAY,CAAC,SAAS,EAAE;;;AAA1C,iCAAS;;+BACQ,WAAW,CAAC,SAAS,EAAE;;;AAAxC,gCAAQ;;AAEZ,6BAAS,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,QAAQ,EAAE,EAAC,EAAE,EAAE;AAC3B,+BAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AACxC,iCAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;;AACrD,kCAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AACjC,uCAAW,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;yBAChC;;AAED,6BAAS,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,OAAO,EAAE,GAAC,EAAE,EAAE;AAC1B,+BAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AACvC,iCAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;;AACrD,kCAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AACjC,sCAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAC,EAAE,CAAC,CAAC,CAAC;yBAC/B;;;;;;+BAGkB,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC;;;AAAnF,8BAAM;;AACV,mCAAW,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AACtC,kCAAU,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;;;0DAGjC;AACH,sCAAU,EAAE,UAAU;AACtB,oCAAQ,EAAE,QAAQ;AAClB,mCAAO,EAAE,OAAO;AAChB,uCAAW,EAAE,WAAW;AACxB,sCAAU,EAAE,UAAU;AACtB,uCAAW,EAAE,WAAW;AACxB,sCAAU,EAAE,UAAU;yBACzB;;;;;;;;KACJ,EAAC;CACL,CAAC;;AAEF,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC","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 09f41b8..8a37427 100644 --- a/examples/es5/machine-learning/neuralNetwork.js +++ b/examples/es5/machine-learning/neuralNetwork.js @@ -1,203 +1,80 @@ "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 pMax, - tMax, - $__1, - $__2, - $__3, - $__4, - $__5, - $__6, - $__7, - $__8, - $__9, - $__10, - $__11; - 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: - $__1 = af.countAsync; - $__2 = pMax.index; - $__3 = $__2.eq; - $__4 = tMax.index; - $__5 = $__3.call($__2, $__4); - $__6 = $__1.call(af, $__5); - $ctx.state = 14; - break; - case 14: - $ctx.state = 10; - return $__6; - case 10: - $__7 = $ctx.sent; - $ctx.state = 12; - break; - case 12: - $__8 = 100 * $__7; - $__9 = tMax.index; - $__10 = $__9.elements; - $__11 = $__10.call($__9); - $ctx.state = 16; - break; - case 16: - $ctx.returnValue = $__8 / $__11; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__0, this); -})); -var annDemo = async($traceurRuntime.initGeneratorFunction(function $__12(af, deviceInfo) { - var data, - featureSize, - trainFeats, - testFeats, - trainTarget, - testTarget, - network, - start, - end, - trainOutput, - testOutput, - $__13, - $__14, - $__15, - $__16, - $__17, - $__18, - $__19, - $__20, - $__21, - $__22, - $__23, - $__24, - $__25, - $__26; - 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: 2.0, - maxEpochs: 250, - batchSize: 100, - maxError: 0.5 - }); - 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: - $__13 = console.log; - $__14 = accuracy(af, trainOutput, trainTarget); - $ctx.state = 18; - break; - case 18: - $ctx.state = 14; - return $__14; - case 14: - $__15 = $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); - $ctx.state = 20; - break; - case 20: - console.log("Test set:"); - $ctx.state = 36; - break; - case 36: - $__20 = console.log; - $__21 = accuracy(af, testOutput, testTarget); - $ctx.state = 26; - break; - case 26: - $ctx.state = 22; - return $__21; - case 22: - $__22 = $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); - $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(); - } - }, $__12, 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 _callee(af, deviceInfo) { + var data, featureSize, trainFeats, testFeats, trainTarget, testTarget, network, start, end, trainOutput, testOutput; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + 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."); + _context.next = 6; + return mnist.setup(af, true, 0.6); + + case 6: + data = _context.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(); + + network.train(trainFeats, trainTarget, { + alpha: 1.0, + maxEpochs: 300, + batchSize: 100, + maxError: 0.0001 + }); + _context.next = 17; + return af.waitAsync(); + + case 17: + end = now(); + + // Run the trained network and test accuracy. + + trainOutput = network.predict(trainFeats); + testOutput = network.predict(testFeats); + + console.log("Training set:"); + console.log("Accuracy on training data: " + accuracy(af, trainOutput, trainTarget).toFixed(2)); + + console.log("Test set:"); + console.log("Accuracy on testing data: " + accuracy(af, testOutput, testTarget).toFixed(2)); + + console.log("Training time: " + ((end - start) / 1000).toFixed(10) + " seconds\n"); + + case 25: + case "end": + return _context.stop(); + } + } + }, _callee, this); })); + common.runOnBestDevice(annDemo, "ANN Demo"); -//# sourceMappingURL=data:application/json;base64,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WUFBVSxDQUFDOzs7OztBQXREMUYsc0JBQXVCOztnQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7Z0JBc0RzQyxjQUFxRDtnQkFBckQsV0FBc0QsT0FBQyxFQUFBLENBQUM7Z0JBQXRGLDhCQUE2QjtnQkFBekMsV0FBVyxDQUFYLE9BQU0sUUFBK0Y7Ozs7QUFFckcsZ0JBQU0sSUFBSSxBQUFDLENBQUMsV0FBVSxDQUFDLENBQUM7Ozs7Z0JBQ3hCLENBQUEsT0FBTSxJQUFJO2dCQUF1QyxDQUFBLFFBQU8sQUFBQyxDQUFDLEVBQUMsQ0FBRyxXQUFTLENBQUcsV0FBUyxDQUFDOzs7OztBQXpEeEYsc0JBQXVCOztnQkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7Z0JBeURzQyxjQUFtRDtnQkFBbkQsV0FBb0QsT0FBQyxFQUFBLENBQUM7Z0JBQXBGLDhCQUE2QjtnQkFBekMsV0FBVyxDQUFYLE9BQU0sUUFBNkY7Ozs7QUFFbkcsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQSxDQUFDLENBQUMsR0FBRSxFQUFJLE1BQUksQ0FBQyxFQUFJLEtBQUcsQ0FBQyxRQUFRLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQSxDQUFDLGFBQVcsRUFBQyxDQUFDOzs7O0FBM0RqRixlQUFPLENBQUEsSUFBRyxJQUFJLEFBQUMsRUFBQyxDQUFBOztBQUNtQixFQUMvQixRQUE2QixLQUFHLENBQUMsQ0FBQztBQTBEdEMsQ0E1RHVELENBNER0RCxDQUFDO0FBRUYsS0FBSyxnQkFBZ0IsQUFBQyxDQUFDLE9BQU0sQ0FBRyxXQUFTLENBQUMsQ0FBQztBQUFBIiwiZmlsZSI6Im1hY2hpbmUtbGVhcm5pbmcvbmV1cmFsTmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiJleGFtcGxlcy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xubGV0IGNvbW1vbiA9IHJlcXVpcmUoXCIuLi9jb21tb25cIik7XG5sZXQgbW5pc3QgPSByZXF1aXJlKFwiLi9tbmlzdFwiKTtcbmxldCBBTk4gPSByZXF1aXJlKFwiLi9hbm5cIik7XG5sZXQgbm93ID0gcmVxdWlyZShcInBlcmZvcm1hbmNlLW5vd1wiKTtcblxubGV0IGFjY3VyYWN5ID0gYXN5bmMoZnVuY3Rpb24qKGFmLCBwcmVkaWN0ZWQsIHRhcmdldCkge1xuICAgIGxldCBwTWF4ID0geWllbGQgYWYuZmluZE1heEF0QXN5bmMocHJlZGljdGVkLCAxKTtcbiAgICBsZXQgdE1heCA9IHlpZWxkIGFmLmZpbmRNYXhBdEFzeW5jKHRhcmdldCwgMSk7XG4gICAgcmV0dXJuICgxMDAgKiAoeWllbGQgYWYuY291bnRBc3luYyhwTWF4LmluZGV4LmVxKHRNYXguaW5kZXgpKSkpIC8gdE1heC5pbmRleC5lbGVtZW50cygpO1xufSk7XG5cbmxldCBhbm5EZW1vID0gYXN5bmMoZnVuY3Rpb24qKGFmLCBkZXZpY2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJSdW5uaW5nIEFOTiBEZW1vIG9uIGRldmljZTpcXG5cIik7XG4gICAgY29tbW9uLnByaW50RGV2aWNlSW5mbyhkZXZpY2VJbmZvKTtcbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiU2V0dGluZyB1cCB0cmFpbmluZyBkYXRhLlwiKTtcbiAgICBsZXQgZGF0YSA9IHlpZWxkIG1uaXN0LnNldHVwKGFmLCB0cnVlLCAwLjYpO1xuXG4gICAgbGV0IGZlYXR1cmVTaXplID0gZGF0YS50cmFpbkltYWdlcy5lbGVtZW50cygpIC8gZGF0YS5udW1UcmFpbjtcblxuICAgIC8vIFJlc2hhcGUgaW1hZ2VzIGludG8gZmVhdHVyZSB2ZWN0b3JzXG4gICAgbGV0IHRyYWluRmVhdHMgPSBhZi50cmFuc3Bvc2UoYWYubW9kRGltcyhkYXRhLnRyYWluSW1hZ2VzLCBmZWF0dXJlU2l6ZSwgZGF0YS5udW1UcmFpbikpO1xuICAgIGxldCB0ZXN0RmVhdHMgPSBhZi50cmFuc3Bvc2UoYWYubW9kRGltcyhkYXRhLnRlc3RJbWFnZXMsIGZlYXR1cmVTaXplLCBkYXRhLm51bVRlc3QpKTtcblxuICAgIGxldCB0cmFpblRhcmdldCA9IGFmLnRyYW5zcG9zZShkYXRhLnRyYWluTGFiZWxzKTtcbiAgICBsZXQgdGVzdFRhcmdldCA9IGFmLnRyYW5zcG9zZShkYXRhLnRlc3RMYWJlbHMpO1xuXG4gICAgbGV0IG5ldHdvcmsgPSBuZXcgQU5OKGFmLCBbdHJhaW5GZWF0cy5kaW1zKDEpLCAxMDAsIDUwLCBkYXRhLm51bUNsYXNzZXNdKTtcblxuICAgIC8vIFRyYWluIG5ldHdvcmtcbiAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgIHlpZWxkIG5ldHdvcmsudHJhaW4oXG4gICAgICAgIHRyYWluRmVhdHMsXG4gICAgICAgIHRyYWluVGFyZ2V0LFxuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogMi4wLFxuICAgICAgICAgICAgbWF4RXBvY2hzOiAyNTAsXG4gICAgICAgICAgICBiYXRjaFNpemU6IDEwMCxcbiAgICAgICAgICAgIG1heEVycm9yOiAwLjVcbiAgICAgICAgfVxuICAgICk7XG4gICAgeWllbGQgYWYud2FpdEFzeW5jKCk7XG4gICAgY29uc3QgZW5kID0gbm93KCk7XG5cbiAgICAvLyBSdW4gdGhlIHRyYWluZWQgbmV0d29yayBhbmQgdGVzdCBhY2N1cmFjeS5cbiAgICBsZXQgdHJhaW5PdXRwdXQgPSBuZXR3b3JrLnByZWRpY3QodHJhaW5GZWF0cyk7XG4gICAgbGV0IHRlc3RPdXRwdXQgPSBuZXR3b3JrLnByZWRpY3QodGVzdEZlYXRzKTtcblxuICAgIGNvbnNvbGUubG9nKFwiVHJhaW5pbmcgc2V0OlwiKTtcbiAgICBjb25zb2xlLmxvZyhgQWNjdXJhY3kgb24gdHJhaW5pbmcgZGF0YTogJHsoeWllbGQgYWNjdXJhY3koYWYsIHRyYWluT3V0cHV0LCB0cmFpblRhcmdldCkpLnRvRml4ZWQoMil9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRlc3Qgc2V0OlwiKTtcbiAgICBjb25zb2xlLmxvZyhgQWNjdXJhY3kgb24gdGVzdGluZyAgZGF0YTogJHsoeWllbGQgYWNjdXJhY3koYWYsIHRlc3RPdXRwdXQsIHRlc3RUYXJnZXQpKS50b0ZpeGVkKDIpfWApO1xuXG4gICAgY29uc29sZS5sb2coYFRyYWluaW5nIHRpbWU6ICR7KChlbmQgLSBzdGFydCkgLyAxMDAwKS50b0ZpeGVkKDEwKX0gc2Vjb25kc1xcbmApO1xufSk7XG5cbmNvbW1vbi5ydW5PbkJlc3REZXZpY2UoYW5uRGVtbywgXCJBTk4gRGVtb1wiKTsiXX0= +//# 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..d416389 --- /dev/null +++ b/examples/es5/machine-learning/neuralNetwork.js.map @@ -0,0 +1 @@ +{"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/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..7a43599 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; @@ -22,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); }; @@ -35,44 +31,53 @@ 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); - return Math.sqrt(yield this.af.sumAsync(dif.mul(dif))); -}); + let sq = dif.mul(dif); + return Math.sqrt(this.af.sum(sq)) / sq.elements(); +}; 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.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(af.transpose(this.af.matMul(this.weights[i], delta))); - - // 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) { @@ -80,43 +85,56 @@ proto.predict = function (input) { return this.signal[this.numLayers - 1].copy(); }; -proto.train = async(function*(input, target, options) { - let af = this.af; - let Seq = this.af.Seq; +proto.train = function(input, target, options) { + let self = this; + let af = self.af; + let Seq = self.af.Seq; let numSamples = input.dims(0); let numBatches = numSamples / options.batchSize; let err = 0; + let allTime = 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; + af.scope(() => { + 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)); + 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 = self._calculateError(outVec, target.at(new Seq(startPos, endPos), af.span)); + }); + + const end = now(); + 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) { - console.log(`Converged on Epoc: ${i + 1}`); + console.log(`Converged on Epoch: ${i + 1}`); break; } - - console.log(`Epoch: ${i + 1}, Error: ${err.toFixed(4)}`); } return err; -}); +}; -module.exports = ANN; \ No newline at end of file +module.exports = ANN; 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; diff --git a/examples/es6/machine-learning/neuralNetwork.js b/examples/es6/machine-learning/neuralNetwork.js index a827aaa..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,14 +34,14 @@ let annDemo = async(function*(af, deviceInfo) { // Train network const start = now(); - yield network.train( + network.train( trainFeats, trainTarget, { - alpha: 2.0, - maxEpochs: 250, + alpha: 1.0, + maxEpochs: 300, batchSize: 100, - maxError: 0.5 + maxError: 0.0001 } ); yield af.waitAsync(); @@ -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/gulpfile.js b/gulpfile.js index 0c0ab31..e5f5e3d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,26 +29,40 @@ 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; +"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(traceur({sourceMaps: "inline"})) + .pipe(sourcemaps.init()) + .pipe(babel({ + presets: ['es2015'] + })) + .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(babel({ + presets: ['es2015'] + })) + .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(babel({ + presets: ['es2015'] + })) + .pipe(sourcemaps.write(".")) .pipe(gulp.dest("examples/es5")); }); @@ -67,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/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/lib/es5/borderType.js b/lib/es5/borderType.js index ce22300..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"; -"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=borderType.js.map diff --git a/lib/es5/borderType.js.map b/lib/es5/borderType.js.map new file mode 100644 index 0000000..d91100e --- /dev/null +++ b/lib/es5/borderType.js.map @@ -0,0 +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":["/*\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 b/lib/es5/cSpace.js index 96c2f22..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"; -"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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNTcGFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixLQUFHLENBQUcsRUFBQTtBQUNOLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxRQUFNLENBQUcsRUFBQTtBQUNULE9BQUssQ0FBRyxFQUFBO0FBQ1IsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJjU3BhY2UuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNTcGFjZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEdyYXk6IDAsIC8vLzwgR3JheXNjYWxlXG4gICAgUkdCOiAxLCAgICAgIC8vLzwgMy1jaGFubmVsIFJHQlxuICAgIEhTVjogMiwgICAgICAgLy8vPCAzLWNoYW5uZWwgSFNWXG4gICAgQUZfR1JBWTogMCwgLy8vPCBHcmF5c2NhbGVcbiAgICBBRl9SR0I6IDEsICAgICAgLy8vPCAzLWNoYW5uZWwgUkdCXG4gICAgQUZfSFNWOiAyICAgICAgIC8vLzwgMy1jaGFubmVsIEhTVlxufTsiXX0= +//# sourceMappingURL=cSpace.js.map diff --git a/lib/es5/cSpace.js.map b/lib/es5/cSpace.js.map new file mode 100644 index 0000000..74cf4d2 --- /dev/null +++ b/lib/es5/cSpace.js.map @@ -0,0 +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":["/*\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 b/lib/es5/col.js index 38440f1..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"; -"use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Col(index) { assert(_.isNumber(index)); + this.index = index; } + module.exports = Col; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoiY29sLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gQ29sKGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2w7Il19 +//# sourceMappingURL=col.js.map diff --git a/lib/es5/col.js.map b/lib/es5/col.js.map new file mode 100644 index 0000000..acaa97b --- /dev/null +++ b/lib/es5/col.js.map @@ -0,0 +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":["/*\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 b/lib/es5/cols.js index be16b54..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"; -"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; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoiY29scy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbHMoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2xzOyJdfQ== +//# sourceMappingURL=cols.js.map diff --git a/lib/es5/cols.js.map b/lib/es5/cols.js.map new file mode 100644 index 0000000..d380aac --- /dev/null +++ b/lib/es5/cols.js.map @@ -0,0 +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":["/*\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 b/lib/es5/complex.js index d99cfc7..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"; -"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; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxRQUFNLENBQUUsSUFBRyxDQUFHLENBQUEsSUFBRyxDQUFHO0FBQ3pCLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEIsS0FBRyxLQUFLLEVBQUksS0FBRyxDQUFDO0FBQ2hCLEtBQUcsS0FBSyxFQUFJLEtBQUcsQ0FBQztBQUNwQjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksUUFBTSxDQUFDO0FBQUEiLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIENvbXBsZXgocmVhbCwgaW1hZykge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKHJlYWwpKTtcbiAgICBhc3NlcnQoXy5pc051bWJlcihpbWFnKSk7XG5cbiAgICB0aGlzLnJlYWwgPSByZWFsO1xuICAgIHRoaXMuaW1hZyA9IGltYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcGxleDsiXX0= +//# sourceMappingURL=complex.js.map diff --git a/lib/es5/complex.js.map b/lib/es5/complex.js.map new file mode 100644 index 0000000..6849a23 --- /dev/null +++ b/lib/es5/complex.js.map @@ -0,0 +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":["/*\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 b/lib/es5/connectivity.js index 46d82af..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"; -"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=connectivity.js.map diff --git a/lib/es5/connectivity.js.map b/lib/es5/connectivity.js.map new file mode 100644 index 0000000..ca48d12 --- /dev/null +++ b/lib/es5/connectivity.js.map @@ -0,0 +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":["/*\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 b/lib/es5/convDomain.js index 6eabb09..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"; -"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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZEb21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsS0FBRyxDQUFHLEVBQUE7QUFDTixRQUFNLENBQUcsRUFBQTtBQUNULEtBQUcsQ0FBRyxFQUFBO0FBQ04sYUFBVyxDQUFHLEVBQUE7QUFDZCxnQkFBYyxDQUFHLEVBQUE7QUFDakIsYUFBVyxDQUFHLEVBQUE7QUFBQSxBQUNsQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udkRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgY29udkRvbWFpbiA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGF1dG86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIHNwYXRpYWw6IDEsIC8vLzwgUGVyZm9ybSBjb252b2x1dGlvbiBpbiBzcGF0aWFsIGRvbWFpblxuICAgIGZyZXE6IDIsICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbiAgICBBRl9DT05WX0FVVE86IDAsICAgIC8vLzwgQXJyYXlGaXJlIGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIHJpZ2h0IGNvbnZvbHV0aW9uIGFsZ29yaXRobVxuICAgIEFGX0NPTlZfU1BBVElBTDogMSwgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIHNwYXRpYWwgZG9tYWluXG4gICAgQUZfQ09OVl9GUkVROiAyICAgLy8vPCBQZXJmb3JtIGNvbnZvbHV0aW9uIGluIGZyZXF1ZW5jeSBkb21haW5cbn07Il19 +//# sourceMappingURL=convDomain.js.map diff --git a/lib/es5/convDomain.js.map b/lib/es5/convDomain.js.map new file mode 100644 index 0000000..773626a --- /dev/null +++ b/lib/es5/convDomain.js.map @@ -0,0 +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":["/*\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 6ffe394..a450cdb 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"; -"use strict"; + var convMode = module.exports = { - default: 0, - expand: 1, - AF_CONV_DEFAULT: 0, - 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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnZNb2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBSTVCLFFBQU0sQ0FBRyxFQUFBO0FBS1QsT0FBSyxDQUFHLEVBQUE7QUFJUixnQkFBYyxDQUFHLEVBQUE7QUFLakIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiY29udk1vZGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGNvbnZNb2RlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIGRlZmF1bHQ6IDAsXG5cbiAgICAvLy9cbiAgICAvLy8gT3V0cHV0IG9mIHRoZSBjb252b2x1dGlvbiBpcyBzaWduYWxfbGVuICsgZmlsdGVyX2xlbiAtIDFcbiAgICAvLy9cbiAgICBleHBhbmQ6IDEsXG4gICAgLy8vXG4gICAgLy8vIE91dHB1dCBvZiB0aGUgY29udm9sdXRpb24gaXMgdGhlIHNhbWUgc2l6ZSBhcyBpbnB1dFxuICAgIC8vL1xuICAgIEFGX0NPTlZfREVGQVVMVDogMCxcblxuICAgIC8vL1xuICAgIC8vLyBPdXRwdXQgb2YgdGhlIGNvbnZvbHV0aW9uIGlzIHNpZ25hbF9sZW4gKyBmaWx0ZXJfbGVuIC0gMVxuICAgIC8vL1xuICAgIEFGX0NPTlZfRVhQQU5EOiAxXG59OyJdfQ== +//# sourceMappingURL=convMode.js.map diff --git a/lib/es5/convMode.js.map b/lib/es5/convMode.js.map new file mode 100644 index 0000000..661e405 --- /dev/null +++ b/lib/es5/convMode.js.map @@ -0,0 +1 @@ +{"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 b/lib/es5/dim4.js index e5ca4cf..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"; -"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.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]; + this.ndims = this.nDims = index + 1; + 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=dim4.js.map diff --git a/lib/es5/dim4.js.map b/lib/es5/dim4.js.map new file mode 100644 index 0000000..8e5d96a --- /dev/null +++ b/lib/es5/dim4.js.map @@ -0,0 +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":["/*\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/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/dtype.js b/lib/es5/dtype.js index 857b39a..43e0ec7 100644 --- a/lib/es5/dtype.js +++ b/lib/es5/dtype.js @@ -1,5 +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"; -"use strict"; + var dType = module.exports = { f32: 0, c32: 1, @@ -12,4 +43,4 @@ var dType = module.exports = { s64: 8, u64: 9 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR0eXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQ3pCLElBQUUsQ0FBRyxFQUFBO0FBQ0wsSUFBRSxDQUFHLEVBQUE7QUFDTCxJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQ0wsR0FBQyxDQUFHLEVBQUE7QUFDSixJQUFFLENBQUcsRUFBQTtBQUNMLElBQUUsQ0FBRyxFQUFBO0FBQUEsQUFDVCxDQUFDO0FBQUEiLCJmaWxlIjoiZHR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGRUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZjMyOiAwLFxuICAgIGMzMjogMSxcbiAgICBmNjQ6IDIsXG4gICAgYzY0OiAzLFxuICAgIGI4OiA0LFxuICAgIHMzMjogNSxcbiAgICB1MzI6IDYsXG4gICAgdTg6IDcsXG4gICAgczY0OiA4LFxuICAgIHU2NDogOVxufTsiXX0= +//# sourceMappingURL=dtype.js.map diff --git a/lib/es5/dtype.js.map b/lib/es5/dtype.js.map new file mode 100644 index 0000000..58e17a2 --- /dev/null +++ b/lib/es5/dtype.js.map @@ -0,0 +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":["/*\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 b/lib/es5/ext.js index 3b4d541..c8d5964 100644 --- a/lib/es5/ext.js +++ b/lib/es5/ext.js @@ -1,232 +1,156 @@ +/* +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"; -"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("998") > 0; -} + function synchronify(af, f) { - return function() { - var err; - var res; - var done; - var cb = function(e, r) { - err = e; - res = r; - done = true; + 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); + f.apply(this, args); + while (!done) { + af._doEvents(); + }return res; }; - 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 { - af._gc(gcTime); - } - } - } - if (err) - throw err; - return res; - }; } + function installAsyncAndSync(af, obj, name) { - if (_.isUndefined(name)) { - var $__3 = true; - var $__4 = false; - var $__5 = 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; - { - installAsyncAndSync(af, obj, key); - } - } - } catch ($__6) { - $__4 = true; - $__5 = $__6; - } finally { - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; + 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 $__7() { - var self, - args, - call, - err, - i, - $__8, - $__9, - 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); - } - }; - 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: - $__8 = call(); - $ctx.state = 6; - break; - case 6: - $ctx.state = 2; - return $__8; - case 2: - $__9 = $ctx.sent; - $ctx.state = 4; - break; - case 4: - $ctx.returnValue = $__9; - $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; - } - af._gc(gcTime); - err = e; - $ctx.state = 14; - break; - case 18: - throw err; - $ctx.state = -2; - break; - default: - return $ctx.end(); - } - }, $__7, 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; + + if (name !== "AFArray") { + 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); } - af._gc(gcTime); - err = e; - } } - throw err; - }; } - } } + function ext(af) { - installAsyncAndSync(af, af); - installAsyncAndSync(af, af.AFArray); - installAsyncAndSync(af, af.AFArray.prototype); - _.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) - }); + 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 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 + }); } + module.exports = ext; -//# sourceMappingURL=data:application/json;base64,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Q0FBQztBQUNwQixNQUFFLENBQUcsQ0FBQSxPQUFNLEFBQUMsQ0FBQyxPQUFNLENBQUM7QUFDcEIsT0FBRyxDQUFHLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDO0FBQ3RCLE9BQUcsQ0FBRyxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQztBQUN0QixhQUFTLENBQUcsVUFBVSxBQUFELENBQUc7QUFDcEIsQUFBSSxRQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsSUFBRyxVQUFVLEFBQUMsRUFBQyxDQUFDO0FBQzlCLFFBQUk7QUFDQSxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxJQUFHLGVBQWUsQUFBQyxFQUFDLENBQUM7QUFDakMsQUFBSSxVQUFBLENBQUEsTUFBSyxFQUFJLEdBQUMsQ0FBQztBQUNmLG1CQUFhLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxNQUFJLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRztBQUM1QixhQUFHLFVBQVUsQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ2pCLEFBQUksWUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLElBQUcsV0FBVyxBQUFDLEVBQUMsQ0FBQztBQUM1QixhQUFHLEdBQUcsRUFBSSxFQUFBLENBQUM7QUFDWCxlQUFLLEtBQUssQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDO1FBQ3JCO0FBQUEsQUFDQSxhQUFPLE9BQUssQ0FBQztNQUNqQixDQUNBLE9BQVE7QUFDSixXQUFHLFVBQVUsQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO01BQzNCO0FBQUEsSUFDSjtBQUNBLE9BQUcsQ0FBRyxDQUFBLE9BQU0sQUFBQyxDQUFDLFlBQVcsQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDO0FBQUEsRUFDbEMsQ0FBQyxDQUFDO0FBQ047QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLElBQUUsQ0FBQztBQUFBIiwiZmlsZSI6ImV4dC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5cbmNvbnN0IHJldHJ5Q291bnQgPSA1O1xuY29uc3QgZ2NUaW1lID0gMTAwMDtcblxuZnVuY3Rpb24gaXNPdXRPZk1lbW9yeUVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoXCI5OThcIikgPiAwO1xufVxuXG5mdW5jdGlvbiBzeW5jaHJvbmlmeShhZiwgZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlcnI7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHZhciBkb25lO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIHJlcyA9IHI7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpLmNvbmNhdChjYik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGYuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB3aGlsZSAoIWRvbmUpIGFmLl9kb0V2ZW50cygpO1xuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZi5fZ2MoZ2NUaW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBvYmosIG5hbWUpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIG9iaiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IFwiQUZBcnJheVwiKSB7XG4gICAgICAgIGxldCBmID0gb2JqW25hbWVdO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGYpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihvYmpbbmFtZSArIFwiQXN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIkFzeW5jXCJdID0gYXN5bmMoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbHVlYmlyZChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKGUsIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV0cnlDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCBjYWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPdXRPZk1lbW9yeUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmLl9nYyhnY1RpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24ob2JqW25hbWUgKyBcIlN5bmNcIl0pKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWUgKyBcIlN5bmNcIl0gPSBzeW5jaHJvbmlmeShhZiwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc091dE9mTWVtb3J5RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWYuX2djKGdjVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dChhZikge1xuICAgIGluc3RhbGxBc3luY0FuZFN5bmMoYWYsIGFmKTtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZi5BRkFycmF5KTtcbiAgICBpbnN0YWxsQXN5bmNBbmRTeW5jKGFmLCBhZi5BRkFycmF5LnByb3RvdHlwZSk7XG5cbiAgICBfLmV4dGVuZChhZiwge1xuICAgICAgICBlbmQ6IC0xLFxuICAgICAgICBzcGFuOiBudWxsLFxuICAgICAgICBhbGw6IC0xLFxuICAgICAgICBkdHlwZTogcmVxdWlyZShcIi4vZHR5cGVcIiksXG4gICAgICAgIGRUeXBlOiByZXF1aXJlKFwiLi9kdHlwZVwiKSxcbiAgICAgICAgc291cmNlOiByZXF1aXJlKFwiLi9zb3VyY2VcIiksXG4gICAgICAgIG1hdGNoVHlwZTogcmVxdWlyZShcIi4vbWF0Y2hUeXBlXCIpLFxuICAgICAgICBjU3BhY2U6IHJlcXVpcmUoXCIuL2NTcGFjZVwiKSxcbiAgICAgICAgQ1NwYWNlOiByZXF1aXJlKFwiLi9jU3BhY2VcIiksXG4gICAgICAgIGNvbm5lY3Rpdml0eTogcmVxdWlyZShcIi4vY29ubmVjdGl2aXR5XCIpLFxuICAgICAgICBib3JkZXJUeXBlOiByZXF1aXJlKFwiLi9ib3JkZXJUeXBlXCIpLFxuICAgICAgICBpbnRlcnBUeXBlOiByZXF1aXJlKFwiLi9pbnRlcnBUeXBlXCIpLFxuICAgICAgICBtYXRQcm9wOiByZXF1aXJlKFwiLi9tYXRQcm9wXCIpLFxuICAgICAgICBub3JtVHlwZTogcmVxdWlyZShcIi4vbm9ybVR5cGVcIiksXG4gICAgICAgIGNvbnZNb2RlOiByZXF1aXJlKFwiLi9jb252TW9kZVwiKSxcbiAgICAgICAgY29udkRvbWFpbjogcmVxdWlyZShcIi4vY29udkRvbWFpblwiKSxcbiAgICAgICAgRGltNDogcmVxdWlyZShcIi4vZGltNFwiKSxcbiAgICAgICAgU2VxOiByZXF1aXJlKFwiLi9zZXFcIiksXG4gICAgICAgIENvbXBsZXg6IHJlcXVpcmUoXCIuL2NvbXBsZXhcIiksXG4gICAgICAgIFJvdzogcmVxdWlyZShcIi4vcm93XCIpLFxuICAgICAgICBDb2w6IHJlcXVpcmUoXCIuL2NvbFwiKSxcbiAgICAgICAgUm93czogcmVxdWlyZShcIi4vcm93c1wiKSxcbiAgICAgICAgQ29sczogcmVxdWlyZShcIi4vY29sc1wiKSxcbiAgICAgICAgZ2V0RGV2aWNlczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmdldERldmljZSgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLmdldERldmljZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERldmljZShpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZm8gPSB0aGlzLmRldmljZUluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgaW5mby5pZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZXZpY2UoY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdmb3I6IHJlcXVpcmUoXCIuL21ha2VHZm9yXCIpKGFmKVxuICAgIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dDsiXX0= +//# sourceMappingURL=ext.js.map diff --git a/lib/es5/ext.js.map b/lib/es5/ext.js.map new file mode 100644 index 0000000..1e80d20 --- /dev/null +++ b/lib/es5/ext.js.map @@ -0,0 +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 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/lib/es5/index.js b/lib/es5/index.js index e15e452..cb7989d 100644 --- a/lib/es5/index.js +++ b/lib/es5/index.js @@ -1,60 +1,80 @@ +/* +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"; -"use strict"; + var _ = require("lodash"); var ext = require("./ext"); var Bluebird = require("bluebird"); -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 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 cpuDriver || (cpuDriver = require("bindings")("arrayfire_js_CPU")); + case "cuda": + return cudaDriver || (cudaDriver = require("bindings")("arrayfire_js_CUDA")); + case "opencl": + return openCLDriver || (openCLDriver = 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"])[$traceurRuntime.toProperty(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); - } catch (e) {} - } - } - } catch ($__6) { - $__4 = true; - $__5 = $__6; - } finally { - try { - if (!$__3 && $__0.return != null) { - $__0.return(); - } - } finally { - if ($__4) { - throw $__5; - } + 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); + } } - } - return platforms; + return platforms; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO0FBQzFCLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxDQUFDO0FBRWxDLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJLFVBQVMsRUFBQyxDQUFHO0FBQ3RDLEFBQUksSUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLENBQUEsU0FBUyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUEsQ0FBSSxDQUFBLEVBQUMsS0FBSyxBQUFDLEVBQUMsWUFBWSxBQUFDLEVBQUMsQ0FBQSxDQUFJLEtBQUcsQ0FBQztBQUN6RCxJQUFFLEVBQUksQ0FBQSxHQUFFLEdBQUssTUFBSSxDQUFDO0FBQ2xCLFNBQVMsU0FBTyxDQUFFLEFBQUQsQ0FBRztBQUNoQixXQUFRLEdBQUU7QUFDTixTQUFLLE1BQUk7QUFDTCxhQUFPLENBQUEsT0FBTSxBQUFDLENBQUMsVUFBUyxDQUFDLEFBQUMsQ0FBQyxrQkFBaUIsQ0FBQyxDQUFDO0FBQUEsQUFDbEQsU0FBSyxPQUFLO0FBQ04sYUFBTyxDQUFBLE9BQU0sQUFBQyxDQUFDLFVBQVMsQ0FBQyxBQUFDLENBQUMsbUJBQWtCLENBQUMsQ0FBQztBQUFBLEFBQ25ELFNBQUssU0FBTztBQUNSLGFBQU8sQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQUFBQyxDQUFDLHFCQUFvQixDQUFDLENBQUM7QUFBQSxBQUNyRDtBQUNJLFlBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxZQUFXLEVBQUksR0FBQyxDQUFBLENBQUksc0JBQW9CLENBQUMsQ0FBQztBQUR2RCxJQUVYO0VBQ0o7QUFBQSxBQUNJLElBQUEsQ0FBQSxFQUFDLEVBQUksQ0FBQSxRQUFPLEFBQUMsRUFBQyxDQUFDO0FBQ25CLEtBQUksQ0FBQyxFQUFDLFdBQVcsQ0FBRztBQUNoQixNQUFFLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNQLEtBQUMsV0FBVyxFQUFJLEtBQUcsQ0FBQztFQUN4QjtBQUFBLEFBQ0EsT0FBTyxHQUFDLENBQUM7QUFDYixDQUFDO0FBRUQsSUFBSSxtQkFBbUIsRUFBSSxVQUFTLEFBQUQ7QUFDL0IsQUFBSSxJQUFBLENBQUEsU0FBUSxFQUFJLEdBQUMsQ0FBQztBQTVEZCxBQUFJLElBQUEsT0FBb0IsS0FBRyxDQUFDO0FBQzVCLEFBQUksSUFBQSxPQUFvQixNQUFJLENBQUM7QUFDN0IsQUFBSSxJQUFBLE9BQW9CLFVBQVEsQ0FBQztBQUNqQyxJQUFJO0FBSEosUUFBUyxHQUFBLE9BRGpCLEtBQUssRUFBQSxBQUM0QjtBQUNoQixhQUFvQixDQUFBLENBNERsQixDQUFDLEtBQUksQ0FBRyxPQUFLLENBQUcsU0FBTyxDQUFDLENBNURZLENBQ2xDLGVBQWMsV0FBVyxBQUFDLENBQUMsTUFBSyxTQUFTLENBQUMsQ0FBQyxBQUFDLEVBQUMsQ0FDckQsRUFBQyxDQUFDLE1BQW9CLENBQUEsQ0FBQyxNQUFvQixDQUFBLFNBQXFCLEFBQUMsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUN6RSxPQUFvQixLQUFHLENBQUc7UUF5RDFCLEdBQUM7QUFBZ0M7QUFDdEMsVUFBSTtBQUNBLEFBQUksWUFBQSxDQUFBLElBQUcsRUFBSSxDQUFBLEtBQUksQUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3BCLGtCQUFRLEtBQUssQUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQ0EsT0FBTSxDQUFBLENBQUcsR0FDVDtBQUFBLE1BQ0o7SUE3REk7QUFBQSxFQUZBLENBQUUsWUFBMEI7QUFDMUIsU0FBb0IsS0FBRyxDQUFDO0FBQ3hCLGNBQW9DLENBQUM7RUFDdkMsQ0FBRSxPQUFRO0FBQ1IsTUFBSTtBQUNGLFNBQUksS0FBaUIsR0FBSyxDQUFBLFdBQXVCLEdBQUssS0FBRyxDQUFHO0FBQzFELGtCQUF3QixBQUFDLEVBQUMsQ0FBQztNQUM3QjtBQUFBLElBQ0YsQ0FBRSxPQUFRO0FBQ1IsY0FBd0I7QUFDdEIsa0JBQXdCO01BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxBQW1ESixPQUFPLFVBQVEsQ0FBQztBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGV4dCA9IHJlcXVpcmUoXCIuL2V4dFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxubGV0IGVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpZCkge1xuICAgIGxldCBkaWQgPSBfLmlzU3RyaW5nKGlkKSA/IGlkLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBkaWQgPSBkaWQgfHwgXCJjcHVcIjtcbiAgICBmdW5jdGlvbiBjcmVhdGVBRigpIHtcbiAgICAgICAgc3dpdGNoIChkaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjcHVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZShcImJpbmRpbmdzXCIpKFwiYXJyYXlmaXJlX2pzX0NQVVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJjdWRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCJiaW5kaW5nc1wiKShcImFycmF5ZmlyZV9qc19DVURBXCIpO1xuICAgICAgICAgICAgY2FzZSBcIm9wZW5jbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlKFwiYmluZGluZ3NcIikoXCJhcnJheWZpcmVfanNfT3BlbkNMXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGF0Zm9ybSAnXCIgKyBpZCArIFwiJyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgYWYgPSBjcmVhdGVBRigpO1xuICAgIGlmICghYWYuX19leHRlbmRlZCkge1xuICAgICAgICBleHQoYWYpO1xuICAgICAgICBhZi5fX2V4dGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFmO1xufTtcblxuZW50cnkuc3VwcG9ydGVkUGxhdGZvcm1zID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHBsYXRmb3JtcyA9IFtdO1xuICAgIGZvciAobGV0IGlkIG9mIFtcIkNQVVwiLCBcIkNVREFcIiwgXCJPcGVuQ0xcIl0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmaXJlID0gZW50cnkoaWQpO1xuICAgICAgICAgICAgcGxhdGZvcm1zLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGxhdGZvcm1zO1xufTsiXX0= +//# sourceMappingURL=index.js.map diff --git a/lib/es5/index.js.map b/lib/es5/index.js.map new file mode 100644 index 0000000..9b58d76 --- /dev/null +++ b/lib/es5/index.js.map @@ -0,0 +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,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/es5/interpType.js b/lib/es5/interpType.js index e442665..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"; -"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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVycFR5cGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsVUFBUyxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDOUIsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFVBQVEsQ0FBSSxFQUFBO0FBQ1osTUFBSSxDQUFHLEVBQUE7QUFDUCxrQkFBZ0IsQ0FBRyxFQUFBO0FBQ25CLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBSSxFQUFBO0FBQ3JCLGdCQUFjLENBQUcsRUFBQTtBQUFBLEFBQ3JCLENBQUM7QUFBQSIsImZpbGUiOiJpbnRlcnBUeXBlLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBpbnRlcnBUeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmVhcmVzdDogMCwgIC8vLzwgTmVhcmVzdCBJbnRlcnBvbGF0aW9uXG4gICAgbGluZWFyOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBiaWxpbmVyYXIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBjdWJpYzogMywgICAgLy8vPCBDdWJpYyBJbnRlcnBvbGF0aW9uLFxuICAgIEFGX0lOVEVSUF9ORUFSRVNUOiAwLCAgLy8vPCBOZWFyZXN0IEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfTElORUFSOiAxLCAgIC8vLzwgTGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQklMSU5FQVIgOiAyLCAvLy88IEJpbGluZWFyIEludGVycG9sYXRpb25cbiAgICBBRl9JTlRFUlBfQ1VCSUM6IDMgICAgIC8vLzwgQ3ViaWMgSW50ZXJwb2xhdGlvblxufTsiXX0= +//# sourceMappingURL=interpType.js.map diff --git a/lib/es5/interpType.js.map b/lib/es5/interpType.js.map new file mode 100644 index 0000000..d082e8b --- /dev/null +++ b/lib/es5/interpType.js.map @@ -0,0 +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":["/*\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 b/lib/es5/makeGfor.js index 2b21a81..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"; -"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; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ha2VHZm9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLENBQUEsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3pCLEFBQUksRUFBQSxDQUFBLE1BQUssRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3JDLEFBQUksRUFBQSxDQUFBLEdBQUUsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDO0FBRTFCLE9BQVMsU0FBTyxDQUFFLEVBQUMsQ0FBRztBQUNsQixPQUFPLFNBQVMsS0FBRyxDQUFFLEFBQUQsQ0FBRztBQUNuQixBQUFJLE1BQUEsQ0FBQSxJQUFHLEVBQUksRUFBQyxDQUFBLENBQUM7QUFDYixlQUFZLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLFNBQVEsT0FBTyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7QUFDdEMsU0FBSSxDQUFBLFdBQVcsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFHO0FBQzVCLFdBQUcsRUFBSSxFQUFBLENBQUM7QUFDUixhQUFLO01BQ1Q7QUFBQSxJQUNKO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFDLENBQUEsQ0FBRztBQUNiLFVBQU0sSUFBSSxNQUFJLEFBQUMsQ0FBQyxrQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZEO0FBQUEsQUFDQSxPQUFJLElBQUcsSUFBTSxFQUFBLENBQUc7QUFDWixVQUFNLElBQUksTUFBSSxBQUFDLENBQUMseUJBQXdCLENBQUMsQ0FBQztJQUM5QztBQUFBLEFBQ0ksTUFBQSxDQUFBLE9BQU0sRUFBSSxDQUFBLFNBQVEsQ0FBRSxJQUFHLENBQUMsQ0FBQztBQUM3QixPQUFJLFNBQVEsT0FBTyxFQUFJLENBQUEsSUFBRyxFQUFJLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLEVBQUksRUFBQSxDQUFDLENBQUc7QUFDckQsWUFBTSxFQUFJLENBQUEsU0FBUSxDQUFFLElBQUcsRUFBSSxFQUFBLENBQUMsQ0FBQztJQUNqQztBQUFBLEFBQ0ksTUFBQSxDQUFBLEdBQUUsQ0FBQztBQUNQLE9BQUksSUFBRyxJQUFNLEVBQUEsQ0FBRztBQUNaLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQy9CLEtBQ0ssS0FBSSxJQUFHLElBQU0sRUFBQSxDQUFHO0FBQ2pCLFFBQUUsRUFBSSxJQUFJLElBQUUsQUFBQyxDQUFDLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBRyxDQUFBLFNBQVEsQ0FBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQ0s7QUFDRCxVQUFNLElBQUksTUFBSSxBQUFDLENBQUMsa0NBQWlDLENBQUMsQ0FBQztJQUN2RDtBQUFBLEFBQ0EsTUFBRSxPQUFPLEVBQUksS0FBRyxDQUFDO0FBQ2pCLEtBQUMsWUFBWSxBQUFDLEVBQUMsQ0FBQztBQUNoQixNQUFJO0FBQ0EsY0FBUSxDQUFFLElBQUcsQ0FBQyxLQUFLLEFBQUMsQ0FBQyxPQUFNLENBQUcsSUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FDQSxPQUFRO0FBQ0osT0FBQyxZQUFZLEFBQUMsRUFBQyxDQUFDO0lBQ3BCO0FBQUEsRUFDSixDQUFBO0FBQ0o7QUFBQSxBQUVBLEtBQUssUUFBUSxFQUFJLFNBQU8sQ0FBQztBQUFBIiwiZmlsZSI6Im1ha2VHZm9yLmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbiBDb3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IFNlcSA9IHJlcXVpcmUoXCIuL3NlcVwiKTtcblxuZnVuY3Rpb24gbWFrZUdmb3IoYWYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2ZvcigpIHtcbiAgICAgICAgbGV0IGZQb3MgPSAtMTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZlBvcyA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZQb3MgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb2R5IGZ1bmN0aW9uIGFyZ3VtZW50IGV4cGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZlBvcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VxIGFyZ3VtZW50cyBleHBlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvc107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gZlBvcyArIDEgJiYgXy5pc09iamVjdChmUG9zICsgMSkpIHtcbiAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudHNbZlBvcyArIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXE7XG4gICAgICAgIGlmIChmUG9zID09PSAxKSB7XG4gICAgICAgICAgICBzZXEgPSBuZXcgU2VxKGFyZ3VtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZlBvcyA9PT0gMikge1xuICAgICAgICAgICAgc2VxID0gbmV3IFNlcShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBTZXEgYXJndW1lbnRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXEuaXNHRm9yID0gdHJ1ZTtcbiAgICAgICAgYWYuX2dmb3JUb2dnbGUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFyZ3VtZW50c1tmUG9zXS5jYWxsKHRoaXNBcmcsIHNlcSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhZi5fZ2ZvclRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1ha2VHZm9yOyJdfQ== +//# sourceMappingURL=makeGfor.js.map diff --git a/lib/es5/makeGfor.js.map b/lib/es5/makeGfor.js.map new file mode 100644 index 0000000..51f9e19 --- /dev/null +++ b/lib/es5/makeGfor.js.map @@ -0,0 +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,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/matProp.js b/lib/es5/matProp.js index 0373c01..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"; -"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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdFByb3AuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsT0FBTSxFQUFJLENBQUEsTUFBSyxRQUFRLEVBQUk7QUFDM0IsS0FBRyxDQUFVLEVBQUE7QUFDYixNQUFJLENBQVMsRUFBQTtBQUNiLE9BQUssQ0FBUSxFQUFBO0FBQ2IsTUFBSSxDQUFTLEdBQUM7QUFDZCxNQUFJLENBQVMsR0FBQztBQUNkLFNBQU8sQ0FBTSxJQUFFO0FBQ2YsSUFBRSxDQUFXLElBQUU7QUFDZixPQUFLLENBQVEsS0FBRztBQUNoQixPQUFLLENBQVEsS0FBRztBQUNoQixRQUFNLENBQU8sS0FBRztBQUNoQixVQUFRLENBQUssS0FBRztBQUNoQixZQUFVLENBQVUsRUFBQTtBQUNwQixhQUFXLENBQVMsRUFBQTtBQUNwQixjQUFZLENBQVEsRUFBQTtBQUNwQixhQUFXLENBQVMsR0FBQztBQUNyQixhQUFXLENBQVMsR0FBQztBQUNyQixpQkFBZSxDQUFLLElBQUU7QUFDdEIsV0FBUyxDQUFXLElBQUU7QUFDdEIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsY0FBWSxDQUFRLEtBQUc7QUFDdkIsZ0JBQWMsQ0FBTSxLQUFHO0FBQ3ZCLGtCQUFnQixDQUFJLEtBQUc7QUFBQSxBQUMzQixDQUFDO0FBQUEiLCJmaWxlIjoibWF0UHJvcC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgbWF0UHJvcCA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5vbmUgICAgICAgOiAwLCAgICAvLy88IERlZmF1bHRcbiAgICB0cmFucyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBjVHJhbnMgICAgIDogMiwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIGNvbmp1Z2F0ZSB0YW5zcG9zZWRcbiAgICB1cHBlciAgICAgIDogMzIsICAgLy8vPCBNYXRyaXggaXMgdXBwZXIgdHJpYW5ndWxhclxuICAgIGxvd2VyICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgZGlhZ1VuaXQgICA6IDEyOCwgIC8vLzwgTWF0cml4IGRpYWdvbmFsIGNvbnRhaW5zIHVuaXRhcnkgdmFsdWVzXG4gICAgc3ltICAgICAgICA6IDUxMiwgIC8vLzwgTWF0cml4IGlzIHN5bW1ldHJpY1xuICAgIHBvc0RlZiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIG9ydGhvZyAgICAgOiAyMDQ4LCAvLy88IE1hdHJpeCBpcyBvcnRob2dvbmFsXG4gICAgdHJpRGlhZyAgICA6IDQwOTYsIC8vLzwgTWF0cml4IGlzIHRyaSBkaWFnb25hbFxuICAgIGJsb2NrRGlhZyAgOiA4MTkyLCAgLy8vPCBNYXRyaXggaXMgYmxvY2sgZGlhZ29uYWxcbiAgICBBRl9NQVRfTk9ORSAgICAgICA6IDAsICAgIC8vLzwgRGVmYXVsdFxuICAgIEFGX01BVF9UUkFOUyAgICAgIDogMSwgICAgLy8vPCBEYXRhIG5lZWRzIHRvIGJlIHRyYW5zcG9zZWRcbiAgICBBRl9NQVRfQ1RSQU5TICAgICA6IDIsICAgIC8vLzwgRGF0YSBuZWVkcyB0byBiZSBjb25qdWdhdGUgdGFuc3Bvc2VkXG4gICAgQUZfTUFUX1VQUEVSICAgICAgOiAzMiwgICAvLy88IE1hdHJpeCBpcyB1cHBlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0xPV0VSICAgICAgOiA2NCwgICAvLy88IE1hdHJpeCBpcyBsb3dlciB0cmlhbmd1bGFyXG4gICAgQUZfTUFUX0RJQUdfVU5JVCAgOiAxMjgsICAvLy88IE1hdHJpeCBkaWFnb25hbCBjb250YWlucyB1bml0YXJ5IHZhbHVlc1xuICAgIEFGX01BVF9TWU0gICAgICAgIDogNTEyLCAgLy8vPCBNYXRyaXggaXMgc3ltbWV0cmljXG4gICAgQUZfTUFUX1BPU0RFRiAgICAgOiAxMDI0LCAvLy88IE1hdHJpeCBpcyBwb3NpdGl2ZSBkZWZpbml0ZVxuICAgIEFGX01BVF9PUlRIT0cgICAgIDogMjA0OCwgLy8vPCBNYXRyaXggaXMgb3J0aG9nb25hbFxuICAgIEFGX01BVF9UUklfRElBRyAgIDogNDA5NiwgLy8vPCBNYXRyaXggaXMgdHJpIGRpYWdvbmFsXG4gICAgQUZfTUFUX0JMT0NLX0RJQUcgOiA4MTkyICAvLy88IE1hdHJpeCBpcyBibG9jayBkaWFnb25hbFxufTsiXX0= +//# sourceMappingURL=matProp.js.map diff --git a/lib/es5/matProp.js.map b/lib/es5/matProp.js.map new file mode 100644 index 0000000..5ac1789 --- /dev/null +++ b/lib/es5/matProp.js.map @@ -0,0 +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":["/*\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 b/lib/es5/matchType.js index b292ba0..6444be1 100644 --- a/lib/es5/matchType.js +++ b/lib/es5/matchType.js @@ -1,5 +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"; -"use strict"; + var matchType = module.exports = { SAD: 0, zSAD: 1, @@ -20,4 +51,4 @@ var matchType = module.exports = { AF_ZNCC: 7, AF_SHD: 8 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGNoVHlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxTQUFRLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUM3QixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sS0FBRyxDQUFHLEVBQUE7QUFDTixJQUFFLENBQUcsRUFBQTtBQUNMLEtBQUcsQ0FBRyxFQUFBO0FBQ04sSUFBRSxDQUFHLEVBQUE7QUFDTCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxPQUFLLENBQUcsRUFBQTtBQUNSLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsT0FBSyxDQUFHLEVBQUE7QUFBQSxBQUNaLENBQUM7QUFBQSIsImZpbGUiOiJtYXRjaFR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG1hdGNoVHlwZSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFNBRDogMCxcbiAgICB6U0FEOiAxLFxuICAgIGxTQUQ6IDIsXG4gICAgU1NEOiAzLFxuICAgIHpTU0Q6IDQsXG4gICAgbFNTRDogNSxcbiAgICBOQ0M6IDYsXG4gICAgek5DQzogNyxcbiAgICBTSEQ6IDgsXG4gICAgQUZfU0FEOiAwLFxuICAgIEFGX1pTQUQ6IDEsXG4gICAgQUZfTFNBRDogMixcbiAgICBBRl9TU0Q6IDMsXG4gICAgQUZfWlNTRDogNCxcbiAgICBBRl9MU1NEOiA1LFxuICAgIEFGX05DQzogNixcbiAgICBBRl9aTkNDOiA3LFxuICAgIEFGX1NIRDogOFxufTsiXX0= +//# sourceMappingURL=matchType.js.map diff --git a/lib/es5/matchType.js.map b/lib/es5/matchType.js.map new file mode 100644 index 0000000..7e0546c --- /dev/null +++ b/lib/es5/matchType.js.map @@ -0,0 +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":["/*\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 b/lib/es5/normType.js index 77ff9a0..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"; -"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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1UeXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLFdBQVcsQ0FBQztBQUVaLEFBQUksRUFBQSxDQUFBLFFBQU8sRUFBSSxDQUFBLE1BQUssUUFBUSxFQUFJO0FBQzVCLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxRQUFNLENBQUcsRUFBQTtBQUNULFFBQU0sQ0FBRyxFQUFBO0FBQ1QsUUFBTSxDQUFHLEVBQUE7QUFDVCxVQUFRLENBQUcsRUFBQTtBQUNYLFFBQU0sQ0FBRyxFQUFBO0FBQ1QsVUFBUSxDQUFHLEVBQUE7QUFDWCxPQUFLLENBQUcsRUFBQTtBQUNSLGlCQUFlLENBQUcsRUFBQTtBQUNsQixtQkFBaUIsQ0FBRyxFQUFBO0FBQ3BCLGlCQUFlLENBQUcsRUFBQTtBQUNsQixpQkFBZSxDQUFHLEVBQUE7QUFDbEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG1CQUFpQixDQUFHLEVBQUE7QUFDcEIsaUJBQWUsQ0FBRyxFQUFBO0FBQ2xCLG9CQUFrQixDQUFHLEVBQUE7QUFDckIsZUFBYSxDQUFHLEVBQUE7QUFBQSxBQUNwQixDQUFDO0FBQUEiLCJmaWxlIjoibm9ybVR5cGUuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IG5vcm1UeXBlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmVjdG9yMTogMSwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHN1bSBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICB2ZWN0b3JJbmY6IDIsICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgbWF4IG9mIGFic29sdXRlIHZhbHVlc1xuICAgIHZlY3RvcjI6IDMsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGV1Y2xpZGVhbiBub3JtXG4gICAgdmVjdG9yUDogNCwgICAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHAtbm9ybVxuICAgIG1hdHJpeDE6IDUsICAgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiBjb2x1bW4gc3Vtc1xuICAgIG1hdHJpeEluZjogNiwgICAgLy8vPCByZXR1cm4gdGhlIG1heCBvZiByb3cgc3Vtc1xuICAgIG1hdHJpeDI6IDcsICAgICAgLy8vPCByZXR1cm5zIHRoZSBtYXggc2luZ3VsYXIgdmFsdWUpLiBDdXJyZW50bHkgTk9UIFNVUFBPUlRFRFxuICAgIG1hdHJpeExQcTogOCwgICAvLy88IHJldHVybnMgTHBxLW5vcm1cbiAgICBldWNsaWQ6IDMsIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgdmVjdG9yMlxuICAgIEFGX05PUk1fVkVDVE9SXzE6IDEsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgYWJzb2x1dGUgdmFsdWVzXG4gICAgQUZfTk9STV9WRUNUT1JfSU5GOiAyLCAgICAvLy88IHRyZWF0cyB0aGUgaW5wdXQgYXMgYSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1heCBvZiBhYnNvbHV0ZSB2YWx1ZXNcbiAgICBBRl9OT1JNX1ZFQ1RPUl8yOiAzLCAgICAgIC8vLzwgdHJlYXRzIHRoZSBpbnB1dCBhcyBhIHZlY3RvciBhbmQgcmV0dXJucyBldWNsaWRlYW4gbm9ybVxuICAgIEFGX05PUk1fVkVDVE9SX1A6IDQsICAgICAgLy8vPCB0cmVhdHMgdGhlIGlucHV0IGFzIGEgdmVjdG9yIGFuZCByZXR1cm5zIHRoZSBwLW5vcm1cbiAgICBBRl9OT1JNX01BVFJJWF8xOiA1LCAgICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2YgY29sdW1uIHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF9JTkY6IDYsICAgIC8vLzwgcmV0dXJuIHRoZSBtYXggb2Ygcm93IHN1bXNcbiAgICBBRl9OT1JNX01BVFJJWF8yOiA3LCAgICAgIC8vLzwgcmV0dXJucyB0aGUgbWF4IHNpbmd1bGFyIHZhbHVlKS4gQ3VycmVudGx5IE5PVCBTVVBQT1JURURcbiAgICBBRl9OT1JNX01BVFJJWF9MX1BROiA4LCAgIC8vLzwgcmV0dXJucyBMcHEtbm9ybVxuICAgIEFGX05PUk1fRVVDTElEOiAzIC8vLzwgVGhlIGRlZmF1bHQuIFNhbWUgYXMgQUZfTk9STV9WRUNUT1JfMlxufTsiXX0= +//# sourceMappingURL=normType.js.map diff --git a/lib/es5/normType.js.map b/lib/es5/normType.js.map new file mode 100644 index 0000000..9e1f255 --- /dev/null +++ b/lib/es5/normType.js.map @@ -0,0 +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":["/*\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 b/lib/es5/row.js index 7806743..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"; -"use strict"; + var _ = require("lodash"); var assert = require("better-assert"); + function Row(index) { assert(_.isNumber(index)); + this.index = index; } + module.exports = Row; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvdy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUc7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXpCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUN0QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksSUFBRSxDQUFDO0FBQUEiLCJmaWxlIjoicm93LmpzIiwic291cmNlUm9vdCI6ImxpYi9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcblxuZnVuY3Rpb24gUm93KGluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoaW5kZXgpKTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3c7Il19 +//# sourceMappingURL=row.js.map diff --git a/lib/es5/row.js.map b/lib/es5/row.js.map new file mode 100644 index 0000000..8121f8b --- /dev/null +++ b/lib/es5/row.js.map @@ -0,0 +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":["/*\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 b/lib/es5/rows.js index c89925d..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"; -"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; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvd3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBO0FBQUEsV0FBVyxDQUFDO0FBRVosQUFBSSxFQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDekIsQUFBSSxFQUFBLENBQUEsTUFBSyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsZUFBYyxDQUFDLENBQUM7QUFFckMsT0FBUyxLQUFHLENBQUUsVUFBUyxDQUFHLENBQUEsU0FBUSxDQUFHO0FBQ2pDLE9BQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsVUFBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLFNBQVEsQ0FBQyxDQUFDLENBQUM7QUFFN0IsS0FBRyxXQUFXLEVBQUksV0FBUyxDQUFDO0FBQzVCLEtBQUcsVUFBVSxFQUFJLFVBQVEsQ0FBQztBQUM5QjtBQUFBLEFBRUEsS0FBSyxRQUFRLEVBQUksS0FBRyxDQUFDO0FBQUEiLCJmaWxlIjoicm93cy5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5sZXQgYXNzZXJ0ID0gcmVxdWlyZShcImJldHRlci1hc3NlcnRcIik7XG5cbmZ1bmN0aW9uIFJvd3MoZmlyc3RJbmRleCwgbGFzdEluZGV4KSB7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoZmlyc3RJbmRleCkpO1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGxhc3RJbmRleCkpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGxhc3RJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSb3dzOyJdfQ== +//# sourceMappingURL=rows.js.map diff --git a/lib/es5/rows.js.map b/lib/es5/rows.js.map new file mode 100644 index 0000000..40d6cfd --- /dev/null +++ b/lib/es5/rows.js.map @@ -0,0 +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":["/*\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 new file mode 100644 index 0000000..fcf3d04 --- /dev/null +++ b/lib/es5/scope.js @@ -0,0 +1,76 @@ +"use strict"; + +var Bluebird = require("bluebird"); +var _ = require("lodash"); + +var temporaries = []; + +function scope(f) { + if (_.isFunction(f)) { + scope.begin(); + try { + return f.call(scope, scope); + } finally { + scope.end(); + } + } +} + +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 array; +}; + +function free(arrays) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + 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 { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } +} + +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..daa46ff --- /dev/null +++ b/lib/es5/scope.js.map @@ -0,0 +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,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 2784639..f8c72da 100644 --- a/lib/es5/seq.js +++ b/lib/es5/seq.js @@ -1,21 +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"; -"use strict"; + 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)) { + end = begin - 1; + begin = 0; + } 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; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUVyQyxPQUFTLElBQUUsQ0FBRSxLQUFJLENBQUcsQ0FBQSxHQUFFLENBQUcsQ0FBQSxJQUFHLENBQUc7QUFDM0IsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUksQ0FBQSxZQUFZLEFBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBRztBQUNwQixRQUFJLEVBQUksRUFBQSxDQUFDO0FBQ1QsTUFBRSxFQUFJLE1BQUksQ0FBQztFQUNmLEtBQ0s7QUFDRCxTQUFLLEFBQUMsQ0FBQyxDQUFBLFNBQVMsQUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7RUFDM0I7QUFBQSxBQUNBLEtBQUcsRUFBSSxDQUFBLElBQUcsR0FBSyxFQUFBLENBQUM7QUFDaEIsT0FBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhCLEtBQUcsTUFBTSxFQUFJLE1BQUksQ0FBQztBQUNsQixLQUFHLElBQUksRUFBSSxJQUFFLENBQUM7QUFDZCxLQUFHLEtBQUssRUFBSSxLQUFHLENBQUM7QUFFaEIsS0FBRyxPQUFPLEVBQUksTUFBSSxDQUFDO0FBQ3ZCO0FBQUEsQUFFQSxLQUFLLFFBQVEsRUFBSSxJQUFFLENBQUM7QUFBQSIsImZpbGUiOiJzZXEuanMiLCJzb3VyY2VSb290IjoibGliL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xuXG5mdW5jdGlvbiBTZXEoYmVnaW4sIGVuZCwgc3RlcCkge1xuICAgIGFzc2VydChfLmlzTnVtYmVyKGJlZ2luKSk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZW5kKSkge1xuICAgICAgICBiZWdpbiA9IDA7XG4gICAgICAgIGVuZCA9IGJlZ2luO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KF8uaXNOdW1iZXIoZW5kKSk7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgYXNzZXJ0KF8uaXNOdW1iZXIoc3RlcCkpO1xuXG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cbiAgICB0aGlzLmlzR0ZvciA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcTsiXX0= +//# sourceMappingURL=seq.js.map diff --git a/lib/es5/seq.js.map b/lib/es5/seq.js.map new file mode 100644 index 0000000..d952a27 --- /dev/null +++ b/lib/es5/seq.js.map @@ -0,0 +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,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/es5/source.js b/lib/es5/source.js index 05048f4..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"; -"use strict"; + var source = module.exports = { device: 0, host: 1, afDevice: 0, afHost: 1 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxNQUFLLFFBQVEsRUFBSTtBQUMxQixPQUFLLENBQUcsRUFBQTtBQUNSLEtBQUcsQ0FBRyxFQUFBO0FBQ04sU0FBTyxDQUFHLEVBQUE7QUFDVixPQUFLLENBQUcsRUFBQTtBQUFBLEFBQ1osQ0FBQztBQUFBIiwiZmlsZSI6InNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblwidXNlIHN0cmljdFwiO1xuXG5sZXQgc291cmNlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGV2aWNlOiAwLFxuICAgIGhvc3Q6IDEsXG4gICAgYWZEZXZpY2U6IDAsXG4gICAgYWZIb3N0OiAxXG59OyJdfQ== +//# sourceMappingURL=source.js.map diff --git a/lib/es5/source.js.map b/lib/es5/source.js.map new file mode 100644 index 0000000..f93081c --- /dev/null +++ b/lib/es5/source.js.map @@ -0,0 +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":["/*\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/doc/afArray.js b/lib/es6/doc/afArray.js new file mode 100644 index 0000000..66e0237 --- /dev/null +++ b/lib/es6/doc/afArray.js @@ -0,0 +1,299 @@ +"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() { + } + + T() { + } + + H() { + } +} + +AFArray.create = function() { +}; + +module.exports = AFArray; diff --git a/lib/es6/ext.js b/lib/es6/ext.js index ac9775f..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("998") > 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; - }; } } } @@ -154,6 +83,8 @@ function ext(af) { installAsyncAndSync(af, af.AFArray); installAsyncAndSync(af, af.AFArray.prototype); + let scope = af.AFArray.scope = require("./scope"); + _.extend(af, { end: -1, span: null, @@ -195,7 +126,8 @@ function ext(af) { this.setDevice(current); } }, - gfor: require("./makeGfor")(af) + gfor: require("./makeGfor")(af), + scope: scope }); } diff --git a/lib/es6/index.js b/lib/es6/index.js index 4a001f6..66c143b 100644 --- a/lib/es6/index.js +++ b/lib/es6/index.js @@ -34,6 +34,11 @@ 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 cpuDriver = null; +let cudaDriver = null; +let openCLDriver = null; let entry = module.exports = function(id) { let did = _.isString(id) ? id.trim().toLowerCase() : null; @@ -41,11 +46,11 @@ let entry = module.exports = function(id) { 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."); } @@ -66,6 +71,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/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/scope.js b/lib/es6/scope.js new file mode 100644 index 0000000..a004c24 --- /dev/null +++ b/lib/es6/scope.js @@ -0,0 +1,54 @@ +"use strict"; +let Bluebird = require("bluebird"); +let _ = require("lodash"); + +let temporaries = []; + +function scope(f) { + if (_.isFunction(f)) { + scope.begin(); + try { + return f.call(scope, scope); + } + finally { + scope.end(); + } + } +} + +scope.begin = function() { + temporaries.push(new Set()); + return scope; +}; + +scope.end = function() { + if (temporaries.length) { + let set = temporaries[temporaries.length - 1]; + temporaries.length--; + free(set); + } + return scope; +}; + +scope.register = function(array) { + if (temporaries.length && _.isObject(array) && _.isFunction(array.free)) { + let set = temporaries[temporaries.length - 1]; + set.add(array); + } +}; + +scope.result = function(array) { + if (temporaries.length && _.isObject(array)) { + let set = temporaries[temporaries.length - 1]; + set.delete(array); + } + return array; +}; + +function free(arrays) { + for (let array of arrays.values()) { + array.free(); + } +} + +module.exports = scope; \ 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/lib/index.js b/lib/index.js index 452e722..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-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 dbde2b5..3017ca4 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,40 @@ { - "name": "arrayfire_js", - "version": "0.13.2", + "name": "arrayfire-js", + "version": "0.21.4", "description": "ArrayFire.js - ArrayFire for Node.js platform", "license": "BSD-3-Clause", + "repository": { + "type": "git", + "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": "*", - "lodash": "*", - "nan": "*", - "traceur-runtime": "*" + "cmake-js": "3", + "nan": "^2.1.0", + "better-assert": "*" }, "scripts": { - "install": "cmake-js rebuild" + "install": "cmake-js compile", + "test": "mocha tests", + "test-es5": "mocha tests --old" }, "main": "lib/", "devDependencies": { - "better-assert": "*", - "bluebird": "*", - "debug": "^2.2.0", - "fs-extra": "^0.20.1", - "gulp": "*", - "gulp-sequence": "*", - "gulp-traceur": "*", + "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", "merge2": "*", - "mocha": "*", + "mocha": "^2.3.4", "performance-now": "*", "ref": "*", - "traceur": "*" + "yargs": "^3.31.0" } } diff --git a/src/arrayhelperfunctions.cpp b/src/arrayhelperfunctions.cpp index 869021e..d839352 100644 --- a/src/arrayhelperfunctions.cpp +++ b/src/arrayhelperfunctions.cpp @@ -40,28 +40,38 @@ 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_ARR(IsZero, iszero) +AF_ARR(IsInf, isInf) +AF_ARR(IsNaN, isNaN) NAN_METHOD(Print) { - NanScope(); try { ARGS_LEN(1); - Guard(); - af_print(*ArrayWrapper::GetArrayAt(args, 0)); - NanReturnUndefined(); + Guard guard; + 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..c4e5f77 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) @@ -41,140 +42,153 @@ using namespace v8; using namespace std; using namespace node; -Persistent ArrayWrapper::constructor; +Nan::Persistent ArrayWrapper::constructor; 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)) + array->elements() + 200; + return static_cast(sizeof(af::array)) + static_cast(sizeof(ArrayWrapper)) + static_cast(array->bytes()); } ArrayWrapper::ArrayWrapper(af::array* array) : _array(array) { assert(array); - NanAdjustExternalMemory(GetMemSize(array)); + Nan::AdjustExternalMemory(GetMemSize(array)); } ArrayWrapper::~ArrayWrapper() { - NanAdjustExternalMemory(-GetMemSize(_array)); - delete _array; + Free(); +} + +void ArrayWrapper::Free() +{ + if (_array) + { + Nan::AdjustExternalMemory(-GetMemSize(_array)); + delete _array; + _array = nullptr; + } } -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("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); + 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("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); + 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); + + 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(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 +198,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 { @@ -211,7 +226,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) @@ -221,7 +236,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; @@ -238,7 +253,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) @@ -254,50 +269,57 @@ 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 TryGetArray(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(); + Guard 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); - instance = new ArrayWrapper(new af::array(dimAndType.first, dimAndType.second)); + Guard guard; + 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 (...) @@ -311,8 +333,9 @@ void ArrayWrapper::New(const v8::FunctionCallbackInfo& args) return NAN_THROW("Invalid arguments."); } - instance->Wrap(args.Holder()); - NanReturnValue(args.Holder()); + instance->Wrap(info.Holder()); + RegisterInTmp(info.Holder()); + info.GetReturnValue().Set(info.Holder()); } ARRAYFIRE_CATCH } @@ -320,22 +343,27 @@ void ArrayWrapper::New(const v8::FunctionCallbackInfo& args) 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); } -NAN_METHOD(ArrayWrapper::Create) +NAN_METHOD(ArrayWrapper::V8Free) { - NanScope(); + auto self = ObjectWrap::Unwrap(info.This()); + self->Free(); + info.GetReturnValue().SetUndefined(); +} +NAN_METHOD(ArrayWrapper::Create) +{ 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 +374,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 +432,48 @@ 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) +void ArrayWrapper::RegisterInTmp(v8::Local instance) { - NanScope(); + Local args[] = { instance }; + 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(scope, 1, args); +} +NAN_METHOD(ArrayWrapper::Elements) +{ try { - Guard(); - NanReturnValue(NanNew(GetArray(args.This())->elements())); + Guard guard; + 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."); } @@ -448,14 +481,14 @@ NAN_METHOD(ArrayWrapper::Host) af::array array(*pArray); auto exec = [=]() { - Guard(); + Guard 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 { @@ -466,17 +499,18 @@ NAN_METHOD(ArrayWrapper::Host) af::array array(*pArray); auto exec = [=]() { - Guard(); + Guard guard; array.host(buffData); return buffData; }; 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,146 +524,45 @@ NAN_METHOD(ArrayWrapper::Host) NAN_METHOD(ArrayWrapper::Scalar) { - NanScope(); - try { - ARGS_LEN(1) - - auto pArray = GetArray(args.This()); - af::array array(*pArray); - switch (array.type()) + Guard guard; + auto pArray = GetArray(info.This()); + switch (pArray->type()) { case f32: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case f64: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case s32: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case u32: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case u8: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case b8: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto worker = new Worker(GetCallback(args), move(exec)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(pArray->scalar())); break; case c32: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto conv = [=](Worker* w, af::cfloat data) - { - return ToV8Complex(data); - }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(ToV8Complex(pArray->scalar())); break; case c64: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto conv = [=](Worker* w, af::cdouble data) - { - return ToV8Complex(data); - }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(ToV8Complex(pArray->scalar())); break; case s64: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto conv = [=](Worker* w, long long data) - { - return NanNew(to_string(data).c_str()); - }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(to_string(pArray->scalar()).c_str()).ToLocalChecked()); break; case u64: - { - auto exec = [=]() - { - Guard(); - return array.scalar(); - }; - auto conv = [=](Worker* w, unsigned long long data) - { - return NanNew(to_string(data).c_str()); - }; - auto worker = new Worker(GetCallback(args), move(exec), move(conv)); - NanAsyncQueueWorker(worker); - } + info.GetReturnValue().Set(Nan::New(to_string(pArray->scalar()).c_str()).ToLocalChecked()); break; default: - assert(false); + NAN_THROW_INVALID_ARGS(); } - NanReturnUndefined(); } ARRAYFIRE_CATCH } @@ -637,83 +570,77 @@ 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); auto exec = [=]() { - Guard(); + Guard 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 +648,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())); + Guard guard; + 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(); + Guard guard; + GetArray(info.This())->eval(); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -912,53 +823,53 @@ NAN_METHOD(ArrayWrapper::Eval) NAN_METHOD(ArrayWrapper::At) { // Aka "indexing" - NanScope(); + try { ARGS_LEN(1) - Guard(); + Guard 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 +878,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())));\ + Guard guard;\ + auto pArray = GetArray(info.This());\ + info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value())));\ }\ ARRAYFIRE_CATCH\ } @@ -986,13 +897,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())));\ + Guard guard;\ + auto pArray = GetArray(info.This());\ + info.GetReturnValue().Set(New(pArray->f(info[0]->Int32Value(), info[1]->Int32Value())));\ }\ ARRAYFIRE_CATCH\ } @@ -1004,13 +915,13 @@ AFARRAY_IMPL_IDX2(Slices, slices) NAN_METHOD(ArrayWrapper::As) { - NanScope(); + try { ARGS_LEN(1); - af::dtype type = GetDTypeInfo(args[0]->Uint32Value()).first; - Guard(); - NanReturnValue(New(GetArray(args.This())->as(type))); + af::dtype type = GetDTypeInfo(info[0]->Uint32Value()).first; + Guard guard; + info.GetReturnValue().Set(New(GetArray(info.This())->as(type))); } ARRAYFIRE_CATCH } @@ -1018,19 +929,19 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1076,18 +987,18 @@ 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]);\ - Guard();\ + auto idx0 = ToIndex(info[0]);\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1136,7 +1047,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Row:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1185,7 +1096,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Rows:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1234,7 +1145,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Col:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1283,7 +1194,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Cols:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1332,7 +1243,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Slice:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1381,7 +1292,7 @@ NAN_METHOD(ArrayWrapper::F)\ break;\ case Region::Slices:\ {\ - Guard();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1430,13 +1341,13 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1482,14 +1393,14 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1537,13 +1448,13 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1590,7 +1501,7 @@ NAN_METHOD(ArrayWrapper::F)\ }\ }\ \ - NanReturnValue(args.This());\ + info.GetReturnValue().Set(info.This());\ }\ ARRAYFIRE_CATCH\ } @@ -1605,17 +1516,17 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1661,7 +1572,7 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ \ - NanReturnValue(New(result));\ + info.GetReturnValue().Set(New(result));\ }\ ARRAYFIRE_CATCH\ } @@ -1689,17 +1600,17 @@ 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();\ + Guard guard;\ if (pOtherArray)\ {\ auto& otherArray = *pOtherArray;\ @@ -1745,7 +1656,7 @@ NAN_METHOD(ArrayWrapper::F)\ return NAN_THROW_INVALID_ARGS();\ }\ \ - NanReturnValue(New(result));\ + info.GetReturnValue().Set(New(result));\ }\ ARRAYFIRE_CATCH\ } @@ -1773,13 +1684,13 @@ AFARRAY_IMPL_BINOP(RhsBitXor, ^) #define AFARRAY_IMPL_UNOP(F, Op)\ NAN_METHOD(ArrayWrapper::F)\ {\ - NanScope();\ + \ \ try\ {\ - auto& array = *GetArray(args.This());\ - Guard();\ - NanReturnValue(New(array.operator Op()));\ + auto& array = *GetArray(info.This());\ + Guard guard;\ + info.GetReturnValue().Set(New(array.operator Op()));\ }\ ARRAYFIRE_CATCH\ } @@ -1787,3 +1698,23 @@ NAN_METHOD(ArrayWrapper::F)\ AFARRAY_IMPL_UNOP(Neg, -) AFARRAY_IMPL_UNOP(Not, !) #undef AFARRAY_IMPL_UNOP + +NAN_METHOD(ArrayWrapper::AFT) +{ + try + { + Guard guard; + info.GetReturnValue().Set(New(GetArray(info.This())->T())); + } + ARRAYFIRE_CATCH +} + +NAN_METHOD(ArrayWrapper::AFH) +{ + try + { + Guard guard; + 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 f9742ed..1eabf6a 100644 --- a/src/arraywrapper.h +++ b/src/arraywrapper.h @@ -39,22 +39,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct ArrayWrapper : public node::ObjectWrap { ArrayWrapper(const ArrayWrapper&) = delete; + void Free(); ~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 void RegisterInTmp(v8::Local instance); + + static NAN_METHOD(V8Free); static NAN_METHOD(Create); static NAN_METHOD(Elements); static NAN_METHOD(Host); @@ -133,14 +137,17 @@ struct ArrayWrapper : public node::ObjectWrap static NAN_METHOD(Not); static NAN_METHOD(Neg); + static NAN_METHOD(AFT); + static NAN_METHOD(AFH); + private: explicit ArrayWrapper(af::array* array); 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..7a79fa2 100644 --- a/src/computervision.cpp +++ b/src/computervision.cpp @@ -42,139 +42,142 @@ 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); + 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 } 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)); + Guard guard; + af::features rf; + af::fast(*pArray, thr, arcLength, nonMax, featureRatio, edge); + info.GetReturnValue().Set(ToV8Features(rf)); } 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); + 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 } 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))); + Guard guard; + 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..240740f 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); - Guard(); - NanReturnValue(ArrayWrapper::New(af::randu(dimAndType.first, dimAndType.second))); + auto dimAndType = ParseDimAndTypeArgs(info); + Guard guard; + 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))); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::randn(dimAndType.first, dimAndType.second))); return; } return NAN_THROW_INVALID_DTYPE(); @@ -75,107 +75,107 @@ NAN_METHOD(RandN) NAN_METHOD(Identity) { - NanScope(); + try { ARGS_LEN(2); - auto dimAndType = ParseDimAndTypeArgs(args); - Guard(); - NanReturnValue(ArrayWrapper::New(af::identity(dimAndType.first, dimAndType.second))); + auto dimAndType = ParseDimAndTypeArgs(info); + Guard guard; + 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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::range(dimAndType.first, seqDim, dimAndType.second))); + auto dimAndType = ParseDimAndTypeArgs(info, -1, 1); + af_dtype seqDim = (af_dtype)info[info.Length() - 2]->Uint32Value(); + Guard guard; + 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()); - Guard(); - NanReturnValue(ArrayWrapper::New(af::iota(dims, titleDims, type.first))); + auto dims = ToDim4(info[0]); + auto titleDims = ToDim4(info[1]); + auto type = GetDTypeInfo(info[3]->Uint32Value()); + Guard guard; + 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))); + Guard guard; + 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]; - Guard(); + auto dimAndType = ParseDimAndTypeArgs(info, -1, 0, 1); + auto value = info[0]; + Guard guard; if (value->IsNumber()) { double v = value->NumberValue(); 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: @@ -231,33 +231,33 @@ NAN_METHOD(Constant) ARRAYFIRE_CATCH } -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Lower, lower, false) -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Upper, upper, false) +AF_ARR_BOOL(Lower, lower, false) +AF_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) +AF_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..57d6aa6 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -44,14 +44,14 @@ using namespace node; NAN_METHOD(GetDeviceCount) { - NanScope(); + try { - Guard(); + Guard 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 @@ -61,13 +61,13 @@ NAN_METHOD(GetDevice) { try { - Guard(); - NanScope(); + Guard guard; + #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,107 +75,107 @@ NAN_METHOD(GetDevice) NAN_METHOD(SetDevice) { - NanScope(); + try { - Guard(); + Guard 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(); + Guard 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(); + Guard 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()); } } auto exec = [=]() { - Guard(); + Guard guard; af::sync(device); }; - NanAsyncQueueWorker(new Worker(callback, move(exec))); - NanReturnUndefined(); + Nan::AsyncQueueWorker(new Worker(callback, move(exec))); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH } @@ -191,63 +191,65 @@ 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(); + Guard guard; char* ptr = (char*)af::alloc(elements, allocPars.first); auto gcCallback = [](char* data, void* hint) { - Guard(); + Guard 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(); + Guard guard; char* ptr = (char*)af::pinned(elements, allocPars.first); auto gcCallback = [](char* data, void* hint) { - Guard(); + Guard 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..a16a53d 100644 --- a/src/fire.cpp +++ b/src/fire.cpp @@ -44,52 +44,63 @@ 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; 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); - af::sync(); - NanReturnUndefined(); + + unsigned ms = info.Length() ? info[0]->Uint32Value() : 1000; + Nan::IdleNotification(ms); + try + { + af::sync(); + } + ARRAYFIRE_CATCH + 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..c95697a 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((char*)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..3fe0a5d 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,79 +90,79 @@ 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)\ +#define AF_ARR(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0))));\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0))));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_DIM(F, f)\ +#define AF_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ int dim = 0;\ - if (args.Length() > 1) dim = args[1]->Int32Value();\ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), dim)));\ + if (info.Length() > 1) dim = info[1]->Int32Value();\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), dim)));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_BOOL(F, f, defV)\ +#define AF_ARR_BOOL(F, f, defV)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(1);\ \ bool v = defV;\ - if (args.Length() > 1) v = args[1]->BooleanValue();\ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), v)));\ + if (info.Length() > 1) v = info[1]->BooleanValue();\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v)));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(F, f, defV)\ +#define AF_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();\ - Guard();\ - af::f(*ArrayWrapper::GetArrayAt(args, 0), v);\ - NanReturnUndefined();\ + if (info.Length() > 1) v = info[1]->BooleanValue();\ + Guard guard;\ + af::f(*ArrayWrapper::GetArrayAt(info, 0), v);\ + info.GetReturnValue().SetUndefined();\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ +#define AF_ARR_FLOAT_FLOAT_FLOAT(F, f, defV1, defV2, defV3)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ @@ -171,131 +171,125 @@ 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();\ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), v1, v2, v3)));\ + 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;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), v1, v2, v3)));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR(F, f)\ +#define AF_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))));\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1))));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(F, f)\ +#define AF_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))));\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), *ArrayWrapper::GetArrayAt(info, 2))));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR_ARR(F, f)\ +#define AF_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))));\ + 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\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_DIM(F, f)\ +#define AF_ARR_ARR_DIM(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ \ try\ {\ ARGS_LEN(2);\ \ int dim = 0;\ - if (args.Length() > 2) dim = args[2]->Int32Value();\ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), dim)));\ + if (info.Length() > 2) dim = info[2]->Int32Value();\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), dim)));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_ARR_BOOL(F, f, defV)\ +#define AF_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();\ - Guard();\ - NanReturnValue(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(args, 0), *ArrayWrapper::GetArrayAt(args, 1), v)));\ + if (info.Length() > 2) v = info[2]->BooleanValue();\ + Guard guard;\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*ArrayWrapper::GetArrayAt(info, 0), *ArrayWrapper::GetArrayAt(info, 1), v)));\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_ARR_DOUBLE_COMB(F, f)\ +#define AF_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);\ - Guard();\ + auto pArray1 = ArrayWrapper::TryGetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::TryGetArrayAt(info, 1);\ + Guard 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();\ - if (NeedsDouble(*pArray1))\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray1, d)));\ - else\ - NanReturnValue(ArrayWrapper::New(af::f(*pArray1, (float)d)));\ + double d = info[1]->NumberValue();\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, 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)));\ - else\ - NanReturnValue(ArrayWrapper::New(af::f((float)d, *pArray2)));\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(d, *pArray2)));\ return;\ }\ }\ @@ -305,121 +299,72 @@ NAN_METHOD(F)\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V1(F, f)\ +#define AF_ALGO_V1(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ try\ {\ - ARGS_LEN(2);\ - \ - auto array = *ArrayWrapper::GetArrayAt(args, 0);\ - if (args.Length() > 2)\ + ARGS_LEN(1);\ + Guard guard;\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 1)\ {\ - int dim = args[1]->Int32Value();\ - return ArrayWrapper::NewAsync(args, [=]() { Guard(); return new af::array(af::f(array, dim)); });\ + int dim = info[1]->Int32Value();\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray, dim)));\ }\ else\ {\ - if (NeedsDouble(array))\ - {\ - auto exec = [=]() { Guard(); return af::f(array); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ - }\ + if (NeedsDouble(*pArray))\ + info.GetReturnValue().Set(af::f(*pArray));\ else\ - {\ - auto exec = [=]() { Guard(); return af::f(array); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ - }\ + info.GetReturnValue().Set(af::f(*pArray));\ }\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V2(F, f)\ +#define AF_ALGO_V2(F, f)\ NAN_METHOD(F)\ {\ - NanScope();\ + \ try\ {\ - ARGS_LEN(2);\ + ARGS_LEN(1);\ + Guard guard;\ \ - auto array = *ArrayWrapper::GetArrayAt(args, 0);\ - if (args.Length() > 2)\ + auto pArray = ArrayWrapper::GetArrayAt(info, 0);\ + if (info.Length() > 1)\ {\ - int dim = args[1]->Int32Value();\ - typedef std::pair PairT;\ - typedef Worker WorkerT;\ - auto exec = [=]()\ - {\ - Guard();\ - af::array v;\ - af::array at;\ - af::f(v, at, array, dim);\ - return make_pair(v, at);\ - };\ - 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;\ - };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + int dim = info[1]->Int32Value();\ + 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();\ - double v;\ - unsigned at;\ - af::f(&v, &at, array);\ - return make_pair(v, at);\ - };\ - 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;\ - };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + 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();\ - float v;\ - unsigned at;\ - af::f(&v, &at, array);\ - return make_pair(v, at);\ - };\ - 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;\ - };\ - auto worker = new WorkerT(GetCallback(args), std::move(exec), std::move(conv));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + 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);\ }\ }\ }\ @@ -427,56 +372,50 @@ NAN_METHOD(F)\ } // weighted mean like stuff: -#define ARRAYFIRE_ASYNC_METHOD_ALGO_V3(F, f)\ +#define AF_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)\ + ARGS_LEN(2);\ + Guard guard;\ + auto pArray1 = ArrayWrapper::GetArrayAt(info, 0);\ + auto pArray2 = ArrayWrapper::GetArrayAt(info, 1);\ + if (info.Length() > 2)\ {\ - int dim = args[2]->Int32Value();\ - return ArrayWrapper::NewAsync(args, [=]() { Guard(); return new af::array(af::f(array1, array2, dim)); });\ + int dim = info[2]->Int32Value();\ + info.GetReturnValue().Set(ArrayWrapper::New(af::f(*pArray1, *pArray2, dim)));\ }\ else\ {\ - if (NeedsDouble(array1))\ + if (NeedsDouble(*pArray1))\ {\ - auto exec = [=]() { Guard(); return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + info.GetReturnValue().Set(af::f(*pArray1, *pArray2));\ }\ else\ {\ - auto exec = [=]() { Guard(); return af::f(array1, array2); };\ - auto worker = new Worker(GetCallback(args), std::move(exec));\ - NanAsyncQueueWorker(worker);\ - NanReturnUndefined();\ + info.GetReturnValue().Set(af::f(*pArray1, *pArray2));\ }\ }\ }\ ARRAYFIRE_CATCH\ } -#define ARRAYFIRE_SYNC_METHOD_XYZW(F, f, iy, iz, iw)\ +#define AF_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 +423,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)));\ + 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 8ac85bc..6e9fd2d 100644 --- a/src/imageprocessing.cpp +++ b/src/imageprocessing.cpp @@ -43,77 +43,78 @@ 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, - [=](){ Guard(); return new af::array(af::loadImage(fn.c_str(), isColor)); }); + info, + [=](){ Guard guard; return new af::array(af::loadImage(fn.c_str(), isColor)); }); + info.GetReturnValue().SetUndefined(); } ARRAYFIRE_CATCH; } 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(); + Guard 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(); - Guard(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + auto to = (af::CSpace)info[1]->Uint32Value(); + auto from = (af::CSpace)info[2]->Uint32Value(); + Guard guard; ArrayWrapper::New(af::colorSpace(*pArray, to, from)); } 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_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) { - 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; - Guard(); + if (info.Length() > 1) conn = (af::connectivity)info[1]->Uint32Value(); + if (info.Length() > 2) dtype = GetDTypeInfo(info[2]).first; + Guard guard; ArrayWrapper::New(af::regions(*pArray, conn, dtype)); } ARRAYFIRE_CATCH; @@ -121,16 +122,16 @@ 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(); - Guard(); + if (info.Length() > 3) isColor = info[3]->BooleanValue(); + Guard guard; ArrayWrapper::New(af::bilateral(*pArray, spatialSigma, chromaticSigma, isColor)); } ARRAYFIRE_CATCH; @@ -139,18 +140,18 @@ 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();\ - Guard();\ + 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;\ ArrayWrapper::New(af::f(*pArray, windLength, windWidth, edgePad));\ }\ ARRAYFIRE_CATCH;\ @@ -163,17 +164,17 @@ 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(); - Guard(); + if (info.Length() > 4) isColor = info[4]->BooleanValue(); + Guard guard; ArrayWrapper::New(af::meanShift(*pArray, spatialSigma, chromaticSigma, iter, isColor)); } ARRAYFIRE_CATCH; @@ -181,39 +182,39 @@ 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(); - Guard(); + if (info.Length() > 1) kerSize = info[1]->Uint32Value(); + Guard 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; } -ARRAYFIRE_SYNC_METHOD_ARR_ARR(HistEqual, histEqual) +AF_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(); - Guard(); + if (info.Length() > 2) minval = info[2]->NumberValue(); + if (info.Length() > 3) maxval = info[3]->NumberValue(); + Guard guard; ArrayWrapper::New(af::histogram(*pArray, nbins, minval, maxval)); } ARRAYFIRE_CATCH; @@ -221,37 +222,37 @@ 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(); - Guard(); + dim_t odim0 = info[1]->Uint32Value(); + dim_t odim1 = info[2]->Uint32Value(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); + Guard 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(); - Guard(); + float scale = info[0]->NumberValue(); + if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); + Guard 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(); - Guard(); + 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 guard; ArrayWrapper::New(af::resize(scale0, scale1, *pIn, method)); } } @@ -261,17 +262,17 @@ 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(); - Guard(); + if (info.Length() > 2) crop = info[2]->BooleanValue(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); + Guard guard; ArrayWrapper::New(af::rotate(*pArray, theta, crop, method)); } ARRAYFIRE_CATCH; @@ -279,20 +280,20 @@ 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(); - Guard(); + 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; ArrayWrapper::New(af::scale(*pArray, scale0, scale1, odim0, odim1, method)); } ARRAYFIRE_CATCH; @@ -300,22 +301,22 @@ 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(); - Guard(); + 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 guard; ArrayWrapper::New(af::skew(*pArray, skew0, skew1, odim0, odim1, inverse, method)); } ARRAYFIRE_CATCH; @@ -323,21 +324,21 @@ 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(); - Guard(); + 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 guard; ArrayWrapper::New(af::transform(*pArray1, *pArray2, odim0, odim1, method, inverse)); } ARRAYFIRE_CATCH; @@ -345,78 +346,80 @@ 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(); - Guard(); + 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; ArrayWrapper::New(af::translate(*pArray, trans0, trans1, odim0, odim1, method)); } 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_ARR_ARR(Dilate, dilate) +AF_ARR_ARR(Dilate3, dilate3) +AF_ARR_ARR(Erode, erode) +AF_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(); - Guard(); + if (info.Length() > 2) sigR = info[2]->NumberValue(); + if (info.Length() > 3) sigC = info[3]->NumberValue(); + Guard 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..071050b 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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::dot(*pArray1, *pArray2, optLhs, optRhs))); + if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); + if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); + Guard guard; + 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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, optLhs, optRhs))); + if (info.Length() > 2) optLhs = (af::matProp)info[2]->Uint32Value(); + if (info.Length() > 3) optRhs = (af::matProp)info[3]->Uint32Value(); + Guard guard; + 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))); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3))); } else { - Guard(); - NanReturnValue(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3, *pArray4))); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::matmul(*pArray1, *pArray2, *pArray3, *pArray4))); } } } @@ -96,221 +96,196 @@ 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_ARR_ARR(MatMulNT, matmulNT) +AF_ARR_ARR(MatMulTN, matmulTN) +AF_ARR_ARR(MatMulTT, matmulTT) -ARRAYFIRE_SYNC_METHOD_ARR_BOOL(Transpose, transpose, false) -ARRAYFIRE_SYNC_METHOD_VOID_ARR_BOOL(TransposeInPlace, transposeInPlace, false) +AF_ARR_BOOL(Transpose, transpose, false) +AF_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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::solve(*pArray1, *pArray2, options))); + if (info.Length() > 2) options = (af::matProp)info[2]->Uint32Value(); + Guard guard; + 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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::solveLU(*pArray1, *pArray2, *pArray3, options))); + if (info.Length() > 3) options = (af::matProp)info[3]->Uint32Value(); + Guard guard; + 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); + ARGS_LEN(1); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); bool isUpper = true; - if (args.Length() > 1) isUpper = args[1]->BooleanValue(); - typedef pair ResultT; - typedef Worker WorkerT; - auto exec = [=]() - { - Guard(); - af::array out; - int r = af::cholesky(out, array, isUpper); - return move(make_pair(out, r)); - }; - 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; - }; - NanAsyncQueueWorker(new WorkerT(GetCallback(args), move(exec), move(conv))); - NanReturnUndefined(); + if (info.Length() > 1) isUpper = info[1]->BooleanValue(); + 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) { - NanScope(); try { - ARGS_LEN(2); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + ARGS_LEN(1); + auto pArray = 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(); + Guard(); + af::array out; + int r = af::choleskyInPlace(*pArray, isUpper); + info.GetReturnValue().Set(r); } 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(); - Guard(); + 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 = 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); - Guard(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard 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(); - Guard(); + if (info.Length() > 1) isLapackPiv = info[1]->BooleanValue(); + Guard 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); - Guard(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard 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); - Guard(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard 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); - Guard(); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard 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); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(args, 0); - if (NeedsDouble(array)) + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + Guard guard; + if (NeedsDouble(*pArray)) { - auto exec = [=]() { Guard(); return af::det(array); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + info.GetReturnValue().Set(ArrayWrapper::New(af::det(*pArray))); } else { - auto exec = [=]() { Guard(); return af::det(array); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + info.GetReturnValue().Set(ArrayWrapper::New(af::det(*pArray))); } } ARRAYFIRE_CATCH @@ -318,80 +293,77 @@ 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(); - Guard(); - NanReturnValue(ArrayWrapper::New(af::inverse(*pArray, options))); + if (info.Length() > 1) options = (af::matProp)info[1]->Uint32Value(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::inverse(*pArray, options))); } ARRAYFIRE_CATCH; } NAN_METHOD(Norm) { - NanScope(); + try { - ARGS_LEN(2); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto pArray = 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(); - auto exec = [=]() { Guard(); return af::norm(array, type, p, q); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + 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(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::norm(*pArray, type, p, q))); } ARRAYFIRE_CATCH } NAN_METHOD(Rank) { - NanScope(); + try { - ARGS_LEN(2); + ARGS_LEN(1); - auto array = *ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); double tol = 1E-5; - if (args.Length() > 1) tol = args[1]->NumberValue(); - auto exec = [=]() { Guard(); return af::rank(array, tol); }; - auto worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + if (info.Length() > 1) tol = info[1]->NumberValue(); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::rank(*pArray, tol))); } 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 a70ee8f..8bad4b0 100644 --- a/src/mathfunctions.cpp +++ b/src/mathfunctions.cpp @@ -40,110 +40,131 @@ 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_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(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(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) - -void InitMathFunctions(v8::Handle exports) +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) { - 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()); + 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("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()); + 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("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()); + 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..c206552 100644 --- a/src/moveandreorderarray.cpp +++ b/src/moveandreorderarray.cpp @@ -42,55 +42,101 @@ 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); - Guard(); - NanReturnValue(ArrayWrapper::New(af::join(dim, *pArray1, *pArray2)));; + af::dtype dim = GetDTypeInfo(info[0]).first; + auto pArray1 = ArrayWrapper::GetArrayAt(info, 1); + auto pArray2 = ArrayWrapper::GetArrayAt(info, 2); + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::join(dim, *pArray1, *pArray2)));; } ARRAYFIRE_CATCH } -ARRAYFIRE_SYNC_METHOD_XYZW(Tile, tile, 1, 1, 1) +AF_XYZW(Tile, tile, 1, 1, 1) -ARRAYFIRE_SYNC_METHOD_XYZW(Reorder, reorder, 1, 2, 3) +AF_XYZW(Reorder, reorder, 1, 2, 3) -ARRAYFIRE_SYNC_METHOD_XYZW(Shift, shift, 0, 0, 0) +AF_XYZW(Shift, shift, 0, 0, 0) -ARRAYFIRE_SYNC_METHOD_XYZW(ModDims, moddims, 1, 1, 1) +AF_XYZW(ModDims, moddims, 1, 1, 1) -ARRAYFIRE_SYNC_METHOD_ARR(Flat, flat) +AF_ARR(Flat, flat) NAN_METHOD(Flip) { - NanScope(); - try { ARGS_LEN(2); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); - af::dtype dim = GetDTypeInfo(args[1]).first; - Guard(); - NanReturnValue(ArrayWrapper::New(af::flip(*pArray, dim)));; + auto pArray = ArrayWrapper::GetArrayAt(info, 0); + af::dtype dim = GetDTypeInfo(info[1]).first; + Guard guard; + info.GetReturnValue().Set(ArrayWrapper::New(af::flip(*pArray, dim)));; + } + 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 } -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()); + + Nan::Set(target, Nan::New("select").ToLocalChecked(), + Nan::New(Select)->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..170cfce 100644 --- a/src/signalprocessing.cpp +++ b/src/signalprocessing.cpp @@ -42,16 +42,16 @@ 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(); - Guard(); + if (info.Length() > 3) mode = (af::convMode)info[3]->Uint32Value(); + Guard guard; ArrayWrapper::New(af::convolve(*pArray1, *pArray2, *pArray3, mode)); } ARRAYFIRE_CATCH; @@ -60,17 +60,17 @@ 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();\ - Guard();\ + if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ + if (info.Length() > 3) domain = (af::convDomain)info[3]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode, domain));\ }\ ARRAYFIRE_CATCH;\ @@ -85,15 +85,15 @@ 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();\ - Guard();\ + if (info.Length() > 2) mode = (af::convMode)info[2]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray1, *pArray2, mode));\ }\ ARRAYFIRE_CATCH;\ @@ -107,15 +107,15 @@ 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();\ - Guard();\ + if (info.Length() > 2) odim0 = info[2]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, factor, odim0));\ }\ ARRAYFIRE_CATCH;\ @@ -128,14 +128,14 @@ 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();\ - Guard();\ + if (info.Length() > 1) odim0 = info[1]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, odim0));\ }\ ARRAYFIRE_CATCH;\ @@ -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();\ + Guard 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])));\ + Guard guard;\ + 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])));\ + Guard guard;\ + ArrayWrapper::New(af::f(*pArray, info[1]->NumberValue(), ToDim4(info[2])));\ }\ else \ {\ @@ -183,16 +183,16 @@ 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();\ - Guard();\ + if (info.Length() > 1) dim0 = info[1]->Uint32Value();\ + if (info.Length() > 2) dim1 = info[2]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, dim0, dim1));\ }\ ARRAYFIRE_CATCH;\ @@ -205,18 +205,18 @@ 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();\ - Guard();\ + 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;\ ArrayWrapper::New(af::f(*pArray, dim0, dim1, dim2));\ }\ ARRAYFIRE_CATCH;\ @@ -229,17 +229,17 @@ 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();\ - Guard();\ + if (info.Length() > 2) dim0 = info[2]->Uint32Value();\ + if (info.Length() > 3) dim1 = info[3]->Uint32Value();\ + Guard guard;\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1));\ }\ ARRAYFIRE_CATCH;\ @@ -252,19 +252,19 @@ 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();\ - Guard();\ + 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;\ ArrayWrapper::New(af::f(*pArray, factor, dim0, dim1, dim2));\ }\ ARRAYFIRE_CATCH;\ @@ -275,22 +275,22 @@ ARRAYFIRE_FFT3NORM(IFFT3Norm, ifft3Norm) #undef ARRAYFIRE_FFT3NORM -ARRAYFIRE_SYNC_METHOD_ARR_ARR(FIR, fir) -ARRAYFIRE_SYNC_METHOD_ARR_ARR_ARR(IIR, iir) +AF_ARR_ARR(FIR, fir) +AF_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(); - Guard(); + if (info.Length() > 2) method = (af::interpType)info[2]->Uint32Value(); + if (info.Length() > 3) offGrid = info[3]->NumberValue(); + Guard guard; ArrayWrapper::New(af::approx1(*pArray1, *pArray2, method, offGrid)); } ARRAYFIRE_CATCH; @@ -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(); - Guard(); + if (info.Length() > 3) method = (af::interpType)info[3]->Uint32Value(); + if (info.Length() > 4) offGrid = info[4]->NumberValue(); + Guard 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..3f66f0f 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -41,87 +41,89 @@ 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_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) { - 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 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 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 worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto exec = [=]() { Guard guard; return af::var(array, biased); }; + auto worker = new Worker(GetCallback(info), std::move(exec)); + Nan::AsyncQueueWorker(worker); + info.GetReturnValue().SetUndefined(); } } } ARRAYFIRE_CATCH } -ARRAYFIRE_ASYNC_METHOD_ALGO_V3(WeightedVar, var) +AF_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 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 worker = new Worker(GetCallback(args), std::move(exec)); - NanAsyncQueueWorker(worker); - NanReturnUndefined(); + auto exec = [=]() { Guard guard; return af::corrcoef(array1, array2); }; + 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..13bb4a5 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..80934a8 100644 --- a/src/vectoralgorithms.cpp +++ b/src/vectoralgorithms.cpp @@ -41,153 +41,154 @@ 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_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) { - 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)));; + Guard guard; + 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(); + Guard 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(); + Guard 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 } -ARRAYFIRE_SYNC_METHOD_ARR_DIM(Accum, accum) -ARRAYFIRE_SYNC_METHOD_ARR(Where, where) +AF_ARR_DIM(Accum, accum) +AF_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_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) { - NanScope(); try { ARGS_LEN(1); - auto pArray = ArrayWrapper::GetArrayAt(args, 0); + auto pArray = ArrayWrapper::GetArrayAt(info, 0); - Guard(); + Guard 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)) { } diff --git a/tests/es5/afArrayTests.js b/tests/es5/afArrayTests.js index 1e6347f..74e1234 100644 --- a/tests/es5/afArrayTests.js +++ b/tests/es5/afArrayTests.js @@ -1,406 +1,518 @@ +/* +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"; -"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; -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); - } - 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 $__10() { - var int, - count, - buff, - v$__0, - array, - buff2, - v$__1, - v1, - v2, - array2, - buff3, - v$__2, - v1$__3, - v2$__4, - 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$__0 = 0; v$__0 < count; v$__0++) { - int.set(buff, v$__0 * int.size, v$__0 * v$__0); - } - 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$__1 = 0; v$__1 < count; v$__1++) { - v1 = int.get(buff, v$__1 * int.size); - v2 = int.get(buff2, v$__1 * int.size); - assert(v1 === v2); - assert(v1 === v$__1 * v$__1); - } - 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$__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); - } - $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(); - } - }, $__10, 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$__5 = 0; v$__5 < count; v$__5++) { - int.set(buff, v$__5 * int.size, v$__5 * v$__5); - } - 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$__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); - assert(v1 === v2); - assert(v1 === v$__6 * v$__6); - } - 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$__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); +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); } - 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")); - }); + + 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: + v = array2.value(); + + assert(v === 0.0); + + v = array2.at(1).value(); + assert(v === 1.0); + + v = array2.at(2).scalar(); + assert(v === 4.0); + + v = array2.at("end").scalar(); + assert(v === 9.0 * 9.0); + + v = array2.at(af.end - 1).scalar(); + assert(v === 8.0 * 8.0); + + case 34: + 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.value(); + assert(v === 0.0); + + v = array.at(1).value(); + assert(v === 1.0); + + v = array2.at(2).scalar(); + assert(v === 4.0); + + v = array2.at("end").scalar(); + assert(v === 9.0 * 9.0); + + 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(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); + }); + + 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 () { + 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; + var x = 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); + + return 1; + }); + + assert(x === 1); + + arr.set(3, 2); + + try { + sub.set(0, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); + + 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); + + try { + sub.set(0, 2); + assert(false); + } catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); + }); + }); }); - } -} -describe("AFArray class and methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,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YUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3hDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLG1DQUFrQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQy9DLEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0MsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ3BDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzNCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUMzQixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHFDQUFvQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ2pELEFBQUksVUFBQSxDQUFBLEtBQUksRUFBSSxJQUFJLFFBQU0sQUFBQyxDQUFDLEVBQUMsQ0FBRyxHQUFDLENBQUcsR0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2pELGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUEsQ0FBSSxFQUFBLENBQUMsQ0FBQztBQUMxQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUEsR0FBTSxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sRUFBQSxDQUFDLENBQUM7QUFDM0IsQUFBSSxVQUFBLENBQUEsSUFBRyxFQUFJLENBQUEsS0FBSSxLQUFLLEFBQUMsRUFBQyxDQUFDO0FBQ3ZCLGFBQUssQUFBQyxDQUFDLENBQUEsU0FBUyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLFNBQVMsSUFBTSxDQUFBLEVBQUMsRUFBSSxHQUFDLENBQUEsQ0FBSSxHQUFDLENBQUMsQ0FBQztBQUN0QyxhQUFLLEFBQUMsQ0FBQyxJQUFHLE1BQU0sSUFBTSxFQUFBLENBQUMsQ0FBQztBQUN4QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxHQUFDLENBQUMsQ0FBQztBQUM3QixhQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sQ0FBRSxDQUFBLENBQUMsSUFBTSxFQUFBLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLFFBQVEsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE1BQU0sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUMvQixhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNsQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFNBQVMsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLGVBQWUsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUN2QyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFdBQVcsQUFBQyxFQUFDLENBQUEsR0FBTSxLQUFHLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLFVBQVUsQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztBQUNuQyxhQUFLLEFBQUMsQ0FBQyxLQUFJLE9BQU8sQUFBQyxFQUFDLENBQUEsR0FBTSxNQUFJLENBQUMsQ0FBQztNQUNwQyxDQUFDLENBQUM7QUFFRixhQUFTLFFBQU0sQ0FBRSxLQUFJLENBQUc7QUFDcEIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLEVBQUMsQ0FBQSxHQUFNLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixhQUFLLEFBQUMsQ0FBQyxLQUFJLEtBQUssQUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQU0sR0FBQyxDQUFDLENBQUM7QUFDNUIsYUFBSyxBQUFDLENBQUMsS0FBSSxLQUFLLEFBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxHQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzVCLGFBQUssQUFBQyxDQUFDLEtBQUksS0FBSyxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxHQUFDLENBQUMsQ0FBQztBQUM1QixBQUFJLFVBQUEsQ0FBQSxJQUFHLEVBQUksQ0FBQSxLQUFJLEtBQUssQUFBQyxFQUFDLENBQUM7QUFDdkIsYUFBSyxBQUFDLENBQUMsQ0FBQSxTQUFTLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsU0FBUyxJQUFNLENBQUEsRUFBQyxFQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQSxDQUFJLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxJQUFNLEVBQUEsQ0FBQyxDQUFDO0FBQ3hCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxDQUFFLENBQUEsQ0FBQyxJQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUssQUFBQyxDQUFDLEtBQUksUUFBUSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksTUFBTSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQy9CLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQUssQUFBQyxDQUFDLEtBQUksU0FBUyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssQUFBQyxDQUFDLEtBQUksZUFBZSxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUssQUFBQyxDQUFDLEtBQUksV0FBVyxBQUFDLEVBQUMsQ0FBQSxHQUFNLEtBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksVUFBVSxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO0FBQ25DLGFBQUssQUFBQyxDQUFDLEtBQUksT0FBTyxBQUFDLEVBQUMsQ0FBQSxHQUFNLE1BQUksQ0FBQyxDQUFDO01BQ3BDO0FBQUEsQUFFQSxPQUFDLEFBQUMsQ0FBQyxvQ0FBbUMsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNoRCxBQUFJLFVBQUEsQ0FBQSxLQUFJLEVBQUksSUFBSSxRQUFNLEFBQUMsQ0FBQyxFQUFDLENBQUcsR0FBQyxDQUFHLEdBQUMsQ0FBRyxHQUFDLENBQUcsQ0FB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QyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzVFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHlCQUF3QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3JDLGNBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzdELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHlCQUF3QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3JDLGNBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzdELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDJCQUEwQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3ZDLGNBQU0sSUFBSSxBQUFDLEVBQUMsdUNBQXVDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQy9ELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBCQUF5QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RDLGNBQU0sSUFBSSxBQUFDLEVBQUMsc0NBQXNDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBCQUF5QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RDLGNBQU0sSUFBSSxBQUFDLEVBQUMsc0NBQXNDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDRCQUEyQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3hDLGNBQU0sSUFBSSxBQUFDLEVBQUMsd0NBQXdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQ2hFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHdCQUF1QixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3BDLGNBQU0sSUFBSSxBQUFDLEVBQUMsb0NBQW9DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzVELENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLDBDQUF5QyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ3RELGNBQU0sSUFBSSxBQUFDLEVBQUMsc0RBQXNELEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzlFLENBQUMsQ0FBQztBQUVGLE9BQUMsQUFBQyxDQUFDLHVDQUFzQyxDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25ELGNBQU0sSUFBSSxBQUFDLEVBQUMsbURBQW1ELEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO01BQzNFLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUVBLE9BQU8sQUFBQyxDQUFDLDJCQUEwQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQzdDLGFBQVcsQUFBQyxDQUFDLEtBQUksQ0FBQyxDQUFDO0FBQ25CLGFBQVcsQUFBQyxDQUFDLFFBQU8sQ0FBQyxDQUFDO0FBQ3RCLGFBQVcsQUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUFBIiwiZmlsZSI6ImFmQXJyYXlUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCByZWYgPSByZXF1aXJlKFwicmVmXCIpO1xubGV0IEJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xubGV0IGFzeW5jID0gQmx1ZWJpcmQuY29yb3V0aW5lO1xuXG5mdW5jdGlvbiB0ZXN0UGxhdGZvcm0oaWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbXCJURVNUX1wiICsgaWRdID09PSBcIjFcIikge1xuICAgICAgICBkZXNjcmliZShpZCArIFwiIHBsYXRmb3JtXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhZiA9IHJlcXVpcmUoXCIuLi8uLlwiKShpZCk7XG4gICAgICAgICAgICBsZXQgQUZBcnJheSA9IGFmLkFGQXJyYXk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGV4cG9ydCBBRkFycmF5IGNvbnN0cnVjdG9yXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBlbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSgpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5lbGVtZW50cygpID09PSAwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNlbXB0eSgpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3QpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKGFycmF5Lmhvc3RBc3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RBc3luY0FzeW5jKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihhcnJheS5ob3N0U3luYykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzVW5kZWZpbmVkKGFycmF5Lmhvc3RTeW5jQXN5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1VuZGVmaW5lZChhcnJheS5ob3N0U3luY1N5bmMpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc1VuZGVmaW5lZChhcnJheS5ob3N0QXN5bmNTeW5jKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZmFpbCB3aXRoIG9uZSBudW1iZXIgYXJndW1lbnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgb25lIGRpbWVuc2lvbmFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KDEwLCBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygzKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbM10gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb21wbGV4KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2RvdWJsZSgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzc2luZ2xlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNpbnRlZ2VyKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgdHdvIGRpbWVuc2lvbmFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyBBRkFycmF5KDEwLCAyMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChhcnJheSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSAxMCAqIDIwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwICogMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS50eXBlKCkgPT09IGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lm51bWRpbXMoKSA9PT0gMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMCkgPT09IDEwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygxKSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDIpID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygzKSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCAqIDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy5uZGltcyA9PT0gMik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzBdID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzFdID09PSAyMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMudmFsdWVzWzJdID09PSAxKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGltcy52YWx1ZXNbM10gPT09IDEpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzcm93KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb2x1bW4oKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbGZsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgdGhyZWUgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCAzMCwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChhcnJheSkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSAxMCAqIDIwICogMzAgKiA0KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZWxlbWVudHMoKSA9PT0gMTAgKiAyMCAqIDMwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDMpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygyKSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSAxKTtcbiAgICAgICAgICAgICAgICBsZXQgZGltcyA9IGFycmF5LmRpbXMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc09iamVjdChkaW1zKSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMuZWxlbWVudHMgPT09IDEwICogMjAgKiAzMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDMpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1syXSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gMSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZW1wdHkoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NjYWxhcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzdmVjdG9yKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyb3coKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbHVtbigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzY29tcGxleCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbCgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNkb3VibGUoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3NpbmdsZSgpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNyZWFsZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZmxvYXRpbmcoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzaW50ZWdlcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzYm9vbCgpID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdmVyaWZ5NChhcnJheSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzT2JqZWN0KGFycmF5KSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IDEwICogMjAgKiAzMCAqIDQwICogNCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmVsZW1lbnRzKCkgPT09IDEwICogMjAgKiAzMCAqIDQwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5udW1kaW1zKCkgPT09IDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDApID09PSAxMCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmRpbXMoMSkgPT09IDIwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuZGltcygyKSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5kaW1zKDMpID09PSA0MCk7XG4gICAgICAgICAgICAgICAgbGV0IGRpbXMgPSBhcnJheS5kaW1zKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNPYmplY3QoZGltcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLmVsZW1lbnRzID09PSAxMCAqIDIwICogMzAgKiA0MCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRpbXMubmRpbXMgPT09IDQpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1swXSA9PT0gMTApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1sxXSA9PT0gMjApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1syXSA9PT0gMzApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkaW1zLnZhbHVlc1szXSA9PT0gNDApO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2VtcHR5KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzY2FsYXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3ZlY3RvcigpID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5Lmlzcm93KCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNjb2x1bW4oKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2NvbXBsZXgoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc3JlYWwoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzZG91YmxlKCkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkuaXNzaW5nbGUoKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmlzcmVhbGZsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Zsb2F0aW5nKCkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2ludGVnZXIoKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5pc2Jvb2woKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbmV3IGZvdXIgZGltZW5zaW9uYWxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoMTAsIDIwLCAzMCwgNDAsIGFmLmRUeXBlLmYzMik7XG4gICAgICAgICAgICAgICAgdmVyaWZ5NChhcnJheSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG5ldyBmb3VyIGRpbWVuc2lvbmFsIGZyb20gZGltNFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgQUZBcnJheSh7IHZhbHVlczogWzEwLCAyMCwgMzAsIDQwXSB9LCBhZi5kVHlwZS5mMzIpO1xuICAgICAgICAgICAgICAgIHZlcmlmeTQoYXJyYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBuZXcgZm91ciBkaW1lbnNpb25hbCBmcm9tIGRpbTQgYXJyYXlcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IEFGQXJyYXkoWzEwLCAyMCwgMzAsIDQwXSwgYWYuZFR5cGUuZjMyKTtcbiAgICAgICAgICAgICAgICB2ZXJpZnk0KGFycmF5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0aWFsaXplIGZyb20gYnVmZmVyLCBjb3B5YWJsZSwgYW5kIHJlYWRhYmxlIC0gYXN5bmNocm9ub3VzbHkgdy8gZ2VuZXJhdG9yc1wiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSBhc3luYyhmdW5jdGlvbiooKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnQgPSByZWYudHlwZXMuaW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnVmZiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50LnNldChidWZmLCB2ICogaW50LnNpemUsIHYgKiB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGUpKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNGdW5jdGlvbihBRkFycmF5LmNyZWF0ZUFzeW5jKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0geWllbGQgQUZBcnJheS5jcmVhdGVBc3luYyhjb3VudCwgYWYuZFR5cGUuczMyLCBidWZmKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5LmJ5dGVzKCkgPT09IGNvdW50ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmMiA9IG5ldyBCdWZmZXIoaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGFycmF5Lmhvc3RBc3luYyhidWZmMik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXkyID0gYXJyYXkuY29weSgpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkyIGluc3RhbmNlb2YgQUZBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIuYnl0ZXMoKSA9PT0gYXJyYXkuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmMyA9IHlpZWxkIGFycmF5Mi5ob3N0QXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzIGluc3RhbmNlb2YgQnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzLmxlbmd0aCA9PT0gaW50LnNpemUgKiBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMywgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBkbyBzb21lIGluZGV4aW5nOlxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHlpZWxkIGFycmF5Mi52YWx1ZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSAwLjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoMSkudmFsdWVBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMS4wKTtcblxuICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgYXJyYXkyLmF0KDIpLnNjYWxhckFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA0LjApO1xuXG4gICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBhcnJheTIuYXQoXCJlbmRcIikuc2NhbGFyQXN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDkuMCAqIDkuMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGFycmF5Mi5hdChhZi5lbmQgLSAxKS5zY2FsYXJBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOC4wICogOC4wKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmKCkubm9kZWlmeShkb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0aWFsaXplIGZyb20gYnVmZmVyLCBjb3B5YWJsZSwgYW5kIHJlYWRhYmxlIC0gc3luY2hyb25vdXNseSAoYmxvY2tpbmcpXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnQgPSByZWYudHlwZXMuaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gMTA7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQnVmZmVyKGludC5zaXplICogY291bnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgY291bnQ7IHYrKykge1xuICAgICAgICAgICAgICAgICAgICBpbnQuc2V0KGJ1ZmYsIHYgKiBpbnQuc2l6ZSwgdiAqIHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFzc2VydChfLmlzRnVuY3Rpb24oQUZBcnJheS5jcmVhdGUpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXy5pc0Z1bmN0aW9uKEFGQXJyYXkuY3JlYXRlU3luYykpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gQUZBcnJheS5jcmVhdGVTeW5jKGNvdW50LCBhZi5kVHlwZS5zMzIsIGJ1ZmYpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheS5ieXRlcygpID09PSBjb3VudCAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYXJyYXkudHlwZSgpID09PSBhZi5kVHlwZS5zMzIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYyID0gbmV3IEJ1ZmZlcihpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICBhcnJheS5ob3N0U3luYyhidWZmMik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBjb3VudDsgdisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2MSA9IGludC5nZXQoYnVmZiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYyID0gaW50LmdldChidWZmMiwgdiAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2Mik7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh2MSA9PT0gdiAqIHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBhcnJheS5jb3B5KCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFycmF5MiBpbnN0YW5jZW9mIEFGQXJyYXkpO1xuICAgICAgICAgICAgICAgIGFzc2VydChhcnJheTIuYnl0ZXMoKSA9PT0gYXJyYXkuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmYzID0gYXJyYXkyLmhvc3RTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmYzIGluc3RhbmNlb2YgQnVmZmVyKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYnVmZjMubGVuZ3RoID09PSBpbnQuc2l6ZSAqIGNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IGNvdW50OyB2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYxID0gaW50LmdldChidWZmLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdjIgPSBpbnQuZ2V0KGJ1ZmYzLCB2ICogaW50LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQodjEgPT09IHYyKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHYxID09PSB2ICogdik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gTGV0J3MgZG8gc29tZSBpbmRleGluZzpcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGFycmF5Mi52YWx1ZVN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMC4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheS5hdCgxKS52YWx1ZVN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gMS4wKTtcblxuICAgICAgICAgICAgICAgIHYgPSBhcnJheTIuYXQoMikuc2NhbGFyU3luYygpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh2ID09PSA0LjApO1xuXG4gICAgICAgICAgICAgICAgdiA9IGFycmF5Mi5hdChcImVuZFwiKS5zY2FsYXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHYgPT09IDkuMCAqIDkuMCk7XG5cbiAgICAgICAgICAgICAgICB2ID0gYXJyYXkyLmF0KGFmLmVuZCAtIDEpLnNjYWxhclN5bmMoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodiA9PT0gOC4wICogOC4wKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgYXNzaWdubWVudCBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBhc3NpZ25tZW50IG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBpbmRleGluZyBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBpbmRleGluZyBvcGVyYXRvciB0ZXN0cyBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3Igcm93XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgcm93IHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGNvbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGNvbCB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBzbGljZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHNsaWNlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHJvd3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSByb3dzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGNvbHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBjb2xzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIHNsaWNlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IHNsaWNlcyB0ZXN0IGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIHRlc3RzIGZvciBhc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGFycmF5IGFzIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgdGVzdHMgZm9yIGFyaXRobWV0aWMgb3BlcmF0b3JzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgYXJyYXkgYXJpdGhtZXRpYyBvcGVyYXRvciB0ZXN0cyBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBiZSB0ZXN0cyBmb3IgbG9naWNhbCBvcGVyYXRvcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBhcnJheSBsb2dpY2FsIG9wZXJhdG9yIHRlc3RzIGZvciAke2lkfVxcbmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZGVzY3JpYmUoXCJBRkFycmF5IGNsYXNzIGFuZCBtZXRob2RzXCIsIGZ1bmN0aW9uKCkge1xuICAgIHRlc3RQbGF0Zm9ybShcIkNQVVwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJPcGVuQ0xcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1VEQVwiKTtcbn0pOyJdfQ== +//# sourceMappingURL=afArrayTests.js.map diff --git a/tests/es5/afArrayTests.js.map b/tests/es5/afArrayTests.js.map new file mode 100644 index 0000000..271d17b --- /dev/null +++ b/tests/es5/afArrayTests.js.map @@ -0,0 +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 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 diff --git a/tests/es5/createArrayFunctionTests.js b/tests/es5/createArrayFunctionTests.js index 3fa590b..be159e8 100644 --- a/tests/es5/createArrayFunctionTests.js +++ b/tests/es5/createArrayFunctionTests.js @@ -1,5 +1,37 @@ +/* +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"; -"use strict"; +/* global describe,it */ + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -7,167 +39,127 @@ 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(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($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)); + + 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."); } - $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")); - }); - }); - 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")); + 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); + }); }); - }); }); - } -} -describe("Functions to create arrays", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0ZUFycmF5RnVuY3Rpb25UZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQztBQUNwQixLQUFJLE9BQU0sSUFBSSxDQUFFLE9BQU0sRUFBSSxHQUFDLENBQUMsSUFBTSxJQUFFLENBQUc7QUFDbkMsV0FBTyxBQUFDLENBQUMsRUFBQyxFQUFJLFlBQVUsQ0FBRyxVQUFVLEFBQUQ7QUFDaEMsQUFBSSxRQUFBLENBQUEsRUFBQyxFQUFJLENBQUEsT0FBTSxBQUFDLENBQUMsT0FBTSxDQUFDLEFBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUU3QixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLHlEQUF3RCxDQUFHLFVBQVUsSUFBRztBQUN2RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0FoRGpDLGVBQWMsc0JBQXNCLEFBQUMsQ0FnREgsY0FBVSxBQUFEOzs7OztBQWhEM0MsaUJBQU8sQ0FBUCxlQUFjLHdCQUF3QixBQUFkLENBQXhCLFNBQVMsSUFBRyxDQUFHO0FBQ1Qsb0JBQU8sSUFBRzs7OzBCQWdEb0IsQ0FBQSxFQUFDLE1BQU0sQUFBQyxDQUFDLENBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDOzs7OztBQWpEL0QseUJBa0R5QyxDQUFBLEtBQUksZ0JBQWdCLEFBQUMsRUFBQyxDQWxEeEM7O3lCQUF2QixDQUFBLElBQUcsS0FBSzs7OztBQW1EZ0IseUJBQUssQUFBQyxDQUFDLElBQUcsV0FBYSxPQUFLLENBQUMsQ0FBQztBQUM5Qix5QkFBSyxBQUFDLENBQUMsSUFBRyxPQUFPLEdBQUssQ0FBQSxDQUFBLEVBQUksRUFBQSxDQUFBLENBQUksQ0FBQSxHQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXZDLDJCQUFhLEVBQUEsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLElBQUcsT0FBTyxFQUFJLENBQUEsR0FBRSxLQUFLLENBQUcsQ0FBQSxDQUFBLEVBQUUsQ0FBRzt3QkFDbkMsQ0FBQSxHQUFFLElBQUksQUFBQyxDQUFDLElBQUcsQ0FBRyxDQUFBLENBQUEsRUFBSSxDQUFBLEdBQUUsS0FBSyxDQUFDO0FBQ3BDLDJCQUFLLEFBQUMsQ0FBQyxDQUFBLEdBQUssQ0FBQSxNQUFLLGlCQUFpQixDQUFBLEVBQUssQ0FBQSxDQUFBLEdBQUssQ0FBQSxNQUFLLGlCQUFpQixDQUFDLENBQUM7QUFDcEUsMkJBQUssQUFBQyxDQUFDLElBQUcsTUFBTSxBQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBTSxFQUFBLENBQUMsQ0FBQztvQkFDL0I7QUFBQTs7O0FBMUR4Qix5QkFBTyxDQUFBLElBQUcsSUFBSSxBQUFDLEVBQUMsQ0FBQTs7QUFDbUIsWUFDL0IsT0FBNkIsS0FBRyxDQUFDLENBQUM7VUF5RGxCLENBM0RtQyxDQTJEbEMsQ0FBQztBQUNGLFVBQUEsQUFBQyxFQUFDLFFBQVEsQUFBQyxDQUFDLElBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztBQUNGLFNBQUMsQUFBQyxDQUFDLDJEQUEwRCxDQUFHLFVBQVUsSUFBRztBQUN6RSxBQUFJLFlBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEFBQUMsQ0EvRGpDLGVBQWMsc0JBQXNCLEFBQUMsQ0ErREgsY0FBVSxBQUFEOzs7OztBQS9EM0MsaUJBQU8sQ0FBUCxlQUFjLHdCQUF3QixBQUFkLENBQXhCLFNBQVMsSUFBRyxDQUFHO0FBQ1Qsb0JBQU8sSUFBRzs7OzBCQStEb0IsQ0FBQSxFQUFDLE1BQU0sQUFBQyxDQUFDLENBQUMsQ0FBQSxDQUFHLEVBQUEsQ0FBQyxDQUFHLENBQUEsRUFBQyxNQUFNLElBQUksQ0FBQzs7Ozs7QUFoRWpFLHlCQWlFeUMsQ0FBQSxLQUFJLGdCQUFnQixBQUFDLEVBQUMsQ0FqRXhDOzt5QkFBdkIsQ0FBQSxJQUFHLEtBQUs7Ozs7QUFrRWdCLHlCQUFLLEFBQUMsQ0FBQyxJQUFHLFdBQWEsT0FBSyxDQUFDLENBQUM7QUFDOUIseUJBQUssQUFBQyxDQUFDLElBQUcsT0FBTyxHQUFLLENBQUEsQ0FBQSxFQUFJLEVBQUEsQ0FBQSxDQUFJLENBQUEsS0FBSSxLQUFLLENBQUMsQ0FBQztBQUV6QywyQkFBYSxFQUFBLENBQUcsQ0FBQSxDQUFBLEVBQUksQ0FBQSxJQUFHLE9BQU8sRUFBSSxDQUFBLEtBQUksS0FBSyxDQUFHLENBQUEsQ0FBQSxFQUFFLENBQUc7d0JBQ3JDLENBQUEsS0FBSSxJQUFJLEFBQUMsQ0FBQyxJQUFHLENBQUcsQ0FBQSxDQUFBLEVBQUksQ0FBQSxLQUFJLEtBQUssQ0FBQztBQUN4QywyQkFBSyxBQUFDLENBQUMsQ0FBQSxJQUFNLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxJQUFNLElBQUUsQ0FBQSxFQUFLLEVBQUMsQ0FBQSxFQUFJLEVBQUEsQ0FBQSxFQUFLLENBQUEsQ0FBQSxFQUFJLElBQUUsQ0FBQSxFQUFLLENBQUEsQ0FBQSxFQUFJLEVBQUEsQ0FBQyxDQUFDLENBQUM7b0JBQy9EO0FBQUE7OztBQXhFeEIseUJBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLFlBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO1VBdUVsQixDQXpFbUMsQ0F5RWxDLENBQUM7QUFDRixVQUFBLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxPQUFNLENBQUcsVUFBVSxBQUFEO0FBQ3ZCLFNBQUMsQUFBQyxDQUFDLDRFQUEyRSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pGLFlBQUk7QUFDQSxBQUFJLGNBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxFQUFDLE1BQU0sQUFBQyxDQUFDLENBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEMsbUJBQU07VUFDVixDQUNBLE9BQU0sQ0FBQSxDQUFHO0FBQ0wsZUFBSSwwQkFBeUIsS0FBSyxBQUFDLENBQUMsQ0FBQSxRQUFRLENBQUMsQ0FBRztBQUM1QyxxQkFBTTtZQUNWLEtBQ0s7QUFDRCxrQkFBTSxJQUFJLE1BQUksQUFBQyxDQUFDLHNDQUFxQyxDQUFDLENBQUM7WUFDM0Q7QUFBQSxVQUNKO0FBQUEsQUFDQSxjQUFNLElBQUksTUFBSSxBQUFDLENBQUMsb0JBQW1CLENBQUMsQ0FBQztRQUV6QyxDQUFDLENBQUM7QUFDRixTQUFDLEFBQUMsQ0FBQywwREFBeUQsQ0FBRyxVQUFVLElBQUc7QUFDeEUsQUFBSSxZQUFBLENBQUEsQ0FBQSxFQUFJLENBQUEsS0FBSSxBQUFDLENBaEdqQyxlQUFjLHNCQUFzQixBQUFDLENBZ0dILGNBQVUsQUFBRDs7Ozs7QUFoRzNDLGlCQUFPLENBQVAsZUFBYyx3QkFBd0IsQUFBZCxDQUF4QixTQUFTLElBQUcsQ0FBRztBQUNULG9CQUFPLElBQUc7OzswQkFnR29CLENBQUEsRUFBQyxNQUFNLEFBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBRyxFQUFBLENBQUMsQ0FBRyxDQUFBLEVBQUMsTUFBTSxJQUFJLENBQUM7Ozs7O0FBakdqRSx5QkFrR3lDLENBQUEsS0FBSSxnQkFBZ0IsQUFBQyxFQUFDLENBbEd4Qzs7eUJBQXZCLENBQUEsSUFBRyxLQUFLOzs7O0FBbUdnQix5QkFBSyxBQUFDLENBQUMsSUFBRyxXQUFhLE9BQUssQ0FBQyxDQUFDO0FBQzlCLHlCQUFLLEFBQUMsQ0FBQyxJQUFHLE9BQU8sR0FBSyxDQUFBLENBQUEsRUFBSSxFQUFBLENBQUEsQ0FBSSxDQUFBLEtBQUksS0FBSyxDQUFDLENBQUM7QUFFekMsMkJBQWEsRUFBQSxDQUFHLENBQUEsQ0FBQSxFQUFJLENBQUEsSUFBRyxPQUFPLEVBQUksQ0FBQSxLQUFJLEtBQUssQ0FBRyxDQUFBLENBQUEsRUFBRSxDQUFHO3dCQUNyQyxDQUFBLEtBQUksSUFBSSxBQUFDLENBQUMsSUFBRyxDQUFHLENBQUEsQ0FBQSxFQUFJLENBQUEsS0FBSSxLQUFLLENBQUM7QUFDeEMsMkJBQUssQUFBQyxDQUFDLENBQUEsSUFBTSxFQUFBLENBQUEsRUFBSyxFQUFDLENBQUEsRUFBSSxFQUFDLEdBQUUsQ0FBQSxFQUFLLENBQUEsQ0FBQSxFQUFJLElBQUUsQ0FBQSxFQUFLLENBQUEsQ0FBQSxFQUFJLEVBQUEsQ0FBQyxDQUFDLENBQUM7b0JBQ3JEO0FBQUE7OztBQXpHeEIseUJBQU8sQ0FBQSxJQUFHLElBQUksQUFBQyxFQUFDLENBQUE7O0FBQ21CLFlBQy9CLE9BQTZCLEtBQUcsQ0FBQyxDQUFDO1VBd0dsQixDQTFHbUMsQ0EwR2xDLENBQUM7QUFDRixVQUFBLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxVQUFTLENBQUcsVUFBVSxBQUFELENBQUc7QUFDN0IsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsb0NBQW9DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzVELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLE9BQU0sQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUMxQixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxpQ0FBaUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsVUFBVSxBQUFELENBQUc7QUFDekIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsZ0NBQWdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLFVBQVMsQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUM3QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxvQ0FBb0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBVSxBQUFELENBQUc7QUFDL0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoiY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyYW5kdVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgeWllbGQgdW5pZm9ybSByYW5kb20gaW50IGFycmF5IHdpdGggMiBkaW1lbnNpb25zXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gYXN5bmMoZnVuY3Rpb24qKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gYWYucmFuZHUoMiwgNCwgYWYuZFR5cGUuczMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geWllbGQgYXJyYXkuY29weVRvSG9zdEFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZGF0YS5sZW5ndGggPT0gMiAqIDQgKiBpbnQuc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLyBpbnQuc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGludC5nZXQoZGF0YSwgaSAqIGludC5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodiA+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..a7386c7 --- /dev/null +++ b/tests/es5/createArrayFunctionTests.js.map @@ -0,0 +1 @@ +{"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 1ae6a95..57fb322 100644 --- a/tests/es5/deviceTests.js +++ b/tests/es5/deviceTests.js @@ -1,66 +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"; -"use strict"; +/* global describe,it */ + 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; - try { - for (var $__1 = void 0, - $__0 = (infos)[$traceurRuntime.toProperty(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; +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 _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(); }); - }); + + 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=data:application/json;base64,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LE9BQUMsQUFBQyxDQUFDLDhCQUE2QixDQUFHLFVBQVMsSUFBRyxDQUFHO0FBQzlDLFNBQUMsS0FBSyxBQUFDLENBQUMsSUFBRyxDQUFDLENBQUM7TUFDakIsQ0FBQyxDQUFDO0FBRUYsT0FBQyxBQUFDLENBQUMsNkJBQTRCLENBQUcsVUFBUyxJQUFHLENBQUc7QUFDN0MsU0FBQyxVQUFVLEFBQUMsRUFBQyxRQUFRLEFBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7QUFFRixPQUFDLEFBQUMsQ0FBQyw4Q0FBNkMsQ0FBRyxVQUFTLElBQUcsQ0FBRztBQUM5RCxTQUFDLFVBQVUsQUFBQyxDQUFDLEdBQUUsQ0FBQyxLQUNSLEFBQUMsQ0FBQyxTQUFTLEFBQUQsQ0FBRztBQUNiLGFBQUcsQUFBQyxDQUFDLEdBQUksTUFBSSxBQUFDLENBQUMsbUJBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQ0EsVUFBUyxBQUFELENBQUc7QUFDUCxhQUFHLEFBQUMsRUFBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFBQSxBQUNKO0FBRUEsT0FBTyxBQUFDLENBQUMsZ0JBQWUsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNsQyxhQUFXLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUNuQixhQUFXLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN0QixhQUFXLEFBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRiIsImZpbGUiOiJkZXZpY2VUZXN0cy5qcyIsInNvdXJjZVJvb3QiOiJ0ZXN0cy9lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEFycmF5RmlyZVxuQ29weXJpZ2h0IChjKSAyMDE1IEfDoWJvciBNZXrFkSBha2EgdW5ib3JuY2hpa2tlbiAoZ2Fib3IubWV6b0BvdXRsb29rLmNvbSlcbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBBcnJheUZpcmUgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmxldCBhc3NlcnQgPSByZXF1aXJlKFwiYmV0dGVyLWFzc2VydFwiKTtcbmxldCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmxldCBCbHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtKGlkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W1wiVEVTVF9cIiArIGlkXSA9PT0gXCIxXCIpIHtcbiAgICAgICAgZGVzY3JpYmUoaWQgKyBcIiBwbGF0Zm9ybVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYWYgPSByZXF1aXJlKFwiLi4vLi5cIikoaWQpO1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCByZXR1cm4gYXZhaWxhYmxlIGRldmljZXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRldmljZUNvdW50ID0gYWYuZ2V0RGV2aWNlQ291bnQoKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNlQ291bnQgPiAwKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5mb3MgPSBhZi5nZXREZXZpY2VzKCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNBcnJheShpbmZvcykpO1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmZvcy5sZW5ndGggPT09IGRldmljZUNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIGluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8ubmFtZSkgJiYgaW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNTdHJpbmcoaW5mby5wbGF0Zm9ybSkgJiYgaW5mby5wbGF0Zm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChfLmlzU3RyaW5nKGluZm8uY29tcHV0ZSkgJiYgaW5mby5jb21wdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF8uaXNCb29sZWFuKGluZm8uaXNEb3VibGVBdmFpbGFibGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoXCJzaG91bGQgZG8gc3luYyB3aXRoIGNhbGxiYWNrXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jKGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGRvIHN5bmMgd2l0aCBwcm9taXNlXCIsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhZi5zeW5jQXN5bmMoKS5ub2RlaWZ5KGRvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KFwic3luYyBzaG91bGQgZmFpbGVkIGlmIGRldmljZSBpcyBvdXQgb2YgcmFuZ2VcIiwgZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICAgICAgICAgIGFmLnN5bmNBc3luYygxMDApXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBmYWlsIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKFwiZGV2aWNlIG1ldGhvZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgdGVzdFBsYXRmb3JtKFwiQ1BVXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIk9wZW5DTFwiKTtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDVURBXCIpO1xufSk7XG4iXX0= +//# sourceMappingURL=deviceTests.js.map diff --git a/tests/es5/deviceTests.js.map b/tests/es5/deviceTests.js.map new file mode 100644 index 0000000..6a9ede1 --- /dev/null +++ b/tests/es5/deviceTests.js.map @@ -0,0 +1 @@ +{"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/gfor.js b/tests/es5/gfor.js new file mode 100644 index 0000000..555aeba --- /dev/null +++ b/tests/es5/gfor.js @@ -0,0 +1,65 @@ +/* +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 () { + 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); + } + }); + }); + }); +}); +//# sourceMappingURL=gfor.js.map diff --git a/tests/es5/gfor.js.map b/tests/es5/gfor.js.map new file mode 100644 index 0000000..8c994dc --- /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,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 diff --git a/tests/es5/index.js b/tests/es5/index.js index cb1ec17..f3dde4c 100644 --- a/tests/es5/index.js +++ b/tests/es5/index.js @@ -1,6 +1,40 @@ "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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQTtBQUFBLE1BQU0sQUFBQyxDQUFDLGVBQWMsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sQUFBQyxDQUFDLGdCQUFlLENBQUMsQ0FBQztBQUN6QixNQUFNLEFBQUMsQ0FBQyw0QkFBMkIsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sQUFBQyxDQUFDLDRCQUEyQixDQUFDLENBQUM7QUFDckMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoidGVzdHMvZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBcnJheUZpcmVcbkNvcHlyaWdodCAoYykgMjAxNSBHw6Fib3IgTWV6xZEgYWthIHVuYm9ybmNoaWtrZW4gKGdhYm9yLm1lem9Ab3V0bG9vay5jb20pXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQXJyYXlGaXJlIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbnJlcXVpcmUoXCIuL2RldmljZVRlc3RzXCIpO1xucmVxdWlyZShcIi4vYWZBcnJheVRlc3RzXCIpO1xucmVxdWlyZShcIi4vY3JlYXRlQXJyYXlGdW5jdGlvblRlc3RzXCIpO1xucmVxdWlyZShcIi4vbW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzXCIpO1xuIl19 +require("./gfor"); +//# sourceMappingURL=index.js.map diff --git a/tests/es5/index.js.map b/tests/es5/index.js.map new file mode 100644 index 0000000..733640e --- /dev/null +++ b/tests/es5/index.js.map @@ -0,0 +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;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/es5/mathFunctionTests.js b/tests/es5/mathFunctionTests.js new file mode 100644 index 0000000..5de174a --- /dev/null +++ b/tests/es5/mathFunctionTests.js @@ -0,0 +1,181 @@ +/* + 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 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..6613ff8 --- /dev/null +++ b/tests/es5/mathFunctionTests.js.map @@ -0,0 +1 @@ +{"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 e73f997..d18ee6c 100644 --- a/tests/es5/moveAndReorderArrayTests.js +++ b/tests/es5/moveAndReorderArrayTests.js @@ -1,5 +1,37 @@ +/* +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"; -"use strict"; +/* global describe,it */ + var assert = require("better-assert"); var _ = require("lodash"); var ref = require("ref"); @@ -7,56 +39,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")); - }); - }); - }); - } -} -describe("Functions to create arrays", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); +var testExec = require("./testExec"); + +describe("Functions to create arrays", function () { + testExec.run(function (af) {}); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vdmVBbmRSZW9yZGVyQXJyYXlUZXN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7QUFBQSxXQUFXLENBQUM7QUFFWixBQUFJLEVBQUEsQ0FBQSxNQUFLLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxlQUFjLENBQUMsQ0FBQztBQUNyQyxBQUFJLEVBQUEsQ0FBQSxDQUFBLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxRQUFPLENBQUMsQ0FBQztBQUN6QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQztBQUN4QixBQUFJLEVBQUEsQ0FBQSxRQUFPLEVBQUksQ0FBQSxPQUFNLEFBQUMsQ0FBQyxVQUFTLENBQUMsQ0FBQztBQUNsQyxBQUFJLEVBQUEsQ0FBQSxLQUFJLEVBQUksQ0FBQSxRQUFPLFVBQVUsQ0FBQztBQUM5QixBQUFJLEVBQUEsQ0FBQSxHQUFFLEVBQUksQ0FBQSxHQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLEFBQUksRUFBQSxDQUFBLEtBQUksRUFBSSxDQUFBLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBUyxhQUFXLENBQUcsRUFBQyxDQUFHO0FBQ3ZCLEtBQUksT0FBTSxJQUFJLENBQUUsT0FBTSxFQUFJLEdBQUMsQ0FBQyxJQUFNLElBQUUsQ0FBRztBQUNuQyxXQUFPLEFBQUMsQ0FBQyxFQUFDLEVBQUksWUFBVSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ25DLEFBQUksUUFBQSxDQUFBLEVBQUMsRUFBSSxDQUFBLE9BQU0sQUFBQyxDQUFDLE9BQU0sQ0FBQyxBQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFFN0IsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxNQUFLLENBQUcsVUFBVSxBQUFELENBQUc7QUFDekIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsZ0NBQWdDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLFNBQVEsQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUM1QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxtQ0FBbUMsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsT0FBTSxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQzFCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGlDQUFpQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxTQUFRLENBQUcsVUFBVSxBQUFELENBQUc7QUFDNUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMsbUNBQW1DLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztBQUVGLGFBQU8sQUFBQyxDQUFDLE1BQUssQ0FBRyxVQUFVLEFBQUQsQ0FBRztBQUN6QixTQUFDLEFBQUMsQ0FBQyx1QkFBc0IsQ0FBRyxVQUFTLEFBQUQsQ0FBRztBQUNuQyxnQkFBTSxJQUFJLEFBQUMsRUFBQyxnQ0FBZ0MsRUFBQyxHQUFDLEVBQUMsS0FBRyxFQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0FBRUYsYUFBTyxBQUFDLENBQUMsTUFBSyxDQUFHLFVBQVUsQUFBRCxDQUFHO0FBQ3pCLFNBQUMsQUFBQyxDQUFDLHVCQUFzQixDQUFHLFVBQVMsQUFBRCxDQUFHO0FBQ25DLGdCQUFNLElBQUksQUFBQyxFQUFDLGdDQUFnQyxFQUFDLEdBQUMsRUFBQyxLQUFHLEVBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7QUFFRixhQUFPLEFBQUMsQ0FBQyxXQUFVLENBQUcsVUFBVSxBQUFELENBQUc7QUFDOUIsU0FBQyxBQUFDLENBQUMsdUJBQXNCLENBQUcsVUFBUyxBQUFELENBQUc7QUFDbkMsZ0JBQU0sSUFBSSxBQUFDLEVBQUMscUNBQXFDLEVBQUMsR0FBQyxFQUFDLEtBQUcsRUFBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQUEsQUFDSjtBQUFBLEFBRUEsT0FBTyxBQUFDLENBQUMsNEJBQTJCLENBQUcsVUFBVSxBQUFELENBQUc7QUFDL0MsYUFBVyxBQUFDLENBQUMsS0FBSSxDQUFDLENBQUM7QUFDbkIsYUFBVyxBQUFDLENBQUMsUUFBTyxDQUFDLENBQUM7QUFDdEIsYUFBVyxBQUFDLENBQUMsTUFBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQUEiLCJmaWxlIjoibW92ZUFuZFJlb3JkZXJBcnJheVRlc3RzLmpzIiwic291cmNlUm9vdCI6InRlc3RzL2VzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgQXJyYXlGaXJlXG5Db3B5cmlnaHQgKGMpIDIwMTUgR8OhYm9yIE1lesWRIGFrYSB1bmJvcm5jaGlra2VuIChnYWJvci5tZXpvQG91dGxvb2suY29tKVxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEFycmF5RmlyZSBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cInVzZSBzdHJpY3RcIjtcblxubGV0IGFzc2VydCA9IHJlcXVpcmUoXCJiZXR0ZXItYXNzZXJ0XCIpO1xubGV0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xubGV0IHJlZiA9IHJlcXVpcmUoXCJyZWZcIik7XG5sZXQgQmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG5sZXQgYXN5bmMgPSBCbHVlYmlyZC5jb3JvdXRpbmU7XG5sZXQgaW50ID0gcmVmLnR5cGVzLmludDtcbmxldCBmbG9hdCA9IHJlZi50eXBlcy5mbG9hdDtcblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtIChpZCkge1xuICAgIGlmIChwcm9jZXNzLmVudltcIlRFU1RfXCIgKyBpZF0gPT09IFwiMVwiKSB7XG4gICAgICAgIGRlc2NyaWJlKGlkICsgXCIgcGxhdGZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGFmID0gcmVxdWlyZShcIi4uLy4uXCIpKGlkKTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJqb2luXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBqb2luIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJ0aWxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCB0aWxlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJyZW9yZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdChcInNob3VsZCBiZSBpbXBsZW1lbnRlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRPRE86IGltcGxlbWVudCBpb3RhIHJlb3JkZXIgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzY3JpYmUoXCJzaGlmdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgc2hpZnQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcIm1vZGRpbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IG1vZGRpbXMgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsYXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsYXQgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcImZsaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KFwic2hvdWxkIGJlIGltcGxlbWVudGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVE9ETzogaW1wbGVtZW50IGZsaXAgdGVzdCBmb3IgJHtpZH1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXNjcmliZShcInRyYW5zcG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoXCJzaG91bGQgYmUgaW1wbGVtZW50ZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUT0RPOiBpbXBsZW1lbnQgdHJhbnNwb3NlIHRlc3QgZm9yICR7aWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkZ1bmN0aW9ucyB0byBjcmVhdGUgYXJyYXlzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB0ZXN0UGxhdGZvcm0oXCJDUFVcIik7XG4gICAgdGVzdFBsYXRmb3JtKFwiT3BlbkNMXCIpO1xuICAgIHRlc3RQbGF0Zm9ybShcIkNVREFcIik7XG59KTsiXX0= +//# sourceMappingURL=moveAndReorderArrayTests.js.map diff --git a/tests/es5/moveAndReorderArrayTests.js.map b/tests/es5/moveAndReorderArrayTests.js.map new file mode 100644 index 0000000..62ee0d2 --- /dev/null +++ b/tests/es5/moveAndReorderArrayTests.js.map @@ -0,0 +1 @@ +{"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 new file mode 100644 index 0000000..fa6c8c3 --- /dev/null +++ b/tests/es5/testExec.js @@ -0,0 +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); + }); +} + +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; +//# sourceMappingURL=testExec.js.map diff --git a/tests/es5/testExec.js.map b/tests/es5/testExec.js.map new file mode 100644 index 0000000..968e8b4 --- /dev/null +++ b/tests/es5/testExec.js.map @@ -0,0 +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,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 b/tests/es5/testHelpers.js new file mode 100644 index 0000000..6c6bdea --- /dev/null +++ b/tests/es5/testHelpers.js @@ -0,0 +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 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); + } + } +}; + +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..f399dd0 --- /dev/null +++ b/tests/es5/testHelpers.js.map @@ -0,0 +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":["/*\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 68315dd..58b0ca9 100644 --- a/tests/es6/afArrayTests.js +++ b/tests/es6/afArrayTests.js @@ -30,255 +30,199 @@ 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; -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)); - }); - - it("should fail with one number argument", function() { - try { - let array = new AFArray(1); - assert(false); - } - catch (e) { - } - }); - - 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); - }); +describe("AFArray class and methods", function () { + testExec.run(function (af) { + let AFArray = af.AFArray; - 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 export AFArray constructor", function () { + assert(_.isFunction(AFArray)); + }); - 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 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)); + }); - 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 fail with one number argument", function () { + try { + let array = new AFArray(1); + assert(false); } + catch (e) { + } + }); - 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); - 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 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); - } + 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); + }); - // Let's do some indexing: - let v = yield array2.valueAsync(); - assert(v === 0.0); + 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); + }); - v = yield array2.at(1).valueAsync(); - assert(v === 1.0); + 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); + }); - v = yield array2.at(2).scalarAsync(); - assert(v === 4.0); + 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); + }); - v = yield array2.at("end").scalarAsync(); - assert(v === 9.0 * 9.0); + it("should create new four dimensional from dim4", function () { + let array = new AFArray({values: [10, 20, 30, 40]}, af.dType.f32); + verify4(array); + }); - 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 +231,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 +249,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 +260,190 @@ function testPlatform(id) { } // Let's do some indexing: - let v = array2.valueSync(); + let v = array2.value(); assert(v === 0.0); - v = array.at(1).valueSync(); + v = array2.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); }); + 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.value(); + 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).value(); + 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).scalar(); + 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").scalar(); + 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).scalar(); + 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 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); + + 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("AFArray class and methods", function() { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + 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)); + }); + + 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 () { + let arr, sub; + let x = 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); + + return 1; + }); + + assert(x === 1); + + arr.set(3, 2); + + try { + sub.set(0, 2); + assert(false); + } + catch (e) { + if (!/free\(\)/.test(e.message)) { + throw e; + } + } + }); + + 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); + + // 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; + } + } + }); + }); + }); + }); }); \ No newline at end of file diff --git a/tests/es6/createArrayFunctionTests.js b/tests/es6/createArrayFunctionTests.js index 95c8ba6..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"); @@ -38,112 +38,73 @@ 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."); - - }); - 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); - }); - }); + } + throw new Error("This should throw."); - 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`); + 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("Functions to create arrays", function () { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + }); }); \ No newline at end of file diff --git a/tests/es6/deviceTests.js b/tests/es6/deviceTests.js index 9b83236..454d1de 100644 --- a/tests/es6/deviceTests.js +++ b/tests/es6/deviceTests.js @@ -30,53 +30,44 @@ 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"); +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/runTests.js b/tests/es6/gfor.js similarity index 58% rename from runTests.js rename to tests/es6/gfor.js index 2dec0b1..10db310 100644 --- a/runTests.js +++ b/tests/es6/gfor.js @@ -29,32 +29,35 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 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); +"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 () { + 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); + 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 = af.sum(arr.at(idx, af.span)); + assert(sum === (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)); + } + }); + }); }); }); \ No newline at end of file diff --git a/tests/es6/index.js b/tests/es6/index.js index 74406c4..6402f72 100644 --- a/tests/es6/index.js +++ b/tests/es6/index.js @@ -32,4 +32,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. require("./deviceTests"); require("./afArrayTests"); require("./createArrayFunctionTests"); +require("./mathFunctionTests"); require("./moveAndReorderArrayTests"); +require("./gfor"); \ No newline at end of file diff --git a/tests/es6/mathFunctionTests.js b/tests/es6/mathFunctionTests.js new file mode 100644 index 0000000..11d3754 --- /dev/null +++ b/tests/es6/mathFunctionTests.js @@ -0,0 +1,179 @@ +/* + 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 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); + }); + }); +}); \ No newline at end of file diff --git a/tests/es6/moveAndReorderArrayTests.js b/tests/es6/moveAndReorderArrayTests.js index eb38596..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"); @@ -38,65 +38,10 @@ let Bluebird = require("bluebird"); let async = Bluebird.coroutine; let int = ref.types.int; let float = ref.types.float; - -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("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`); - }); - }); - }); - } -} +let testExec = require("./testExec"); describe("Functions to create arrays", function () { - testPlatform("CPU"); - testPlatform("OpenCL"); - testPlatform("CUDA"); + testExec.run(function(af) { + + }); }); \ No newline at end of file diff --git a/tests/es6/testExec.js b/tests/es6/testExec.js new file mode 100644 index 0000000..3f45160 --- /dev/null +++ b/tests/es6/testExec.js @@ -0,0 +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 = { + run: function(f) { + let platfroms = af.supportedPlatforms(); + for (let pl of platfroms) { + runOn(pl, f); + } + } +}; + +module.exports = testExec; diff --git a/tests/es6/testHelpers.js b/tests/es6/testHelpers.js new file mode 100644 index 0000000..f101c2a --- /dev/null +++ b/tests/es6/testHelpers.js @@ -0,0 +1,82 @@ +/* + 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, {}); + 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); + } + } +}; + +module.exports = testHelpers; \ No newline at end of file diff --git a/tests/index.js b/tests/index.js index 452e722..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-runtime"); - module.exports = require("./es5"); -} \ No newline at end of file + +require(es6 ? "./es6" : "./es5"); \ No newline at end of file