From 50fbca9df79670dedd71fd95c5685e8acc021418 Mon Sep 17 00:00:00 2001 From: Jonathan Lurie Date: Thu, 9 Mar 2017 16:25:53 -0500 Subject: [PATCH 1/9] custom logo in example and doc --- examples/css/style.css | 21 +++++++++++++++++++++ examples/fileToImage2D.html | 12 ++++++++++++ examples/forEachPixel.html | 25 ++++++++++++++++--------- examples/image2DToCanvas.html | 15 ++++++++++++++- examples/urlToImage2D.html | 12 ++++++++++++ images/pixpipe.png | Bin 0 -> 13212 bytes readme.md | 4 +++- 7 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 examples/css/style.css create mode 100644 images/pixpipe.png diff --git a/examples/css/style.css b/examples/css/style.css new file mode 100644 index 0000000..f289a6f --- /dev/null +++ b/examples/css/style.css @@ -0,0 +1,21 @@ +body { + font-family: 'Roboto', sans-serif; + background-color: #3a3a3a; + color: #e6e6e6; + font-size: large; + margin: 10px 20vw 0 20vw; +} + +canvas, +img { + margin: 10px 0 10px 0; + width: 60vw; + height: auto; +} + +code { + background-color: #676767; + padding: 2px 5px 2px 5px; + border-radius: 4px; + font-family: monospace; +} diff --git a/examples/fileToImage2D.html b/examples/fileToImage2D.html index ada72a0..615a545 100644 --- a/examples/fileToImage2D.html +++ b/examples/fileToImage2D.html @@ -3,8 +3,20 @@ URL to Image2D + + +

Pixpipejs

+

+ This does the following : +

+ +

Select an image file: diff --git a/examples/forEachPixel.html b/examples/forEachPixel.html index e0458c6..5bbb0d7 100644 --- a/examples/forEachPixel.html +++ b/examples/forEachPixel.html @@ -4,22 +4,29 @@ - + + + +

Pixpipejs

+

+ This does the following : +

+ +

+

-

The original image

+

The original image:

-

The transformed image, with switched chanels

+

The transformed image, with switched chanels:

diff --git a/examples/image2DToCanvas.html b/examples/image2DToCanvas.html index 8f8d86b..a1cab38 100644 --- a/examples/image2DToCanvas.html +++ b/examples/image2DToCanvas.html @@ -3,15 +3,28 @@ Image2D To Canvas + + + + +

Pixpipejs

+

+ This does the following : +

+ +

+ + + + +

Pixpipejs

+

+ This does the following : +

+

diff --git a/images/pixpipe.png b/images/pixpipe.png new file mode 100644 index 0000000000000000000000000000000000000000..97b3e050b9dbc4cde472adca8236abaa4ddba6df GIT binary patch literal 13212 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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index c31f716..939da00 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,6 @@ -# Pixpipe.js + + + Pixpipe.js is an attempt of building an image processing pipeline entirely in Javascript for browsers. Its architecture was somewhat inspired by [ITK](https://itk.org/), making a clear separation between objects that *contain* data (`Image2D`) from object that *process* data (`Filter`). The concept of *pipeline* implies that the output of a `Filter` can be used as input for the next one, like in *ITK*. In Pixpipe.js, this is done by using the `Filter`'s methods `addInput()` and `getOuput()`. Some `Filter` may have several *input* or *output* of different kinds. From 2dba422d8f3f0c49744b189a4fd153239a12add4 Mon Sep 17 00:00:00 2001 From: Jonathan Lurie Date: Thu, 9 Mar 2017 17:30:54 -0500 Subject: [PATCH 2/9] start spatial convolution filter --- dist/pixpipe.js | 197 ++++++++++++++++++++++++- dist/pixpipe.js.map | 2 +- src/core/Image2D.js | 56 ++++++- src/filter/SpatialConvolutionFilter.js | 20 +++ src/pixpipe.js | 3 + 5 files changed, 270 insertions(+), 8 deletions(-) create mode 100644 src/filter/SpatialConvolutionFilter.js diff --git a/dist/pixpipe.js b/dist/pixpipe.js index 58d55fa..fa2f4a1 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -354,6 +354,48 @@ class Image2D extends PixpipeObject{ } + /** + * Modify the color of a given pixel. + * @param {Object} position - 2D position in form {x, y} + * @param {Array} color - color, must have the same numb of components per pix than the image + */ + setPixel( position, color ){ + if("x" in position && position.x >=0 && position.x < this._width && + "y" in position && position.y >=0 && position.y < this._height && + color.length == this._componentsPerPixel) + { + + var pos1D = this.get1dIndexFrom2dPosition( position ); + + for(var i=0; i=0 && position.x < this._width && + "y" in position && position.y >=0 && position.y < this._height) + { + var pos1D = this.get1dIndexFrom2dPosition( position ); + var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel); + return color; + + }else{ + console.log(position); + console.warn("The requested position is outside the image."); + return null; + } + } + + /** * @return {Number} the width of the Image2D */ @@ -398,8 +440,8 @@ class Image2D extends PixpipeObject{ /** * Compute the (x, y) position from a position in a 1D array. - * @param {Number} i - the index of a pixel. This has nothing to do with - * the number of components per pixel. + * This has nothing to do with the number of components per pixel. + * @param {Number} i - the index of a pixel. * @return {Object} coordinate as {x, y} */ get2dPositionFrom1dIndex( i ){ @@ -409,6 +451,17 @@ class Image2D extends PixpipeObject{ } } + + /** + * Compute the 1D index within the data buffer from a 2D position {x, y}. + * This has nothing to do with the number of components per pixel. + * @param {Object} position - 2D coord like {x, y} + * @return {Number} the 1D position within the buffer + */ + get1dIndexFrom2dPosition( position ){ + return (position.x + position.y*this._width); + } + } /* END of class Image2D */ /* @@ -566,8 +619,6 @@ class CanvasImageWriter extends Filter{ */ update(){ - console.log(this._metadata); - // abort if invalid input if(!this.hasValidInput() ) return; @@ -818,7 +869,6 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { * Run the filter */ update(){ - console.log("hello2"); if( ! this.hasValidInput()) return; @@ -839,6 +889,141 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { } /* END class ForEachPixelImageFilter */ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +/** +* A filter of type ForEachRowImageFilter can perform a operation on evey pixel +* of an Image2D, row by row with a simple interface. This is actually the +* default behaviour of ForEachPixelImageFilter. This filter is especially +* usefull for generative design or visual experiments using cellular automata. +* For this purpose, a per-pixel-callback +* must be specified using method +* .on( "pixel" , function( coord, color ){ ... }) +* where coord is of form {x, y} and color is of form [r, g, b, a] (with possibly) +* a different number of components per pixel. +* This callback must return, or null (original color not modified), +* or a array of color (same dimension as the one in arguments). +* +* Usage: examples/forEachPixel.html +* +* @example +* var forEachPixelFilter = new pixpipe.ForEachPixelImageFilter(); +* forEachPixelFilter.on( "pixel", function(position, color){ +* +* return [ +* color[1], // red (takes the values from green) +* color[0], // green (takes the values from red) +* color[2] * 0.5, // blue get 50% darker +* 255 // alpha, at max +* ] +* +* } +* ); +* +*/ +class ForEachRowImageFilter extends PixelWiseImageFilter { + + constructor(){ + super(); + } + + + /** + * Run the filter + */ + update(){ + if( ! this.hasValidInput()) + return; + + var inputImage2D = this._getInput(); + var firstPixel = 0; + var lastPixel = inputImage2D.getWidth() * inputImage2D.getHeight(); + var increment = 1; + + this._inputBuffer = inputImage2D.getDataCopy(); + + this._forEachPixelOfSuch(firstPixel, lastPixel, increment ); + + // building the output + var img2D = new Image2D(); + img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight()); + this._setOutput( img2D ); + } + +} /* END class ForEachRowImageFilter */ + +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +/** +* A filter of type ForEachColumnImageFilter can perform a operation on evey pixel +* of an Image2D, row by column with a simple interface. This filter is especially +* usefull for generative design or visual experiments using cellular automata. +* For this purpose, a per-pixel-callback +* must be specified using method +* .on( "pixel" , function( coord, color ){ ... }) +* where coord is of form {x, y} and color is of form [r, g, b, a] (with possibly) +* a different number of components per pixel. +* This callback must return, or null (original color not modified), +* or a array of color (same dimension as the one in arguments). +* +* Usage: examples/forEachPixel.html +* +* @example +* var forEachPixelFilter = new pixpipe.ForEachPixelImageFilter(); +* forEachPixelFilter.on( "pixel", function(position, color){ +* +* return [ +* color[1], // red (takes the values from green) +* color[0], // green (takes the values from red) +* color[2] * 0.5, // blue get 50% darker +* 255 // alpha, at max +* ] +* +* } +* ); +* +*/ +class ForEachColumnImageFilter extends PixelWiseImageFilter { + + constructor(){ + super(); + } + + + /** + * Run the filter + */ + update(){ + if( ! this.hasValidInput()) + return; + + var inputImage2D = this._getInput(); + var firstPixel = 0; + var lastPixel = inputImage2D.getWidth() * inputImage2D.getHeight(); + var increment = inputImage2D.getWidth(); + + this._inputBuffer = inputImage2D.getDataCopy(); + + this._forEachPixelOfSuch(firstPixel, lastPixel, increment ); + + // building the output + var img2D = new Image2D(); + img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight()); + this._setOutput( img2D ); + } + +} /* END class ForEachColumnImageFilter */ + // filters - processing of Image3D exports.PixpipeObject = PixpipeObject; @@ -850,6 +1035,8 @@ exports.CanvasImageWriter = CanvasImageWriter; exports.UrlImageReader = UrlImageReader; exports.FileImageReader = FileImageReader; exports.ForEachPixelImageFilter = ForEachPixelImageFilter; +exports.ForEachRowImageFilter = ForEachRowImageFilter; +exports.ForEachColumnImageFilter = ForEachColumnImageFilter; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/dist/pixpipe.js.map b/dist/pixpipe.js.map index 2ae82d4..a29333d 100644 --- a/dist/pixpipe.js.map +++ b/dist/pixpipe.js.map @@ -1 +1 @@ -{"version":3,"file":"pixpipe.js","sources":["../src/core/PixpipeObject.js","../src/core/Filter.js","../src/core/Image2D.js","../src/core/ImageToImageFilter.js","../src/core/PixelWiseImageFilter.js","../src/io/CanvasImageWriter.js","../src/io/UrlImageReader.js","../src/io/FileImageReader.js","../src/filter/ForEachPixelImageFilter.js","../src/pixpipe.js"],"sourcesContent":["/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n/**\n* PixpipeObject is the base object of all. It creates a uuid and has few\n* generic attributes like type, name and description. Not all these attributes\n* always useful;\n*/\nclass PixpipeObject {\n\n constructor(){\n // unique identifier\n this._uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n\n // Metadata can be anything, a name, an ID, a description, a DOM element.\n // everything that is not an input but rather a setting\n this._metadata = {};\n\n this._type = PixpipeObject.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"GENERIC\";\n }\n\n\n /**\n * Compare a give type to the type of this object.\n * @param {String} t - a type, better to call the static method of each object, like Image.TYPE()\n */\n isOfType( t ){\n return !(this._type.localeCompare(t))\n }\n\n\n /**\n * Get type of object.\n * @return {String} the type\n */\n getType(){\n this._type;\n }\n\n /**\n * Return a copy of the uuid\n */\n get uuid(){\n return this._uuid.slice();\n }\n\n\n /**\n * Set a metadata using a pair of key and value.\n * @param {String} key - the ID of the metadata\n * @param {Object} value - can be a string, Number or Object\n */\n setMetadata( key, value ){\n if(typeof key === 'string' || key instanceof String){\n this._metadata[ key ] = value;\n }else{\n console.warn(\"The given key must be a String Object.\");\n }\n\n }\n\n\n /**\n * Retrieve a metadata using a key.\n * @param {String} key - the ID of the metadata\n * @return {Object} the metadata object - or null if non existent\n */\n getMetadata( key ){\n if( key in this._metadata){\n return this._metadata[ key ];\n }else{\n console.warn(\"The metadata with key: \" + key + \" doe not exist.\");\n return null;\n }\n }\n\n\n\n\n}\n\nexport { PixpipeObject }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* Filter is a base class and must be inherited to be used properly.\n* A filter takes one or more Image instances as input and returns one or more\n* instances of images as output.\n* Every filter has a addInput(), a getOutput() and a update() methods.\n* Every input and output can be arranged by category, so that internaly, a filter\n* can use and output diferent kind of data.\n*/\nclass Filter extends PixpipeObject {\n\n constructor(){\n super();\n this._type = Filter.TYPE();\n\n // a bunch of event to be defined. Empty by default.\n this._events = {};\n\n this._inputValidator = {};\n\n this._input = {\n \"0\": []\n };\n\n this._output = {\n \"0\" : []\n };\n\n }\n\n\n /**\n * Hardcode the datatype\n */\n static TYPE(){\n return \"FILTER\";\n }\n\n /**\n * Set an input, potentially associated to a category.\n * @param {Image2D} inputObject - most likely an instance of Image2D but can also be HTML5 File or Image3D\n * @param {Number} category - in case we want to get data from diferent categories.\n */\n addInput( inputObject, category=0){\n\n if(category < 0 ){\n console.warn(\"A input cannot be of category inferior to zero\");\n return;\n }\n\n // the category may not exist, we create it\n if( !(category in this._input) ){\n this._input[category] = null;\n }\n\n this._input[category] = inputObject ;\n }\n\n\n /**\n * Return outputs from a category (default category: 0)\n * @param {Number} category - a category of output.\n * @return {Object} or null if no output can be returned.\n */\n getOutput( category=0 ){\n if( category in this._output ){\n return this._output[ category ];\n }else{\n return null;\n }\n }\n\n\n /**\n * [PRIVATE]\n * should noly be used by the class that inherit Filter.\n * This is just a wraper to not access the raw _output object.\n * @param {Image2D} imageObject - instance of an image\n * @param {Number} category - in case we want to get data from different categories.\n */\n _setOutput( data, category=0 ){\n // the category may not exist, we create it\n if( !(category in this._output) ){\n this._output[category] = null;\n }\n\n this._output[category] = data ;\n }\n\n\n /**\n * [PRIVATE]\n * should noly be used by the class that inherit Filter.\n * @param {Number} category - in case we want to get data from different categories.\n * @return {Object} or null if no input can be returned\n */\n _getInput( category=0 ){\n if( category in this._input ){\n return this._input[ category ];\n }else{\n return null;\n }\n }\n\n\n /**\n * Validate the input data using a model defined in _inputValidator.\n * Every class that implement Filter must implement their own _inputValidator.\n * Not mandatory to use, still a good practice.\n */\n hasValidInput(){\n var that = this;\n var inputCategories = Object.keys( this._inputValidator );\n\n var valid = true;\n\n inputCategories.forEach( function(key){\n valid = valid && that._getInput( key ).isOfType( that._inputValidator[ key ] )\n });\n\n if(!valid){\n console.warn(\"The input is not valid.\");\n }\n\n return valid;\n }\n\n\n /**\n * MUST be implemented by the class that inherit this.\n * Launch the process.\n */\n update(){\n console.error(\"The update() method has not been written, this filter is not valid.\");\n }\n\n\n /**\n * Defines a callback. By defautl, no callback is called.\n */\n on(eventId, callback){\n this._events[ eventId ] = callback;\n }\n\n\n} /* END class Filter */\n\nexport { Filter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* Image2D class is one of the few base element of Pixpipejs.\n* It is always considered to be 4 channels (RGBA) and stored as a Float32Array\n* typed array.\n*/\nclass Image2D extends PixpipeObject{\n\n\n /**\n * Constructor of an Image2D instance. If no options, no array is allocated.\n * @param {Object} options - if present, must have options.width, options.height. Also options.color = [r, g, b, a] is possible but not mandatory, this sets the default color.\n */\n constructor( options=null ){\n super();\n this._type = Image2D.TYPE();\n\n // a rgba stored in a Float32Array (typed array)\n this._data = null;\n this._width = -1;\n this._height = -1;\n this._componentsPerPixel = 4; // RGBA\n\n // allocate the array if size is specified\n if(options && \"width\" in options && \"height\" in options){\n\n if( options.width > 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init the color if specified\n if(\"color\" in options && options.color.length == 4 ){\n var color = options.color;\n\n for(var i=0; i 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init the color if specified\n if(\"color\" in options && options.color.length == 4 ){\n var color = options.color;\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.log(position);\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p=0 && position.x < this._width && + "y" in position && position.y >=0 && position.y < this._height && + color.length == this._componentsPerPixel) + { + + var pos1D = this.get1dIndexFrom2dPosition( position ); + + for(var i=0; i=0 && position.x < this._width && + "y" in position && position.y >=0 && position.y < this._height) + { + var pos1D = this.get1dIndexFrom2dPosition( position ); + var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel); + return color; + + }else{ + console.warn("The requested position is outside the image."); + return null; + } + } + + /** * @return {Number} the width of the Image2D */ @@ -144,8 +185,8 @@ class Image2D extends PixpipeObject{ /** * Compute the (x, y) position from a position in a 1D array. - * @param {Number} i - the index of a pixel. This has nothing to do with - * the number of components per pixel. + * This has nothing to do with the number of components per pixel. + * @param {Number} i - the index of a pixel. * @return {Object} coordinate as {x, y} */ get2dPositionFrom1dIndex( i ){ @@ -155,6 +196,17 @@ class Image2D extends PixpipeObject{ } } + + /** + * Compute the 1D index within the data buffer from a 2D position {x, y}. + * This has nothing to do with the number of components per pixel. + * @param {Object} position - 2D coord like {x, y} + * @return {Number} the 1D position within the buffer + */ + get1dIndexFrom2dPosition( position ){ + return (position.x + position.y*this._width); + } + } /* END of class Image2D */ export { Image2D } diff --git a/src/filter/SpatialConvolutionFilter.js b/src/filter/SpatialConvolutionFilter.js new file mode 100644 index 0000000..0d0c6ee --- /dev/null +++ b/src/filter/SpatialConvolutionFilter.js @@ -0,0 +1,20 @@ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +import { ImageToImageFilter } from './ImageToImageFilter.js'; + +/** +* +*/ +class SpatialConvolutionFilter extends ImageToImageFilter { + + constructor(){ + + } +} + +export { SpatialConvolutionFilter } diff --git a/src/pixpipe.js b/src/pixpipe.js index 25eac35..4863b1c 100644 --- a/src/pixpipe.js +++ b/src/pixpipe.js @@ -14,5 +14,8 @@ export { FileImageReader } from './io/FileImageReader.js'; // filters - processing of Images2D export { ForEachPixelImageFilter } from './filter/ForEachPixelImageFilter.js'; +export { SpatialConvolutionFilter } from './filter/SpatialConvolutionFilter.js'; + + // filters - processing of Image3D From 26baebf0bc1ca1212fe30156699e6957ef9e0117 Mon Sep 17 00:00:00 2001 From: Jonathan Lurie Date: Mon, 13 Mar 2017 12:48:52 -0400 Subject: [PATCH 3/9] ADD monoband --- dist/pixpipe.js | 162 ++++++----------------- dist/pixpipe.js.map | 2 +- examples/image2DToCanvas.html | 1 + examples/mathExpressionImage2D.html | 55 ++++++++ package.json | 8 +- rollup.config.js | 11 +- src/core/Image2D.js | 26 ++-- src/filter/ImageBlendExpressionFilter.js | 31 +++++ src/filter/MultiplyImageFilter.js | 27 ++++ src/filter/SpatialConvolutionFilter.js | 2 +- src/io/CanvasImageWriter.js | 32 ++++- src/pixpipe.js | 4 + 12 files changed, 216 insertions(+), 145 deletions(-) create mode 100644 examples/mathExpressionImage2D.html create mode 100644 src/filter/ImageBlendExpressionFilter.js create mode 100644 src/filter/MultiplyImageFilter.js diff --git a/dist/pixpipe.js b/dist/pixpipe.js index fa2f4a1..038d7a4 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -281,7 +281,7 @@ class Image2D extends PixpipeObject{ this._data = null; this._width = -1; this._height = -1; - this._componentsPerPixel = 4; // RGBA + this._componentsPerPixel = 4; // RGBA, by default // allocate the array if size is specified if(options && "width" in options && "height" in options){ @@ -289,21 +289,25 @@ class Image2D extends PixpipeObject{ if( options.width > 0 && options.height > 0){ this._width = options.width; this._height = options.height; + + if("color" in options){ + this._componentsPerPixel = options.color.length; + } + this._data = new Float32Array( this._width * this._height * this._componentsPerPixel ); - // init the color if specified - if("color" in options && options.color.length == 4 ){ + // init with the given color + if("color" in options){ var color = options.color; - - for(var i=0; i 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init the color if specified\n if(\"color\" in options && options.color.length == 4 ){\n var color = options.color;\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.log(position);\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; pPixpipejs // create an image var myImage = new pixpipe.Image2D({width: 100, height: 50, color: [255, 128, 64, 255]}) + console.log(myImage); // create a filter to write the image into a canvas var imageToCanvasFilter = new pixpipe.CanvasImageWriter( ); diff --git a/examples/mathExpressionImage2D.html b/examples/mathExpressionImage2D.html new file mode 100644 index 0000000..aff0cb6 --- /dev/null +++ b/examples/mathExpressionImage2D.html @@ -0,0 +1,55 @@ + + + URL to Image2D + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • +
  • displaying it in a canvas using pixpipe.CanvasImageWriter
  • +
+

+ +
+ + + + + diff --git a/package.json b/package.json index 1888589..433f81d 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,15 @@ "url": "https://github.com/jonathanlurie/pixpipejs/issues" }, "homepage": "https://github.com/jonathanlurie/pixpipejs#readme", - "dependencies": {}, + "dependencies": { + "mathjs": "^3.10.0" + }, "devDependencies": { "gulp": "^3.9.1", "gulp-rollup": "^2.11.0", "gulp-util": "^3.0.8", - "rollup": "^0.41.4" + "rollup": "^0.41.4", + "rollup-plugin-commonjs": "^8.0.2", + "rollup-plugin-node-resolve": "^2.0.0" } } diff --git a/rollup.config.js b/rollup.config.js index c65e5d2..b8d67a6 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,9 +1,18 @@ var config = require('./package.json'); +import commonjs from 'rollup-plugin-commonjs'; +import nodeResolve from 'rollup-plugin-node-resolve'; + export default { entry: config.main, format: config.moduleFormat, moduleName: config.moduleName, sourceMap: true, - dest: config.moduleBuildDir + '/' + config.moduleName + '.js' + dest: config.moduleBuildDir + '/' + config.moduleName + '.js', + plugins: [ + nodeResolve(), + commonjs({ + sourceMap: false + }) + ] }; diff --git a/src/core/Image2D.js b/src/core/Image2D.js index 37d8319..e3dc506 100644 --- a/src/core/Image2D.js +++ b/src/core/Image2D.js @@ -27,7 +27,7 @@ class Image2D extends PixpipeObject{ this._data = null; this._width = -1; this._height = -1; - this._componentsPerPixel = 4; // RGBA + this._componentsPerPixel = 4; // RGBA, by default // allocate the array if size is specified if(options && "width" in options && "height" in options){ @@ -35,21 +35,25 @@ class Image2D extends PixpipeObject{ if( options.width > 0 && options.height > 0){ this._width = options.width; this._height = options.height; + + if("color" in options){ + this._componentsPerPixel = options.color.length; + } + this._data = new Float32Array( this._width * this._height * this._componentsPerPixel ); - // init the color if specified - if("color" in options && options.color.length == 4 ){ + // init with the given color + if("color" in options){ var color = options.color; - - for(var i=0; i Date: Mon, 13 Mar 2017 17:45:49 -0400 Subject: [PATCH 4/9] ADD SpectralScaleImageFilter --- dist/pixpipe.js | 1509 +++++++++++++++++++++- dist/pixpipe.js.map | 2 +- examples/forEachPixelGadient.html | 100 ++ package.json | 2 +- rollup.config.js | 4 +- src/core/Filter.js | 34 +- src/core/Image2D.js | 6 +- src/filter/ForEachPixelImageFilter.js | 2 +- src/filter/ImageBlendExpressionFilter.js | 27 +- src/filter/MultiplyImageFilter.js | 27 - src/filter/SpectralScaleImageFilter.js | 72 ++ src/io/CanvasImageWriter.js | 19 +- src/pixpipe.js | 2 +- 13 files changed, 1723 insertions(+), 83 deletions(-) create mode 100644 examples/forEachPixelGadient.html delete mode 100644 src/filter/MultiplyImageFilter.js create mode 100644 src/filter/SpectralScaleImageFilter.js diff --git a/dist/pixpipe.js b/dist/pixpipe.js index 038d7a4..ba42583 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -220,7 +220,6 @@ class Filter extends PixpipeObject { hasValidInput(){ var that = this; var inputCategories = Object.keys( this._inputValidator ); - var valid = true; inputCategories.forEach( function(key){ @@ -235,6 +234,39 @@ class Filter extends PixpipeObject { } + /** + * Check if all input image have the same size. + * @return {Boolean} true is same size, false if not. + */ + hasSameSizeInput(){ + var that = this; + var inputCategories = Object.keys( this._inputValidator ); + var sameSize = true; + + var widths = []; + var heights = []; + + inputCategories.forEach( function(key){ + widths.push( that._getInput( key ).getWidth() ); + heights.push( that._getInput( key ).getHeight() ); + }); + + // if all input have the same size + if(widths.length){ + widths.sort(); + heights.sort(); + sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) && + (heights[ 0 ] == heights[ heights.length -1 ] ); + + if( !sameSize ){ + console.warn("Input image do not all have the same size. Filter not valid"); + } + } + + return sameSize; + } + + /** * MUST be implemented by the class that inherit this. * Launch the process. @@ -338,14 +370,18 @@ class Image2D extends PixpipeObject{ * @param {Float32Array} array - 1D array of raw data stored as RGBARGBA... * @param {Number} width - width of the Image2D * @param {Number} height - height of the Image2D + * @param {Number} ncpp - number of components per pixel (default: 4) +} */ - setData( array, width, height ){ + setData( array, width, height, ncpp=4 ){ // do not alloz to set a new internal array if( this._data ){ console.warn("Data can be set to an Image2D object only once. Cannot init the Image2D."); return; } + this._componentsPerPixel = ncpp; + if( array.length != width*height*this._componentsPerPixel){ console.warn("The array size does not match the width and height. Cannot init the Image2D."); return; @@ -560,6 +596,7 @@ class PixelWiseImageFilter extends ImageToImageFilter{ * CanvasImageWriter is a filter to output an instance of Image into a * HTML5 canvas element. * The metadata "parentDivID" has to be set using `setMetadata("parentDivID", "whatever")` +* The metadata "alpha", if true, enable transparency. Default: false. * usage: examples/imageToCanvasFilter.html * * @example @@ -577,14 +614,14 @@ class CanvasImageWriter extends Filter{ * @param {String} parentDivID - dom id of the future canvas' parent. * (most likely the ID of a div) */ - constructor( parentDivID){ + constructor(){ // call Filter constructor super(); this._inputValidator[ 0 ] = Image2D.TYPE(); + this.setMetadata("alpha", false); // so that we can flush the content - this._parentId = parentDivID; this._canvas = null; this._ctx = null; } @@ -626,6 +663,15 @@ class CanvasImageWriter extends Filter{ if(!this.hasValidInput() ) return; + var image = this._input[0]; + var ncppSrc = image.getComponentsPerPixel(); + + // only Image2d with 1 or 4 bands can be displayed + if( ncppSrc != 1 && ncppSrc != 4){ + console.warn("Cannot write Image in canvas if contains other than 1 or 4 bands."); + return; + } + if(!this.getMetadata("parentDivID")){ console.error("The parent DIV ID to place the canvas element was not specified. Unable to display anything."); return; @@ -633,8 +679,7 @@ class CanvasImageWriter extends Filter{ // build a new canvas this._init(); - - var image = this._input[0]; + var useAlphaBand = this.getMetadata("alpha"); // resizing the canvas this._canvas.width = image.getWidth(); @@ -646,10 +691,30 @@ class CanvasImageWriter extends Filter{ // getting Image object data var originalImageDataArray = image.getData(); - // copying the data into the canvas array (clamped uint8) - originalImageDataArray.forEach( function(value, index){ - canvasImageDataArray[index] = value; - }); + if(ncppSrc == 4){ + // copying the data into the canvas array (clamped uint8) + originalImageDataArray.forEach( function(value, index){ + if(!useAlphaBand && index%4 == 3){ + canvasImageDataArray[index] = 255; + }else{ + canvasImageDataArray[index] = value; + } + }); + + }else if(ncppSrc == 1){ + originalImageDataArray.forEach( function(value, index){ + canvasImageDataArray[index*4] = value; + canvasImageDataArray[index*4 + 1] = value; + canvasImageDataArray[index*4 + 2] = value; + canvasImageDataArray[index*4 + 3] = 255; + }); + + } + + + + + this._ctx.putImageData(canvasImageData, 0, 0); @@ -886,7 +951,7 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { // building the output var img2D = new Image2D(); - img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight()); + img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight(), inputImage2D.getComponentsPerPixel()); this._setOutput( img2D ); } @@ -909,33 +974,1426 @@ class SpatialConvolutionFilter extends ImageToImageFilter { } } +var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + + + + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var bundle = createCommonjsModule(function (module, exports) { +(function (global, factory) { + module.exports = factory(); +}(commonjsGlobal, (function () { 'use strict'; + +/*! + Based on ndef.parser, by Raphael Graf(r@undefined.ch) + http://www.undefined.ch/mparser/index.html + + Ported to JavaScript and modified by Matthew Crumley (email@matthewcrumley.com, http://silentmatt.com/) + + You are free to use and modify this code in anyway you find useful. Please leave this comment in the code + to acknowledge its original source. If you feel like it, I enjoy hearing about projects that use my code, + but don't feel like you have to let me know or ask permission. +*/ + +function indexOf(array, obj) { + for (var i = 0; i < array.length; i++) { + if (array[i] === obj) { + return i; + } + } + return -1; +} + +var INUMBER = 'INUMBER'; +var IOP1 = 'IOP1'; +var IOP2 = 'IOP2'; +var IOP3 = 'IOP3'; +var IVAR = 'IVAR'; +var IFUNCALL = 'IFUNCALL'; +var IEXPR = 'IEXPR'; +var IMEMBER = 'IMEMBER'; + +function Instruction(type, value) { + this.type = type; + this.value = (value !== undefined && value !== null) ? value : 0; +} + +Instruction.prototype.toString = function () { + switch (this.type) { + case INUMBER: + case IOP1: + case IOP2: + case IOP3: + case IVAR: + return this.value; + case IFUNCALL: + return 'CALL ' + this.value; + case IMEMBER: + return '.' + this.value; + default: + return 'Invalid Instruction'; + } +}; + +function Expression(tokens, parser) { + this.tokens = tokens; + this.parser = parser; + this.unaryOps = parser.unaryOps; + this.binaryOps = parser.binaryOps; + this.ternaryOps = parser.ternaryOps; + this.functions = parser.functions; +} + +function escapeValue(v) { + if (typeof v === 'string') { + return JSON.stringify(v).replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); + } + return v; +} + +function simplify(tokens, unaryOps, binaryOps, ternaryOps, values) { + var nstack = []; + var newexpression = []; + var n1, n2, n3; + var f; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === INUMBER) { + nstack.push(item); + } else if (type === IVAR && values.hasOwnProperty(item.value)) { + item = new Instruction(INUMBER, values[item.value]); + nstack.push(item); + } else if (type === IOP2 && nstack.length > 1) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = binaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value, n2.value)); + nstack.push(item); + } else if (type === IOP3 && nstack.length > 2) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + if (item.value === '?') { + nstack.push(n1.value ? n2.value : n3.value); + } else { + f = ternaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value)); + nstack.push(item); + } + } else if (type === IOP1 && nstack.length > 0) { + n1 = nstack.pop(); + f = unaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value)); + nstack.push(item); + } else if (type === IEXPR) { + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values))); + } else if (type === IMEMBER && nstack.length > 0) { + n1 = nstack.pop(); + nstack.push(new Instruction(INUMBER, n1.value[item.value])); + } else { + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + newexpression.push(item); + } + } + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + return newexpression; +} + +Expression.prototype.simplify = function (values) { + values = values || {}; + return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser); +}; + +function substitute(tokens, variable, expr) { + var newexpression = []; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === IVAR && item.value === variable) { + for (var j = 0; j < expr.tokens.length; j++) { + var expritem = expr.tokens[j]; + var replitem; + if (expritem.type === IOP1) { + replitem = unaryInstruction(expritem.value); + } else if (expritem.type === IOP2) { + replitem = binaryInstruction(expritem.value); + } else if (expritem.type === IOP3) { + replitem = ternaryInstruction(expritem.value); + } else { + replitem = new Instruction(expritem.type, expritem.value); + } + newexpression.push(replitem); + } + } else if (type === IEXPR) { + newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr))); + } else { + newexpression.push(item); + } + } + return newexpression; +} + +Expression.prototype.substitute = function (variable, expr) { + if (!(expr instanceof Expression)) { + expr = this.parser.parse(String(expr)); + } + + return new Expression(substitute(this.tokens, variable, expr), this.parser); +}; + +function evaluate(tokens, expr, values) { + var nstack = []; + var n1, n2, n3; + var f; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === INUMBER) { + nstack.push(item.value); + } else if (type === IOP2) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = expr.binaryOps[item.value]; + nstack.push(f(n1, n2)); + } else if (type === IOP3) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + if (item.value === '?') { + nstack.push(evaluate(n1 ? n2 : n3, expr, values)); + } else { + f = expr.ternaryOps[item.value]; + nstack.push(f(n1, n2, n3)); + } + } else if (type === IVAR) { + if (item.value in expr.functions) { + nstack.push(expr.functions[item.value]); + } else { + var v = values[item.value]; + if (v !== undefined) { + nstack.push(v); + } else { + throw new Error('undefined variable: ' + item.value); + } + } + } else if (type === IOP1) { + n1 = nstack.pop(); + f = expr.unaryOps[item.value]; + nstack.push(f(n1)); + } else if (type === IFUNCALL) { + var argCount = item.value; + var args = []; + while (argCount-- > 0) { + args.unshift(nstack.pop()); + } + f = nstack.pop(); + if (f.apply && f.call) { + nstack.push(f.apply(undefined, args)); + } else { + throw new Error(f + ' is not a function'); + } + } else if (type === IEXPR) { + nstack.push(item.value); + } else if (type === IMEMBER) { + n1 = nstack.pop(); + nstack.push(n1[item.value]); + } else { + throw new Error('invalid Expression'); + } + } + if (nstack.length > 1) { + throw new Error('invalid Expression (parity)'); + } + return nstack[0]; +} + +Expression.prototype.evaluate = function (values) { + values = values || {}; + return evaluate(this.tokens, this, values); +}; + +function expressionToString(tokens, toJS) { + var nstack = []; + var n1, n2, n3; + var f; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === INUMBER) { + if (typeof item.value === 'number' && item.value < 0) { + nstack.push('(' + item.value + ')'); + } else { + nstack.push(escapeValue(item.value)); + } + } else if (type === IOP2) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = item.value; + if (toJS) { + if (f === '^') { + nstack.push('Math.pow(' + n1 + ', ' + n2 + ')'); + } else if (f === 'and') { + nstack.push('(!!' + n1 + ' && !!' + n2 + ')'); + } else if (f === 'or') { + nstack.push('(!!' + n1 + ' || !!' + n2 + ')'); + } else if (f === '||') { + nstack.push('(String(' + n1 + ') + String(' + n2 + '))'); + } else if (f === '==') { + nstack.push('(' + n1 + ' === ' + n2 + ')'); + } else if (f === '!=') { + nstack.push('(' + n1 + ' !== ' + n2 + ')'); + } else { + nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); + } + } else { + nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); + } + } else if (type === IOP3) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + f = item.value; + if (f === '?') { + nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')'); + } else { + throw new Error('invalid Expression'); + } + } else if (type === IVAR) { + nstack.push(item.value); + } else if (type === IOP1) { + n1 = nstack.pop(); + f = item.value; + if (f === '-' || f === '+') { + nstack.push('(' + f + n1 + ')'); + } else if (toJS) { + if (f === 'not') { + nstack.push('(' + '!' + n1 + ')'); + } else if (f === '!') { + nstack.push('fac(' + n1 + ')'); + } else { + nstack.push(f + '(' + n1 + ')'); + } + } else if (f === '!') { + nstack.push('(' + n1 + '!)'); + } else { + nstack.push('(' + f + ' ' + n1 + ')'); + } + } else if (type === IFUNCALL) { + var argCount = item.value; + var args = []; + while (argCount-- > 0) { + args.unshift(nstack.pop()); + } + f = nstack.pop(); + nstack.push(f + '(' + args.join(', ') + ')'); + } else if (type === IMEMBER) { + n1 = nstack.pop(); + nstack.push(n1 + '.' + item.value); + } else if (type === IEXPR) { + nstack.push('(' + expressionToString(item.value, toJS) + ')'); + } else { + throw new Error('invalid Expression'); + } + } + if (nstack.length > 1) { + throw new Error('invalid Expression (parity)'); + } + return nstack[0]; +} + +Expression.prototype.toString = function () { + return expressionToString(this.tokens, false); +}; + +function getSymbols(tokens, symbols) { + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) { + symbols.push(item.value); + } else if (item.type === IEXPR) { + getSymbols(item.value, symbols); + } + } +} + +Expression.prototype.symbols = function () { + var vars = []; + getSymbols(this.tokens, vars); + return vars; +}; + +Expression.prototype.variables = function () { + var vars = []; + getSymbols(this.tokens, vars); + var functions = this.functions; + return vars.filter(function (name) { + return !(name in functions); + }); +}; + +Expression.prototype.toJSFunction = function (param, variables) { + var expr = this; + var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func + return function () { + return f.apply(expr, arguments); + }; +}; + +function add(a, b) { + return Number(a) + Number(b); +} +function sub(a, b) { + return a - b; +} +function mul(a, b) { + return a * b; +} +function div(a, b) { + return a / b; +} +function mod(a, b) { + return a % b; +} +function concat(a, b) { + return '' + a + b; +} +function equal(a, b) { + return a === b; +} +function notEqual(a, b) { + return a !== b; +} +function greaterThan(a, b) { + return a > b; +} +function lessThan(a, b) { + return a < b; +} +function greaterThanEqual(a, b) { + return a >= b; +} +function lessThanEqual(a, b) { + return a <= b; +} +function andOperator(a, b) { + return Boolean(a && b); +} +function orOperator(a, b) { + return Boolean(a || b); +} +function sinh(a) { + return ((Math.exp(a) - Math.exp(-a)) / 2); +} +function cosh(a) { + return ((Math.exp(a) + Math.exp(-a)) / 2); +} +function tanh(a) { + if (a === Infinity) return 1; + if (a === -Infinity) return -1; + return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a)); +} +function asinh(a) { + if (a === -Infinity) return a; + return Math.log(a + Math.sqrt(a * a + 1)); +} +function acosh(a) { + return Math.log(a + Math.sqrt(a * a - 1)); +} +function atanh(a) { + return (Math.log((1 + a) / (1 - a)) / 2); +} +function log10(a) { + return Math.log(a) * Math.LOG10E; +} +function neg(a) { + return -a; +} +function not(a) { + return !a; +} +function trunc(a) { + return a < 0 ? Math.ceil(a) : Math.floor(a); +} +function random(a) { + return Math.random() * (a || 1); +} +function factorial(a) { // a! + return gamma(a + 1); +} +function stringLength(s) { + return String(s).length; +} + +function hypot() { + var sum = 0; + var larg = 0; + for (var i = 0, L = arguments.length; i < L; i++) { + var arg = Math.abs(arguments[i]); + var div; + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else { + sum += arg; + } + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); +} + +function condition(cond, yep, nope) { + return cond ? yep : nope; +} + +function isInteger(value) { + return isFinite(value) && (value === Math.round(value)); +} + +var GAMMA_G = 4.7421875; +var GAMMA_P = [ + 0.99999999999999709182, + 57.156235665862923517, -59.597960355475491248, + 14.136097974741747174, -0.49191381609762019978, + 0.33994649984811888699e-4, + 0.46523628927048575665e-4, -0.98374475304879564677e-4, + 0.15808870322491248884e-3, -0.21026444172410488319e-3, + 0.21743961811521264320e-3, -0.16431810653676389022e-3, + 0.84418223983852743293e-4, -0.26190838401581408670e-4, + 0.36899182659531622704e-5 +]; + +// Gamma function from math.js +function gamma(n) { + var t, x; + + if (isInteger(n)) { + if (n <= 0) { + return isFinite(n) ? Infinity : NaN; + } + + if (n > 171) { + return Infinity; // Will overflow + } + + var value = n - 2; + var res = n - 1; + while (value > 1) { + res *= value; + value--; + } + + if (res === 0) { + res = 1; // 0! is per definition 1 + } + + return res; + } + + if (n < 0.5) { + return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n)); + } + + if (n >= 171.35) { + return Infinity; // will overflow + } + + if (n > 85.0) { // Extended Stirling Approx + var twoN = n * n; + var threeN = twoN * n; + var fourN = threeN * n; + var fiveN = fourN * n; + return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) * + (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - + 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + + 5246819 / (75246796800 * fiveN * n)); + } + + --n; + x = GAMMA_P[0]; + for (var i = 1; i < GAMMA_P.length; ++i) { + x += GAMMA_P[i] / (n + i); + } + + t = n + GAMMA_G + 0.5; + return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x; +} + +var TEOF = 'TEOF'; +var TOP = 'TOP'; +var TNUMBER = 'TNUMBER'; +var TSTRING = 'TSTRING'; +var TPAREN = 'TPAREN'; +var TCOMMA = 'TCOMMA'; +var TNAME = 'TNAME'; + +function Token(type, value, line, column) { + this.type = type; + this.value = value; + this.line = line; + this.column = column; +} + +Token.prototype.toString = function () { + return this.type + ': ' + this.value; +}; + +function TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) { + this.pos = 0; + this.line = 0; + this.column = 0; + this.current = null; + this.unaryOps = unaryOps; + this.binaryOps = binaryOps; + this.ternaryOps = ternaryOps; + this.consts = consts; + this.expression = expression; + this.savedPosition = 0; + this.savedCurrent = null; + this.savedLine = 0; + this.savedColumn = 0; +} + +TokenStream.prototype.newToken = function (type, value, line, column) { + return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column); +}; + +TokenStream.prototype.save = function () { + this.savedPosition = this.pos; + this.savedCurrent = this.current; + this.savedLine = this.line; + this.savedColumn = this.column; +}; + +TokenStream.prototype.restore = function () { + this.pos = this.savedPosition; + this.current = this.savedCurrent; + this.line = this.savedLine; + this.column = this.savedColumn; +}; + +TokenStream.prototype.next = function () { + if (this.pos >= this.expression.length) { + return this.newToken(TEOF, 'EOF'); + } + + if (this.isWhitespace() || this.isComment()) { + return this.next(); + } else if (this.isNumber() || + this.isOperator() || + this.isString() || + this.isParen() || + this.isComma() || + this.isNamedOp() || + this.isConst() || + this.isName()) { + return this.current; + } else { + this.parseError('Unknown character "' + this.expression.charAt(this.pos) + '"'); + } +}; + +TokenStream.prototype.isString = function () { + var r = false; + var startLine = this.line; + var startColumn = this.column; + var startPos = this.pos; + var quote = this.expression.charAt(startPos); + + if (quote === '\'' || quote === '"') { + this.pos++; + this.column++; + var index = this.expression.indexOf(quote, startPos + 1); + while (index >= 0 && this.pos < this.expression.length) { + this.pos = index + 1; + if (this.expression.charAt(index - 1) !== '\\') { + var rawString = this.expression.substring(startPos + 1, index); + this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn); + var newLine = rawString.indexOf('\n'); + var lastNewline = -1; + while (newLine >= 0) { + this.line++; + this.column = 0; + lastNewline = newLine; + newLine = rawString.indexOf('\n', newLine + 1); + } + this.column += rawString.length - lastNewline; + r = true; + break; + } + index = this.expression.indexOf(quote, index + 1); + } + } + return r; +}; + +TokenStream.prototype.isParen = function () { + var char = this.expression.charAt(this.pos); + if (char === '(' || char === ')') { + this.current = this.newToken(TPAREN, char); + this.pos++; + this.column++; + return true; + } + return false; +}; + +TokenStream.prototype.isComma = function () { + var char = this.expression.charAt(this.pos); + if (char === ',') { + this.current = this.newToken(TCOMMA, ','); + this.pos++; + this.column++; + return true; + } + return false; +}; + +TokenStream.prototype.isConst = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + if (str in this.consts) { + this.current = this.newToken(TNUMBER, this.consts[str]); + this.pos += str.length; + this.column += str.length; + return true; + } + } + return false; +}; + +TokenStream.prototype.isNamedOp = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) { + this.current = this.newToken(TOP, str); + this.pos += str.length; + this.column += str.length; + return true; + } + } + return false; +}; + +TokenStream.prototype.isName = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + this.current = this.newToken(TNAME, str); + this.pos += str.length; + this.column += str.length; + return true; + } + return false; +}; + +TokenStream.prototype.isWhitespace = function () { + var r = false; + var char = this.expression.charAt(this.pos); + while (char === ' ' || char === '\t' || char === '\n' || char === '\r') { + r = true; + this.pos++; + this.column++; + if (char === '\n') { + this.line++; + this.column = 0; + } + if (this.pos >= this.expression.length) { + break; + } + char = this.expression.charAt(this.pos); + } + return r; +}; + +var codePointPattern = /^[0-9a-f]{4}$/i; + +TokenStream.prototype.unescape = function (v) { + var index = v.indexOf('\\'); + if (index < 0) { + return v; + } + + var buffer = v.substring(0, index); + while (index >= 0) { + var c = v.charAt(++index); + switch (c) { + case '\'': + buffer += '\''; + break; + case '"': + buffer += '"'; + break; + case '\\': + buffer += '\\'; + break; + case '/': + buffer += '/'; + break; + case 'b': + buffer += '\b'; + break; + case 'f': + buffer += '\f'; + break; + case 'n': + buffer += '\n'; + break; + case 'r': + buffer += '\r'; + break; + case 't': + buffer += '\t'; + break; + case 'u': + // interpret the following 4 characters as the hex of the unicode code point + var codePoint = v.substring(index + 1, index + 5); + if (!codePointPattern.test(codePoint)) { + this.parseError('Illegal escape sequence: \\u' + codePoint); + } + buffer += String.fromCharCode(parseInt(codePoint, 16)); + index += 4; + break; + default: + throw this.parseError('Illegal escape sequence: "\\' + c + '"'); + } + ++index; + var backslash = v.indexOf('\\', index); + buffer += v.substring(index, backslash < 0 ? v.length : backslash); + index = backslash; + } + + return buffer; +}; + +TokenStream.prototype.isComment = function () { + var char = this.expression.charAt(this.pos); + if (char === '/' && this.expression.charAt(this.pos + 1) === '*') { + var startPos = this.pos; + this.pos = this.expression.indexOf('*/', this.pos) + 2; + if (this.pos === 1) { + this.pos = this.expression.length; + } + var comment = this.expression.substring(startPos, this.pos); + var newline = comment.indexOf('\n'); + while (newline >= 0) { + this.line++; + this.column = comment.length - newline; + newline = comment.indexOf('\n', newline + 1); + } + return true; + } + return false; +}; + +TokenStream.prototype.isNumber = function () { + var valid = false; + var pos = this.pos; + var startPos = pos; + var resetPos = pos; + var column = this.column; + var resetColumn = column; + var foundDot = false; + var foundDigits = false; + var char; + + while (pos < this.expression.length) { + char = this.expression.charAt(pos); + if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) { + if (char === '.') { + foundDot = true; + } else { + foundDigits = true; + } + pos++; + column++; + valid = foundDigits; + } else { + break; + } + } + + if (valid) { + resetPos = pos; + resetColumn = column; + } + + if (char === 'e' || char === 'E') { + pos++; + column++; + var acceptSign = true; + var validExponent = false; + while (pos < this.expression.length) { + char = this.expression.charAt(pos); + if (acceptSign && (char === '+' || char === '-')) { + acceptSign = false; + } else if (char >= '0' && char <= '9') { + validExponent = true; + acceptSign = false; + } else { + break; + } + pos++; + column++; + } + + if (!validExponent) { + pos = resetPos; + column = resetColumn; + } + } + + if (valid) { + this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos))); + this.pos = pos; + this.column = column; + } else { + this.pos = resetPos; + this.column = resetColumn; + } + return valid; +}; + +TokenStream.prototype.isOperator = function () { + var char = this.expression.charAt(this.pos); + + if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') { + this.current = this.newToken(TOP, char); + } else if (char === '∙' || char === '•') { + this.current = this.newToken(TOP, '*'); + } else if (char === '>') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '>='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, '>'); + } + } else if (char === '<') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '<='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, '<'); + } + } else if (char === '|') { + if (this.expression.charAt(this.pos + 1) === '|') { + this.current = this.newToken(TOP, '||'); + this.pos++; + this.column++; + } else { + return false; + } + } else if (char === '=') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '=='); + this.pos++; + this.column++; + } else { + return false; + } + } else if (char === '!') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '!='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, char); + } + } else { + return false; + } + this.pos++; + this.column++; + return true; +}; + +TokenStream.prototype.parseError = function (msg) { + throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg); +}; + +var unaryInstructionCache = {}; +function unaryInstruction(value) { + var inst = unaryInstructionCache[value]; + if (!inst) { + inst = unaryInstructionCache[value] = new Instruction(IOP1, value); + } + return inst; +} + +var binaryInstructionCache = {}; +function binaryInstruction(value) { + var inst = binaryInstructionCache[value]; + if (!inst) { + inst = binaryInstructionCache[value] = new Instruction(IOP2, value); + } + return inst; +} + +var ternaryInstructionCache = {}; +function ternaryInstruction(value) { + var inst = ternaryInstructionCache[value]; + if (!inst) { + inst = ternaryInstructionCache[value] = new Instruction(IOP3, value); + } + return inst; +} + +function ParserState(parser, tokenStream) { + this.parser = parser; + this.tokens = tokenStream; + this.current = null; + this.nextToken = null; + this.next(); + this.savedCurrent = null; + this.savedNextToken = null; +} + +ParserState.prototype.next = function () { + this.current = this.nextToken; + return (this.nextToken = this.tokens.next()); +}; + +ParserState.prototype.tokenMatches = function (token, value) { + if (typeof value === 'undefined') { + return true; + } else if (Array.isArray(value)) { + return indexOf(value, token.value) >= 0; + } else if (typeof value === 'function') { + return value(token); + } else { + return token.value === value; + } +}; + +ParserState.prototype.save = function () { + this.savedCurrent = this.current; + this.savedNextToken = this.nextToken; + this.tokens.save(); +}; + +ParserState.prototype.restore = function () { + this.tokens.restore(); + this.current = this.savedCurrent; + this.nextToken = this.savedNextToken; +}; + +ParserState.prototype.accept = function (type, value) { + if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) { + this.next(); + return true; + } + return false; +}; + +ParserState.prototype.expect = function (type, value) { + if (!this.accept(type, value)) { + throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type)); + } +}; + +ParserState.prototype.parseAtom = function (instr) { + if (this.accept(TNAME)) { + instr.push(new Instruction(IVAR, this.current.value)); + } else if (this.accept(TNUMBER)) { + instr.push(new Instruction(INUMBER, this.current.value)); + } else if (this.accept(TSTRING)) { + instr.push(new Instruction(INUMBER, this.current.value)); + } else if (this.accept(TPAREN, '(')) { + this.parseExpression(instr); + this.expect(TPAREN, ')'); + } else { + throw new Error('unexpected ' + this.nextToken); + } +}; + +ParserState.prototype.parseExpression = function (instr) { + this.parseConditionalExpression(instr); +}; + +ParserState.prototype.parseConditionalExpression = function (instr) { + this.parseOrExpression(instr); + while (this.accept(TOP, '?')) { + var trueBranch = []; + var falseBranch = []; + this.parseConditionalExpression(trueBranch); + this.expect(TOP, ':'); + this.parseConditionalExpression(falseBranch); + instr.push(new Instruction(IEXPR, trueBranch)); + instr.push(new Instruction(IEXPR, falseBranch)); + instr.push(ternaryInstruction('?')); + } +}; + +ParserState.prototype.parseOrExpression = function (instr) { + this.parseAndExpression(instr); + while (this.accept(TOP, 'or')) { + this.parseAndExpression(instr); + instr.push(binaryInstruction('or')); + } +}; + +ParserState.prototype.parseAndExpression = function (instr) { + this.parseComparison(instr); + while (this.accept(TOP, 'and')) { + this.parseComparison(instr); + instr.push(binaryInstruction('and')); + } +}; + +ParserState.prototype.parseComparison = function (instr) { + this.parseAddSub(instr); + while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) { + var op = this.current; + this.parseAddSub(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseAddSub = function (instr) { + this.parseTerm(instr); + while (this.accept(TOP, ['+', '-', '||'])) { + var op = this.current; + this.parseTerm(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseTerm = function (instr) { + this.parseFactor(instr); + while (this.accept(TOP, ['*', '/', '%'])) { + var op = this.current; + this.parseFactor(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseFactor = function (instr) { + var unaryOps = this.tokens.unaryOps; + function isPrefixOperator(token) { + return token.value in unaryOps; + } + + this.save(); + if (this.accept(TOP, isPrefixOperator)) { + if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) { + this.restore(); + this.parseExponential(instr); + } else { + var op = this.current; + this.parseFactor(instr); + instr.push(unaryInstruction(op.value)); + } + } else { + this.parseExponential(instr); + } +}; + +ParserState.prototype.parseExponential = function (instr) { + this.parsePostfixExpression(instr); + while (this.accept(TOP, '^')) { + this.parseFactor(instr); + instr.push(binaryInstruction('^')); + } +}; + +ParserState.prototype.parsePostfixExpression = function (instr) { + this.parseFunctionCall(instr); + while (this.accept(TOP, '!')) { + instr.push(unaryInstruction('!')); + } +}; + +ParserState.prototype.parseFunctionCall = function (instr) { + var unaryOps = this.tokens.unaryOps; + function isPrefixOperator(token) { + return token.value in unaryOps; + } + + if (this.accept(TOP, isPrefixOperator)) { + var op = this.current; + this.parseAtom(instr); + instr.push(unaryInstruction(op.value)); + } else { + this.parseMemberExpression(instr); + while (this.accept(TPAREN, '(')) { + if (this.accept(TPAREN, ')')) { + instr.push(new Instruction(IFUNCALL, 0)); + } else { + var argCount = this.parseArgumentList(instr); + instr.push(new Instruction(IFUNCALL, argCount)); + } + } + } +}; + +ParserState.prototype.parseArgumentList = function (instr) { + var argCount = 0; + + while (!this.accept(TPAREN, ')')) { + this.parseExpression(instr); + ++argCount; + while (this.accept(TCOMMA)) { + this.parseExpression(instr); + ++argCount; + } + } + + return argCount; +}; + +ParserState.prototype.parseMemberExpression = function (instr) { + this.parseAtom(instr); + while (this.accept(TOP, '.')) { + this.expect(TNAME); + instr.push(new Instruction(IMEMBER, this.current.value)); + } +}; + +function Parser() { + this.unaryOps = { + sin: Math.sin, + cos: Math.cos, + tan: Math.tan, + asin: Math.asin, + acos: Math.acos, + atan: Math.atan, + sinh: Math.sinh || sinh, + cosh: Math.cosh || cosh, + tanh: Math.tanh || tanh, + asinh: Math.asinh || asinh, + acosh: Math.acosh || acosh, + atanh: Math.atanh || atanh, + sqrt: Math.sqrt, + log: Math.log, + ln: Math.log, + lg: Math.log10 || log10, + log10: Math.log10 || log10, + abs: Math.abs, + ceil: Math.ceil, + floor: Math.floor, + round: Math.round, + trunc: Math.trunc || trunc, + '-': neg, + '+': Number, + exp: Math.exp, + not: not, + length: stringLength, + '!': factorial + }; + + this.binaryOps = { + '+': add, + '-': sub, + '*': mul, + '/': div, + '%': mod, + '^': Math.pow, + '||': concat, + '==': equal, + '!=': notEqual, + '>': greaterThan, + '<': lessThan, + '>=': greaterThanEqual, + '<=': lessThanEqual, + and: andOperator, + or: orOperator + }; + + this.ternaryOps = { + '?': condition + }; + + this.functions = { + random: random, + fac: factorial, + min: Math.min, + max: Math.max, + hypot: Math.hypot || hypot, + pyt: Math.hypot || hypot, // backward compat + pow: Math.pow, + atan2: Math.atan2, + 'if': condition, + gamma: gamma + }; + + this.consts = { + E: Math.E, + PI: Math.PI, + 'true': true, + 'false': false + }; +} + +Parser.parse = function (expr) { + return new Parser().parse(expr); +}; + +Parser.evaluate = function (expr, variables) { + return Parser.parse(expr).evaluate(variables); +}; + +Parser.prototype = { + parse: function (expr) { + var instr = []; + var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts)); + parserState.parseExpression(instr); + parserState.expect(TEOF, 'EOF'); + + return new Expression(instr, this); + }, + + evaluate: function (expr, variables) { + return this.parse(expr).evaluate(variables); + } +}; + +var parser = { + Parser: Parser, + Expression: Expression +}; + +return parser; + +}))); +}); + //import mathjs from 'mathjs'; +//var Parser = require('expr-eval').Parser; + class ImageBlendExpressionFilter extends ImageToImageFilter { constructor(){ super(); - - /* - // provide a scope - console.log('\nprovide a scope'); - var node2 = mathjs.parse('x^a'); - var code2 = node2.compile(); - console.log(node2.toString()); // "x ^ a" - var scope = { - x: 3, - a: 2 - }; - console.log(code2.eval(scope)); - console.log(mathjs); - */ + + var parser = new bundle.Parser(); + var expr = parser.parse('2 * x + 1'); + console.log(expr.evaluate({ x: 3 })); // 7 + + // or + //Parser.evaluate('6 * x', { x: 7 }) // 42 + } } /* END of class ImageBlendExpressionFilter */ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +/** +* Multiply an image by the other, like a scaling function. +* The image requires two inputs named "0" and "1". +* Simply use `addInput( myImg1, "0" )` +* and `addInput( myImg2, "1" )`. The input "0" can have 1 or more bands while +* the input "1" can have only one band since the same scale is apply to each band. +* +* usage: examples/forEachPixelGadient.html +*/ +class SpectralScaleImageFilter extends ImageToImageFilter { + + constructor(){ + super(); + + // both input are images. + this._inputValidator[ 0 ] = Image2D.TYPE(); + this._inputValidator[ 1 ] = Image2D.TYPE(); + } + + + /** + * Run the filter + */ + update(){ + // filter must have valid input of the same size + if( !this.hasSameSizeInput() || !this.hasValidInput()){ + return; + } + + var dataImg0 = this._getInput(0); + var dataImg1 = this._getInput(1); + + // the input "1" (aka. the scaling data) must be single band + if( dataImg1.getComponentsPerPixel() != 1 ){ + console.warn("The scaling image must have one single band."); + return; + } + + var nbOfPixels = dataImg0.getWidth() * dataImg0.getHeight(); + var ncpp = dataImg0.getComponentsPerPixel(); + + var data0 = dataImg0.getDataCopy(); + var data1 = dataImg1.getData(); + + // scale the spectral info + for(var p=0; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","//import mathjs from 'mathjs';\n\nimport Parser from 'expr-eval'\n//var Parser = require('expr-eval').Parser;\n\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n\n\n var parser = new Parser.Parser();\n var expr = parser.parse('2 * x + 1');\n console.log(expr.evaluate({ x: 3 })); // 7\n\n // or\n //Parser.evaluate('6 * x', { x: 7 }) // 42\n\n }\n\n\n\n} /* END of class ImageBlendExpressionFilter */\n\n\nexport { ImageBlendExpressionFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n/**\n* Multiply an image by the other, like a scaling function.\n* The image requires two inputs named \"0\" and \"1\".\n* Simply use `addInput( myImg1, \"0\" )`\n* and `addInput( myImg2, \"1\" )`. The input \"0\" can have 1 or more bands while\n* the input \"1\" can have only one band since the same scale is apply to each band.\n*\n* usage: examples/forEachPixelGadient.html\n*/\nclass SpectralScaleImageFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n\n // both input are images.\n this._inputValidator[ 0 ] = Image2D.TYPE();\n this._inputValidator[ 1 ] = Image2D.TYPE();\n }\n\n\n /**\n * Run the filter\n */\n update(){\n // filter must have valid input of the same size\n if( !this.hasSameSizeInput() || !this.hasValidInput()){\n return;\n }\n\n var dataImg0 = this._getInput(0);\n var dataImg1 = this._getInput(1);\n\n // the input \"1\" (aka. the scaling data) must be single band\n if( dataImg1.getComponentsPerPixel() != 1 ){\n console.warn(\"The scaling image must have one single band.\");\n return;\n }\n\n var nbOfPixels = dataImg0.getWidth() * dataImg0.getHeight();\n var ncpp = dataImg0.getComponentsPerPixel();\n\n var data0 = dataImg0.getDataCopy();\n var data1 = dataImg1.getData();\n\n // scale the spectral info\n for(var p=0; p + + FroEqch pixel, gradient + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • +
  • creating a pixpipe.Image2D with the same size as the first, but monoband.
  • +
  • run a pixpipe.ForEachPixelImageFilter ont the monoband image to create a radial gradient (values in [0, 1])
  • +
  • multiply the loaded image with the gradient image using a pixpipe.SpectralScaleImageFilter
  • +
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
  • +
+ +

+ +

+

The original image:

+ +

+ +

+

The transformed image, with a radial gradient:

+
+

+ + + + + diff --git a/package.json b/package.json index 433f81d..1bddef0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/jonathanlurie/pixpipejs#readme", "dependencies": { - "mathjs": "^3.10.0" + "expr-eval": "^1.0.0" }, "devDependencies": { "gulp": "^3.9.1", diff --git a/rollup.config.js b/rollup.config.js index b8d67a6..c265c0d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -11,8 +11,6 @@ export default { dest: config.moduleBuildDir + '/' + config.moduleName + '.js', plugins: [ nodeResolve(), - commonjs({ - sourceMap: false - }) + commonjs() ] }; diff --git a/src/core/Filter.js b/src/core/Filter.js index 719d1f6..af23bb0 100644 --- a/src/core/Filter.js +++ b/src/core/Filter.js @@ -119,7 +119,6 @@ class Filter extends PixpipeObject { hasValidInput(){ var that = this; var inputCategories = Object.keys( this._inputValidator ); - var valid = true; inputCategories.forEach( function(key){ @@ -134,6 +133,39 @@ class Filter extends PixpipeObject { } + /** + * Check if all input image have the same size. + * @return {Boolean} true is same size, false if not. + */ + hasSameSizeInput(){ + var that = this; + var inputCategories = Object.keys( this._inputValidator ); + var sameSize = true; + + var widths = []; + var heights = []; + + inputCategories.forEach( function(key){ + widths.push( that._getInput( key ).getWidth() ); + heights.push( that._getInput( key ).getHeight() ); + }); + + // if all input have the same size + if(widths.length){ + widths.sort(); + heights.sort(); + sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) && + (heights[ 0 ] == heights[ heights.length -1 ] ); + + if( !sameSize ){ + console.warn("Input image do not all have the same size. Filter not valid"); + } + } + + return sameSize; + } + + /** * MUST be implemented by the class that inherit this. * Launch the process. diff --git a/src/core/Image2D.js b/src/core/Image2D.js index e3dc506..b4deaa2 100644 --- a/src/core/Image2D.js +++ b/src/core/Image2D.js @@ -84,14 +84,18 @@ class Image2D extends PixpipeObject{ * @param {Float32Array} array - 1D array of raw data stored as RGBARGBA... * @param {Number} width - width of the Image2D * @param {Number} height - height of the Image2D + * @param {Number} ncpp - number of components per pixel (default: 4) +} */ - setData( array, width, height ){ + setData( array, width, height, ncpp=4 ){ // do not alloz to set a new internal array if( this._data ){ console.warn("Data can be set to an Image2D object only once. Cannot init the Image2D."); return; } + this._componentsPerPixel = ncpp; + if( array.length != width*height*this._componentsPerPixel){ console.warn("The array size does not match the width and height. Cannot init the Image2D."); return; diff --git a/src/filter/ForEachPixelImageFilter.js b/src/filter/ForEachPixelImageFilter.js index 54edfd7..263a8ab 100644 --- a/src/filter/ForEachPixelImageFilter.js +++ b/src/filter/ForEachPixelImageFilter.js @@ -60,7 +60,7 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { // building the output var img2D = new Image2D(); - img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight()); + img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight(), inputImage2D.getComponentsPerPixel()); this._setOutput( img2D ); } diff --git a/src/filter/ImageBlendExpressionFilter.js b/src/filter/ImageBlendExpressionFilter.js index 9ff71f3..9582dc6 100644 --- a/src/filter/ImageBlendExpressionFilter.js +++ b/src/filter/ImageBlendExpressionFilter.js @@ -1,26 +1,23 @@ //import mathjs from 'mathjs'; +import Parser from 'expr-eval' +//var Parser = require('expr-eval').Parser; + import { ImageToImageFilter } from '../core/ImageToImageFilter.js'; class ImageBlendExpressionFilter extends ImageToImageFilter { constructor(){ super(); - - /* - // provide a scope - console.log('\nprovide a scope'); - var node2 = mathjs.parse('x^a'); - var code2 = node2.compile(); - console.log(node2.toString()); // "x ^ a" - var scope = { - x: 3, - a: 2 - }; - console.log(code2.eval(scope)); - - console.log(mathjs); - */ + + + var parser = new Parser.Parser(); + var expr = parser.parse('2 * x + 1'); + console.log(expr.evaluate({ x: 3 })); // 7 + + // or + //Parser.evaluate('6 * x', { x: 7 }) // 42 + } diff --git a/src/filter/MultiplyImageFilter.js b/src/filter/MultiplyImageFilter.js deleted file mode 100644 index 010e132..0000000 --- a/src/filter/MultiplyImageFilter.js +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Author Jonathan Lurie - http://me.jonahanlurie.fr -* License MIT -* Link https://github.com/jonathanlurie/pixpipejs -* Lab MCIN - Montreal Neurological Institute -*/ - -import { ImageToImageFilter } from '../core/ImageToImageFilter.js'; - -class MultiplyImageFilter extends { - - construtor(){ - super(); - - // both input are images. - this._inputValidator[ 0 ] = Image2D.TYPE(); - this._inputValidator[ 1 ] = Image2D.TYPE(); - } - - hasSameSize(){ - - } - - -} /* END class MultiplyImageFilter */ - -export { MultiplyImageFilter } diff --git a/src/filter/SpectralScaleImageFilter.js b/src/filter/SpectralScaleImageFilter.js new file mode 100644 index 0000000..2e7c95e --- /dev/null +++ b/src/filter/SpectralScaleImageFilter.js @@ -0,0 +1,72 @@ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +import { Image2D } from '../core/Image2D.js'; +import { ImageToImageFilter } from '../core/ImageToImageFilter.js'; + +/** +* Multiply an image by the other, like a scaling function. +* The image requires two inputs named "0" and "1". +* Simply use `addInput( myImg1, "0" )` +* and `addInput( myImg2, "1" )`. The input "0" can have 1 or more bands while +* the input "1" can have only one band since the same scale is apply to each band. +* +* usage: examples/forEachPixelGadient.html +*/ +class SpectralScaleImageFilter extends ImageToImageFilter { + + constructor(){ + super(); + + // both input are images. + this._inputValidator[ 0 ] = Image2D.TYPE(); + this._inputValidator[ 1 ] = Image2D.TYPE(); + } + + + /** + * Run the filter + */ + update(){ + // filter must have valid input of the same size + if( !this.hasSameSizeInput() || !this.hasValidInput()){ + return; + } + + var dataImg0 = this._getInput(0); + var dataImg1 = this._getInput(1); + + // the input "1" (aka. the scaling data) must be single band + if( dataImg1.getComponentsPerPixel() != 1 ){ + console.warn("The scaling image must have one single band."); + return; + } + + var nbOfPixels = dataImg0.getWidth() * dataImg0.getHeight(); + var ncpp = dataImg0.getComponentsPerPixel(); + + var data0 = dataImg0.getDataCopy(); + var data1 = dataImg1.getData(); + + // scale the spectral info + for(var p=0; p Date: Tue, 14 Mar 2017 17:14:21 -0400 Subject: [PATCH 5/9] Started to work on the Pipeline object --- dist/pixpipe.js | 1527 +++---------------------- dist/pixpipe.js.map | 2 +- src/core/Filter.js | 84 +- src/core/Image2D.js | 30 +- src/core/Pipeline.js | 72 ++ src/filter/ForEachPixelImageFilter.js | 21 + src/pixpipe.js | 5 +- 7 files changed, 346 insertions(+), 1395 deletions(-) create mode 100644 src/core/Pipeline.js diff --git a/dist/pixpipe.js b/dist/pixpipe.js index ba42583..3c37df6 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -108,6 +108,13 @@ class PixpipeObject { * Lab MCIN - Montreal Neurological Institute */ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + /** * Filter is a base class and must be inherited to be used properly. * A filter takes one or more Image instances as input and returns one or more @@ -116,11 +123,11 @@ class PixpipeObject { * Every input and output can be arranged by category, so that internaly, a filter * can use and output diferent kind of data. */ -class Filter extends PixpipeObject { +class Filter$1 extends PixpipeObject { constructor(){ super(); - this._type = Filter.TYPE(); + this._type = Filter$1.TYPE(); // a bunch of event to be defined. Empty by default. this._events = {}; @@ -128,13 +135,15 @@ class Filter extends PixpipeObject { this._inputValidator = {}; this._input = { - "0": [] + //"0": [] }; this._output = { - "0" : [] + //"0" : [] }; + // pipeline associated with this filter. Not mandatory. + this._pipeline = null; } @@ -145,6 +154,7 @@ class Filter extends PixpipeObject { return "FILTER"; } + /** * Set an input, potentially associated to a category. * @param {Image2D} inputObject - most likely an instance of Image2D but can also be HTML5 File or Image3D @@ -163,6 +173,11 @@ class Filter extends PixpipeObject { } this._input[category] = inputObject ; + + // add the pipeline object if defined + if( this._pipeline ){ + inputObject.setPipeline( this._pipeline ); + } } @@ -197,6 +212,28 @@ class Filter extends PixpipeObject { } + /** + * Workaround to + */ + _setOutput2( dataType, category=0 ){ + var outputObject = null; + + console.log(this._output); + + // the category may not exist, we create it + if( !(category in this._output) ){ + var outputObject = new dataType(); + this._output[category] = outputObject; + console.log("hello"); + }else{ + outputObject = this._output[category]; + console.log("hello2"); + } + + return outputObject; + } + + /** * [PRIVATE] * should noly be used by the class that inherit Filter. @@ -284,6 +321,55 @@ class Filter extends PixpipeObject { } + /** + * Associate a Pipeline instance to this filter. Not supposed to be called manually + * because it is automatically called-back when adding a filter to a pipeline. + * @param {Pipeline} p - Pipeline object. + */ + setPipeline( p ){ + // only if not already set. + if(!this._pipeline){ + this._pipeline = p; + + // set the pipeline to all input so that they can update the entire + // pipeline in case of modification + var inputCategories = Object.keys( this._inputValidator ); + inputCategories.forEach( function(key){ + widths.push( that._getInput( key ).setPipeline( p ) ); + }); + + } + } + + + /** + * Update the whole pipeline due to an update in the filter + * (new input, new metadata) + */ + _updatePipeline(){ + if(this._pipeline){ + this._pipeline.update(); + } + } + + + /** + * @param {String} uuid - uuid to look for + * @return {Boolean} true if this filter uses an input with such uuid + */ + hasInputWithUuid( uuid ){ + var found = false; + + var inputCategories = Object.keys( this._inputValidator ); + inputCategories.forEach( function(key){ + found = found | that._getInput( key ).setPipeline( p ) ; + }); + + return found; + } + + + } /* END class Filter */ /* @@ -315,6 +401,9 @@ class Image2D extends PixpipeObject{ this._height = -1; this._componentsPerPixel = 4; // RGBA, by default + // pipeline associated with this image. Not mandatory. + this._pipeline = null; + // allocate the array if size is specified if(options && "width" in options && "height" in options){ @@ -338,12 +427,9 @@ class Image2D extends PixpipeObject{ this._data.fill(0); } - - } } - } @@ -374,11 +460,13 @@ class Image2D extends PixpipeObject{ } */ setData( array, width, height, ncpp=4 ){ - // do not alloz to set a new internal array + /* + // do not allow to set a new internal array if( this._data ){ console.warn("Data can be set to an Image2D object only once. Cannot init the Image2D."); return; } + */ this._componentsPerPixel = ncpp; @@ -390,7 +478,6 @@ class Image2D extends PixpipeObject{ this._data = new Float32Array( array ); this._width = width; this._height = height; - } @@ -501,6 +588,24 @@ class Image2D extends PixpipeObject{ return (position.x + position.y*this._width); } + + /** + * Associate a Pipeline instance to this image. Not supposed to be called manually + * because it is automatically called-back when adding a filter to a pipeline. + * @param {Pipeline} p - Pipeline object. + */ + setPipeline( p ){ + // only if not already set. + if(!this._pipeline){ + this._pipeline = p; + } + } + + // TODO: warn the pipeline if metadata changed or pixel value changed + // --> do NOT update the pipeline at every modif because if we change a lot + // of pixel values... (wait to call update() on the pipeline.) + + } /* END of class Image2D */ /* @@ -515,7 +620,7 @@ class Image2D extends PixpipeObject{ * filter that input a single Image2D and output a single Image2D. * This class does not overload the update() method. */ -class ImageToImageFilter extends Filter { +class ImageToImageFilter extends Filter$1 { constructor(){ super(); @@ -608,7 +713,7 @@ class PixelWiseImageFilter extends ImageToImageFilter{ * imageToCanvasFilter.addInput( myImage ); * imageToCanvasFilter.update(); */ -class CanvasImageWriter extends Filter{ +class CanvasImageWriter extends Filter$1{ /** * @param {String} parentDivID - dom id of the future canvas' parent. @@ -745,7 +850,7 @@ class CanvasImageWriter extends Filter{ * url2ImgFilter.addInput( "images/sd.jpg" ); * url2ImgFilter.update(); */ -class UrlImageReader extends Filter { +class UrlImageReader extends Filter$1 { /** * @param {function} callback - function to call when the image is loaded. @@ -820,7 +925,7 @@ class UrlImageReader extends Filter { * file2ImgFilter.addInput( fileInput.files[0] ); * file2ImgFilter.update(); */ -class FileImageReader extends Filter { +class FileImageReader extends Filter$1 { /** * @param {function} callback - function to call when the image is loaded. @@ -949,1382 +1054,34 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { this._forEachPixelOfSuch(firstPixel, lastPixel, increment ); + // TODO : find a way NOT to replace the ouput pointer so that the following + // filter can use the same object when refreshed by the pipeline + /* + // maybe using this kind of thing: + var anObjType = Image2D; + var im = new anObjType(); + console.log(im); + */ + + /* // building the output var img2D = new Image2D(); img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight(), inputImage2D.getComponentsPerPixel()); this._setOutput( img2D ); - } - -} /* END class ForEachPixelImageFilter */ - -/* -* Author Jonathan Lurie - http://me.jonahanlurie.fr -* License MIT -* Link https://github.com/jonathanlurie/pixpipejs -* Lab MCIN - Montreal Neurological Institute -*/ - -/** -* -*/ -class SpatialConvolutionFilter extends ImageToImageFilter { - - constructor(){ - - } -} - -var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - - + */ + var outputImg = this._setOutput2( Image2D ); + console.log(outputImg); + outputImg.setData( + this._inputBuffer, + inputImage2D.getWidth(), + inputImage2D.getHeight(), + inputImage2D.getComponentsPerPixel() + ); -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var bundle = createCommonjsModule(function (module, exports) { -(function (global, factory) { - module.exports = factory(); -}(commonjsGlobal, (function () { 'use strict'; - -/*! - Based on ndef.parser, by Raphael Graf(r@undefined.ch) - http://www.undefined.ch/mparser/index.html - - Ported to JavaScript and modified by Matthew Crumley (email@matthewcrumley.com, http://silentmatt.com/) - - You are free to use and modify this code in anyway you find useful. Please leave this comment in the code - to acknowledge its original source. If you feel like it, I enjoy hearing about projects that use my code, - but don't feel like you have to let me know or ask permission. -*/ - -function indexOf(array, obj) { - for (var i = 0; i < array.length; i++) { - if (array[i] === obj) { - return i; - } - } - return -1; -} - -var INUMBER = 'INUMBER'; -var IOP1 = 'IOP1'; -var IOP2 = 'IOP2'; -var IOP3 = 'IOP3'; -var IVAR = 'IVAR'; -var IFUNCALL = 'IFUNCALL'; -var IEXPR = 'IEXPR'; -var IMEMBER = 'IMEMBER'; - -function Instruction(type, value) { - this.type = type; - this.value = (value !== undefined && value !== null) ? value : 0; -} - -Instruction.prototype.toString = function () { - switch (this.type) { - case INUMBER: - case IOP1: - case IOP2: - case IOP3: - case IVAR: - return this.value; - case IFUNCALL: - return 'CALL ' + this.value; - case IMEMBER: - return '.' + this.value; - default: - return 'Invalid Instruction'; - } -}; - -function Expression(tokens, parser) { - this.tokens = tokens; - this.parser = parser; - this.unaryOps = parser.unaryOps; - this.binaryOps = parser.binaryOps; - this.ternaryOps = parser.ternaryOps; - this.functions = parser.functions; -} - -function escapeValue(v) { - if (typeof v === 'string') { - return JSON.stringify(v).replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); - } - return v; -} - -function simplify(tokens, unaryOps, binaryOps, ternaryOps, values) { - var nstack = []; - var newexpression = []; - var n1, n2, n3; - var f; - for (var i = 0, L = tokens.length; i < L; i++) { - var item = tokens[i]; - var type = item.type; - if (type === INUMBER) { - nstack.push(item); - } else if (type === IVAR && values.hasOwnProperty(item.value)) { - item = new Instruction(INUMBER, values[item.value]); - nstack.push(item); - } else if (type === IOP2 && nstack.length > 1) { - n2 = nstack.pop(); - n1 = nstack.pop(); - f = binaryOps[item.value]; - item = new Instruction(INUMBER, f(n1.value, n2.value)); - nstack.push(item); - } else if (type === IOP3 && nstack.length > 2) { - n3 = nstack.pop(); - n2 = nstack.pop(); - n1 = nstack.pop(); - if (item.value === '?') { - nstack.push(n1.value ? n2.value : n3.value); - } else { - f = ternaryOps[item.value]; - item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value)); - nstack.push(item); - } - } else if (type === IOP1 && nstack.length > 0) { - n1 = nstack.pop(); - f = unaryOps[item.value]; - item = new Instruction(INUMBER, f(n1.value)); - nstack.push(item); - } else if (type === IEXPR) { - while (nstack.length > 0) { - newexpression.push(nstack.shift()); - } - newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values))); - } else if (type === IMEMBER && nstack.length > 0) { - n1 = nstack.pop(); - nstack.push(new Instruction(INUMBER, n1.value[item.value])); - } else { - while (nstack.length > 0) { - newexpression.push(nstack.shift()); - } - newexpression.push(item); - } - } - while (nstack.length > 0) { - newexpression.push(nstack.shift()); - } - return newexpression; -} - -Expression.prototype.simplify = function (values) { - values = values || {}; - return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser); -}; - -function substitute(tokens, variable, expr) { - var newexpression = []; - for (var i = 0, L = tokens.length; i < L; i++) { - var item = tokens[i]; - var type = item.type; - if (type === IVAR && item.value === variable) { - for (var j = 0; j < expr.tokens.length; j++) { - var expritem = expr.tokens[j]; - var replitem; - if (expritem.type === IOP1) { - replitem = unaryInstruction(expritem.value); - } else if (expritem.type === IOP2) { - replitem = binaryInstruction(expritem.value); - } else if (expritem.type === IOP3) { - replitem = ternaryInstruction(expritem.value); - } else { - replitem = new Instruction(expritem.type, expritem.value); - } - newexpression.push(replitem); - } - } else if (type === IEXPR) { - newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr))); - } else { - newexpression.push(item); - } - } - return newexpression; -} - -Expression.prototype.substitute = function (variable, expr) { - if (!(expr instanceof Expression)) { - expr = this.parser.parse(String(expr)); - } - - return new Expression(substitute(this.tokens, variable, expr), this.parser); -}; - -function evaluate(tokens, expr, values) { - var nstack = []; - var n1, n2, n3; - var f; - for (var i = 0, L = tokens.length; i < L; i++) { - var item = tokens[i]; - var type = item.type; - if (type === INUMBER) { - nstack.push(item.value); - } else if (type === IOP2) { - n2 = nstack.pop(); - n1 = nstack.pop(); - f = expr.binaryOps[item.value]; - nstack.push(f(n1, n2)); - } else if (type === IOP3) { - n3 = nstack.pop(); - n2 = nstack.pop(); - n1 = nstack.pop(); - if (item.value === '?') { - nstack.push(evaluate(n1 ? n2 : n3, expr, values)); - } else { - f = expr.ternaryOps[item.value]; - nstack.push(f(n1, n2, n3)); - } - } else if (type === IVAR) { - if (item.value in expr.functions) { - nstack.push(expr.functions[item.value]); - } else { - var v = values[item.value]; - if (v !== undefined) { - nstack.push(v); - } else { - throw new Error('undefined variable: ' + item.value); - } - } - } else if (type === IOP1) { - n1 = nstack.pop(); - f = expr.unaryOps[item.value]; - nstack.push(f(n1)); - } else if (type === IFUNCALL) { - var argCount = item.value; - var args = []; - while (argCount-- > 0) { - args.unshift(nstack.pop()); - } - f = nstack.pop(); - if (f.apply && f.call) { - nstack.push(f.apply(undefined, args)); - } else { - throw new Error(f + ' is not a function'); - } - } else if (type === IEXPR) { - nstack.push(item.value); - } else if (type === IMEMBER) { - n1 = nstack.pop(); - nstack.push(n1[item.value]); - } else { - throw new Error('invalid Expression'); - } } - if (nstack.length > 1) { - throw new Error('invalid Expression (parity)'); - } - return nstack[0]; -} -Expression.prototype.evaluate = function (values) { - values = values || {}; - return evaluate(this.tokens, this, values); -}; - -function expressionToString(tokens, toJS) { - var nstack = []; - var n1, n2, n3; - var f; - for (var i = 0, L = tokens.length; i < L; i++) { - var item = tokens[i]; - var type = item.type; - if (type === INUMBER) { - if (typeof item.value === 'number' && item.value < 0) { - nstack.push('(' + item.value + ')'); - } else { - nstack.push(escapeValue(item.value)); - } - } else if (type === IOP2) { - n2 = nstack.pop(); - n1 = nstack.pop(); - f = item.value; - if (toJS) { - if (f === '^') { - nstack.push('Math.pow(' + n1 + ', ' + n2 + ')'); - } else if (f === 'and') { - nstack.push('(!!' + n1 + ' && !!' + n2 + ')'); - } else if (f === 'or') { - nstack.push('(!!' + n1 + ' || !!' + n2 + ')'); - } else if (f === '||') { - nstack.push('(String(' + n1 + ') + String(' + n2 + '))'); - } else if (f === '==') { - nstack.push('(' + n1 + ' === ' + n2 + ')'); - } else if (f === '!=') { - nstack.push('(' + n1 + ' !== ' + n2 + ')'); - } else { - nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); - } - } else { - nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); - } - } else if (type === IOP3) { - n3 = nstack.pop(); - n2 = nstack.pop(); - n1 = nstack.pop(); - f = item.value; - if (f === '?') { - nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')'); - } else { - throw new Error('invalid Expression'); - } - } else if (type === IVAR) { - nstack.push(item.value); - } else if (type === IOP1) { - n1 = nstack.pop(); - f = item.value; - if (f === '-' || f === '+') { - nstack.push('(' + f + n1 + ')'); - } else if (toJS) { - if (f === 'not') { - nstack.push('(' + '!' + n1 + ')'); - } else if (f === '!') { - nstack.push('fac(' + n1 + ')'); - } else { - nstack.push(f + '(' + n1 + ')'); - } - } else if (f === '!') { - nstack.push('(' + n1 + '!)'); - } else { - nstack.push('(' + f + ' ' + n1 + ')'); - } - } else if (type === IFUNCALL) { - var argCount = item.value; - var args = []; - while (argCount-- > 0) { - args.unshift(nstack.pop()); - } - f = nstack.pop(); - nstack.push(f + '(' + args.join(', ') + ')'); - } else if (type === IMEMBER) { - n1 = nstack.pop(); - nstack.push(n1 + '.' + item.value); - } else if (type === IEXPR) { - nstack.push('(' + expressionToString(item.value, toJS) + ')'); - } else { - throw new Error('invalid Expression'); - } - } - if (nstack.length > 1) { - throw new Error('invalid Expression (parity)'); - } - return nstack[0]; -} - -Expression.prototype.toString = function () { - return expressionToString(this.tokens, false); -}; - -function getSymbols(tokens, symbols) { - for (var i = 0, L = tokens.length; i < L; i++) { - var item = tokens[i]; - if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) { - symbols.push(item.value); - } else if (item.type === IEXPR) { - getSymbols(item.value, symbols); - } - } -} - -Expression.prototype.symbols = function () { - var vars = []; - getSymbols(this.tokens, vars); - return vars; -}; - -Expression.prototype.variables = function () { - var vars = []; - getSymbols(this.tokens, vars); - var functions = this.functions; - return vars.filter(function (name) { - return !(name in functions); - }); -}; - -Expression.prototype.toJSFunction = function (param, variables) { - var expr = this; - var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func - return function () { - return f.apply(expr, arguments); - }; -}; - -function add(a, b) { - return Number(a) + Number(b); -} -function sub(a, b) { - return a - b; -} -function mul(a, b) { - return a * b; -} -function div(a, b) { - return a / b; -} -function mod(a, b) { - return a % b; -} -function concat(a, b) { - return '' + a + b; -} -function equal(a, b) { - return a === b; -} -function notEqual(a, b) { - return a !== b; -} -function greaterThan(a, b) { - return a > b; -} -function lessThan(a, b) { - return a < b; -} -function greaterThanEqual(a, b) { - return a >= b; -} -function lessThanEqual(a, b) { - return a <= b; -} -function andOperator(a, b) { - return Boolean(a && b); -} -function orOperator(a, b) { - return Boolean(a || b); -} -function sinh(a) { - return ((Math.exp(a) - Math.exp(-a)) / 2); -} -function cosh(a) { - return ((Math.exp(a) + Math.exp(-a)) / 2); -} -function tanh(a) { - if (a === Infinity) return 1; - if (a === -Infinity) return -1; - return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a)); -} -function asinh(a) { - if (a === -Infinity) return a; - return Math.log(a + Math.sqrt(a * a + 1)); -} -function acosh(a) { - return Math.log(a + Math.sqrt(a * a - 1)); -} -function atanh(a) { - return (Math.log((1 + a) / (1 - a)) / 2); -} -function log10(a) { - return Math.log(a) * Math.LOG10E; -} -function neg(a) { - return -a; -} -function not(a) { - return !a; -} -function trunc(a) { - return a < 0 ? Math.ceil(a) : Math.floor(a); -} -function random(a) { - return Math.random() * (a || 1); -} -function factorial(a) { // a! - return gamma(a + 1); -} -function stringLength(s) { - return String(s).length; -} - -function hypot() { - var sum = 0; - var larg = 0; - for (var i = 0, L = arguments.length; i < L; i++) { - var arg = Math.abs(arguments[i]); - var div; - if (larg < arg) { - div = larg / arg; - sum = sum * div * div + 1; - larg = arg; - } else if (arg > 0) { - div = arg / larg; - sum += div * div; - } else { - sum += arg; - } - } - return larg === Infinity ? Infinity : larg * Math.sqrt(sum); -} - -function condition(cond, yep, nope) { - return cond ? yep : nope; -} - -function isInteger(value) { - return isFinite(value) && (value === Math.round(value)); -} - -var GAMMA_G = 4.7421875; -var GAMMA_P = [ - 0.99999999999999709182, - 57.156235665862923517, -59.597960355475491248, - 14.136097974741747174, -0.49191381609762019978, - 0.33994649984811888699e-4, - 0.46523628927048575665e-4, -0.98374475304879564677e-4, - 0.15808870322491248884e-3, -0.21026444172410488319e-3, - 0.21743961811521264320e-3, -0.16431810653676389022e-3, - 0.84418223983852743293e-4, -0.26190838401581408670e-4, - 0.36899182659531622704e-5 -]; - -// Gamma function from math.js -function gamma(n) { - var t, x; - - if (isInteger(n)) { - if (n <= 0) { - return isFinite(n) ? Infinity : NaN; - } - - if (n > 171) { - return Infinity; // Will overflow - } - - var value = n - 2; - var res = n - 1; - while (value > 1) { - res *= value; - value--; - } - - if (res === 0) { - res = 1; // 0! is per definition 1 - } - - return res; - } - - if (n < 0.5) { - return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n)); - } - - if (n >= 171.35) { - return Infinity; // will overflow - } - - if (n > 85.0) { // Extended Stirling Approx - var twoN = n * n; - var threeN = twoN * n; - var fourN = threeN * n; - var fiveN = fourN * n; - return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) * - (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - - 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + - 5246819 / (75246796800 * fiveN * n)); - } - - --n; - x = GAMMA_P[0]; - for (var i = 1; i < GAMMA_P.length; ++i) { - x += GAMMA_P[i] / (n + i); - } - - t = n + GAMMA_G + 0.5; - return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x; -} - -var TEOF = 'TEOF'; -var TOP = 'TOP'; -var TNUMBER = 'TNUMBER'; -var TSTRING = 'TSTRING'; -var TPAREN = 'TPAREN'; -var TCOMMA = 'TCOMMA'; -var TNAME = 'TNAME'; - -function Token(type, value, line, column) { - this.type = type; - this.value = value; - this.line = line; - this.column = column; -} - -Token.prototype.toString = function () { - return this.type + ': ' + this.value; -}; - -function TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) { - this.pos = 0; - this.line = 0; - this.column = 0; - this.current = null; - this.unaryOps = unaryOps; - this.binaryOps = binaryOps; - this.ternaryOps = ternaryOps; - this.consts = consts; - this.expression = expression; - this.savedPosition = 0; - this.savedCurrent = null; - this.savedLine = 0; - this.savedColumn = 0; -} - -TokenStream.prototype.newToken = function (type, value, line, column) { - return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column); -}; - -TokenStream.prototype.save = function () { - this.savedPosition = this.pos; - this.savedCurrent = this.current; - this.savedLine = this.line; - this.savedColumn = this.column; -}; - -TokenStream.prototype.restore = function () { - this.pos = this.savedPosition; - this.current = this.savedCurrent; - this.line = this.savedLine; - this.column = this.savedColumn; -}; - -TokenStream.prototype.next = function () { - if (this.pos >= this.expression.length) { - return this.newToken(TEOF, 'EOF'); - } - - if (this.isWhitespace() || this.isComment()) { - return this.next(); - } else if (this.isNumber() || - this.isOperator() || - this.isString() || - this.isParen() || - this.isComma() || - this.isNamedOp() || - this.isConst() || - this.isName()) { - return this.current; - } else { - this.parseError('Unknown character "' + this.expression.charAt(this.pos) + '"'); - } -}; - -TokenStream.prototype.isString = function () { - var r = false; - var startLine = this.line; - var startColumn = this.column; - var startPos = this.pos; - var quote = this.expression.charAt(startPos); - - if (quote === '\'' || quote === '"') { - this.pos++; - this.column++; - var index = this.expression.indexOf(quote, startPos + 1); - while (index >= 0 && this.pos < this.expression.length) { - this.pos = index + 1; - if (this.expression.charAt(index - 1) !== '\\') { - var rawString = this.expression.substring(startPos + 1, index); - this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn); - var newLine = rawString.indexOf('\n'); - var lastNewline = -1; - while (newLine >= 0) { - this.line++; - this.column = 0; - lastNewline = newLine; - newLine = rawString.indexOf('\n', newLine + 1); - } - this.column += rawString.length - lastNewline; - r = true; - break; - } - index = this.expression.indexOf(quote, index + 1); - } - } - return r; -}; - -TokenStream.prototype.isParen = function () { - var char = this.expression.charAt(this.pos); - if (char === '(' || char === ')') { - this.current = this.newToken(TPAREN, char); - this.pos++; - this.column++; - return true; - } - return false; -}; - -TokenStream.prototype.isComma = function () { - var char = this.expression.charAt(this.pos); - if (char === ',') { - this.current = this.newToken(TCOMMA, ','); - this.pos++; - this.column++; - return true; - } - return false; -}; - -TokenStream.prototype.isConst = function () { - var startPos = this.pos; - var i = startPos; - for (; i < this.expression.length; i++) { - var c = this.expression.charAt(i); - if (c.toUpperCase() === c.toLowerCase()) { - if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) { - break; - } - } - } - if (i > startPos) { - var str = this.expression.substring(startPos, i); - if (str in this.consts) { - this.current = this.newToken(TNUMBER, this.consts[str]); - this.pos += str.length; - this.column += str.length; - return true; - } - } - return false; -}; - -TokenStream.prototype.isNamedOp = function () { - var startPos = this.pos; - var i = startPos; - for (; i < this.expression.length; i++) { - var c = this.expression.charAt(i); - if (c.toUpperCase() === c.toLowerCase()) { - if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { - break; - } - } - } - if (i > startPos) { - var str = this.expression.substring(startPos, i); - if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) { - this.current = this.newToken(TOP, str); - this.pos += str.length; - this.column += str.length; - return true; - } - } - return false; -}; - -TokenStream.prototype.isName = function () { - var startPos = this.pos; - var i = startPos; - for (; i < this.expression.length; i++) { - var c = this.expression.charAt(i); - if (c.toUpperCase() === c.toLowerCase()) { - if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { - break; - } - } - } - if (i > startPos) { - var str = this.expression.substring(startPos, i); - this.current = this.newToken(TNAME, str); - this.pos += str.length; - this.column += str.length; - return true; - } - return false; -}; - -TokenStream.prototype.isWhitespace = function () { - var r = false; - var char = this.expression.charAt(this.pos); - while (char === ' ' || char === '\t' || char === '\n' || char === '\r') { - r = true; - this.pos++; - this.column++; - if (char === '\n') { - this.line++; - this.column = 0; - } - if (this.pos >= this.expression.length) { - break; - } - char = this.expression.charAt(this.pos); - } - return r; -}; - -var codePointPattern = /^[0-9a-f]{4}$/i; - -TokenStream.prototype.unescape = function (v) { - var index = v.indexOf('\\'); - if (index < 0) { - return v; - } - - var buffer = v.substring(0, index); - while (index >= 0) { - var c = v.charAt(++index); - switch (c) { - case '\'': - buffer += '\''; - break; - case '"': - buffer += '"'; - break; - case '\\': - buffer += '\\'; - break; - case '/': - buffer += '/'; - break; - case 'b': - buffer += '\b'; - break; - case 'f': - buffer += '\f'; - break; - case 'n': - buffer += '\n'; - break; - case 'r': - buffer += '\r'; - break; - case 't': - buffer += '\t'; - break; - case 'u': - // interpret the following 4 characters as the hex of the unicode code point - var codePoint = v.substring(index + 1, index + 5); - if (!codePointPattern.test(codePoint)) { - this.parseError('Illegal escape sequence: \\u' + codePoint); - } - buffer += String.fromCharCode(parseInt(codePoint, 16)); - index += 4; - break; - default: - throw this.parseError('Illegal escape sequence: "\\' + c + '"'); - } - ++index; - var backslash = v.indexOf('\\', index); - buffer += v.substring(index, backslash < 0 ? v.length : backslash); - index = backslash; - } - - return buffer; -}; - -TokenStream.prototype.isComment = function () { - var char = this.expression.charAt(this.pos); - if (char === '/' && this.expression.charAt(this.pos + 1) === '*') { - var startPos = this.pos; - this.pos = this.expression.indexOf('*/', this.pos) + 2; - if (this.pos === 1) { - this.pos = this.expression.length; - } - var comment = this.expression.substring(startPos, this.pos); - var newline = comment.indexOf('\n'); - while (newline >= 0) { - this.line++; - this.column = comment.length - newline; - newline = comment.indexOf('\n', newline + 1); - } - return true; - } - return false; -}; - -TokenStream.prototype.isNumber = function () { - var valid = false; - var pos = this.pos; - var startPos = pos; - var resetPos = pos; - var column = this.column; - var resetColumn = column; - var foundDot = false; - var foundDigits = false; - var char; - - while (pos < this.expression.length) { - char = this.expression.charAt(pos); - if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) { - if (char === '.') { - foundDot = true; - } else { - foundDigits = true; - } - pos++; - column++; - valid = foundDigits; - } else { - break; - } - } - - if (valid) { - resetPos = pos; - resetColumn = column; - } - - if (char === 'e' || char === 'E') { - pos++; - column++; - var acceptSign = true; - var validExponent = false; - while (pos < this.expression.length) { - char = this.expression.charAt(pos); - if (acceptSign && (char === '+' || char === '-')) { - acceptSign = false; - } else if (char >= '0' && char <= '9') { - validExponent = true; - acceptSign = false; - } else { - break; - } - pos++; - column++; - } - - if (!validExponent) { - pos = resetPos; - column = resetColumn; - } - } - - if (valid) { - this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos))); - this.pos = pos; - this.column = column; - } else { - this.pos = resetPos; - this.column = resetColumn; - } - return valid; -}; - -TokenStream.prototype.isOperator = function () { - var char = this.expression.charAt(this.pos); - - if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') { - this.current = this.newToken(TOP, char); - } else if (char === '∙' || char === '•') { - this.current = this.newToken(TOP, '*'); - } else if (char === '>') { - if (this.expression.charAt(this.pos + 1) === '=') { - this.current = this.newToken(TOP, '>='); - this.pos++; - this.column++; - } else { - this.current = this.newToken(TOP, '>'); - } - } else if (char === '<') { - if (this.expression.charAt(this.pos + 1) === '=') { - this.current = this.newToken(TOP, '<='); - this.pos++; - this.column++; - } else { - this.current = this.newToken(TOP, '<'); - } - } else if (char === '|') { - if (this.expression.charAt(this.pos + 1) === '|') { - this.current = this.newToken(TOP, '||'); - this.pos++; - this.column++; - } else { - return false; - } - } else if (char === '=') { - if (this.expression.charAt(this.pos + 1) === '=') { - this.current = this.newToken(TOP, '=='); - this.pos++; - this.column++; - } else { - return false; - } - } else if (char === '!') { - if (this.expression.charAt(this.pos + 1) === '=') { - this.current = this.newToken(TOP, '!='); - this.pos++; - this.column++; - } else { - this.current = this.newToken(TOP, char); - } - } else { - return false; - } - this.pos++; - this.column++; - return true; -}; - -TokenStream.prototype.parseError = function (msg) { - throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg); -}; - -var unaryInstructionCache = {}; -function unaryInstruction(value) { - var inst = unaryInstructionCache[value]; - if (!inst) { - inst = unaryInstructionCache[value] = new Instruction(IOP1, value); - } - return inst; -} - -var binaryInstructionCache = {}; -function binaryInstruction(value) { - var inst = binaryInstructionCache[value]; - if (!inst) { - inst = binaryInstructionCache[value] = new Instruction(IOP2, value); - } - return inst; -} - -var ternaryInstructionCache = {}; -function ternaryInstruction(value) { - var inst = ternaryInstructionCache[value]; - if (!inst) { - inst = ternaryInstructionCache[value] = new Instruction(IOP3, value); - } - return inst; -} - -function ParserState(parser, tokenStream) { - this.parser = parser; - this.tokens = tokenStream; - this.current = null; - this.nextToken = null; - this.next(); - this.savedCurrent = null; - this.savedNextToken = null; -} - -ParserState.prototype.next = function () { - this.current = this.nextToken; - return (this.nextToken = this.tokens.next()); -}; - -ParserState.prototype.tokenMatches = function (token, value) { - if (typeof value === 'undefined') { - return true; - } else if (Array.isArray(value)) { - return indexOf(value, token.value) >= 0; - } else if (typeof value === 'function') { - return value(token); - } else { - return token.value === value; - } -}; - -ParserState.prototype.save = function () { - this.savedCurrent = this.current; - this.savedNextToken = this.nextToken; - this.tokens.save(); -}; - -ParserState.prototype.restore = function () { - this.tokens.restore(); - this.current = this.savedCurrent; - this.nextToken = this.savedNextToken; -}; - -ParserState.prototype.accept = function (type, value) { - if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) { - this.next(); - return true; - } - return false; -}; - -ParserState.prototype.expect = function (type, value) { - if (!this.accept(type, value)) { - throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type)); - } -}; - -ParserState.prototype.parseAtom = function (instr) { - if (this.accept(TNAME)) { - instr.push(new Instruction(IVAR, this.current.value)); - } else if (this.accept(TNUMBER)) { - instr.push(new Instruction(INUMBER, this.current.value)); - } else if (this.accept(TSTRING)) { - instr.push(new Instruction(INUMBER, this.current.value)); - } else if (this.accept(TPAREN, '(')) { - this.parseExpression(instr); - this.expect(TPAREN, ')'); - } else { - throw new Error('unexpected ' + this.nextToken); - } -}; - -ParserState.prototype.parseExpression = function (instr) { - this.parseConditionalExpression(instr); -}; - -ParserState.prototype.parseConditionalExpression = function (instr) { - this.parseOrExpression(instr); - while (this.accept(TOP, '?')) { - var trueBranch = []; - var falseBranch = []; - this.parseConditionalExpression(trueBranch); - this.expect(TOP, ':'); - this.parseConditionalExpression(falseBranch); - instr.push(new Instruction(IEXPR, trueBranch)); - instr.push(new Instruction(IEXPR, falseBranch)); - instr.push(ternaryInstruction('?')); - } -}; - -ParserState.prototype.parseOrExpression = function (instr) { - this.parseAndExpression(instr); - while (this.accept(TOP, 'or')) { - this.parseAndExpression(instr); - instr.push(binaryInstruction('or')); - } -}; - -ParserState.prototype.parseAndExpression = function (instr) { - this.parseComparison(instr); - while (this.accept(TOP, 'and')) { - this.parseComparison(instr); - instr.push(binaryInstruction('and')); - } -}; - -ParserState.prototype.parseComparison = function (instr) { - this.parseAddSub(instr); - while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) { - var op = this.current; - this.parseAddSub(instr); - instr.push(binaryInstruction(op.value)); - } -}; - -ParserState.prototype.parseAddSub = function (instr) { - this.parseTerm(instr); - while (this.accept(TOP, ['+', '-', '||'])) { - var op = this.current; - this.parseTerm(instr); - instr.push(binaryInstruction(op.value)); - } -}; - -ParserState.prototype.parseTerm = function (instr) { - this.parseFactor(instr); - while (this.accept(TOP, ['*', '/', '%'])) { - var op = this.current; - this.parseFactor(instr); - instr.push(binaryInstruction(op.value)); - } -}; - -ParserState.prototype.parseFactor = function (instr) { - var unaryOps = this.tokens.unaryOps; - function isPrefixOperator(token) { - return token.value in unaryOps; - } - - this.save(); - if (this.accept(TOP, isPrefixOperator)) { - if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) { - this.restore(); - this.parseExponential(instr); - } else { - var op = this.current; - this.parseFactor(instr); - instr.push(unaryInstruction(op.value)); - } - } else { - this.parseExponential(instr); - } -}; - -ParserState.prototype.parseExponential = function (instr) { - this.parsePostfixExpression(instr); - while (this.accept(TOP, '^')) { - this.parseFactor(instr); - instr.push(binaryInstruction('^')); - } -}; - -ParserState.prototype.parsePostfixExpression = function (instr) { - this.parseFunctionCall(instr); - while (this.accept(TOP, '!')) { - instr.push(unaryInstruction('!')); - } -}; - -ParserState.prototype.parseFunctionCall = function (instr) { - var unaryOps = this.tokens.unaryOps; - function isPrefixOperator(token) { - return token.value in unaryOps; - } - - if (this.accept(TOP, isPrefixOperator)) { - var op = this.current; - this.parseAtom(instr); - instr.push(unaryInstruction(op.value)); - } else { - this.parseMemberExpression(instr); - while (this.accept(TPAREN, '(')) { - if (this.accept(TPAREN, ')')) { - instr.push(new Instruction(IFUNCALL, 0)); - } else { - var argCount = this.parseArgumentList(instr); - instr.push(new Instruction(IFUNCALL, argCount)); - } - } - } -}; - -ParserState.prototype.parseArgumentList = function (instr) { - var argCount = 0; - - while (!this.accept(TPAREN, ')')) { - this.parseExpression(instr); - ++argCount; - while (this.accept(TCOMMA)) { - this.parseExpression(instr); - ++argCount; - } - } - - return argCount; -}; - -ParserState.prototype.parseMemberExpression = function (instr) { - this.parseAtom(instr); - while (this.accept(TOP, '.')) { - this.expect(TNAME); - instr.push(new Instruction(IMEMBER, this.current.value)); - } -}; - -function Parser() { - this.unaryOps = { - sin: Math.sin, - cos: Math.cos, - tan: Math.tan, - asin: Math.asin, - acos: Math.acos, - atan: Math.atan, - sinh: Math.sinh || sinh, - cosh: Math.cosh || cosh, - tanh: Math.tanh || tanh, - asinh: Math.asinh || asinh, - acosh: Math.acosh || acosh, - atanh: Math.atanh || atanh, - sqrt: Math.sqrt, - log: Math.log, - ln: Math.log, - lg: Math.log10 || log10, - log10: Math.log10 || log10, - abs: Math.abs, - ceil: Math.ceil, - floor: Math.floor, - round: Math.round, - trunc: Math.trunc || trunc, - '-': neg, - '+': Number, - exp: Math.exp, - not: not, - length: stringLength, - '!': factorial - }; - - this.binaryOps = { - '+': add, - '-': sub, - '*': mul, - '/': div, - '%': mod, - '^': Math.pow, - '||': concat, - '==': equal, - '!=': notEqual, - '>': greaterThan, - '<': lessThan, - '>=': greaterThanEqual, - '<=': lessThanEqual, - and: andOperator, - or: orOperator - }; - - this.ternaryOps = { - '?': condition - }; - - this.functions = { - random: random, - fac: factorial, - min: Math.min, - max: Math.max, - hypot: Math.hypot || hypot, - pyt: Math.hypot || hypot, // backward compat - pow: Math.pow, - atan2: Math.atan2, - 'if': condition, - gamma: gamma - }; - - this.consts = { - E: Math.E, - PI: Math.PI, - 'true': true, - 'false': false - }; -} - -Parser.parse = function (expr) { - return new Parser().parse(expr); -}; - -Parser.evaluate = function (expr, variables) { - return Parser.parse(expr).evaluate(variables); -}; - -Parser.prototype = { - parse: function (expr) { - var instr = []; - var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts)); - parserState.parseExpression(instr); - parserState.expect(TEOF, 'EOF'); - - return new Expression(instr, this); - }, - - evaluate: function (expr, variables) { - return this.parse(expr).evaluate(variables); - } -}; - -var parser = { - Parser: Parser, - Expression: Expression -}; - -return parser; - -}))); -}); - -//import mathjs from 'mathjs'; - -//var Parser = require('expr-eval').Parser; - -class ImageBlendExpressionFilter extends ImageToImageFilter { - - constructor(){ - super(); - - - var parser = new bundle.Parser(); - var expr = parser.parse('2 * x + 1'); - console.log(expr.evaluate({ x: 3 })); // 7 - - // or - //Parser.evaluate('6 * x', { x: 7 }) // 42 - - } - - - -} /* END of class ImageBlendExpressionFilter */ +} /* END class ForEachPixelImageFilter */ /* * Author Jonathan Lurie - http://me.jonahanlurie.fr @@ -2394,10 +1151,14 @@ class SpectralScaleImageFilter extends ImageToImageFilter { } /* END class SpectralScaleImageFilter */ +//export { SpatialConvolutionFilter } from './filter/SpatialConvolutionFilter.js'; +//export { ImageBlendExpressionFilter } from './filter/ImageBlendExpressionFilter.js'; + + // filters - processing of Image3D exports.PixpipeObject = PixpipeObject; -exports.Filter = Filter; +exports.Filter = Filter$1; exports.Image2D = Image2D; exports.ImageToImageFilter = ImageToImageFilter; exports.PixelWiseImageFilter = PixelWiseImageFilter; @@ -2405,8 +1166,6 @@ exports.CanvasImageWriter = CanvasImageWriter; exports.UrlImageReader = UrlImageReader; exports.FileImageReader = FileImageReader; exports.ForEachPixelImageFilter = ForEachPixelImageFilter; -exports.SpatialConvolutionFilter = SpatialConvolutionFilter; -exports.ImageBlendExpressionFilter = ImageBlendExpressionFilter; exports.SpectralScaleImageFilter = SpectralScaleImageFilter; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/dist/pixpipe.js.map b/dist/pixpipe.js.map index 81a3808..c3381da 100644 --- a/dist/pixpipe.js.map +++ b/dist/pixpipe.js.map @@ -1 +1 @@ -{"version":3,"file":"pixpipe.js","sources":["../src/core/PixpipeObject.js","../src/core/Filter.js","../src/core/Image2D.js","../src/core/ImageToImageFilter.js","../src/core/PixelWiseImageFilter.js","../src/io/CanvasImageWriter.js","../src/io/UrlImageReader.js","../src/io/FileImageReader.js","../src/filter/ForEachPixelImageFilter.js","../src/filter/SpatialConvolutionFilter.js","../node_modules/expr-eval/dist/bundle.js","../src/filter/ImageBlendExpressionFilter.js","../src/filter/SpectralScaleImageFilter.js","../src/pixpipe.js"],"sourcesContent":["/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n/**\n* PixpipeObject is the base object of all. It creates a uuid and has few\n* generic attributes like type, name and description. Not all these attributes\n* always useful;\n*/\nclass PixpipeObject {\n\n constructor(){\n // unique identifier\n this._uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n\n // Metadata can be anything, a name, an ID, a description, a DOM element.\n // everything that is not an input but rather a setting\n this._metadata = {};\n\n this._type = PixpipeObject.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"GENERIC\";\n }\n\n\n /**\n * Compare a give type to the type of this object.\n * @param {String} t - a type, better to call the static method of each object, like Image.TYPE()\n */\n isOfType( t ){\n return !(this._type.localeCompare(t))\n }\n\n\n /**\n * Get type of object.\n * @return {String} the type\n */\n getType(){\n this._type;\n }\n\n /**\n * Return a copy of the uuid\n */\n get uuid(){\n return this._uuid.slice();\n }\n\n\n /**\n * Set a metadata using a pair of key and value.\n * @param {String} key - the ID of the metadata\n * @param {Object} value - can be a string, Number or Object\n */\n setMetadata( key, value ){\n if(typeof key === 'string' || key instanceof String){\n this._metadata[ key ] = value;\n }else{\n console.warn(\"The given key must be a String Object.\");\n }\n\n }\n\n\n /**\n * Retrieve a metadata using a key.\n * @param {String} key - the ID of the metadata\n * @return {Object} the metadata object - or null if non existent\n */\n getMetadata( key ){\n if( key in this._metadata){\n return this._metadata[ key ];\n }else{\n console.warn(\"The metadata with key: \" + key + \" doe not exist.\");\n return null;\n }\n }\n\n\n\n\n}\n\nexport { PixpipeObject }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* Filter is a base class and must be inherited to be used properly.\n* A filter takes one or more Image instances as input and returns one or more\n* instances of images as output.\n* Every filter has a addInput(), a getOutput() and a update() methods.\n* Every input and output can be arranged by category, so that internaly, a filter\n* can use and output diferent kind of data.\n*/\nclass Filter extends PixpipeObject {\n\n constructor(){\n super();\n this._type = Filter.TYPE();\n\n // a bunch of event to be defined. Empty by default.\n this._events = {};\n\n this._inputValidator = {};\n\n this._input = {\n \"0\": []\n };\n\n this._output = {\n \"0\" : []\n };\n\n }\n\n\n /**\n * Hardcode the datatype\n */\n static TYPE(){\n return \"FILTER\";\n }\n\n /**\n * Set an input, potentially associated to a category.\n * @param {Image2D} inputObject - most likely an instance of Image2D but can also be HTML5 File or Image3D\n * @param {Number} category - in case we want to get data from diferent categories.\n */\n addInput( inputObject, category=0){\n\n if(category < 0 ){\n console.warn(\"A input cannot be of category inferior to zero\");\n return;\n }\n\n // the category may not exist, we create it\n if( !(category in this._input) ){\n this._input[category] = null;\n }\n\n this._input[category] = inputObject ;\n }\n\n\n /**\n * Return outputs from a category (default category: 0)\n * @param {Number} category - a category of output.\n * @return {Object} or null if no output can be returned.\n */\n getOutput( category=0 ){\n if( category in this._output ){\n return this._output[ category ];\n }else{\n return null;\n }\n }\n\n\n /**\n * [PRIVATE]\n * should noly be used by the class that inherit Filter.\n * This is just a wraper to not access the raw _output object.\n * @param {Image2D} imageObject - instance of an image\n * @param {Number} category - in case we want to get data from different categories.\n */\n _setOutput( data, category=0 ){\n // the category may not exist, we create it\n if( !(category in this._output) ){\n this._output[category] = null;\n }\n\n this._output[category] = data ;\n }\n\n\n /**\n * [PRIVATE]\n * should noly be used by the class that inherit Filter.\n * @param {Number} category - in case we want to get data from different categories.\n * @return {Object} or null if no input can be returned\n */\n _getInput( category=0 ){\n if( category in this._input ){\n return this._input[ category ];\n }else{\n return null;\n }\n }\n\n\n /**\n * Validate the input data using a model defined in _inputValidator.\n * Every class that implement Filter must implement their own _inputValidator.\n * Not mandatory to use, still a good practice.\n */\n hasValidInput(){\n var that = this;\n var inputCategories = Object.keys( this._inputValidator );\n var valid = true;\n\n inputCategories.forEach( function(key){\n valid = valid && that._getInput( key ).isOfType( that._inputValidator[ key ] )\n });\n\n if(!valid){\n console.warn(\"The input is not valid.\");\n }\n\n return valid;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._inputValidator );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * MUST be implemented by the class that inherit this.\n * Launch the process.\n */\n update(){\n console.error(\"The update() method has not been written, this filter is not valid.\");\n }\n\n\n /**\n * Defines a callback. By defautl, no callback is called.\n */\n on(eventId, callback){\n this._events[ eventId ] = callback;\n }\n\n\n} /* END class Filter */\n\nexport { Filter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* Image2D class is one of the few base element of Pixpipejs.\n* It is always considered to be 4 channels (RGBA) and stored as a Float32Array\n* typed array.\n*/\nclass Image2D extends PixpipeObject{\n\n\n /**\n * Constructor of an Image2D instance. If no options, no array is allocated.\n * @param {Object} options - if present, must have options.width, options.height. Also options.color = [r, g, b, a] is possible but not mandatory, this sets the default color.\n */\n constructor( options=null ){\n super();\n this._type = Image2D.TYPE();\n\n // a rgba stored in a Float32Array (typed array)\n this._data = null;\n this._width = -1;\n this._height = -1;\n this._componentsPerPixel = 4; // RGBA, by default\n\n // allocate the array if size is specified\n if(options && \"width\" in options && \"height\" in options){\n\n if( options.width > 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","//import mathjs from 'mathjs';\n\nimport Parser from 'expr-eval'\n//var Parser = require('expr-eval').Parser;\n\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n\n\n var parser = new Parser.Parser();\n var expr = parser.parse('2 * x + 1');\n console.log(expr.evaluate({ x: 3 })); // 7\n\n // or\n //Parser.evaluate('6 * x', { x: 7 }) // 42\n\n }\n\n\n\n} /* END of class ImageBlendExpressionFilter */\n\n\nexport { ImageBlendExpressionFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n/**\n* Multiply an image by the other, like a scaling function.\n* The image requires two inputs named \"0\" and \"1\".\n* Simply use `addInput( myImg1, \"0\" )`\n* and `addInput( myImg2, \"1\" )`. The input \"0\" can have 1 or more bands while\n* the input \"1\" can have only one band since the same scale is apply to each band.\n*\n* usage: examples/forEachPixelGadient.html\n*/\nclass SpectralScaleImageFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n\n // both input are images.\n this._inputValidator[ 0 ] = Image2D.TYPE();\n this._inputValidator[ 1 ] = Image2D.TYPE();\n }\n\n\n /**\n * Run the filter\n */\n update(){\n // filter must have valid input of the same size\n if( !this.hasSameSizeInput() || !this.hasValidInput()){\n return;\n }\n\n var dataImg0 = this._getInput(0);\n var dataImg1 = this._getInput(1);\n\n // the input \"1\" (aka. the scaling data) must be single band\n if( dataImg1.getComponentsPerPixel() != 1 ){\n console.warn(\"The scaling image must have one single band.\");\n return;\n }\n\n var nbOfPixels = dataImg0.getWidth() * dataImg0.getHeight();\n var ncpp = dataImg0.getComponentsPerPixel();\n\n var data0 = dataImg0.getDataCopy();\n var data1 = dataImg1.getData();\n\n // scale the spectral info\n for(var p=0; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n /**\n * Associate a Pipeline instance to this image. Not supposed to be called manually\n * because it is automatically called-back when adding a filter to a pipeline.\n * @param {Pipeline} p - Pipeline object.\n */\n setPipeline( p ){\n // only if not already set.\n if(!this._pipeline){\n this._pipeline = p;\n }\n }\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p do NOT update the pipeline at every modif because if we change a lot + // of pixel values... (wait to call update() on the pipeline.) + + } /* END of class Image2D */ export { Image2D } diff --git a/src/core/Pipeline.js b/src/core/Pipeline.js new file mode 100644 index 0000000..102d69f --- /dev/null +++ b/src/core/Pipeline.js @@ -0,0 +1,72 @@ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +import { PixpipeObject } from './PixpipeObject.js'; + +/** +* A Pipeline instance handles a cascade of filter when an input dataset is updated. +* Using a Pipeline object is not mandatory and can be replaced by calling `update()`. +*/ +class Pipeline extends PixpipeObject { + + constructor(){ + super(); + this._type = Filter.TYPE(); + + // a list of filters + this._filters = []; + + this._isUpdated = false; + } + + + /** + * Hardcode the datatype + */ + static TYPE(){ + return "PIPELINE"; + } + + + /** + * Add a filter to the pipeline. + * + */ + addFilter( f ){ + this._filters.push( f ); + } + + + /** + * + */ + update(forceAll = false){ + + if( forceAll ){ + this._forceUpdateAll(); + }else{ + + } + + this._isUpdated = true; + } + + + /** + * Run an update on every single filter + */ + _forceUpdateAll(){ + for(var f=0; f Date: Wed, 15 Mar 2017 11:18:47 -0400 Subject: [PATCH 6/9] ADD new _setOutput logic with singleton --- dist/pixpipe.js | 203 +++++++++++++----- dist/pixpipe.js.map | 2 +- examples/css/style.css | 4 +- ...Gadient.html => forEachPixelGradient.html} | 2 +- src/core/Filter.js | 43 ++-- src/core/Image2D.js | 17 +- src/core/PipelineElement.js | 45 ++++ src/core/PixpipeObject.js | 4 +- src/filter/ForEachPixelImageFilter.js | 20 +- src/filter/SpectralScaleImageFilter.js | 11 +- src/io/UrlImageReader.js | 3 +- src/pixpipe.js | 2 + 12 files changed, 232 insertions(+), 124 deletions(-) rename examples/{forEachPixelGadient.html => forEachPixelGradient.html} (98%) create mode 100644 src/core/PipelineElement.js diff --git a/dist/pixpipe.js b/dist/pixpipe.js index 3c37df6..bbb562c 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -11,6 +11,7 @@ * Lab MCIN - Montreal Neurological Institute */ + /** * PixpipeObject is the base object of all. It creates a uuid and has few * generic attributes like type, name and description. Not all these attributes @@ -29,6 +30,8 @@ class PixpipeObject { // everything that is not an input but rather a setting this._metadata = {}; + this._pipeline = null; + this._type = PixpipeObject.TYPE(); } @@ -98,7 +101,6 @@ class PixpipeObject { - } /* @@ -108,6 +110,109 @@ class PixpipeObject { * Lab MCIN - Montreal Neurological Institute */ +class PipelineElement extends PixpipeObject { + + constructor(){ + super(); + + this._pipeline = null; + this._type = PipelineElement.TYPE(); + } + + + /** + * Acces it like a static attribute. + * Must be overloaded. + */ + static TYPE(){ + return "PIPELINE_ELEMENT"; + } + + + /** + * Associate a Pipeline instance to this image. Not supposed to be called manually + * because it is automatically called-back when adding a filter to a pipeline. + * @param {Pipeline} p - Pipeline object. + */ + setPipeline( p ){ + // only if not already set. + if(!this._pipeline){ + this._pipeline = p; + } + } + + +} /* ENDS class PipelineElement */ + +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +/** +* A Pipeline instance handles a cascade of filter when an input dataset is updated. +* Using a Pipeline object is not mandatory and can be replaced by calling `update()`. +*/ +class Pipeline extends PixpipeObject { + + constructor(){ + super(); + this._type = Filter.TYPE(); + + // a list of filters + this._filters = []; + + this._isUpdated = false; + } + + + /** + * Hardcode the datatype + */ + static TYPE(){ + return "PIPELINE"; + } + + + /** + * Add a filter to the pipeline. + * + */ + addFilter( f ){ + this._filters.push( f ); + } + + + /** + * + */ + update(forceAll = false){ + + if( forceAll ){ + this._forceUpdateAll(); + }else{ + + } + + this._isUpdated = true; + } + + + /** + * Run an update on every single filter + */ + _forceUpdateAll(){ + for(var f=0; f do NOT update the pipeline at every modif because if we change a lot @@ -882,9 +976,9 @@ class UrlImageReader extends Filter$1 { try{ var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = new Image2D(); + var img2D = that._setOutput( Image2D ); img2D.setData( dataArray, img.width, img.height); - that._setOutput( img2D ); + if("imageLoaded" in that._events){ that._events.imageLoaded( that ); @@ -1054,24 +1148,10 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { this._forEachPixelOfSuch(firstPixel, lastPixel, increment ); - // TODO : find a way NOT to replace the ouput pointer so that the following - // filter can use the same object when refreshed by the pipeline - /* - // maybe using this kind of thing: - var anObjType = Image2D; - var im = new anObjType(); - console.log(im); - */ + // 1 - init the output + var outputImg = this._setOutput( Image2D ); - /* - // building the output - var img2D = new Image2D(); - img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight(), inputImage2D.getComponentsPerPixel()); - this._setOutput( img2D ); - */ - - var outputImg = this._setOutput2( Image2D ); - console.log(outputImg); + // 2 - tune the output outputImg.setData( this._inputBuffer, inputImage2D.getWidth(), @@ -1142,10 +1222,13 @@ class SpectralScaleImageFilter extends ImageToImageFilter { } // building the output - var img2D = new Image2D(); - img2D.setData( data0, dataImg0.getWidth(), dataImg0.getHeight()); - this._setOutput( img2D ); - + var img2D = this._setOutput( Image2D ); + img2D.setData( + data0, + dataImg0.getWidth(), + dataImg0.getHeight() + ); + } @@ -1158,6 +1241,8 @@ class SpectralScaleImageFilter extends ImageToImageFilter { // filters - processing of Image3D exports.PixpipeObject = PixpipeObject; +exports.PipelineElement = PipelineElement; +exports.Pipeline = Pipeline; exports.Filter = Filter$1; exports.Image2D = Image2D; exports.ImageToImageFilter = ImageToImageFilter; diff --git a/dist/pixpipe.js.map b/dist/pixpipe.js.map index c3381da..b16d93f 100644 --- a/dist/pixpipe.js.map +++ b/dist/pixpipe.js.map @@ -1 +1 @@ -{"version":3,"file":"pixpipe.js","sources":["../src/core/PixpipeObject.js","../src/core/Pipeline.js","../src/core/Filter.js","../src/core/Image2D.js","../src/core/ImageToImageFilter.js","../src/core/PixelWiseImageFilter.js","../src/io/CanvasImageWriter.js","../src/io/UrlImageReader.js","../src/io/FileImageReader.js","../src/filter/ForEachPixelImageFilter.js","../src/filter/SpectralScaleImageFilter.js","../src/pixpipe.js"],"sourcesContent":["/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n/**\n* PixpipeObject is the base object of all. It creates a uuid and has few\n* generic attributes like type, name and description. Not all these attributes\n* always useful;\n*/\nclass PixpipeObject {\n\n constructor(){\n // unique identifier\n this._uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n\n // Metadata can be anything, a name, an ID, a description, a DOM element.\n // everything that is not an input but rather a setting\n this._metadata = {};\n\n this._type = PixpipeObject.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"GENERIC\";\n }\n\n\n /**\n * Compare a give type to the type of this object.\n * @param {String} t - a type, better to call the static method of each object, like Image.TYPE()\n */\n isOfType( t ){\n return !(this._type.localeCompare(t))\n }\n\n\n /**\n * Get type of object.\n * @return {String} the type\n */\n getType(){\n this._type;\n }\n\n /**\n * Return a copy of the uuid\n */\n get uuid(){\n return this._uuid.slice();\n }\n\n\n /**\n * Set a metadata using a pair of key and value.\n * @param {String} key - the ID of the metadata\n * @param {Object} value - can be a string, Number or Object\n */\n setMetadata( key, value ){\n if(typeof key === 'string' || key instanceof String){\n this._metadata[ key ] = value;\n }else{\n console.warn(\"The given key must be a String Object.\");\n }\n\n }\n\n\n /**\n * Retrieve a metadata using a key.\n * @param {String} key - the ID of the metadata\n * @return {Object} the metadata object - or null if non existent\n */\n getMetadata( key ){\n if( key in this._metadata){\n return this._metadata[ key ];\n }else{\n console.warn(\"The metadata with key: \" + key + \" doe not exist.\");\n return null;\n }\n }\n\n\n\n\n}\n\nexport { PixpipeObject }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* A Pipeline instance handles a cascade of filter when an input dataset is updated.\n* Using a Pipeline object is not mandatory and can be replaced by calling `update()`.\n*/\nclass Pipeline extends PixpipeObject {\n\n constructor(){\n super();\n this._type = Filter.TYPE();\n\n // a list of filters\n this._filters = [];\n\n this._isUpdated = false;\n }\n\n\n /**\n * Hardcode the datatype\n */\n static TYPE(){\n return \"PIPELINE\";\n }\n\n\n /**\n * Add a filter to the pipeline.\n *\n */\n addFilter( f ){\n this._filters.push( f );\n }\n\n\n /**\n *\n */\n update(forceAll = false){\n\n if( forceAll ){\n this._forceUpdateAll();\n }else{\n\n }\n\n this._isUpdated = true;\n }\n\n\n /**\n * Run an update on every single filter\n */\n _forceUpdateAll(){\n for(var f=0; f 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n /**\n * Associate a Pipeline instance to this image. Not supposed to be called manually\n * because it is automatically called-back when adding a filter to a pipeline.\n * @param {Pipeline} p - Pipeline object.\n */\n setPipeline( p ){\n // only if not already set.\n if(!this._pipeline){\n this._pipeline = p;\n }\n }\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p - FroEqch pixel, gradient + For each pixel gradient diff --git a/src/core/Filter.js b/src/core/Filter.js index 50512fd..7ea8817 100644 --- a/src/core/Filter.js +++ b/src/core/Filter.js @@ -5,8 +5,8 @@ * Lab MCIN - Montreal Neurological Institute */ -import { PixpipeObject } from './PixpipeObject.js'; -import { Pipeline } from './Pipeline.js'; +import { PipelineElement } from './PipelineElement.js'; +//import { Pipeline } from './Pipeline.js'; /** @@ -17,7 +17,7 @@ import { Pipeline } from './Pipeline.js'; * Every input and output can be arranged by category, so that internaly, a filter * can use and output diferent kind of data. */ -class Filter extends PixpipeObject { +class Filter extends PipelineElement { constructor(){ super(); @@ -37,7 +37,7 @@ class Filter extends PixpipeObject { }; // pipeline associated with this filter. Not mandatory. - this._pipeline = null; + //this._pipeline = null; } @@ -91,25 +91,15 @@ class Filter extends PixpipeObject { /** * [PRIVATE] - * should noly be used by the class that inherit Filter. - * This is just a wraper to not access the raw _output object. - * @param {Image2D} imageObject - instance of an image + * Internal way to setup an output for this filter. Acts like a singleton in a sens + * that if an output of a given category was already Initialized, it returns it. + * If no input was Initialized, it creates one. Then we are sure the pointer of the + * output remain the same and does not break the pipeline. + * @param {type} dataType - type of object, i.e. Image2D (this is NOT a String!) * @param {Number} category - in case we want to get data from different categories. + * @returns {Object} of given type. */ - _setOutput( data, category=0 ){ - // the category may not exist, we create it - if( !(category in this._output) ){ - this._output[category] = null; - } - - this._output[category] = data ; - } - - - /** - * Workaround to - */ - _setOutput2( dataType, category=0 ){ + _setOutput( dataType, category=0 ){ var outputObject = null; // the category may not exist, we create it @@ -121,8 +111,6 @@ class Filter extends PixpipeObject { outputObject = this._output[category]; } - - return outputObject; } @@ -220,6 +208,7 @@ class Filter extends PixpipeObject { * @param {Pipeline} p - Pipeline object. */ setPipeline( p ){ + /* // only if not already set. if(!this._pipeline){ this._pipeline = p; @@ -232,6 +221,14 @@ class Filter extends PixpipeObject { }); } + */ + super.setPipeline( p ); + + var inputCategories = Object.keys( this._inputValidator ); + inputCategories.forEach( function(key){ + widths.push( that._getInput( key ).setPipeline( p ) ); + }); + } diff --git a/src/core/Image2D.js b/src/core/Image2D.js index a81b024..b0e0a64 100644 --- a/src/core/Image2D.js +++ b/src/core/Image2D.js @@ -5,15 +5,14 @@ * Lab MCIN - Montreal Neurological Institute */ -import { PixpipeObject } from './PixpipeObject.js'; -import { Pipeline } from './Pipeline.js'; +import { PipelineElement } from './PipelineElement.js'; /** * Image2D class is one of the few base element of Pixpipejs. * It is always considered to be 4 channels (RGBA) and stored as a Float32Array * typed array. */ -class Image2D extends PixpipeObject{ +class Image2D extends PipelineElement{ /** @@ -218,17 +217,7 @@ class Image2D extends PixpipeObject{ } - /** - * Associate a Pipeline instance to this image. Not supposed to be called manually - * because it is automatically called-back when adding a filter to a pipeline. - * @param {Pipeline} p - Pipeline object. - */ - setPipeline( p ){ - // only if not already set. - if(!this._pipeline){ - this._pipeline = p; - } - } + // TODO: warn the pipeline if metadata changed or pixel value changed // --> do NOT update the pipeline at every modif because if we change a lot diff --git a/src/core/PipelineElement.js b/src/core/PipelineElement.js new file mode 100644 index 0000000..96cdf22 --- /dev/null +++ b/src/core/PipelineElement.js @@ -0,0 +1,45 @@ +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + +import { PixpipeObject } from './PixpipeObject.js'; + + +class PipelineElement extends PixpipeObject { + + constructor(){ + super(); + + this._pipeline = null; + this._type = PipelineElement.TYPE(); + } + + + /** + * Acces it like a static attribute. + * Must be overloaded. + */ + static TYPE(){ + return "PIPELINE_ELEMENT"; + } + + + /** + * Associate a Pipeline instance to this image. Not supposed to be called manually + * because it is automatically called-back when adding a filter to a pipeline. + * @param {Pipeline} p - Pipeline object. + */ + setPipeline( p ){ + // only if not already set. + if(!this._pipeline){ + this._pipeline = p; + } + } + + +} /* ENDS class PipelineElement */ + +export { PipelineElement } diff --git a/src/core/PixpipeObject.js b/src/core/PixpipeObject.js index 8510e35..b0394cb 100644 --- a/src/core/PixpipeObject.js +++ b/src/core/PixpipeObject.js @@ -5,6 +5,7 @@ * Lab MCIN - Montreal Neurological Institute */ + /** * PixpipeObject is the base object of all. It creates a uuid and has few * generic attributes like type, name and description. Not all these attributes @@ -23,6 +24,8 @@ class PixpipeObject { // everything that is not an input but rather a setting this._metadata = {}; + this._pipeline = null; + this._type = PixpipeObject.TYPE(); } @@ -92,7 +95,6 @@ class PixpipeObject { - } export { PixpipeObject } diff --git a/src/filter/ForEachPixelImageFilter.js b/src/filter/ForEachPixelImageFilter.js index 68cf2f6..1a02874 100644 --- a/src/filter/ForEachPixelImageFilter.js +++ b/src/filter/ForEachPixelImageFilter.js @@ -58,24 +58,10 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { this._forEachPixelOfSuch(firstPixel, lastPixel, increment ); - // TODO : find a way NOT to replace the ouput pointer so that the following - // filter can use the same object when refreshed by the pipeline - /* - // maybe using this kind of thing: - var anObjType = Image2D; - var im = new anObjType(); - console.log(im); - */ + // 1 - init the output + var outputImg = this._setOutput( Image2D ); - /* - // building the output - var img2D = new Image2D(); - img2D.setData( this._inputBuffer, inputImage2D.getWidth(), inputImage2D.getHeight(), inputImage2D.getComponentsPerPixel()); - this._setOutput( img2D ); - */ - - var outputImg = this._setOutput2( Image2D ); - console.log(outputImg); + // 2 - tune the output outputImg.setData( this._inputBuffer, inputImage2D.getWidth(), diff --git a/src/filter/SpectralScaleImageFilter.js b/src/filter/SpectralScaleImageFilter.js index 2e7c95e..f3a7418 100644 --- a/src/filter/SpectralScaleImageFilter.js +++ b/src/filter/SpectralScaleImageFilter.js @@ -60,10 +60,13 @@ class SpectralScaleImageFilter extends ImageToImageFilter { } // building the output - var img2D = new Image2D(); - img2D.setData( data0, dataImg0.getWidth(), dataImg0.getHeight()); - this._setOutput( img2D ); - + var img2D = this._setOutput( Image2D ); + img2D.setData( + data0, + dataImg0.getWidth(), + dataImg0.getHeight() + ); + } diff --git a/src/io/UrlImageReader.js b/src/io/UrlImageReader.js index f0cfec1..9893850 100644 --- a/src/io/UrlImageReader.js +++ b/src/io/UrlImageReader.js @@ -56,9 +56,8 @@ class UrlImageReader extends Filter { try{ var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = new Image2D(); + var img2D = that._setOutput( Image2D ); img2D.setData( dataArray, img.width, img.height); - that._setOutput( img2D ); if("imageLoaded" in that._events){ that._events.imageLoaded( that ) diff --git a/src/pixpipe.js b/src/pixpipe.js index 66b0565..480be4b 100644 --- a/src/pixpipe.js +++ b/src/pixpipe.js @@ -4,6 +4,8 @@ // core classes export { PixpipeObject } from './core/PixpipeObject.js'; +export { PipelineElement } from './core/PipelineElement.js'; +export { Pipeline } from './core/Pipeline.js'; export { Filter } from './core/Filter.js'; export { Image2D } from './core/Image2D.js'; export { ImageToImageFilter } from './core/ImageToImageFilter.js'; From 7b5c431551401e37314710d5e41ab3ced7390d99 Mon Sep 17 00:00:00 2001 From: Jonathan Lurie Date: Wed, 15 Mar 2017 17:23:38 -0400 Subject: [PATCH 7/9] ADD the blending filter --- dist/pixpipe.js | 1630 ++++++++++++++++++- dist/pixpipe.js.map | 2 +- examples/forEachPixelGradientBlend.html | 103 ++ examples/forEachPixelGradient_pipeline.html | 110 ++ src/core/Filter.js | 95 +- src/core/ImageToImageFilter.js | 59 + src/core/Pipeline.js | 21 +- src/core/PixpipeObject.js | 9 + src/filter/ForEachPixelImageFilter.js | 4 +- src/filter/ImageBlendExpressionFilter.js | 70 +- src/filter/SpectralScaleImageFilter.js | 6 +- src/io/CanvasImageWriter.js | 1 + src/io/UrlImageReader.js | 5 +- src/pixpipe.js | 3 +- 14 files changed, 1995 insertions(+), 123 deletions(-) create mode 100644 examples/forEachPixelGradientBlend.html create mode 100644 examples/forEachPixelGradient_pipeline.html diff --git a/dist/pixpipe.js b/dist/pixpipe.js index bbb562c..3e954d2 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -100,6 +100,15 @@ class PixpipeObject { } + /** + * Check if the metadata with the given key exists. + * @param {String} key - the key to look up in the metadata collection + * @return {Boolean} true if the metadata with the given is present, false if not. + */ + hasMetadata( key ){ + return (key in this._metadata); + } + } @@ -159,7 +168,7 @@ class Pipeline extends PixpipeObject { constructor(){ super(); - this._type = Filter.TYPE(); + this._type = Pipeline.TYPE(); // a list of filters this._filters = []; @@ -182,13 +191,14 @@ class Pipeline extends PixpipeObject { */ addFilter( f ){ this._filters.push( f ); + console.log("Filter " + f.constructor.name + " added to the pipeline."); } /** * */ - update(forceAll = false){ + update(forceAll = true){ if( forceAll ){ this._forceUpdateAll(); @@ -204,13 +214,25 @@ class Pipeline extends PixpipeObject { * Run an update on every single filter */ _forceUpdateAll(){ + console.log(this._filters); for(var f=0; f 1) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = binaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value, n2.value)); + nstack.push(item); + } else if (type === IOP3 && nstack.length > 2) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + if (item.value === '?') { + nstack.push(n1.value ? n2.value : n3.value); + } else { + f = ternaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value)); + nstack.push(item); + } + } else if (type === IOP1 && nstack.length > 0) { + n1 = nstack.pop(); + f = unaryOps[item.value]; + item = new Instruction(INUMBER, f(n1.value)); + nstack.push(item); + } else if (type === IEXPR) { + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values))); + } else if (type === IMEMBER && nstack.length > 0) { + n1 = nstack.pop(); + nstack.push(new Instruction(INUMBER, n1.value[item.value])); + } else { + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + newexpression.push(item); + } + } + while (nstack.length > 0) { + newexpression.push(nstack.shift()); + } + return newexpression; +} + +Expression.prototype.simplify = function (values) { + values = values || {}; + return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser); +}; + +function substitute(tokens, variable, expr) { + var newexpression = []; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === IVAR && item.value === variable) { + for (var j = 0; j < expr.tokens.length; j++) { + var expritem = expr.tokens[j]; + var replitem; + if (expritem.type === IOP1) { + replitem = unaryInstruction(expritem.value); + } else if (expritem.type === IOP2) { + replitem = binaryInstruction(expritem.value); + } else if (expritem.type === IOP3) { + replitem = ternaryInstruction(expritem.value); + } else { + replitem = new Instruction(expritem.type, expritem.value); + } + newexpression.push(replitem); + } + } else if (type === IEXPR) { + newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr))); + } else { + newexpression.push(item); + } + } + return newexpression; +} + +Expression.prototype.substitute = function (variable, expr) { + if (!(expr instanceof Expression)) { + expr = this.parser.parse(String(expr)); + } + + return new Expression(substitute(this.tokens, variable, expr), this.parser); +}; + +function evaluate(tokens, expr, values) { + var nstack = []; + var n1, n2, n3; + var f; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === INUMBER) { + nstack.push(item.value); + } else if (type === IOP2) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = expr.binaryOps[item.value]; + nstack.push(f(n1, n2)); + } else if (type === IOP3) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + if (item.value === '?') { + nstack.push(evaluate(n1 ? n2 : n3, expr, values)); + } else { + f = expr.ternaryOps[item.value]; + nstack.push(f(n1, n2, n3)); + } + } else if (type === IVAR) { + if (item.value in expr.functions) { + nstack.push(expr.functions[item.value]); + } else { + var v = values[item.value]; + if (v !== undefined) { + nstack.push(v); + } else { + throw new Error('undefined variable: ' + item.value); + } + } + } else if (type === IOP1) { + n1 = nstack.pop(); + f = expr.unaryOps[item.value]; + nstack.push(f(n1)); + } else if (type === IFUNCALL) { + var argCount = item.value; + var args = []; + while (argCount-- > 0) { + args.unshift(nstack.pop()); + } + f = nstack.pop(); + if (f.apply && f.call) { + nstack.push(f.apply(undefined, args)); + } else { + throw new Error(f + ' is not a function'); + } + } else if (type === IEXPR) { + nstack.push(item.value); + } else if (type === IMEMBER) { + n1 = nstack.pop(); + nstack.push(n1[item.value]); + } else { + throw new Error('invalid Expression'); + } + } + if (nstack.length > 1) { + throw new Error('invalid Expression (parity)'); + } + return nstack[0]; +} + +Expression.prototype.evaluate = function (values) { + values = values || {}; + return evaluate(this.tokens, this, values); +}; + +function expressionToString(tokens, toJS) { + var nstack = []; + var n1, n2, n3; + var f; + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + var type = item.type; + if (type === INUMBER) { + if (typeof item.value === 'number' && item.value < 0) { + nstack.push('(' + item.value + ')'); + } else { + nstack.push(escapeValue(item.value)); + } + } else if (type === IOP2) { + n2 = nstack.pop(); + n1 = nstack.pop(); + f = item.value; + if (toJS) { + if (f === '^') { + nstack.push('Math.pow(' + n1 + ', ' + n2 + ')'); + } else if (f === 'and') { + nstack.push('(!!' + n1 + ' && !!' + n2 + ')'); + } else if (f === 'or') { + nstack.push('(!!' + n1 + ' || !!' + n2 + ')'); + } else if (f === '||') { + nstack.push('(String(' + n1 + ') + String(' + n2 + '))'); + } else if (f === '==') { + nstack.push('(' + n1 + ' === ' + n2 + ')'); + } else if (f === '!=') { + nstack.push('(' + n1 + ' !== ' + n2 + ')'); + } else { + nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); + } + } else { + nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')'); + } + } else if (type === IOP3) { + n3 = nstack.pop(); + n2 = nstack.pop(); + n1 = nstack.pop(); + f = item.value; + if (f === '?') { + nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')'); + } else { + throw new Error('invalid Expression'); + } + } else if (type === IVAR) { + nstack.push(item.value); + } else if (type === IOP1) { + n1 = nstack.pop(); + f = item.value; + if (f === '-' || f === '+') { + nstack.push('(' + f + n1 + ')'); + } else if (toJS) { + if (f === 'not') { + nstack.push('(' + '!' + n1 + ')'); + } else if (f === '!') { + nstack.push('fac(' + n1 + ')'); + } else { + nstack.push(f + '(' + n1 + ')'); + } + } else if (f === '!') { + nstack.push('(' + n1 + '!)'); + } else { + nstack.push('(' + f + ' ' + n1 + ')'); + } + } else if (type === IFUNCALL) { + var argCount = item.value; + var args = []; + while (argCount-- > 0) { + args.unshift(nstack.pop()); + } + f = nstack.pop(); + nstack.push(f + '(' + args.join(', ') + ')'); + } else if (type === IMEMBER) { + n1 = nstack.pop(); + nstack.push(n1 + '.' + item.value); + } else if (type === IEXPR) { + nstack.push('(' + expressionToString(item.value, toJS) + ')'); + } else { + throw new Error('invalid Expression'); + } + } + if (nstack.length > 1) { + throw new Error('invalid Expression (parity)'); + } + return nstack[0]; +} + +Expression.prototype.toString = function () { + return expressionToString(this.tokens, false); +}; + +function getSymbols(tokens, symbols) { + for (var i = 0, L = tokens.length; i < L; i++) { + var item = tokens[i]; + if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) { + symbols.push(item.value); + } else if (item.type === IEXPR) { + getSymbols(item.value, symbols); + } + } +} + +Expression.prototype.symbols = function () { + var vars = []; + getSymbols(this.tokens, vars); + return vars; +}; + +Expression.prototype.variables = function () { + var vars = []; + getSymbols(this.tokens, vars); + var functions = this.functions; + return vars.filter(function (name) { + return !(name in functions); + }); +}; + +Expression.prototype.toJSFunction = function (param, variables) { + var expr = this; + var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func + return function () { + return f.apply(expr, arguments); + }; +}; + +function add(a, b) { + return Number(a) + Number(b); +} +function sub(a, b) { + return a - b; +} +function mul(a, b) { + return a * b; +} +function div(a, b) { + return a / b; +} +function mod(a, b) { + return a % b; +} +function concat(a, b) { + return '' + a + b; +} +function equal(a, b) { + return a === b; +} +function notEqual(a, b) { + return a !== b; +} +function greaterThan(a, b) { + return a > b; +} +function lessThan(a, b) { + return a < b; +} +function greaterThanEqual(a, b) { + return a >= b; +} +function lessThanEqual(a, b) { + return a <= b; +} +function andOperator(a, b) { + return Boolean(a && b); +} +function orOperator(a, b) { + return Boolean(a || b); +} +function sinh(a) { + return ((Math.exp(a) - Math.exp(-a)) / 2); +} +function cosh(a) { + return ((Math.exp(a) + Math.exp(-a)) / 2); +} +function tanh(a) { + if (a === Infinity) return 1; + if (a === -Infinity) return -1; + return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a)); +} +function asinh(a) { + if (a === -Infinity) return a; + return Math.log(a + Math.sqrt(a * a + 1)); +} +function acosh(a) { + return Math.log(a + Math.sqrt(a * a - 1)); +} +function atanh(a) { + return (Math.log((1 + a) / (1 - a)) / 2); +} +function log10(a) { + return Math.log(a) * Math.LOG10E; +} +function neg(a) { + return -a; +} +function not(a) { + return !a; +} +function trunc(a) { + return a < 0 ? Math.ceil(a) : Math.floor(a); +} +function random(a) { + return Math.random() * (a || 1); +} +function factorial(a) { // a! + return gamma(a + 1); +} +function stringLength(s) { + return String(s).length; +} + +function hypot() { + var sum = 0; + var larg = 0; + for (var i = 0, L = arguments.length; i < L; i++) { + var arg = Math.abs(arguments[i]); + var div; + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else { + sum += arg; + } + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); +} + +function condition(cond, yep, nope) { + return cond ? yep : nope; +} + +function isInteger(value) { + return isFinite(value) && (value === Math.round(value)); +} + +var GAMMA_G = 4.7421875; +var GAMMA_P = [ + 0.99999999999999709182, + 57.156235665862923517, -59.597960355475491248, + 14.136097974741747174, -0.49191381609762019978, + 0.33994649984811888699e-4, + 0.46523628927048575665e-4, -0.98374475304879564677e-4, + 0.15808870322491248884e-3, -0.21026444172410488319e-3, + 0.21743961811521264320e-3, -0.16431810653676389022e-3, + 0.84418223983852743293e-4, -0.26190838401581408670e-4, + 0.36899182659531622704e-5 +]; + +// Gamma function from math.js +function gamma(n) { + var t, x; + + if (isInteger(n)) { + if (n <= 0) { + return isFinite(n) ? Infinity : NaN; + } + + if (n > 171) { + return Infinity; // Will overflow + } + + var value = n - 2; + var res = n - 1; + while (value > 1) { + res *= value; + value--; + } + + if (res === 0) { + res = 1; // 0! is per definition 1 + } + + return res; + } + + if (n < 0.5) { + return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n)); + } + + if (n >= 171.35) { + return Infinity; // will overflow + } + + if (n > 85.0) { // Extended Stirling Approx + var twoN = n * n; + var threeN = twoN * n; + var fourN = threeN * n; + var fiveN = fourN * n; + return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) * + (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - + 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + + 5246819 / (75246796800 * fiveN * n)); + } + + --n; + x = GAMMA_P[0]; + for (var i = 1; i < GAMMA_P.length; ++i) { + x += GAMMA_P[i] / (n + i); + } + + t = n + GAMMA_G + 0.5; + return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x; +} + +var TEOF = 'TEOF'; +var TOP = 'TOP'; +var TNUMBER = 'TNUMBER'; +var TSTRING = 'TSTRING'; +var TPAREN = 'TPAREN'; +var TCOMMA = 'TCOMMA'; +var TNAME = 'TNAME'; + +function Token(type, value, line, column) { + this.type = type; + this.value = value; + this.line = line; + this.column = column; +} + +Token.prototype.toString = function () { + return this.type + ': ' + this.value; +}; + +function TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) { + this.pos = 0; + this.line = 0; + this.column = 0; + this.current = null; + this.unaryOps = unaryOps; + this.binaryOps = binaryOps; + this.ternaryOps = ternaryOps; + this.consts = consts; + this.expression = expression; + this.savedPosition = 0; + this.savedCurrent = null; + this.savedLine = 0; + this.savedColumn = 0; +} + +TokenStream.prototype.newToken = function (type, value, line, column) { + return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column); +}; + +TokenStream.prototype.save = function () { + this.savedPosition = this.pos; + this.savedCurrent = this.current; + this.savedLine = this.line; + this.savedColumn = this.column; +}; + +TokenStream.prototype.restore = function () { + this.pos = this.savedPosition; + this.current = this.savedCurrent; + this.line = this.savedLine; + this.column = this.savedColumn; +}; + +TokenStream.prototype.next = function () { + if (this.pos >= this.expression.length) { + return this.newToken(TEOF, 'EOF'); + } + + if (this.isWhitespace() || this.isComment()) { + return this.next(); + } else if (this.isNumber() || + this.isOperator() || + this.isString() || + this.isParen() || + this.isComma() || + this.isNamedOp() || + this.isConst() || + this.isName()) { + return this.current; + } else { + this.parseError('Unknown character "' + this.expression.charAt(this.pos) + '"'); + } +}; + +TokenStream.prototype.isString = function () { + var r = false; + var startLine = this.line; + var startColumn = this.column; + var startPos = this.pos; + var quote = this.expression.charAt(startPos); + + if (quote === '\'' || quote === '"') { + this.pos++; + this.column++; + var index = this.expression.indexOf(quote, startPos + 1); + while (index >= 0 && this.pos < this.expression.length) { + this.pos = index + 1; + if (this.expression.charAt(index - 1) !== '\\') { + var rawString = this.expression.substring(startPos + 1, index); + this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn); + var newLine = rawString.indexOf('\n'); + var lastNewline = -1; + while (newLine >= 0) { + this.line++; + this.column = 0; + lastNewline = newLine; + newLine = rawString.indexOf('\n', newLine + 1); + } + this.column += rawString.length - lastNewline; + r = true; + break; + } + index = this.expression.indexOf(quote, index + 1); + } + } + return r; +}; + +TokenStream.prototype.isParen = function () { + var char = this.expression.charAt(this.pos); + if (char === '(' || char === ')') { + this.current = this.newToken(TPAREN, char); + this.pos++; + this.column++; + return true; + } + return false; +}; + +TokenStream.prototype.isComma = function () { + var char = this.expression.charAt(this.pos); + if (char === ',') { + this.current = this.newToken(TCOMMA, ','); + this.pos++; + this.column++; + return true; + } + return false; +}; + +TokenStream.prototype.isConst = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + if (str in this.consts) { + this.current = this.newToken(TNUMBER, this.consts[str]); + this.pos += str.length; + this.column += str.length; + return true; + } + } + return false; +}; + +TokenStream.prototype.isNamedOp = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) { + this.current = this.newToken(TOP, str); + this.pos += str.length; + this.column += str.length; + return true; + } + } + return false; +}; + +TokenStream.prototype.isName = function () { + var startPos = this.pos; + var i = startPos; + for (; i < this.expression.length; i++) { + var c = this.expression.charAt(i); + if (c.toUpperCase() === c.toLowerCase()) { + if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) { + break; + } + } + } + if (i > startPos) { + var str = this.expression.substring(startPos, i); + this.current = this.newToken(TNAME, str); + this.pos += str.length; + this.column += str.length; + return true; + } + return false; +}; + +TokenStream.prototype.isWhitespace = function () { + var r = false; + var char = this.expression.charAt(this.pos); + while (char === ' ' || char === '\t' || char === '\n' || char === '\r') { + r = true; + this.pos++; + this.column++; + if (char === '\n') { + this.line++; + this.column = 0; + } + if (this.pos >= this.expression.length) { + break; + } + char = this.expression.charAt(this.pos); + } + return r; +}; + +var codePointPattern = /^[0-9a-f]{4}$/i; + +TokenStream.prototype.unescape = function (v) { + var index = v.indexOf('\\'); + if (index < 0) { + return v; + } + + var buffer = v.substring(0, index); + while (index >= 0) { + var c = v.charAt(++index); + switch (c) { + case '\'': + buffer += '\''; + break; + case '"': + buffer += '"'; + break; + case '\\': + buffer += '\\'; + break; + case '/': + buffer += '/'; + break; + case 'b': + buffer += '\b'; + break; + case 'f': + buffer += '\f'; + break; + case 'n': + buffer += '\n'; + break; + case 'r': + buffer += '\r'; + break; + case 't': + buffer += '\t'; + break; + case 'u': + // interpret the following 4 characters as the hex of the unicode code point + var codePoint = v.substring(index + 1, index + 5); + if (!codePointPattern.test(codePoint)) { + this.parseError('Illegal escape sequence: \\u' + codePoint); + } + buffer += String.fromCharCode(parseInt(codePoint, 16)); + index += 4; + break; + default: + throw this.parseError('Illegal escape sequence: "\\' + c + '"'); + } + ++index; + var backslash = v.indexOf('\\', index); + buffer += v.substring(index, backslash < 0 ? v.length : backslash); + index = backslash; + } + + return buffer; +}; + +TokenStream.prototype.isComment = function () { + var char = this.expression.charAt(this.pos); + if (char === '/' && this.expression.charAt(this.pos + 1) === '*') { + var startPos = this.pos; + this.pos = this.expression.indexOf('*/', this.pos) + 2; + if (this.pos === 1) { + this.pos = this.expression.length; + } + var comment = this.expression.substring(startPos, this.pos); + var newline = comment.indexOf('\n'); + while (newline >= 0) { + this.line++; + this.column = comment.length - newline; + newline = comment.indexOf('\n', newline + 1); + } + return true; + } + return false; +}; + +TokenStream.prototype.isNumber = function () { + var valid = false; + var pos = this.pos; + var startPos = pos; + var resetPos = pos; + var column = this.column; + var resetColumn = column; + var foundDot = false; + var foundDigits = false; + var char; + + while (pos < this.expression.length) { + char = this.expression.charAt(pos); + if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) { + if (char === '.') { + foundDot = true; + } else { + foundDigits = true; + } + pos++; + column++; + valid = foundDigits; + } else { + break; + } + } + + if (valid) { + resetPos = pos; + resetColumn = column; + } + + if (char === 'e' || char === 'E') { + pos++; + column++; + var acceptSign = true; + var validExponent = false; + while (pos < this.expression.length) { + char = this.expression.charAt(pos); + if (acceptSign && (char === '+' || char === '-')) { + acceptSign = false; + } else if (char >= '0' && char <= '9') { + validExponent = true; + acceptSign = false; + } else { + break; + } + pos++; + column++; + } + + if (!validExponent) { + pos = resetPos; + column = resetColumn; + } + } + + if (valid) { + this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos))); + this.pos = pos; + this.column = column; + } else { + this.pos = resetPos; + this.column = resetColumn; + } + return valid; +}; + +TokenStream.prototype.isOperator = function () { + var char = this.expression.charAt(this.pos); + + if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') { + this.current = this.newToken(TOP, char); + } else if (char === '∙' || char === '•') { + this.current = this.newToken(TOP, '*'); + } else if (char === '>') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '>='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, '>'); + } + } else if (char === '<') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '<='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, '<'); + } + } else if (char === '|') { + if (this.expression.charAt(this.pos + 1) === '|') { + this.current = this.newToken(TOP, '||'); + this.pos++; + this.column++; + } else { + return false; + } + } else if (char === '=') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '=='); + this.pos++; + this.column++; + } else { + return false; + } + } else if (char === '!') { + if (this.expression.charAt(this.pos + 1) === '=') { + this.current = this.newToken(TOP, '!='); + this.pos++; + this.column++; + } else { + this.current = this.newToken(TOP, char); + } + } else { + return false; + } + this.pos++; + this.column++; + return true; +}; + +TokenStream.prototype.parseError = function (msg) { + throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg); +}; + +var unaryInstructionCache = {}; +function unaryInstruction(value) { + var inst = unaryInstructionCache[value]; + if (!inst) { + inst = unaryInstructionCache[value] = new Instruction(IOP1, value); + } + return inst; +} + +var binaryInstructionCache = {}; +function binaryInstruction(value) { + var inst = binaryInstructionCache[value]; + if (!inst) { + inst = binaryInstructionCache[value] = new Instruction(IOP2, value); + } + return inst; +} + +var ternaryInstructionCache = {}; +function ternaryInstruction(value) { + var inst = ternaryInstructionCache[value]; + if (!inst) { + inst = ternaryInstructionCache[value] = new Instruction(IOP3, value); + } + return inst; +} + +function ParserState(parser, tokenStream) { + this.parser = parser; + this.tokens = tokenStream; + this.current = null; + this.nextToken = null; + this.next(); + this.savedCurrent = null; + this.savedNextToken = null; +} + +ParserState.prototype.next = function () { + this.current = this.nextToken; + return (this.nextToken = this.tokens.next()); +}; + +ParserState.prototype.tokenMatches = function (token, value) { + if (typeof value === 'undefined') { + return true; + } else if (Array.isArray(value)) { + return indexOf(value, token.value) >= 0; + } else if (typeof value === 'function') { + return value(token); + } else { + return token.value === value; + } +}; + +ParserState.prototype.save = function () { + this.savedCurrent = this.current; + this.savedNextToken = this.nextToken; + this.tokens.save(); +}; + +ParserState.prototype.restore = function () { + this.tokens.restore(); + this.current = this.savedCurrent; + this.nextToken = this.savedNextToken; +}; + +ParserState.prototype.accept = function (type, value) { + if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) { + this.next(); + return true; + } + return false; +}; + +ParserState.prototype.expect = function (type, value) { + if (!this.accept(type, value)) { + throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type)); + } +}; + +ParserState.prototype.parseAtom = function (instr) { + if (this.accept(TNAME)) { + instr.push(new Instruction(IVAR, this.current.value)); + } else if (this.accept(TNUMBER)) { + instr.push(new Instruction(INUMBER, this.current.value)); + } else if (this.accept(TSTRING)) { + instr.push(new Instruction(INUMBER, this.current.value)); + } else if (this.accept(TPAREN, '(')) { + this.parseExpression(instr); + this.expect(TPAREN, ')'); + } else { + throw new Error('unexpected ' + this.nextToken); + } +}; + +ParserState.prototype.parseExpression = function (instr) { + this.parseConditionalExpression(instr); +}; + +ParserState.prototype.parseConditionalExpression = function (instr) { + this.parseOrExpression(instr); + while (this.accept(TOP, '?')) { + var trueBranch = []; + var falseBranch = []; + this.parseConditionalExpression(trueBranch); + this.expect(TOP, ':'); + this.parseConditionalExpression(falseBranch); + instr.push(new Instruction(IEXPR, trueBranch)); + instr.push(new Instruction(IEXPR, falseBranch)); + instr.push(ternaryInstruction('?')); + } +}; + +ParserState.prototype.parseOrExpression = function (instr) { + this.parseAndExpression(instr); + while (this.accept(TOP, 'or')) { + this.parseAndExpression(instr); + instr.push(binaryInstruction('or')); + } +}; + +ParserState.prototype.parseAndExpression = function (instr) { + this.parseComparison(instr); + while (this.accept(TOP, 'and')) { + this.parseComparison(instr); + instr.push(binaryInstruction('and')); + } +}; + +ParserState.prototype.parseComparison = function (instr) { + this.parseAddSub(instr); + while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) { + var op = this.current; + this.parseAddSub(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseAddSub = function (instr) { + this.parseTerm(instr); + while (this.accept(TOP, ['+', '-', '||'])) { + var op = this.current; + this.parseTerm(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseTerm = function (instr) { + this.parseFactor(instr); + while (this.accept(TOP, ['*', '/', '%'])) { + var op = this.current; + this.parseFactor(instr); + instr.push(binaryInstruction(op.value)); + } +}; + +ParserState.prototype.parseFactor = function (instr) { + var unaryOps = this.tokens.unaryOps; + function isPrefixOperator(token) { + return token.value in unaryOps; + } + + this.save(); + if (this.accept(TOP, isPrefixOperator)) { + if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) { + this.restore(); + this.parseExponential(instr); + } else { + var op = this.current; + this.parseFactor(instr); + instr.push(unaryInstruction(op.value)); + } + } else { + this.parseExponential(instr); + } +}; + +ParserState.prototype.parseExponential = function (instr) { + this.parsePostfixExpression(instr); + while (this.accept(TOP, '^')) { + this.parseFactor(instr); + instr.push(binaryInstruction('^')); + } +}; + +ParserState.prototype.parsePostfixExpression = function (instr) { + this.parseFunctionCall(instr); + while (this.accept(TOP, '!')) { + instr.push(unaryInstruction('!')); + } +}; + +ParserState.prototype.parseFunctionCall = function (instr) { + var unaryOps = this.tokens.unaryOps; + function isPrefixOperator(token) { + return token.value in unaryOps; + } + + if (this.accept(TOP, isPrefixOperator)) { + var op = this.current; + this.parseAtom(instr); + instr.push(unaryInstruction(op.value)); + } else { + this.parseMemberExpression(instr); + while (this.accept(TPAREN, '(')) { + if (this.accept(TPAREN, ')')) { + instr.push(new Instruction(IFUNCALL, 0)); + } else { + var argCount = this.parseArgumentList(instr); + instr.push(new Instruction(IFUNCALL, argCount)); + } + } + } +}; + +ParserState.prototype.parseArgumentList = function (instr) { + var argCount = 0; + + while (!this.accept(TPAREN, ')')) { + this.parseExpression(instr); + ++argCount; + while (this.accept(TCOMMA)) { + this.parseExpression(instr); + ++argCount; + } + } + + return argCount; +}; + +ParserState.prototype.parseMemberExpression = function (instr) { + this.parseAtom(instr); + while (this.accept(TOP, '.')) { + this.expect(TNAME); + instr.push(new Instruction(IMEMBER, this.current.value)); + } +}; + +function Parser() { + this.unaryOps = { + sin: Math.sin, + cos: Math.cos, + tan: Math.tan, + asin: Math.asin, + acos: Math.acos, + atan: Math.atan, + sinh: Math.sinh || sinh, + cosh: Math.cosh || cosh, + tanh: Math.tanh || tanh, + asinh: Math.asinh || asinh, + acosh: Math.acosh || acosh, + atanh: Math.atanh || atanh, + sqrt: Math.sqrt, + log: Math.log, + ln: Math.log, + lg: Math.log10 || log10, + log10: Math.log10 || log10, + abs: Math.abs, + ceil: Math.ceil, + floor: Math.floor, + round: Math.round, + trunc: Math.trunc || trunc, + '-': neg, + '+': Number, + exp: Math.exp, + not: not, + length: stringLength, + '!': factorial + }; + + this.binaryOps = { + '+': add, + '-': sub, + '*': mul, + '/': div, + '%': mod, + '^': Math.pow, + '||': concat, + '==': equal, + '!=': notEqual, + '>': greaterThan, + '<': lessThan, + '>=': greaterThanEqual, + '<=': lessThanEqual, + and: andOperator, + or: orOperator + }; + + this.ternaryOps = { + '?': condition + }; + + this.functions = { + random: random, + fac: factorial, + min: Math.min, + max: Math.max, + hypot: Math.hypot || hypot, + pyt: Math.hypot || hypot, // backward compat + pow: Math.pow, + atan2: Math.atan2, + 'if': condition, + gamma: gamma + }; + + this.consts = { + E: Math.E, + PI: Math.PI, + 'true': true, + 'false': false + }; +} + +Parser.parse = function (expr) { + return new Parser().parse(expr); +}; + +Parser.evaluate = function (expr, variables) { + return Parser.parse(expr).evaluate(variables); +}; + +Parser.prototype = { + parse: function (expr) { + var instr = []; + var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts)); + parserState.parseExpression(instr); + parserState.expect(TEOF, 'EOF'); + + return new Expression(instr, this); + }, + + evaluate: function (expr, variables) { + return this.parse(expr).evaluate(variables); + } +}; + +var parser = { + Parser: Parser, + Expression: Expression +}; + +return parser; + +}))); +}); + +/* +* Author Jonathan Lurie - http://me.jonahanlurie.fr +* License MIT +* Link https://github.com/jonathanlurie/pixpipejs +* Lab MCIN - Montreal Neurological Institute +*/ + + +/** +* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as +* we need as long as they have the same size and the same number of components +* per pixel. +* This filter blends images pixel values using a literal expression. This expression +* should be set using `setMetadata( "expresssion", "A * B" )` , where `A` and `B` +* are the categories set in input. +* +*/ +class ImageBlendExpressionFilter extends ImageToImageFilter { + + constructor(){ + super(); + this._addOutput( Image2D ); + + var parser = new bundle.Parser(); + var expr = parser.parse('2 * x + 1'); + console.log(expr.evaluate({ x: 3 })); // 7 + + // or + //Parser.evaluate('6 * x', { x: 7 }) // 42 + + } + + + + update(){ + + // the metadata was not set + if(!this.hasMetadata("expression")){ + console.warn("A filter of type ImageBlendExpressionFilter requires a blending expression.\nUse 'setMetadata(\"expression\", \"...\")' to set it." ); + return; + } + + if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){ + return; + } + + if(!this.getNumberOfInputs()){ + console.warn("A filter of type ImageBlendExpressionFilter requires at least one inpupt."); + return; + } + + var inputCategories = Object.keys( this._input ); + var firstInput = this._getInput( inputCategories[0] ); + var outputBuffer = firstInput.getDataCopy(); + var parser = new bundle.Parser(); + var expr = parser.parse( this.getMetadata("expression") ); + + for(var i=0; i 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n} /* END class ImageToImageFilter */\n\nexport { ImageToImageFilter }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { ImageToImageFilter } from './ImageToImageFilter.js';\n\n/**\n* PixelWiseImageFilter is not supposed to be use as is and is just to\n* be inherited by other filters.\n* This class does not overload the update() method.\n*/\nclass PixelWiseImageFilter extends ImageToImageFilter{\n\n constructor(){\n super();\n }\n\n\n /**\n * [PRIVATE]\n * generic function for painting row, colum or whole\n * @param {Number} firstPixel - Index of the first pixel in 1D array\n * @param {Number} lastPixel - Index of the last pixel in 1D array\n * @param {Number} increment - jump gap from a pixel to another (in a 1D style)\n */\n _forEachPixelOfSuch(firstPixel, lastPixel, increment ){\n // abort if no callback per pixel\n if( ! \"pixel\" in this._events){\n console.warn(\"No function to apply per pixel was specified.\");\n return;\n }\n\n var inputImage2D = this._getInput();\n var inputBuffer = this._inputBuffer;\n var componentPerPixel = inputImage2D.getComponentsPerPixel();\n\n var currentColor = null;\n\n for(var p=firstPixel; p 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._input );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * Check if all the inputs have the same number of component per pixel.\n * @return {Boolean} true if the ncpp are the same for all input image\n */\n hasSameNcppInput(){\n var inputCategories = Object.keys( this._input );\n\n // if no input, return false\n if(!inputCategories.length)\n return false;\n\n var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel();\n\n for(var i=0; i 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\nimport Parser from 'expr-eval'\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n\n/**\n* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as\n* we need as long as they have the same size and the same number of components\n* per pixel.\n* This filter blends images pixel values using a literal expression. This expression\n* should be set using `setMetadata( \"expresssion\", \"A * B\" )` , where `A` and `B`\n* are the categories set in input.\n*\n*/\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n this._addOutput( Image2D );\n\n var parser = new Parser.Parser();\n var expr = parser.parse('2 * x + 1');\n console.log(expr.evaluate({ x: 3 })); // 7\n\n // or\n //Parser.evaluate('6 * x', { x: 7 }) // 42\n\n }\n\n\n\n update(){\n\n // the metadata was not set\n if(!this.hasMetadata(\"expression\")){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires a blending expression.\\nUse 'setMetadata(\\\"expression\\\", \\\"...\\\")' to set it.\" );\n return;\n }\n\n if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){\n return;\n }\n\n if(!this.getNumberOfInputs()){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires at least one inpupt.\");\n return;\n }\n\n var inputCategories = Object.keys( this._input );\n var firstInput = this._getInput( inputCategories[0] );\n var outputBuffer = firstInput.getDataCopy();\n var parser = new Parser.Parser();\n var expr = parser.parse( this.getMetadata(\"expression\") );\n\n for(var i=0; i + + For each pixel gradient blend + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • +
  • creating a pixpipe.Image2D with the same size as the first, but monoband.
  • +
  • run a pixpipe.ForEachPixelImageFilter ont the monoband image to create a radial gradient (values in [0, 1])
  • +
  • multiply the loaded image with the gradient image using a pixpipe.SpectralScaleImageFilter
  • +
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
  • +
+ +

+ +

+

The original image:

+ +

+ +

+

The transformed image, with a radial gradient:

+
+

+ + + + + diff --git a/examples/forEachPixelGradient_pipeline.html b/examples/forEachPixelGradient_pipeline.html new file mode 100644 index 0000000..9873c88 --- /dev/null +++ b/examples/forEachPixelGradient_pipeline.html @@ -0,0 +1,110 @@ + + + pipeline: For each pixel gradient + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • +
  • creating a pixpipe.Image2D with the same size as the first, but monoband.
  • +
  • run a pixpipe.ForEachPixelImageFilter ont the monoband image to create a radial gradient (values in [0, 1])
  • +
  • multiply the loaded image with the gradient image using a pixpipe.SpectralScaleImageFilter
  • +
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
  • +
+ +

+ +

+

The original image:

+ +

+ +

+

The transformed image, with a radial gradient:

+
+

+ + + + + diff --git a/src/core/Filter.js b/src/core/Filter.js index 7ea8817..2af95a0 100644 --- a/src/core/Filter.js +++ b/src/core/Filter.js @@ -36,8 +36,8 @@ class Filter extends PipelineElement { //"0" : [] }; - // pipeline associated with this filter. Not mandatory. - //this._pipeline = null; + this._isOutputReady = false; + } @@ -56,11 +56,6 @@ class Filter extends PipelineElement { */ addInput( inputObject, category=0){ - if(category < 0 ){ - console.warn("A input cannot be of category inferior to zero"); - return; - } - // the category may not exist, we create it if( !(category in this._input) ){ this._input[category] = null; @@ -72,6 +67,8 @@ class Filter extends PipelineElement { if( this._pipeline ){ inputObject.setPipeline( this._pipeline ); } + + this._isOutputReady = false; } @@ -99,19 +96,29 @@ class Filter extends PipelineElement { * @param {Number} category - in case we want to get data from different categories. * @returns {Object} of given type. */ - _setOutput( dataType, category=0 ){ + _addOutput( dataType, category=0 ){ var outputObject = null; // the category may not exist, we create it if( !(category in this._output) ){ var outputObject = new dataType(); this._output[category] = outputObject; + + //console.log(this._output); + console.log("filter " + this.constructor.name + " creates a new output."); + /* + if(this._pipeline){ + outputObject.setPipeline( p ); + } + */ + }else{ // TODO: if output object exists but is not from dataType: error! - outputObject = this._output[category]; + //outputObject = this._output[category]; + console.warn("An output of category " + category + " was already defined."); } - return outputObject; + //return outputObject; } @@ -130,6 +137,25 @@ class Filter extends PipelineElement { } + /** + * Same as PixpipeObject.setMetadata but add the _isOutputReady to false. + */ + setMetadata( key, value ){ + super.setMetadata( key, value ); + this._isOutputReady = false; + } + + + + hasOutputReady(){ + return this._isOutputReady; + } + + + setOutputAsReady(){ + this._isOutputReady = true; + } + /** * Validate the input data using a model defined in _inputValidator. * Every class that implement Filter must implement their own _inputValidator. @@ -152,39 +178,6 @@ class Filter extends PipelineElement { } - /** - * Check if all input image have the same size. - * @return {Boolean} true is same size, false if not. - */ - hasSameSizeInput(){ - var that = this; - var inputCategories = Object.keys( this._inputValidator ); - var sameSize = true; - - var widths = []; - var heights = []; - - inputCategories.forEach( function(key){ - widths.push( that._getInput( key ).getWidth() ); - heights.push( that._getInput( key ).getHeight() ); - }); - - // if all input have the same size - if(widths.length){ - widths.sort(); - heights.sort(); - sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) && - (heights[ 0 ] == heights[ heights.length -1 ] ); - - if( !sameSize ){ - console.warn("Input image do not all have the same size. Filter not valid"); - } - } - - return sameSize; - } - - /** * MUST be implemented by the class that inherit this. * Launch the process. @@ -224,9 +217,15 @@ class Filter extends PipelineElement { */ super.setPipeline( p ); - var inputCategories = Object.keys( this._inputValidator ); + var inputCategories = Object.keys( this._input ); inputCategories.forEach( function(key){ - widths.push( that._getInput( key ).setPipeline( p ) ); + that._getInput( key ).setPipeline( p ); + }); + + + var outputCategories = Object.keys( this._output ); + outputCategories.forEach( function(key){ + hat.getOutput( key ).setPipeline( p ); }); } @@ -259,6 +258,12 @@ class Filter extends PipelineElement { } + /** + * @return {Number} the number of inputs + */ + getNumberOfInputs(){ + return Object.keys( this._inputValidator ).length; + } } /* END class Filter */ diff --git a/src/core/ImageToImageFilter.js b/src/core/ImageToImageFilter.js index 97e5998..49d6734 100644 --- a/src/core/ImageToImageFilter.js +++ b/src/core/ImageToImageFilter.js @@ -23,6 +23,65 @@ class ImageToImageFilter extends Filter { this._inputBuffer = null; } + + /** + * Check if all input image have the same size. + * @return {Boolean} true is same size, false if not. + */ + hasSameSizeInput(){ + var that = this; + var inputCategories = Object.keys( this._input ); + var sameSize = true; + + var widths = []; + var heights = []; + + inputCategories.forEach( function(key){ + widths.push( that._getInput( key ).getWidth() ); + heights.push( that._getInput( key ).getHeight() ); + }); + + // if all input have the same size + if(widths.length){ + widths.sort(); + heights.sort(); + sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) && + (heights[ 0 ] == heights[ heights.length -1 ] ); + + if( !sameSize ){ + console.warn("Input image do not all have the same size. Filter not valid"); + } + } + + return sameSize; + } + + + /** + * Check if all the inputs have the same number of component per pixel. + * @return {Boolean} true if the ncpp are the same for all input image + */ + hasSameNcppInput(){ + var inputCategories = Object.keys( this._input ); + + // if no input, return false + if(!inputCategories.length) + return false; + + var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel(); + + for(var i=0; i Date: Mon, 20 Mar 2017 14:59:25 -0400 Subject: [PATCH 8/9] ADD multi file loading over ajax --- dist/pixpipe.js | 105 +++++++++++++++++++---- dist/pixpipe.js.map | 2 +- examples/forEachPixelGradientBlend.html | 7 +- examples/imageBlending.html | 83 ++++++++++++++++++ examples/imageBlending2.html | 80 +++++++++++++++++ examples/images/mask.png | Bin 0 -> 25748 bytes examples/images/ny1.jpg | Bin 0 -> 528553 bytes examples/images/ny2.jpg | Bin 0 -> 447874 bytes examples/urlToImage2D_multiple.html | 66 ++++++++++++++ package.json | 1 + src/core/Filter.js | 29 ++++++- src/filter/ImageBlendExpressionFilter.js | 21 ++--- src/io/CanvasImageWriter.js | 1 - src/io/UrlImageReader.js | 63 ++++++++++++-- 14 files changed, 419 insertions(+), 39 deletions(-) create mode 100644 examples/imageBlending.html create mode 100644 examples/imageBlending2.html create mode 100644 examples/images/mask.png create mode 100644 examples/images/ny1.jpg create mode 100644 examples/images/ny2.jpg create mode 100644 examples/urlToImage2D_multiple.html diff --git a/dist/pixpipe.js b/dist/pixpipe.js index 3e954d2..bd9b54c 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -351,7 +351,7 @@ class Filter extends PipelineElement { }else{ // TODO: if output object exists but is not from dataType: error! //outputObject = this._output[category]; - console.warn("An output of category " + category + " was already defined."); + console.warn("An output of category " + category + " was already defined. Nothing to be done."); } //return outputObject; @@ -373,6 +373,21 @@ class Filter extends PipelineElement { } + /** + * @return {Array} all the input categories as an array of string + */ + getInputCategories(){ + return Object.keys( this._input ); + } + + + /** + * @return {Array} all the output categories as an array of string + */ + getOutputCategories(){ + return Object.keys( this._output ); + } + /** * Same as PixpipeObject.setMetadata but add the _isOutputReady to false. */ @@ -498,9 +513,19 @@ class Filter extends PipelineElement { * @return {Number} the number of inputs */ getNumberOfInputs(){ - return Object.keys( this._inputValidator ).length; + return Object.keys( this._input ).length; } + + /** + * @return {Number} the number of outputs + */ + getNumberOfOutputs(){ + return Object.keys( this._output ).length; + } + + + } /* END class Filter */ /* @@ -949,7 +974,6 @@ class CanvasImageWriter extends Filter{ return; var image = this._input[0]; - console.log(image); var ncppSrc = image.getComponentsPerPixel(); // only Image2d with 1 or 4 bands can be displayed @@ -1023,9 +1047,13 @@ class CanvasImageWriter extends Filter{ * Reading a file from URL takes an AJAX request, which is asynchronous. For this * reason, what happens next, once the Image2D is created must take place in the * callback defined by the event .on("imageLoaded", function(){ ... }). -* * Usage: examples/urlToImage2D.html * +* UrlImageReader can also load multiple images and call the "imageLoaded" event +* only when all of them are loaded. +* Usage: examples/urlToImage2D_multiple.html +* +* * @example * var url2ImgFilter = new pixpipe.UrlImageReader( ... ); * url2ImgFilter.addInput( "images/sd.jpg" ); @@ -1039,15 +1067,16 @@ class UrlImageReader extends Filter { */ constructor( callback ){ super(); + this._loadedCounter = 0; + this._addOutput( Image2D, 0 ); - this._addOutput( Image2D ); } /** * Run the reading */ - update(){ + update_ORIG(){ var that = this; var img = new Image(); @@ -1064,12 +1093,14 @@ class UrlImageReader extends Filter { var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = that.getOutput(); + var img2D = that.getOutput( category ); img2D.setData( dataArray, img.width, img.height); - if("imageLoaded" in that._events){ + // call the loaded callback only when all images are loaded + if( "imageLoaded" in that._events){ that._events.imageLoaded( that ); } + }catch(e){ console.error(e); } @@ -1080,6 +1111,52 @@ class UrlImageReader extends Filter { } + update(){ + var that = this; + var inputCategories = this.getInputCategories(); + + inputCategories.forEach( function(category){ + that._addOutput( Image2D, category ); + that._loadImage( category ); + }); + } + + + _loadImage( inputCategory ){ + var that = this; + + var img = new Image(); + img.src = this._getInput(inputCategory); + + img.onload = function() { + var tmpCanvas = document.createElement("canvas"); + tmpCanvas.width = img.width; + tmpCanvas.height = img.height; + var canvasContext = tmpCanvas.getContext('2d'); + canvasContext.drawImage(img, 0, 0); + + try{ + var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); + var dataArray = imageData.data; + var img2D = that.getOutput( inputCategory ); + img2D.setData( dataArray, img.width, img.height); + + that._loadedCounter ++; + + // call the loaded callback only when all images are loaded + if(that._loadedCounter == that.getNumberOfInputs() && "imageLoaded" in that._events){ + that._events.imageLoaded( that ); + } + + }catch(e){ + console.error(e); + } + + }; + + } + + } /* END of class UrlImageReader */ /* @@ -2676,14 +2753,6 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { constructor(){ super(); this._addOutput( Image2D ); - - var parser = new bundle.Parser(); - var expr = parser.parse('2 * x + 1'); - console.log(expr.evaluate({ x: 3 })); // 7 - - // or - //Parser.evaluate('6 * x', { x: 7 }) // 42 - } @@ -2705,7 +2774,7 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { return; } - var inputCategories = Object.keys( this._input ); + var inputCategories = this.getInputCategories(); var firstInput = this._getInput( inputCategories[0] ); var outputBuffer = firstInput.getDataCopy(); var parser = new bundle.Parser(); @@ -2730,11 +2799,11 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { firstInput.getHeight() ); - } + } /* END of class ImageBlendExpressionFilter */ //export { SpatialConvolutionFilter } from './filter/SpatialConvolutionFilter.js'; diff --git a/dist/pixpipe.js.map b/dist/pixpipe.js.map index 31b7c97..6052e9d 100644 --- a/dist/pixpipe.js.map +++ b/dist/pixpipe.js.map @@ -1 +1 @@ -{"version":3,"file":"pixpipe.js","sources":["../src/core/PixpipeObject.js","../src/core/PipelineElement.js","../src/core/Pipeline.js","../src/core/Filter.js","../src/core/Image2D.js","../src/core/ImageToImageFilter.js","../src/core/PixelWiseImageFilter.js","../src/io/CanvasImageWriter.js","../src/io/UrlImageReader.js","../src/io/FileImageReader.js","../src/filter/ForEachPixelImageFilter.js","../src/filter/SpectralScaleImageFilter.js","../node_modules/expr-eval/dist/bundle.js","../src/filter/ImageBlendExpressionFilter.js","../src/pixpipe.js"],"sourcesContent":["/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\n/**\n* PixpipeObject is the base object of all. It creates a uuid and has few\n* generic attributes like type, name and description. Not all these attributes\n* always useful;\n*/\nclass PixpipeObject {\n\n constructor(){\n // unique identifier\n this._uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n\n // Metadata can be anything, a name, an ID, a description, a DOM element.\n // everything that is not an input but rather a setting\n this._metadata = {};\n\n this._pipeline = null;\n\n this._type = PixpipeObject.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"GENERIC\";\n }\n\n\n /**\n * Compare a give type to the type of this object.\n * @param {String} t - a type, better to call the static method of each object, like Image.TYPE()\n */\n isOfType( t ){\n return !(this._type.localeCompare(t))\n }\n\n\n /**\n * Get type of object.\n * @return {String} the type\n */\n getType(){\n this._type;\n }\n\n /**\n * Return a copy of the uuid\n */\n get uuid(){\n return this._uuid.slice();\n }\n\n\n /**\n * Set a metadata using a pair of key and value.\n * @param {String} key - the ID of the metadata\n * @param {Object} value - can be a string, Number or Object\n */\n setMetadata( key, value ){\n if(typeof key === 'string' || key instanceof String){\n this._metadata[ key ] = value;\n }else{\n console.warn(\"The given key must be a String Object.\");\n }\n\n }\n\n\n /**\n * Retrieve a metadata using a key.\n * @param {String} key - the ID of the metadata\n * @return {Object} the metadata object - or null if non existent\n */\n getMetadata( key ){\n if( key in this._metadata){\n return this._metadata[ key ];\n }else{\n console.warn(\"The metadata with key: \" + key + \" doe not exist.\");\n return null;\n }\n }\n\n\n /**\n * Check if the metadata with the given key exists.\n * @param {String} key - the key to look up in the metadata collection\n * @return {Boolean} true if the metadata with the given is present, false if not.\n */\n hasMetadata( key ){\n return (key in this._metadata);\n }\n\n\n}\n\nexport { PixpipeObject }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n\nclass PipelineElement extends PixpipeObject {\n\n constructor(){\n super();\n\n this._pipeline = null;\n this._type = PipelineElement.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"PIPELINE_ELEMENT\";\n }\n\n\n /**\n * Associate a Pipeline instance to this image. Not supposed to be called manually\n * because it is automatically called-back when adding a filter to a pipeline.\n * @param {Pipeline} p - Pipeline object.\n */\n setPipeline( p ){\n // only if not already set.\n if(!this._pipeline){\n this._pipeline = p;\n }\n }\n\n\n} /* ENDS class PipelineElement */\n\nexport { PipelineElement }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* A Pipeline instance handles a cascade of filter when an input dataset is updated.\n* Using a Pipeline object is not mandatory and can be replaced by calling `update()`.\n*/\nclass Pipeline extends PixpipeObject {\n\n constructor(){\n super();\n this._type = Pipeline.TYPE();\n\n // a list of filters\n this._filters = [];\n\n this._isUpdated = false;\n }\n\n\n /**\n * Hardcode the datatype\n */\n static TYPE(){\n return \"PIPELINE\";\n }\n\n\n /**\n * Add a filter to the pipeline.\n *\n */\n addFilter( f ){\n this._filters.push( f );\n console.log(\"Filter \" + f.constructor.name + \" added to the pipeline.\");\n }\n\n\n /**\n *\n */\n update(forceAll = true){\n\n if( forceAll ){\n this._forceUpdateAll();\n }else{\n\n }\n\n this._isUpdated = true;\n }\n\n\n /**\n * Run an update on every single filter\n */\n _forceUpdateAll(){\n console.log(this._filters);\n for(var f=0; f 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._input );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * Check if all the inputs have the same number of component per pixel.\n * @return {Boolean} true if the ncpp are the same for all input image\n */\n hasSameNcppInput(){\n var inputCategories = Object.keys( this._input );\n\n // if no input, return false\n if(!inputCategories.length)\n return false;\n\n var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel();\n\n for(var i=0; i 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\nimport Parser from 'expr-eval'\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n\n/**\n* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as\n* we need as long as they have the same size and the same number of components\n* per pixel.\n* This filter blends images pixel values using a literal expression. This expression\n* should be set using `setMetadata( \"expresssion\", \"A * B\" )` , where `A` and `B`\n* are the categories set in input.\n*\n*/\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n this._addOutput( Image2D );\n\n var parser = new Parser.Parser();\n var expr = parser.parse('2 * x + 1');\n console.log(expr.evaluate({ x: 3 })); // 7\n\n // or\n //Parser.evaluate('6 * x', { x: 7 }) // 42\n\n }\n\n\n\n update(){\n\n // the metadata was not set\n if(!this.hasMetadata(\"expression\")){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires a blending expression.\\nUse 'setMetadata(\\\"expression\\\", \\\"...\\\")' to set it.\" );\n return;\n }\n\n if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){\n return;\n }\n\n if(!this.getNumberOfInputs()){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires at least one inpupt.\");\n return;\n }\n\n var inputCategories = Object.keys( this._input );\n var firstInput = this._getInput( inputCategories[0] );\n var outputBuffer = firstInput.getDataCopy();\n var parser = new Parser.Parser();\n var expr = parser.parse( this.getMetadata(\"expression\") );\n\n for(var i=0; i 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._input );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * Check if all the inputs have the same number of component per pixel.\n * @return {Boolean} true if the ncpp are the same for all input image\n */\n hasSameNcppInput(){\n var inputCategories = Object.keys( this._input );\n\n // if no input, return false\n if(!inputCategories.length)\n return false;\n\n var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel();\n\n for(var i=0; i 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\nimport Parser from 'expr-eval'\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n\n/**\n* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as\n* we need as long as they have the same size and the same number of components\n* per pixel.\n* This filter blends images pixel values using a literal expression. This expression\n* should be set using `setMetadata( \"expresssion\", \"A * B\" )` , where `A` and `B`\n* are the categories set in input.\n*\n*/\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n this._addOutput( Image2D );\n }\n\n\n\n update(){\n\n // the metadata was not set\n if(!this.hasMetadata(\"expression\")){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires a blending expression.\\nUse 'setMetadata(\\\"expression\\\", \\\"...\\\")' to set it.\" );\n return;\n }\n\n if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){\n return;\n }\n\n if(!this.getNumberOfInputs()){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires at least one inpupt.\");\n return;\n }\n\n var inputCategories = this.getInputCategories();\n var firstInput = this._getInput( inputCategories[0] );\n var outputBuffer = firstInput.getDataCopy();\n var parser = new Parser.Parser();\n var expr = parser.parse( this.getMetadata(\"expression\") );\n\n for(var i=0; iPixpipejs
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • creating a pixpipe.Image2D with the same size as the first, but monoband.
  • -
  • run a pixpipe.ForEachPixelImageFilter ont the monoband image to create a radial gradient (values in [0, 1])
  • -
  • multiply the loaded image with the gradient image using a pixpipe.SpectralScaleImageFilter
  • +
  • run a pixpipe.ForEachPixelImageFilter on the monoband image to create a radial gradient (values in [0, 1])
  • +
  • blend the loaded image and the gradient using a pixpipe.ImageBlendExpressionFilter
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
@@ -82,8 +82,11 @@

Pixpipejs

blendingFilter.setMetadata("expression", "A*B"); + var t0 = performance.now(); // apply the gradient on the loaded image blendingFilter.update(); + var t1 = performance.now(); + console.log("Call to doSomething took " + (t1 - t0) + " milliseconds."); // create a filter to write the image into a canvas var imageToCanvasFilter = new pixpipe.CanvasImageWriter( ); diff --git a/examples/imageBlending.html b/examples/imageBlending.html new file mode 100644 index 0000000..c660f34 --- /dev/null +++ b/examples/imageBlending.html @@ -0,0 +1,83 @@ + + + Mask and blending + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image (1) file with AJAX request, using pixpipe.UrlImageReader
  • +
  • opening another distant image (2) file with AJAX request, using pixpipe.UrlImageReader
  • +
  • (image 1 and image 2 have the same size and same number of band)
  • +
  • use image 2 as a mask and blend both using a pixpipe.ImageBlendExpressionFilter
  • +
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
  • +
+ +

+ +

+

The original image and the mask:

+ + +

+ +

+

The masked image:

+
+

+ + + + + diff --git a/examples/imageBlending2.html b/examples/imageBlending2.html new file mode 100644 index 0000000..cb5d1c3 --- /dev/null +++ b/examples/imageBlending2.html @@ -0,0 +1,80 @@ + + + Mask and blending + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening a distant image (1) file with AJAX request, using pixpipe.UrlImageReader
  • +
  • opening another distant image (2) file with AJAX request, using pixpipe.UrlImageReader
  • +
  • (image 1 and image 2 have the same size and same number of band)
  • +
  • use image 2 as a mask and blend both using a pixpipe.ImageBlendExpressionFilter
  • +
  • displaying the final output in a canvas using pixpipe.CanvasImageWriter
  • +
+ +

+ +

+

The original image and the mask:

+ + +

+ +

+

The blended image, only the lighter parts of the second images are visible:

+
+

+ + + + + diff --git a/examples/images/mask.png b/examples/images/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f7de385220ee0f699959560d1c9e81a15e004f9a GIT binary patch literal 25748 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

S9f?{^8^Av)xDMbIIqAY!X|@&Sy8V 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�_FRlvU~< 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%0Awe?JL(_I%w0Gs=9KmBb4psa6i+_hcf54 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ÎQTX=2n0G{{^R80#7NMW>}i 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

3S4g*hx})wUYOHn6 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

tRbgIBeuMMWVlJu8ou6C^)7pqR=5?We%9wkVikb zE!N-_h)Vn=*pS@dzgs$PEH|1E)33ArM{=P>?xHsr8r8}ji#=ecn*Rr5Wh8blz zEV3Jm=FBL};lp%Z#&^8VLzt>*T62)NjgH1}QZEP`Q3|=bpAu`1g?v*KhCHrDx3XXB zHxIW#gzwEM{=-=?04U_-sB&M0Q!-Z_mG_nT;X|&SlBy2buffT!C7v#Xd3=tk_R$-Ex$3+& zjW<%Fk~aGsnn(VVa{(_Sv($CwP8tnQ}g zUtbpLy}Tv@rtChXm%Uji}_J&pMU-S_V?%<(vm>;vi^>2 zo*)2G1>z9!bDw;5Zdcd0_9T3G(Lo`|1(*epQghOW@CL_T`-&N|c*RO)naSAPiQ9t= zSLg$X)aK}md3p-$uhtxLcdTzNP-KQcuIuDZvvZ$sM{>)uaD67&5a%D#xrQ$Fm1t#Tz zp9KkI%!U{wG$7BD%UX5EO=p{bgy59sUOEsU{Nb)ormEjf?!p|oe(_-k}- zIY*xHENKPf&GAZxjT~~FxZTIO(J^gR+-}7&dV-W6i*o%qvLa>gr1;mu;8xjg~ z3YgRC3%s?lb!Zfx6A8>F)GQNT_2nBid$b)goE;3_D#;)UvFI}R?c8xhH9Ltep~q4M zjj$#6^Z*Y^s-I24c$z>@m{N_uvKQ73I6>wv&GZM6Rkm*H)-Vo-yFT+q@>w6JqPp#Sc* zDIF0!J@uEbQ=vM$aK^~l0mxi6ue^NlrHi|}7=|Zn=dd72xtvlLvw|F0I!#Av7ZmBA zZRBRJl$<*LJh;UjAWo*%q`0{i79rmaRerDTUhFd*C7rsq^>067wK@*e+@QX?CMrM@ zac?`IU2U(YAC**oM4|qnuBmW4gnRjs*gLuWz)ulJNnZ|Y{=@m(okD4?ayddO;y}%( z-2x;1EcK$DHMa3Jn#JGLWsH^}&f-w$C+*h5?|4ed=lM-ORPQ>vQ>ul)#h^we~@imLNEI66f~-)P(WK@O9{%u3ynjLus$&NClp znViiqp>o#r`2XPms_GKpU6})_T3W8j3L8MgD+<()AW85B!_Mu?py!|NW)f0qk`MCA z-+`&)GYV#?;Tdh?rk?S zyM_L{(by-y$1-Yj)tu6H6OM$eRlBKY)3SAACZ7vnqZA{)e_%GkML#GGLv`n7UK!3$ zT|QK-BM-JhJm+(UI4x^)eth{n-B7Ksyu?843d49kqh2+uo?Y;H)kt$v+iI2RZGvlt zZ!+fSw47+p^Y*z@4-#H5{$j9GMe7LwIkr@ieIvmwuDAS|W+ynW&Om)dErfH!WuicT zso_HZ-y4C8HRu%CF2g3S?&r%`DrkZA0bybVb z_|s@FNVG2Xs`QoW42MVBCB~l0PNwu^X?Z%#VRLryR2sR&B%JVE_ls{nUFlkLI*-Gy z>7i#N>qark*_xs%`1BLpqeT`FO?Fji-){5QfV;2ES%*eAIMO><{&5YhFMdMhz>4>9 zb^)`o@Xk@h&948Hb(`K0IIl~uV*iNFUZ|q&J%(TmVJcmY9L+hN5X2E`Ax^!lCijT* zW^?0*hu4FnY^w3<8=<3{4t0*{*qCi2FKd$zhC0WO_D^>$zncn^yutz(_gmo zVg46T4M94)VUNu^T9eIk7d4Z}6y{zvY3tAt>ODXEwTt{ow|Y&Cq+1S@$^eR*>L&;O zWoI1L?~Vc$YOvGtR>9K=tcN27+GhOHM;tzyVlOj3ES7xIH&ZAFqNB^~dITNJDvzF- znVyQxnwtsUy=H54!UXADo8~(nE(kx$fX_wM1Vx3fXd(BlJTH~BZWz^)wXpCUledhM z{+#WJZDxr3s+#$ueqNXOZvkqK;rv*&F))8k`j}f)MPb6&MZrbajP|wcbm!Kzz48s{ zKK{_3s@4!9=Wf(pwC?iavx>|o9ce$p(@pI!tvP1T5W8O<0rE1sT);a&}M2w|!S zqDM87KbM)NLZDc&h6<*lqS{L5!q?#i^`vq|sjZ)rgQL;gN0R84{`5c95j4x*6A0j-GaArd`E8fjou51qFM7j#B@E{g3gD}aTRBJYe+A_U1y=#{iCT_ z?e4thaR^@nFSR2bZ7$s=SZx&>M2#2P0~@{ml`6?-yF@*S-JXe{xuFgC6uCo;;*X<8 z;R_!2&~*~n1FrHR(@Re(2Z5gor?Q{3{!$3f2ooz^ey*P<&(N-7nrjaW{ z5K|n@j#K^_U!Ub+V6fbb&XR|R;DQp~nAF>YrwUq<7TcRk?oPLdVtYQ1&YvB<`BYbx zyas~Y9PeSi*V%z2Qjt){Q18=AeZv&}nXSTP*rs$i)M4^NVUoFfEsX+gc%y0K_o&>7 z;SLD2jr+T=2|IXsWPDYGnLb+5lAJ02b*44eh9D4#$S<}=zkEHHUxb`E!+_q8o94?y zBM{PBN4~JmPfIP&x<*BX{Yc`j{6HStdSm}e98}YM9TxAC$~`jA@1*3;2j(j23TG?B z7|pZL;?|`$u}#mN5(SUE)Y#P^@qZZYf&f+Q!M{WwFL!SybkAkz#Z*-Bnu+HYSLlU8 zUuz|Ia;<0RG}nU(!oUP80D_O;D(W~BDbKsxg%rw}x1x;Z;jZ5ducs%qPg@?j7;${} z6pm^9oMK}<8~r_I$*m~7aE3l;{d%i`XTUB(0UWvUmB}q~+h<{^O*fGLHD79Xmg!Ux zJPr(xA20*+5;QtwKi_@o=E@J`!>Rt+|qFo(k;}^7cpS!9$ z)jW~Ku8MSur(q2yi%}?4ca|~h=_F5w??svaop;Tj#x^XaH-NnUe>Zh_-xzf~Kl5Uh z#g8KwG|ZSDOWCY%3tykfU))P+#gv5@ZGA`a1Ox+XHJg`Tb-by*!K0qn;;pKJ`=z5A z`->^#Pdn^99L!othbSC0?W-f^wb;`vZYd8(hh>U11v|*Bc}A+fsQg4mMNgAc`xz(T zau-W*MxNqY_P)7r(>$>@5b_o1085l9?*OXV)B7|iI^=P&!f9C9yK(oq9G+bu_E*UB zu4o;GK5lc0NDudFi_m=;oF-;!=HeK>jn$(CqyTs!o;82hPfIGQt3|p_x~ubo+CF@w zp3#!q3R)a4xJ3p>G*+fKJ^F&qt6IY+sr4UUvi{?q67`AQ%tp~oAa^kHJ9HI~<1pQ( zv18;pt?v{Hoz`K(^OM%}ya5dV2x&xXHKXN=$rV~nNP5kWsVD6^BMHnTBJFee`>l>f zolYGuj4Wn!sCQ0kM^9>3!YPVyOwFj%zhkp=kJ;15+^2j{t@$oLvd`Ca|EhkJ#J{#4 zq_uSDn7*1mxFPKfGC8AP^W8V&bR|ofV~$l248;0%J{^0QsknWgW7OLY*ws(O+qcXW zycpBf$hYY3&C6Qn<~cE3QgSOP`eku6<=9axp*}KL{}kwO+LfN@dGxd9%IiMc%L<}*zMY- zNa3dUg5A#j{CsM$%$PPE@5Fm;A_XAj0yE)q@HLP7M8$sWNVGHl#2fVkeiCLfKLB%n zCo-dPn9}epttQ_c5Q5WsxZpE5(o3Lx{MaLRObd=0Ag3T1{TaA2IyxL4b-4y1GJ`n! z`N2psH`dJ86(3*7VOn{P?#Kk9j}8)8-%F_Y)NBssyR@Z{91D_l7)>0zv69bgER|M- zmcHkRyk{9%t>2`)Vya*%#WYSYi$u|pl#M$TLmV1Oj(w^%zrvTe6wx#aQG|Q}YfiKw z&rSVCcdAw_YPVA}%O>`Ug=s^oSVEGsOt3sF^C~#GlpH4@SvWQCNpTtF=q)Hfz&|m-nM>le*C&t3aE zl7;#8+G7u%W58aS6TjgkNZV}21@Xo}YXwn>B}2_z%Nkod$Qt~A-QBEtDln-ky5e&x z>Hit62S%GL|LZFa@|t;Of?qpLUc2@Qmv}jMJ}OmVjF*iIfT0bn-Nu^#e>gkp%xk>vaULF52S}_84d4+rH@ou)UpRbh(?Jm2X z5-dXye?b+-lIMbFEXfavY4HqgqWGONx1+d|*m% zHRk9zm^FPDaVG%l&Qd)!<4$hwH7e9C@9n&ea{S*ET{Ab@VTP5SHRFvWi;`ILiB3g# zSezvn8fdLnW$yfY+~|8HjVQX-IZ5iyH%@CD<_q^-@XFMftkwrGelw2m9cwk=o~ov> zpCq#=(&y!5zM$|j3rles9s*?9y>t;5Np?MvrJ<>5sW;L8_Ndpj5exnPzia+_Duqul zb=cb*I|xSIJrsMPD5ckBLVM`IT7)mSj8E~CQowKl$I>(VRS87v^p)xKoliUuR@@On zD)G;SfUVKuGCGn}cu<7a3`|J3NQ)i846d7j~BL02hU*z@pR|C4%D zum3y%C-OP#(5vCrW5P)L#0W~uUN!G4$B>dfAsK=1u?@YR`+j~A@#LAzfaU>5uWlu1 zHQr6*q3{;|)F5Xa{9x|nFxw!l#-(7u!Ib-9ev#(`qG z%)2b^Vl6bRCk3C8DC!SN`XQmJ>KH~Cqg914o--n`fvM)G&NjuxLdyYlLxiu7<8` zsgHq}!X^>o7)u~=9I5HMiY|pFTzB)5?;I=|M6)j?mV-n?Q1`}*HsE^ZM+OR|_TBXF z)5<57L8AwS*Qo>srp><{%>7N}5#ebc0fRa1-C2_dVl!KJ?_C^I4jaV)?5F{Y39J?d zt&jiVHsy|JcYamXLsxTmmU2-zr&jSFW}Ulu))+`+@jNqc+59vR%>GCP;9`?_)0>KJR7;R9xy79nY^tpGllWaRV?jxUscOxvCsA`-)+?iCBGZ zm8LdR_Ld+U(l@0u`vrGR(cvhjLm?x!L*6C&ySK}5bt4WT;+nU!T1(%DU5LQVWwhQ3 z?p2*qN#suQ9e<(4fyS0rR2pW9hZ=fmPICIH%Bgl+bIhmEx42z7qs-PRFMv;z0`ajV~ zwag}zipOag7URe0LJ*O=&ndLpLK}_aS=9AUYZ_#pzf$giwmlFMrIP47TFK}NlP}>l z&p)n)W2%$KnA@hm^3}F=AFP3k?K~a562k;Gty&V|d!HC!CAg)q0I?2;SDhowvfcEo zyHP|&it{NUYE;}K6$|~*n0DWX067@H#hE>8G{uTGR#hE_2$&ol?Q2yXI=Tf?ly-U) zn}UFDL>W;lUo1a#zfrja{;#FojkCk^SjPggZ1I&pYuG5M*#V!pgLm4r6v%3s&7k8T za^5US1kV^15J!2eMqs&-eMxnDu`MujZ-so#*Wh3_ZXiuRx-#RNw?S-}=(w^!NsSxu zC%3yoXzobE1gKYuH=-Ogl=S^k`(FbgRGKJ%?(eRxNn&QyK6SM${*%er#aX0UpJa^M zfxf1+rqUGP=NJo!a&#PRZAG=Bc>~8M(l8{b7ewmqa;B#LWDa1vxWy*Z%X7e|6h)>A zq6*{`DDor;?%6gb=w8HQlg34k)mof)9;w_l_(1BwDHFgnb+2;fbqf*1A)&Qvf!=EP zq+qaD@>JJv5<|Vrr92DJ7c+B*bgOsZ)xlJ-d)Lt}_~eRKt;uyu+AJGN`mo)U3n5Ss zX<32Pqit=l58=K4Bj_+ua_lZ~3}xMD;~8CMB-vJkVWn+)QskZ`HAmjQ5J^bj{eTYo zUGw*dETW&|qz0>Nkb#6|L+K`0SQ>q>uqSZ$@=@jYayRHD0MLZ{$TpX*u0#A8bf5K@ zbF=_xl{*iv%A>TgGWC}7LQin*?8bSK;z&uetSRwkRYm=e2c&jejG}BvJ2%(7 zHok$Lk?f9-F49byHjeBRPp{=@{M#o{kGTK9){$Pv~%51+-5}Zw6R)xe=UN z;P2xvP^SwvV8D+BD401lX}#Z;E^w^|I<{)w0c+;k_WSPFEc$+$%oGZy)xcXirm?UH z)2|l;7J3nlJ+XlO;e(*5=xwb-PWnc@Ilmui+=!p=4qH>wDn_v$${{a%4rE|e<(hQ2 zj^(jc9`9soF$;GiIeHAkhsHqeYyV8;NPgD|BpyW{V*>6MmrHA~!O#Q$zIQKbxOCr* z`kpEJ!?Ph{wOaxx9A{#B2+}H8XuVYMY2{fqdw&>`CU&u{I310~jzYqRXJSL@xATX8 z1MwP7yJIfb)i_dsRR`}qcIYE*aqwK1oSMu8wlLJ|yq)N(9tT%N;dFE|&oMKO06=uj z^(n5Dg}}Mbh(j!ysu;nNi*D4oN!lY;%ocj1y4P&YtG2dP4JN`avc}lVVEuK`1s2$v z)tzKIX|3fdZ$fI}N*1H#HdwX`u^OgMHKR_NYhH)^^>iHViTbmz<%ZR2_Nh&Z=Wk71 zT(@AQNb+CsAmrtB8#?MrUGKZ2EJk&h^0NE=w~RxKi~9(d0I%mi96qA|_lo!bf5pKi ze1o^D^ZSI{GXfP}nYx==)d{TD6#V-B`@imgemyi-IgvaV`v4vq%F=0MMAwYc^=H{+ zMY!~^c$g3Mlw#84+8=PEjhs`+Q5v?4q+OA5G8NT5@^0TzIK!+J=jahrk73bqdb~JJ z8C}YR$Ir_v6L)*OHtsxoJ0zvFQ#fJOSX$b?I0VvMiGm&e6M&gNPI3?_^id z6Y*@aD-+IU6w7Bp z@yLDdZS>j1g~>~3zo<^j_E68yoOL@|e9a?cDlb%ifML|&raw#Bk}8MuG79f(50nyl*QNIxP$zE_>IoJO|{oIl`cVqzF%{sxt!%nce*{H#Sj zx$7fcM~t~!7iTJwPEu=8wj=@&>itLDr_!Z(?;zhHJ;8?2@C z)p5PvNk^`joL?zYc8Udheu?{Xe&51_%;o+eGkalJQP0>rFnA#ITJME;0fw^J;QiZ! zq67V&2jR}znV!aWS+syeM9=!#qC&8h&ez~oO=Le6*BBRn0Vr;P9kw0R?kTmdeeT7h z(mVdY+DlzusXg%__420Pz4i}8?nL6f;oZaJ{D<>cKiT@pozs)O`hp)yH5aizjMq8C zPMPlSUvLWEs%lvZHDCOPqp92DzxRs*`T8*glUJ25!o^$hxWj=@0XJ2UJQ!2YsESd{ zJ0}Hs1fKso0qe%KQtZO?Fs0$#gmNbe=*K95G=wA`t^!!6?{(h^wW;Nw$vW-N@gzyZ zUf`(75^n}f+JK^83LfX;nPk+Drwic{BKJ*mdh8Y(h}DJwrH0)fM z6s;Kh6aVZS&fFJtVe71NYw% zbrJ?63K!qe{K)0aaGO|WLZ|fxpt80|kVa3Hbu|pe?F_&CdMiMQ_|}n^D@73N?2~sY z{nSn%;911Or}q|0__)7B*BbzU5AoB?@mPMf4@y?fH`aIWg3}Vl9^LAB>Y>{q{dr$v5((( zMINDc$qU$K1pVe7{Z{^?zjk>(9vh^)W9h3KkDQrV^v0E?=#|GB)_e=+PJ>zOUJY(!=ovo|V|hNc27|9$!`oAevHA%e6=25_|$u@O~2Q=?`2djdj_B};uiaSnV|do$IkJ;bq85S#z{(F9JXIFN9lDM%Jkx` zk(so>^!;?XOKPoMFi5@DOcg)rxX2r z6~n1a^;`d4?d^FI=25YlV5}%Gr<+!*V13cPksaN{U61QZmqkqPO=9d{#9jm;Fs{e)r+umU!}>9(gG+=9Nz zTVzmKG16_Wr^{y0Z-XthzI}TC9}aQW8|t#C>IY5!J1!dSL*$U_);^CFcp-%rf6D!_ z%DScp{gO`0+fGi*UtkP-#7>p3n$CXAQ1qVZ)^i9tA!Y9hZ)$I+ej{9s>8#VbvZ#^OT?b~z0 z&d`Y+>Npfb@~{6Dxo$vXW_CixRam+#-oFK`^E}~Wl5hGd$7a|N!aCWGir()FC{qjg`5(@1w^(OJ zr+A=;e|-nCm_#s@Cx)Tq8BIidmV7cV)6^BBfWp4Tb8Y`wF;Q6yfy#|8I<+1ixweU( zQdrd-_(kd|z5X}(s#I#2F@CJ`Y$V*mKzu(*fu3vgZTVcO(v?I zv3xjSLV@y-c_Uzns5#NqKWZ=eI41-oHF~gfpgK5jSGth+j`Ky1(0O{%kvLn&n(|k` zgBGL$-bg;MXN1Hi#5m+lR}s&V8yCq;3F8#`Rq8f0x~sgbgyj{-mw^;?*~0U5xuP}; zNY#E{6Uu(>zyXI348@-atN$j5b@JEE3iP~yM`GA%&*OJo&n=E&4w+C-Uld#V+o|4Y z+f8Kl6rg~Z>~ZI0Z*{d(87Se?s53m;0q=7VJSv!Z3E2k&^h;?5I67_m0pw zkFQfhuR;!*qj0uuEIIf+ukS4%Z%n~UiOi32@CdH9bhJ52F)5pGLS(W<6q_38p_S6T z4;r58*QcZR;WNBG+fc+IvAMX?J?15!-IYIjMubcI&reOhJ87?GZ>e(H99_=zg4)Yb3I*W>A0tMCuP-l^DP`xMCwm(Ttx8Ftn!+CDc!4zmYvA_WDiBX;E-YNq{2$l_|&hJevqpKXc_0hI@vMt{CkAE=qJNTOFeQZ6*4WUc`%)#t-|t#)4!W4Kb^bg$sqCWs zokDa@Hu<$PwE4+q%Y)H*nBr504@auJ_7zZB@9wlH*`e>Y~o??d!{zy$SY zr{Ic%7{^E{9p`+USXYjjcpF(GKOI@9;8DT?;>lK*0k}Xyk*2(0^2u`&9<96qvrYzS z^CGhrnSfU5A(5 zSFHB+LCuy&UzEh(2Nqz{k<5DXB9A19$I>G(O)<{0`yHv^AqxtY)fRW z68O`f@t*oB1^UWW*xiIT`MTn{RS)16E3O=pc?ur#(7jiS!19^%xIa|G{=?y=E*6j( zrRfxrjklp*jsvGiyn#9W9^(*dcq&ewzZITzQV9%eNK%9pQSj=+Vm61v$mTFJ2iVR zoopC>+<>4LyN`?`FQ@b^^&WQfdhT>(UNWn#s-w`$R_dxIB3|e65a1}66ch&yd|&p9 zbeT&!xkSPwqzV7$M^OqqhZ^caqi;9xVtrUgZ%KNyM~e{M>ze0pO=9Tuk^{sW{W+Bs z2Yx9w$>MP=ZFWt1PVpT{m473$xkk*>3z!_*n*O zzl3aRp(b+=z z8%0X0y;2l^GM7dK;U@I=Kdz9MI3mA%-9JyRa9j|ZX9e@=PeQ+8@CsbS72R-`L@wWK zN_^nHPt!T^Qceb(BhSDnq(jo>-@dfc+4gfoD6%Z5IRKF$b_W;O`{Fiu0lOM!-@R6Zday}B5!9<#pPuusN12sO3%2lDA zI|8W`NATd)Q4O``DO;`=Z{Q}0vIHi7_$or_>%M2%$#JWo8zdya?|lj8YhNRQ)LmaG zE^IY1y{cQyeVbQy2o7JKtemD``=0xg>q&i8C;Wy=1e-?GiZ|XRe)G4=MXg;_zZELDKpC~yh?GyRARqf&Qvb@aZ?^&e;RGo*o@QTZ zdr{Vg8wiqXOi9fgl4bpsdPwNIlV+>x>ATy{!p<3*@d7kSLJA1`Y};ARV!cpu)ru`H z(a$bcjOG1QuV}l!o2$p49kq&C3$Z2uTIdnm$k+0Q$&dRIJ_qUZ=_W~35{vceIjr#7 zM~&xL0XZZzk6J#Sfuwifl85rs)RAAQhAh%=cZE;qpOt1*q<$e0nHh9h2{@7~-7!Qd&Fyj0G z`k&pY6yy~*h!`5JQA$g35+(zvdpg5{aJx)+-_$f5YSz)>yd`F&AOL7NZ8s4Xhk(2` z2_@?&5Ahdr!#@v_`vEo>%CciF(PK2i+i!RYxB8&2D3LU*e3k`-9Wg{aDWQG-=c20cm>C@ z{==c#m(wOAnZf?lIx?qUwcfq-tWFvLfV~dhr`u0JO=(){$mbw0VWY`KqCbXZGouk@ zI*S&vv&%5h*uT&%~^s zo_yF+y)s}Scu{PpPxUsx9)-jd9iopv3FcMz2pHU&0P&RU>J8q-rO{i`5d>9+rql2l zYW4?m%EH63?e|p(W*H%(HHD8;@}3a@`u$^Z4d;?*mnOqg5{7d7Hdzh&ggz2TJdH9P zBO&)yz|@bw)oKXle3M*E%LvlAuKbO4alJWieoVnoxwQwPV}Rz3iZG>@3ELt9=uS@K z7Xt^?JzS%2c%~h=n({^RKH}hga5kIGwy;vyKcz@Y(=p(G9sVd*!S;~@@T0S^CVW$` z2>qZ_O2-T8efs5lOm@^$AlC++d=zO0!%T_M?bckA?2H9#5Fomq#CHTo=NnCY0)U($ z!+J>Rnx;+F1%N>O)hJf{s%KXZ2Oez0lGY*p@ELF3DYFj-@E*8U*i8I45Hn<3BFUND zS9NMjzo}p2AB9I@UijHVn%*<1BEG#&Oq4Lzj6*0r zG-@;F%%U9TbyT?ZuGh}tS{0@`I^I<<{&*_zOCs~C*()O(qoQCoURtSY%l~lfjb$`_ z10$~K$y~W<|0vkgbIJRVpjeC6B~>*b(6q86#eQn>i!SP{-REYv#@fV&n?i(bf%3%g z|8Q6yG)heqmjw1Yl}cO_sx2ayX8A%ja}UMs8Pnd;*%)PdjIa-CTgoLq7f5_rxEUy> z@{@d5D`B(59KJd4hXxRlafuE&?R7M*5vGeyNv2sOtR4_EFz3raKO!^MY_EwfSuv0Q zshwWakVFxQ3dXp`|C?k}-a;`nuMMNij?26|{;$&t;kXX$1L`bAxWfK5=LNs#o|Z(z z*zMlmuo$akla?btau5OQNlEqV!}o2!O)-@$W^5)~?`@s1(Y~%Bs%$}J?n8q-QPLZi<~z9*T`#)|9FGhNV7Rz5_HWfNayI6unVi&%mI^+|Mx3D{b=;9Sq0wTaR#~%Bp1PD7Lp+?QvCD`dX-2T za;@@7Hik5@7?YYX*zEcjIHB8D=3v&tXg`oMATgLr8NhrD@uuF!jiJWwv_!v>qzw4! z&Yr0x>U`_x*qVEysL$p^^3vqUL$u)nggI!Cz8^P3=XGxnnpbT58EiEW=m{D6>7#aP zkEnn}hcM__fln;N2;+_w7ayG%P$_06(`LGqmtT#SC;)VO(WH(v z-Eh?>s~W#ecfz(2Paai1fE;es@3ZC<=I;)@NUfNE6U^b{NiTJiF6yiW7}AK{?Urqk zwV6F&yQx8;6(mckluSph-zhHb3bO*p|8`BPdsr0qawcU$ky6TxiZ`2mSHxY8)Oge( zpBo{?XFv>i#ocOB#+Hs0Lp)Le6*vP@c#N7=qg5qcZX@A4U``|%B_%YeeP zz_&wQ&$@A-b=HaL)|<)fUwv|0Y7GCNQ4EwSi$nM?B+iu5FMrI4tZSVWK-17^#Uqej z)b|e**t!{R>&DeKT!&Luv$=11`{<@mZiN^$d=tovYKjyk3fIDlK0%QTep7Y^PV4|_ zd%CwO(LcuKG`2_Vo5&qajm)0upY6MJQhK|QSgop3TIy2hCzZI7Z51RS_$R59bXisO zopIaj=;@gW>o(`)D;EADo!=CjWsG5-?B=)3DWD{%bxE3i!gD3@_3$map1-u7Kct7& zODiI7e$X12752Sex+~t&U?i`_Wt?X*0|Q?v9~@zm%=8c*NtJ!xtn;U0(MX&} zMJm`iqkNPENopZWA}BRL3;IVw^yr$0N>UN7LxB{t#Uk5YbEd<2RL;>g7XqdK#KF2q zagpvH7m2MOD!ZvhcCx2!KAI_@`n*y(_mc9p5q$fki{JdqjW;sPV*iYYDSkP#wx~1y z6K)i1uV5jX>}rAZ=dKgsTi+uV8>WvOlQy;G&jIrt(QszF`qgBiR4Z>D=mlw}!&c{? z@J|6{p)xlD$rU;_bxbPbHRU%Z1#W*s25P}PZFXuT$6SAqnU--RNV52>(fn^Ot*4K8 zxOl|D?MXgQezpn!uZmSvUv-*2oct8_jXYl5JPP;CpGwHlwJ+-=n9U|rolPa=?XSE@ zxr}qaD~9sCoHWGd_P8<^jrI1K#t=oePCV?)~;$Ifnr&-!o)u#z2(S75%_Z z5y_g8wQY(Al^wv^oN|$!=Z>cF+=ZErO@DOUzLUk`5mLxGvZ+MnD@KPq)4V=mC0Nv| zl45hB=kP<3tA5u{7ge_F*L(RQ)OcIkqdJZl{Ce1Ism%?^V&}b4H9*+8`K-QPOM$+k zRFZYG0vYHZRUvy!PDHf|R?ZZ9*DC@~NI%v~vwD7e&GQtO@}5Jl>p^ZT?WDmET4pOL zT{IW<5Jj%6(kiwfY97N$Ov0$DhGqvb4cP^R+6M zoNGn$e3-Md*=`SuyR24ipi)(q2aBk-R~qBs#K|)WGB=o$W(Apu9Z{F@yAbE;vMIk~ zUSbS)!>R5sH*2+nW@!jzJ97^hwxC4aoK4tvss6(uQR~vvuO9wFq1U)k+dVR;x<`UU zd@76L8g;Mcsd6 zT$M(ujbdI9((^GAiN)pBFt68P=r3ueEOzwf2qWq@K8Rwm4X&bzYc_!dS#?kF}oc`n7rS7c%6z;Pq@8^nq))>!YO%Sn7> z-~we;zBHuB%bz-%0%%!@L~?5A*lT&~WwO`|8qH9k2ZL~26ILYlNPN}U+o&msX&%Xp z5(|mD`svz;$p3!am7%1ZTSqdTr%C6BCh9L;`{3LYhb0MdnKMJ5r8K>S=-DNd$N)># zRSn+a11k(gaCHND%j+ks@^Xk}9HY3(uCNPzsy8KsJR~*7ZUeD0KBrU9L4ddHWfRF1 z^MXa0pOoDWpD?U!s&tTG00-8eOShpuARm?S{81ql$b+Bwvlh^-<@%nc&^V^XzkT&)j)k{DmLMr(bPfnAb>pJ_xp8m)qO-+4%f$H-*-={{|=j3Jcd>PWIu(L zCiNiQJ|sRauoWBG$87>?%!?%rY)sneHM-01lsw7SrV%zd(;@qd$Yyq2gyTe|?mG@US>uW+@DSkYC58%F&0=WC-Z=A^y8| z>%}-r;QX_N<=c8bvF;DNluL;p2aFe$`QDQb5dP75S57Pg?H^P~d8LvPv@KssV>Usx zATfvd<=6AC{ME(2k0IhaU6d0)BRLIWqP%qc=0S=B?v#B5DNlvS!8U;WS~)awUaT{O zf=!jPDKS*i)#O`fRO`miF^xBIfkfjR(jnoGOfB2%*QcrN!!Meg+-tRecK*V} znrCp0+#~akiQUvxB=Z#FQU#P}8m%EPeOOCw;JY>&j~8y==$7}(@>um27v40?bBybe z{?eJ!qk4!E*?dzT&M_(P)zJ-P!zz>)OoSgz=@A*|@i3)-#YlaQtov(sWZF0_jciA^ zUEeC7G{653r$ z2-W+&Wr;?%7|K$XFb1Q9u@*AOmN5%qh>(3>ONESOL=wu*2s4*acE(a!vSb@;_9c7B zmLmH6=KK2#?tAZh&wI{$p65Ido|4;#l}2}){=(`+nWW(lAdod6$7T3V{hrCEa}zq{ zqfhR4(BS&YfmT~wP^oOODa}wBkwBeY=-}T^J7&9A9ew!5-xxQ9)W^0c6SEat9Y z*DKTyXS7Kr`*5s`P zE5DR$EM758j;p|L@wr*SZB@LB4GI%8e9!7^CGY1&$+NMG{yPy2Oe~(G0v80qxpH?) zSn!E$G{@R&w|M?>--lJdj7DW9NU8LO_Z*K4K=?kowjNUfN|Di_`InPX+fs}+kazIl zD0Y9V1SnzA6i~rS6E+KeBlbIP*Ig?NwiN(!&n{x+s%_BdGH-R6d2%>z==iS~dTg5% z+;dA&=CoBc8l!Ymdo6QNMdx>;!iC`5&9hzUAR~^-j9fM=Yhh^taD=c93mcwGTKj&m zPMe{XT!n$&S9rFn3-+w=?MzN)W}NDW0$0Y1S#hJrNf$$y!`0ro=R|Kw-))+edH=YX zF(8w(^yOypL~9r*RZ~{+f$j#RBl;;=s)XVLj4u(pKPpqyWorD}TqJM1@-+c0h-ypa z4-7UKY;dP3*ZbNCbY3P~4k#gFzSg^ZBa3`Vk|Df{X<3#X!I+(eFuxo4(72gjD!h*8 zvmp%`G=~bsn8W|KW9GZ!x)T?f@dl1MhmU$*hBt?*tf<5!aHMvkh4=BL{}8!@oWEZM z%LLt1a&)EK1j#QNWv}md65BZ&p7TDqz7>!!4;;^FR?AwmD@zWAWKuucZ zO?Q_qSlYRl-?^V?eMpXAOOBY2pN~?oppwuteY@c^;>WI0c>J-Y_^a;Dp#8X+FQ}>z8^fK7I&@HzMy2)_T;DS;BSj*3&oxa|8qF` zd!OabQ9frAP1-zSF`gZu3}RqvMf!$n&KCdhN-{QvobCzb$Tz&2b07asTOuTM$tewP z_0Q={hJfVYum3S5TOGum4$pGRT}u>YiKOVy zYR?Wx3RAvp_a^#6r>zzxQLYE(Ut%bAI7Bt(Dkb?HwJ8-?AtO`zPB`d4*u^8L-#nEQ zlpQKF&n?(<-iM`FcXK%RMpmPoN}e+M%QnYnA@a(GISKlNjCE?OcXkmy(w*su zuK186Dw9(!9_`It(Q#FJ^4<%{cd{lJDKX(kY0opxO)Ej>uNK<8+sKHxuxRwz)e#66 z-#uMvsidXb<7;G{lWKmr-Vgsc6!Xeu*5pdho3AgeXCyu14(!nbna7>lHxs;u9w`7m zWShH03Wo7@V9d#g>L(j@h`0M&V1>j_Lth}9q|Rq}^gg!hFZGB8+i7A#{V*d1!y(4& z^>|ievft86v}e&-bs+n!gWn~_G>P6qO%bpXDka0C{`uQ-*MI@~Rv;!@Yu04WeHrr* zEaTeiqVZRJkffHR%-_e-@#wh74q@dGgxjL$;^n=<6N9IG_s<~CPipbQYib{4^~#qT zSc^FJY9IZ_Q1gr5^r58}_*ZRok~J6299O&X9&o!w{9}Mn8OR&;RKciVr;0oiY6-10 zNqvIXRq9q@dea!qMt*_awVgET$!2Z>Ezgh**yN%*J^E`)P`h7kqwIdwZ=Otq;V}OC zkG2Z}sW2AqASiW>kgEoD@Ej>Ox?)~3qrYCyRJ=l!@g_WpE%&a`es4QlaEWA=@1-h! zaT6i1whbD*BuTqKVJVD&c@u1}8*cKnZ;EG1%qt(J?rWUVhrEAmU2?g}zXh&x`Ej@Z z|92#PqV6^08?O+`@^tFGYn(rRP$Ukl7wOSaG2=zukO{;0zAt6qEOn*4vU9h2;(f|b zTd6f*!KGExL99Sqe~eq;l24mk)mBhr7FG)BWu8w?L8`6#!7b&L>@Mwd@QWZd-iD+( zI@|bB&4u2o%LvK{#m!j)<$(Iijb7=q=!3f|S*lq-6;$8`AeoB@{hGz>>!C?Ya|bye zJYZ#zI2O_^OFcHrlT%-9{s1W=WW_2g%3rR9c;FhJQ=~Nbb+Nkv^_pZ?*Q7K%C>Nf4DxwGbCK^={5KPw7YM+ z00cV+&#warev_n)r>{KLY6b0&5{{k6daL0l#2jdg*5!2^c<8{&2 z78?OggQCkMdfx#oV~e^Haj2pL?d;G{jIq-83QTs+XLYHOrHU8|@=Bq-RP{_V?Xgt z-Wrr=Pw&FRWC`gYmTK2pJ|+QuQ*0Z?wbl7&~LUz>Gks1Y7iI^~1`-r*1RJ zXkvWY*dLj`4f0c|4QQ6Dl5d_{(bPSc?F^TNAT(Yx;H#xX5FhbT{_X}}(oQ3@;cSn5 zaO2T*;sEgc3t9ssVma2(zx^x`%=j8{v83`i;g&^9cQj^0Qvr!n6m^p7ai!4d^ak5m!cm@tCBBI3G<7UfK9%K2$D5N?kP1t zu61}4RPZQ)|54hn^gPKsej5c@62v!oneWmV&XPFWiLy_?7}!d!b?uBuDuWUCv_^(F zS|tHv`|9bXg8E~zh?r^=kY%ZM+B4yLZtTHxLb>+_$6`-^xlHYYh{Gcx!ko!l|Iet_ zjajj~RC6d+Y-@(E&SY`BF%s`icy~>{PC%j5eNqW?V*>Fya3w!ep)?N@eG!ceUjx>M z5g$gY=fTcj9X=GB&hMrfSAP{ij8eUe_PBi)b0&oKK)Yz*8$$>HyLm`*N*iT$`i~*a z9irb^tJ7`D2SGl852Ag$7&mx44lE)pv|2b5cr}|+UljTk%@U9{-WJTHbjxi!LfnwFs^whO@ z1a07P5iK_g1zck<0NU0UN)d=Z7)y=P+&AM&s{$D8rlkW!nabr+!pBJbnH~~2joq$O zTSgI5zZ43(0PCCR>2ZYVT79CCTCjC(c6AyG#GF=T@;3Pcyb}`>1SwowLOWD>c1>pn< z$_(1>@Ob8-N89bK;nsD5#6GxEy^H{ZvQFR#&nY=pX?=u+u)b1S|Gu`9 zu|ip-%PO=LnmsnKQ8Y*VvTG;8FKusA;GQ_6mENFK@05mSPa2o}73@SeQ7GHOMDGNO zK?xwr6clJeYDUQ~{hXUDa`1mIv{oB5ix@$LJpS?8nRnmH#yk+Gt%KcIPj8tM7SJWr z>+JwNKVeINY!$afa|}Z_CjO$feAdWlp)M!E`FEN}i#SFE&@K+cY2N5_5`Y*rjvjzhk-&4uO@(^g4@;m4xG2mVW<<(a_+@d}WZn z(GszICBX7qVT^A{zJ-#6Bpi%BG^7HAI^E)XIK>J$($h%qHB$?X(7`Rzi zNG`Tda?ic-2gS07u~aoCkV+eibsI^hxTvCEvt!4Pz2hXli6`z;i`{Svl;LN#uTtth zO>eo^m@mUoas`gt44vB)xuYx2Q;ORK`MDiOi0dM}`~-9RQiKjWxG-Ptmcd1Xo3gyUX>pr3GHe)e zy(=$LQH_-SdV$-iJJbv)Ii=A^W-Z044uiMiqY(q13S7c)wN#-GrP!Dy0y(QwKWVoN*Neby*0X#>dk{tP#R zhO}fnyjlpRw!)AdeU~}MhQ?-cHny~Q0AYpGJkS0Ws znK_5!ms$nV!z)LTXvh_30ly(0w86I@RJ>3ojssKv-ObT@Xgk4K+o}PF6NueT*59dn z8*S5VeeW=M!^|RtZx*SK$DmX-{dLgha4pQ!&%dnjYCvIb%Ya7DjKHfv0PTx>olJ!V zgp~^HawcvSKI(D(6X{;O%7Y8RbPIJo(QThxWzt+tXe7b)Hw-F;u9x+wk(;v@*R0TB zXoJVwp0xtq4nI^1(L1Ho*Pk^~yZkjoWIm*QM8tjC#D@hL!6_M5QrSLM&spcC$%V1e zCQH*iC-N+6t!N>*X*?ViaCVJqU8+kWr>Og^zZnj(zdyFf!x}X{MQ(oa&9tK#OT+|q zS0^~mFU@PU9ZPBY&nk|;ingAW{q$IJn;{}m@bduI?_V}pyq9X8ZGGIeclP6&IAcGG)e;fPJG{|jS^@LF!y&@?BqG2H`>Qy`(pC?cQ;o!#$K#))@v+Y z5{jSFR-k~_5-B-g7$EH@{x2iuQF(?s)U{9-D2c5a{&v-^o~}tOUJ(A9Z+bWkqp=$- z6k}9Q$gu73c({{{x;O3Pb*U@0KfiXx+W&eu2lgUR0)pf~&?*JG#m5=T7Hd%J(p-7y zJFr|)=VpapPC+;F(PL!=O341(q>zpg8>6})j1>k=e6hBBrKhTPN&g@(jxqBm{?qio zv=;McU?|!Z6J(K-_=$F%-^61-%O5;T+o-WwRxeZ^K`0MjsVv z$oa@N7q7fQT?-+q>CH$WY={bJ(+aIiZNp&+3lO<0>@Sa~v}PZ=8C@ET+^v!H#%#GT zX2ZLE@52P8s3wRH&*FuaaoNjQ5C6;g=25;uCScI5y_}ixBPF*@h~T6J!fVin)#(ju zCBU7}U*oI(KOxGcUZ!A$I2VA}mJSfSBMO!5aBY5g-H0OH$Y25SSv84R$tvCaqXyvg z=S24fl zWIt*;OQ>@%LWyD1ZKqC8M_*N4u@;8E7v6Z@BEUrVxDTmm$ygO_A-pllZvMHnB#oW1 ztrQS{0c?|lLOLu1Hb{~h)XQ@=)w4tMKG7N^JYn5}3SEmt6frz{xy-J=u3Hk?xz85e zd0_VNItboju?;BpeS);SIY7R?$hSx;4a^zE_Stk8L&6|RUj@d$o%e1wZ!_RCFF9Y; zn6vr#B7&2+X^D;5=!tc$_3?=1`)Wo~^#JwF#fEn7`Lpnc!>F_zp9%S2*CNj1zTD`W z@kja6(iJ*FmtKIy@m}XP_iUj6Ul_FETanvKm1-CV36tD@<{7F>%2@-9(pAaCNg~MdcEUn5dXkCBItSQ z&t{Aa-rzT4eKVEXG74Aq*8_uG)_Fu1qp{R#lM}tbaeaLp~`EN6&=m>`A*oF+Xp;3JMVX%?pU9ctC z6dr_pDq1@THG-`MiuN-74M2khIf)z;t?E$LZ5voUVAK0tuIUfvte6OR8@ z-qSNRD=!}s{2#+_-_HdWw&o9{FQ_B}Ul#1*&eliZCyhMo*x=SG;zbu%qCyrZQ-=Ki z-o)HH=YM9os58YYkI~%Yj;BBN?Mxg&P7~i>jT*QrRGOU1m^eJwLZs}F1ATGc&+DNi zvz5loAPb%(=SSWWn|CniE|{1Dz9z(`0O=7Bl@wolbKyqd34B;@_c}L5*4KaH8pl(& z(G+MA>xs6wTCoQ4vD)(>-g`S_h_b-W8S7JpX;!w=S3wnp27D{07qcGzdp>@Q%5rz! zw=xSF?sFtS{V>yqiwg8x-FS`tkg-RD^P2s*6hzR>^B-d=pDn)L@y5h z3TCXn6#7gx&$ZNPLF4RX3v~OAFP*D>-rt(#J|isYpo!L#YAS=NOWzX_7QXfBuLM3h zTaCNIy=->Jl&wT>ePY-m@8M3vy~&_x-i)2b-&9((3GWkVqkM$zK5#`}?$gZU;%r7k zvz0TFYBR9tOMxV+BBC$t5^+NY*{2LB>bv7`1NV!N{{BDuuxnH-tL>9m#J<%tw)z2u zs(x&K@ewi!SBD?DMZFiWUPS+zh$tQ-K7>xeG(03OpYVUmq7I_>|T9k|FavcVsB_jmcC&J}9Z*>kJK%|Gd}r z9TZ{>EHfn|KckFGGqv6=U19`^17rs&SNH9e*AGMCrgYKxcV)UKw-Ff4bg>!!kbnPx z$*#Xsx?Aav#5OuI<9y%a1MvjWS)TBfFmzvZkU?GBlx6fxXkxC1OTR|yR~xG~f=t)Y z>cpPp-BxE-PMNuwQcw{;v+YJpWWm`pl6{c7pu&TM+vhz{l)FvHb>qYW4Atx&Dva5< z=Q%M;B9@qd6wxg@==#2vIQ%isA^Ul)P6P44YKejB@_yoafJooRbue4P200i|g;;n8 zzyfZ4oRo#v-HtE$yY3sv+nV6mbqw6Lzm}w7CwK;!%+sx?#=2XcV__VYCNK)yszW}_ zAOH9oyOH@XP4C1U9bmG4H-#P*&%ld07vEjtW~BEyuf(Xy1-G^P?ZrOb_0!xw!>BqF zy;0(;5LG97M|9De0f((2N6C&qk0^3~62*luEZls`V4{3yRbU059Ag=leWo! zT{qM=gkBImv%ep@S-hYQX3;&sbPFU$6EhAXKgFAb80UWaQpd%2Db8qT=4$?lWb>dr z2UDcYQ!gjT*H1o! zYSg!fbQy~Uow0Q)5Qzyw1(~Dz&fDsS&~jE>a>@g8Cl+%e^QA*$7&(02%ALW}I#?&+ zAh$29_Y1x}D!8+am12{JXgrS!Py-(qe|)QVat%E#H;}V<^HEuF@wHLYx1DaEy*w0A zFK-0q!v8pHE1@xHy*cSHsM`5t4D9{42hDWDi&sW+cI&q{p)(R;@F)VO6@F;6e>))) zNRp+ry+wWL?p!iI*52FQd?)9R5NOvZW4$9z?n_R(p&Q|$dR;i{hdS)DfP+5}J0#KMutJLs`L z$d=UaGW*rIJl^7y5J2&!ZppKHSm+B*JjrMjxolgyo&m8ueA z+k=&~#KU*z2oObs8^GR6j2&B@h*?~$QpQqYn<%HGgOm13sjF<4tc^rJN?t8ayJX^c z`p_S)YHiKM9mTrIYc-*gnQApH$2mg$lF?A0JH!Cu1f;3CpsWo$WQb@X#a z;jdO@|Mp!R_Pbm0K+e|RwTNDH$=)s5!{;Miy2D1lIuvLRj^2T~p!sRY!lepbxoU1B z>3ce3o)^PXYJWWr75$F^KYr%_f8Vp)vaf7$U}&1P_D02IlZ;y$+u02&3F>dew!NS= z{X2->5W4I6Vuw@#U-m=)z3I=V7)T{h?LhJ?ng0qxK-c7x8As7+Vqxh(KDheZCV(pY z)#`k2k|#!(!g`0=cajqzuLUE%xoBPs!H!}ud|G$uq$+Yf?C*!n*~gRREv>=`u4+!! z%nKiL#y&dr8&O~@4LIXTZ}q5xXK7vCgQa)pKD}j4tASkGAzLUN3eI9DPayk$Z}O`gMLB=iZ`Xi8pfc8T63c!9 zjARm4Wwlo_>2zdI)*OZxUtcPjp&}hFSYs$}0FR@(Lkpv1rl<$L3st;v%&Si>_jSBB zvd18#0R2TioM!5bY44ty){{n_?TTC}Bb7WJ#DbT9Nd-z0T@`e5Laj7i@t6cX3jjhv zmKY*Fdd)j2u4-mf^$~Ft=AF<3j1mhA0t8~z9Y%=v=NH(f`mU;I@iAel&SsDQ%atTn zmU;?Ju2bK1+1%^amIw+&Qwac}L0(>6=5UaolYOJVd;Y_2oM}lG8u98K=5}+Eh+mT#7}yPpH8U@#Uyo};WHG_4y;!?7mVC`fRYU1&fnl8 zb&qYo835xH-t&oceFYb@ zHE2u&#ow2BVV)v4wd|W*aiT3sk^6HoWH*-pqqmswlj}?L7JJd3m^b4QINrx4S1PP= z+r)cx$~c{2_JR2ade5l!SKJXHvcn4$@K>DB(&zZIm*avQt( z>{Mdke4E8k0P%^aR$N0(;b+$_Vave!2&xnMhlf_K5HbobP@yXjX^k=*oYUnG2!j9@ zp2A>%bP&@6-$tywn2BomglWWT*Qo1n0)i)uR-mfsYgV(|lIQx;_2m6&$9$mx`w@f+ zOSLX=TmYM`vo00By~~8dULwjbRa{YoxzSj1xpXlG7+7#xbB@x z*TmH>JKask?Oj>tC08ruGWgk}opneSy;Xqv<@J)Gb@ohJP~!!$ z@6MBVm0TfZl(Vlv{loPQ={aMAu5=GBrdd6>MLeIYJ_M6fpl;4Qb%qQiS*mqb0%>lp zxAYjb{IBWP&?lS{t1s9PVf<#muGbWv3Tu3mOTc(T)!4~T{4FPo)V`!g>w0B{(`T2@ z)5_b9pQTA#+b6t-kJk)iWi=lB$6yyf_Pk38F|HHUPFW17-(w8mqlnnwQrpT0*2;i zJ-9?8aD$Ek%?j;5C4!Kj&nC9r+o=m26+np!Sgce1hbQwzf^@rtS*;5%ADyxu8MOcI zzp|Gk0?Vt3?1N)Z(K6b5vh{2SI1nDB3Xbg5GdC!(Na|L|(M_LFv;LMFuy0niWZ1}& zow3wZvQn&n*|3&x@~!Zj=PyFTldCHCYBz1)0B5d~ij!QYKevzl$8cWt!P3X?HT$lK ziOIpe-3xj@3-8@?^w1nwDm!HOP~*q3Y6ej&YT>Eb`9zp;-R8X_Kj?!PzX}1xLFZTz zbSm6z*Qn()VQ%S%T#fxl22f7@HYmYd$6>Vv14e$20;c;-)(Uq&aRJzZ_uD3S$D8hyha`XZwe)J>@xh zFT|sgD;vM|rIaq?(ECH$`s4u1-yh0Z`5-Sgdl%)(;87c^zHe`Q9IQ|pto}6ep8tnq zwXkhVTGxJa`Qudb%AF%%o1q?OydDnQfR!+-efbAux-yT>3Vg*1=XO4I~!j=S1zVf%>vl5GWe)@`xM>-CaS96Dr-@_g{497=O0$v^x z=#IFQn#U|}6B+E-x32H7rqBf$g3J2JW2T<5NAG&`SFSNKbN0|qGBF%*3CIS$0T(TI zJ2Fi|uKbPBjb@_e*k$1nlhcx$145PkSB5g&x>`f}f~jcRaoDKNG{>i2=0)M}U&v+h zQM2$j8rntC+!eRjy@~0h}wO0MPc^~;dactYJrGd8IMIEoiPzd^jX1Il{H>mRP`%_yy%&^>j{m?7Y(`fSc zFJp#VQ~8o`S|9tU;fOeT1|N(@fy8-k6H_m%VjR7bE)ZhB8h!JXZFAFU*&uy!&?a)2 z>4eA}X5-uPQ=OSV5AFGZ+-vmew6mGQi9veWO9?ssZ*Ho#+(cubMQ93G=wo?Z$9}j= zo-1tWR#2rMIC9of!VUcQCLx2+)sKF1n9MVBqRGdi(S5DDg%#YVJlLB>| zX2)`&p#^^*m|xr>+j1l^_4^m@dU(nPYG&=N77BH*J)>UZxknJXx+kFRvj@~Nfipfr z{9Ueb$NdBB%j!ze4-1jjzv%%&MHm<~L=_QKU!I2I6JoIv&z7;QG`kU@x3KFCV(;@kEw^f&B@`X7g(8)KKLx z+`iq8)mtZyWyL`<-0Tjf1+F~9l?j2xe=nKrVE>PSHVT12Vzv zOi@A*?7H>IAR!_i!MO%csd{+zE=IHGak&U~@Zs~Snx7UG``C7>rUl)14%s#;#H1Z2 z#|eXVyyP203EtCp{h(?b1{<%)8Q5)#3OVRLyL;)u6O)b!k*O^OlW1F?gbflvhmzgs z1Hz}L;}60`&6^5_zN?d7?=`X=0d_2-cI2PS0byq#Y3CBxsq#w<|B#1tC0M3D>;l_T zu5n4l*!M#OoVcg}6t5kaYJm$MEpPd4M#+LyU9rU*<;FG<+R|DAm(Ojln6pJrF32>O zliA&AAC+yiYa~6Z)2dvaTYbhXRNgeSwic;F|K)5X=>d>_pED>?WMfg=myx>#r@k?a7I2X&MvsTm$XD?9CMIjIcbPc}@Vi$P*%kJ)I*e%S`Df<4YvV*wf? zfMJM0b|dd4Nttbp<*`|Wm9%W&#R)MOgQ{Ot{oCPCdo`D1-LIF?k`9xucD0|I5JicG=GPhA6X{@8V@ zx77CE`uPthh_fe#0cr)Id3&m+o!>q!hXcfBf1$;-7P<@*h|u`z3FrK2Iu|L#2GdqYIL*OPBOuiUcJ-F&f2 z4H30HyH)!jUbmxJAhrzYWl`6;aAoysfZjn*NCjPb#%{DKi06_dcCiMp4$v&NLRf2P zy~Q6AV@fXT=nR8Y%xI3==3INcVOxjybT@w1SkGF8%4t?IBZgpHi!l79nA49+f9=lO z+pt8LVhfrH-|9}eT@`t!mGUMDkyt`}0dIfCBiwixjZe3oMKuk5SGJjlT6&?}u{yZ{ z=3dH8z46-DM;^U%H?Slxh5vcffvz&xJV-#Jb|bg@a-T-0vg3h)ba=FHPA{ZBXPHvc zI_lvjSi(&jY9eVJg9^NO2S&BIXC)mktm%*S(J%`wQmUfrc@K()I~+1)^yzYA(?$tv z#D$>q(0E(I3Q)YU0!PCV5Q&L#=7Bc15it-FEX1dZtCEv+vWxEQ zW^%cEYY9E8E2i5P*6V{8s$VIStG`}Z^43pcAfJVx+F}JG4hK^d`u=ZiwW}l+Z7V|HS zNd?+1VDF)XS2j}EK{Onx@9=HQ=DLPw7;WDX?mH40?~yu1+#Tlo;7mn+jrR0E2Pvfq9N zlyWci_^yU&;#<}1LHboG$gN`r|@$ zg4Obiv#Wa$ZROtMd#{3dUzNmwHD9%Typ`B9J4Ms_;eqLP)PyC}mkEL9hX+dVy}}0B z1uQqUhju-Z?sQ)F{bcm%hk@>-^mR353)54dqE_YaVcQY&FXW&wwuDYJ29~f4HZCnj zW+9f*0*$psr}39$17b~ zg@40zx0MF&KL)bZ%@;%1u3ml9G+vWrB$M7kudO7*7EHK!F>=eyn4bkj_7x6B@fa;8BNZ~?1kV1$@XU+JxGtZAu4#)PT?8(k z7~ZQ^y^BfU&6l@r3a0A&{mFq&j%VC`s$ZAf_2p5?7zFc%xfN+P0hZTMO8mwh+7 zEKBiwHuoRT!*Xu$eerjH@KgdCmem&aDqT%E1a3NNt-l=G#{AU1WU=Du*AGLaKUufl z>bi!pw42r3t*-JbvB~k`qbUh$W4#!!(FuUOWl#xqV!`b|E41x5G}5;b^9iUir_&V- zGPMF0LsFrjJ#$9V#3{}B+m+?!nZ)mbH`@h9jonL|KP{P4y~Vd+{I`3T1gW-OTHC*s z`!i%d8VJ1cUGVi0%P7pSGSDvbY*4-y*!+B4zF;G3>MG0fDMtHf`_l7sJbhO#bbPVJ z85(p}g^E~bPRk{kS3KcK+|8aBiY6__(w;{!@9KBAt0sv#1Or}B(V5Ge`7|JKAJNpe z{{>C1-)~~-MvPn!9>fp}%!`C8YhP=Rj2)NV?@c&?A9-uhzb3WVYTE1%PT+QWA6n?Z z+Q-jU!nneBKF2eZeR2T922VCfCMswysP4w$7_t(oZWN(x`hIXhMQ3&Q!p@h6V1y$C zJmYQdM}Hnw?}Zx~)l9^>EG7|0)w_@R#wIJ{44q}WZ?)|?UY}4L6ig`^MJ!*KWvsh# zw#i&jV&=g{5xuFJwTwM6HeQPYen5FND>3>dDJjq8mE)TWCXGH_JVSt}&njqaYDzY@gF9U&Z9r^|#s~CTjje?nJsR|p?rb%BIWEvFs8_gm+BV2P z_uib_P7ORCHemE#qHO( zeld&;mLS4bvJd21&nR)aDoIVS%w}v|>G%S!sT0M*RkQcmqHpUARV|WWw9hC>+v`%mo0Rwt711g1A8Mo4(A~_Gv`g8uz#DyA z1lohhLTp04G%>78zhi;nkEU?&{W_Q4);rF$hdoRWx*qokDm@Wt$zwN;qG!&I`#0F# zEu*FQiyYEkG&?dIP0Ayt%>(1k70$3b8x`ww24QRSc%oPBWy(I6VDz7s_6VekwiQ4c zi}r(xNTZJ5XYM^1>F#FygN9z0$CxL2pP3`x(6MQ{$qVHd5xbQkzh?Eb8JgVi5)68xl1y4M3x>K-d*!4gW^8B3ZyDXJT?ATd-CSg zLc}ZqdSi$_3n)@D8Gc;u^ppdkMwM)-n!X+scVmG z9gmlY416vCELV~-jHpkDTFHwyQqV;8qKx19>%&@A#Z~3R=lQ06NG&nz$kD()en-ob ztVc~;M$*=1bt+wdDW^tXerluzf=VAcpYl`$mv;S3*#j@#x_UiIwo_I(44)7qiKroJ zJOd;sgW0@}o6sa%T01#K2q4vmSmhhJ^^N@lutUZ1m5^8#Ioj<=_VzE=!=W7fZAEu{ zdN$PSga|JK^Jtg-{MvLrJFbSy=ki$d6+-%WXx8Z7KryWyD^TKuRqZ3 z%RAK28{p_yDTl;TD}XG6db+fyqX??3>2@?PTF!RUQ*+oft5!I%bgqV1Gxd}XDty!9 z8r3CceVcXW8DVjLuv4S5>oRcNDxO;)W=;*{hquw$L%gj}u&J@8U^0dY^3{RSJKNl_ zBv1ncUkn5J(6c$h`fjd_Z;q-|&E@s!;x#j`QPiku8z7O%_8tKg4YM2X%4zwe;SH$D zR&wpkEBAh|e`OQWz4rXG#yYcc_xD$H@>J=wP3I@zJDgX?|DYcyf}Ld5{%lhgw$#gR z{B+O**OllQ+vz^O%Sfv5OGVwqjB>7hp~_wUeR+d#569naQ50xElwFD(A|=_xn}dUN zI2VH9UL3k1jb`jlB=r)NiAhT~dyHI2(89+-l9X<29Lfb9V2)8-Fjuy+cCBG=tE^_= zGo~~V%`58yhvKS*VeDOT zw%(bY&SD)I);gBe;Q3^P*M4U=n}#+0lWpX?tjF@5cr{b(>>apn*hY*MS73-;Ncc!j zKuS(^ur6JGtrQU>&abqnN_5FCe~2%>GWx_Sr4(RZ`|jrto2Q?(@})pR>I}w)w5(gC z%T1N}uIA?#PUs2JM}`mp42IZPKhyQ;NZP=mHOTQ(d71v+TF@pg zE>xMU+3(vrfqRH@ZU?5Zg_+QtApPO3i#}KTw*8QImZUxdZERXI)}a$fR|+ z9QMJyQ;9}as_0b=I{JGT#5bLMpJ4{ln1LLY4-v(J&rwFtFfzhcl0@&bHz_>k>udA4 zpn7!iXTbRl^M^{?KiYmk#muE@#ZPl2uL3T#@tI{XZINQ%>5I#cwdSzc6KO^ z_)gqv1>$e-;~+C&JlP`r>&5+@ZJ_=4EtE~hLszlh8~gf0UD|B|i-N4|5&p77-u|_E zPO-~hjf=%JT8toFKCil!_SsH`A6?)D`5FLTj(1qx@%Z$q21wBPwfGH+=W$IJ_&Mcxer8Yz;*TCWb8qP;Eon?Dg*F zU;%(hmnNW`7z_HW^Hz4SKvCpa)F@zrc+C-3)z*H;M!g((h#>@8hy!+`vm51A;Vc3p z7*}$@qcV8ZwoFyuBT@tL2#Oj>Sa5LGwwMd!l0^8>OY4N!qnXHV|*oo^reGPsoO z9h{itHfKmsTEGbqAIC>ABmo1T{-`vTc?I`&Ji{Pm5gUAr1uV?&g#~uNkKu zzO+XQXpO=VW_k&1z?iQ!nBl(dPW$BUtYgNSU~YdT9c&k0^r%E);@tc@qFje4SIWzU zGo6*HB?4gQT}2*tj-f)Hqk@I{MHtgc_KMb^%tk^5RWS3nYQ`m%zA!m)y!EY}f4{W_ z5QiKqehTlbcdNr?nmDzWL###lepWOhbiH3LAWcMNq9ciej?uK8GUWq3xHd&Fywf=2 z`GSot+4lnJJ7NU`X^fzv3nw>zWFd@WH714MsuR^`pxzMTNSL->F8dBXQZ?tI^Ia`- zR%=}liPY_~u*-a{kw@7kFc^&fdn-I|T8gU>%^OEt;;sx%8da;cF`*URREZe*1=rT! zXX69?A64%i&i4Pk0i&g;z4xpYwX3me?>%DgU8B@qB}L5|{UC@vY9vN#wN@#D+M80N zf>>=;MN4Wt@9*z={&=20T~}OrCwZN7pZh-Nb)Pa1;p31V7+Cvh5AqW*jIPyBS=mYD zYT}{Dz2U0)Jd^>8*oAQEDkATtr-W!TQ_|#W>E@{=JTlCfT=#9Lb~YFH9@Ns*4q$SM#^pYUpt3-04J z@=a;sdl`Qf3^^c5CGX^+8{ROP8Mb65wVXJ)baycSV_Ad0GO%z!TtV??SF9o+f8R6A{}UVE4Ah`mmr|}aI?st36T(s=UNe_uctF_tVp5)zlK`moR#Mc4#}!A za?p0Nr+C_@`Hsx#^IzoouORsWC-SV+ahMh+TO^O6&hd!8hw%VN!<+ltj6{LWcH)Q@ zWP3+=e)-^~1jOzmkf*@#IB}FU=Y#i`F{B zr#93{fPs(Kk)Uc#$hpQ+m}xy^{8=uJO%V1<#613}x={6o!Q$(ZnNjHjZGDfLDWTTy z0lA^UZ{i(G8cS&jI;al#6ynByw1;ZIa*Nc$hFukouh!XQZTfg9r<77vvkqp6)W4jm zaijj3uyx4yrgP2?>8poCF+6m5(f!c%Y5VN00i7SbKyBN zdqWr_?a!1KO}^X$Mi$<%sWP9BxmqKeXgv%AJ0N~~c|T7Dtga$xm%>ea?=?*YhcM5x z#eNC)tk%xzGog*}^!StN2ak~-Hseem1hS0HJ(@)La3xWF81jvkkncNr;8xo?zif54 zcEpDr-dNE??)yBvo2Q;9blDZ-`dRRBiihG4k`$4E3r|?>+$y2$mkjjl*Rc!FUB5B3 z!KUULm>)RsHPEKnRDf!8hpi6GmXCIqd^^ljJno5p>8ZcSO}JM&gnTmF(f*txzXB2D zut*GXC|? z-aNQdNt*C3)P`KRg<*Rf+odD>)b>O+_JMs=F)i~W9}w$cPIbbloFn~t!K-$YA$CIXY*SDz$@f}&0eV2G)fa^e1 zx*@D6BBq4qdlOXr>1V}SE*fNy+2h5S@n~V-9*#JF4zcX8{VFA=huN6sC|D02Q@mHF z-pd|Km6C&g_Wf6oCjXk*9m{)GT}A_Ah%Z<5v{jtT^brYDPUT)oSBiC!WiGyO&(9{) zM;l)stKF+BaGfVRqM)33l&a#lY4(k-@UtX)m1fEbdGdK`248`pzIueoP~;(O>0U1 zQfGR=QC+Bo_~UEg5U;>WHq>l7N8G96pY?P(Wfz`0rhsfJg=pz#3i02qTBs7cr@1b8 zOE6B~WI|+FgOawa+%w7dl0m*#`s`w*qQiBpo{F4ZcYSJ=6a-x3V8Csy2rydBiyhTr z#RItXiJI$sGLRCDOY#e*;t4(*bW|&0mJr7gtLYEm)&qd)SasNKfYmvPfAlav_@_na ziYY3J5>_G~sjK1(HBK~TLK^p^3)Y)j#4;d+dFSl7KV_T}{fexjRboJQ3l|DH$bzEO zU7XSuPVYXkgdblC_WY_SKgSnP4U`AS1nP+l4g*0i7DlFNM>z~Yn%TX!wGArrhaTC#@OpOGA-{2;fMVItM0tWWMcY7SF#A)(Ufl#&ay95(_0ijH+=Gjnal~PLd5^3nvJ6iCM`p%X>b+<>&pX}XX zm#z5D+zm8rPjuWmuYS-v4<%y9XjPsA7?19kWR+TNzTR*YV3{+=5*}3ugUWnN8N@_m z>?Ek@;`Mks=O#B?U4VF!ee&1mr-oZ#!LM8a4(d1oSZkx zY-COSmCi?DY0#d>AG66fnQutcV_&gGFw8%KX=+?w-03cB@UG&9N7p5%*QXF*rjggmS;x)aA{Z-|{l)J)SVQgJ_r|mxVHafke z*9-`yfU3Z%;W_eOc1^`;c)3+_POMrvee2*H(V^qL#t7 zA~jn*>ruUB$?^SebmAM3S+w6yMr|jxXhMlFdtE5g@LRDD7_vU02P?n3s(c1qM9I`T zlJ04V2d^RB)hXCI2MLv^QyUa{KN;(FdzhGa5Zm?4QDiAis|Vbvy(MT4s4w_!ruz1v z#t;Gd_>n=3DHYerx62Q4eQegW)&w~NBn9!;6UD$3#VWaYbGlu1e3cKD_%tShS6>D> z^vN6x6E27Bl70&~d@i~K?uMGDnk`nuU+MOS7=0H9>ob+ptY=^R6ofso;P$v154iCQ zFq_=H;yMaFT4CTYQz3s=ZyejE>P7R^s>yT>DI4pu>R`!Hf4*<}NUP5NI85`ey%?d} zodB9uSo@mTBcqTP4c_YSBOek{d8$iTJv$8f5uJBqRJ+}~z8jcFt@P@jgncE4-9zCw zKFZWHI)CYb0cxPs`UynTC5+1@w8t( z1@vYjB(1k(lX4>NzgHxkCYCxN+6XO&iVcGfpe>N(%S`M3APo^kj z!xUo}rb&#NE`-_9(|fFooRdT&^q=rh_;T8H0J$sU14rSmsJ!vwVO;lz)Cu`JSvhq{ z^M=IdzR#-;F-4}qx#0qe|HWGIz&YN40$}7c=C347ixOV=Aw3R-`-_@F)u)=1$9>Sg zuB>1>S*vjP^M2r~tjR{UK}GIA`($|3#G2~cVW}q zeZNzLtxop(*33h85aqEFrbMgsX0PdsqiJ7Lg{V#($Ms^EO_W(gpTZuYNvmpa?wH<^ zZnsqd$ri~Et1c-ySlgRBRjahbT&eF4vK|?<+u!3U73XaJ1vr9QEh#u}!$`5-p&1Ah7tFRRLGSE)Hcij`J%{W0tbC7nf5S2oOJ!48J3R-zY_gWMoS|? z@msmeoKGRqdxqztq&B5h$*`B4H7OYRcl39P+}W$#fhI}){k12-FH64{!el@5`b4~# z3-!oow{btW;rqDAz^N;|B8OdbFd;TF%l+Ra+07G&8e_Kvkpg+GSqP&0$==+~p zs}s!m7%=~HXie}tSbw`4=79DjcH>wU2i413C>q2Dtdb_bp4JK9RHq$N0>(}PlI9PO zV{~LWnRv&D(_8~TrQh4OtHRcs8tZ-*aeA8l4iEB+e7cx7A?kC-46IlqZM2X2)l@!v zS6Y5m|IU|li?BzKZs`RmGDlB6E(x z5m-F&mX%TntmoOK38s)r%(D%|I{wO}YBzB8dAD**Qfy>wKT$JWVm9zoZ zKbeW^0fdd{_I}umEN%u7h#H~K%(JzO7@FbL;f$6j4;_f-k;b_O8ALAqG>%um^`Q1m zAF60o@_mVSrlnS3M&3A;p?>hp7bp2hE3fg#QFR5Ei6OaR#STw>Gj}Vb>Ax54-r;4Y zxQcid!MLJD=u>Z2_{dlPsZT}K;7rl*)4e-#I(@bi!s@G-l1O!4qjM)NVOsKLQA@3+ zHF0a7kCfj?{FT2tT*UDg%62%JGSL-I8%=O+=-DyW%y*c-MT{BkicD|9%m!Qo8b~cd zJ;^qHn`jx}x*3Q%EKMbv?VOFaGuN+QT8$C#eGMR=o>-AFNMC!d8WJ3?s<3xw)$6EQ zzWPCoM)_w);eLxS*(u1+%Lkw)aOfXHrR&<*w3A(0zj`ZW(k$TjG^nyL0o5rst%=cq zk2=(q$C@#a01m(b*0+gKyxE-gB*LK5V%7bNw*X_@r=e384G&AzIXk;Bi_)3hEzgCA z-nD?1jvmJK1r|4S);e_&?n6A?f^u3ODlzfBMS2MTwfx7?Gmn2-_uW8II#gEG77na& zWG@SV271L8JK%Z@bGw$W#g~tq*^_P2-OPZ;?&5EV|6@E-#4+HfW!&eXoW5c9L(w5u zbKihs?MG$fHlHq05gEj z*c7GTxL2+OMGz{ViI9#EiPI8O^Z5*bj@sq={S zXZ?Mmp`02s$UmbeeNS>oOlaSi*V=vNWr+MW zK>I=2o)66(`jCmp;=nlr$Uj--jg09Cp0qK`*3|768%r8&HSesx0v0s8siqYhT2-kJ zaF*tbA(~<}^EY5^M+Vx6Fkm%TyB(u?hb7oljHzHDNX#tV;awJ}gaNSfsH*#FxixY) zA#nrnduMb@E{R(ND;7w zfF+}N(^pYoYka{%40v|K@ka#XRF?gj>5phn)R&g;LEkMQgudC*A#++wmJlX6r0up$875YJfpH)=GEOpo_P)_3&SzYk2ZKZjVF2UbG*z^%$d$XdMeZ0^VZcdIV2 zH~0U$Rrmk*Cjk+m3a{coiO!MK(f~(o^rs;97P(u3*Z7s$Vp#A^2B~!ch%H1_W^#zk z>lx8Z_2V2F(=LAV;{DOx0tqcO1jp70L4(P7{@5Gv9nw4pnWh1xppKLOwlM3rQfI(L zKG`(+j#LtLSa8W`<7OO87F^#jMzZ#)BaiMl++tp^BimxRwl`OAU;6dxlj5;f z?4G@XrzRUg$yf1~_mow&VQ9weO48jEX>FSKLdq>f9pcuF{icVaH*%o?9v|LLeMx$V zg&0oiXmQ>W%=U}B&QM?V|Fd2M_+KZU8y72ja~1ny#QLfncO4-MR^dLaZ>?t0)I(h$ zUg#GUC#!r*l*Q@4Vk?b9iA?2+%RH*+ttAglXg-Q5E9emWMR(9Bqm zL&<{ta?N*ILHDC$`TrXAy;(dp+10XJ)vvwD-6<%WZCy!D)yatH1N=cyxAguldRoN-sj?l|bTnHvw~?5nz~exvKKTY_wrQ)g`zJJcn@ z(Gybt2^KPX#e$E7;oMq)rD+FK*QB#zLRcbic=!}_d;ic>N;;M#9ue|H`E@#`JxV9> zQI9MOZ|xA>Cm60@IgFP3WZC9z)rQObv=?pew~``x0q?{d2NmrluC3FADydgGG>x*I zxk5IuzTAWCh3AD5g@PLLyyd|@o^O|A(;!zfO3D}KX=WSXSf|2ZQ3SoiA)UaE7tkaUG+xg?K6D;?eoO0w#IjU*ci%FdT>0p&*tB;tmYd zj6yG&i6lgR3fR^^Gdz{1;#D;~4IW0tKD%Z~Ae8A{~0)PKB zlg4>j&uUY8JwUV_>2nOp;yxOl3a{9{)!;BY>1sO;Vaim*yE6^ zMW0lR3mmaHhKotvUX4HD_*7{3OW&Gqyic-a49y@&>ajDLR_~gpkEi03%#`JNH+omd zO8U!WvlmMjRI|X@+Ox#yu~cw<#eDCC=7Fa#+~oC2HbxGLL*bQs@csJu|7Et!Q!x)B`Ic+Xty@>r^)VWculsR8!JD~y;iv`9m0rr)?Eye zJo=LNgnH~wA?(}M8BX~v@BbbH_=XvAs4Hju{w)FLwdf&6<<~eKI6Fo7lVj&|z?K-N zw{_!7izgm!H$g^bUpeZi7+u?@5ezG-IvQB{;JFg8xgQ7ncbM4{HTJ@~{}mlvn596sF`@COiM7zuW2UD(R1#_;2dljR_jM zs~nHpx?WjvzF4`ozCm5Jp?8k1m7v&Lf|bBZTz{={$t}U4hE%ESBXpX?k-l^7P4hoB z8Ck9vgO$2Dd~y6;mts!W5}GvI4)nTwT0>zNhN7IzMiT9^baZ!#0dh>1F>e#%m8+gk8Z?^=sDyP=q zTLPtPrP1U5Y8fXEQ>V z&HN3ww#>E~$J8ZUKRGoIaLiwkI>c+-d9Yrc`d=+3MjwwKG&P%7xkJ#FX@DBKEGn3| zragkr{VyV&um0&ALjM9MCAlBl*OA?DKDvmP!>=rr#0DOt8qTX^ob|CHHA=A|_4_y4 zJ2>NVEkkF-Gkjr+!`!1itH-MDaD229TeTFP-CdD>^OOkFEF4Xj&o=0OnXx$eDZnqL zaIdPBTE_TvyoTvHEp0%BOXKn$JBCbgt9_iP1$~ehED?tLdN591t)J$sbEnypUf|Ql zt0)+F*=ljD9ut9w3>dP@$`@ba%OVVQ5WKZd9=(@I?laDQ&|d>xf?}?@FO^|9R4ulz z=aygqNShr1bR|po6#*$RU%Eyg9{{Nz2liEV9#a_q=dj6BAdI>c+%rMz7mz%dJAXV* z_QK#9l{bA=5Zw;UMJgnA{ncwB=1-f2g@C{vML8?>Uq$>;<08 z<*~kCAQ+z{cleT%ZcS0g#!c`FC4^e;-~VuHqMBWl0Gfw}n zBsfkT2|TnuhweL{>&$97@X;atxM?rnaqQLSH@iG$zr%&9gI0^_Yy-u#l z7X`+r%kE2m)7+zB&bEG!3`y%_88FyTB0y(G7@rP{J|`{6>~=a_}7hqw;sobg?Yl7 zgH)D1GDlfl&-yxqTXUW*Cf30P-DITSEnY$YK$nuE?OwUG@J-a>}JZb9LPk6dXHWs9aHBSwe^ZR~DP2ZaCEgZ`$!7 zIDPfOGa?qhn`AesnOT=F>%19SB^)O1ln?SkaP@SHtes#nKWoZ-(kurmwN3=!g(6z*DpLBH6LHIz(phu`Xh9uC}JkyA&a&(*bs*LkyD%= z$)Yc7WIpJXj6IB6$mUhA!Onn8W%hzO`rw?;Q<7v-1_W$ZM9{J2D$fWl;>+$(aYA2I5NcsmT$90{z7`Cn=aUM30sx)Vj!w$X~HN-G=MCu+4BA{3t<@LtLPGk zp%;_!>~tcgg?D?t7)TDn`Gv3kq&L5pm5|5FRy%Izt{kw=(9*6sZ#pUU8=Xo#7?HYpU&elE{AkqvybeD6}0e(^2CdTyYt%7M8LKjx*wTOFq>|@ zQg{k)$q@1cxZtxDidp|f9lFIs=@O0JxQt48iu4Rw;c3d`rvdxIW?{(k6YOR(r#$y1 z_pj?ne1)HX0m<^PsApJT|2d*7`wB<{>BYAMeaa~-!F`!3zsilIYXyKf;|I+2S7ybn z7qsR$mTdGT|tH{tdUwU zL$mI4OCa`!icuue%DF2ihK#JNWC*2-mcMUUO=>SaQc(1- zBrL4HW_0t8FJ+l4zgrK<&4*h8?`yxqvBv`G>~Z%|r&3=De7v^LQPlwWn_TBQJ1N6t zai=)9So*^?_nR-V^f!^P!kuGl798H!!4snU2M^hruRT@NgaB;l4{r&B9YVKTWhoSMP;{6S2ZkB?WnWUC zVExS48i|QQzYP`|Px@mEbi+7X(W|j-*d54Wm|C6koAQ;#c&dH?PysM4ov;;3V-Sfb zvt&D)?7UD3P~Q6WKbBE*OE8lP6#LLi2oQ;5a(KU^{hP4f3 zzOpztHt?`B0&l$-LUncq27O!JYyCcRg%;eG$A772pYUk3Da@4q_VJp4TV3Ggf9U*Z z+EuJ=TQiSWA)jAwgSVW?`uiL5u6D}=3dc#rAQgRKw%G;LOp-aYBOve!e@{xMf4Lwn z-^At|aw}3}25$B} zmK1u@RpMBkWF>({+*|a$Y+eyP0v;UT12-VIfWRAB9CRDMa^)=JtaETpF^*r~y0OH? zWeLG8g6q79^$&^6?lpc$>m8ZLWI-_%gVLROgI2xz^bjEmo;>q1R_);4n3oe2yHYa0 zmidYeB}gZP?=Z9SlI}b~Px?`Oh-j4ZVl)h2v1EqKdvWR-3z`-xmm3`i7XWln?N?u+ zMQ}>@(A#AIHD&OmluB`F6HZ zH9i|!c}qZjQ(~sR6nG-DdAhuH#ogQoL?OEWBEVNF4*=~w9e{WaYs=4ExdlAY>zz(K z?619=>;T`LnB+|x!#$Ha2jkcZg3zc6H~Z3;6U^o>&m=Rb%T8ZwP!C8x2^04=ibO z@Wr7g&U6)Zjk?2zZ0H`Lxi4UXTz6$JKibX)sXG66*X(%LBZ0&36VE%NCsx+^8=Plu z04(dlOOULq!ISiVj7|%nnRF7%J5Qh{bPb37|KhS&RL-643SI|se`_;q^= zaFm&x;OFaYGZ94D@a_$NVXOwVu-JJ*_v(8)w72yEl!)T{x*G85Qd-sKdFMMY{rP-rhj>p*lC^mnwTI$CINA(9@YK6-|JH7()RK z0n}G;u4j{Nafsfm8UeN8lm%PpD$V2T4oxmB!MG<%f|zR%JcB(9rhH zwQ$w|$`1Tn^2z<@s@jtw4(_P1!_>sj@4sva++SSoRH%IiEL+$)?!W9usr((jC71#T zxbtb1G?I9RTRTp<5xSQ>i}o5rV65UYq`J}^-4hQs$$T^^B&Py4l%Q&eQSPj*X>aPy?rWRy2x%z0*h!yKR3rrpMz|8j` zi!IOkQe&d@zhODCmP*D2ZEtKztNxYNK{7TitEa4|PvxI@84b=*laBwken?UK54~++ zO|s1D6|sM4jdNO1C@C40$8*;C-&CVNPuFgDpBI=0q6NlV81p-S>QD)4{hPWb5eVt} z4^jVd8g9!ifN=fr2ioN)AU-7tW8k8139vE~%~d&N0}?z?LAdSoZvXOSEgdOoe$3G| z>JUBhxek0S?hSg^pcWOmmQ6cx(eU?{V5t9Q<~j;*eYJB8HFCdcxCunfmP|qy%&vGa zW2ojZSu*T1Nj%8L$o*iOE~GFS69PC~Wbwl5HGZ55(=EGkYS+Bx{bp-nmctmo5*+T@ zeMKV=W@=bdTo$Cwjp6P10Oj0yiy}WEGaKkSGM&bHThQVuxM)crh*(}*@9domJc|cx zQV`3#B1D6jE)+r3QtH494n!3L$gRPm-?`JCdOw)R5^UA~`4|^O<8ve_Ezi>sjt3GU z3_6lAL6f==xN0x&>!SGVS{teI^x@-@3A%$5?D38B6{~HT(9R8O`Nh_?icZ}^5Fj_J zoH?IodELAgm&dQH(Dh0co@e`1NoTp0(*&0oQt@YK%Nb8j9)al|C6Ru$gF^=%M)cQV z9gZ?xS07Ia9B}c->|%o6q%gq+^*75G+v-E+)-!#9cu`Hlw_LrW=oPUTc~M#|k%HN` zWvNY?3r;WPHiFLFqm?@MBO&;<1^2lZWjY~-(74_gnss%!mc4gSQU&q7q{+LN+Ww?= ze>RQKn~{}wP}Ds@Fpe}1U~K#SO)$lU*u8Hybq(-J%U@B&#5u{1Px>ldUgzn7$=Y z|Aq~t&msQlVj*r0Fe9NuXPwWl@X2vkgVUpmMVX!HtiNYM8`tf(dhPzu+i*U@l?+2A zLlc;ZJuzZ*Q#v}!)aqHyaa)?LWBnIwUM)ZF7j$WcktKfZr)3Z<^Rnor@rWvUcijHv z)8a&kS*?u4ujDh3B*)@X;n>_Rd`Hy0=vo3E>a74<0wczyysspVopG^X9H#dPbW1m+ zN__9?eYfJ@=A0_ygscz;sprRHwh684&@d{(6>>Px90K%g?$iD&lLnwczztMvP0*!S z?rQF8>2W;wX*MdbqPE87iF;R`2+l1k32%J5p`TTe=)qQWO4k9pNrD4qc)BGvBB3u` z5*;+}?V?Q^fBHmNr7Nw|&DQ+b4r8Y;9IY`j@0gq7Sok9p-HN~PJq~IyuGjMUF2jekzQJ9=e zSJ>cA2{>`Q=TKiAy-7K`rk8st(P*&#fa;$&+Q1E!IT^SmL*|-MiaI4ZxcJ{E`n8CS z_`g6Nz?bU-hjkK)K}O=s9b+T&dFJ=%zE8V0`ikw9sKKL3_Y1KQ`Vc3+7#+66;$+lu ze?yuIy*bu%LAqWvOV_$xINHGcCVBg_qMD!VzwCdBbX9{-3oH+`hp%JQB9hCEJtg(I z?c-kh#qdQNOe1Rjxb^XIg0xTzGE79h$ zd)$sEHw{37#l*gV?x1SRYhpR{VG;*)eZ}}7oF2d?SVNp0fr|n_?VPyES`1&Tr<;J` zEZ`2UsW32kz!UDOd~KHOMYr_gBD~D=Q??WO=TS6^PDXz@Sr3`l1p1T)gD8LG>#d8v z9lLL0e?u4FX>iu)Gh{7gEb=!#dO~*y?hj)Lyf*su5@Ho6v_XxIz83fF`)~;RYTkxh z^D>jn`tU10e9+M0h&)S*%!#Ld*z0gK>P;+&!qDkm!*WG1?8SHB#4X|J`Fmu7eBEeS zj@i3V))*PrFxEZk@s;g-D!R!JTPNpRvv_%cGB}_0UvoFy5*VI>74-oTok-=^Upz|z zF0Q~8o*W^Y>^g!Cll~blz?>HAK8b2~pTo0+rVYsw5@6*Vq{@+cp?C;O!vn4=N}n&9 zV%onPH4o{%1*>rR>|{lcTf08PU4pX0$@Oy^8M%la9;U7g0`(KA%{b-YI$Z(W_8zIy z?F$&s|9GB(=o1`G3X3bb9%i_qJ_nc$6^ETvF>xTjNY^X@0SR)Z)?{Zwo1z{{ zQt(w?sv{Lwn)F+$e(RC_FTy*X85zZpN%?mYmnGU|$JoENj9(?Zgh1 zalaN)Dax(lK8QSG@?Rh(@Fqaz67>E#wE=p>v*?I=9a%d_`R^Wlnf8amM?IQR&}njz zC}6Gt#9+iZ^r$cU+WN|$rZR%01@}3Yr4u7F83uCHCSA#{aWF_W|B7bHiw%>6F`I!z zUTSwfLl;FA-e3sr<4vm3-MDq_6q??-M9>q+TPLyP`jjG=iF87@s(zU8QSs#^{_zxD zql^@e4OXaJFT)wD92`-o`~@47x=&S0^E7%>1z}Br5fn7_B?g)PO=JGJfb*ce6nAL$ z5r$RM@B9HcPBt)Pc$n_fKhCq!NBwX)tfde?kii<`JcG7c3K}d)!PrdTDFL1eF!(FK zTY`WsyDWE>>%hbE8tVn1ojb&+y|l}C;O*gB{F58Zjw@D9|7cj0(Xq_mYtVL>j&b!jH-HUwx{W;L6`g!2 zCif?O3$ROv?myaN`>R?w)-CR44nYald|@kDfwzOw<{fC8?`L;#!D_it0Ky$nRzU zkq=R5tN@36@{4(_eKLuM#Y5w{D6%TMk8bZbR_4l!>u&B+BhEWJ$UtZKm+Wt-w#D_| z!8>MVXnuXIE`?GI>bH`_@~WTL{_6hq#5Sy<`17&OFXX@2W??(qg$un1AfI^8LlwUx$u2!zBRn8C=?ThQDI6yH>L)CgwBhsMel->u)&v=(< zLZm>{{d185X%6EF)V*x$L!*l%Esv6{=Xg!(heu6o&j}UA?*?P;ypTYPz4Q1fnMD%6 z`J+ual|x60naO#>VcoxoZ`);|jF+uUE;=_7?<$Kg40ynd8+S%sNVQF3SxV2U$%xb< z^Z!)NyQco=Tx1zY^^c0DiX=-{oP2RIy5fxgdB^D@#c4GuqD!30|652{tblpEdWvF{ z-Sd~n?47UguUrJqbJZ_NtOH$t5Yvy>VTd9J^)t>pOdm!?mR&8w^CRv-gGZ)TfR$cc26erE#{ql!L|IB)cqY=q#S%KwCX?s$eGD7P2BW9aqY&>h{DvWB8??6S!a7VQ|NctF_JIX9Z8rlemH? zxMlxsbTG$)jzblznH(538_-~tHrYTU_rm&MFdG5)9J{?WAV{{{%c_e72<_75uH z6}5XoO1@H~3qgEt`~?e81H)Ynd4aF^z=J9Wgr%ZDgRh?NCo@z#YZi56!@b!zoPk{w zGUXmVI46N0ZUie=A4>ehc;Wi3*V zroUKA*+&>nVX4!)5P{W{%$$}HMJdjUT6MNP<0_XcvsMzd9@B73{7=4#h(>D=RZi-2 zPimx%eXV<>UUs}0(MR(tB+*iTjUM|ucCjBag-^@8ZTXr>L-VLMY|g+)OgGT_o9+kn zV}R9FA3!H=35s!Xjd2KKN&J4Q%5T>^#i2tu)zfRIw)V4!R60cg>y56eTuk4C@?UnZ3P+cWG+cevMWu^`1htMfS0P(IHT&^L|wJWj%B_ z7A$&b^(l)L>wY6E?mT}zUgLI6aSg7YQOs)NXst1b<+vu1E(Eo7a)|F6h@qMs!X4-< zYAhELX*R=XU)T7fA9-KsXi6`sH_U2|wH^9iVCg=HZH=BX`nqluM19Jt#R|Ig&A&ED zeOijbxO@#U<^kQDuFTUazp7u{O|xJo?5jrHot)s8^o~zo*KIIw$V*f-tjn&rb|Ayb z>wh%ZI|fcCzrTTLq`EZyz|}||$*<7J(il(9uyvcKuU-z6F#5*-NZAacsV0~F_%0o` zGv?h!>3pjH+S)yFo{~6unn`q~QJbjCd-!L-_tu_xZR8mXiO4#}04yul+oR6eYyDvb z=xYJ&XRBHYEXy*kobA(J2L&nsOkW4cdU5DL+|spZYYuixK*BG}sWvsWi$=Z*0(Y5} z32hy;;K@114KkkBYlJX@%D8HrkRfquL9F-1>Xr6ibX4ax z%Yw_OkNG#(Rl#2Y7lCXQ0MYIXtbsw1lHrd2TW>uLdh=3P7#K^!Jqb9e@PGm9;g;u-M95?{{}db5!`2}<{KFFY}0zauN3Q^ zUB51q7Lk?*K*lN1K%9M+I*nT?ge+HaM`kSdE!g9oWH=2g6bn6J#&@~4$t<(@O`4Ed zHCBcOjEl*Yb2;W)LMNbs;>l+M;~eCF@PR$JMMm4M^+}dz%4+zoS4hOjtTo?LuUB&uxfk0mst%T<)@42XyZCb|uIR4{ zrvI;Jtmv_`^^JUaHXhN*4KxkC`kJr~it2^Nz@X6sR2AZ*+GM9eX^nzr8qQZT)97J> zXH|H@LeW+BY-N5sqawt`_p7# zvPWCMAm6JH(OMNkl-snP_B;ziw(f1L^Ziv&sw`Q;w+wB6-up{uOd*q0;ts}d&R_LJ zy^d}9c3x)Vm9!i^^c!gHCdUc*P2QJ!$V!Bf{OKQ*m=P~W&HF%^kBqAMb{^NpU3NEu@e(N< zGC@v)M(9I|cU~e3(j!lUzpL~nX&-uRx#JYb*XI@!aaDsc#B6W!tZ`@9n5na?<0 zyVrlefH7FeuCDQh+pNZ@)W4{AA+@UjFtfdaQ>dS|sZo+3voo{ur49{OOO|){c$rUr zvlcJLa&3}09q#l*P|9K=mGYo$k{F?Ur=xWQXxb8+$N!DjZdBf)UuK`T<-TqJnB%$g z#YOg2`MEV%ysE1{BD?1p=q{~TpsULSGz4boqhazHRC?ijTnoz26g}T<(a zzOcuqTrDb-3U0OUfQMVtE{Ji{7xr0_k=*miuDy2gpjWnnL}4 zo(8IFVA+xsn3@^dad&qqp5PRBcS?`|H<04e z;!?a=@j&R8=l#~oujEhGx#pTPvuE!;cbO3WDbqdj>1INU`M@6TynuqF1D#$D?>GRR zm9P4Js#Tj#%&B^-l(jbGF4C@n6Iaw+V^z}XyQ+nNaWTtKzy^YsE#m27gG?R0JcYlb z+XwlRY`{Sn8#(vNAg%S@RpqOLLiy_GQz0ad>MBW5Mqa^|oQ`BvitR;X;ZolD`nFM> zwUxOHPd1Dfe4~R#ITJJV;1GHgYUB71te9*+)yJd5OSdV)VfG%FInl`3wJzdOItJvtW8!s;WAf*QGA9b zklAVtj5WgJrG?<_3jMByr4MWWHLya`wp|B{DS0K-n;Y0HizufS$FT!bB)oQE;;UR-6W25oVy4S8*#U?kQj744q~W{XHU{r*CT^EG0Vs*ZSO8+{*Qs@`R;Tx6)d{EEc<$ z^KNU^80zwS6Bkq_0)!GxT_JkhoKtqPRDt<3EJi`<%V%g9hJ^GLqPm!8Xb~@$oDvG0 zIpB)0Xt8tlJomCR@7w>bq2A~?+yRjVaV%pt$^(LXl1sC8DM4bti;w5EtULs4?gBU_0U5Rbi79fZW)hV|#tZ(;T1MyF=}4ugl>s zebef=l+&w+@s>gu z(P$)j8y5gs@vos?(9-D<0uTRDEP-R} z@x%J!uo_e`FLW=dw2r~JP`b-QbC(73C2Vg2?K6RufLv*YQi_@46n$!Ya}jia>`U;B zeO2YKW{E1fEAY?5gZL}(BCWQ2!488BWC)!+mb2T5Lkj@RE)3?NU`#)12p)`>?ij>Gc^&cJYfE zjJ8F!b`!zCDO`Xdo0la^Tm#XvQMK36GVzEAsR-Js>W~S|CS=J`K6?0%>55B)Rt?q$ zRSlMlWD+d&CQ}`c0tJF|XZL1RuT#NBab>1g2XX(A!@mtS-$QBitb`u}s z4opqA`O7TSI4Jh4H1mka^N79`@(*b~=guB{z3~~=+{Ec}`k8q1LW&ntC;>5@%Vs}2 zE^m-;W%uQD70X%CJ46d8@*HODuQ?N_cl;ACRhDa26^$L^(VkWtbE+CwGq@y z&}nWKaKBQ46%XOj0T4-Bx8vuDxmev1O5^ZIFxzovVOI zN$D2Tt-|72&#Sz941bU!@uUJ7fmn)6&p=6^=#eDZNN!8J%$NqG+X z4TqLgrUPHh~_v2?cu5nf#f6#)a2uTv1E9X}ZM-tDkOUM1P ze@h)UoOjM`3h(|4YirJzN5o{i`bFQ(;)+xnZnyi#;OWc)-z5bWqIMOp2LOK3gy#PJ}zdGH8U!C8vxmSiNpFk!WFcI?yxN1P0;GdiY z?t5vFEmMY(o=_pC19N@DT}EzfP&`R|PC`hVHBXO3X2pBcu5)MGk2bc=Sa%ZYzw>xs za}Z|S|0%o6tXBB*U-LyFJK0T5sXHgaNbd4Xt&pW$T)N>Lln) zDMuJb9U@a9_?JttwV0IwuwdlHtNlAwfz$~hzVg3zqG-pnbe4D5s|nedw&tf&=xZ;d zwE2{|MuvX-o#Q3mcL_SnMd@prU&mNvs+frVrN3LV*^c?9e<))p-ReI-*CN)N>b^wl zG3|*}l;v>d3w)E8YZkB$4KJbU2h2Q>?di3iRIgbBwCSaM-g!K`Lxxf+?I)NgK4m1v zMwjSVIHKAA*uM2-?|b=C@(4CK(OP}ke#rt{Bkb?R(*~j^46|qBhPEpD|JELhjepd*#okEOz80Xt(Nc z^r|U08eSRYZjFJdsujVNIf@$+_U~;yLdHaISny>RW zO%QQ(=iRe{T%dv)G~cLT7F4+!FIUe2PKu10zU$ zoDzpSTN8tu_Cfr*;z?<|w}+a97oT9~D$AmdyXAdX@cXiw-9(EmcCj z4Tqg4kMcAbAg_{Cy&GA?6EvVi`-%JbIT^D(N>m4*E%qi{9$@lqM4aye2j_3F3d6aW z>GcAEi4yPKF629!wAYBC8II{)#BF)BT**MEm=I3iEpSJftx`pSoX6#ls{a>1RfA39 zQg-U_bVJ2tRU%}${CxT(w`T=II-;GErD=~~bJdAPsCYsf^_f1}dHzyR=2np~Fm3PL zs~ZBAw;AB3wGjNHOM~iX|0RLcse3)KjCkuDK1W@R|FVC>_louOe`U%Z-1p7`w!KjQ zx?LISdDpvrI)%7)75=AU5w9lPWiEn?iqvk>u>tsNT@C23X@DtIEmo-6<%3i!g$s*a z^OY-9!;>3%B$2tspv4vYtk?p8y1ZBXnhAnnIy?_bPMAVWJ8EAxUq;A%Grg2Y2$SY{ z%k&Qt8_QAC*^I8Gg-DjkKEU+tRH!5N{8VoH#6fv!J7&-X3MuZf${hUbB8GeJ3 z;o9lL7}Kk#p`k>$IR^G=B53Lw^;#Vwqrhv*<=CGV4X=dtcsC)}Yk}-x*Ya2D_yGfh z5HQUb9j>*-*Ab*|Jro!?w%uEHEOT0zdjF}2b6(glTL`|8=P0E30!3?@ikJx%Oq1Dt zcV@!o23$Ccgb^;W`hI9=7@+8=Xr<{x3PN}3EBk9wysaYG1cSAR{%I*oz%XrLk%sRJ z7eSp^U*1J%M}NtWg=nL6k* zJMXn^3hqCop_)9M>Fi*rM1R~}jbh4OHV=_A4#k>b6*QnwnJRTjk*~-rAhmivORfCN zHE)dW*(+{4$?;CHee10?$(sYu`KTSm&32_sWstvVq4oo)Y_IliUZZ|Cz+a_45rS}0PzXL)8YRqFha zT<+e!0L>wn-bf5!U_J^LVQ*xT_LcCx40IBxH2e9l8FO_vEWJTH4IwJE)0mP*94P_Z z^B+ub&!Tw_uSD%N za`+5Gi73&%qwxniO!49|`4Cb6#4#O?uH4{T!y_NqKe5;x~WN3XJ;>wQG&23nPfy3{XCL9*U^n@wPA zeXbM`)FD;oWIWUUkfW)&U;lm2;9B9BZLnW)>bnuq%n}OUBQx_{l~7Lvm&rCrPlqI9 zE;#fMmk=TIy9B1Y{Y~%tgOQl)-{t!lb5VM&RJ_*3N8cjEFO=p7`GMH5&{E$rTi;OA zc7r4}GWK7WxnA6nu;LuO^5&1md+#LTHP1!Vw*H z(mn#V1lI##O;!fC6C`!!m6-3(-p4i1o_Yr}%b#cA%BU>Zwk0t;8pt>{K+c(kCeOv7 z%TJO1($~cOe#Nmpyj@6Y4PMj4J_&@O*ndD#GG-3Pm$y^2rq}fC9iv01I{u-X2OF0p zgyLh|El|5PA8iXvF%rQ_jf6XH-z6M8I!qU3l?MraXI%`368dInS6b1&slRySYPH3u zW30UCE|S?7(UO(;A2zpzg9};fR4;=!-tbC{?OhtxK}3)cm%gvN%{^DI5}?568?d4S z3t=~2NkRpk3wtIm0Q58mW<61z{nXjK=U8IG!#&H?tNLZee{fLO2tP>Ds>ps7z2Epy zDu8Z51QErXZfl`_=aY=b>;u2%Hle!oz2sq@3_N-u3BbPa*S=ATmI8&|kaO0n=*uK3 z(c8Nm+)5TxTC0+lt?%0FXMk;F99|_5aVmVf{ffvAQ-bxc{(S$CaEf+?MQT$kO}k1l zCgya%IHM+*X&h`h+?Jv`=zyGMa4BY**_;>tH@rBu>eK2vQ#+7$)O#$v7j8LtW6cQ|XGJpT6@n{PIO3LFba}*}Y{N!HxWZ zNVKbq2<0LIOR7ZBJ*vQa*LOk$RR;=$k-((3f!+y0j2?^GjDgG!_TO)$cQ$Z z1ytoN?$zvX0%?}#UK<*Fti#bILJ3B}N_BVXL^-0`X&7PGod1xdEZIyV;}0cZxucwe z(TOEZ*-wZ>%9fw~71s#LLuC!va@au&7u3 zk1j&~M?{}pi75PXLgj9ScU~>atUVkAdTCS7o0m2@h7a`uNPB=L<1=jl>>&X1~Z8aQhZPU7jcw`&mL=KM`wnvs0n<;*TGaxd4_XO{FlV4HaB^<;tQ>qmKgdbD*6O-w-?EB|UOvdbS|#^j^-U?A-^CxAuyao!FqZ-*q1iXN@?GOwg^;q_&CXa7IE) z7aj;8Uh5x(n_5UtQchNkia;Pc_bq0ruwS7LPx$%f_C3jx<%O`Z-!62 zBiU(;9Hm34?1dfhm;HQas++wLO1^D0PR+rWY$A~C@}5bzNsiX!fRU?Jm`kM2JyKfx9lfH`F*dRJ zijcB|gYTcUk_&WOx3?&Sw;c70!fr?)VcRE~uwd1{;}qAm7h??AsNMXczA4nvE|4Ft zWnS^5`(}3KWq23n0H5s&aPlHqQZ|Ekae}z_El@opKCHC^gtj@+VaU;yFK|YfZd;~< zo-Pnp`DuZE$bzs?vB@TLEGDjv-7@D>1l3{}Iog-Jl24mL5Kg$YDw&w!MyX+~0$8w( zb>|}E*V7|#5p`o(I&)X5B;#RYq19ptPEZAY*g`}m{1Ks~Ku}8@P6gpSu-@=Ld?!8D zI*9!R&|%uIh7tuzO~_MvjTt8t9W_>>$zC-m!n$kPnXbw6U21g)sOZlB8Bd$&pa_)3 z)otyZf{d!##eSOXdu>i?WPu&IPTx>amIkWaJ0VP;#oo)+jd&EIaigZrwP>*AioSlz`-BpGMhJY|&c&{}=n_khN2!vw4htw6 z@^&U+Z|GxRmh%}#7qHdwtvd^jrBW>F-B8D7b-7+MU?Nk3-tmeWWYYPnhz?r!vntNk z9m^6FX(>I~bwi{hTv~UP6V7`rmwkQtrkUTI&iF2NG3nAA6pMeTj0}h=SY>nk)CbY^ zmuEkRk}7T0c?wB5xVGAvEP+!#00T(H8lST&$E7wbIu!(lE{8hr9lp?)#h*35n!zoq zWG)8t5jA}LLh~`AN7Yt1Cc71wVNCJLoV!nRJfkzJb<+AF!mk6}Ipb|de4}=jY-`Fe z!vJYy(3P`L0Sqjm9?QXv{860IC!&n#tsU7&h`=4k_KM0W>ft**g-dmYBz<8&6KCft zn$*=lQzvq*z5P`Dm3LoUQlr8)haDOmim6{ykBnoCY%~OQI^6XX=#)UTmjtLUx`^%zVMpx;38^;1Ew*U4~nTXcPM3%+P z>XyjxPYgUPHi!@^g6@Kg4gF8$clPh#4@acggfVPfC2QJDM!~nKzD6oh`rf2SU9c7v zG?1M}ozABB7m6WS8WFC583x9v3C=CP^#NK%jre@gsA+)8`Wkzl;ZPtD*<-HgKrAKw zeT!#YxE7%~iP)DzU7yx(+fhuNX|#$zeAP6r2E7cw8jJ2*0MXdABII|CCk1kJYx5+h zy6)Gv^xCFyD{YEYTI7l_f6~waZ^#F3Ziwdjrr#CM<8>LN*c}h6S!F*9KY=VTP98ti zYX3vJ7))t~og>Eoh^p$YR=fVJcFW==eU5QOw>i9O9_EQR6n$s!D`Z3>9PLUWbzFZbS52m}6t4T0#2jcSi2pEX05qdk2+xs8pVVz7LdSJM2bf3p4_m5MB3>~ZmV3#5rgQ4Zh_fQj9RM`qWLxVSF zi)t-YfD3(K1nnARi{?pEi2Y3tGn8NB5?Wh&;&y;ZyDH7k>1Wxfd7=P!8-$efDvd2-1%$;XAQE<@=yc5g0 zf=4aPPm;Nh#4)ETqUjI~HA$m_f`tEjwWPC8`VxCYW)*GWxDxTvYpL=j(8n6bf-*9t zpI5?4UKmOlVJdySrq)|T-_IPh6i9JZ!20*kDeZZ@a``>t?cZB{_`*|sZS=JCXOu8wtBNxA=8~WnAA;F>bnLZ`H=K<5gZ1rsVp6`H z#0UL+7?Em=_|6K40Lm3*wh!sK? z4m5wqMc$39ZS#$4e}%$SEO^>POy0j?<{uJZhuLVPF;J8xcIibWsf+zfu6$6OSs_-Q zp~@ex9;TZeIvVi{E!sFT%3d>82~~;*S#is!1fY;cyhcBZK>RqkhS(6sV^hJ2vJ!S} zDzRiHXpRwL+Mss$k`*kx6En>5X-}ja1LFb@lcR8MT7SSUd01EoXXYz+A?jwvwJqtP zx_P(U%S2Vg1Nc7#V)YNH3vsel2wtoVf<_R33Ra0czhzPdm<`5N?Iw_vluiLT7rDnE z9<+);7?->Xl|OoJQe>#4Y=3;0`L9$#QMTE8&SX@64Huzkz3BE=rb6>iEe&G7U+vUM z$=}@?$67Gip3?%66Zjih2OYklNR0~RCkt_87eWZhkTPe5&Z(P-P7~h!Nm=4=_o}>& z*gsXJL=8;a1yWwb_UGdkn;zKxGBNj^_6dt+a*`bRz)JeU~gk>S+`~Cpj~N1w=gW zfqCt5KYygI(dN@If)a6Pm^33MVTr&};s#?+d5M0udJRDbkzHp=E=SdRme)Xg$n7Ta zltluKy6F1}esVo8AJOAZTu8pj}l_=xt`dbmka49)ylv zMI-KF7jdA?8uijd7bd|+w6p3{VO^*Ts=fCrx zdHaj_Ry@i@s0?_e5E5KiQTOBD0b- z#GN*CpL$Oi&!*jDSN9i`?hUk%9Oise_EWI6w#ENG;iuUu+ASk$!$4-$->q*|W-Z^p znhAMB-g;QkSRpT~VaFQpuXtL{o*o{$d?}8x#_HB>v5@1CyQU^9&O+{@>iHZc=2_#N zK$=EX5z4~!j$`}@D0pk%PolB=67JnmC}p)}8D^K9zo3b8G z)SfG$z7YiX1Afui8cL+Wz*LTk(8L`NKX=jB@h|&9F)i|ech-SeBZsCsqZ2Y>FEB4u?MA>K;Es_}(wc)&U_?GdtN>GbeY ziJqOhT^+oSicOOr+{i413@^&N5;zkZY6j`4KtCYhBoqD73R0;jGi!5mzrcj8el(w{ zyw$NozYw$-8cvG_2Wv|2nlu5MHeVZF7qX?1RAF9wLgB-zz%#Cho;<~fjcQhq_n&;2 z7F|zDJ&UgWf#^la5|36vK15~1F9x#Zr}2?St;GIYW1}0d$IBq%u&u#GvdFeX7O8$W zZ}QMAa5Z0qkJV~2a>g~jRyXB#Hmvid2Y&v#^{~ezk|KR55>ut0?4D>pqCzooN1n?U zsyn2Bq{&jmaH;>czbge?@qN;bg>>;VUqCjdeJB0GG=b!Fimu5u&Mt);W0yVm)<@>X zCRnk8rKa+2(w2A0Qf1Lj$T42454+j%z@GW06vhA;h}B~is194dH4bW*I%G!Gp>&k2kmB zdzI=4vLLt|5y!Fr!)tb6-UQ_(rFpmtCl-q8YU`kfL_;Sr^1nj%!om@iQD)&SWxtBt}OZA!FfMa^TJE$@SU-KH>EyO^O{bEpYV%vW2C>e z3Rd#SibKdy827ev#c<_DS#%yWgoKab9hX>|R_S-b+Ok!36$$rba=dvQCHB-op)q^C zP^RpHN~+5|O)Sglrb#fux$Vbz|AhcmG_ALU0DTG+#igQp&eNbU!|q$b&TRDsPuky8 z!N-|!kD^i$vrnbG1vlvIONLvm+cLc`W2gWEd$d2e9U;UQo8P+^h@GsT&tVAVKLCEJ zyRp6S59y})(Rw(5O1~PnW&&d#<~M@zxe1^Wm7L4mrrgJ+KCIUp#U49T3Bx4QZRLP2 zc_P)OMGK5x5?-=v{#8xzDnbI@5CVq$V#x+Zt_~>N0t&JZsD9-@@GeX}Npki8#(OkZ zjLTIz-VkTz1mh#m)@Wr-{yp>Rg}0sJMJkUgY~VR(mt)`C?RoA!H`YpR7m=GFH0@7U1AJtOK5unVmMJQ zTnA&SzqtNTUvjQA;XZT7=24QRt~y++;UXt66(zIUu}?h|TbhMmz5<@Y`f>n|HZIZe33|^} z$f=^0nH3WRZ8GB&Pr?#@Zr2Ti!c0cm_<(H@jW@AJ+db1LvQ?S|w#@Y0o@;#IJ0 zVpWUL?7qwY5u=Pp_8mBUv(w#LQe=1H<4`1@(MlDSRwJGM!2AB3Z_7VN2C!6TZ{Em` zQ8ioity6UHkRW_%gKx)WRl1crCOzbpS6dR}OluZ_VIia%fMr&(Gx z?TEH+Ks7qOT3$$}5shMkL~TN_X7H<4jq^hy_M?o#C)u9Ty~L7S6IX1L0BcM)Em{>? z8keI_@mETWnFA{RZmj4cXph<7fypsUp(32|VFy$>)kHvmR+l-i(eL<=-Byi5W;X)k zdqG1U`yS?tG>N`jL5b=s3w0EwtX%n_$_P6tjh$=2qfCZ3s>lrUD7#z$kZ8gC;q@Rf zL0W_`lAv-z9C4q(v^kA*)MuV*crcIcrA*QGDS8z+lu+Q`53b7kmZ$2CQD7@9nau^p zd+!*KL&>t9;zKdE+ zr&^4DWG_EjI7Ri%a9>S6g0kl<$&Oa^M^-OEHf}vv8(--4N-AVwC1F-M)W&`7@Tjvs z&>4AI*tQo|stP@t!Ty>rtmDSUHJ1^<5t}*ahcp?m^;9TOU<&_-9x6Rjhue4W=Jge1A>5GN+pN zEDKQ|sw@tRfcogV(lE&tLH*f2ovVJ$xs|#JjP`2Czov|56o87X2|y@NgO(I87P@lM zLmi&tKw%_=ZPv+$LSi= zMoDR-CiOyT*fr!<*W6g1QiuF6e`}+M{f_n@z{N&d%#KFSQsNa}Aa_ z6F-ZH`5S=F@5mT5;n^c}?DQ(AhC>rCmpo0 zGszz*f%%*|^5Lv*P=;SPUpS-~d9S~W;Dy03gX#&lTs*Je_7?T#*xlS}SpFD47LE1n z4R8Jw;gh=@V*fJ5A7ZgEr-pCG`AwHX6ZzI<)Keg#?#I-`nz;dyS=C@3bORh{`a_vy zT7+jyRr^oQSaPCzx|-}iBu!}B(GMTQJ?TBjY3d+>wyQ?bk<&h*{!Z+T5^U zW$olSoEd4~*ftAivqwmXs{QF&%hR4{o4l`Y&Yuq}dnL7s-G)~pNI+dHqANAHB7V-x z#v6rB6ofT^>!9;qy+!76s=FRsC#%S;q!x!o%8jW#gmKIyC;TLXC{r%d0`i>sJ^MdjD}v$W&2 ze6m!!^M+uPdGf8k?RcF=7CNKk(tSvtK3MhpZFt#?tsNDXyZt3PagzvT7zIWP1GGd8X0C zy)G>8%hYg@(-LBeSw}68m+2GAD9fe|_@;#WIRtaCK z86QAK8$S0s)nO?IQjFWL+#o$`Hl^~}`BL;rUr)|i;`%dA1ia?rJ2v{sN!0RQt#J~Y z{MUjw*CzLzMIx{>&1eDZA+bkY3S_4mWCf$rx(+L5HqVgx)eT;PIl0EsT|p-CZ?Ksq z?BcwYu>kIq7z`F&^VY|EhYY8RylgyJEbP@pvuNDeD zuG;pE7}5}fkMaPO-%nLemQUV19Ap@hdhkO>`z-+-3NahER@5Co(0c0dt#NQaaaFmg z#D<7t8XjGfXt~x=7qdew=%xqtLtY24279wx7zu`t{twB#6}_9TEY*!YAO-Rr-IRoI zCvKL~#a_2Fs(n0MG`2s-P%wG8P|0O<$)cl|F3PkuB-WyN%l=qaqVHL;`mI5`mVa;R z9{Pk91FpB=_T>%VH0EFDAg7GsjLV5@2_i6?MZogZ=xG?a>`=YISAs20%4$C2$@`RU zl}*8f76Jp94Dea-9RhC=$ofz4;2uIj;InuowL^eFPGmsml$Ou(61vUQVXJS-su5Ph z;X9!rp+-G$`fYPo>$QNBd-;TQKW{Sna-FbwQq6~=ryf@9L2JHVF?4QR{-s{mcIIgj^%DxM#_`NhBP ziPv$9QaaGi;M?`ZuZ0UdPv>~RSaEU7RqLF>*e(SvU2XJJ*1d9W^_3GODMV1`NoP~rVB##_P? zs~7%&4u6SkV!sjtJ|hx z+nf0mg)yJ8N5nK&F!Ys(oKJJqy3rLc6!Nhd-#^Pv573#dMgSZ+`M1qvxos<4$VRX= z*fOkOEXz#DtAOaRb~M{BzFi@vSat@yb!XpiBNmNlhVD~Lf+#~GWGGWnPXXZLL^qAP z12)I4088B4TsF2xj9xV(uYX8?o8bsw8L8@$+6UrX2arp}@z22ur8a>+A>Q+IdRvN# zOOiPu?AdKm*Ohb9b#-=;G|?_SEAJ7;F9I;GhDB@?nkMZ{V8~h8yd?w&=Sl=p-E^mvq$8a5N z<$fhNaeZlOwQnZz7RWaxN9WX&|C%yw_qNmBn@CWi2sKxtEmi0SHd9&E>d7ch@7S6mj-cAnD9quVdVIGQrcc`Q&7wWUvr2lF(8v zXN`9rL;>b0?Is;WB**Cx`w)wF;aQWe6{z8hY(f8(aK)mZKSI(cZU`lB{PR%-Jww!0 zyH?a(!`}@lBrKCrUgQtFM;(MTgZ;o&!r(u5i9O|u1mPFXm*N>ed*~P2)$V!n?|OtE zzC^*mZ2iddoa-!hzT8UiHoK$RxX1Qyw4SF&Ya({*eKkz{rxXPar0;yrQ8@>ujKe04 zBOYFcyBg#U016mSCF#`&Hsd-%KK@h>)9YgsV))}r%S*Rm8jk&gHT~`TCNm9R8me`C zHWi0*(T;3#Wz@@ebPu?#kjXe_XQ$%UMkRyh1z~%77FNdc?Grr9Bgp&hkDRi6z_L|p ztXTBdaFXhKrUlQLYAVo#2Wk2|dCIWEn_j;`VZxm&5{!?Q4}mWb?oH+2=MU033;IH} zwR$D>w#ik9`C;b!W8Wlqj{!Po%L}MP+8?po4UUq5s>5H&C*<=|hqiJ;+jC6cht$nf zdp++}&L~@`42|K;bgkhvjdXSHgNx^Y^fH1fX_?(ThAs?Xg|vg@dFljp8OP`DSDog1VBawJ4aycL zwlG=MaNN(Iqfoxf-WPlfG5-^KV3Xta52-@oymI~?ONIGZZ|IPjgyfh^03!7hrSBq+ zXHYf)ikfWAE22P>VnT<))ScczP#{54A8NyU3(UsJPw_#mo{M(MnwJ@z#<)fYJozEm zqKLWi$ZLwAyEDi^E88whp#m2y4^x<^ukC9(DfN(inGKpQe$xq7yoE zZ*P;b*AJ~SHV5-WV}#ur{yXQBI%T#Wbk-_oT8!^~38il*c^kf;R+@ij=evg@8jaA+ zzp^->x%DQsMQiuu1k@B6?%`NYpJdz8w{?2I@9>gq5HA9KN_xMigI(RA=)b)u^Xa;T z&>^(?rwk#CFq`Q3h5tvQo_Ro?Yai@%_YHosu?UY10XoP#0%tT;&SVpgVi}Z)G z(7Cwd1+?!K^zr}<3I;D3K?Vo{gW%-asd=kd19b5hwtT@O`C?}n`+w9nt|M(cqYj4ny)h2i zc{wB=z1RFHtD3g=$_|O`0y^aHReS`J`f{+|jXmYCW$Vy~RymPgaoApq$~N0@U6L=)Ee+Ci4|n>rvF8SLWjAlm?chwHMJ*_HCCfHXP+~wMJ$stRe?3nzB4#JVFX8-T3qQOIZnE1Q=n7&2}7A3J5qw7#1 zoNPvj;(}E+^%62mXbn>+A{^O6W3oOv+Vf#axJ_6u^h>m}-Bc%s@XtfSNNDLR(DyTq zc5g-KYO}Nx%$fPR7txl}R{f;$eDcm-&5BDLvWa@&uSI31a1rrMc=?5Cxuqx2ShsFg zh}CdrS>pPg+{*{5#5gRCLKThKxz&ZvFjh5Z&r-NTZ6ynZPvtuTg=(XuVAe1uLRgXsMyx9mE){Y87%E}B!$ z4dfK#hX$WkJY(c@fgpDOQdwsX-Sd!qw;RrlnyOoRyGVJ-M`Smf9r{V9pD3X#@Wew8 z_XAO#w~;@_=gtLz&d&%RJQS`GM)Kmg&jX_sjkfk7IMILv%vu=g=pkCyEi=R{yn+$o zc(e4|y-vJgVAG!CB7Z@FN}(VwGJ!V>-H`u06sDroR<~sxb#s~+_TAP1S%Y<%*4kla zui1y{#sBE@79kAq(kU@SL6r9#7hT0%JC(-DzTgrm!j)d1Xh1#A^iF`VX+3|ERxz7l z06I=vNh}h@Rs0oC?T9i8m!6Da9*@^U9NI@DBtfN0Z}=Yn%{ugZ8j)999j4#HUBbAr z8)5HP9gUBTVFhqZxaz$ zn${UtOna5xuPCdT!y*=kSXFf)vJ&vz(i&xvO5zG`rAiH(b2e5iG>QSz3Hv4d$au$S z%0T&^w?x1=s?H-82TyFqgZrSj1jYZzbqHB1E9{D;jW0LUTD|A&eZe_bC5D9Z!d1nP zpjWt%rAuH~(1c~9rNth`&!T&~yo2lC_)=flb_u}s@BL1n5i5k!3G+K1q!;NnOlirMZr-b3TW3JnqN9WyD* zUJ>M^7*2Vn))<)O^CE-?VIlHq0#4eJr>1b+f)sNHhVMepfPnD*-t||& z%c(UuibveS(R29cOfC6BtRT9Q-wW+3>Fa!+@dUr9v*|Do#<2)itxhzajprQ;a12z> zxkLL^9ooW}$n_D8iFlT19t}to`}{HGYL7K|0E##1O=S2*vbfZ_j0~*)Mk1r0z{}a0 z*PWFtr^=dlTP;`~PB5!u6Ik9nbA3?gpCj69R0t=b%iPTUo7r$^z`xGXyk(*Q@g^0R znJvw>HkZ+0&M~SjlC$)Zg)-Cxvd(_IG8igEdO^sTKb74wVh!3UxYM_Oqj>m|mVi6p zo~q!j7&@0)!7cV0q#n{Soi=!#7w|@Co3FzpCMQ1ayQB(*YN1qZX%Is`Zn%ogIW-zR z*inhrt}1jroJfpid401;JmSoiIf-oI<4)xf+qvkAr_a3*-nC!YFYTDS$ye#cAhwTs z%h31ya}xn96l+{JwEFK4;EMNQ401Cn7BN9zy-nWHj*8+4z}Ue)pN`i0!}$xDcF%Z^ zsh^#t26BDTy1ToP5|AD(NNjYsAfeJZ zKw$I$No7b&N$30R_x%y~^IZ3JpXYI8ufM;H`aSiw2q8rL#tnA_K1H!m=Ttpg*q-a2 zGNe(q(RrURgO2#4CyW0uwrdD+4=}aaoBX!f=dW3ULec~qw~5lU`g1-vf6b<Q=@e1)OSp%cx=SrSoi7A>29O=?m#g!U?m<9I|=f; zUE(!QsL))gRdM?iqk|paAs=4WU-25g<_rJ%rY=T1Zods!I12EwY5FqaG~tK#=z5;{ zag!rKLlMOg7{?S{-6cbg;ty7T|JR=z)v$4QKcT6R{P0FG>@5nhvS!{{DG=_Du{^(Z z&3yl(ArT1tg3$3(Ww?n3{*ABDF+_#1aDq?m3O)2O{c1Z8hhHVt5S>lgU7Nz0Os*ld zmf6o_pDh`y9dBjV;v&h@0SfWtRIVSHyAXW6|$myfi{8@Q1A&U7eBMj+XI)Uj0;~k~< zDld2?VzBk4{waMguFc&Gg8rJ(qsv+4j385tcsoB|Q#5+fOTT*fYhQ2IB!bE(=f~?M zS`+#KI$}HfNtHQM_(GaJv>E2`rGn-LQ3^k=krJuePGC7(>E2zvi)BVkF`AvtW`_-7 zk#m2L8Cu&)_$BYsuVYQNHoZxw_Q!m`82PMiwvKgzXj!pSJgNK$)3x|_B;^*zI_I)? z6E9bo zQPY$5J_8(BQ)y@2B0QF-=j=aMI)m0fJ7&>onn4czKeU5V?1UUw(=wi#y(3XRVK~fX z8kiC@WVI`y+2l9x9~7`Q3o$3!B9hNRfr=g?68T_`Mg!;ucHGB(v!!DywHdpJ`v{Uo0IN+LC2bNY5BEi*z#O$B zt(i18$${X3?qMBs-`y2D83n2I`By%u**3nQ}C&NIP|kF-^{d1q)GT4Hr(+_&u(%=vC!X%*tf zGMFd;Z>Cd5!wi@m8n>wl{R7L?S?2$3z~E-g)5#P&+)q?{qeMC7r%q-z@L4MEjy=Y? z`b6|rVgIeZaA!K=bM6CLnM%Ca4>vkt#X% z;dCM}2l~Z3CD#=BO;4M|E4LIgUgx_=W|`!^nS0S;tB4+CcDpH~j}{WUC3APJxTBh0 zF9V|u=RwA}rm;NH>^_?;tn3Pit}{D*PqOOwhIegd>6Cy|$VDjNwDjV81sC1PajKuOu?`Yw3c zD0B{&I{m3)-@Q&vY_Su~*TkRHf3`E!#jr$0Ci7W=i25k!S*K!654ZmI*#m-?Fo<_w za|2?6Zuy}TBEh1fo9u+fJgSl&MGlS@BG-2w)AK~4(vw4bSImtJ+rG+` zgBY*(4eCW)y?yu75Svvh_StNe?9ZOFD_A@??)p`lZ~ox(R}Kx4{-R$`@Ki}V>{~~} z6@FW#^fh&tH=y9_SjB6#BxslIK2YGbFy*jR0j_f)-w`GK-aSHp`zngB!5w5gaf0=C zDwUZ#%(lq+S&@2_iY@%KvM-(`-YLMo;*@d;YbMS$zhIy|EC+_H?}UvAkc2*{#|EFE`gK@zL_914Ucf5ZoP#VXi{(jYx%2Qge0eZs)6d6 zCVq_%q4+qcZ2bLA>C&4i2Ajd{1-XAijvH?8q8-7zl%qoxN;~RIop06o_&0J&-MtT@ zf9^<|JPH(7J_-ToJ8GP@Motr8K5m9PtRYDWYWv1pdsoP&I?jrQy@=V@jUB0U4{8xo zh@wkiE|qITAp1&3ocga2{d2wxm~F-Tl>xoFS>;L}eQ`#mGH~35Z1$DHUVR&;6O~mX zEP^YwkAMr@6%tT8a%jEsJ(B!mayF1SX^wc$29(rpU zb+@MbQ$_F_vDL1OZdePu6@J#YFLLLC1gl4IxmX?NZ(j7!>$LM@QU2d46My3~yhHr0 zAx_>1xE3?H-l&{>7hs|@Ym`P&AaV7eASjy}^^SV2h|c z`Aud%^!Yg{_0Vyb>PY3_3H8@a<|8G(BeFK7r5(>mtw%TOnLE2yl4k(FyY#mHgbiS@ zZHGx7+V)st#V6tuaDtM(_2-4r7k>ITSv8xU>DXxJse2c1mY}>8F`Km|l4>nplbosX z{fr=hwj*=_mEL#8B%ky69|k11r0J3pOK$hTg3X$Bj;HzWCoO5RwS)3Hy}_b*w34$% zVQ8YbXx8L-p^SX;t~AS*%Q)g+Wj`B{-OhY6yOXhyRAftE70uP;@V5}Npx|T^M+~gG zCp%NSZ=TWW)M4@By11k>#=(M`oUQsgX}{!kJ%y#eS^b+f*){aR5!9fr66;X?5*a-Euq z8wilwc1Ar0eH^sX+~@hKT*u&6{Bu@U=V{GS#+z6SxG+ zpx7~f+t{0U(V+S0$wcLEtunvY!zr1tL@{>Bf#}Pu{u{5d$>oeS7vYkF@|4?xC7RhX zNK}kbKR)khM9sbunUI8~f+HT3$_4M$9VD*{RMGHoCsaW!X6*5fBl#o#1L&~UJP0Q; zb_k~heU?)BCdOq-Y_r7n`NcIy>jq>BZqnJFwC+B3H%^2dt^~c z?R3|#p{7!WJ2<8vb{?9Zm>dbFbYETcm`+T8SDw%>Z5J{!RP>b>K->2Zg>XbR*Y%0) zs7t+4xOm$B(|e@I_VU1PC?#S?Gn^VLBS)L2EANQkc(LzRMw!MoSD_;~|99=fWTQVb zaoN$?oUh+2D_N9GDG&j-J1XOrQE9F*q%6}={xCWHR)7fy^&PFP^BaG?TEM|1 zvwb5a0ZaDfxfnG7-mYbYzjDkKHvO6OJHIb$<5%(B!-}Swx;wJBC93ZJVfj3TBa-oK zRvbSLn@`HSd0%a!q*?4c`a)7ehqtPy+h!XEMAB?u4jWR~uso=m<$2y_JE!RH-hT)e zXg@3xn`qsih`E+(p<(^D>{khIslX4L2&&SjDM!MGjZ9h&Qo?t3*2xOsle9Io4ngE9{bn)cilj?^;{RcN~3LaJ5^}($@X8&`wyh7LUB*HrVWp7i$rRDdxnlq{nI= z_fBx)!!aVK5Cr=KVh%4Upv-GN%bDrIy2)`Nd93el4}NC5Nf0`O_3%~F_o%o4VMc#4 z60uT%i}uHaF9g&f225Qd0m!E8Uj}Op1ZQf~uZ8NrMb_%SFT4f{O+`2v%+>33VZJpg zA54GUfgL<%eW2e8nc=2rh#UI8LJQ+I;_bKS_s1L%P@#Y{Q4X`WYp0(xO>w)|5Cz2~ zSR*KcAGEMq)7Mn@vUa$ISli#uovgI_B#`F@qI?SeZUTZlxC-0@Ulb*z&Mgwo4J-Ym=R!$r)N?%PZp23`6`pqp*2sI6MZCK@t)N1@2o-*{7wlQUT(DHKh zfGebVT8Ib3g0~)v@?d4shkhEC*|z6i4H z-}Svbx1VJb7;ZlkLE)4XIaWJtM6xRXvanNy9f|~Mx2jdoWd%Z3&A}>XG4c@R=>m;O z3{&0{#iBF3s1@6wywn#gDX#8`YSL6xp+!bbNYaDIk1<~HMTJu;{nyevlL_JgulmryS6z3IYWZ!Bw<9=ltEHE`s{i}rkrS*khJ5_qxze!EP zTu~~$aeKelULfA|HvSWgWt3B~)QE8|yj7kx(ScF7Zs`e#Lv5(JG~YBk8u7(utO|j} zi}WXcG>ff=6xrg~XnXN|mw9~SMPJpPsJH3Y0hP;7lS>+i5w4E6=?(?91j58&@2fEX z!yp`?@%Hz!a~~|=2MY%55b@H+P||L25%6I;Gz(K zN!mpz9!bP-QEZzMP-)TG)xArf`BF-711$PYL*)oy+(w@LwRFRy(Ee5A92WXOej!n3 zKA;#?SC4o6)V1Fp{^d?%NB$uj_!uZ+s4BS_IzpJ!G=1evY0T~XDpMM71Aih)kBs=8 zvMw6~(q)8?*A_8co1nZVou4D%O!*CjI06u|vuMI!EKce_) zr4)fb@@naIr0gxyJ;MgO$-BzOhq@Tpb*G-z-xCKwZmu;)A0BIVR+Z%9Rcm#oIVbSn%`0XX@`PN==0l~6EhuGzATWB zVGz{(z`wD(WR`QoHZvsc#Cf%CKC!{E+B{v+7OrbtwyC_Qom2Ts9U)zq@gYRTBcfAP z5`k=_$=QZr)Cmx1sy_RpY;shOlMZYIGA&1dpJ<<7yJ&P5bt zPaFF{iN6NhT?7^8pHU3;aU6k^2IiV%?Ft9A865;koX{o-L=)-Bb!I78h|(pSfbo=L z`pd~Zos2-@A8>=O3<`Bfv-%BRQnxZGZ1lz4!eV7}u6;$G{`72rs?4FL8Ojigt`hBa zglugP&OxkZq4h$3H}a$fXYIkA-21L{4Ttz{~VO}9>viC&aG4|`7zFIfzs8WB2a|H zQ#HJtC9m+)B48TA0MUVnnOWq4xukN9axqkyB|RV^Rt1aZ#@>v(0llhH*+j!k%iFvs zp2)Jdh^CU*lP1bkme?w@R{GG^6!>IJT^Z>yPMXlmmRaH6pD|u)bvmpClM+kaUsD+0 zTmCzPe}*vc$SY9R68t%kFuLuEu@l1hp(z-p`j zGcrKVHvw|$^QGfn!YC|}ib7C=vh&&I1p|;jR#AdB2Gu_9iwv5>?D1L^ZO6(jW}PT78t98@O-P%xCG}UL%{@HP$KAL=%quV63X>5Ne0@ z>92=h$s$6IE3%Wp`IYzl3>WE|2jZsQ8~&6NC~6ijT^Awjk0UmtW2BaDj5?xgFEwwu zLSO$(+XgDY)10`@`TaRxoN5*c*jtF)-oNr#btCZWx=H=Dq0dGAe1rp2o0E1}Wf=A~ z=E=byhiLQSwK%>QcrArvsQ=T+iry-p`8Hsgl(6a(qpIh1P{K+xR=4Ae5rv?XRuKtkoXXod~-4gx$nR;8(>Sdyi|TV)aQ^LNAhG=U`3S zcQL*8L!$Icb1h%|?EIjq8EbSOs46s3-_M>UH?7cRyZUEWeq!_O@VrwBDPm)`r4A>} zLS)KLL@Hg@I03Vc(_EX%!U?YhH~B|S^>}8jHTDVG?Gb0hZ%1dP)F{uWX!Y*>Nl}B| zdt+#NnB|=cXZje12P%@7CU^oI?4$PVw=Qv1@CUC5_8*APn7T$GNsEC}&wPluUZQvO z1PH1V02mXZz?2t*Ez}GzuR{>v8G{Is%0m!;J{+HZVUY58QHFu9D}yjyiEN@?#?j5~ z&dXn>@%S$XE5)1~=8F-UJ@`kVK&B+aUpxdi_CdmlS*yKHq7Q7cg-|o!RIhu)q-yt_ z23JYJ!!61vaS6StrMyKRz2g#a-5rvLc6@>Fn>;x2Je;HJQVaiKROX_gIgZ(l3HMeu z9X5Ge#3RN3NSIAqSVTqAxKiq!7mZU@(&d%4es~rV(`_2m`{m%;Af7*Rl1jJN7*VO| zas}?oHt?!!RK9ep5?S<{b+_5zvZ~Cjh<_q8&Fn~K$RY8hbMaH2;>gSeW35m2c4_l7 zA(C}QD#i7Sq?O~iq@w>RBBp)$W1C8;n}x20s50fg=6ShX)m-;2NSSDvb3&#%U=SV05O{3#e)WaHePV?Qua5EPq zX?lM(JqSECvHly5GVa{y;UEedtq0K7M{O5<=w&GwnmTzw5Cxqz=j@1uwGMJ@yh#n_ zGDBUY&04z%$peKM3o3rUs6D}NGcd$ygv{i(=9<*P%G-L^=aROnDTfw#G8{dRYZ`Zt z`~9&*>Vo4=YqK!1jkvpH^+xxQpAqGK)nM-`abdtF3`OG%*z__=c@ro_uBKOrU~vqQ zOT6H{h9(Efj9=&9*%{QL(}%7R^!fQ3#Jz&=mC^_w6%SwaxMquqMCTFC9s9VAq(2_R08V5s$z)nYdp>C(R;Mj3oTI4dL%2C z)<_n#Vgxi_u&%t50<`L_o_@bcAb!uPN`P03qJEl^`)wWusoC||!^xSIRyuvezUT%IXMquVS5>_8g&d12t$ zHAbVh<7tW*G8`ZCh{&pCRJqBC!xjEqzePtv^Goy+SvOJCK2NN&x9l_7W*nieyjc6U%}qpE%O+?UxpVO`Kmf6V>4KRUq$o`%WLKKJr#|pu4P4QoE$;`xyLxxqi&hje>V_7PR!C?~XPoUx>f7P&nxlxX#HShS#!D` zlJ&M$si5s zmyaV7$2p5XpR>}N`wHV3F&6Qhp5w0`IDN#3DR{ef29EOC2b9+iAnVas(70VAqh)l4 zlGXA%m^J-&Dbe&U)P#ND0x$3csIg!BzUMtOI_b%ZD-pQLYf+{7Wr^Rhh;zr0e}m1i z*0y_UlNY`hleCZP+cQ{Esgu(Jtx!sAdZRwQ!s`zE{>CruM+}8PTbIEZgO`q%sP5-V z{j`riep;-de8^y`(i0$rG5ZP8Wwr)K+NIm|9kYpwk7HxYCxlhsTEsOc={57*U-j)H zLd5sF5rK&Jw>1wIuv~>p7*>Trzt_6(+j6N7WJ6-s^VVkQmGa&fAF^*cL#V^ro2-O^ zg;R~G(}l@$MmP)X^Fl_5`{MVelDkI#VH}Y?U(d zl@p481Yg)+v}m5^t;6|iw)GL@wReb1!X zIe|YTfpdLF@weY5P7Z1Zba@JGcd}Ktg&%F9JXDk`S#Dl0IObrV6^;ORB$MGJ#30Gs zurxWek628oDnZ9%$JVee8n5PF(|&kq#RzfYhv?L7nMI*T7`^ja6+dRl4}@7|KQ}(| zC0D)zg=X|f2%s5;rLcY7YEED5nrU1QXZwPB0mA9#2)P9@qpR8 z5kWO3;}DzADkeLo2FL!4dv5|0zMoMm2v{|j0?vf&=wemXQyd81 zzpl}nI{5h=J#&i2y=~{c8jx=$`{fIW)N2UU z>`mT)UEu>r)h}*&xBKMYN4U6mMDX(14`w22#((nzB7xoxMpHAuy@ZItV$+TB5RnL0 zH2Cd|wQ?dqlN8eUp?c%H9x`jb@C^D^=ui(C?C*!ZGT#z zrXjC&a18LryB&w7fCbkA1O4T!a@X-HeBMZkKG|7e>TtD9G?+X-bc&2=!gvO)fvr|` zROw|#7yeQ+y*6_q{VI-941xB_V+BF-kY~%NOI*80$@oeqf{uh2_Q3IKgYI__t!6<2 zk%7=(Av$oqmY58Ywd(z*QcbPukej>p@wX*TMA3|kc3cVzcn7qc19^GBc8v79sqV72 zK%uRY^k4Dv3I{VVt%IB22jy~k8F1RJNM&^oOe&*@4UWT6*aDh$TFoyNxEKpwxguDy zpF3iVx6b+VvX8?+SccUuR8FQj^MHYm>91HxLRI-%NK|Sp6)l?AnLj@4Ft(lPr?tL# zmn6s|Qe^IZ5BYVhK7zI5B}f}20YRc1+xt39e#baNc-|cBU&EX3Y937&=h8JtH8%9% zF+81!d%=8vh%RA6g=%81AM1R>xK zcgC*Qfv}<5^kCeNXnn$uov=?znK&=U1t_n1N7UpcQ*UIs5(X84X|lcXNE8vzEHq!b z7(RGe{`F3}V6e1f__0ceYI@eeG~AKByZadi@-4l7->g_od7{H-G*VMndJ?VkeYRtZ z(>&xClakFGgY<{6Enra3y*wt{(OFaOv9s}jjP1DeD77lLDC)lX91xG_ZKZ+c0=zgO zpH~HUY|KTFHT@^}dFu$^RjU6!alb@bN518NNDe!W!G=8{9j7FIadDB|+@`-f*|qW^ z@a8+CxQslMk9f=Qzu68^MnYI^n0&AenHcxn0{C%1&{ zOkOrJ?v|XOXVQ0(IEeTd_NewG{4~^5^jBGf@U3gMG;6|XI&(OpbF(eOe&VHUbvAHz)g$#wn-*SfU3p?EELMk~5&}R*&D6QXo zgv;Wkc>{U42Y`Z*f^7>v0|bWxz9tLdCBkjJLCz~z*E7KgCj~V-`Mz68@8eeEsuH{yGToj9<4q-^6xVy)#OY0Y(@^Ro<3GQz= zZ>scwdzndTP1giJ((So@>{6Qe_N3|D6HfQA7df`qJe4K-(JxNn(; zPYXlTbhuI!y$rT>iSzaWDqzgJPn>PoVpdPk#vW9)Q;O+&PQ_SB2w+-&={_ z$F*FWY}o&Y0q};p5QEb)yb*ma<{*lxPR&b9L>b@E#Wv*3SEF%8(G@D5SV&omaFuEn zh4w`JTd1N#R%4SHz&YZ5iO)Q++uvt?%u~0;$>EPkz^*+JJ><{hc2BPc>ZWwyPm!I$8YBwcjEIA35&cQi*r* zEOYAu(3Y0I%@pT=;&+jHzoAAt4@1;!`R>Naqc9g-ySR%6>x>go>_yN`aX1$xHF$^S z2cHbI22TA2ZoZ*U8akn+DwD4gtb}J5Fnk_kn}>ewSqcWUA%B1bIue}-qZbNFlL69p zdlKNDFgGT#ZF{kf*a+xbk!55O+y6oA+RjU9V$>} zFNju65}Y$jzkD?wg(>tpn)`hU+h@+Or-WL)aP~cu27=BL%YEQo?73i zbC1u($_Hv_{DRP?!LA}_5nlqPm6lS@z>`;Fe)h#zD04toQ?F@HzEA2(y}AJAIc z$Q%2Mu75qnSNg^xQ!Ov|O&<|-oIW;NS)Itnk4gX%1&tBbU=JJrhrx{xb6!6(lveoH z2MhcBOD0yVdQ1z3h|Q@KNvSv}>-@^O52h#zrIM24%MpA$Ok4Mo_*H)ia)Mcou5 z?`+ol{r4q4&QK#dX*!}W<0ZC86w3_l1e~5e9(o!3Wwgh2lOt>vYlm zLQ%nS9saE#c3NiV}u&bd;p$;>!-X|CRo%&@pw+Rx!3 zKx?ZmQrKr|Q;QBF-7-#yXsMTn#FEz-ee{65tN|6f9GDCT;d+U|J0|SQDo|9wrmk=-A@qFWrr`WLG&`|Dbt$c3HVh?` zG(G)Vpu_E96i#D&^r7y1y?i7fJpt09>t*toV1pg)^0y|viXH4a{xOj6Gi3_LATB`<*jb_2fD)|~>8<$J@k9U1Hpp%PX zJmt|p58=;^=GQOIu+7PUcdnQv@f zV@#{6=f)KU_=;X|5as=(rem%$$j2t`>5XCEw0XuLl4Q&Lj0!$I_JzFdF9L0k3eIw5 zuy?>6`^eFW>kVZO?z}jWI=V{uGdcQl@serb9N_)%OsjrBwym_d@}MvlfZ~GPujY&k^y+#}VXNgG*ycbXF*U=QNm5Qyj*t&YxuyozvP&yIIlKS@K{L+m{m$2jyyWYYN)s#P3>RySjHo*JEq< zrUWqCr)sE+!?Zw@!*(q@Ch^QX3f3W7ra_G~W~m`>syc^aW|N%My2;~D2=cQ9ya?tl z2T1O0Ed%}HOXXD^ghWZX)5tIN)^_@&O*5<~C@KP-m*rRo3rJ_8$ z{v>};)<6wumEtOLDE5vyS_dddbRC83#3>Ul!cj%fmE5p*grkrr0;^dVg=#&;8xy_o zm%6!IG>(X<^YY=o7HRu4 zA`W<7MY<1-_3bNm!505($4G-;Wp{;ksf>71;V26Ba`OL%fZ{E!MW&ppvFn9!mElA0 zGIpL~@bt0%%IgP1vkEcpf;qarz(KmEFsd* zA1Vc5Z}3>^HpU;?(<`QrL*rQZdphg$hIA_ z4M@(Z1h=Uv8%%B6Z9@}G#hli^TIKBRfW@y5QE`U?`rFx99O(%qiZh`c<+RQPu8Ylys8x1fh6 zXpLjI*ehRi0RrZwx^*u`=X#qSM0(RHtlz6=?^6ECkY$pW*G^i$o<{axCDHzEFKt+P zWWbg;RQ}%L3UNsQQ+9@PlBoC-m4mF7byYDYeCBH#Yy(VNoR&lyn4NGmM2D@bP}2yb ztrrdF=j7c;A@!elAf_<2Wic>Cq(c?=uaKj5d0z(iQS#q{hXVR0W&Nsw*{4$_&E^(b)@ksN@|Jxs(<*B6P03s!wqok3{iy9ZUXx(+9o-AfhdloA58ISHj>jY zMKh2yKIBe>sx2^-tefRav8#{yj>k)ca(iG$;&&}($Kmh04~1s;YBim|z?@j`r_`#c z#5|Sa@D|1Sji!;*z(FraVHWj%yN|ZkpownYny2ai_=9=AA%dZUkSR*f%YZP2MsJ*(n=2qUJP>;m1$kE$G z@sM)cdNrC{v`Uo*gdX$6Jq&9El}h9mZ0Bh*P5rw~_L&zBmRjQ}`Yt*=R3;wiOG_@^ zkzKa`4%PmO6Tv2mMk2N`()vJ)EZJ#gv+W; zFT>EqR?U~PuM;vsB$|s^TnRy4=Mp>V1(O2;eaC#3!ahtllDVRdbV!)7xbUDQB8}6b z3HNoE{gw9#i4&Rk-9xy*-lKHntXxG?aFQR(+}K>x((gN7Ih8{g0s%Hjie%;yf$RHnPoqBnP- zkdVTfwe~KFVoz>I@l771u3~s;bw_rHI5Fk19djz2W%gMImq`H`#jp0PXIba0Ifh6l zirVxN<$Vz7`LMY+x@c@&ad{C0FmSSD*&6Ot(e9lRLV!=F{4=KWXBs zKFLTi*pi=@3X?yWtruc~IFe|T$dZB`y^J%z7P*9VHjIbsQgeNeeDx!Al0}F=uX4D& zb?gBlD3EL79;~T|8DL)%Fo(YxaYom=d+adVD`#hP5q>OZKYc(Y6uioB+C(i@WD`jB z_58?rA7n##i@fVIl0O}x7NcE`z-I!M$R^e8%W7axSeGErb5;{aBgdF|~7flcLI~eSnd;IN1XJ^q~ZXKXaO!>J| zl`O{-0{3-=R!p1b8HH$cH6`sL3O-v`YQ<`5q~E%tq$~ZA+G>uN;4w zCW4msJsdN0`EY+VxF1+KuBO;W*oLHo$+I^|1w{t8K`REV=B8ngg?MhO#G1oBMB+wF z6@%Nj`sa)F_lLR_H*hSHWl6tcDuOu1$vm4a$^~G`-vW+qNB0$f ztuSlkwuIxvCZJ#mZs21xIsR})>~n@;_70BPo@Hn{jD)nExh#Ao#>}+*-5Km$fcF($ z@NK{wdLYO4BSXr4y{H*ZIZZzz>CyAo%l~IvxcfAg=L@;M14P4Axaz#9a3h=6PW_&h~*MgCc9~egV1)3)Ny*@Q-2Q3>Jt0Q$b|w4woUMBd)4HG5OWbjwFX} zAiq0f_L6>EgZ&=+$Zy{osnKW;n3_m=)F*HypGlshD&=8fnoW)F7_?5kb|2ci2@0>o z2)q`>IU#3Y(kI1Q!&|XYn|qE*gFo&;&0t4@iHXe{QZs~h!85=5&dAr(2m69#gjl&* zN9WMQN_11T{DN0jSox`1OH>Ln+8a?Q$gE-D4rAFZTL%=K5O#t2!GntKKPdrF2KM$s5ZwC8O(l#>mACL zqG5!#>pqKItmC$Q{ZpoA_=o>6d`tO7^_^iI1fw(TUBA$9cU!^fz?`92^_B$(M%5T{ zoOf&E%&%Q=ee~7cgvb%f;1iI8feqX~VHIjo&{xjt^gA)LZQ^5-%aqBnvBai6X5LMB zFhw-iaQ})gJP5~lHigiOAW!=Z+s_rxsp>{MJ(syFh zD-H&;`t*Gzix~`X7UfwMK&y_$z@JH*e3UiXiJB!Ol+kB0CikfxJBlbaMG^}Sxhka z-g2ivn*kpS$bK^ft~T`{>`J)wp>UJ2EG{l*nX3#Bx>z0a@Hi6aj#*`qB=Eyp(0a0` zsZBRP3U_qt<}jheN3X$h_WA?RRqo(IOK#Z*F3{VlPN=cv@JoNA!zC2*CV$Y^W<00B%Z|t_b(f0yV29*WxfsLu^T!W7+S`{^QXc4+KutPQ&wFjobc#quF>H`-qx)sYyCcCs5K-Yi%DDgIoHTsS9M`%f`|@Q< zVtrH^o%qGpg*|{YgVATwr0VBI?lTVonVSyV&_OP(XXX+$?*>3ta|`_P%fOE(GRJ_= z2t*4^u_M}h>X;N5^BJ4GWGctbK&7bb{fk@AZP)Vp%1z6)ec>%r*Dly#^yvy{A6S zThkrb`^4%~$mM#~^yATu*+XX3nKUD+97nMrn{EUz+WD-4^u3zsFQ~>3QwRSrh?Hw0 zn;6;Ke;_OR|A`R6zKHSm*s&V@6wG~ue`Bk!7CY&$32ee1)}oKAI#+TA4uRfqR>rhk zb~rJ47+CxWveX`<`r9n38OT*joa2C~%#EIAj14}-7Ct9p0qLNbFm=F1_Qoqthmi0p7H3`PSv26Oj4m`X$hYP68SNtNBfmX*dmEH__|rfQVIxA7;UxmYV8$W(0%m80^fJg2I267D zVBQT-n4lg2#K&)rOS(fXOifZ~+M|^|QI_*&ONJ`jXc(B(P0hPQ(6owkf)3Mc#f<7; zECe-l$>W=siFd=BBJQX80qHc#uhX27Fptp0tJF0Rn7=t(j8|l=F3M4@ z?t##R>T&0;g3nq=G78x|Fw(2VVf((>S!G-RVlpTOD~ygs%bI=mbLSQIGYhn9}xn6UKOl!u{i8%cKX5?Bp z+JEDvNUiGD62$RN-(zsLCgltyzTpsM7X7~~X?Ye+t?gUNt!|@@*LGI)JBd}K-m*KP z)ulvFCW!&T%1Sch_B@|qCimsSOzPk-?|YpBD4*PVgXLlt>miiAMtqod?Md=RVUgs` zCQeT?o0iV{@{rv(VxNVcy z0FmMX1%jMjv{GyVwJ60{IMR0bKfBLlH^8Fw3HVHwD3e#1HZq602cnK{v$IUOkyScT zdd;g1b@}=Tx^_zgu4WINE_hdJxB1}+#lY;FZPnTZZDg<~@=}s( z<{LYJzlxW@9iB3~hQ54tB--+@<*&DY(Rve0T^mQ8JL4}|pz-J=XL@jl2g{vB*jlt_ z_lUlMox_P39tV+O*WlE;qs`N@Tq!gZdel0Bx9*g zf@$?-2N~ujOe1=YAJ9;&wp%d^ytzyYBux2Q?Wne#ppH{=1w%E8Q2XfDKaQ)%!AAZ* zd~8+cF4Jk)oNDQ*GvuAM^+GCoXf~CdFEXAx{ub${vJ| zIE@rZ83+UhOh7#Jhx=N$he`5~6H=wd!7(4-*2A2Iwph*iyXnyRh-nKI>Y5mwprZGK z`lV}KI>2`@(nOWajNjP#InG%AQrc?d1(Hx(NCIXn^sim_cRou+UB)aLSPYbFr9_)v zf#nPs$U+}I4V-0ckQw10$&9;6ZI(?{D8>^YjRX@_%Gm^D=b{kyBL75z2RH89}@eGCAj}p*g*b&Ig0xWWuEApAbxOq$dRCf_z|5c%<;j18@Z~#&juY(*&`N&Ds&yGkR7EGV!gsDF?_Qb3wVv_WCIH`Q zh2%)bZ1R5x*r%O+4yRQiFHbbsC-n9=MOnXSSR$VVw5Nlm#MB)M^NQ_AORDrn+Ou_$ zKJ1z*o-5T=qP%WBfVhITpqQ_o`6nm48#-g~(ZW6uLrM3;(o_rlok%tqpY|fPm2?aI z>%Mvg1M&UXc@`IHynth}{HVAUz2~u~e92q27}vZnGPo{)%W#o~%YKSaSuYykfyN9b zwVn&&suZ_JT@10H{>d?C{_%VtzV+N!T3I&zbTmjr^QmWRMsZ8(`mjQ)2|$OKzKovP#^Pa`o?-+& zTCMUX)+p0^0@aBc{BK(f27AiYZ;L}>IOf6TMSs#L0g53kUMJrp! zm)aBjPqfIz$*jJ({MXRw@B9A%GLHAxh>H5<_>u~^FJ1k_P%|NO_oQ-y=WBBC(*O_#i!qc$=N~iQXL4d7Mv&7{g z1MjHnK(Gl+0GfTSxbrXbqqg1qjIm7l61+#Du=w_zVgv7)cB@hPe&!VGyt<;(`kNCM zeeMxa6}O(A4aa`W2S@H3`q5L=Hu<;pF^R0`arT|9NOw6%zlndtIrWDI%9ooiSA51& zb(L3`&q>Z3`x3b76WJ_0SG92fur0(crJje=Q@AdnC@)8(xtNbSmfda|0#GQ5GJ)w# zT)4V}5RkWMl%}O+@hU1=#J_l(&v~Rg9Kl@Fp(Bjk%`0^kB7!@ptGNAjF2CXWjY*pA+H1_L_Le`1f^>?R$E>T~pb3eF z4rMA{<*w+dZIg$X0o*wm`Z#5|mfhc^!eBE$Q;X;rQ9L30U+EANtbHoM)wMBP{Sj8v zlD|re1~Z#jtj>Qpm??3F8uO`<5Y%fB*c}WUbTAJT?Eq&1WR-Q&5yrpzM zN9sE4C6keVRZhomTEuhu9Ih$0COBKyyVg#!&0Z#UBh@c zI+*DQVXx3XTd(`a{0bT#9`Q0pq&1g6Q|Nsa3VKG&5yYX!pD}#~Nhed~|mTF#3G4veN0r!H~nc{mvO9%D%9D2QLmaZ2a4{>3ih zH%#tf1eqwYI#SW65L+T);`HWbbZiUuxcfw4;q-t8#gh-C&^Y7txs+VpqD958SgUIhtZyPKkAEOknjj?EzUH zsoDh`!c$aZs;}GtIwZ3*V&!<>Gc`j1i+<|A`Sl>ll22Bjn$^9v}cMq`cNrDN&8 z_`m!$ImDUrWIRqT$J1hExGo@cdy(5KnkH~Vaon|F^DZ#H&Em;`of+Zp$U-Eia-gFyM{=)-516$Ysl1V+nA9B+S&{;f zIJ>EaqIY>=z9Pd0h*~!fKcUpL(g=0>Ql{akCN|vIm7L3?9p^*te^ZaGkc*E?FG3em z^Na;B_F^iJe4wAn0A~2lXN0kMqGW7K7fun=2zXGb%%PfXUyh_&w=?@PX2e)YQd}Yre^f-nX;� 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 uaOCyWLWRkj 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 z

93Iq~ZSlFZaimk#Zh(Og;cq_tQX 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 literal 0 HcmV?d00001 diff --git a/examples/urlToImage2D_multiple.html b/examples/urlToImage2D_multiple.html new file mode 100644 index 0000000..a550653 --- /dev/null +++ b/examples/urlToImage2D_multiple.html @@ -0,0 +1,66 @@ + + + URL to Image2D + + + + + + + + +

Pixpipejs

+

+ This does the following : +

    +
  • opening several distant image files with AJAX request, using a single pixpipe.UrlImageReader instance
  • +
  • displaying them in a canvas using pixpipe.CanvasImageWriter
  • +
+

+ +
+
+ + + + + diff --git a/package.json b/package.json index 1bddef0..2eb3726 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "expr-eval": "^1.0.0" }, "devDependencies": { + "documentation": "^3.0.4", "gulp": "^3.9.1", "gulp-rollup": "^2.11.0", "gulp-util": "^3.0.8", diff --git a/src/core/Filter.js b/src/core/Filter.js index 2af95a0..7c96101 100644 --- a/src/core/Filter.js +++ b/src/core/Filter.js @@ -115,7 +115,7 @@ class Filter extends PipelineElement { }else{ // TODO: if output object exists but is not from dataType: error! //outputObject = this._output[category]; - console.warn("An output of category " + category + " was already defined."); + console.warn("An output of category " + category + " was already defined. Nothing to be done."); } //return outputObject; @@ -137,6 +137,21 @@ class Filter extends PipelineElement { } + /** + * @return {Array} all the input categories as an array of string + */ + getInputCategories(){ + return Object.keys( this._input ); + } + + + /** + * @return {Array} all the output categories as an array of string + */ + getOutputCategories(){ + return Object.keys( this._output ); + } + /** * Same as PixpipeObject.setMetadata but add the _isOutputReady to false. */ @@ -262,9 +277,19 @@ class Filter extends PipelineElement { * @return {Number} the number of inputs */ getNumberOfInputs(){ - return Object.keys( this._inputValidator ).length; + return Object.keys( this._input ).length; + } + + + /** + * @return {Number} the number of outputs + */ + getNumberOfOutputs(){ + return Object.keys( this._output ).length; } + + } /* END class Filter */ export { Filter } diff --git a/src/filter/ImageBlendExpressionFilter.js b/src/filter/ImageBlendExpressionFilter.js index 4c01952..b34f19b 100644 --- a/src/filter/ImageBlendExpressionFilter.js +++ b/src/filter/ImageBlendExpressionFilter.js @@ -19,20 +19,21 @@ import { ImageToImageFilter } from '../core/ImageToImageFilter.js'; * should be set using `setMetadata( "expresssion", "A * B" )` , where `A` and `B` * are the categories set in input. * +* Using a blending expression is the aesiest way to test a blending but it is a +* pretty slow process since the expresion has to be evaluated for every process. +* To speed-up your process, it is recomended to develop a new filter that does +* exactly (and only) the blending method you want. +* +* usage: examples/imageBlending.html +* usage: examples/imageBlending2.html +* usage: examples/forEachPixelGradientBlend.html +* */ class ImageBlendExpressionFilter extends ImageToImageFilter { constructor(){ super(); this._addOutput( Image2D ); - - var parser = new Parser.Parser(); - var expr = parser.parse('2 * x + 1'); - console.log(expr.evaluate({ x: 3 })); // 7 - - // or - //Parser.evaluate('6 * x', { x: 7 }) // 42 - } @@ -54,7 +55,7 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { return; } - var inputCategories = Object.keys( this._input ); + var inputCategories = this.getInputCategories(); var firstInput = this._getInput( inputCategories[0] ); var outputBuffer = firstInput.getDataCopy(); var parser = new Parser.Parser(); @@ -79,11 +80,11 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { firstInput.getHeight() ); - } + } /* END of class ImageBlendExpressionFilter */ diff --git a/src/io/CanvasImageWriter.js b/src/io/CanvasImageWriter.js index 1781a58..64a8cbb 100644 --- a/src/io/CanvasImageWriter.js +++ b/src/io/CanvasImageWriter.js @@ -80,7 +80,6 @@ class CanvasImageWriter extends Filter{ return; var image = this._input[0]; - console.log(image); var ncppSrc = image.getComponentsPerPixel(); // only Image2d with 1 or 4 bands can be displayed diff --git a/src/io/UrlImageReader.js b/src/io/UrlImageReader.js index d8b51d2..180d7a9 100644 --- a/src/io/UrlImageReader.js +++ b/src/io/UrlImageReader.js @@ -16,9 +16,13 @@ import { Filter } from '../core/Filter.js'; * Reading a file from URL takes an AJAX request, which is asynchronous. For this * reason, what happens next, once the Image2D is created must take place in the * callback defined by the event .on("imageLoaded", function(){ ... }). -* * Usage: examples/urlToImage2D.html * +* UrlImageReader can also load multiple images and call the "imageLoaded" event +* only when all of them are loaded. +* Usage: examples/urlToImage2D_multiple.html +* +* * @example * var url2ImgFilter = new pixpipe.UrlImageReader( ... ); * url2ImgFilter.addInput( "images/sd.jpg" ); @@ -32,15 +36,16 @@ class UrlImageReader extends Filter { */ constructor( callback ){ super(); + this._loadedCounter = 0; + this._addOutput( Image2D, 0 ); - this._addOutput( Image2D ); } /** * Run the reading */ - update(){ + update_ORIG(){ var that = this; var img = new Image(); @@ -57,12 +62,14 @@ class UrlImageReader extends Filter { var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = that.getOutput(); + var img2D = that.getOutput( category ); img2D.setData( dataArray, img.width, img.height); - if("imageLoaded" in that._events){ + // call the loaded callback only when all images are loaded + if( "imageLoaded" in that._events){ that._events.imageLoaded( that ) } + }catch(e){ console.error(e); } @@ -73,6 +80,52 @@ class UrlImageReader extends Filter { } + update(){ + var that = this; + var inputCategories = this.getInputCategories(); + + inputCategories.forEach( function(category){ + that._addOutput( Image2D, category ); + that._loadImage( category ); + }) + } + + + _loadImage( inputCategory ){ + var that = this; + + var img = new Image(); + img.src = this._getInput(inputCategory); + + img.onload = function() { + var tmpCanvas = document.createElement("canvas"); + tmpCanvas.width = img.width; + tmpCanvas.height = img.height; + var canvasContext = tmpCanvas.getContext('2d'); + canvasContext.drawImage(img, 0, 0); + + try{ + var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); + var dataArray = imageData.data; + var img2D = that.getOutput( inputCategory ); + img2D.setData( dataArray, img.width, img.height); + + that._loadedCounter ++; + + // call the loaded callback only when all images are loaded + if(that._loadedCounter == that.getNumberOfInputs() && "imageLoaded" in that._events){ + that._events.imageLoaded( that ) + } + + }catch(e){ + console.error(e); + } + + }; + + } + + } /* END of class UrlImageReader */ export { UrlImageReader } From e03eef293481c5d50345bd431f69fc0499649ddd Mon Sep 17 00:00:00 2001 From: Jonathan Lurie Date: Mon, 20 Mar 2017 16:35:27 -0400 Subject: [PATCH 9/9] ADD the _run method to measure time --- dist/pixpipe.js | 113 ++++++++++++----------- dist/pixpipe.js.map | 2 +- examples/imageBlending2.html | 3 - examples/mathExpressionImage2D.html | 55 ----------- package.json | 1 + readme.md | 7 +- rollup.config.js | 4 +- src/core/Filter.js | 38 ++++++++ src/filter/ForEachPixelImageFilter.js | 2 +- src/filter/ImageBlendExpressionFilter.js | 2 +- src/filter/SpectralScaleImageFilter.js | 2 +- src/io/CanvasImageWriter.js | 8 +- src/io/FileImageReader.js | 8 +- src/io/UrlImageReader.js | 44 ++------- 14 files changed, 121 insertions(+), 168 deletions(-) delete mode 100644 examples/mathExpressionImage2D.html diff --git a/dist/pixpipe.js b/dist/pixpipe.js index bd9b54c..7cdce1a 100644 --- a/dist/pixpipe.js +++ b/dist/pixpipe.js @@ -272,6 +272,10 @@ class Filter extends PipelineElement { //"0" : [] }; + // to leasure time. The 2 default values are added by _beforeRun and _afterRun + // under the name of "begin" and "end" + this._timer = {}; + this._isOutputReady = false; } @@ -434,10 +438,44 @@ class Filter extends PipelineElement { * Launch the process. */ update(){ + this.addTimeRecord("begin"); + this._run(); + this.addTimeRecord("end"); + console.log("Running time for filter " + this.constructor.name + ": " + this.getTime("begin", "end") + "ms."); + } + + + /** + * + */ + _run(){ console.error("The update() method has not been written, this filter is not valid."); } + /** + * Set a time measurement (from an arbitrary starting point) + * @param {String} recordName - name of the record + */ + addTimeRecord( recordName ){ + this._timer[ recordName ] = performance.now(); + } + + + /** + * @return {Number} the elapsed time in ms between fromRecord and toRecord. + * Return -1 if one or both time record + */ + getTime(fromRecord, toRecord){ + if( fromRecord in this._timer && toRecord in this._timer ){ + return Math.abs(this._timer[toRecord] - this._timer[fromRecord]) + }else{ + console.warn("The two given record name must exist in the time record table."); + return -1; + } + } + + /** * Defines a callback. By defautl, no callback is called. */ @@ -967,7 +1005,7 @@ class CanvasImageWriter extends Filter{ /** * Overwrite the generic (empty) method. */ - update(){ + _run(){ // abort if invalid input if(!this.hasValidInput() ) @@ -1021,14 +1059,8 @@ class CanvasImageWriter extends Filter{ } - - - - this._ctx.putImageData(canvasImageData, 0, 0); - - } } @@ -1069,49 +1101,13 @@ class UrlImageReader extends Filter { super(); this._loadedCounter = 0; this._addOutput( Image2D, 0 ); - } /** - * Run the reading + * Overload the function */ - update_ORIG(){ - var that = this; - - var img = new Image(); - img.src = this._getInput(); - - img.onload = function() { - var tmpCanvas = document.createElement("canvas"); - tmpCanvas.width = img.width; - tmpCanvas.height = img.height; - var canvasContext = tmpCanvas.getContext('2d'); - canvasContext.drawImage(img, 0, 0); - - try{ - var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); - var dataArray = imageData.data; - - var img2D = that.getOutput( category ); - img2D.setData( dataArray, img.width, img.height); - - // call the loaded callback only when all images are loaded - if( "imageLoaded" in that._events){ - that._events.imageLoaded( that ); - } - - }catch(e){ - console.error(e); - } - - }; - - - } - - - update(){ + _run(){ var that = this; var inputCategories = this.getInputCategories(); @@ -1122,6 +1118,10 @@ class UrlImageReader extends Filter { } + /** + * [PRIVATE] + * Loading task for a single category (aka file, in this case) + */ _loadImage( inputCategory ){ var that = this; @@ -1193,7 +1193,7 @@ class FileImageReader extends Filter { super(); this._allowedTypes = /image.*/; - this._onReadCallback = callback; + this._addOutput( Image2D, 0 ); } @@ -1217,7 +1217,7 @@ class FileImageReader extends Filter { /** * Run the reading */ - update(){ + _run(){ if(! this.hasValidInput) return @@ -1238,10 +1238,8 @@ class FileImageReader extends Filter { var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = new Image2D(); + var img2D = that.getOutput(); img2D.setData( dataArray, img.width, img.height); - console.log(img2D); - that._setOutput( img2D ); if("imageLoaded" in that._events){ that._events.imageLoaded( that ); @@ -1300,7 +1298,7 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { /** * Run the filter */ - update(){ + _run(){ if( ! this.hasValidInput()) return; @@ -1361,7 +1359,7 @@ class SpectralScaleImageFilter extends ImageToImageFilter { /** * Run the filter */ - update(){ + _run(){ // filter must have valid input of the same size if( !this.hasSameSizeInput() || !this.hasValidInput()){ return; @@ -2747,6 +2745,15 @@ return parser; * should be set using `setMetadata( "expresssion", "A * B" )` , where `A` and `B` * are the categories set in input. * +* Using a blending expression is the aesiest way to test a blending but it is a +* pretty slow process since the expresion has to be evaluated for every process. +* To speed-up your process, it is recomended to develop a new filter that does +* exactly (and only) the blending method you want. +* +* usage: examples/imageBlending.html +* usage: examples/imageBlending2.html +* usage: examples/forEachPixelGradientBlend.html +* */ class ImageBlendExpressionFilter extends ImageToImageFilter { @@ -2757,7 +2764,7 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { - update(){ + _run(){ // the metadata was not set if(!this.hasMetadata("expression")){ diff --git a/dist/pixpipe.js.map b/dist/pixpipe.js.map index 6052e9d..6ec1f56 100644 --- a/dist/pixpipe.js.map +++ b/dist/pixpipe.js.map @@ -1 +1 @@ -{"version":3,"file":"pixpipe.js","sources":["../src/core/PixpipeObject.js","../src/core/PipelineElement.js","../src/core/Pipeline.js","../src/core/Filter.js","../src/core/Image2D.js","../src/core/ImageToImageFilter.js","../src/core/PixelWiseImageFilter.js","../src/io/CanvasImageWriter.js","../src/io/UrlImageReader.js","../src/io/FileImageReader.js","../src/filter/ForEachPixelImageFilter.js","../src/filter/SpectralScaleImageFilter.js","../node_modules/expr-eval/dist/bundle.js","../src/filter/ImageBlendExpressionFilter.js","../src/pixpipe.js"],"sourcesContent":["/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\n/**\n* PixpipeObject is the base object of all. It creates a uuid and has few\n* generic attributes like type, name and description. Not all these attributes\n* always useful;\n*/\nclass PixpipeObject {\n\n constructor(){\n // unique identifier\n this._uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n\n // Metadata can be anything, a name, an ID, a description, a DOM element.\n // everything that is not an input but rather a setting\n this._metadata = {};\n\n this._pipeline = null;\n\n this._type = PixpipeObject.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"GENERIC\";\n }\n\n\n /**\n * Compare a give type to the type of this object.\n * @param {String} t - a type, better to call the static method of each object, like Image.TYPE()\n */\n isOfType( t ){\n return !(this._type.localeCompare(t))\n }\n\n\n /**\n * Get type of object.\n * @return {String} the type\n */\n getType(){\n this._type;\n }\n\n /**\n * Return a copy of the uuid\n */\n get uuid(){\n return this._uuid.slice();\n }\n\n\n /**\n * Set a metadata using a pair of key and value.\n * @param {String} key - the ID of the metadata\n * @param {Object} value - can be a string, Number or Object\n */\n setMetadata( key, value ){\n if(typeof key === 'string' || key instanceof String){\n this._metadata[ key ] = value;\n }else{\n console.warn(\"The given key must be a String Object.\");\n }\n\n }\n\n\n /**\n * Retrieve a metadata using a key.\n * @param {String} key - the ID of the metadata\n * @return {Object} the metadata object - or null if non existent\n */\n getMetadata( key ){\n if( key in this._metadata){\n return this._metadata[ key ];\n }else{\n console.warn(\"The metadata with key: \" + key + \" doe not exist.\");\n return null;\n }\n }\n\n\n /**\n * Check if the metadata with the given key exists.\n * @param {String} key - the key to look up in the metadata collection\n * @return {Boolean} true if the metadata with the given is present, false if not.\n */\n hasMetadata( key ){\n return (key in this._metadata);\n }\n\n\n}\n\nexport { PixpipeObject }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n\nclass PipelineElement extends PixpipeObject {\n\n constructor(){\n super();\n\n this._pipeline = null;\n this._type = PipelineElement.TYPE();\n }\n\n\n /**\n * Acces it like a static attribute.\n * Must be overloaded.\n */\n static TYPE(){\n return \"PIPELINE_ELEMENT\";\n }\n\n\n /**\n * Associate a Pipeline instance to this image. Not supposed to be called manually\n * because it is automatically called-back when adding a filter to a pipeline.\n * @param {Pipeline} p - Pipeline object.\n */\n setPipeline( p ){\n // only if not already set.\n if(!this._pipeline){\n this._pipeline = p;\n }\n }\n\n\n} /* ENDS class PipelineElement */\n\nexport { PipelineElement }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { PixpipeObject } from './PixpipeObject.js';\n\n/**\n* A Pipeline instance handles a cascade of filter when an input dataset is updated.\n* Using a Pipeline object is not mandatory and can be replaced by calling `update()`.\n*/\nclass Pipeline extends PixpipeObject {\n\n constructor(){\n super();\n this._type = Pipeline.TYPE();\n\n // a list of filters\n this._filters = [];\n\n this._isUpdated = false;\n }\n\n\n /**\n * Hardcode the datatype\n */\n static TYPE(){\n return \"PIPELINE\";\n }\n\n\n /**\n * Add a filter to the pipeline.\n *\n */\n addFilter( f ){\n this._filters.push( f );\n console.log(\"Filter \" + f.constructor.name + \" added to the pipeline.\");\n }\n\n\n /**\n *\n */\n update(forceAll = true){\n\n if( forceAll ){\n this._forceUpdateAll();\n }else{\n\n }\n\n this._isUpdated = true;\n }\n\n\n /**\n * Run an update on every single filter\n */\n _forceUpdateAll(){\n console.log(this._filters);\n for(var f=0; f 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._input );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * Check if all the inputs have the same number of component per pixel.\n * @return {Boolean} true if the ncpp are the same for all input image\n */\n hasSameNcppInput(){\n var inputCategories = Object.keys( this._input );\n\n // if no input, return false\n if(!inputCategories.length)\n return false;\n\n var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel();\n\n for(var i=0; i 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\nimport Parser from 'expr-eval'\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n\n/**\n* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as\n* we need as long as they have the same size and the same number of components\n* per pixel.\n* This filter blends images pixel values using a literal expression. This expression\n* should be set using `setMetadata( \"expresssion\", \"A * B\" )` , where `A` and `B`\n* are the categories set in input.\n*\n*/\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n this._addOutput( Image2D );\n }\n\n\n\n update(){\n\n // the metadata was not set\n if(!this.hasMetadata(\"expression\")){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires a blending expression.\\nUse 'setMetadata(\\\"expression\\\", \\\"...\\\")' to set it.\" );\n return;\n }\n\n if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){\n return;\n }\n\n if(!this.getNumberOfInputs()){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires at least one inpupt.\");\n return;\n }\n\n var inputCategories = this.getInputCategories();\n var firstInput = this._getInput( inputCategories[0] );\n var outputBuffer = firstInput.getDataCopy();\n var parser = new Parser.Parser();\n var expr = parser.parse( this.getMetadata(\"expression\") );\n\n for(var i=0; i 0 && options.height > 0){\n this._width = options.width;\n this._height = options.height;\n\n if(\"color\" in options){\n this._componentsPerPixel = options.color.length;\n }\n\n this._data = new Float32Array( this._width * this._height * this._componentsPerPixel );\n\n // init with the given color\n if(\"color\" in options){\n var color = options.color;\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height &&\n color.length == this._componentsPerPixel)\n {\n\n var pos1D = this.get1dIndexFrom2dPosition( position );\n\n for(var i=0; i=0 && position.x < this._width &&\n \"y\" in position && position.y >=0 && position.y < this._height)\n {\n var pos1D = this.get1dIndexFrom2dPosition( position );\n var color = this._data.slice(pos1D, pos1D + this._componentsPerPixel);\n return color;\n\n }else{\n console.warn(\"The requested position is outside the image.\");\n return null;\n }\n }\n\n\n /**\n * @return {Number} the width of the Image2D\n */\n getWidth(){\n return this._width;\n }\n\n\n /**\n * @return {Number} the height of the Image2D\n */\n getHeight(){\n return this._height;\n }\n\n\n /**\n * @return {Number} the number of components per pixel\n */\n getComponentsPerPixel(){\n return this._componentsPerPixel;\n }\n\n\n /**\n * @return {Float32Array} the original data, dont mess up with this one.\n * in case of doubt, use getDataCopy()\n */\n getData(){\n //return this._data.slice(); // return a copy\n return this._data; // return the actual array, editable!\n }\n\n\n /**\n * @return {Float32Array} a deep copy of the data\n */\n getDataCopy(){\n return this._data.slice();\n }\n\n\n /**\n * Compute the (x, y) position from a position in a 1D array.\n * This has nothing to do with the number of components per pixel.\n * @param {Number} i - the index of a pixel.\n * @return {Object} coordinate as {x, y}\n */\n get2dPositionFrom1dIndex( i ){\n return {\n x: i % this._width,\n y: Math.floor(i / this._width)\n }\n }\n\n\n /**\n * Compute the 1D index within the data buffer from a 2D position {x, y}.\n * This has nothing to do with the number of components per pixel.\n * @param {Object} position - 2D coord like {x, y}\n * @return {Number} the 1D position within the buffer\n */\n get1dIndexFrom2dPosition( position ){\n return (position.x + position.y*this._width);\n }\n\n\n\n\n // TODO: warn the pipeline if metadata changed or pixel value changed\n // --> do NOT update the pipeline at every modif because if we change a lot\n // of pixel values... (wait to call update() on the pipeline.)\n\n\n} /* END of class Image2D */\n\nexport { Image2D }\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\nimport { Filter } from './Filter.js';\nimport { Image2D } from './Image2D.js';\n\n/**\n* ImageToImageFilter is not to be used as-is but rather as a base class for any\n* filter that input a single Image2D and output a single Image2D.\n* This class does not overload the update() method.\n*/\nclass ImageToImageFilter extends Filter {\n\n constructor(){\n super();\n this._inputValidator[ 0 ] = Image2D.TYPE();\n\n // will be a copy of the input Image2D buffer\n this._inputBuffer = null;\n }\n\n\n /**\n * Check if all input image have the same size.\n * @return {Boolean} true is same size, false if not.\n */\n hasSameSizeInput(){\n var that = this;\n var inputCategories = Object.keys( this._input );\n var sameSize = true;\n\n var widths = [];\n var heights = [];\n\n inputCategories.forEach( function(key){\n widths.push( that._getInput( key ).getWidth() );\n heights.push( that._getInput( key ).getHeight() );\n });\n\n // if all input have the same size\n if(widths.length){\n widths.sort();\n heights.sort();\n sameSize = (widths[ 0 ] == widths[ widths.length -1 ] ) &&\n (heights[ 0 ] == heights[ heights.length -1 ] );\n\n if( !sameSize ){\n console.warn(\"Input image do not all have the same size. Filter not valid\");\n }\n }\n\n return sameSize;\n }\n\n\n /**\n * Check if all the inputs have the same number of component per pixel.\n * @return {Boolean} true if the ncpp are the same for all input image\n */\n hasSameNcppInput(){\n var inputCategories = Object.keys( this._input );\n\n // if no input, return false\n if(!inputCategories.length)\n return false;\n\n var ncpp = this._getInput( inputCategories[0] ).getComponentsPerPixel();\n\n for(var i=0; i 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, n2));\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(n1, n2, n3));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(n1));\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IEXPR) {\n nstack.push(item.value);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f;\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(String(' + n1 + ') + String(' + n2 + '))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n var argCount = item.value;\n var args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n return nstack[0];\n}\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nfunction getSymbols(tokens, symbols) {\n for (var i = 0, L = tokens.length; i < L; i++) {\n var item = tokens[i];\n if (item.type === IVAR && (indexOf(symbols, item.value) === -1)) {\n symbols.push(item.value);\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols);\n }\n }\n}\n\nExpression.prototype.symbols = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n return vars;\n};\n\nExpression.prototype.variables = function () {\n var vars = [];\n getSymbols(this.tokens, vars);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\nfunction sub(a, b) {\n return a - b;\n}\nfunction mul(a, b) {\n return a * b;\n}\nfunction div(a, b) {\n return a / b;\n}\nfunction mod(a, b) {\n return a % b;\n}\nfunction concat(a, b) {\n return '' + a + b;\n}\nfunction equal(a, b) {\n return a === b;\n}\nfunction notEqual(a, b) {\n return a !== b;\n}\nfunction greaterThan(a, b) {\n return a > b;\n}\nfunction lessThan(a, b) {\n return a < b;\n}\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt(a * a + 1));\n}\nfunction acosh(a) {\n return Math.log(a + Math.sqrt(a * a - 1));\n}\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\nfunction neg(a) {\n return -a;\n}\nfunction not(a) {\n return !a;\n}\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\nfunction random(a) {\n return Math.random() * (a || 1);\n}\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\nfunction stringLength(s) {\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0, L = arguments.length; i < L; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) -\n 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) +\n 5246819 / (75246796800 * fiveN * n));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\n\nfunction Token(type, value, line, column) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.column = column;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(expression, unaryOps, binaryOps, ternaryOps, consts) {\n this.pos = 0;\n this.line = 0;\n this.column = 0;\n this.current = null;\n this.unaryOps = unaryOps;\n this.binaryOps = binaryOps;\n this.ternaryOps = ternaryOps;\n this.consts = consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.savedLine = 0;\n this.savedColumn = 0;\n}\n\nTokenStream.prototype.newToken = function (type, value, line, column) {\n return new Token(type, value, line != null ? line : this.line, column != null ? column : this.column);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n this.savedLine = this.line;\n this.savedColumn = this.column;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n this.line = this.savedLine;\n this.column = this.savedColumn;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isComma() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startLine = this.line;\n var startColumn = this.column;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n this.pos++;\n this.column++;\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startLine, startColumn);\n var newLine = rawString.indexOf('\\n');\n var lastNewline = -1;\n while (newLine >= 0) {\n this.line++;\n this.column = 0;\n lastNewline = newLine;\n newLine = rawString.indexOf('\\n', newLine + 1);\n }\n this.column += rawString.length - lastNewline;\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '(' || char === ')') {\n this.current = this.newToken(TPAREN, char);\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var char = this.expression.charAt(this.pos);\n if (char === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n this.column++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n this.column += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var char = this.expression.charAt(this.pos);\n while (char === ' ' || char === '\\t' || char === '\\n' || char === '\\r') {\n r = true;\n this.pos++;\n this.column++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n }\n if (this.pos >= this.expression.length) {\n break;\n }\n char = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var char = this.expression.charAt(this.pos);\n if (char === '/' && this.expression.charAt(this.pos + 1) === '*') {\n var startPos = this.pos;\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n var comment = this.expression.substring(startPos, this.pos);\n var newline = comment.indexOf('\\n');\n while (newline >= 0) {\n this.line++;\n this.column = comment.length - newline;\n newline = comment.indexOf('\\n', newline + 1);\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var column = this.column;\n var resetColumn = column;\n var foundDot = false;\n var foundDigits = false;\n var char;\n\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if ((char >= '0' && char <= '9') || (!foundDot && char === '.')) {\n if (char === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n column++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n resetColumn = column;\n }\n\n if (char === 'e' || char === 'E') {\n pos++;\n column++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n char = this.expression.charAt(pos);\n if (acceptSign && (char === '+' || char === '-')) {\n acceptSign = false;\n } else if (char >= '0' && char <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n column++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n column = resetColumn;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n this.column = column;\n } else {\n this.pos = resetPos;\n this.column = resetColumn;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var char = this.expression.charAt(this.pos);\n\n if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%' || char === '^' || char === '?' || char === ':' || char === '.') {\n this.current = this.newToken(TOP, char);\n } else if (char === '∙' || char === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (char === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (char === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (char === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n this.column++;\n } else {\n return false;\n }\n } else if (char === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n this.column++;\n } else {\n this.current = this.newToken(TOP, char);\n }\n } else {\n return false;\n }\n this.pos++;\n this.column++;\n return true;\n};\n\nTokenStream.prototype.parseError = function (msg) {\n throw new Error('parse error [' + (this.line + 1) + ':' + (this.column + 1) + ']: ' + msg);\n};\n\nvar unaryInstructionCache = {};\nfunction unaryInstruction(value) {\n var inst = unaryInstructionCache[value];\n if (!inst) {\n inst = unaryInstructionCache[value] = new Instruction(IOP1, value);\n }\n return inst;\n}\n\nvar binaryInstructionCache = {};\nfunction binaryInstruction(value) {\n var inst = binaryInstructionCache[value];\n if (!inst) {\n inst = binaryInstructionCache[value] = new Instruction(IOP2, value);\n }\n return inst;\n}\n\nvar ternaryInstructionCache = {};\nfunction ternaryInstruction(value) {\n var inst = ternaryInstructionCache[value];\n if (!inst) {\n inst = ternaryInstructionCache[value] = new Instruction(IOP3, value);\n }\n return inst;\n}\n\nfunction ParserState(parser, tokenStream) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return indexOf(value, token.value) >= 0;\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n throw new Error('parse error [' + this.tokens.line + ':' + this.tokens.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n if (this.accept(TNAME)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n this.parseConditionalExpression(instr);\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n this.parseAndExpression(instr);\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n this.parseComparison(instr);\n instr.push(binaryInstruction('and'));\n }\n};\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, ['==', '!=', '<', '<=', '>=', '>'])) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ['+', '-', '||'])) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, ['*', '/', '%'])) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if ((this.current.value !== '-' && this.current.value !== '+' && this.nextToken.type === TPAREN && this.nextToken.value === '(')) {\n this.restore();\n this.parseExponential(instr);\n } else {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n }\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.')) {\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n }\n};\n\nfunction Parser() {\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n log: Math.log,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringLength,\n '!': factorial\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: Math.min,\n max: Math.max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.parse = function (expr) {\n return new Parser().parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return Parser.parse(expr).evaluate(variables);\n};\n\nParser.prototype = {\n parse: function (expr) {\n var instr = [];\n var parserState = new ParserState(this, new TokenStream(expr, this.unaryOps, this.binaryOps, this.ternaryOps, this.consts));\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n },\n\n evaluate: function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n }\n};\n\nvar parser = {\n Parser: Parser,\n Expression: Expression\n};\n\nreturn parser;\n\n})));\n","/*\n* Author Jonathan Lurie - http://me.jonahanlurie.fr\n* License MIT\n* Link https://github.com/jonathanlurie/pixpipejs\n* Lab MCIN - Montreal Neurological Institute\n*/\n\n\nimport Parser from 'expr-eval'\nimport { Image2D } from '../core/Image2D.js';\nimport { ImageToImageFilter } from '../core/ImageToImageFilter.js';\n\n\n/**\n* An instance of ImageBlendExpressionFilter takes Image2D inputs, as many as\n* we need as long as they have the same size and the same number of components\n* per pixel.\n* This filter blends images pixel values using a literal expression. This expression\n* should be set using `setMetadata( \"expresssion\", \"A * B\" )` , where `A` and `B`\n* are the categories set in input.\n*\n* Using a blending expression is the aesiest way to test a blending but it is a\n* pretty slow process since the expresion has to be evaluated for every process.\n* To speed-up your process, it is recomended to develop a new filter that does\n* exactly (and only) the blending method you want.\n*\n* usage: examples/imageBlending.html\n* usage: examples/imageBlending2.html\n* usage: examples/forEachPixelGradientBlend.html\n*\n*/\nclass ImageBlendExpressionFilter extends ImageToImageFilter {\n\n constructor(){\n super();\n this._addOutput( Image2D );\n }\n\n\n\n _run(){\n\n // the metadata was not set\n if(!this.hasMetadata(\"expression\")){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires a blending expression.\\nUse 'setMetadata(\\\"expression\\\", \\\"...\\\")' to set it.\" );\n return;\n }\n\n if( !this.hasSameNcppInput() || !this.hasSameSizeInput() ){\n return;\n }\n\n if(!this.getNumberOfInputs()){\n console.warn(\"A filter of type ImageBlendExpressionFilter requires at least one inpupt.\");\n return;\n }\n\n var inputCategories = this.getInputCategories();\n var firstInput = this._getInput( inputCategories[0] );\n var outputBuffer = firstInput.getDataCopy();\n var parser = new Parser.Parser();\n var expr = parser.parse( this.getMetadata(\"expression\") );\n\n for(var i=0; iPixpipejs // only shows where the mask is white blendingFilter.setMetadata("expression", "B > A ? B : A"); - var t0 = performance.now(); // apply the gradient on the loaded image blendingFilter.update(); - var t1 = performance.now(); - console.log("Performing blending took " + (t1 - t0) + " milliseconds."); // create a filter to write the image into a canvas var imageToCanvasFilter = new pixpipe.CanvasImageWriter( ); diff --git a/examples/mathExpressionImage2D.html b/examples/mathExpressionImage2D.html deleted file mode 100644 index aff0cb6..0000000 --- a/examples/mathExpressionImage2D.html +++ /dev/null @@ -1,55 +0,0 @@ - - - URL to Image2D - - - - - - - - -

Pixpipejs

-

- This does the following : -

    -
  • opening a distant image file with AJAX request, using pixpipe.UrlImageReader
  • -
  • displaying it in a canvas using pixpipe.CanvasImageWriter
  • -
-

- -
- - - - - diff --git a/package.json b/package.json index 2eb3726..47a4746 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "gulp-rollup": "^2.11.0", "gulp-util": "^3.0.8", "rollup": "^0.41.4", + "rollup-plugin-bundle-worker": "^0.1.0", "rollup-plugin-commonjs": "^8.0.2", "rollup-plugin-node-resolve": "^2.0.0" } diff --git a/readme.md b/readme.md index 939da00..2a79ae1 100644 --- a/readme.md +++ b/readme.md @@ -24,5 +24,8 @@ MIT - See [LICENSE file](LICENSE). # Todo -## doc for dev -- how to make _inputValidator (Filter) and when to call validateInput +- Doc and tutorials for developers +- Integrate wokers with Rollup +- FFT +- Image3D +- Readers for Minc and NIfTI diff --git a/rollup.config.js b/rollup.config.js index c265c0d..b778c3e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,6 +2,7 @@ var config = require('./package.json'); import commonjs from 'rollup-plugin-commonjs'; import nodeResolve from 'rollup-plugin-node-resolve'; +import bundleWorker from 'rollup-plugin-bundle-worker'; export default { entry: config.main, @@ -11,6 +12,7 @@ export default { dest: config.moduleBuildDir + '/' + config.moduleName + '.js', plugins: [ nodeResolve(), - commonjs() + commonjs(), + bundleWorker() ] }; diff --git a/src/core/Filter.js b/src/core/Filter.js index 7c96101..a601aaa 100644 --- a/src/core/Filter.js +++ b/src/core/Filter.js @@ -36,6 +36,10 @@ class Filter extends PipelineElement { //"0" : [] }; + // to leasure time. The 2 default values are added by _beforeRun and _afterRun + // under the name of "begin" and "end" + this._timer = {}; + this._isOutputReady = false; } @@ -198,10 +202,44 @@ class Filter extends PipelineElement { * Launch the process. */ update(){ + this.addTimeRecord("begin"); + this._run(); + this.addTimeRecord("end"); + console.log("Running time for filter " + this.constructor.name + ": " + this.getTime("begin", "end") + "ms."); + } + + + /** + * + */ + _run(){ console.error("The update() method has not been written, this filter is not valid."); } + /** + * Set a time measurement (from an arbitrary starting point) + * @param {String} recordName - name of the record + */ + addTimeRecord( recordName ){ + this._timer[ recordName ] = performance.now(); + } + + + /** + * @return {Number} the elapsed time in ms between fromRecord and toRecord. + * Return -1 if one or both time record + */ + getTime(fromRecord, toRecord){ + if( fromRecord in this._timer && toRecord in this._timer ){ + return Math.abs(this._timer[toRecord] - this._timer[fromRecord]) + }else{ + console.warn("The two given record name must exist in the time record table."); + return -1; + } + } + + /** * Defines a callback. By defautl, no callback is called. */ diff --git a/src/filter/ForEachPixelImageFilter.js b/src/filter/ForEachPixelImageFilter.js index e15bb9d..07db8a6 100644 --- a/src/filter/ForEachPixelImageFilter.js +++ b/src/filter/ForEachPixelImageFilter.js @@ -46,7 +46,7 @@ class ForEachPixelImageFilter extends PixelWiseImageFilter { /** * Run the filter */ - update(){ + _run(){ if( ! this.hasValidInput()) return; diff --git a/src/filter/ImageBlendExpressionFilter.js b/src/filter/ImageBlendExpressionFilter.js index b34f19b..0b6ff4c 100644 --- a/src/filter/ImageBlendExpressionFilter.js +++ b/src/filter/ImageBlendExpressionFilter.js @@ -38,7 +38,7 @@ class ImageBlendExpressionFilter extends ImageToImageFilter { - update(){ + _run(){ // the metadata was not set if(!this.hasMetadata("expression")){ diff --git a/src/filter/SpectralScaleImageFilter.js b/src/filter/SpectralScaleImageFilter.js index f640a23..9bcf683 100644 --- a/src/filter/SpectralScaleImageFilter.js +++ b/src/filter/SpectralScaleImageFilter.js @@ -33,7 +33,7 @@ class SpectralScaleImageFilter extends ImageToImageFilter { /** * Run the filter */ - update(){ + _run(){ // filter must have valid input of the same size if( !this.hasSameSizeInput() || !this.hasValidInput()){ return; diff --git a/src/io/CanvasImageWriter.js b/src/io/CanvasImageWriter.js index 64a8cbb..32624f7 100644 --- a/src/io/CanvasImageWriter.js +++ b/src/io/CanvasImageWriter.js @@ -73,7 +73,7 @@ class CanvasImageWriter extends Filter{ /** * Overwrite the generic (empty) method. */ - update(){ + _run(){ // abort if invalid input if(!this.hasValidInput() ) @@ -127,14 +127,8 @@ class CanvasImageWriter extends Filter{ } - - - - this._ctx.putImageData(canvasImageData, 0, 0); - - } } diff --git a/src/io/FileImageReader.js b/src/io/FileImageReader.js index ca2319e..2055447 100644 --- a/src/io/FileImageReader.js +++ b/src/io/FileImageReader.js @@ -35,7 +35,7 @@ class FileImageReader extends Filter { super(); this._allowedTypes = /image.*/; - this._onReadCallback = callback; + this._addOutput( Image2D, 0 ); } @@ -59,7 +59,7 @@ class FileImageReader extends Filter { /** * Run the reading */ - update(){ + _run(){ if(! this.hasValidInput) return @@ -80,10 +80,8 @@ class FileImageReader extends Filter { var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); var dataArray = imageData.data; - var img2D = new Image2D(); + var img2D = that.getOutput(); img2D.setData( dataArray, img.width, img.height); - console.log(img2D); - that._setOutput( img2D ); if("imageLoaded" in that._events){ that._events.imageLoaded( that ) diff --git a/src/io/UrlImageReader.js b/src/io/UrlImageReader.js index 180d7a9..8cfa86c 100644 --- a/src/io/UrlImageReader.js +++ b/src/io/UrlImageReader.js @@ -38,49 +38,13 @@ class UrlImageReader extends Filter { super(); this._loadedCounter = 0; this._addOutput( Image2D, 0 ); - } /** - * Run the reading + * Overload the function */ - update_ORIG(){ - var that = this; - - var img = new Image(); - img.src = this._getInput(); - - img.onload = function() { - var tmpCanvas = document.createElement("canvas"); - tmpCanvas.width = img.width; - tmpCanvas.height = img.height; - var canvasContext = tmpCanvas.getContext('2d'); - canvasContext.drawImage(img, 0, 0); - - try{ - var imageData = canvasContext.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height); - var dataArray = imageData.data; - - var img2D = that.getOutput( category ); - img2D.setData( dataArray, img.width, img.height); - - // call the loaded callback only when all images are loaded - if( "imageLoaded" in that._events){ - that._events.imageLoaded( that ) - } - - }catch(e){ - console.error(e); - } - - }; - - - } - - - update(){ + _run(){ var that = this; var inputCategories = this.getInputCategories(); @@ -91,6 +55,10 @@ class UrlImageReader extends Filter { } + /** + * [PRIVATE] + * Loading task for a single category (aka file, in this case) + */ _loadImage( inputCategory ){ var that = this;