{"version":3,"sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","matrix.js","vectorious.js","vector.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","Matrix","self","this","rows","slice","arguments","forEach","argument","Vector","push","zeros","construct","prototype","add","matrix","map","vector","index","subtract","scale","scalar","j","row","ones","multiply","copy","sum","k","get","set","transpose","gauss","reduce","argmax","max","Math","min","abs","swap","pivot","augment","combine","identity","size","diag","elements","trace","values","previous","current","equals","value","callback","each","toString","join","./vector.js",2,"Function","args","object","Object","create","apply","normalize","project","magnitude","cos","dot","count","Array","Number","valueOf","range","start","step","end","pop","sqrt","angle","acos",3,"./matrix.js"],"mappings":"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","file":"vectorious.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o max) {\n argmax = i;\n max = copy;\n }\n }\n \n if(matrix.get(argmax, k) === 0)\n throw 'Error: matrix is singular!';\n \n matrix.swap(k, argmax);\n \n for(i = k + 1; i < matrix.rows.length; i++) {\n for(j = k + 1; j < matrix.rows[0].length; j++)\n matrix.set(i, j, matrix.get(i, j) - matrix.get(k, j) * (matrix.get(i, k) / matrix.get(k, k)));\n \n matrix.set(i, k, 0);\n }\n }\n \n if(reduce) {\n var pivot = 0;\n for(k = matrix.rows.length - 1; k >= 0; k--) {\n for(i = 0; i < matrix.rows[0].length; i++) {\n copy = matrix.get(k, i);\n\n if(!pivot && copy !== 0)\n pivot = copy;\n }\n\n if(k)\n matrix.rows[k - 1] = matrix.rows[k - 1].scale(1 / pivot);\n matrix.rows[k] = matrix.rows[k].scale(1 / pivot);\n\n pivot = 0;\n }\n }\n \n return matrix;\n };\n \n Matrix.prototype.augment = function(matrix) {\n if(this.rows.length !== matrix.rows.length)\n throw 'Error: sizes do not match!';\n \n return Matrix.construct(this.rows.map(function(vector, index) {\n return vector.combine(matrix.rows[index]);\n }));\n };\n \n Matrix.prototype.identity = function(size) {\n var matrix = new Matrix().zeros(size, size),\n i, j;\n for(i = 0; i < size; i++)\n for(j = 0; j < size; j++)\n if(i === j)\n matrix.set(i, j, 1);\n \n return matrix;\n };\n\n Matrix.prototype.diag = function() {\n var elements = [],\n i, j;\n \n for(i = 0; i < this.rows.length; i++)\n for(j = 0; j < this.rows[0].length; j++)\n if(i === j)\n elements.push(this.get(i, j));\n \n return Vector.construct(elements);\n };\n\n Matrix.prototype.trace = function() {\n return Matrix.construct(this.diag().values.reduce(function(previous, current) {\n return previous + current;\n }));\n };\n\n Matrix.prototype.equals = function(matrix) {\n return this.rows\n .map(function(vector, index) {\n return vector.equals(matrix.rows[index]);\n })\n .reduce(function(previous, current) {\n return previous === current;\n });\n };\n\n Matrix.prototype.get = function(i, j) {\n return this.rows[i].get(j);\n };\n \n Matrix.prototype.set = function(i, j, value) {\n this.rows[i].set(j, value);\n return this;\n };\n \n Matrix.prototype.swap = function(i, j) {\n if(!this.rows[i].length || !this.rows[j].length)\n throw 'Error: index out of bounds';\n \n var copy = this.rows[i];\n this.rows[i] = this.rows[j];\n this.rows[j] = copy;\n \n return this;\n };\n \n Matrix.prototype.map = function(callback) {\n return Matrix.construct(this.rows.map(function(vector) {\n return vector.map(callback);\n }));\n };\n \n Matrix.prototype.each = function(callback) {\n this.rows.forEach(function(vector, index) {\n callback(vector, index);\n });\n \n return this;\n };\n \n Matrix.prototype.toString = function() {\n return '[' + this.rows.map(function(vector) {\n return vector.toString();\n }).join(', \\n') + ']';\n };\n \n module.exports = Matrix;\n})();","(function() {\n var Matrix = require('./matrix.js'),\n Vector = require('./vector.js');\n \n module.exports.Matrix = Matrix;\n module.exports.Vector = Vector;\n})();","(function() {\n 'use strict';\n \n function Vector() {\n var self = this;\n self.values = [];\n self.length = 0;\n \n [].slice.call(arguments, 0)\n .forEach(function(argument) {\n self.push(argument);\n self.length = self.values.length;\n });\n }\n \n // array of arguments to function arguments (e.g. f.construct([a, b, c]) => f(a, b, c))\n Function.prototype.construct = function(args) {\n var object = Object.create(this.prototype);\n this.apply(object, args);\n return object;\n };\n \n Vector.prototype.add = function(vector) {\n if(this.length !== vector.length)\n throw 'Error: sizes do not match!';\n \n return Vector.construct(this.values.map(function(value, index) {\n return value + vector.values[index];\n }));\n };\n \n Vector.prototype.subtract = function(vector) {\n if(this.length !== vector.length)\n throw 'Error: sizes do not match!';\n \n return Vector.construct(this.values.map(function(value, index) {\n return value - vector.values[index];\n }));\n };\n \n Vector.prototype.scale = function(scalar) {\n return Vector.construct(this.values.map(function(value) {\n return value * scalar;\n }));\n };\n \n Vector.prototype.normalize = function() {\n return this.scale(1 / this.length);\n };\n \n Vector.prototype.project = function(vector) {\n return Vector.construct(\n vector\n .normalize()\n .scale(this.magnitude() * Math.cos(this.dot(vector) / (this.magnitude() * vector.magnitude())))\n );\n };\n \n Vector.prototype.zeros = function(count) {\n this.values = Array\n .apply(null, new Array(count))\n .map(Number.prototype.valueOf, 0);\n this.length = count;\n return this;\n };\n \n Vector.prototype.ones = function(count) {\n this.values = Array\n .apply(null, new Array(count))\n .map(Number.prototype.valueOf, 1);\n this.length = count;\n return this;\n };\n \n Vector.prototype.range = function() {\n var args = [].slice.call(arguments, 0),\n start, step, end;\n \n switch(args.length) {\n case 2:\n end = args.pop();\n step = 1;\n start = args.pop();\n break;\n case 3:\n end = args.pop();\n step = args.pop();\n start = args.pop();\n break;\n default:\n throw 'Error: invalid range!';\n }\n \n if(end - start < 0) {\n var copy = end;\n end = start;\n start = copy;\n }\n \n if(step > end - start)\n throw 'Error: invalid range!';\n \n var i;\n for(i = start; i < end; i += step)\n this.push(i);\n \n return Vector.construct(this.values);\n };\n\n Vector.prototype.dot = function(vector) {\n if(this.length !== vector.length)\n throw 'Error: sizes do not match!';\n \n return this.values\n .map(function(value, index) {\n return value * vector.values[index];\n })\n .reduce(function(previous, current) {\n return previous + current;\n });\n };\n \n Vector.prototype.magnitude = function() {\n return Math.sqrt(this.values\n .map(function(value) {\n return value * value;\n })\n .reduce(function(previous, current) {\n return previous + current;\n })\n );\n };\n \n Vector.prototype.angle = function(vector) {\n return Math.acos(this.dot(vector) / this.magnitude() * vector.magnitude());\n };\n\n Vector.prototype.equals = function(vector) {\n if(this.length !== vector.length)\n return false;\n \n return this.values\n .map(function(value, index) {\n return value === vector.values[index];\n })\n .reduce(function(previous, current) {\n return previous === current;\n });\n };\n\n Vector.prototype.get = function(index) {\n return this.values[index];\n };\n \n Vector.prototype.set = function(index, value) {\n this.values[index] = value;\n return this;\n };\n \n Vector.prototype.combine = function(vector) {\n var self = this;\n vector.values.forEach(function(value) {\n self.push(value);\n self.length++;\n });\n \n return this;\n };\n \n Vector.prototype.push = function(value) {\n this.values.push(value);\n this.length++;\n return this;\n };\n \n Vector.prototype.map = function(callback) {\n return Vector.construct(this.values.map(function(value) {\n return callback(value);\n }));\n };\n \n Vector.prototype.each = function(callback) {\n this.values.forEach(function(value, index) {\n callback(value, index);\n });\n \n return this;\n };\n\n Vector.prototype.toString = function() {\n return '[' + this.values.join(', ') + ']';\n };\n \n module.exports = Vector;\n})();"],"sourceRoot":"/source/"}