@khanacademy/kas 0.2.7 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/__genfiles__/unitparser.js","../../src/__genfiles__/parser.js","../../src/nodes.js","../../src/compare.js"],"sourcesContent":["// this is a @generated file\n\n/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,9],$V2=[8,17],$V3=[6,11],$V4=[6,11,13,17];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"unitvalue\":3,\"magnitude\":4,\"unit\":5,\"EOF\":6,\"float\":7,\"POW\":8,\"int\":9,\"multatoms\":10,\"DIV\":11,\"expatom\":12,\"MUL\":13,\"atom\":14,\"^\":15,\"nat\":16,\"ATOM\":17,\"FLOAT\":18,\"NAT\":19,\"NEG\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"EOF\",8:\"POW\",11:\"DIV\",13:\"MUL\",15:\"^\",17:\"ATOM\",18:\"FLOAT\",19:\"NAT\",20:\"NEG\"},\nproductions_: [0,[3,3],[3,2],[4,3],[4,1],[5,3],[5,1],[10,3],[10,2],[10,1],[12,3],[12,1],[14,1],[7,1],[7,1],[16,1],[9,2],[9,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n\n return {\n type: \"unitMagnitude\",\n magnitude: $$[$0-2],\n unit: $$[$0-1],\n };\n \nbreak;\ncase 2:\n\n return {\n type: \"unitStandalone\",\n unit: $$[$0-1],\n }\n \nbreak;\ncase 3:\n\n this.$ = $$[$0-2] + \"e\" + $$[$0];\n \nbreak;\ncase 4: case 13: case 14: case 15: case 17:\n this.$ = $$[$0]; \nbreak;\ncase 5:\n\n this.$ = {\n num: $$[$0-2],\n denom: $$[$0],\n };\n \nbreak;\ncase 6:\n\n this.$ = {\n num: $$[$0],\n denom: null,\n };\n \nbreak;\ncase 7:\n this.$ = [$$[$0-2]].concat($$[$0]); \nbreak;\ncase 8:\n this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 9:\n this.$ = [$$[$0]]; \nbreak;\ncase 10:\n\n this.$ = {\n name: $$[$0-2],\n pow: $$[$0],\n };\n \nbreak;\ncase 11:\n\n this.$ = {\n name: $$[$0],\n pow: 1,\n };\n \nbreak;\ncase 12:\n this.$ = yytext; \nbreak;\ncase 16:\n this.$ = \"-\" + $$[$0]; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:$V0,18:[1,6],19:$V1},{1:[3]},{5:12,10:5,12:8,14:10,17:$V0},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},o($V2,[2,13]),o($V2,[2,14]),o($V3,[2,9],{12:8,14:10,10:17,13:[1,16],17:$V0}),o([6,8,11,13,17],[2,15]),o($V4,[2,11],{15:[1,18]}),o([6,11,13,15,17],[2,12]),{6:[1,19]},{1:[2,2]},{9:20,19:[1,22],20:[1,21]},{10:23,12:8,14:10,17:$V0},{10:24,12:8,14:10,17:$V0},o($V3,[2,8]),{16:25,19:$V1},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},o($V3,[2,7]),o($V4,[2,10]),{17:[2,16]}],\ndefaultActions: {13:[2,2],19:[2,1],20:[2,3],22:[2,17],23:[2,5],26:[2,16]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n //_token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 11;\nbreak;\ncase 1:return '(';\nbreak;\ncase 2:return ')';\nbreak;\ncase 3:return 8;\nbreak;\ncase 4:return 15;\nbreak;\ncase 5:return 13;\nbreak;\ncase 6:return 18;\nbreak;\ncase 7:return 19;\nbreak;\ncase 8:return 20;\nbreak;\ncase 9:return 17;\nbreak;\ncase 10:return 17;\nbreak;\ncase 11:return 17;\nbreak;\ncase 12:/* skip whitespace */\nbreak;\ncase 13:return 6;\nbreak;\n}\n},\nrules: [/^(?:\\/)/,/^(?:\\()/,/^(?:\\))/,/^(?:(\\*|x|\\u00d7|\\u2219|\\u22c5|\\u00b7)\\s*10\\s*\\^)/,/^(?:\\^)/,/^(?:\\*)/,/^(?:[0-9]+\\.[0-9]+)/,/^(?:[0-9]+)/,/^(?:-)/,/^(?:\\u00b0( ?)[cCfF])/,/^(?:fl\\.? oz\\.?)/,/^(?:[\\u00b5]?([A-Za-z-]+|[\\u2103\\u2109\\u212b]))/,/^(?:\\s+)/,/^(?:$)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport const unitParser = parser;\n","// This is a @generated file\nimport _ from \"underscore\";\n\n/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[1,17],$V2=[1,13],$V3=[1,14],$V4=[1,15],$V5=[1,32],$V6=[1,22],$V7=[1,23],$V8=[1,24],$V9=[1,25],$Va=[1,26],$Vb=[1,33],$Vc=[1,27],$Vd=[1,28],$Ve=[1,29],$Vf=[1,30],$Vg=[1,20],$Vh=[1,36],$Vi=[1,37],$Vj=[5,6,8,10,33,35,41,43,45],$Vk=[1,39],$Vl=[1,40],$Vm=[5,6,8,10,12,14,16,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],$Vn=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],$Vo=[5,6,8,10,12,14,16,18,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"equation\":3,\"expression\":4,\"SIGN\":5,\"EOF\":6,\"additive\":7,\"+\":8,\"multiplicative\":9,\"-\":10,\"triglog\":11,\"*\":12,\"negative\":13,\"/\":14,\"trig\":15,\"TRIG\":16,\"trigfunc\":17,\"^\":18,\"TRIGINV\":19,\"logbase\":20,\"ln\":21,\"log\":22,\"_\":23,\"subscriptable\":24,\"power\":25,\"primitive\":26,\"variable\":27,\"VAR\":28,\"CONST\":29,\"INT\":30,\"FLOAT\":31,\"{\":32,\"}\":33,\"(\":34,\")\":35,\"function\":36,\"FUNC\":37,\"invocation\":38,\"sqrt\":39,\"[\":40,\"]\":41,\"abs\":42,\"|\":43,\"LEFT|\":44,\"RIGHT|\":45,\"FRAC\":46,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"SIGN\",6:\"EOF\",8:\"+\",10:\"-\",12:\"*\",14:\"/\",16:\"TRIG\",18:\"^\",19:\"TRIGINV\",21:\"ln\",22:\"log\",23:\"_\",28:\"VAR\",29:\"CONST\",30:\"INT\",31:\"FLOAT\",32:\"{\",33:\"}\",34:\"(\",35:\")\",37:\"FUNC\",39:\"sqrt\",40:\"[\",41:\"]\",42:\"abs\",43:\"|\",44:\"LEFT|\",45:\"RIGHT|\",46:\"FRAC\"},\nproductions_: [0,[3,4],[3,2],[3,1],[4,1],[7,3],[7,3],[7,1],[9,2],[9,3],[9,3],[9,1],[13,2],[13,1],[15,1],[17,1],[17,3],[17,1],[20,1],[20,1],[20,3],[11,2],[11,2],[11,1],[25,3],[25,1],[27,1],[24,3],[24,1],[24,1],[24,1],[24,1],[24,3],[24,3],[36,1],[38,4],[38,4],[38,7],[38,4],[38,3],[38,3],[38,4],[26,1],[26,1],[26,7]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn new yy.Eq($$[$0-3], $$[$0-2], $$[$0-1]);\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3:\nreturn new yy.Add([]);\nbreak;\ncase 4: case 7: case 11: case 13: case 15: case 20: case 23: case 25: case 42: case 43:\nthis.$ = $$[$0];\nbreak;\ncase 5:\nthis.$ = yy.Add.createOrAppend($$[$0-2], $$[$0]);\nbreak;\ncase 6:\nthis.$ = yy.Add.createOrAppend($$[$0-2], yy.Mul.handleNegative($$[$0], \"subtract\"));\nbreak;\ncase 8:\nthis.$ = yy.Mul.fold(yy.Mul.createOrAppend($$[$0-1], $$[$0]));\nbreak;\ncase 9:\nthis.$ = yy.Mul.fold(yy.Mul.createOrAppend($$[$0-2], $$[$0]));\nbreak;\ncase 10:\nthis.$ = yy.Mul.fold(yy.Mul.handleDivide($$[$0-2], $$[$0]));\nbreak;\ncase 12:\nthis.$ = yy.Mul.handleNegative($$[$0]);\nbreak;\ncase 14: case 17:\nthis.$ = [yytext];\nbreak;\ncase 16:\nthis.$ = $$[$0-2].concat($$[$0]);\nbreak;\ncase 18:\nthis.$ = yy.Log.natural();\nbreak;\ncase 19:\nthis.$ = yy.Log.common();\nbreak;\ncase 21:\nthis.$ = yy.Trig.create($$[$0-1], $$[$0]);\nbreak;\ncase 22:\nthis.$ = yy.Log.create($$[$0-1], $$[$0]);\nbreak;\ncase 24:\nthis.$ = new yy.Pow($$[$0-2], $$[$0]);\nbreak;\ncase 26: case 34:\nthis.$ = yytext;\nbreak;\ncase 27:\nthis.$ = new yy.Var($$[$0-2], $$[$0]);\nbreak;\ncase 28:\nthis.$ = new yy.Var($$[$0]);\nbreak;\ncase 29:\nthis.$ = new yy.Const(yytext.toLowerCase());\nbreak;\ncase 30:\nthis.$ = yy.Int.create(Number(yytext));\nbreak;\ncase 31:\nthis.$ = yy.Float.create(Number(yytext));\nbreak;\ncase 32:\nthis.$ = $$[$0-1].completeParse();\nbreak;\ncase 33:\nthis.$ = $$[$0-1].completeParse().addHint('parens');\nbreak;\ncase 35: case 36:\nthis.$ = yy.Pow.sqrt($$[$0-1]);\nbreak;\ncase 37:\nthis.$ = new yy.Pow.nthroot($$[$0-1], $$[$0-4]);\nbreak;\ncase 38: case 39: case 40:\nthis.$ = new yy.Abs($$[$0-1]);\nbreak;\ncase 41:\nthis.$ = new yy.Func($$[$0-3], $$[$0-1]);\nbreak;\ncase 44:\nthis.$ = yy.Mul.handleDivide($$[$0-4], $$[$0-1]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:[1,3],7:4,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},o([5,6],[2,4],{8:$Vh,10:$Vi}),o($Vj,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vm,[2,11]),{10:$V0,11:8,13:41,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,13]),{10:$V0,11:8,13:42,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{10:$V0,11:8,13:43,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,23]),o($Vn,[2,15],{18:[1,44]}),o($Vn,[2,17]),o($Vn,[2,18]),o($Vn,[2,19],{23:[1,45]}),o($Vm,[2,25],{18:[1,46]}),o([10,16,18,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],[2,14]),o($Vo,[2,42]),o($Vo,[2,43]),{32:[1,47]},o($Vo,[2,28],{23:[1,48]}),o($Vo,[2,29]),o($Vo,[2,30]),o($Vo,[2,31]),{7:49,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:50,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:56,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{34:[1,57]},o([5,6,8,10,12,14,16,18,19,21,22,23,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],[2,26]),{34:[2,34]},{4:58,7:4,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{1:[2,2]},{9:59,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{9:60,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,8]),{10:$V0,11:8,13:61,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{10:$V0,11:8,13:62,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,12]),o($Vm,[2,21]),o($Vm,[2,22]),{10:$V0,11:8,13:63,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{24:64,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va},{10:$V0,11:8,13:65,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:66,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{24:67,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va},{8:$Vh,10:$Vi,33:[1,68]},{8:$Vh,10:$Vi,35:[1,69]},{7:70,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:71,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:72,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:73,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{8:$Vh,10:$Vi,43:[1,74]},{8:$Vh,10:$Vi,45:[1,75]},{7:76,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{6:[1,77]},o($Vj,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vj,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vm,[2,9]),o($Vm,[2,10]),o($Vn,[2,16]),o($Vn,[2,20]),o($Vm,[2,24]),{8:$Vh,10:$Vi,33:[1,78]},o($Vo,[2,27]),o($Vo,[2,32]),o($Vo,[2,33]),{8:$Vh,10:$Vi,35:[1,79]},{8:$Vh,10:$Vi,33:[1,80]},{8:$Vh,10:$Vi,41:[1,81]},{8:$Vh,10:$Vi,35:[1,82]},o($Vo,[2,39]),o($Vo,[2,40]),{8:$Vh,10:$Vi,35:[1,83]},{1:[2,1]},{32:[1,84]},o($Vo,[2,35]),o($Vo,[2,36]),{32:[1,85]},o($Vo,[2,38]),o($Vo,[2,41]),{7:86,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:87,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{8:$Vh,10:$Vi,33:[1,88]},{8:$Vh,10:$Vi,33:[1,89]},o($Vo,[2,44]),o($Vo,[2,37])],\ndefaultActions: {3:[2,3],33:[2,34],35:[2,2],77:[2,1]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n //_token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"flex\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip \\space */\nbreak;\ncase 2:/* skip '\\ ' */\nbreak;\ncase 3:return \"INT\"\nbreak;\ncase 4:return \"FLOAT\"\nbreak;\ncase 5:return \"^\"\nbreak;\ncase 6:return \"*\"\nbreak;\ncase 7:return \"*\"\nbreak;\ncase 8:return \"*\"\nbreak;\ncase 9:return \"*\"\nbreak;\ncase 10:return \"/\"\nbreak;\ncase 11:return \"/\"\nbreak;\ncase 12:return \"-\"\nbreak;\ncase 13:return \"-\"\nbreak;\ncase 14:return \"+\"\nbreak;\ncase 15:return \"^\"\nbreak;\ncase 16:return \"(\"\nbreak;\ncase 17:return \")\"\nbreak;\ncase 18:return \"(\"\nbreak;\ncase 19:return \")\"\nbreak;\ncase 20:return \"[\"\nbreak;\ncase 21:return \"]\"\nbreak;\ncase 22:return \"{\"\nbreak;\ncase 23:return \"}\"\nbreak;\ncase 24:return \"{\"\nbreak;\ncase 25:return \"}\"\nbreak;\ncase 26:return \"_\"\nbreak;\ncase 27:return \"|\"\nbreak;\ncase 28:return \"LEFT|\"\nbreak;\ncase 29:return \"RIGHT|\"\nbreak;\ncase 30:return \"!\"\nbreak;\ncase 31:return \"SIGN\"\nbreak;\ncase 32:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 33:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 34:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 35:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 36:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 37:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 38:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 39:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 40:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 41:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 42:return \"FRAC\"\nbreak;\ncase 43:return \"FRAC\"\nbreak;\ncase 44:return \"sqrt\"\nbreak;\ncase 45:return \"abs\"\nbreak;\ncase 46:return \"ln\"\nbreak;\ncase 47:return \"log\"\nbreak;\ncase 48:return \"TRIG\"\nbreak;\ncase 49:return \"TRIG\"\nbreak;\ncase 50:return \"TRIG\"\nbreak;\ncase 51:return \"TRIG\"\nbreak;\ncase 52:yy_.yytext = \"sin\"; return \"TRIG\"\nbreak;\ncase 53:yy_.yytext = \"cos\"; return \"TRIG\"\nbreak;\ncase 54:yy_.yytext = \"tan\"; return \"TRIG\"\nbreak;\ncase 55:yy_.yytext = \"csc\"; return \"TRIG\"\nbreak;\ncase 56:yy_.yytext = \"sec\"; return \"TRIG\"\nbreak;\ncase 57:yy_.yytext = \"cot\"; return \"TRIG\"\nbreak;\ncase 58:yy_.yytext = \"arcsin\"; return \"TRIG\"\nbreak;\ncase 59:yy_.yytext = \"arccos\"; return \"TRIG\"\nbreak;\ncase 60:yy_.yytext = \"arctan\"; return \"TRIG\"\nbreak;\ncase 61:yy_.yytext = \"arccsc\"; return \"TRIG\"\nbreak;\ncase 62:yy_.yytext = \"arcsec\"; return \"TRIG\"\nbreak;\ncase 63:yy_.yytext = \"arccot\"; return \"TRIG\"\nbreak;\ncase 64:return \"TRIGINV\"\nbreak;\ncase 65:return \"TRIGINV\"\nbreak;\ncase 66:yy_.yytext = \"sinh\"; return \"TRIG\"\nbreak;\ncase 67:yy_.yytext = \"cosh\"; return \"TRIG\"\nbreak;\ncase 68:yy_.yytext = \"tanh\"; return \"TRIG\"\nbreak;\ncase 69:yy_.yytext = \"csch\"; return \"TRIG\"\nbreak;\ncase 70:yy_.yytext = \"sech\"; return \"TRIG\"\nbreak;\ncase 71:yy_.yytext = \"tanh\"; return \"TRIG\"\nbreak;\ncase 72:return \"CONST\"\nbreak;\ncase 73:yy_.yytext = \"pi\"; return \"CONST\"\nbreak;\ncase 74:yy_.yytext = \"pi\"; return \"CONST\"\nbreak;\ncase 75:return \"VAR\"\nbreak;\ncase 76:yy_.yytext = \"theta\"; return \"VAR\"\nbreak;\ncase 77:yy_.yytext = \"theta\"; return \"VAR\"\nbreak;\ncase 78:return \"VAR\"\nbreak;\ncase 79:yy_.yytext = \"phi\"; return \"VAR\"\nbreak;\ncase 80:yy_.yytext = \"phi\"; return \"VAR\"\nbreak;\ncase 81:return yy.symbolLexer(yy_.yytext)\nbreak;\ncase 82:return \"EOF\"\nbreak;\ncase 83:return \"INVALID\"\nbreak;\ncase 84:console.log(yy_.yytext);\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\\\space)/,/^(?:\\\\ )/,/^(?:[0-9]+\\.?)/,/^(?:([0-9]+)?\\.[0-9]+)/,/^(?:\\*\\*)/,/^(?:\\*)/,/^(?:\\\\cdot|·)/,/^(?:\\\\times|×)/,/^(?:\\\\ast)/,/^(?:\\/)/,/^(?:\\\\div|÷)/,/^(?:-)/,/^(?:−)/,/^(?:\\+)/,/^(?:\\^)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\\\left\\()/,/^(?:\\\\right\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\\\left\\{)/,/^(?:\\\\right\\})/,/^(?:_)/,/^(?:\\|)/,/^(?:\\\\left\\|)/,/^(?:\\\\right\\|)/,/^(?:\\!)/,/^(?:<=|>=|<>|<|>|=)/,/^(?:\\\\le)/,/^(?:\\\\ge)/,/^(?:\\\\leq)/,/^(?:\\\\geq)/,/^(?:=\\/=)/,/^(?:\\\\ne)/,/^(?:\\\\neq)/,/^(?:≠)/,/^(?:≤)/,/^(?:≥)/,/^(?:\\\\frac)/,/^(?:\\\\dfrac)/,/^(?:sqrt|\\\\sqrt)/,/^(?:abs|\\\\abs)/,/^(?:ln|\\\\ln)/,/^(?:log|\\\\log)/,/^(?:sin|cos|tan)/,/^(?:csc|sec|cot)/,/^(?:sinh|cosh|tanh)/,/^(?:csch|sech|coth)/,/^(?:\\\\sin)/,/^(?:\\\\cos)/,/^(?:\\\\tan)/,/^(?:\\\\csc)/,/^(?:\\\\sec)/,/^(?:\\\\cot)/,/^(?:\\\\arcsin)/,/^(?:\\\\arccos)/,/^(?:\\\\arctan)/,/^(?:\\\\arccsc)/,/^(?:\\\\arcsec)/,/^(?:\\\\arccot)/,/^(?:arcsin|arccos|arctan)/,/^(?:arccsc|arcsec|arccot)/,/^(?:\\\\sinh)/,/^(?:\\\\cosh)/,/^(?:\\\\tanh)/,/^(?:\\\\csch)/,/^(?:\\\\sech)/,/^(?:\\\\coth)/,/^(?:pi)/,/^(?:π)/,/^(?:\\\\pi)/,/^(?:theta)/,/^(?:θ)/,/^(?:\\\\theta)/,/^(?:phi)/,/^(?:φ)/,/^(?:\\\\phi)/,/^(?:[a-zA-Z])/,/^(?:$)/,/^(?:.)/,/^(?:.)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport {parser};\n","/* eslint-disable prettier/prettier */\n/* eslint-disable import/order */\n/* TODO(charlie): fix these lint errors (http://eslint.org/docs/rules): */\n/* eslint-disable indent, no-undef, no-var, one-var, no-dupe-keys, no-new-func, no-redeclare, no-unused-vars, comma-dangle, max-len, prefer-spread, space-infix-ops, space-unary-ops */\nimport _ from \"underscore\";\n\nimport {unitParser} from \"./__genfiles__/unitparser.js\";\nimport {parser} from \"./__genfiles__/parser.js\";\n\n/* The node hierarcy is as follows:\n\n (Expr)\n (Seq) 2+ children\n Add\n Mul\n Pow 2 children\n Log 2 children\n Eq 2 children\n Trig 1 child\n Abs 1 child\n (Symbol)\n Func 1 child e.g. f(x)\n Var leaf node e.g. x, x_n\n Const leaf node e.g. pi, e, <i>\n Unit leaf node e.g. kg\n (Num) leaf node\n Rational e.g. 2/3\n Int\n Float\n\n (abstract, not meant to be instantiated)\n\n == Key design concepts ==\n Functional: All methods return new nodes - nodes are never mutated.\n Ignore commutativity: Commutative inputs should be parsed equivalently.\n Exploit commutativity: Output should take advantage of ordering.\n*/\n\n/* non user-facing functions */\n\n// assert that all abstract methods have been overridden\nvar abstract = function() {\n // Try to give people a bit of information when this happens\n throw new Error(\"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @babel/no-invalid-this\n this.print());\n};\n\n// throw an error that is meant to be caught by the test suite (not user facing)\nvar error = function(message) { throw new Error(message); };\n\n// reliably detect NaN\nvar isNaN = function(object) { return object !== object; };\n\n// return a random float between min (inclusive) and max (exclusive),\n// not that inclusivity means much, probabilistically, on floats\nvar randomFloat = function(min, max) {\n var extent = max - min;\n return Math.random() * extent + min;\n};\n\n/* constants */\nvar ITERATIONS = 12;\nvar TOLERANCE = 9; // decimal places\n\n\n/* abstract base expression node */\nfunction Expr() {}\n\n_.extend(Expr.prototype, {\n\n // this node's immediate constructor\n func: abstract,\n\n // an array of the arguments to this node's immediate constructor\n args: abstract,\n\n // make a new node with the given arguments\n construct: function(args) {\n var instance = new this.func();\n this.func.apply(instance, args);\n return instance;\n },\n\n // an abstraction for chainable, bottom-up recursion\n recurse: function(method) {\n var passed = Array.prototype.slice.call(arguments, 1);\n var args = _.map(this.args(), function(arg) {\n return _.isString(arg) ? arg : arg[method].apply(arg, passed);\n });\n return this.construct(args);\n },\n\n // evaluate numerically with given variable mapping\n eval: abstract,\n\n codegen: abstract,\n\n compile: function() {\n var code = this.codegen();\n try {\n return new Function(\"vars\", \"return \" + code + \";\");\n } catch (e) {\n throw new Error(\"Function did not compile: \" + code);\n }\n },\n\n // returns a string unambiguously representing the expression\n // should be valid as input\n // e.g. this.equals(parse(this.print())) === true\n print: abstract,\n\n // returns a TeX string representing the expression\n tex: abstract,\n\n // returns a TeX string, modified by the given options\n asTex: function(options) {\n\n options = options || {};\n _.defaults(options, {\n display: true,\n dynamic: true,\n times: false\n });\n\n var tex = this.tex();\n\n if (options.display) {\n tex = \"\\\\displaystyle \" + tex;\n }\n if (options.dynamic) {\n tex = tex.replace(/\\(/g, \"\\\\left(\");\n tex = tex.replace(/\\)/g, \"\\\\right)\");\n }\n if (options.times) {\n tex = tex.replace(/\\\\cdot/g, \"\\\\times\");\n }\n\n return tex;\n },\n\n // returns the name of this expression's constructor as a string\n // only used for testing and debugging (the ugly regex is for IE8)\n name: function() {\n if (this.func.name) {\n return this.func.name;\n } else {\n return this.func.toString().match(/^function\\s*([^\\s(]+)/)[1];\n }\n },\n\n // returns a string representing current node structure\n repr: function() {\n return this.name() + \"(\" + _.map(this.args(), function(arg) {\n return _.isString(arg) ? arg : arg.repr();\n }).join(\",\") + \")\";\n },\n\n // removes all negative signs\n strip: function() { return this.recurse(\"strip\"); },\n\n // canonically reorders all commutative elements\n normalize: function() { return this.recurse(\"normalize\"); },\n\n // expands the expression\n expand: function() { return this.recurse(\"expand\"); },\n\n // naively factors out like terms\n factor: function(options) { return this.recurse(\"factor\", options); },\n\n // collect all like terms\n collect: function(options) { return this.recurse(\"collect\", options); },\n\n // strict syntactic equality check\n equals: function(other) {\n return this.normalize().print() === other.normalize().print();\n },\n\n // expand and collect until the expression no longer changes\n simplify: function(options) {\n options = _.extend({\n once: false\n }, options);\n\n // Attempt to factor and collect\n var step1 = this.factor(options);\n var step2 = step1.collect(options);\n\n // Rollback if collect didn't do anything\n if (step1.equals(step2)) {\n step2 = this.collect(options);\n }\n\n // Attempt to expand and collect\n var step3 = step2.expand(options);\n var step4 = step3.collect(options);\n\n // Rollback if collect didn't do anything\n if (step3.equals(step4)) {\n step4 = step2.collect(options);\n }\n\n // One round of simplification complete\n var simplified = step4;\n\n if (options.once || this.equals(simplified)) {\n return simplified;\n } else {\n return simplified.simplify(options);\n }\n },\n\n // check whether this expression is simplified\n isSimplified: function() {\n return this.equals(this.simplify());\n },\n\n // return the child nodes of this node\n exprArgs: function() {\n return _.filter(this.args(), function(arg) {\n return arg instanceof Expr;\n });\n },\n\n // return the variables (function and non) within the expression\n getVars: function(excludeFunc) {\n return _.uniq(_.flatten(_.invoke(this.exprArgs(), \"getVars\", excludeFunc))).sort();\n },\n\n getConsts: function() {\n return _.uniq(_.flatten(_.invoke(this.exprArgs(), \"getConsts\"))).sort();\n },\n\n getUnits: function() {\n return _.flatten(_.invoke(this.exprArgs(), \"getUnits\"));\n },\n\n // check whether this expression node is of a particular type\n is: function(func) {\n return this instanceof func;\n },\n\n // check whether this expression has a particular node type\n has: function(func) {\n if (this instanceof func) {\n return true;\n }\n return _.any(this.exprArgs(), function(arg) { return arg.has(func); });\n },\n\n // raise this expression to a given exponent\n // most useful for eventually implementing i^3 = -i, etc.\n raiseToThe: function(exp) {\n return new Pow(this, exp);\n },\n\n // does this expression have a specific rendering hint?\n // rendering hints are picked up while parsing, but are lost during transformations\n isSubtract: function() { return false; },\n isDivide: function() { return false; },\n isRoot: function() { return false; },\n\n // whether this node needs an explicit multiplication sign if following a Num\n needsExplicitMul: function() {\n return this.args()[0].needsExplicitMul();\n },\n\n // check that the variables in both expressions are the same\n sameVars: function(other) {\n var vars1 = this.getVars();\n var vars2 = other.getVars();\n\n // the other Expr can have more variables than this one\n // this lets you multiply equations by other variables\n var same = function(array1, array2) {\n return !_.difference(array1, array2).length;\n };\n\n var lower = function(array) {\n return _.uniq(_.invoke(array, \"toLowerCase\")).sort();\n };\n\n var equal = same(vars1, vars2);\n var equalIgnoringCase = same(lower(vars1), lower(vars2));\n\n return {equal: equal, equalIgnoringCase: equalIgnoringCase};\n },\n\n // semantic equality check, call after sameVars() to avoid potential false positives\n // plug in random numbers for the variables in both expressions\n // if they both consistently evaluate the same, then they're the same\n compare: function(other) {\n // equation comparisons are handled by Eq.compare()\n if (other instanceof Eq) {\n return false;\n }\n\n var varList = _.union(\n this.getVars(/* excludeFunc */ true),\n other.getVars(/* excludeFunc */ true));\n\n // If the numbers are large we would like to do a relative comparison\n // rather than an absolute one, but if they're small enough then an\n // absolute comparison makes more sense\n var getDelta = function(num1, num2) {\n if (Math.abs(num1) < 1 || Math.abs(num2) < 1) {\n return Math.abs(num1 - num2);\n } else {\n return Math.abs(1 - num1 / num2);\n }\n };\n\n var equalNumbers = function(num1, num2) {\n var delta = getDelta(num1, num2);\n return ((num1 === num2) || /* needed if either is +/- Infinity */\n (isNaN(num1) && isNaN(num2)) ||\n (delta < Math.pow(10, -TOLERANCE)));\n };\n\n // if no variables, only need to evaluate once\n if (!varList.length && !this.has(Unit) && !other.has(Unit)) {\n return equalNumbers(this.eval(), other.eval());\n }\n\n // collect here to avoid sometimes dividing by zero, and sometimes not\n // it is better to be deterministic, e.g. x/x -> 1\n // TODO(alex): may want to keep track of assumptions as they're made\n var expr1 = this.collect();\n var expr2 = other.collect();\n\n var unitList1 = this.getUnits();\n var unitList2 = other.getUnits();\n\n if (!_.isEqual(unitList1, unitList2)) {\n return false;\n }\n\n // Compare at a set number (currently 12) of points to determine\n // equality.\n //\n // `range` (and `vars`) is the only variable that varies through the\n // iterations. For each of range = 10, 100, and 1000, each random\n // variable is picked from (-range, range).\n //\n // Note that because there are 12 iterations and three ranges, each\n // range is checked four times.\n for (var i = 0; i < ITERATIONS; i++) {\n\n var vars = {};\n\n // One third total iterations each with range 10, 100, and 1000\n var range = Math.pow(10, 1 + Math.floor(3 * i / ITERATIONS));\n\n // Half of the iterations should only use integer values.\n // This is because expressions like (-2)^x are common but result\n // in NaN when evaluated in JS with non-integer values of x.\n // Without this, (-2)^x and (-2)^(x+1) both end up always being NaN\n // and thus equivalent. With this, the most common failure case is\n // avoided. However, less common cases such as (-2)^(x+0.1) and\n // (-2)^(x+1.1) will still both evaluate to NaN and result in a\n // false positive.\n //\n // Note that the above is only true in vanilla JS Number-land,\n // which has no concept of complex numbers. The solution is simple:\n // Integrate a library for handling complex numbers.\n //\n // TODO(alex): Add support for complex numbers, then remove this.\n var useFloats = i % 2 === 0;\n\n _.each(varList, function(v) {\n vars[v] = useFloats ? randomFloat(-range, range)\n : _.random(-range, range);\n });\n\n var equal;\n if (expr1.has(Func) || expr2.has(Func) ||\n expr1.has(Unit) || expr2.has(Unit)) {\n\n var result1 = expr1.partialEval(vars);\n var result2 = expr2.partialEval(vars);\n\n equal = result1.simplify().equals(result2.simplify());\n } else {\n var result1 = expr1.eval(vars);\n var result2 = expr2.eval(vars);\n\n equal = equalNumbers(result1, result2);\n }\n\n if (!equal) {\n return false;\n }\n }\n\n return true;\n },\n\n // evaluate as much of the expression as possible\n partialEval: function(vars) {\n if (this instanceof Unit) {\n return this;\n } else if (!this.has(Func)) {\n return new Float(this.eval(vars).toFixed(TOLERANCE)).collect();\n } else if (this instanceof Func) {\n return new Func(this.symbol, this.arg.partialEval(vars));\n } else {\n return this.recurse(\"partialEval\", vars);\n }\n },\n\n // check that the structure of both expressions is the same\n // all negative signs are stripped and the expressions are converted to\n // a canonical commutative form\n // should only be done after compare() returns true to avoid false positives\n sameForm: function(other) {\n return this.strip().equals(other.strip());\n },\n\n // returns the GCD of this expression and the given factor\n findGCD: function(factor) {\n return this.equals(factor) ? factor : Num.One;\n },\n\n // return this expression's denominator\n getDenominator: function() {\n return Num.One;\n },\n\n // return this expression as a Mul\n asMul: function() {\n return new Mul(Num.One, this);\n },\n\n // TODO(alex): rename to isDefinitePositive or similar?\n // return whether this expression is 100% positive\n isPositive: abstract,\n\n // TODO(alex): rename to hasNegativeSign or similar?\n // return whether this expression has a negative sign\n isNegative: function() { return false; },\n\n // return a factor of this expression that is 100% positive\n asPositiveFactor: function() {\n return this.isPositive() ? this : Num.One;\n },\n\n // return a copy of the expression with a new hint set (preserves hints)\n addHint: function(hint) {\n if (!hint) {\n return this;\n }\n\n var expr = this.construct(this.args());\n expr.hints = _.clone(this.hints);\n expr.hints[hint] = true;\n return expr;\n },\n\n hints: {\n parens: false\n },\n\n // currently unused!\n asExpr: function() { return this; },\n\n // complete parse by performing a few necessary transformations\n completeParse: function() { return this.recurse(\"completeParse\"); },\n\n abs: abstract,\n\n negate: function() {\n return new Mul(Num.Neg, this);\n }\n});\n\n\n/* abstract sequence node */\nfunction Seq() {}\nSeq.prototype = new Expr();\n\n_.extend(Seq.prototype, {\n args: function() { return this.terms; },\n\n normalize: function() {\n var terms = _.sortBy(_.invoke(this.terms, \"normalize\"), function(term) {\n return term.print();\n });\n\n return new this.func(terms);\n },\n\n expand: function() {\n return this.recurse(\"expand\").flatten();\n },\n\n // partition the sequence into its numeric and non-numeric parts\n // makes no guarantees about the validity of either part!\n partition: function() {\n var terms = _.groupBy(this.terms, function(term) {\n return term instanceof Num;\n });\n\n // XXX using a boolean as a key just converts it to a string. I don't\n // think this code was written with that in mind. Probably doesn't\n // matter except for readability.\n var numbers = terms[true] || [];\n var others = terms[false] || [];\n\n return [new this.func(numbers), new this.func(others)];\n },\n\n // ensure that sequences have 2+ terms and no nested sequences of the same type\n // this is a shallow flattening and will return a non-Seq if terms.length <= 1\n flatten: function() {\n var type = this;\n var terms = _.reject(this.terms, function(term) {\n return term.equals(type.identity);\n });\n\n if (terms.length === 0) {\n return type.identity;\n }\n if (terms.length === 1) {\n return terms[0];\n }\n\n var grouped = _.groupBy(terms, function(term) {\n return term instanceof type.func;\n });\n\n // same contains the children which are Seqs of the same type as this Seq\n var same = grouped[true] || [];\n var others = grouped[false] || [];\n\n var flattened = others.concat(_.flatten(_.pluck(same, \"terms\"), /* shallow: */ true));\n return new type.func(flattened);\n },\n\n // the identity associated with the sequence\n identity: undefined,\n\n // reduce a numeric sequence to a Num\n reduce: abstract,\n\n isPositive: function() {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isPositive\"));\n },\n\n // return a new Seq with a given term replaced by a different term\n // (or array of terms). given term can be passed directly, or by index\n // if no new term is provided, the old one is simply removed\n replace: function(oldTerm, newTerm) {\n var index;\n\n if (oldTerm instanceof Expr) {\n index = _.indexOf(this.terms, oldTerm);\n } else {\n index = oldTerm;\n }\n\n var newTerms = [];\n if (_.isArray(newTerm)) {\n newTerms = newTerm;\n } else if (newTerm) {\n newTerms = [newTerm];\n }\n\n var terms = this.terms.slice(0, index)\n .concat(newTerms)\n .concat(this.terms.slice(index + 1));\n\n return new this.func(terms);\n },\n\n // syntactic sugar for replace()\n remove: function(term) {\n return this.replace(term);\n },\n\n getDenominator: function() {\n // TODO(alex): find and return LCM\n return new Mul(_.invoke(this.terms, \"getDenominator\")).flatten();\n }\n});\n\n\n/* sequence of additive terms */\nexport function Add() {\n if (arguments.length === 1) {\n this.terms = arguments[0];\n } else {\n this.terms = _.toArray(arguments);\n }\n}\nAdd.prototype = new Seq();\n\n_.extend(Add.prototype, {\n func: Add,\n\n eval: function(vars, options) {\n return _.reduce(this.terms, function(memo, term) { return memo + term.eval(vars, options); }, 0);\n },\n\n codegen: function() {\n return _.map(this.terms, function(term) {\n return \"(\" + term.codegen() + \")\";\n }).join(\" + \") || \"0\";\n },\n\n print: function() {\n return _.invoke(this.terms, \"print\").join(\"+\");\n },\n\n tex: function() {\n var tex = \"\";\n\n _.each(this.terms, function(term) {\n if (!tex || term.isSubtract()) {\n tex += term.tex();\n } else {\n tex += \"+\" + term.tex();\n }\n });\n\n return tex;\n },\n\n collect: function(options) {\n var terms = _.invoke(this.terms, \"collect\", options);\n\n // [Expr expr, Num coefficient]\n var pairs = [];\n\n _.each(terms, function(term) {\n if (term instanceof Mul) {\n var muls = term.partition();\n pairs.push([muls[1].flatten(), muls[0].reduce(options)]);\n } else if (term instanceof Num) {\n pairs.push([Num.One, term]);\n } else {\n pairs.push([term, Num.One]);\n }\n });\n\n // { (Expr expr).print(): [[Expr expr, Num coefficient]] }\n var grouped = _.groupBy(pairs, function(pair) {\n return pair[0].normalize().print();\n });\n\n var collected = _.compact(_.map(grouped, function(pairs) {\n var expr = pairs[0][0];\n var sum = new Add(_.zip.apply(_, pairs)[1]);\n var coefficient = sum.reduce(options);\n return new Mul(coefficient, expr).collect(options);\n }));\n\n // TODO(alex): use the Pythagorean identity here\n // e.g. x*sin^2(y) + x*cos^2(y) -> x\n\n return new Add(collected).flatten();\n },\n\n // naively factor out anything that is common to all terms\n // if options.keepNegative is specified, won't factor out a common -1\n factor: function(options) {\n options = _.extend({\n keepNegative: false\n }, options);\n\n var terms = _.invoke(this.terms, \"collect\");\n var factors;\n\n if (terms[0] instanceof Mul) {\n factors = terms[0].terms;\n } else {\n factors = [terms[0]];\n }\n\n _.each(_.rest(this.terms), function(term) {\n factors = _.map(factors, function(factor) {\n return term.findGCD(factor);\n });\n });\n\n if (!options.keepNegative && this.isNegative()) {\n factors.push(Num.Neg);\n }\n\n factors = new Mul(factors).flatten().collect();\n\n var remainder = _.map(terms, function(term) {\n return Mul.handleDivide(term, factors).simplify();\n });\n remainder = new Add(remainder).flatten();\n\n return Mul.createOrAppend(factors, remainder).flatten();\n },\n\n reduce: function(options) {\n return _.reduce(this.terms, function(memo, term) {\n return memo.add(term, options);\n }, this.identity);\n },\n\n needsExplicitMul: function() { return false; },\n\n isNegative: function() {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isNegative\"));\n },\n\n negate: function() {\n return new Add(_.invoke(this.terms, \"negate\"));\n }\n});\n\n\n/* sequence of multiplicative terms */\nexport function Mul() {\n if (arguments.length === 1) {\n this.terms = arguments[0];\n } else {\n this.terms = _.toArray(arguments);\n }\n}\nMul.prototype = new Seq();\n\n_.extend(Mul.prototype, {\n func: Mul,\n\n eval: function(vars, options) {\n return _.reduce(this.terms, function(memo, term) { return memo * term.eval(vars, options); }, 1);\n },\n\n codegen: function() {\n return _.map(this.terms, function(term) {\n return \"(\" + term.codegen() + \")\";\n }).join(\" * \") || \"0\";\n },\n\n print: function() {\n return _.map(this.terms, function(term) {\n return (term instanceof Add) ? \"(\" + term.print() + \")\" : term.print();\n }).join(\"*\");\n },\n\n getUnits: function() {\n var tmUnits = _(this.terms)\n .chain()\n .map(function(term) {\n return term.getUnits();\n })\n .flatten()\n .value();\n\n tmUnits.sort((a, b) => a.unit.localeCompare(b.unit));\n\n return tmUnits;\n },\n\n // since we don't care about commutativity, we can render a Mul any way we choose\n // so we follow convention: first any negatives, then any numbers, then everything else\n tex: function() {\n var cdot = \" \\\\cdot \";\n\n var terms = _.groupBy(this.terms, function(term) {\n if (term.isDivide()) {\n return \"inverse\";\n } else if (term instanceof Num) {\n return \"number\";\n } else {\n return \"other\";\n }\n });\n\n var inverses = terms.inverse || [];\n var numbers = terms.number || [];\n var others = terms.other || [];\n\n var negatives = \"\";\n var numerator;\n\n // check all the numbers to see if there is a rational we can extract,\n // since we would like 1/2x/y to come out as \\frac{1}{2}\\frac{x}{y},\n // and not \\frac{1x}{2y}.\n for (var i = 0; i < numbers.length; i++) {\n var isRational = numbers[i] instanceof Rational &&\n !(numbers[i] instanceof Int);\n if (isRational && others.length > 0 && inverses.length > 0) {\n var withThisRemoved = numbers.slice();\n withThisRemoved.splice(i, 1);\n var newTerms = withThisRemoved.concat(inverses).concat(others);\n return numbers[i].tex() + new Mul(newTerms).tex();\n }\n }\n\n numbers = _.compact(_.map(numbers, function(term) {\n var hasDenom = (term instanceof Rational) && !(term instanceof Int);\n var shouldPushDown = !term.hints.fraction || inverses.length > 0;\n if (hasDenom && shouldPushDown) {\n // e.g. 3x/4 -> 3/4*x (internally) -> 3x/4 (rendered)\n inverses.push(new Pow(new Int(term.d), Num.Div));\n var number = new Int(term.n);\n number.hints = term.hints;\n return _.any(term.hints) ? number : null;\n } else {\n return term;\n }\n }));\n\n if (numbers.length === 0 && others.length === 1) {\n // e.g. (x+y)/z -> \\frac{x+y}{z}\n numerator = others[0].tex();\n } else {\n var tex = \"\";\n\n _.each(numbers, function(term) {\n if (term.hints.subtract && term.hints.entered) {\n negatives += \"-\";\n tex += (tex ? cdot : \"\") + term.abs().tex();\n } else if ((term instanceof Int) && (term.n === -1) &&\n (term.hints.negate || term.hints.subtract)) {\n // e.g. -1*-1 -> --1\n // e.g. -1*x -> -x\n negatives += \"-\";\n } else {\n // e.g. 2*3 -> 2(dot)3\n tex += (tex ? cdot : \"\") + term.tex();\n }\n });\n\n _.each(others, function(term) {\n if (term.needsExplicitMul()) {\n // e.g. 2*2^3 -> 2(dot)2^3\n tex += (tex ? cdot : \"\") + term.tex();\n } else if (term instanceof Add) {\n // e.g. (a+b)*c -> (a+b)c\n tex += \"(\" + term.tex() + \")\";\n } else {\n // e.g. a*b*c -> abc\n tex += term.tex();\n }\n });\n\n numerator = tex ? tex : \"1\";\n }\n\n if (!inverses.length) {\n return negatives + numerator;\n } else {\n var denominator = new Mul(_.invoke(inverses, \"asDivide\")).flatten().tex();\n return negatives + \"\\\\frac{\" + numerator + \"}{\" + denominator + \"}\";\n }\n },\n\n strip: function() {\n var terms = _.map(this.terms, function(term) {\n return term instanceof Num ? term.abs() : term.strip();\n });\n return new Mul(terms).flatten();\n },\n\n // expand numerator and denominator separately\n expand: function() {\n\n var isAdd = function(term) {\n return term instanceof Add;\n };\n\n var isInverse = function(term) {\n return term instanceof Pow && term.exp.isNegative();\n };\n\n var isInverseAdd = function(term) {\n return isInverse(term) && isAdd(term.base);\n };\n\n var mul = this.recurse(\"expand\").flatten();\n\n var hasAdd = _.any(mul.terms, isAdd);\n var hasInverseAdd = _.any(mul.terms, isInverseAdd);\n\n if (!(hasAdd || hasInverseAdd)) {\n return mul;\n }\n\n var terms = _.groupBy(mul.terms, isInverse);\n var normals = terms[false] || [];\n var inverses = terms[true] || [];\n\n if (hasAdd) {\n var grouped = _.groupBy(normals, isAdd);\n var adds = grouped[true] || [];\n var others = grouped[false] || [];\n\n // loop over each additive sequence\n var expanded = _.reduce(adds, function(expanded, add) {\n // loop over each expanded array of terms\n return _.reduce(expanded, function(temp, array) {\n // loop over each additive sequence's terms\n return temp.concat(_.map(add.terms, function(term) {\n return array.concat(term);\n }));\n }, []);\n }, [[]]);\n\n // join each fully expanded array of factors with remaining multiplicative factors\n var muls = _.map(expanded, function(array) {\n return new Mul(others.concat(array)).flatten();\n });\n\n normals = [new Add(muls)];\n }\n\n if (hasInverseAdd) {\n var denominator = new Mul(_.invoke(inverses, \"getDenominator\")).flatten();\n inverses = [new Pow(denominator.expand(), Num.Div)];\n }\n\n return new Mul(normals.concat(inverses)).flatten();\n },\n\n factor: function(options) {\n var factored = this.recurse(\"factor\", options).flatten();\n if (! (factored instanceof Mul)) {\n return factored;\n }\n\n // Combine any factored out Rationals into one, but don't collect\n var grouped = _.groupBy(factored.terms, function(term) {\n return term instanceof Rational;\n });\n\n // Could also accomplish this by passing a new option\n // e.g. return memo.mul(term, {autocollect: false});\n // TODO(alex): Decide whether this is a good use of options or not\n var rational = _.reduce(grouped[true], function(memo, term) {\n return {n: memo.n * term.n, d: memo.d * term.d};\n }, {n: 1, d: 1});\n\n if (rational.d === 1) {\n rational = new Int(rational.n);\n } else {\n rational = new Rational(rational.n, rational.d);\n }\n\n return new Mul((grouped[false] || []).concat(rational)).flatten();\n },\n\n collect: function(options) {\n var partitioned = this.recurse(\"collect\", options).partition();\n var number = partitioned[0].reduce(options);\n\n // e.g. 0*x -> 0\n if (number.eval() === 0) {\n return Num.Zero;\n }\n\n var others = partitioned[1].flatten();\n\n // e.g. 2*2 -> 4\n // e.g. 2*2*x -> 4*x\n if (!(others instanceof Mul)) {\n return new Mul(number, others).flatten();\n }\n\n others = others.terms;\n\n // [Expr base, Expr exp]\n var pairs = [];\n\n _.each(others, function(term) {\n if (term instanceof Pow) {\n pairs.push([term.base, term.exp]);\n } else {\n pairs.push([term, Num.One]);\n }\n });\n\n // {(Expr base).print(): [[Expr base, Expr exp]]}\n var grouped = _.groupBy(pairs, function(pair) {\n return pair[0].normalize().print();\n });\n\n // [[Expr base, Expr exp]]\n var summed = _.compact(_.map(grouped, function(pairs) {\n var base = pairs[0][0];\n var sum = new Add(_.zip.apply(_, pairs)[1]);\n var exp = sum.collect(options);\n\n if (exp instanceof Num && exp.eval() === 0) {\n return null;\n } else {\n return [base, exp];\n }\n }));\n\n // XXX `pairs` is shadowed four or five times in this function\n var pairs = _.groupBy(summed, function(pair) {\n if (pair[0] instanceof Trig && pair[0].isBasic()) {\n return \"trig\";\n } else if (pair[0] instanceof Log) {\n return \"log\";\n } else {\n return \"expr\";\n }\n });\n var trigs = pairs.trig || [];\n var logs = pairs.log || [];\n var exprs = pairs.expr || [];\n\n if (trigs.length > 1) {\n // combine sines and cosines into other trig functions\n\n // {Trig.arg.print(): [[Trig base, Expr exp]]}\n var byArg = _.groupBy(trigs, function(pair) {\n return pair[0].arg.normalize().print();\n });\n\n trigs = [];\n _.each(byArg, function(pairs) {\n var arg = pairs[0][0].arg;\n\n // {Trig.type: Expr exp}\n var funcs = {sin: Num.Zero, cos: Num.Zero};\n _.each(pairs, function(pair) {\n funcs[pair[0].type] = pair[1];\n });\n\n if (Mul.handleNegative(funcs.sin).collect(options).equals(funcs.cos)) {\n // e.g. sin^x(y)/cos^x(y) -> tan^x(y)\n if (funcs.cos.isNegative()) {\n funcs = {tan: funcs.sin};\n } else {\n funcs = {cot: funcs.cos};\n }\n }\n\n // TODO(alex): combine even if exponents not a perfect match\n // TODO(alex): transform 1/sin and 1/cos into csc and sec\n\n _.each(funcs, function(exp, type) {\n trigs.push([new Trig(type, arg), exp]);\n });\n });\n }\n\n if (logs.length > 1) {\n // combine logs with the same base\n\n // {Log.base.print(): [[Log base, Expr exp]]}\n var byBase = _.groupBy(logs, function(pair) {\n return pair[0].base.normalize().print();\n });\n\n logs = [];\n\n _.each(byBase, function(pairs) {\n // only combine two logs of the same base, otherwise commutative\n // differences result in different equally valid output\n // e.g. ln(x)/ln(z)*ln(y) -> log_z(x)*ln(y)\n // e.g. ln(x)*ln(y)/ln(z) -> ln(x)*log_z(y)\n if (pairs.length === 2 &&\n Mul.handleNegative(pairs[0][1]).collect(options).equals(pairs[1][1])) {\n // e.g. ln(x)^y/ln(b)^y -> log_b(x)^y\n if (pairs[0][1].isNegative()) {\n logs.push([new Log(pairs[0][0].power, pairs[1][0].power), pairs[1][1]]);\n } else {\n logs.push([new Log(pairs[1][0].power, pairs[0][0].power), pairs[0][1]]);\n }\n } else {\n logs = logs.concat(pairs);\n }\n });\n\n // TODO(alex): combine if all inverses are the same e.g. ln(y)*ln(z)/ln(x)/ln(x)\n }\n\n pairs = trigs.concat(logs).concat(exprs);\n\n var collected = _.map(pairs, function(pair) {\n return new Pow(pair[0], pair[1]).collect(options);\n });\n\n return new Mul([number].concat(collected)).flatten();\n },\n\n isSubtract: function() {\n return _.any(this.terms, function(term) {\n return term instanceof Num && term.hints.subtract;\n });\n },\n\n // factor a single -1 in to the Mul\n // combine with a Num if all Nums are positive, else add as a term\n factorIn: function(hint) {\n var partitioned = this.partition();\n var numbers = partitioned[0].terms;\n var fold = numbers.length && _.all(numbers, function(num) {\n return num.n > 0;\n });\n\n if (fold) {\n // e.g. - x*2*3 -> x*-2*3\n var num = numbers[0].negate();\n num.hints = numbers[0].hints;\n return this.replace(numbers[0], num.addHint(hint));\n } else {\n // e.g. - x*y -> -1*x*y\n // e.g. - x*-2 -> -1*x*-2\n return new Mul([Num.negativeOne(hint)].concat(this.terms));\n }\n },\n\n // factor out a single hinted -1 (assume it is the division hint)\n // TODO(alex): make more general or rename to be more specific\n factorOut: function() {\n var factored = false;\n var terms = _.compact(_.map(this.terms, function(term, i, list) {\n if (!factored && term instanceof Num && term.hints.divide) {\n factored = true;\n return term.n !== -1 ? term.negate() : null;\n } else {\n return term;\n }\n }));\n\n if (terms.length === 1) {\n return terms[0];\n } else {\n return new Mul(terms);\n }\n },\n\n reduce: function(options) {\n return _.reduce(this.terms, function(memo, term) {\n return memo.mul(term, options);\n }, this.identity);\n },\n\n findGCD: function(factor) {\n return new Mul(_.invoke(this.terms, \"findGCD\", factor)).flatten();\n },\n\n asMul: function() {\n return this;\n },\n\n asPositiveFactor: function() {\n if (this.isPositive()) {\n return this;\n } else {\n var terms = _.invoke(this.collect().terms, \"asPositiveFactor\");\n return new Mul(terms).flatten();\n }\n },\n\n isNegative: function() {\n return _.any(_.invoke(this.collect().terms, \"isNegative\"));\n },\n\n fold: function() {\n return Mul.fold(this);\n },\n\n negate: function() {\n var isNum = function(expr) { return expr instanceof Num; };\n if (_.any(this.terms, isNum)) {\n var num = _.find(this.terms, isNum);\n return this.replace(num, num.negate());\n } else {\n return new Mul([Num.Neg].concat(this.terms));\n }\n }\n});\n\n// static methods for the sequence types\n_.each([Add, Mul], function(type) {\n _.extend(type, {\n // create a new sequence unless left is already one (returns a copy)\n createOrAppend: function(left, right) {\n if (left instanceof type) {\n return new type(left.terms.concat(right));\n } else {\n return new type(left, right);\n }\n }\n });\n});\n\n_.extend(Mul, {\n // negative signs should be folded into numbers whenever possible\n // never fold into a Num that's already negative or a Mul that has a negative Num\n // an optional hint is kept track of to properly render user input\n // an empty hint means negation\n handleNegative: function(expr, hint) {\n if (expr instanceof Num && expr.n > 0) {\n // e.g. - 2 -> -2\n var negated = expr.negate();\n // TODO(alex): rework hint system so that this isn't necessary\n negated.hints = expr.hints;\n return negated.addHint(hint);\n } else if (expr instanceof Mul) {\n // e.g. - x*2*3 -> x*-2*3\n // e.g. - x*y -> -1*x*y\n // e.g. - x*-2 -> -1*x*-2\n return expr.factorIn(hint);\n } else {\n // e.g. - x -> -1*x\n return new Mul(Num.negativeOne(hint), expr);\n }\n },\n\n // division can create either a Rational or a Mul\n handleDivide: function(left, right) {\n\n // dividing by a Mul is the same as repeated division by its terms\n if (right instanceof Mul) {\n var first = Mul.handleDivide(left, right.terms[0]);\n var rest = new Mul(_.rest(right.terms)).flatten();\n return Mul.handleDivide(first, rest);\n }\n\n var isInt = function(expr) { return expr instanceof Int; };\n var isRational = function(expr) { return expr instanceof Rational; };\n\n // for simplification purposes, fold Ints into Rationals if possible\n // e.g. 3x / 4 -> 3/4 * x (will still render as 3x/4)\n if (isInt(right) && left instanceof Mul && _.any(left.terms, isInt)) {\n\n // search from the right\n var reversed = left.terms.slice().reverse();\n var num = _.find(reversed, isRational);\n\n if (!isInt(num)) {\n return new Mul(left.terms.concat([new Rational(1, right.n).addHint(\"fraction\")]));\n }\n\n var rational = new Rational(num.n, right.n);\n rational.hints = num.hints;\n\n // in the case of something like 1/3 * 6/8, we want the\n // 6/8 to be considered a fraction, not just a division\n if (num === reversed[0]) {\n rational = rational.addHint(\"fraction\");\n }\n\n var result;\n if (num.n < 0 && right.n < 0) {\n rational.d = -rational.d;\n return left.replace(num, [Num.Neg, rational]);\n } else {\n return left.replace(num, rational);\n }\n }\n\n var divide = function(a, b) {\n if (b instanceof Int) {\n if (a instanceof Int) {\n if (a.n < 0 && b.n < 0) {\n // e.g. -2 / -3 -> -1*-2/3\n return [Num.Neg, new Rational(a.n, -b.n).addHint(\"fraction\")];\n } else {\n // e.g. 2 / 3 -> 2/3\n // e.g. -2 / 3 -> -2/3\n // e.g. 2 / -3 -> -2/3\n return [new Rational(a.n, b.n).addHint(\"fraction\")];\n }\n } else {\n // e.g. x / 3 -> x*1/3\n // e.g. x / -3 -> x*-1/3\n var inverse = new Rational(1, b.eval());\n if (b.eval() < 0) {\n return [a, inverse.addHint(\"negate\")];\n } else {\n return [a, inverse];\n }\n }\n } else {\n var pow;\n\n if (b instanceof Trig && b.exp) {\n // e.g. sin^2(x) -> sin(x)^2\n var exp = b.exp;\n b.exp = undefined;\n b = new Pow(b, exp);\n }\n\n if (b instanceof Pow) {\n // e.g. (x^2) ^ -1 -> x^-2\n // e.g. (x^y) ^ -1 -> x^(-1*y)\n // e.g. (x^(yz)) ^ -1 -> x^(-1*y*z)\n pow = new Pow(b.base, Mul.handleNegative(b.exp, \"divide\"));\n } else {\n // e.g. x ^ -1 -> x^-1\n pow = new Pow(b, Num.Div);\n }\n\n if (a instanceof Int && a.n === 1) {\n // e.g. 1 / x -> x^-1\n return [pow];\n } else {\n // e.g. 2 / x -> 2*x^-1\n return [a, pow];\n }\n }\n };\n\n if (left instanceof Mul) {\n var divided = divide(_.last(left.terms), right);\n return new Mul(_.initial(left.terms).concat(divided));\n } else {\n var divided = divide(left, right);\n return new Mul(divided).flatten();\n }\n },\n\n // fold negative signs into numbers if possible\n // negative signs are not the same as multiplying by negative one!\n // e.g. -x -> -1*x simplified\n // e.g. -2*x -> -2*x simplified\n // e.g. -x*2 -> -1*x*2 not simplified -> x*-2 simplified\n // e.g. -1*x*2 -> -1*x*2 not simplified\n\n // also fold multiplicative terms into open Trig and Log nodes\n // e.g. (sin x)*x -> sin(x)*x\n // e.g. sin(x)*x -> sin(x)*x\n // e.g. sin(x)*(x) -> sin(x)*x\n // e.g. sin(x)*sin(y) -> sin(x)*sin(y)\n fold: function(expr) {\n if (expr instanceof Mul) {\n // assuming that this will be second to last\n var trigLog = _.find(_.initial(expr.terms), function(term) {\n return (term instanceof Trig || term instanceof Log) && term.hints.open;\n });\n var index = _.indexOf(expr.terms, trigLog);\n\n if (trigLog) {\n var last = _.last(expr.terms);\n if (trigLog.hints.parens || last.hints.parens ||\n last.has(Trig) || last.has(Log)) {\n trigLog.hints.open = false;\n } else {\n var newTrigLog;\n if (trigLog instanceof Trig) {\n newTrigLog = Trig.create([trigLog.type, trigLog.exp], Mul.createOrAppend(trigLog.arg, last).fold());\n } else {\n newTrigLog = Log.create(trigLog.base, Mul.createOrAppend(trigLog.power, last).fold());\n }\n\n if (index === 0) {\n return newTrigLog;\n } else {\n return new Mul(expr.terms.slice(0, index).concat(newTrigLog)).fold();\n }\n }\n }\n\n var partitioned = expr.partition();\n var numbers = partitioned[0].terms;\n\n var pos = function(num) { return num.n > 0; };\n var neg = function(num) { return num.n === -1 && num.hints.negate; };\n var posOrNeg = function(num) { return pos(num) || neg(num); };\n\n if (numbers.length > 1 &&\n _.some(numbers, neg) &&\n _.some(numbers, pos) &&\n _.every(numbers, posOrNeg)) {\n\n var firstNeg = _.indexOf(expr.terms, _.find(expr.terms, neg));\n var firstNum = _.indexOf(expr.terms, _.find(expr.terms, pos));\n\n // e.g. -x*2 -> x*-2\n if (firstNeg < firstNum) {\n return expr.replace(firstNum,\n expr.terms[firstNum].negate())\n .remove(firstNeg);\n }\n }\n }\n\n // in all other cases, make no change\n return expr;\n }\n});\n\n\n/* exponentiation */\nexport function Pow(base, exp) { this.base = base; this.exp = exp; }\nPow.prototype = new Expr();\n\n_.extend(Pow.prototype, {\n func: Pow,\n args: function() { return [this.base, this.exp]; },\n\n eval: function(vars, options) {\n var evaledBase = this.base.eval(vars, options);\n var evaledExp = this.exp.eval(vars, options);\n\n // Math.pow unequivocally returns NaN when provided with both a\n // negative base and a fractional exponent. However, in some cases, we\n // know that our exponent is actually valid for use with negative\n // bases (e.g., (-5)^(1/3)).\n //\n // Here, we explicitly check for such cases. We really only handle a\n // limited subset (by requiring that the exponent is rational with an\n // odd denominator), but it's still useful.\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n if (evaledBase < 0) {\n var simplifiedExp = this.exp.simplify();\n\n // If Float, convert to a Rational to enable the logic below\n if (simplifiedExp instanceof Float) {\n var num = simplifiedExp.n;\n var decimals = (num - num.toFixed()).toString().length - 2;\n var denominator = Math.pow(10, decimals);\n var rationalExp = new Rational(num * denominator, denominator);\n simplifiedExp = rationalExp.simplify();\n }\n if (simplifiedExp instanceof Rational) {\n var oddDenominator = Math.abs(simplifiedExp.d) % 2 === 1;\n if (oddDenominator) {\n var oddNumerator = Math.abs(simplifiedExp.n) % 2 === 1;\n var sign = (oddNumerator) ? -1 : 1;\n return sign * Math.pow(-1 * evaledBase, evaledExp);\n }\n }\n }\n return Math.pow(evaledBase, evaledExp);\n },\n\n getUnits: function() {\n return this.base.getUnits().map(function(unit) {\n return {\n unit: unit.unit,\n pow: unit.pow * this.exp.n\n };\n }.bind(this));\n },\n\n codegen: function() {\n return \"Math.pow(\" + this.base.codegen() +\n \", \" + this.exp.codegen() + \")\";\n },\n\n print: function() {\n var base = this.base.print();\n if (this.base instanceof Seq || this.base instanceof Pow) {\n base = \"(\" + base + \")\";\n }\n return base + \"^(\" + this.exp.print() + \")\";\n },\n\n tex: function() {\n if (this.isDivide()) {\n\n // e.g. x ^ -1 w/hint -> 1/x\n return \"\\\\frac{1}{\" + this.asDivide().tex() + \"}\";\n\n } else if (this.isRoot()) {\n\n if (this.exp.n !== 1) {\n error(\"Node marked with hint 'root' does not have exponent \" +\n \"of form 1/x.\");\n }\n\n if (this.exp.d === 2) {\n // e.g. x ^ 1/2 w/hint -> sqrt{x}\n return \"\\\\sqrt{\" + this.base.tex() + \"}\";\n } else {\n // e.g. x ^ 1/y w/hint -> sqrt[y]{x}\n return \"\\\\sqrt[\" + this.exp.d + \"]{\" + this.base.tex() + \"}\";\n }\n\n } else if (this.base instanceof Trig && !this.base.isInverse() &&\n this.exp instanceof Num && this.exp.isSimple() &&\n this.exp.eval() >= 0) {\n\n // e.g sin(x) ^ 2 -> sin^2(x)\n var split = this.base.tex({split: true});\n return split[0] + \"^{\" + this.exp.tex() + \"}\" + split[1];\n\n } else {\n\n // e.g. x ^ y -> x^y\n var base = this.base.tex();\n if (this.base instanceof Seq || this.base instanceof Pow ||\n (this.base instanceof Num && !this.base.isSimple())) {\n // e.g. a+b ^ c -> (a+b)^c\n base = \"(\" + base + \")\";\n } else if (this.base instanceof Trig || this.base instanceof Log) {\n // e.g. ln(x) ^ 2 -> [ln(x)]^2\n base = \"[\" + base + \"]\";\n }\n return base + \"^{\" + this.exp.tex() + \"}\";\n }\n },\n\n needsExplicitMul: function() {\n return this.isRoot() ? false : this.base.needsExplicitMul();\n },\n\n expand: function() {\n var pow = this.recurse(\"expand\");\n\n if (pow.base instanceof Mul) {\n // e.g. (ab)^c -> a^c*b^c\n\n var terms = _.map(pow.base.terms, function(term) {\n return new Pow(term, pow.exp);\n });\n\n return new Mul(terms).expand();\n\n } else if (pow.base instanceof Add && pow.exp instanceof Int && pow.exp.abs().eval() > 1) {\n // e.g. (a+b)^2 -> a*a+a*b+a*b+b*b\n // e.g. (a+b)^-2 -> (a*a+a*b+a*b+b*b)^-1\n\n var positive = pow.exp.eval() > 0;\n var n = pow.exp.abs().eval();\n\n var signed = function(mul) {\n return positive ? mul : new Pow(mul, Num.Div);\n };\n\n // compute and cache powers of 2 up to n\n var cache = {1: pow.base};\n for (var i = 2; i <= n; i *= 2) {\n var mul = new Mul(cache[i / 2], cache[i / 2]);\n cache[i] = mul.expand().collect();\n }\n\n // if n is a power of 2, you're done!\n if (_.has(cache, n)) {\n return signed(cache[n]);\n }\n\n // otherwise decompose n into powers of 2 ...\n var indices = _.map(n.toString(2).split(\"\"), function(str, i, list) {\n return Number(str) * Math.pow(2, list.length - i - 1);\n });\n indices = _.without(indices, 0);\n\n // ... then combine\n var mul = new Mul(_.pick(cache, indices)).expand().collect();\n return signed(mul);\n\n } else if (pow.exp instanceof Add) { // DEFINITELY want behind super-simplify() flag\n // e.g. x^(a+b) -> x^a*x^b\n\n var terms = _.map(pow.exp.terms, function(term) {\n return new Pow(pow.base, term).expand();\n });\n\n return new Mul(terms).expand();\n } else {\n return pow;\n }\n },\n\n factor: function() {\n var pow = this.recurse(\"factor\");\n if (pow.base instanceof Mul) {\n var terms = _.map(pow.base.terms, function(term) {\n if (term instanceof Int && pow.exp.equals(Num.Div)) {\n // Anything that can be a Rational should be a Rational\n // e.g. 2^(-1) -> 1/2\n return new Rational(1, term.n);\n } else {\n return new Pow(term, pow.exp);\n }\n });\n return new Mul(terms);\n } else {\n return pow;\n }\n },\n\n collect: function(options) {\n\n if (this.base instanceof Pow) {\n // collect this first to avoid having to deal with float precision\n // e.g. sqrt(2)^2 -> 2, not 2.0000000000000004\n // e.g. (x^y)^z -> x^(yz)\n var base = this.base.base;\n var exp = Mul.createOrAppend(this.base.exp, this.exp);\n return new Pow(base, exp).collect(options);\n }\n\n var pow = this.recurse(\"collect\", options);\n\n var isSimilarLog = function(term) {\n return term instanceof Log && term.base.equals(pow.base);\n };\n\n if (pow.exp instanceof Num &&\n pow.exp.eval() === 0) {\n\n // e.g. x^0 -> 1\n return Num.One;\n\n } else if (pow.exp instanceof Num &&\n pow.exp.eval() === 1) {\n\n // e.g. x^1 -> x\n return pow.base;\n\n } else if (isSimilarLog(pow.exp)) {\n\n // e.g. b^(log_b(x)) -> x\n return pow.exp.power;\n\n } else if (pow.exp instanceof Mul &&\n _.any(pow.exp.terms, isSimilarLog)) {\n\n // e.g. b^(2*y*log_b(x)) -> x^(2*y)\n var log = _.find(pow.exp.terms, isSimilarLog);\n var base = log.power;\n var exp = pow.exp.remove(log).flatten();\n return new Pow(base, exp).collect(options);\n\n } else if (pow.base instanceof Num &&\n pow.exp instanceof Num) {\n\n // TODO(alex): Consider encapsualting this logic (and similar logic\n // elsewhere) into a separate Decimal class for user-entered floats\n if (options && options.preciseFloats) {\n // Avoid creating an imprecise float\n // e.g. 23^1.5 -> 12167^0.5, not ~110.304\n\n // If you take the root as specified by the denominator and\n // end up with more digits after the decimal point,\n // the result is imprecise. This works for rationals as well\n // as floats, but ideally rationals should be pre-processed\n // e.g. (1/27)^(1/3) -> 1/3 to avoid most cases.\n // TODO(alex): Catch such cases and avoid converting to floats.\n var exp = pow.exp.asRational();\n var decimalsInBase = pow.base.getDecimalPlaces();\n var root = new Pow(pow.base, new Rational(1, exp.d));\n var decimalsInRoot = root.collect().getDecimalPlaces();\n\n if (decimalsInRoot > decimalsInBase) {\n // Collecting over this denominator would result in an\n // imprecise float, so avoid doing so.\n var newBase = new Pow(pow.base, new Int(exp.n)).collect();\n return new Pow(newBase, new Rational(1, exp.d));\n }\n }\n\n // e.g. 4^1.5 -> 8\n return pow.base.raiseToThe(pow.exp, options);\n } else {\n return pow;\n }\n },\n\n // checks whether this Pow represents user-entered division\n isDivide: function() {\n var isDiv = function(arg) { return arg instanceof Num && arg.hints.divide; };\n return isDiv(this.exp) || (this.exp instanceof Mul && _.any(this.exp.terms, isDiv));\n },\n\n // assuming this Pow represents user-entered division, returns the denominator\n asDivide: function() {\n if (this.exp instanceof Num) {\n if (this.exp.eval() === -1) {\n return this.base;\n } else {\n var negated = this.exp.negate();\n negated.hints = _.clone(this.exp.hints);\n negated.hints.divide = false;\n return new Pow(this.base, negated);\n }\n } else if (this.exp instanceof Mul) {\n return new Pow(this.base, this.exp.factorOut());\n } else {\n error(\"called asDivide() on an Expr that wasn't a Num or Mul\");\n }\n },\n\n isRoot: function() {\n return this.exp instanceof Rational && this.exp.hints.root;\n },\n\n isSquaredTrig: function() {\n return this.base instanceof Trig && !this.base.isInverse() &&\n this.exp instanceof Num && this.exp.eval() === 2;\n },\n\n // extract whatever denominator makes sense, ignoring hints\n // if negative exponent, will recursively include the base's denominator as well\n getDenominator: function() {\n if (this.exp instanceof Num && this.exp.eval() === -1) {\n return Mul.createOrAppend(this.base, this.base.getDenominator()).flatten();\n } else if (this.exp.isNegative()) {\n var pow = new Pow(this.base, Mul.handleNegative(this.exp).collect());\n return Mul.createOrAppend(pow, pow.collect().getDenominator()).flatten();\n } else if (this.base instanceof Num) {\n return new Pow(this.base.getDenominator(), this.exp).collect();\n } else {\n return Num.One;\n }\n },\n\n findGCD: function(factor) {\n var base, exp;\n if (factor instanceof Pow) {\n base = factor.base;\n exp = factor.exp;\n } else {\n base = factor;\n exp = Num.One;\n }\n\n // GCD is only relevant if same base\n if (this.base.equals(base)) {\n if (this.exp.equals(exp)) {\n // exact match\n // e.g. GCD(x^y^z, x^y^z) -> x^y^z\n return this;\n } else if (this.exp instanceof Num && exp instanceof Num) {\n // two numerical exponents\n // e.g. GCD(x^3, x^2) -> x^2\n return new Pow(this.base, Num.min(this.exp, exp)).collect();\n } else if (this.exp instanceof Num || exp instanceof Num) {\n // one numerical exponent\n // e.g. GCD(x^2, x^y) -> 1\n return Num.One;\n }\n\n var expA = this.exp.asMul().partition();\n var expB = exp.asMul().partition();\n\n if (expA[1].equals(expB[1])) {\n // exponents match except for coefficient\n // e.g. GCD(x^3y, x^y) -> x^y\n var coefficient = Num.min(expA[0].reduce(), expB[0].reduce());\n var mul = new Mul(coefficient, expA[1].flatten()).flatten();\n return new Pow(base, mul).collect();\n }\n }\n\n return Num.One;\n },\n\n isPositive: function() {\n if (this.base.isPositive()) {\n return true;\n }\n\n var exp = this.exp.simplify();\n return exp instanceof Int && exp.eval() % 2 === 0;\n },\n\n asPositiveFactor: function() {\n if (this.isPositive()) {\n return this;\n } else {\n var exp = this.exp.simplify();\n if (exp instanceof Int) {\n var n = exp.eval();\n if (n > 2) {\n // e.g. x^3 -> x^2\n return new Pow(this.base, new Int(n-1));\n } else if (n < -2) {\n // e.g. x^-3 -> x^-2\n return new Pow(this.base, new Int(n+1));\n }\n }\n return Num.One;\n }\n }\n});\n\n_.extend(Pow, {\n sqrt: function(arg) {\n return new Pow(arg, Num.Sqrt);\n },\n\n nthroot: function(radicand, degree) {\n var exp = Mul.fold(Mul.handleDivide(new Int(1), degree));\n\n // FIXME(johnsullivan): If oneOverDegree ends up being a pow object,\n // this \"root\" hint is lost between here and when tex() is called.\n return new Pow(radicand, exp.addHint(\"root\"));\n },\n});\n\n\n/* logarithm */\nexport function Log(base, power) { this.base = base; this.power = power; }\nLog.prototype = new Expr();\n\n_.extend(Log.prototype, {\n func: Log,\n args: function() { return [this.base, this.power]; },\n\n eval: function(vars, options) {\n return Math.log(this.power.eval(vars, options)) / Math.log(this.base.eval(vars, options));\n },\n\n codegen: function() {\n return \"(Math.log(\" + this.power.codegen() +\n \") / Math.log(\" + this.base.codegen() + \"))\";\n },\n\n print: function() {\n var power = \"(\" + this.power.print() + \")\";\n if (this.isNatural()) {\n return \"ln\" + power;\n } else {\n return \"log_(\" + this.base.print() + \") \" + power;\n }\n },\n\n tex: function() {\n var power = \"(\" + this.power.tex() + \")\";\n if (this.isNatural()) {\n return \"\\\\ln\" + power;\n } else {\n return \"\\\\log_{\" + this.base.tex() + \"}\" + power;\n }\n },\n\n collect: function(options) {\n var log = this.recurse(\"collect\", options);\n\n if (log.power instanceof Num && log.power.eval() === 1) {\n\n // e.g. ln(1) -> 0\n return Num.Zero;\n\n } else if (log.base.equals(log.power)) {\n\n // e.g. log_b(b) -> 1\n return Num.One;\n\n } else if (log.power instanceof Pow &&\n log.power.base.equals(log.base)) {\n\n // e.g. log_b(b^x) -> x\n return log.power.exp;\n } else {\n return log;\n }\n },\n\n expand: function() {\n var log = this.recurse(\"expand\");\n\n if (log.power instanceof Mul) { // might want behind super-simplify() flag\n // e.g. ln(xy) -> ln(x) + ln(y)\n\n var terms = _.map(log.power.terms, function(term) {\n // need to expand again in case new log powers are Pows\n return new Log(log.base, term).expand();\n });\n\n return new Add(terms);\n\n } else if (log.power instanceof Pow) {\n // e.g. ln(x^y) -> y*ln(x)\n\n return new Mul(log.power.exp, new Log(log.base, log.power.base).expand()).flatten();\n } else if (!log.isNatural()) {\n // e.g. log_b(x) -> ln(x)/ln(b)\n\n return Mul.handleDivide(new Log(Const.e, log.power), new Log(Const.e, log.base));\n } else {\n return log;\n }\n },\n\n hints: _.extend(Log.prototype.hints, {\n open: false\n }),\n\n isPositive: function() {\n var log = this.collect();\n\n if (log.base instanceof Num &&\n log.power instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n },\n\n needsExplicitMul: function() { return false; },\n\n isNatural: function() { return this.base.equals(Const.e); }\n});\n\n_.extend(Log, {\n natural: function() { return Const.e; },\n common: function() { return Num.Ten; },\n\n create: function(base, power) {\n var log = new Log(base, power);\n if (!power.hints.parens) {\n log = log.addHint(\"open\");\n }\n return log;\n }\n});\n\n\n/* trigonometric functions */\nexport function Trig(type, arg) { this.type = type; this.arg = arg; }\nTrig.prototype = new Expr();\n\n_.extend(Trig.prototype, {\n func: Trig,\n args: function() { return [this.type, this.arg]; },\n\n functions: {\n sin: {\n eval: Math.sin,\n codegen: \"Math.sin((\",\n tex: \"\\\\sin\",\n expand: function() { return this; }\n },\n cos: {\n eval: Math.cos,\n codegen: \"Math.cos((\",\n tex: \"\\\\cos\",\n expand: function() { return this; }\n },\n tan: {\n eval: Math.tan,\n codegen: \"Math.tan((\",\n tex: \"\\\\tan\",\n expand: function() {\n return Mul.handleDivide(Trig.sin(this.arg), Trig.cos(this.arg));\n }\n },\n csc: {\n eval: function(arg) { return 1 / Math.sin(arg); },\n codegen: \"(1/Math.sin(\",\n tex: \"\\\\csc\",\n expand: function() {\n return Mul.handleDivide(Num.One, Trig.sin(this.arg));\n }\n },\n sec: {\n eval: function(arg) { return 1 / Math.cos(arg); },\n codegen: \"(1/Math.cos(\",\n tex: \"\\\\sec\",\n expand: function() {\n return Mul.handleDivide(Num.One, Trig.cos(this.arg));\n }\n },\n cot: {\n eval: function(arg) { return 1 / Math.tan(arg); },\n codegen: \"(1/Math.tan(\",\n tex: \"\\\\cot\",\n expand: function() {\n return Mul.handleDivide(Trig.cos(this.arg), Trig.sin(this.arg));\n }\n },\n arcsin: {\n eval: Math.asin,\n codegen: \"Math.asin((\",\n tex: \"\\\\arcsin\"\n },\n arccos: {\n eval: Math.acos,\n codegen: \"Math.acos((\",\n tex: \"\\\\arccos\"\n },\n arctan: {\n eval: Math.atan,\n codegen: \"Math.atan((\",\n tex: \"\\\\arctan\"\n },\n arccsc: {\n eval: function(arg) { return Math.asin(1 / arg); },\n codegen: \"Math.asin(1/(\",\n tex: \"\\\\operatorname{arccsc}\"\n },\n arcsec: {\n eval: function(arg) { return Math.acos(1 / arg); },\n codegen: \"Math.acos(1/(\",\n tex: \"\\\\operatorname{arcsec}\"\n },\n arccot: {\n eval: function(arg) { return Math.atan(1 / arg); },\n codegen: \"Math.atan(1/(\",\n tex: \"\\\\operatorname{arccot}\"\n },\n sinh: {\n eval: function(arg) {\n return (Math.exp(arg) - Math.exp(-arg)) / 2;\n },\n codegen: function(argStr) {\n return \"((Math.exp(\" + argStr + \") - Math.exp(-(\" + argStr + \"))) / 2)\";\n },\n tex: \"\\\\sinh\",\n expand: function() { return this; }\n },\n cosh: {\n eval: function(arg) {\n return (Math.exp(arg) + Math.exp(-arg)) / 2;\n },\n codegen: function(argStr) {\n return \"((Math.exp(\" + argStr + \") + Math.exp(-(\" + argStr + \"))) / 2)\";\n },\n tex: \"\\\\cosh\",\n expand: function() { return this; }\n },\n tanh: {\n eval: function(arg) {\n return (Math.exp(arg) - Math.exp(-arg)) / (Math.exp(arg) + Math.exp(-arg));\n },\n codegen: function(argStr) {\n return \"(\" +\n \"(Math.exp(\" + argStr + \") - Math.exp(-(\" + argStr + \")))\" +\n \" / \" +\n \"(Math.exp(\" + argStr + \") + Math.exp(-(\" + argStr + \")))\" +\n \")\";\n },\n tex: \"\\\\tanh\",\n expand: function() {\n return Mul.handleDivide(Trig.sinh(this.arg), Trig.cosh(this.arg));\n }\n },\n csch: {\n eval: function(arg) { return 2 / (Math.exp(arg) - Math.exp(-arg)); },\n codegen: function(argStr) {\n return \"(2 / (Math.exp(\" + argStr + \") - Math.exp(-(\" + argStr + \"))))\";\n },\n tex: \"\\\\csch\",\n expand: function() {\n return Mul.handleDivide(Num.One, Trig.sinh(this.arg));\n }\n },\n sech: {\n eval: function(arg) { return 2 / (Math.exp(arg) + Math.exp(-arg)); },\n codegen: function(argStr) {\n return \"(2 / (Math.exp(\" + argStr + \") + Math.exp(-(\" + argStr + \"))))\";\n },\n tex: \"\\\\sech\",\n expand: function() {\n return Mul.handleDivide(Num.One, Trig.cosh(this.arg));\n }\n },\n coth: {\n eval: function(arg) {\n return (Math.exp(arg) + Math.exp(-arg)) / (Math.exp(arg) - Math.exp(-arg));\n },\n codegen: function(argStr) {\n return \"(\" +\n \"(Math.exp(\" + argStr + \") + Math.exp(-(\" + argStr + \")))\" +\n \" / \" +\n \"(Math.exp(\" + argStr + \") - Math.exp(-(\" + argStr + \")))\" +\n \")\";\n },\n tex: \"\\\\coth\",\n expand: function() {\n return Mul.handleDivide(Trig.cosh(this.arg), Trig.sinh(this.arg));\n }\n },\n },\n\n isEven: function() {\n return _.contains([\"cos\", \"sec\"], this.type);\n },\n\n isInverse: function() {\n return this.type.indexOf(\"arc\") === 0;\n },\n\n isBasic: function() {\n return _.contains([\"sin\", \"cos\"], this.type);\n },\n\n eval: function(vars, options) {\n var func = this.functions[this.type].eval;\n var arg = this.arg.eval(vars, options);\n return func(arg);\n },\n\n codegen: function() {\n var func = this.functions[this.type].codegen;\n if (typeof func === \"function\") {\n return func(this.arg.codegen());\n } else if (typeof func === \"string\") {\n return func + this.arg.codegen() + \"))\";\n } else {\n throw new Error(\"codegen not implemented for \" + this.type);\n }\n },\n\n print: function() {\n return this.type + \"(\" + this.arg.print() + \")\";\n },\n\n tex: function(options) {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return (options && options.split) ? [func, arg] : func + arg;\n },\n\n hints: _.extend(Trig.prototype.hints, {\n open: false\n }),\n\n isPositive: function() {\n var trig = this.collect();\n\n if (trig.arg instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n },\n\n completeParse: function() {\n if (this.exp) {\n var pow = new Pow(this, this.exp);\n this.exp = undefined;\n return pow;\n } else {\n return this;\n }\n },\n\n // TODO(alex): does every new node type need to redefine these?\n needsExplicitMul: function() { return false; },\n\n expand: function() {\n var trig = this.recurse(\"expand\");\n if (!trig.isInverse()) {\n // e.g. tan(x) -> sin(x)/cos(x)\n var expand = trig.functions[trig.type].expand;\n return _.bind(expand, trig)();\n } else {\n return trig;\n }\n },\n\n collect: function(options) {\n var trig = this.recurse(\"collect\", options);\n if (!trig.isInverse() && trig.arg.isNegative()) {\n var arg;\n if (trig.arg instanceof Num) {\n arg = trig.arg.abs();\n } else {\n arg = Mul.handleDivide(trig.arg, Num.Neg).collect(options);\n }\n\n if (trig.isEven()) {\n // e.g. cos(-x) -> cos(x)\n return new Trig(trig.type, arg);\n\n } else {\n // e.g. sin(-x) -> -sin(x)\n return new Mul(Num.Neg, new Trig(trig.type, arg));\n }\n } else {\n return trig;\n }\n }\n});\n\n_.extend(Trig, {\n create: function(pair, arg) {\n var type = pair[0];\n var exp = pair[1];\n\n if (exp && exp.equals(Num.Neg)) {\n // e.g. sin^-1(x) -> arcsin(x)\n type = \"arc\" + type;\n exp = undefined;\n }\n\n var trig = new Trig(type, arg);\n if (!arg.hints.parens) {\n trig = trig.addHint(\"open\");\n }\n\n if (exp) {\n trig.exp = exp;\n }\n\n return trig;\n },\n\n sin: function(arg) {\n return new Trig(\"sin\", arg);\n },\n\n cos: function(arg) {\n return new Trig(\"cos\", arg);\n },\n\n sinh: function(arg) {\n return new Trig(\"sinh\", arg);\n },\n\n cosh: function(arg) {\n return new Trig(\"cosh\", arg);\n }\n});\n\n\nexport function Abs(arg) { this.arg = arg; }\nAbs.prototype = new Expr();\n\n_.extend(Abs.prototype, {\n func: Abs,\n args: function() { return [this.arg]; },\n eval: function(vars, options) { return Math.abs(this.arg.eval(vars, options)); },\n codegen: function() { return \"Math.abs(\" + this.arg.codegen() + \")\"; },\n print: function() { return \"abs(\" + this.arg.print() + \")\"; },\n\n tex: function() {\n return \"\\\\left|\" + this.arg.tex() + \"\\\\right|\";\n },\n\n collect: function(options) {\n var abs = this.recurse(\"collect\", options);\n\n if (abs.arg.isPositive()) {\n // e.g. |2^x| -> 2^x\n return abs.arg;\n } else if (abs.arg instanceof Num) {\n // e.g. |-2| -> 2\n return abs.arg.abs();\n } else if (abs.arg instanceof Mul) {\n // e.g. |-2*pi*x| -> 2*pi*|x|\n var terms = _.groupBy(abs.arg.terms, function(term) {\n if (term.isPositive()) {\n return \"positive\";\n } else if (term instanceof Num) {\n return \"number\";\n } else {\n return \"other\";\n }\n });\n\n var positives = terms.positive.concat(_.invoke(terms.number, \"abs\"));\n\n if (terms.other.length) {\n positives.push(new Abs(new Mul(terms.other).flatten()));\n }\n\n return new Mul(positives).flatten();\n } else {\n return abs;\n }\n },\n\n // this should definitely be behind a super-simplify flag\n expand: function() {\n var abs = this.recurse(\"expand\");\n\n if (abs.arg instanceof Mul) {\n // e.g. |xyz| -> |x|*|y|*|z|\n var terms = _.map(abs.arg.terms, function(term) {\n return new Abs(term);\n });\n return new Mul(terms);\n } else {\n return abs;\n }\n },\n\n isPositive: function() { return true; }\n});\n\n\n/* equation */\nexport function Eq(left, type, right) {\n this.left = left;\n this.type = type;\n this.right = right;\n}\nEq.prototype = new Expr();\n\n_.extend(Eq.prototype, {\n func: Eq,\n args: function() { return [this.left, this.type, this.right]; },\n\n needsExplicitMul: function() { return false; },\n\n print: function() {\n return this.left.print() + this.type + this.right.print();\n },\n\n signs: {\n \"=\": \" = \",\n \"<\": \" < \",\n \">\": \" > \",\n \"<>\": \" \\\\ne \",\n \"<=\": \" \\\\le \",\n \">=\": \" \\\\ge \"\n },\n\n tex: function() {\n return this.left.tex() + this.signs[this.type] + this.right.tex();\n },\n\n normalize: function() {\n var eq = this.recurse(\"normalize\");\n\n if (_.contains([\">\", \">=\"], eq.type)) {\n // inequalities should have the smaller side on the left\n return new Eq(eq.right, eq.type.replace(\">\", \"<\"), eq.left);\n } else {\n return eq;\n }\n },\n\n // convert this equation to an expression set to zero\n // the expression is normalized to a canonical form\n // e.g. y/2=x/4 -> y/2-x/4(=0) -> 2y-x(=0)\n // unless unfactored is specified, will then divide through\n asExpr: function(unfactored) {\n var isZero = function(expr) {\n return expr instanceof Num && expr.isSimple() && expr.eval() === 0;\n };\n\n // first convert to a sequence of additive terms\n var terms = [];\n\n if (this.left instanceof Add) {\n terms = _.clone(this.left.terms);\n } else if (!isZero(this.left)) {\n terms = [this.left];\n }\n\n if (this.right instanceof Add) {\n terms = terms.concat(this.right.negate().terms);\n } else if (!isZero(this.right)) {\n terms.push(this.right.negate());\n }\n\n var isInequality = !this.isEquality();\n\n // Collect over each term individually to transform simple expressions\n // into numbers that might have denominators, taking into account\n // float precision. We have to be very careful to not introduce any\n // irrational floats before asExpr() returns, because by definition\n // they do not have exact denominators...\n terms = _.invoke(terms, \"collect\", {preciseFloats: true});\n\n // ...and we multiply through by every denominator.\n for (var i = 0; i < terms.length; i++) {\n var denominator = terms[i].getDenominator();\n\n // Can't multiply inequalities by non 100% positive factors\n if (isInequality && !denominator.isPositive()) {\n denominator = denominator.asPositiveFactor();\n }\n\n if (!denominator.equals(Num.One)) {\n terms = _.map(terms, function(term) {\n return Mul.createOrAppend(term, denominator).simplify({\n once: true,\n preciseFloats: true\n });\n });\n }\n }\n\n var add = new Add(terms).flatten();\n return unfactored ? add : this.divideThrough(add);\n },\n\n // divide through by every common factor in the expression\n // e.g. 2y-4x(=0) -> y-2x(=0)\n // TODO(alex): Make it an option to only divide by variables/expressions\n // guaranteed to be nonzero\n divideThrough: function(expr) {\n var isInequality = !this.isEquality();\n\n var simplified = expr.simplify({once: true});\n var factored = simplified.factor({keepNegative: isInequality});\n\n if (!(factored instanceof Mul)) {\n return expr;\n }\n\n var terms = factored.terms;\n\n var isAdd = function(term) { return term instanceof Add; };\n var hasVar = function(term) { return !!term.getVars().length; };\n var isOne = function(term) { return term.equals(Num.One); };\n\n var grouped = _.groupBy(terms, isAdd);\n var adds = grouped[true] || [];\n var others = grouped[false] || [];\n\n if (adds.length && this.isEquality()) {\n // keep only Adds\n // e.g. 2xy(z+1)(=0) -> z+1(=0)\n return new Mul(adds).flatten();\n }\n\n var denominator = others;\n\n if (!adds.length) {\n // if no Adds, keep all variable terms to preserve meaning\n // e.g. 42xyz(=0) -> xyz(=0)\n denominator = _.reject(denominator, hasVar);\n }\n\n if (isInequality) {\n // can't divide inequalities by non 100% positive factors\n // e.g. 42x^2y(z+1)(=0) -> y(z+1)(=0)\n denominator = _.invoke(denominator, \"asPositiveFactor\");\n }\n\n // don't need to divide by one\n denominator = _.reject(denominator, isOne);\n\n denominator = _.map(denominator, function(term) {\n return new Pow(term, Num.Div);\n });\n\n var dividedResult = new Mul(terms.concat(denominator)).collect();\n\n // If the end result is the same as the original factoring,\n // rollback the factoring and discard all intermediate steps.\n if (dividedResult.equals(factored)) {\n return simplified;\n } else {\n return dividedResult;\n }\n },\n\n isEquality: function() {\n return _.contains([\"=\", \"<>\"], this.type);\n },\n\n compare: function(other) {\n // expression comparisons are handled by Expr.compare()\n if (!(other instanceof Eq)) {\n return false;\n }\n\n var eq1 = this.normalize();\n var eq2 = other.normalize();\n\n if (eq1.type !== eq2.type) {\n return false;\n }\n\n // need to collect to properly factor out common factors\n // e.g x+2x=6 -> 3x=6 -> 3x-6(=0) -> x-2(=0)\n var expr1 = eq1.divideThrough(eq1.asExpr(/* unfactored */ true).collect());\n var expr2 = eq2.divideThrough(eq2.asExpr(/* unfactored */ true).collect());\n\n if (eq1.isEquality()) {\n // equals and not-equals can be subtracted either way\n return expr1.compare(expr2) ||\n expr1.compare(Mul.handleNegative(expr2));\n } else {\n return expr1.compare(expr2);\n }\n },\n\n // should only be done after compare() returns true to avoid false positives\n sameForm: function(other) {\n var eq1 = this.normalize();\n var eq2 = other.normalize();\n\n var same = eq1.left.sameForm(eq2.left) && eq1.right.sameForm(eq2.right);\n\n if (eq1.isEquality()) {\n // equals and not-equals can be commutative with respect to the sign\n return same || (eq1.left.sameForm(eq2.right) && eq1.right.sameForm(eq2.left));\n } else {\n return same;\n }\n },\n\n // we don't want to override collect because it would turn y=x into y-x(=0)\n // instead, we ask if the equation was in that form, would it be simplified?\n isSimplified: function() {\n var expr = this.asExpr(/* unfactored */ true);\n var simplified = this.divideThrough(expr).simplify();\n return expr.equals(simplified) &&\n this.left.isSimplified() &&\n this.right.isSimplified();\n }\n});\n\n_.extend(Eq.prototype, {\n // Assumptions: Expression is of the form a+bx, and we solve for x\n solveLinearEquationForVariable: function(variable) {\n var expr = this.asExpr();\n if (!expr.is(Add) || expr.terms.length !== 2) {\n throw new Error(\"Can only handle linear equations of the form \" +\n \"a + bx (= 0)\");\n }\n\n var hasVar = function(term) {\n return term.has(Var) && _.contains(term.getVars(), variable.symbol);\n };\n\n var a, b;\n\n if (hasVar(expr.terms[0])) {\n a = Mul.handleNegative(expr.terms[1]);\n b = Mul.handleDivide(expr.terms[0], variable);\n } else {\n a = Mul.handleNegative(expr.terms[0]);\n b = Mul.handleDivide(expr.terms[1], variable);\n }\n\n return Mul.handleDivide(a, b).simplify();\n }\n});\n\n\n/* abstract symbol node */\nfunction Symbol() {}\nSymbol.prototype = new Expr();\n\n_.extend(Symbol.prototype, {\n\n needsExplicitMul: function() { return false; },\n\n findGCD: function(factor) {\n if (factor instanceof Symbol || factor instanceof Num) {\n return this.equals(factor) ? this : Num.One;\n } else {\n return factor.findGCD(this);\n }\n }\n});\n\n\n/* function variable */\nexport function Func(symbol, arg) {\n this.symbol = symbol; this.arg = arg;\n}\nFunc.prototype = new Symbol();\n\n_.extend(Func.prototype, {\n func: Func,\n args: function() { return [this.symbol, this.arg]; },\n\n print: function() {\n return this.symbol + \"(\" + this.arg.print() + \")\";\n },\n\n tex: function() {\n return this.symbol + \"(\" + this.arg.tex() + \")\";\n },\n\n eval: function(vars, options) {\n var arg = this.arg;\n var func = vars[this.symbol];\n var newVars = _.extend(_.clone(vars), {\n x: arg.eval(vars, options)\n });\n var parsedFunc = parse(func, options);\n if (parsedFunc.parsed) {\n return parsedFunc.expr.eval(newVars, options);\n }\n // If parsedFunc isn't actually parsed, return its error\n return parsedFunc;\n },\n\n codegen: function() {\n return 'vars[\"' + this.symbol + '\"](' +\n this.arg.codegen() + ')';\n },\n\n getUnits: function() {\n return this.arg.getUnits();\n },\n\n getVars: function(excludeFunc) {\n if (excludeFunc) {\n return this.arg.getVars();\n } else {\n return _.union(this.arg.getVars(), [this.symbol]).sort();\n }\n },\n\n getConsts: function() {\n return this.arg.getConsts();\n },\n});\n\n\n/* variable */\nexport function Var(symbol, subscript) {\n this.symbol = symbol;\n this.subscript = subscript;\n}\nVar.prototype = new Symbol();\n\n_.extend(Var.prototype, {\n func: Var,\n args: function() { return [this.symbol, this.subscript]; },\n\n exprArgs: function() { return []; },\n recurse: function() { return this; },\n\n print: function() {\n var sub = \"\";\n if (this.subscript) {\n sub = \"_(\" + this.subscript.print() + \")\";\n }\n return this.symbol + sub;\n },\n\n // Provide a way to easily evalate expressions with the common case,\n // subscripts that consist of a single number or symbol e.g. x_a or x_42\n prettyPrint: function() {\n var sub = this.subscript;\n if (sub && (sub instanceof Num || sub instanceof Symbol)) {\n return this.symbol + \"_\" + sub.print();\n } else {\n return this.print();\n }\n },\n\n tex: function() {\n var sub = \"\";\n if (this.subscript) {\n sub = \"_{\" + this.subscript.tex() + \"}\";\n }\n var prefix = this.symbol.length > 1 ? \"\\\\\" : \"\";\n return prefix + this.symbol + sub;\n },\n\n repr: function() { return \"Var(\" + this.print() + \")\"; },\n\n eval: function(vars, options) {\n return vars[this.prettyPrint()];\n },\n\n codegen: function() {\n return 'vars[\"' + this.prettyPrint() + '\"]';\n },\n\n getVars: function() { return [this.prettyPrint()]; },\n\n isPositive: function() { return false; }\n});\n\n\n/* constant */\nexport function Const(symbol) { this.symbol = symbol; }\nConst.prototype = new Symbol();\n\n_.extend(Const.prototype, {\n func: Const,\n args: function() { return [this.symbol]; },\n recurse: function() { return this; },\n\n eval: function(vars, options) {\n if (this.symbol === \"pi\") {\n return Math.PI;\n } else if (this.symbol === \"e\") {\n return Math.E;\n }\n },\n\n codegen: function() {\n if (this.symbol === \"pi\") {\n return \"Math.PI\";\n } else if (this.symbol === \"e\") {\n return \"Math.E\";\n }\n },\n\n print: function() { return this.symbol; },\n\n tex: function() {\n if (this.symbol === \"pi\") {\n return \"\\\\pi \";\n } else if (this.symbol === \"e\") {\n return \"e\";\n }\n },\n\n isPositive: function() {\n return this.eval() > 0;\n },\n\n abs: function() {\n if (this.eval() > 0) {\n return this;\n } else {\n return Mul.handleNegative(this);\n }\n },\n\n getConsts: function() {\n return [this.print()];\n },\n});\n\nConst.e = new Const(\"e\");\nConst.pi = new Const(\"pi\");\n\n\n/* abstract number node */\nfunction Num() {}\nNum.prototype = new Expr();\n\n_.extend(Num.prototype, {\n repr: function() { return this.print(); },\n strip: function() { return this.abs(); },\n recurse: function() { return this; },\n codegen: function() { return this.print(); },\n\n // takes another Num and returns a new Num\n add: abstract,\n mul: abstract,\n\n // returns this Num's additive inverse\n negate: abstract,\n\n isSubtract: function() { return this.hints.subtract; },\n\n // return the absolute value of the number\n abs: abstract,\n\n needsExplicitMul: function() { return true; },\n\n findGCD: abstract,\n\n isPositive: function() {\n return this.eval() > 0;\n },\n\n isNegative: function() {\n return this.eval() < 0;\n },\n\n asPositiveFactor: function() {\n return this.isPositive() ? this : this.abs();\n },\n\n // hints for interpreting and rendering user input\n hints: _.extend(Num.prototype.hints, {\n negate: false,\n subtract: false,\n divide: false,\n root: false,\n fraction: false,\n entered: false\n }),\n\n // whether a number is considered simple (one term)\n // e.g. for reals, ints and floats are simple\n isSimple: abstract,\n\n // Based on http://stackoverflow.com/a/10454560/2571482\n getDecimalPlaces: function() {\n var match = (\"\" + this.n).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n if (match) {\n return Math.max(\n 0,\n // Number of digits right of decimal point\n (match[1] ? match[1].length : 0) -\n // Adjust for scientific notation\n (match[2] ? +match[2] : 0)\n );\n } else {\n return 0;\n }\n },\n\n asRational: abstract\n});\n\n\n/* rational number (n: numerator, d: denominator) */\nexport function Rational(numerator, denominator) {\n var n = numerator; var d = denominator;\n if (d < 0) {\n n = -n; d = -d;\n }\n this.n = n; this.d = d;\n}\nRational.prototype = new Num();\n\n_.extend(Rational.prototype, {\n func: Rational,\n args: function() { return [this.n, this.d]; },\n eval: function() { return this.n / this.d; },\n\n print: function() {\n return this.n.toString() + \"/\" + this.d.toString();\n },\n\n tex: function() {\n var tex = \"\\\\frac{\" + Math.abs(this.n).toString() + \"}{\" + this.d.toString() + \"}\";\n return this.n < 0 ? \"-\" + tex : tex;\n },\n\n add: function(num, options) {\n if (num instanceof Rational) {\n return new Rational(this.n * num.d + this.d * num.n, this.d * num.d).collect();\n } else {\n return num.add(this, options);\n }\n },\n\n mul: function(num, options) {\n if (num instanceof Rational) {\n return new Rational(this.n * num.n, this.d * num.d).collect();\n } else {\n return num.mul(this, options);\n }\n },\n\n collect: function() {\n var gcd = Num.findGCD(this.n, this.d);\n\n var n = this.n / gcd;\n var d = this.d / gcd;\n\n if (d === 1) {\n return new Int(n);\n } else {\n return new Rational(n, d);\n }\n },\n\n negate: function() {\n return new Rational(-this.n, this.d);\n },\n\n abs: function() {\n return new Rational(Math.abs(this.n), this.d);\n },\n\n findGCD: function(factor) {\n // Attempt to factor out common numerators and denominators to return\n // a Rational instead of a Float\n if (factor instanceof Rational) {\n // For more background, see\n // http://math.stackexchange.com/questions/151081/gcd-of-rationals\n var numerator = Num.findGCD(this.n * factor.d, factor.n * this.d);\n var denominator = this.d * factor.d;\n // Create the rational, then call .collect() to simplify it\n return new Rational(numerator, denominator).collect();\n } else if (factor instanceof Int) {\n return new Rational(Num.findGCD(this.n, factor.n), this.d);\n } else {\n return factor.findGCD(this);\n }\n },\n\n // for now, assuming that exp is a Num\n raiseToThe: function(exp) {\n if (exp instanceof Int) {\n var positive = exp.eval() > 0;\n var abs = exp.abs().eval();\n var n = Math.pow(this.n, abs);\n var d = Math.pow(this.d, abs);\n if (positive) {\n return new Rational(n, d).collect();\n } else {\n return new Rational(d, n).collect();\n }\n } else {\n return new Float(this.eval()).raiseToThe(exp);\n }\n },\n\n getDenominator: function() {\n return new Int(this.d);\n },\n\n isSimple: function() { return false; },\n\n asRational: function() { return this; }\n});\n\n\n/* integer (n: numerator/number) */\nexport function Int(number) { this.n = number; }\nInt.prototype = new Rational(0, 1);\n\n_.extend(Int.prototype, {\n func: Int,\n args: function() { return [this.n]; },\n print: function() { return this.n.toString(); },\n tex: function() { return this.n.toString(); },\n negate: function() { return new Int(-this.n); },\n abs: function() { return new Int(Math.abs(this.n)); },\n isSimple: function() { return true; },\n findGCD: function(factor) {\n if (factor instanceof Int) {\n return new Int(Num.findGCD(this.n, factor.n));\n } else {\n return factor.findGCD(this);\n }\n }\n});\n\n_.extend(Int, {\n create: function(n) { return new Int(n).addHint(\"entered\"); }\n});\n\n/* float (n: number) */\nexport function Float(number) { this.n = number; }\nFloat.prototype = new Num();\n\n_.extend(Float.prototype, {\n func: Float,\n args: function() { return [this.n]; },\n eval: function() { return this.n; },\n\n // TODO(alex): when we internationalize number parsing/display\n // we should make sure to use the appropriate decimal mark here\n print: function() { return this.n.toString(); },\n tex: function() { return this.n.toString(); },\n\n add: function(num, options) {\n if (options && options.preciseFloats) {\n return Float.toDecimalPlaces(\n this.n + num.eval(),\n Math.max(this.getDecimalPlaces(), num.getDecimalPlaces())\n );\n } else {\n return new Float(this.n + num.eval()).collect();\n }\n },\n\n mul: function(num, options) {\n if (options && options.preciseFloats) {\n return Float.toDecimalPlaces(\n this.n * num.eval(),\n this.getDecimalPlaces() + num.getDecimalPlaces()\n );\n } else {\n return new Float(this.n * num.eval()).collect();\n }\n },\n\n collect: function() {\n // We used to simplify Floats to Ints here whenever possible, but no\n // longer do so in order to preserve significant figures.\n return this;\n },\n\n negate: function() { return new Float(-this.n); },\n abs: function() { return new Float(Math.abs(this.n)); },\n\n findGCD: function(factor) {\n if (factor instanceof Num) {\n return new Float(Num.findGCD(this.eval(), factor.eval())).collect();\n } else {\n return factor.findGCD(this);\n }\n },\n\n // for now, assuming that exp is a Num\n raiseToThe: function(exp, options) {\n if (options && options.preciseFloats &&\n exp instanceof Int && exp.n > 1) {\n return Float.toDecimalPlaces(\n new Pow(this, exp).eval(),\n this.getDecimalPlaces() * exp.n\n );\n } else {\n return new Float(new Pow(this, exp).eval()).collect();\n }\n },\n\n // only to be used on non-repeating decimals (e.g. user-provided)\n asRational: function() {\n var parts = this.n.toString().split(\".\");\n if (parts.length === 1) {\n return new Rational(this.n, 1);\n } else {\n var numerator = Number(parts.join(\"\"));\n var denominator = Math.pow(10, parts[1].length);\n return new Rational(numerator, denominator).collect();\n }\n },\n\n getDenominator: function() {\n return this.asRational().getDenominator();\n },\n\n isSimple: function() { return true; }\n});\n\n_.extend(Float, {\n create: function(n) { return new Float(n).addHint(\"entered\"); },\n\n // Account for floating point imprecision by explicitly controlling the\n // number of decimal places in common operations (e.g. +, *, ^)\n toDecimalPlaces: function(n, places) {\n return new Float(+n.toFixed(Math.min(places, 20))).collect();\n }\n});\n\n// static methods and fields that are best defined on Num\n_.extend(Num, {\n negativeOne: function(hint) {\n if (hint === \"subtract\") {\n return Num.Sub;\n } else if (hint === \"divide\") {\n return Num.Div;\n } else {\n return Num.Neg;\n }\n },\n\n // find the greatest common denominator\n findGCD: function(a, b) {\n var mod;\n\n a = Math.abs(a);\n b = Math.abs(b);\n\n // Euclid's method doesn't handle non-integers very well. For now\n // we just say we can't pull out a common factor. It might be\n // reasonable to do better than this in the future.\n if (a !== Math.floor(a) || b !== Math.floor(b)) {\n return 1;\n }\n\n while (b) {\n mod = a % b;\n a = b;\n b = mod;\n }\n\n return a;\n },\n\n min: function() {\n return _.min(_.toArray(arguments), function(num) {\n return num.eval();\n });\n },\n\n max: function() {\n return _.max(_.toArray(arguments), function(num) {\n return num.eval();\n });\n }\n});\n\nNum.Neg = new Int(-1).addHint(\"negate\");\nNum.Sub = new Int(-1).addHint(\"subtract\");\nNum.Div = new Int(-1).addHint(\"divide\");\n\nNum.Sqrt = new Rational(1, 2).addHint(\"root\");\n\nNum.Zero = new Int(0);\nNum.One = new Int(1);\nNum.Ten = new Int(10);\n\n\n// set identities here\nAdd.prototype.identity = Num.Zero;\nMul.prototype.identity = Num.One;\n\nvar parseError = function(str, hash) {\n // return int location of parsing error\n throw new Error(hash.loc.first_column);\n};\n\n// expose concrete nodes to parser scope\n// see http://zaach.github.io/jison/docs/#sharing-scope\nparser.yy = {\n Add: Add,\n Mul: Mul,\n Pow: Pow,\n Log: Log,\n Trig: Trig,\n Eq: Eq,\n Abs: Abs,\n Func: Func,\n Const: Const,\n Var: Var,\n Int: Int,\n Float: Float,\n parseError: parseError,\n\n constants: [\"e\"],\n symbolLexer: function(symbol) {\n if (_.contains(parser.yy.constants, symbol)) {\n return \"CONST\";\n } else if (_.contains(parser.yy.functions, symbol)) {\n return \"FUNC\";\n } else {\n return \"VAR\";\n }\n }\n};\n\nexport const parse = function(input, options) {\n try {\n if (options && options.functions) {\n // reserve the symbol \"i\" for complex numbers\n parser.yy.functions = _.without(options.functions, \"i\");\n } else {\n parser.yy.functions = [];\n }\n\n // If ',' is the decimal dividor in your country, replace any ','s\n // with '.'s.\n // This isn't perfect, since the output will all still have '.'s.\n // TODO(jack): Fix the output to have ','s in this case\n if (options && options.decimal_separator) {\n input = input.split(options.decimal_separator).join(\".\");\n }\n\n var expr = parser.parse(input).completeParse();\n return {parsed: true, expr: expr};\n } catch (e) {\n return {parsed: false, error: e.message};\n }\n};\n\n/* unit */\nexport function Unit(symbol) {\n this.symbol = symbol;\n}\nUnit.prototype = new Symbol();\n\n// If possible, replace unit prefixes with a multiplication.\n//\n// \"g\" -> Unit(\"g\")\n// \"kg\" -> 1000 * Unit(\"g\")\nvar unprefixify = function(symbol) {\n if (_(baseUnits).has(symbol) || _(derivedUnits).has(symbol)) {\n return new Unit(symbol);\n }\n\n // check for prefix\n var prefix = _(_(siPrefixes).keys()).find(function(testPrefix) {\n return new RegExp(\"^\" + testPrefix).test(symbol);\n });\n\n if (prefix) {\n var base = symbol.replace(new RegExp(\"^\" + prefix), \"\");\n\n // It's okay to be here if either:\n // * `base` is a base unit (the seven units listed in baseUnits)\n // * `base` is a derived unit which allows prefixes\n //\n // Otherwise, we're trying to parse a unit label which is not\n // allowed (mwk, mBTU, etc).\n if (_(baseUnits).has(base) ||\n (derivedUnits[base] &&\n derivedUnits[base].prefixes === hasPrefixes)) {\n\n return new Mul(siPrefixes[prefix], new Unit(base));\n } else {\n throw new Error(base + \" does not allow prefixes\");\n }\n } else {\n return new Unit(symbol);\n }\n};\n\nexport const unitParse = function(input) {\n try {\n var parseResult = unitParser.parse(input);\n\n // parseResult looks like:\n // {\n // magnitude: \"5\",\n // unit: {\n // num: [\n // { name: \"s\", pow: 2 }\n // ],\n // denom: [\n // { name: \"kg\", pow: 1 }\n // ]\n // }\n // }\n //\n // denom is optionally null\n\n var unitArray = [];\n\n _(parseResult.unit.num).each(function(unitSpec) {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(unitSpec.pow))\n );\n });\n\n _(parseResult.unit.denom).each(function(unitSpec) {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(-1 * unitSpec.pow))\n );\n });\n\n var unit = new Mul(unitArray).flatten();\n\n if (parseResult.type === \"unitMagnitude\") {\n // in the first case we have a magnitude coefficient as well as the\n // unit itself.\n var coefArray =\n [new Float(+parseResult.magnitude)].concat(unitArray);\n var expr = new Mul(coefArray);\n return {\n parsed: true,\n unit: unit,\n expr: expr,\n coefficient: parseResult.magnitude,\n type: parseResult.type\n };\n } else {\n\n // in the second case it's just the unit with no magnitude.\n return {\n parsed: true,\n unit: unit,\n type: parseResult.type,\n };\n }\n } catch (e) {\n return {parsed: false, error: e.message};\n }\n};\n\n_.extend(Unit.prototype, {\n func: Unit,\n args: function() { return [this.symbol]; },\n recurse: function() { return this; },\n\n eval: function(vars, options) {\n // This is called when comparing units. A unit doesn't affect the\n // numerical value of its coefficient, so this needs to be 1.\n //\n // On the other hand, things must not evaluate to the same thing if\n // they don't have the same type. I believe that's also true - form is\n // checked before numerical equivalence. I do not know where, though.\n // However, there are a couple tests checking this.\n return 1;\n },\n\n getUnits: function() { return [{unit: this.symbol, pow: 1}]; },\n\n codegen: function() { return \"1\"; },\n\n print: function() { return this.symbol; },\n\n tex: function() { return this.symbol; },\n\n // Simplify units by replacing prefixes with multiplication\n collect: function(options) {\n if (_(baseUnits).has(this.symbol)) {\n return this;\n } else if (_(derivedUnits).has(this.symbol)) {\n return derivedUnits[this.symbol].conversion;\n } else {\n throw new Error(\"could not understand unit: \" + this.symbol);\n }\n },\n});\n\nvar baseUnits = {\n m: new Unit(\"m\"),\n // Note: kg is the SI base unit but we use g for consistency\n g: new Unit(\"g\"),\n s: new Unit(\"s\"),\n A: new Unit(\"A\"),\n K: new Unit(\"K\"),\n mol: new Unit(\"mol\"),\n cd: new Unit(\"cd\"),\n};\n\nvar siPrefixes = {\n a: new Pow(new Int(10), new Int(-18)),\n f: new Pow(new Int(10), new Int(-15)),\n p: new Pow(new Int(10), new Int(-12)),\n n: new Pow(new Int(10), new Int(-9)),\n u: new Pow(new Int(10), new Int(-6)),\n m: new Pow(new Int(10), new Int(-3)),\n c: new Pow(new Int(10), new Int(-2)),\n d: new Pow(new Int(10), new Int(-1)),\n da: new Int(10),\n h: new Pow(new Int(10), new Int(2)),\n k: new Pow(new Int(10), new Int(3)),\n M: new Pow(new Int(10), new Int(6)),\n G: new Pow(new Int(10), new Int(9)),\n T: new Pow(new Int(10), new Int(12)),\n P: new Pow(new Int(10), new Int(15)),\n E: new Pow(new Int(10), new Int(18)),\n // http://en.wikipedia.org/wiki/Metric_prefix#.22Hella.22_prefix_proposal\n hella: new Pow(new Int(10), new Int(27)),\n};\n\n// Use these two values to mark a unit as either SI-prefixable or not.\nvar hasPrefixes = {};\nvar hasntPrefixes = {};\n\nvar makeAlias = function(str, prefixes) {\n var splits = str.split(\"|\");\n var coefficientStr = splits[0].trim();\n var unitsStr = splits[1].trim();\n\n var coefficient = Num.One;\n if (coefficientStr !== \"\") {\n coefficient = parse(coefficientStr).expr;\n }\n\n var numdenomStr = unitsStr.split(\"/\");\n var numdenom = [coefficient];\n\n if (numdenomStr[0]) {\n numdenomStr[0]\n .split(\" \")\n .filter(function(x) {\n return x !== \"\";\n }).map(function(x) {\n numdenom.push(new Unit(x));\n });\n }\n\n if (numdenomStr[1]) {\n numdenomStr[1]\n .split(\" \")\n .filter(function(x) {\n return x !== \"\";\n }).map(function(x) {\n numdenom.push(new Pow(new Unit(x), Num.Div));\n });\n }\n\n return {\n conversion: new Mul(numdenom),\n prefixes: prefixes,\n };\n};\n\n// This is a mapping of derived units (or different names for a unit) to their\n// definitions. For example, an inch is defined as 0.0254 m.\n//\n// Definitions don't need to be in terms of base units. For example, tsp is\n// defined in terms of tbsp (which is defined in terms of cup -> gal -> L ->\n// m^3). However, units must get simpler. I.e. there's no loop checking.\n//\n// makeAlias takes two parameters:\n// * a string specifying the simplification to perform\n// - a required pipe separates the constant factor from the base units\n// - the constant factor is parsed by KAS\n// - the base units are in a simple format which disallows exponents and\n// requires multiplicands to be space-separated (\"m m\" rather than \"m^2)\n// with an optional \"/\" separating numerator and denominator\n// - prefixes are not allowed to be used in the converted to units\n// (note that this restriction, the format of the string, and the choice to\n// use a string in the first place are made out of laziness to minimize\n// both typing and parsing)\n// * a boolean specifying whether or not it's acceptable to use SI units\n//\n// Where possible, these units are taken from \"The International System of\n// Units (SI)\" 8th edition (2006).\nvar derivedUnits = {\n // mass\n // The atomic mass unit / dalton.\n Da: makeAlias(\"1.6605388628 x 10^-24 | g\", hasPrefixes),\n u: makeAlias(\"| Da\", hasntPrefixes),\n\n // length\n \"meter\": makeAlias(\"| m\", hasntPrefixes),\n \"meters\": makeAlias(\"| m\", hasntPrefixes),\n \"in\": makeAlias(\"254 / 10000 | m\", hasntPrefixes),\n \"ft\": makeAlias(\"3048 / 10000 | m\", hasntPrefixes),\n \"yd\": makeAlias(\"9144 / 10000 | m\", hasntPrefixes),\n \"mi\": makeAlias(\"1609344 / 1000 | m\", hasntPrefixes),\n \"ly\": makeAlias(\"9.4607 x 10^15 | m\", hasntPrefixes),\n \"nmi\": makeAlias(\"1852 | m\", hasntPrefixes),\n \"Å\": makeAlias(\"10^-10 | m\", hasntPrefixes),\n \"pc\": makeAlias(\"3.0857 x 10^16 | m\", hasntPrefixes),\n\n // time\n \"min\": makeAlias(\"60 | s\", hasntPrefixes),\n \"hr\": makeAlias(\"3600 | s\", hasntPrefixes),\n \"sec\": makeAlias(\"| s\", hasntPrefixes),\n // TODO(joel) make day work\n \"day\": makeAlias(\"86400 | s\", hasntPrefixes),\n \"wk\": makeAlias(\"604800 | s\", hasntPrefixes),\n \"fortnight\": makeAlias(\"14 | day\", hasntPrefixes),\n \"shake\": makeAlias(\"10^-8 | s\", hasntPrefixes),\n \"olympiad\": makeAlias(\"126200000 | s\", hasntPrefixes),\n\n // temperature\n \"°C\": makeAlias(\"1 | K\", hasntPrefixes),\n \"°F\": makeAlias(\"5/9 | K\", hasntPrefixes),\n \"°R\": makeAlias(\"5/9 | K\", hasntPrefixes),\n\n // electric charge\n \"e\": makeAlias(\"1.6021765314 x 10^-19 | C\", hasntPrefixes),\n\n // speed\n \"c\": makeAlias(\"299792458 | m / s\", hasntPrefixes),\n \"kn\": makeAlias(\"514/1000 | m / s\", hasntPrefixes),\n \"kt\": makeAlias(\"| kn\", hasntPrefixes),\n \"knot\": makeAlias(\"| kn\", hasntPrefixes),\n\n // energy\n \"J\": makeAlias(\"| N m\", hasPrefixes),\n \"BTU\": makeAlias(\"1060 | J\", hasntPrefixes),\n \"cal\": makeAlias(\"4184 / 1000 | J\", hasPrefixes),\n \"eV\": makeAlias(\"1.602176514 x 10^-19 | J\", hasPrefixes),\n \"erg\": makeAlias(\"10^−7 | J\", hasPrefixes),\n\n // power\n \"W\": makeAlias(\"| J / s\", hasPrefixes),\n \"H-e\": makeAlias(\"80 | W\", hasntPrefixes),\n\n // force\n \"N\": makeAlias(\"1000 | g m / s s\", hasPrefixes),\n // \"lb\": makeAlias(\"4448 / 1000 | N\", hasntPrefixes),\n // 4.4482216152605\n \"lb\": makeAlias(\"4448221615 / 1000000000 | N\", hasntPrefixes),\n \"dyn\": makeAlias(\"10^-5 | N\", hasntPrefixes),\n\n // pressure\n \"Pa\": makeAlias(\"1 | N / m m m\", hasPrefixes),\n \"bar\": makeAlias(\"10^5 | Pa\", hasPrefixes),\n \"㏔\": makeAlias(\"1/1000 | bar\", hasntPrefixes),\n \"㍴\": makeAlias(\"| bar\", hasntPrefixes),\n \"atm\": makeAlias(\"101325 | Pa\", hasntPrefixes),\n \"Torr\": makeAlias(\"1/760 | atm\", hasntPrefixes),\n \"mmHg\": makeAlias(\"| Torr\", hasntPrefixes),\n\n // area\n \"ha\": makeAlias(\"10^4 | m m\", hasntPrefixes),\n \"b\": makeAlias(\"10^−28 | m m\", hasPrefixes),\n \"barn\": makeAlias(\"| b\", hasPrefixes),\n \"acre\": makeAlias(\"4046.87 | m m\", hasntPrefixes),\n \"skilodge\": makeAlias(\"10^-31 | m m\", hasntPrefixes),\n \"outhouse\": makeAlias(\"10^-34 | m m\", hasntPrefixes),\n \"shed\": makeAlias(\"10^-52 | m m\", hasntPrefixes),\n\n // volume\n \"L\": makeAlias(\"1/1000 | m m m\", hasPrefixes),\n \"gal\": makeAlias(\"3785/1000 | L\", hasPrefixes),\n \"cup\": makeAlias(\"1/16 | gal\", hasntPrefixes),\n \"qt\": makeAlias(\"1/4 | gal\", hasntPrefixes),\n \"quart\": makeAlias(\"| qt\", hasntPrefixes),\n \"p\": makeAlias(\"1/8 | gal\", hasntPrefixes),\n \"pt\": makeAlias(\"| p\", hasntPrefixes),\n \"pint\": makeAlias(\"| p\", hasntPrefixes),\n \"fl oz\": makeAlias(\"1/8 | cup\", hasntPrefixes),\n \"fl. oz.\": makeAlias(\"1/8 | cup\", hasntPrefixes),\n \"tbsp\": makeAlias(\"1/16 | cup\", hasntPrefixes),\n \"tsp\": makeAlias(\"1/3 | tbsp\", hasntPrefixes),\n\n // rotational\n // \"rad\":\n \"rev\": makeAlias(\"2 pi | rad\", hasntPrefixes),\n \"deg\": makeAlias(\"180 pi | rad\", hasntPrefixes),\n \"°\": makeAlias(\"| deg\", hasntPrefixes),\n \"arcminute\": makeAlias(\"1/60 | deg\", hasntPrefixes),\n \"arcsec\": makeAlias(\"1/3600 | deg\", hasntPrefixes),\n\n // dimensionless\n // \"B\": makeAlias(\"10 | dB\", hasntPrefixes), // XXX danger - logarithmic\n // \"dB\"\n // \"nP\"\n \"Hu\": makeAlias(\"1000 | dB\", hasPrefixes),\n \"dozen\": makeAlias(\"12 |\", hasntPrefixes),\n // XXX\n \"mol\": makeAlias(\"6.0221412927 x 10^23 |\", hasPrefixes),\n \"%\": makeAlias(\"1/100 |\", hasntPrefixes),\n \"percent\": makeAlias(\"| %\", hasntPrefixes),\n \"ppm\": makeAlias(\"1/1000000 |\", hasntPrefixes),\n\n // electric / magnetic\n \"V\": makeAlias(\"1000 | g m m / s s C\", hasPrefixes),\n \"C\": makeAlias(\"| A s\", hasPrefixes),\n \"ampere\": makeAlias(\"| A\", hasntPrefixes),\n \"Ω\": makeAlias(\"| V / A\", hasPrefixes),\n \"ohm\": makeAlias(\"| Ω\", hasntPrefixes),\n \"F\": makeAlias(\"| C / V\", hasPrefixes),\n \"H\": makeAlias(\"| ohm s\", hasPrefixes),\n \"T\": makeAlias(\"1000 | g / C s\", hasPrefixes),\n \"Wb\": makeAlias(\"1000 | g m m / C s\", hasPrefixes),\n\n // photometry\n // TODO not sure this is right\n \"lm\": makeAlias(\"pi x 10^4 | cd / m m\", hasntPrefixes),\n \"lx\": makeAlias(\"| lm / m m\", hasntPrefixes),\n \"nit\": makeAlias(\"| cd / m m\", hasntPrefixes),\n \"sb\": makeAlias(\"10^4 | cd / m m\", hasntPrefixes),\n \"stilb\": makeAlias(\"1 | sb\", hasntPrefixes),\n \"apostilb\": makeAlias(\"1 / pi x 10^(-4) | sb\", hasntPrefixes),\n \"blondel\": makeAlias(\"| apostilb\", hasntPrefixes),\n \"asb\": makeAlias(\"| apostilb\", hasntPrefixes),\n \"la\": makeAlias(\"| lm\", hasntPrefixes),\n \"Lb\": makeAlias(\"| lm\", hasntPrefixes),\n \"sk\": makeAlias(\"10^-7 | lm\", hasntPrefixes),\n \"skot\": makeAlias(\"| sk\", hasntPrefixes),\n \"bril\": makeAlias(\"10^-11 | lm\", hasntPrefixes),\n\n // other\n \"Hz\": makeAlias(\"| / s\", hasPrefixes),\n};\n\nexport const Zero = Num.Zero;\nexport const One = Num.One;\n","/* eslint-disable */\nimport _ from \"underscore\";\n\n// Assumes that both expressions have already been parsed\n// TODO(alex): be able to pass a random() function to compare()\nexport const compare = function(expr1, expr2, options) {\n var defaults = {\n form: false, // Check that the two expressions have the same form\n simplify: false, // Check that the second expression is simplified\n };\n\n /* Options that could be added in the future:\n * - Allow ratios: e.g. 3/1 and 3 should both be accepted for something\n * like slope\n * - Allow student to choose their own variable names\n */\n\n if (options !== undefined) {\n // eslint-disable-next-line no-undef\n options = _.extend(defaults, options);\n } else {\n options = defaults;\n }\n\n // TODO(CP-1614): Figure out how to make these messages translatable\n\n // Variable check\n var vars = expr1.sameVars(expr2);\n if (!vars.equal) {\n var message;\n if (vars.equalIgnoringCase) {\n message =\n \"Check your variables; one or more are using \" +\n \"the wrong case (upper or lower).\";\n } else {\n message =\n \"Check your variables; you may have used the wrong \" +\n \"letter for one or more of them.\";\n }\n return {\n equal: false,\n wrongVariableCase: vars.equalIgnoringCase,\n wrongVariableNames: !vars.equalIgnoringCase,\n message: message,\n };\n }\n\n // Semantic check\n if (!expr1.compare(expr2)) {\n return {equal: false, message: null};\n }\n\n // Syntactic check\n if (options.form && !expr1.sameForm(expr2)) {\n return {\n equal: false,\n message: \"Your answer is not in the correct form.\",\n };\n }\n\n // Syntactic check\n if (options.simplify && !expr1.isSimplified()) {\n return {\n equal: false,\n message: \"Your answer is not fully expanded and simplified.\",\n };\n }\n\n return {equal: true, message: null};\n};\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","type","magnitude","unit","$","num","denom","concat","name","pow","table","defaultActions","parseError","str","hash","recoverable","Error","parse","input","self","stack","vstack","lstack","TERROR","EOF","args","slice","call","arguments","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","Array","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","n","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","i","flex","begin","condition","popState","pop","conditions","topState","Math","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","unitParser","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","Eq","Add","createOrAppend","Mul","handleNegative","fold","handleDivide","Log","natural","common","Trig","Pow","Var","Const","toLowerCase","Int","Number","Float","completeParse","addHint","sqrt","nthroot","Abs","Func","symbolLexer","console","log","abstract","print","error","message","isNaN","object","randomFloat","min","max","extent","random","ITERATIONS","TOLERANCE","Expr","_","extend","func","construct","instance","recurse","method","passed","map","arg","isString","eval","codegen","compile","code","Function","e","tex","asTex","defaults","display","dynamic","times","toString","repr","strip","normalize","expand","factor","collect","equals","other","simplify","once","step1","step2","step3","step4","simplified","isSimplified","exprArgs","filter","getVars","excludeFunc","uniq","flatten","invoke","sort","getConsts","getUnits","is","has","any","raiseToThe","exp","isSubtract","isDivide","isRoot","needsExplicitMul","sameVars","vars1","vars2","same","array1","array2","difference","lower","array","equal","equalIgnoringCase","compare","varList","union","getDelta","num1","num2","equalNumbers","delta","Unit","expr1","expr2","unitList1","unitList2","isEqual","vars","floor","useFloats","each","result1","partialEval","result2","toFixed","sameForm","findGCD","Num","One","getDenominator","asMul","isPositive","isNegative","asPositiveFactor","hint","expr","hints","clone","parens","asExpr","negate","Neg","Seq","terms","sortBy","term","partition","groupBy","numbers","others","identity","grouped","flattened","pluck","undefined","reduce","all","oldTerm","newTerm","indexOf","newTerms","isArray","remove","toArray","memo","pairs","muls","pair","collected","compact","sum","zip","coefficient","keepNegative","factors","rest","remainder","add","tmUnits","chain","value","a","b","localeCompare","cdot","inverses","inverse","number","negatives","numerator","isRational","Rational","withThisRemoved","splice","hasDenom","shouldPushDown","fraction","d","Div","subtract","entered","denominator","isAdd","isInverse","isInverseAdd","base","mul","hasAdd","hasInverseAdd","normals","adds","expanded","temp","factored","rational","partitioned","Zero","summed","isBasic","trigs","trig","logs","exprs","byArg","funcs","sin","cos","tan","cot","byBase","power","factorIn","negativeOne","factorOut","list","divide","isNum","find","left","right","negated","first","isInt","reversed","reverse","divided","last","initial","trigLog","open","newTrigLog","pos","neg","posOrNeg","some","every","firstNeg","firstNum","evaledBase","evaledExp","simplifiedExp","decimals","rationalExp","oddDenominator","oddNumerator","sign","bind","asDivide","isSimple","positive","signed","cache","indices","without","pick","isSimilarLog","preciseFloats","asRational","decimalsInBase","getDecimalPlaces","root","decimalsInRoot","newBase","isDiv","isSquaredTrig","expA","expB","Sqrt","radicand","degree","isNatural","Ten","functions","csc","sec","arcsin","asin","arccos","acos","arctan","atan","arccsc","arcsec","arccot","sinh","argStr","cosh","tanh","csch","sech","coth","isEven","contains","positives","signs","eq","unfactored","isZero","isInequality","isEquality","divideThrough","hasVar","isOne","dividedResult","eq1","eq2","solveLinearEquationForVariable","variable","Symbol","newVars","x","parsedFunc","parsed","subscript","sub","prettyPrint","prefix","PI","E","pi","gcd","toDecimalPlaces","parts","places","Sub","mod","constants","decimal_separator","unprefixify","baseUnits","derivedUnits","siPrefixes","keys","testPrefix","RegExp","test","prefixes","hasPrefixes","unitParse","parseResult","unitArray","unitSpec","coefArray","conversion","m","g","s","A","K","mol","cd","f","u","da","h","M","G","T","P","hella","hasntPrefixes","makeAlias","splits","coefficientStr","trim","unitsStr","numdenomStr","numdenom","Da","form","wrongVariableCase","wrongVariableNames"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/__genfiles__/unitparser.js","../../src/__genfiles__/parser.js","../../src/nodes.js","../../src/compare.js"],"sourcesContent":["// this is a @generated file\n\n/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,9],$V2=[8,17],$V3=[6,11],$V4=[6,11,13,17];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"unitvalue\":3,\"magnitude\":4,\"unit\":5,\"EOF\":6,\"float\":7,\"POW\":8,\"int\":9,\"multatoms\":10,\"DIV\":11,\"expatom\":12,\"MUL\":13,\"atom\":14,\"^\":15,\"nat\":16,\"ATOM\":17,\"FLOAT\":18,\"NAT\":19,\"NEG\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"EOF\",8:\"POW\",11:\"DIV\",13:\"MUL\",15:\"^\",17:\"ATOM\",18:\"FLOAT\",19:\"NAT\",20:\"NEG\"},\nproductions_: [0,[3,3],[3,2],[4,3],[4,1],[5,3],[5,1],[10,3],[10,2],[10,1],[12,3],[12,1],[14,1],[7,1],[7,1],[16,1],[9,2],[9,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n\n return {\n type: \"unitMagnitude\",\n magnitude: $$[$0-2],\n unit: $$[$0-1],\n };\n \nbreak;\ncase 2:\n\n return {\n type: \"unitStandalone\",\n unit: $$[$0-1],\n }\n \nbreak;\ncase 3:\n\n this.$ = $$[$0-2] + \"e\" + $$[$0];\n \nbreak;\ncase 4: case 13: case 14: case 15: case 17:\n this.$ = $$[$0]; \nbreak;\ncase 5:\n\n this.$ = {\n num: $$[$0-2],\n denom: $$[$0],\n };\n \nbreak;\ncase 6:\n\n this.$ = {\n num: $$[$0],\n denom: null,\n };\n \nbreak;\ncase 7:\n this.$ = [$$[$0-2]].concat($$[$0]); \nbreak;\ncase 8:\n this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 9:\n this.$ = [$$[$0]]; \nbreak;\ncase 10:\n\n this.$ = {\n name: $$[$0-2],\n pow: $$[$0],\n };\n \nbreak;\ncase 11:\n\n this.$ = {\n name: $$[$0],\n pow: 1,\n };\n \nbreak;\ncase 12:\n this.$ = yytext; \nbreak;\ncase 16:\n this.$ = \"-\" + $$[$0]; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:$V0,18:[1,6],19:$V1},{1:[3]},{5:12,10:5,12:8,14:10,17:$V0},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},o($V2,[2,13]),o($V2,[2,14]),o($V3,[2,9],{12:8,14:10,10:17,13:[1,16],17:$V0}),o([6,8,11,13,17],[2,15]),o($V4,[2,11],{15:[1,18]}),o([6,11,13,15,17],[2,12]),{6:[1,19]},{1:[2,2]},{9:20,19:[1,22],20:[1,21]},{10:23,12:8,14:10,17:$V0},{10:24,12:8,14:10,17:$V0},o($V3,[2,8]),{16:25,19:$V1},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},o($V3,[2,7]),o($V4,[2,10]),{17:[2,16]}],\ndefaultActions: {13:[2,2],19:[2,1],20:[2,3],22:[2,17],23:[2,5],26:[2,16]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n //_token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 11;\nbreak;\ncase 1:return '(';\nbreak;\ncase 2:return ')';\nbreak;\ncase 3:return 8;\nbreak;\ncase 4:return 15;\nbreak;\ncase 5:return 13;\nbreak;\ncase 6:return 18;\nbreak;\ncase 7:return 19;\nbreak;\ncase 8:return 20;\nbreak;\ncase 9:return 17;\nbreak;\ncase 10:return 17;\nbreak;\ncase 11:return 17;\nbreak;\ncase 12:/* skip whitespace */\nbreak;\ncase 13:return 6;\nbreak;\n}\n},\nrules: [/^(?:\\/)/,/^(?:\\()/,/^(?:\\))/,/^(?:(\\*|x|\\u00d7|\\u2219|\\u22c5|\\u00b7)\\s*10\\s*\\^)/,/^(?:\\^)/,/^(?:\\*)/,/^(?:[0-9]+\\.[0-9]+)/,/^(?:[0-9]+)/,/^(?:-)/,/^(?:\\u00b0( ?)[cCfF])/,/^(?:fl\\.? oz\\.?)/,/^(?:[\\u00b5]?([A-Za-z-]+|[\\u2103\\u2109\\u212b]))/,/^(?:\\s+)/,/^(?:$)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport const unitParser = parser;\n","// This is a @generated file\nimport _ from \"underscore\";\n\n/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[1,17],$V2=[1,13],$V3=[1,14],$V4=[1,15],$V5=[1,32],$V6=[1,22],$V7=[1,23],$V8=[1,24],$V9=[1,25],$Va=[1,26],$Vb=[1,33],$Vc=[1,27],$Vd=[1,28],$Ve=[1,29],$Vf=[1,30],$Vg=[1,20],$Vh=[1,36],$Vi=[1,37],$Vj=[5,6,8,10,33,35,41,43,45],$Vk=[1,39],$Vl=[1,40],$Vm=[5,6,8,10,12,14,16,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],$Vn=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],$Vo=[5,6,8,10,12,14,16,18,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"equation\":3,\"expression\":4,\"SIGN\":5,\"EOF\":6,\"additive\":7,\"+\":8,\"multiplicative\":9,\"-\":10,\"triglog\":11,\"*\":12,\"negative\":13,\"/\":14,\"trig\":15,\"TRIG\":16,\"trigfunc\":17,\"^\":18,\"TRIGINV\":19,\"logbase\":20,\"ln\":21,\"log\":22,\"_\":23,\"subscriptable\":24,\"power\":25,\"primitive\":26,\"variable\":27,\"VAR\":28,\"CONST\":29,\"INT\":30,\"FLOAT\":31,\"{\":32,\"}\":33,\"(\":34,\")\":35,\"function\":36,\"FUNC\":37,\"invocation\":38,\"sqrt\":39,\"[\":40,\"]\":41,\"abs\":42,\"|\":43,\"LEFT|\":44,\"RIGHT|\":45,\"FRAC\":46,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"SIGN\",6:\"EOF\",8:\"+\",10:\"-\",12:\"*\",14:\"/\",16:\"TRIG\",18:\"^\",19:\"TRIGINV\",21:\"ln\",22:\"log\",23:\"_\",28:\"VAR\",29:\"CONST\",30:\"INT\",31:\"FLOAT\",32:\"{\",33:\"}\",34:\"(\",35:\")\",37:\"FUNC\",39:\"sqrt\",40:\"[\",41:\"]\",42:\"abs\",43:\"|\",44:\"LEFT|\",45:\"RIGHT|\",46:\"FRAC\"},\nproductions_: [0,[3,4],[3,2],[3,1],[4,1],[7,3],[7,3],[7,1],[9,2],[9,3],[9,3],[9,1],[13,2],[13,1],[15,1],[17,1],[17,3],[17,1],[20,1],[20,1],[20,3],[11,2],[11,2],[11,1],[25,3],[25,1],[27,1],[24,3],[24,1],[24,1],[24,1],[24,1],[24,3],[24,3],[36,1],[38,4],[38,4],[38,7],[38,4],[38,3],[38,3],[38,4],[26,1],[26,1],[26,7]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn new yy.Eq($$[$0-3], $$[$0-2], $$[$0-1]);\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3:\nreturn new yy.Add([]);\nbreak;\ncase 4: case 7: case 11: case 13: case 15: case 20: case 23: case 25: case 42: case 43:\nthis.$ = $$[$0];\nbreak;\ncase 5:\nthis.$ = yy.Add.createOrAppend($$[$0-2], $$[$0]);\nbreak;\ncase 6:\nthis.$ = yy.Add.createOrAppend($$[$0-2], yy.Mul.handleNegative($$[$0], \"subtract\"));\nbreak;\ncase 8:\nthis.$ = yy.Mul.fold(yy.Mul.createOrAppend($$[$0-1], $$[$0]));\nbreak;\ncase 9:\nthis.$ = yy.Mul.fold(yy.Mul.createOrAppend($$[$0-2], $$[$0]));\nbreak;\ncase 10:\nthis.$ = yy.Mul.fold(yy.Mul.handleDivide($$[$0-2], $$[$0]));\nbreak;\ncase 12:\nthis.$ = yy.Mul.handleNegative($$[$0]);\nbreak;\ncase 14: case 17:\nthis.$ = [yytext];\nbreak;\ncase 16:\nthis.$ = $$[$0-2].concat($$[$0]);\nbreak;\ncase 18:\nthis.$ = yy.Log.natural();\nbreak;\ncase 19:\nthis.$ = yy.Log.common();\nbreak;\ncase 21:\nthis.$ = yy.Trig.create($$[$0-1], $$[$0]);\nbreak;\ncase 22:\nthis.$ = yy.Log.create($$[$0-1], $$[$0]);\nbreak;\ncase 24:\nthis.$ = new yy.Pow($$[$0-2], $$[$0]);\nbreak;\ncase 26: case 34:\nthis.$ = yytext;\nbreak;\ncase 27:\nthis.$ = new yy.Var($$[$0-2], $$[$0]);\nbreak;\ncase 28:\nthis.$ = new yy.Var($$[$0]);\nbreak;\ncase 29:\nthis.$ = new yy.Const(yytext.toLowerCase());\nbreak;\ncase 30:\nthis.$ = yy.Int.create(Number(yytext));\nbreak;\ncase 31:\nthis.$ = yy.Float.create(Number(yytext));\nbreak;\ncase 32:\nthis.$ = $$[$0-1].completeParse();\nbreak;\ncase 33:\nthis.$ = $$[$0-1].completeParse().addHint('parens');\nbreak;\ncase 35: case 36:\nthis.$ = yy.Pow.sqrt($$[$0-1]);\nbreak;\ncase 37:\nthis.$ = new yy.Pow.nthroot($$[$0-1], $$[$0-4]);\nbreak;\ncase 38: case 39: case 40:\nthis.$ = new yy.Abs($$[$0-1]);\nbreak;\ncase 41:\nthis.$ = new yy.Func($$[$0-3], $$[$0-1]);\nbreak;\ncase 44:\nthis.$ = yy.Mul.handleDivide($$[$0-4], $$[$0-1]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:[1,3],7:4,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},o([5,6],[2,4],{8:$Vh,10:$Vi}),o($Vj,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vm,[2,11]),{10:$V0,11:8,13:41,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,13]),{10:$V0,11:8,13:42,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{10:$V0,11:8,13:43,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,23]),o($Vn,[2,15],{18:[1,44]}),o($Vn,[2,17]),o($Vn,[2,18]),o($Vn,[2,19],{23:[1,45]}),o($Vm,[2,25],{18:[1,46]}),o([10,16,18,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],[2,14]),o($Vo,[2,42]),o($Vo,[2,43]),{32:[1,47]},o($Vo,[2,28],{23:[1,48]}),o($Vo,[2,29]),o($Vo,[2,30]),o($Vo,[2,31]),{7:49,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:50,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:56,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{34:[1,57]},o([5,6,8,10,12,14,16,18,19,21,22,23,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],[2,26]),{34:[2,34]},{4:58,7:4,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{1:[2,2]},{9:59,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{9:60,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,8]),{10:$V0,11:8,13:61,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{10:$V0,11:8,13:62,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},o($Vm,[2,12]),o($Vm,[2,21]),o($Vm,[2,22]),{10:$V0,11:8,13:63,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{24:64,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va},{10:$V0,11:8,13:65,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:66,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{24:67,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va},{8:$Vh,10:$Vi,33:[1,68]},{8:$Vh,10:$Vi,35:[1,69]},{7:70,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:71,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:72,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:73,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{8:$Vh,10:$Vi,43:[1,74]},{8:$Vh,10:$Vi,45:[1,75]},{7:76,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{6:[1,77]},o($Vj,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vj,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:$Vk,14:$Vl,16:$V1,19:$V2,21:$V3,22:$V4,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,37:$Vb,39:$Vc,42:$Vd,44:$Vf,46:$Vg}),o($Vm,[2,9]),o($Vm,[2,10]),o($Vn,[2,16]),o($Vn,[2,20]),o($Vm,[2,24]),{8:$Vh,10:$Vi,33:[1,78]},o($Vo,[2,27]),o($Vo,[2,32]),o($Vo,[2,33]),{8:$Vh,10:$Vi,35:[1,79]},{8:$Vh,10:$Vi,33:[1,80]},{8:$Vh,10:$Vi,41:[1,81]},{8:$Vh,10:$Vi,35:[1,82]},o($Vo,[2,39]),o($Vo,[2,40]),{8:$Vh,10:$Vi,35:[1,83]},{1:[2,1]},{32:[1,84]},o($Vo,[2,35]),o($Vo,[2,36]),{32:[1,85]},o($Vo,[2,38]),o($Vo,[2,41]),{7:86,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{7:87,9:5,10:$V0,11:8,13:6,15:12,16:$V1,17:9,19:$V2,20:10,21:$V3,22:$V4,24:18,25:11,26:16,27:21,28:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:31,37:$Vb,38:19,39:$Vc,42:$Vd,43:$Ve,44:$Vf,46:$Vg},{8:$Vh,10:$Vi,33:[1,88]},{8:$Vh,10:$Vi,33:[1,89]},o($Vo,[2,44]),o($Vo,[2,37])],\ndefaultActions: {3:[2,3],33:[2,34],35:[2,2],77:[2,1]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n //_token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"flex\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip \\space */\nbreak;\ncase 2:/* skip '\\ ' */\nbreak;\ncase 3:return \"INT\"\nbreak;\ncase 4:return \"FLOAT\"\nbreak;\ncase 5:return \"^\"\nbreak;\ncase 6:return \"*\"\nbreak;\ncase 7:return \"*\"\nbreak;\ncase 8:return \"*\"\nbreak;\ncase 9:return \"*\"\nbreak;\ncase 10:return \"/\"\nbreak;\ncase 11:return \"/\"\nbreak;\ncase 12:return \"-\"\nbreak;\ncase 13:return \"-\"\nbreak;\ncase 14:return \"+\"\nbreak;\ncase 15:return \"^\"\nbreak;\ncase 16:return \"(\"\nbreak;\ncase 17:return \")\"\nbreak;\ncase 18:return \"(\"\nbreak;\ncase 19:return \")\"\nbreak;\ncase 20:return \"[\"\nbreak;\ncase 21:return \"]\"\nbreak;\ncase 22:return \"{\"\nbreak;\ncase 23:return \"}\"\nbreak;\ncase 24:return \"{\"\nbreak;\ncase 25:return \"}\"\nbreak;\ncase 26:return \"_\"\nbreak;\ncase 27:return \"|\"\nbreak;\ncase 28:return \"LEFT|\"\nbreak;\ncase 29:return \"RIGHT|\"\nbreak;\ncase 30:return \"!\"\nbreak;\ncase 31:return \"SIGN\"\nbreak;\ncase 32:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 33:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 34:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 35:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 36:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 37:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 38:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 39:yy_.yytext = \"<>\"; return \"SIGN\"\nbreak;\ncase 40:yy_.yytext = \"<=\"; return \"SIGN\"\nbreak;\ncase 41:yy_.yytext = \">=\"; return \"SIGN\"\nbreak;\ncase 42:return \"FRAC\"\nbreak;\ncase 43:return \"FRAC\"\nbreak;\ncase 44:return \"sqrt\"\nbreak;\ncase 45:return \"abs\"\nbreak;\ncase 46:return \"ln\"\nbreak;\ncase 47:return \"log\"\nbreak;\ncase 48:return \"TRIG\"\nbreak;\ncase 49:return \"TRIG\"\nbreak;\ncase 50:return \"TRIG\"\nbreak;\ncase 51:return \"TRIG\"\nbreak;\ncase 52:yy_.yytext = \"sin\"; return \"TRIG\"\nbreak;\ncase 53:yy_.yytext = \"cos\"; return \"TRIG\"\nbreak;\ncase 54:yy_.yytext = \"tan\"; return \"TRIG\"\nbreak;\ncase 55:yy_.yytext = \"csc\"; return \"TRIG\"\nbreak;\ncase 56:yy_.yytext = \"sec\"; return \"TRIG\"\nbreak;\ncase 57:yy_.yytext = \"cot\"; return \"TRIG\"\nbreak;\ncase 58:yy_.yytext = \"arcsin\"; return \"TRIG\"\nbreak;\ncase 59:yy_.yytext = \"arccos\"; return \"TRIG\"\nbreak;\ncase 60:yy_.yytext = \"arctan\"; return \"TRIG\"\nbreak;\ncase 61:yy_.yytext = \"arccsc\"; return \"TRIG\"\nbreak;\ncase 62:yy_.yytext = \"arcsec\"; return \"TRIG\"\nbreak;\ncase 63:yy_.yytext = \"arccot\"; return \"TRIG\"\nbreak;\ncase 64:return \"TRIGINV\"\nbreak;\ncase 65:return \"TRIGINV\"\nbreak;\ncase 66:yy_.yytext = \"sinh\"; return \"TRIG\"\nbreak;\ncase 67:yy_.yytext = \"cosh\"; return \"TRIG\"\nbreak;\ncase 68:yy_.yytext = \"tanh\"; return \"TRIG\"\nbreak;\ncase 69:yy_.yytext = \"csch\"; return \"TRIG\"\nbreak;\ncase 70:yy_.yytext = \"sech\"; return \"TRIG\"\nbreak;\ncase 71:yy_.yytext = \"tanh\"; return \"TRIG\"\nbreak;\ncase 72:return \"CONST\"\nbreak;\ncase 73:yy_.yytext = \"pi\"; return \"CONST\"\nbreak;\ncase 74:yy_.yytext = \"pi\"; return \"CONST\"\nbreak;\ncase 75:return \"VAR\"\nbreak;\ncase 76:yy_.yytext = \"theta\"; return \"VAR\"\nbreak;\ncase 77:yy_.yytext = \"theta\"; return \"VAR\"\nbreak;\ncase 78:return \"VAR\"\nbreak;\ncase 79:yy_.yytext = \"phi\"; return \"VAR\"\nbreak;\ncase 80:yy_.yytext = \"phi\"; return \"VAR\"\nbreak;\ncase 81:return yy.symbolLexer(yy_.yytext)\nbreak;\ncase 82:return \"EOF\"\nbreak;\ncase 83:return \"INVALID\"\nbreak;\ncase 84:console.log(yy_.yytext);\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\\\space)/,/^(?:\\\\ )/,/^(?:[0-9]+\\.?)/,/^(?:([0-9]+)?\\.[0-9]+)/,/^(?:\\*\\*)/,/^(?:\\*)/,/^(?:\\\\cdot|·)/,/^(?:\\\\times|×)/,/^(?:\\\\ast)/,/^(?:\\/)/,/^(?:\\\\div|÷)/,/^(?:-)/,/^(?:−)/,/^(?:\\+)/,/^(?:\\^)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\\\left\\()/,/^(?:\\\\right\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\\\left\\{)/,/^(?:\\\\right\\})/,/^(?:_)/,/^(?:\\|)/,/^(?:\\\\left\\|)/,/^(?:\\\\right\\|)/,/^(?:\\!)/,/^(?:<=|>=|<>|<|>|=)/,/^(?:\\\\le)/,/^(?:\\\\ge)/,/^(?:\\\\leq)/,/^(?:\\\\geq)/,/^(?:=\\/=)/,/^(?:\\\\ne)/,/^(?:\\\\neq)/,/^(?:≠)/,/^(?:≤)/,/^(?:≥)/,/^(?:\\\\frac)/,/^(?:\\\\dfrac)/,/^(?:sqrt|\\\\sqrt)/,/^(?:abs|\\\\abs)/,/^(?:ln|\\\\ln)/,/^(?:log|\\\\log)/,/^(?:sin|cos|tan)/,/^(?:csc|sec|cot)/,/^(?:sinh|cosh|tanh)/,/^(?:csch|sech|coth)/,/^(?:\\\\sin)/,/^(?:\\\\cos)/,/^(?:\\\\tan)/,/^(?:\\\\csc)/,/^(?:\\\\sec)/,/^(?:\\\\cot)/,/^(?:\\\\arcsin)/,/^(?:\\\\arccos)/,/^(?:\\\\arctan)/,/^(?:\\\\arccsc)/,/^(?:\\\\arcsec)/,/^(?:\\\\arccot)/,/^(?:arcsin|arccos|arctan)/,/^(?:arccsc|arcsec|arccot)/,/^(?:\\\\sinh)/,/^(?:\\\\cosh)/,/^(?:\\\\tanh)/,/^(?:\\\\csch)/,/^(?:\\\\sech)/,/^(?:\\\\coth)/,/^(?:pi)/,/^(?:π)/,/^(?:\\\\pi)/,/^(?:theta)/,/^(?:θ)/,/^(?:\\\\theta)/,/^(?:phi)/,/^(?:φ)/,/^(?:\\\\phi)/,/^(?:[a-zA-Z])/,/^(?:$)/,/^(?:.)/,/^(?:.)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport {parser};\n","/* eslint-disable prettier/prettier */\n/* eslint-disable import/order */\n/* TODO(charlie): fix these lint errors (http://eslint.org/docs/rules): */\n/* eslint-disable indent, no-undef, no-var, one-var, no-dupe-keys, no-new-func, no-redeclare, @typescript-eslint/no-unused-vars, comma-dangle, max-len, prefer-spread, space-infix-ops, space-unary-ops */\nimport _ from \"underscore\";\n\nimport {unitParser} from \"./__genfiles__/unitparser\";\nimport {parser} from \"./__genfiles__/parser\";\n\n/* The node hierarcy is as follows:\n\n (Expr)\n (Seq) 2+ children\n Add\n Mul\n Pow 2 children\n Log 2 children\n Eq 2 children\n Trig 1 child\n Abs 1 child\n (Symbol)\n Func 1 child e.g. f(x)\n Var leaf node e.g. x, x_n\n Const leaf node e.g. pi, e, <i>\n Unit leaf node e.g. kg\n (Num) leaf node\n Rational e.g. 2/3\n Int\n Float\n\n (abstract, not meant to be instantiated)\n\n == Key design concepts ==\n Functional: All methods return new nodes - nodes are never mutated.\n Ignore commutativity: Commutative inputs should be parsed equivalently.\n Exploit commutativity: Output should take advantage of ordering.\n*/\n\n/* non user-facing functions */\n\n// assert that all abstract methods have been overridden\nvar abstract = function () {\n // Try to give people a bit of information when this happens\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @babel/no-invalid-this\n this.print(),\n );\n};\n\n// throw an error that is meant to be caught by the test suite (not user facing)\nvar error = function (message) {\n throw new Error(message);\n};\n\n// reliably detect NaN\nvar isNaN = function (object) {\n return object !== object;\n};\n\n// return a random float between min (inclusive) and max (exclusive),\n// not that inclusivity means much, probabilistically, on floats\nvar randomFloat = function (min, max) {\n var extent = max - min;\n return Math.random() * extent + min;\n};\n\n/* constants */\nvar ITERATIONS = 12;\nvar TOLERANCE = 9; // decimal places\n\n/* abstract base expression node */\nfunction Expr() {}\n\n_.extend(Expr.prototype, {\n // this node's immediate constructor\n func: abstract,\n\n // an array of the arguments to this node's immediate constructor\n args: abstract,\n\n // make a new node with the given arguments\n construct: function (args) {\n var instance = new this.func();\n this.func.apply(instance, args);\n return instance;\n },\n\n // an abstraction for chainable, bottom-up recursion\n recurse: function (method) {\n var passed = Array.prototype.slice.call(arguments, 1);\n var args = _.map(this.args(), function (arg) {\n return _.isString(arg) ? arg : arg[method].apply(arg, passed);\n });\n return this.construct(args);\n },\n\n // evaluate numerically with given variable mapping\n eval: abstract,\n\n codegen: abstract,\n\n compile: function () {\n var code = this.codegen();\n try {\n return new Function(\"vars\", \"return \" + code + \";\");\n } catch (e) {\n throw new Error(\"Function did not compile: \" + code);\n }\n },\n\n // returns a string unambiguously representing the expression\n // should be valid as input\n // e.g. this.equals(parse(this.print())) === true\n print: abstract,\n\n // returns a TeX string representing the expression\n tex: abstract,\n\n // returns a TeX string, modified by the given options\n asTex: function (options) {\n options = options || {};\n _.defaults(options, {\n display: true,\n dynamic: true,\n times: false,\n });\n\n var tex = this.tex();\n\n if (options.display) {\n tex = \"\\\\displaystyle \" + tex;\n }\n if (options.dynamic) {\n tex = tex.replace(/\\(/g, \"\\\\left(\");\n tex = tex.replace(/\\)/g, \"\\\\right)\");\n }\n if (options.times) {\n tex = tex.replace(/\\\\cdot/g, \"\\\\times\");\n }\n\n return tex;\n },\n\n // returns the name of this expression's constructor as a string\n // only used for testing and debugging (the ugly regex is for IE8)\n name: function () {\n if (this.func.name) {\n return this.func.name;\n } else {\n return this.func.toString().match(/^function\\s*([^\\s(]+)/)[1];\n }\n },\n\n // returns a string representing current node structure\n repr: function () {\n return (\n this.name() +\n \"(\" +\n _.map(this.args(), function (arg) {\n return _.isString(arg) ? arg : arg.repr();\n }).join(\",\") +\n \")\"\n );\n },\n\n // removes all negative signs\n strip: function () {\n return this.recurse(\"strip\");\n },\n\n // canonically reorders all commutative elements\n normalize: function () {\n return this.recurse(\"normalize\");\n },\n\n // expands the expression\n expand: function () {\n return this.recurse(\"expand\");\n },\n\n // naively factors out like terms\n factor: function (options) {\n return this.recurse(\"factor\", options);\n },\n\n // collect all like terms\n collect: function (options) {\n return this.recurse(\"collect\", options);\n },\n\n // strict syntactic equality check\n equals: function (other) {\n return this.normalize().print() === other.normalize().print();\n },\n\n // expand and collect until the expression no longer changes\n simplify: function (options) {\n options = _.extend(\n {\n once: false,\n },\n options,\n );\n\n // Attempt to factor and collect\n var step1 = this.factor(options);\n var step2 = step1.collect(options);\n\n // Rollback if collect didn't do anything\n if (step1.equals(step2)) {\n step2 = this.collect(options);\n }\n\n // Attempt to expand and collect\n var step3 = step2.expand(options);\n var step4 = step3.collect(options);\n\n // Rollback if collect didn't do anything\n if (step3.equals(step4)) {\n step4 = step2.collect(options);\n }\n\n // One round of simplification complete\n var simplified = step4;\n\n if (options.once || this.equals(simplified)) {\n return simplified;\n } else {\n return simplified.simplify(options);\n }\n },\n\n // check whether this expression is simplified\n isSimplified: function () {\n return this.equals(this.simplify());\n },\n\n // return the child nodes of this node\n exprArgs: function () {\n return _.filter(this.args(), function (arg) {\n return arg instanceof Expr;\n });\n },\n\n // return the variables (function and non) within the expression\n getVars: function (excludeFunc) {\n return _.uniq(\n _.flatten(_.invoke(this.exprArgs(), \"getVars\", excludeFunc)),\n ).sort();\n },\n\n getConsts: function () {\n return _.uniq(_.flatten(_.invoke(this.exprArgs(), \"getConsts\"))).sort();\n },\n\n getUnits: function () {\n return _.flatten(_.invoke(this.exprArgs(), \"getUnits\"));\n },\n\n // check whether this expression node is of a particular type\n is: function (func) {\n return this instanceof func;\n },\n\n // check whether this expression has a particular node type\n has: function (func) {\n if (this instanceof func) {\n return true;\n }\n return _.any(this.exprArgs(), function (arg) {\n return arg.has(func);\n });\n },\n\n // raise this expression to a given exponent\n // most useful for eventually implementing i^3 = -i, etc.\n raiseToThe: function (exp) {\n return new Pow(this, exp);\n },\n\n // does this expression have a specific rendering hint?\n // rendering hints are picked up while parsing, but are lost during transformations\n isSubtract: function () {\n return false;\n },\n isDivide: function () {\n return false;\n },\n isRoot: function () {\n return false;\n },\n\n // whether this node needs an explicit multiplication sign if following a Num\n needsExplicitMul: function () {\n return this.args()[0].needsExplicitMul();\n },\n\n // check that the variables in both expressions are the same\n sameVars: function (other) {\n var vars1 = this.getVars();\n var vars2 = other.getVars();\n\n // the other Expr can have more variables than this one\n // this lets you multiply equations by other variables\n var same = function (array1, array2) {\n return !_.difference(array1, array2).length;\n };\n\n var lower = function (array) {\n return _.uniq(_.invoke(array, \"toLowerCase\")).sort();\n };\n\n var equal = same(vars1, vars2);\n var equalIgnoringCase = same(lower(vars1), lower(vars2));\n\n return {equal: equal, equalIgnoringCase: equalIgnoringCase};\n },\n\n // semantic equality check, call after sameVars() to avoid potential false positives\n // plug in random numbers for the variables in both expressions\n // if they both consistently evaluate the same, then they're the same\n compare: function (other) {\n // equation comparisons are handled by Eq.compare()\n if (other instanceof Eq) {\n return false;\n }\n\n var varList = _.union(\n this.getVars(/* excludeFunc */ true),\n other.getVars(/* excludeFunc */ true),\n );\n\n // If the numbers are large we would like to do a relative comparison\n // rather than an absolute one, but if they're small enough then an\n // absolute comparison makes more sense\n var getDelta = function (num1, num2) {\n if (Math.abs(num1) < 1 || Math.abs(num2) < 1) {\n return Math.abs(num1 - num2);\n } else {\n return Math.abs(1 - num1 / num2);\n }\n };\n\n var equalNumbers = function (num1, num2) {\n var delta = getDelta(num1, num2);\n return (\n num1 === num2 /* needed if either is +/- Infinity */ ||\n (isNaN(num1) && isNaN(num2)) ||\n delta < Math.pow(10, -TOLERANCE)\n );\n };\n\n // if no variables, only need to evaluate once\n if (!varList.length && !this.has(Unit) && !other.has(Unit)) {\n return equalNumbers(this.eval(), other.eval());\n }\n\n // collect here to avoid sometimes dividing by zero, and sometimes not\n // it is better to be deterministic, e.g. x/x -> 1\n // TODO(alex): may want to keep track of assumptions as they're made\n var expr1 = this.collect();\n var expr2 = other.collect();\n\n var unitList1 = this.getUnits();\n var unitList2 = other.getUnits();\n\n if (!_.isEqual(unitList1, unitList2)) {\n return false;\n }\n\n // Compare at a set number (currently 12) of points to determine\n // equality.\n //\n // `range` (and `vars`) is the only variable that varies through the\n // iterations. For each of range = 10, 100, and 1000, each random\n // variable is picked from (-range, range).\n //\n // Note that because there are 12 iterations and three ranges, each\n // range is checked four times.\n for (var i = 0; i < ITERATIONS; i++) {\n var vars = {};\n\n // One third total iterations each with range 10, 100, and 1000\n var range = Math.pow(10, 1 + Math.floor((3 * i) / ITERATIONS));\n\n // Half of the iterations should only use integer values.\n // This is because expressions like (-2)^x are common but result\n // in NaN when evaluated in JS with non-integer values of x.\n // Without this, (-2)^x and (-2)^(x+1) both end up always being NaN\n // and thus equivalent. With this, the most common failure case is\n // avoided. However, less common cases such as (-2)^(x+0.1) and\n // (-2)^(x+1.1) will still both evaluate to NaN and result in a\n // false positive.\n //\n // Note that the above is only true in vanilla JS Number-land,\n // which has no concept of complex numbers. The solution is simple:\n // Integrate a library for handling complex numbers.\n //\n // TODO(alex): Add support for complex numbers, then remove this.\n var useFloats = i % 2 === 0;\n\n _.each(varList, function (v) {\n vars[v] = useFloats\n ? randomFloat(-range, range)\n : _.random(-range, range);\n });\n\n var equal;\n if (\n expr1.has(Func) ||\n expr2.has(Func) ||\n expr1.has(Unit) ||\n expr2.has(Unit)\n ) {\n var result1 = expr1.partialEval(vars);\n var result2 = expr2.partialEval(vars);\n\n equal = result1.simplify().equals(result2.simplify());\n } else {\n var result1 = expr1.eval(vars);\n var result2 = expr2.eval(vars);\n\n equal = equalNumbers(result1, result2);\n }\n\n if (!equal) {\n return false;\n }\n }\n\n return true;\n },\n\n // evaluate as much of the expression as possible\n partialEval: function (vars) {\n if (this instanceof Unit) {\n return this;\n } else if (!this.has(Func)) {\n return new Float(this.eval(vars).toFixed(TOLERANCE)).collect();\n } else if (this instanceof Func) {\n return new Func(this.symbol, this.arg.partialEval(vars));\n } else {\n return this.recurse(\"partialEval\", vars);\n }\n },\n\n // check that the structure of both expressions is the same\n // all negative signs are stripped and the expressions are converted to\n // a canonical commutative form\n // should only be done after compare() returns true to avoid false positives\n sameForm: function (other) {\n return this.strip().equals(other.strip());\n },\n\n // returns the GCD of this expression and the given factor\n findGCD: function (factor) {\n return this.equals(factor) ? factor : Num.One;\n },\n\n // return this expression's denominator\n getDenominator: function () {\n return Num.One;\n },\n\n // return this expression as a Mul\n asMul: function () {\n return new Mul(Num.One, this);\n },\n\n // TODO(alex): rename to isDefinitePositive or similar?\n // return whether this expression is 100% positive\n isPositive: abstract,\n\n // TODO(alex): rename to hasNegativeSign or similar?\n // return whether this expression has a negative sign\n isNegative: function () {\n return false;\n },\n\n // return a factor of this expression that is 100% positive\n asPositiveFactor: function () {\n return this.isPositive() ? this : Num.One;\n },\n\n // return a copy of the expression with a new hint set (preserves hints)\n addHint: function (hint) {\n if (!hint) {\n return this;\n }\n\n var expr = this.construct(this.args());\n expr.hints = _.clone(this.hints);\n expr.hints[hint] = true;\n return expr;\n },\n\n hints: {\n parens: false,\n },\n\n // currently unused!\n asExpr: function () {\n return this;\n },\n\n // complete parse by performing a few necessary transformations\n completeParse: function () {\n return this.recurse(\"completeParse\");\n },\n\n abs: abstract,\n\n negate: function () {\n return new Mul(Num.Neg, this);\n },\n});\n\n/* abstract sequence node */\nfunction Seq() {}\nSeq.prototype = new Expr();\n\n_.extend(Seq.prototype, {\n args: function () {\n return this.terms;\n },\n\n normalize: function () {\n var terms = _.sortBy(\n _.invoke(this.terms, \"normalize\"),\n function (term) {\n return term.print();\n },\n );\n\n return new this.func(terms);\n },\n\n expand: function () {\n return this.recurse(\"expand\").flatten();\n },\n\n // partition the sequence into its numeric and non-numeric parts\n // makes no guarantees about the validity of either part!\n partition: function () {\n var terms = _.groupBy(this.terms, function (term) {\n return term instanceof Num;\n });\n\n // XXX using a boolean as a key just converts it to a string. I don't\n // think this code was written with that in mind. Probably doesn't\n // matter except for readability.\n var numbers = terms[true] || [];\n var others = terms[false] || [];\n\n return [new this.func(numbers), new this.func(others)];\n },\n\n // ensure that sequences have 2+ terms and no nested sequences of the same type\n // this is a shallow flattening and will return a non-Seq if terms.length <= 1\n flatten: function () {\n var type = this;\n var terms = _.reject(this.terms, function (term) {\n return term.equals(type.identity);\n });\n\n if (terms.length === 0) {\n return type.identity;\n }\n if (terms.length === 1) {\n return terms[0];\n }\n\n var grouped = _.groupBy(terms, function (term) {\n return term instanceof type.func;\n });\n\n // same contains the children which are Seqs of the same type as this Seq\n var same = grouped[true] || [];\n var others = grouped[false] || [];\n\n var flattened = others.concat(\n _.flatten(_.pluck(same, \"terms\"), /* shallow: */ true),\n );\n return new type.func(flattened);\n },\n\n // the identity associated with the sequence\n identity: undefined,\n\n // reduce a numeric sequence to a Num\n reduce: abstract,\n\n isPositive: function () {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isPositive\"));\n },\n\n // return a new Seq with a given term replaced by a different term\n // (or array of terms). given term can be passed directly, or by index\n // if no new term is provided, the old one is simply removed\n replace: function (oldTerm, newTerm) {\n var index;\n\n if (oldTerm instanceof Expr) {\n index = _.indexOf(this.terms, oldTerm);\n } else {\n index = oldTerm;\n }\n\n var newTerms = [];\n if (_.isArray(newTerm)) {\n newTerms = newTerm;\n } else if (newTerm) {\n newTerms = [newTerm];\n }\n\n var terms = this.terms\n .slice(0, index)\n .concat(newTerms)\n .concat(this.terms.slice(index + 1));\n\n return new this.func(terms);\n },\n\n // syntactic sugar for replace()\n remove: function (term) {\n return this.replace(term);\n },\n\n getDenominator: function () {\n // TODO(alex): find and return LCM\n return new Mul(_.invoke(this.terms, \"getDenominator\")).flatten();\n },\n});\n\n/* sequence of additive terms */\nexport function Add() {\n if (arguments.length === 1) {\n this.terms = arguments[0];\n } else {\n this.terms = _.toArray(arguments);\n }\n}\nAdd.prototype = new Seq();\n\n_.extend(Add.prototype, {\n func: Add,\n\n eval: function (vars, options) {\n return _.reduce(\n this.terms,\n function (memo, term) {\n return memo + term.eval(vars, options);\n },\n 0,\n );\n },\n\n codegen: function () {\n return (\n _.map(this.terms, function (term) {\n return \"(\" + term.codegen() + \")\";\n }).join(\" + \") || \"0\"\n );\n },\n\n print: function () {\n return _.invoke(this.terms, \"print\").join(\"+\");\n },\n\n tex: function () {\n var tex = \"\";\n\n _.each(this.terms, function (term) {\n if (!tex || term.isSubtract()) {\n tex += term.tex();\n } else {\n tex += \"+\" + term.tex();\n }\n });\n\n return tex;\n },\n\n collect: function (options) {\n var terms = _.invoke(this.terms, \"collect\", options);\n\n // [Expr expr, Num coefficient]\n var pairs = [];\n\n _.each(terms, function (term) {\n if (term instanceof Mul) {\n var muls = term.partition();\n pairs.push([muls[1].flatten(), muls[0].reduce(options)]);\n } else if (term instanceof Num) {\n pairs.push([Num.One, term]);\n } else {\n pairs.push([term, Num.One]);\n }\n });\n\n // { (Expr expr).print(): [[Expr expr, Num coefficient]] }\n var grouped = _.groupBy(pairs, function (pair) {\n return pair[0].normalize().print();\n });\n\n var collected = _.compact(\n _.map(grouped, function (pairs) {\n var expr = pairs[0][0];\n var sum = new Add(_.zip.apply(_, pairs)[1]);\n var coefficient = sum.reduce(options);\n return new Mul(coefficient, expr).collect(options);\n }),\n );\n\n // TODO(alex): use the Pythagorean identity here\n // e.g. x*sin^2(y) + x*cos^2(y) -> x\n\n return new Add(collected).flatten();\n },\n\n // naively factor out anything that is common to all terms\n // if options.keepNegative is specified, won't factor out a common -1\n factor: function (options) {\n options = _.extend(\n {\n keepNegative: false,\n },\n options,\n );\n\n var terms = _.invoke(this.terms, \"collect\");\n var factors;\n\n if (terms[0] instanceof Mul) {\n factors = terms[0].terms;\n } else {\n factors = [terms[0]];\n }\n\n _.each(_.rest(this.terms), function (term) {\n factors = _.map(factors, function (factor) {\n return term.findGCD(factor);\n });\n });\n\n if (!options.keepNegative && this.isNegative()) {\n factors.push(Num.Neg);\n }\n\n factors = new Mul(factors).flatten().collect();\n\n var remainder = _.map(terms, function (term) {\n return Mul.handleDivide(term, factors).simplify();\n });\n remainder = new Add(remainder).flatten();\n\n return Mul.createOrAppend(factors, remainder).flatten();\n },\n\n reduce: function (options) {\n return _.reduce(\n this.terms,\n function (memo, term) {\n return memo.add(term, options);\n },\n this.identity,\n );\n },\n\n needsExplicitMul: function () {\n return false;\n },\n\n isNegative: function () {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isNegative\"));\n },\n\n negate: function () {\n return new Add(_.invoke(this.terms, \"negate\"));\n },\n});\n\n/* sequence of multiplicative terms */\nexport function Mul() {\n if (arguments.length === 1) {\n this.terms = arguments[0];\n } else {\n this.terms = _.toArray(arguments);\n }\n}\nMul.prototype = new Seq();\n\n_.extend(Mul.prototype, {\n func: Mul,\n\n eval: function (vars, options) {\n return _.reduce(\n this.terms,\n function (memo, term) {\n return memo * term.eval(vars, options);\n },\n 1,\n );\n },\n\n codegen: function () {\n return (\n _.map(this.terms, function (term) {\n return \"(\" + term.codegen() + \")\";\n }).join(\" * \") || \"0\"\n );\n },\n\n print: function () {\n return _.map(this.terms, function (term) {\n return term instanceof Add\n ? \"(\" + term.print() + \")\"\n : term.print();\n }).join(\"*\");\n },\n\n getUnits: function () {\n var tmUnits = _(this.terms)\n .chain()\n .map(function (term) {\n return term.getUnits();\n })\n .flatten()\n .value();\n\n tmUnits.sort((a, b) => a.unit.localeCompare(b.unit));\n\n return tmUnits;\n },\n\n // since we don't care about commutativity, we can render a Mul any way we choose\n // so we follow convention: first any negatives, then any numbers, then everything else\n tex: function () {\n var cdot = \" \\\\cdot \";\n\n var terms = _.groupBy(this.terms, function (term) {\n if (term.isDivide()) {\n return \"inverse\";\n } else if (term instanceof Num) {\n return \"number\";\n } else {\n return \"other\";\n }\n });\n\n var inverses = terms.inverse || [];\n var numbers = terms.number || [];\n var others = terms.other || [];\n\n var negatives = \"\";\n var numerator;\n\n // check all the numbers to see if there is a rational we can extract,\n // since we would like 1/2x/y to come out as \\frac{1}{2}\\frac{x}{y},\n // and not \\frac{1x}{2y}.\n for (var i = 0; i < numbers.length; i++) {\n var isRational =\n numbers[i] instanceof Rational && !(numbers[i] instanceof Int);\n if (isRational && others.length > 0 && inverses.length > 0) {\n var withThisRemoved = numbers.slice();\n withThisRemoved.splice(i, 1);\n var newTerms = withThisRemoved.concat(inverses).concat(others);\n return numbers[i].tex() + new Mul(newTerms).tex();\n }\n }\n\n numbers = _.compact(\n _.map(numbers, function (term) {\n var hasDenom =\n term instanceof Rational && !(term instanceof Int);\n var shouldPushDown =\n !term.hints.fraction || inverses.length > 0;\n if (hasDenom && shouldPushDown) {\n // e.g. 3x/4 -> 3/4*x (internally) -> 3x/4 (rendered)\n inverses.push(new Pow(new Int(term.d), Num.Div));\n var number = new Int(term.n);\n number.hints = term.hints;\n return _.any(term.hints) ? number : null;\n } else {\n return term;\n }\n }),\n );\n\n if (numbers.length === 0 && others.length === 1) {\n // e.g. (x+y)/z -> \\frac{x+y}{z}\n numerator = others[0].tex();\n } else {\n var tex = \"\";\n\n _.each(numbers, function (term) {\n if (term.hints.subtract && term.hints.entered) {\n negatives += \"-\";\n tex += (tex ? cdot : \"\") + term.abs().tex();\n } else if (\n term instanceof Int &&\n term.n === -1 &&\n (term.hints.negate || term.hints.subtract)\n ) {\n // e.g. -1*-1 -> --1\n // e.g. -1*x -> -x\n negatives += \"-\";\n } else {\n // e.g. 2*3 -> 2(dot)3\n tex += (tex ? cdot : \"\") + term.tex();\n }\n });\n\n _.each(others, function (term) {\n if (term.needsExplicitMul()) {\n // e.g. 2*2^3 -> 2(dot)2^3\n tex += (tex ? cdot : \"\") + term.tex();\n } else if (term instanceof Add) {\n // e.g. (a+b)*c -> (a+b)c\n tex += \"(\" + term.tex() + \")\";\n } else {\n // e.g. a*b*c -> abc\n tex += term.tex();\n }\n });\n\n numerator = tex ? tex : \"1\";\n }\n\n if (!inverses.length) {\n return negatives + numerator;\n } else {\n var denominator = new Mul(_.invoke(inverses, \"asDivide\"))\n .flatten()\n .tex();\n return negatives + \"\\\\frac{\" + numerator + \"}{\" + denominator + \"}\";\n }\n },\n\n strip: function () {\n var terms = _.map(this.terms, function (term) {\n return term instanceof Num ? term.abs() : term.strip();\n });\n return new Mul(terms).flatten();\n },\n\n // expand numerator and denominator separately\n expand: function () {\n var isAdd = function (term) {\n return term instanceof Add;\n };\n\n var isInverse = function (term) {\n return term instanceof Pow && term.exp.isNegative();\n };\n\n var isInverseAdd = function (term) {\n return isInverse(term) && isAdd(term.base);\n };\n\n var mul = this.recurse(\"expand\").flatten();\n\n var hasAdd = _.any(mul.terms, isAdd);\n var hasInverseAdd = _.any(mul.terms, isInverseAdd);\n\n if (!(hasAdd || hasInverseAdd)) {\n return mul;\n }\n\n var terms = _.groupBy(mul.terms, isInverse);\n var normals = terms[false] || [];\n var inverses = terms[true] || [];\n\n if (hasAdd) {\n var grouped = _.groupBy(normals, isAdd);\n var adds = grouped[true] || [];\n var others = grouped[false] || [];\n\n // loop over each additive sequence\n var expanded = _.reduce(\n adds,\n function (expanded, add) {\n // loop over each expanded array of terms\n return _.reduce(\n expanded,\n function (temp, array) {\n // loop over each additive sequence's terms\n return temp.concat(\n _.map(add.terms, function (term) {\n return array.concat(term);\n }),\n );\n },\n [],\n );\n },\n [[]],\n );\n\n // join each fully expanded array of factors with remaining multiplicative factors\n var muls = _.map(expanded, function (array) {\n return new Mul(others.concat(array)).flatten();\n });\n\n normals = [new Add(muls)];\n }\n\n if (hasInverseAdd) {\n var denominator = new Mul(\n _.invoke(inverses, \"getDenominator\"),\n ).flatten();\n inverses = [new Pow(denominator.expand(), Num.Div)];\n }\n\n return new Mul(normals.concat(inverses)).flatten();\n },\n\n factor: function (options) {\n var factored = this.recurse(\"factor\", options).flatten();\n if (!(factored instanceof Mul)) {\n return factored;\n }\n\n // Combine any factored out Rationals into one, but don't collect\n var grouped = _.groupBy(factored.terms, function (term) {\n return term instanceof Rational;\n });\n\n // Could also accomplish this by passing a new option\n // e.g. return memo.mul(term, {autocollect: false});\n // TODO(alex): Decide whether this is a good use of options or not\n var rational = _.reduce(\n grouped[true],\n function (memo, term) {\n return {n: memo.n * term.n, d: memo.d * term.d};\n },\n {n: 1, d: 1},\n );\n\n if (rational.d === 1) {\n rational = new Int(rational.n);\n } else {\n rational = new Rational(rational.n, rational.d);\n }\n\n return new Mul((grouped[false] || []).concat(rational)).flatten();\n },\n\n collect: function (options) {\n var partitioned = this.recurse(\"collect\", options).partition();\n var number = partitioned[0].reduce(options);\n\n // e.g. 0*x -> 0\n if (number.eval() === 0) {\n return Num.Zero;\n }\n\n var others = partitioned[1].flatten();\n\n // e.g. 2*2 -> 4\n // e.g. 2*2*x -> 4*x\n if (!(others instanceof Mul)) {\n return new Mul(number, others).flatten();\n }\n\n others = others.terms;\n\n // [Expr base, Expr exp]\n var pairs = [];\n\n _.each(others, function (term) {\n if (term instanceof Pow) {\n pairs.push([term.base, term.exp]);\n } else {\n pairs.push([term, Num.One]);\n }\n });\n\n // {(Expr base).print(): [[Expr base, Expr exp]]}\n var grouped = _.groupBy(pairs, function (pair) {\n return pair[0].normalize().print();\n });\n\n // [[Expr base, Expr exp]]\n var summed = _.compact(\n _.map(grouped, function (pairs) {\n var base = pairs[0][0];\n var sum = new Add(_.zip.apply(_, pairs)[1]);\n var exp = sum.collect(options);\n\n if (exp instanceof Num && exp.eval() === 0) {\n return null;\n } else {\n return [base, exp];\n }\n }),\n );\n\n // XXX `pairs` is shadowed four or five times in this function\n var pairs = _.groupBy(summed, function (pair) {\n if (pair[0] instanceof Trig && pair[0].isBasic()) {\n return \"trig\";\n } else if (pair[0] instanceof Log) {\n return \"log\";\n } else {\n return \"expr\";\n }\n });\n var trigs = pairs.trig || [];\n var logs = pairs.log || [];\n var exprs = pairs.expr || [];\n\n if (trigs.length > 1) {\n // combine sines and cosines into other trig functions\n\n // {Trig.arg.print(): [[Trig base, Expr exp]]}\n var byArg = _.groupBy(trigs, function (pair) {\n return pair[0].arg.normalize().print();\n });\n\n trigs = [];\n _.each(byArg, function (pairs) {\n var arg = pairs[0][0].arg;\n\n // {Trig.type: Expr exp}\n var funcs = {sin: Num.Zero, cos: Num.Zero};\n _.each(pairs, function (pair) {\n funcs[pair[0].type] = pair[1];\n });\n\n if (\n Mul.handleNegative(funcs.sin)\n .collect(options)\n .equals(funcs.cos)\n ) {\n // e.g. sin^x(y)/cos^x(y) -> tan^x(y)\n if (funcs.cos.isNegative()) {\n funcs = {tan: funcs.sin};\n } else {\n funcs = {cot: funcs.cos};\n }\n }\n\n // TODO(alex): combine even if exponents not a perfect match\n // TODO(alex): transform 1/sin and 1/cos into csc and sec\n\n _.each(funcs, function (exp, type) {\n trigs.push([new Trig(type, arg), exp]);\n });\n });\n }\n\n if (logs.length > 1) {\n // combine logs with the same base\n\n // {Log.base.print(): [[Log base, Expr exp]]}\n var byBase = _.groupBy(logs, function (pair) {\n return pair[0].base.normalize().print();\n });\n\n logs = [];\n\n _.each(byBase, function (pairs) {\n // only combine two logs of the same base, otherwise commutative\n // differences result in different equally valid output\n // e.g. ln(x)/ln(z)*ln(y) -> log_z(x)*ln(y)\n // e.g. ln(x)*ln(y)/ln(z) -> ln(x)*log_z(y)\n if (\n pairs.length === 2 &&\n Mul.handleNegative(pairs[0][1])\n .collect(options)\n .equals(pairs[1][1])\n ) {\n // e.g. ln(x)^y/ln(b)^y -> log_b(x)^y\n if (pairs[0][1].isNegative()) {\n logs.push([\n new Log(pairs[0][0].power, pairs[1][0].power),\n pairs[1][1],\n ]);\n } else {\n logs.push([\n new Log(pairs[1][0].power, pairs[0][0].power),\n pairs[0][1],\n ]);\n }\n } else {\n logs = logs.concat(pairs);\n }\n });\n\n // TODO(alex): combine if all inverses are the same e.g. ln(y)*ln(z)/ln(x)/ln(x)\n }\n\n pairs = trigs.concat(logs).concat(exprs);\n\n var collected = _.map(pairs, function (pair) {\n return new Pow(pair[0], pair[1]).collect(options);\n });\n\n return new Mul([number].concat(collected)).flatten();\n },\n\n isSubtract: function () {\n return _.any(this.terms, function (term) {\n return term instanceof Num && term.hints.subtract;\n });\n },\n\n // factor a single -1 in to the Mul\n // combine with a Num if all Nums are positive, else add as a term\n factorIn: function (hint) {\n var partitioned = this.partition();\n var numbers = partitioned[0].terms;\n var fold =\n numbers.length &&\n _.all(numbers, function (num) {\n return num.n > 0;\n });\n\n if (fold) {\n // e.g. - x*2*3 -> x*-2*3\n var num = numbers[0].negate();\n num.hints = numbers[0].hints;\n return this.replace(numbers[0], num.addHint(hint));\n } else {\n // e.g. - x*y -> -1*x*y\n // e.g. - x*-2 -> -1*x*-2\n return new Mul([Num.negativeOne(hint)].concat(this.terms));\n }\n },\n\n // factor out a single hinted -1 (assume it is the division hint)\n // TODO(alex): make more general or rename to be more specific\n factorOut: function () {\n var factored = false;\n var terms = _.compact(\n _.map(this.terms, function (term, i, list) {\n if (!factored && term instanceof Num && term.hints.divide) {\n factored = true;\n return term.n !== -1 ? term.negate() : null;\n } else {\n return term;\n }\n }),\n );\n\n if (terms.length === 1) {\n return terms[0];\n } else {\n return new Mul(terms);\n }\n },\n\n reduce: function (options) {\n return _.reduce(\n this.terms,\n function (memo, term) {\n return memo.mul(term, options);\n },\n this.identity,\n );\n },\n\n findGCD: function (factor) {\n return new Mul(_.invoke(this.terms, \"findGCD\", factor)).flatten();\n },\n\n asMul: function () {\n return this;\n },\n\n asPositiveFactor: function () {\n if (this.isPositive()) {\n return this;\n } else {\n var terms = _.invoke(this.collect().terms, \"asPositiveFactor\");\n return new Mul(terms).flatten();\n }\n },\n\n isNegative: function () {\n return _.any(_.invoke(this.collect().terms, \"isNegative\"));\n },\n\n fold: function () {\n return Mul.fold(this);\n },\n\n negate: function () {\n var isNum = function (expr) {\n return expr instanceof Num;\n };\n if (_.any(this.terms, isNum)) {\n var num = _.find(this.terms, isNum);\n return this.replace(num, num.negate());\n } else {\n return new Mul([Num.Neg].concat(this.terms));\n }\n },\n});\n\n// static methods for the sequence types\n_.each([Add, Mul], function (type) {\n _.extend(type, {\n // create a new sequence unless left is already one (returns a copy)\n createOrAppend: function (left, right) {\n if (left instanceof type) {\n return new type(left.terms.concat(right));\n } else {\n return new type(left, right);\n }\n },\n });\n});\n\n_.extend(Mul, {\n // negative signs should be folded into numbers whenever possible\n // never fold into a Num that's already negative or a Mul that has a negative Num\n // an optional hint is kept track of to properly render user input\n // an empty hint means negation\n handleNegative: function (expr, hint) {\n if (expr instanceof Num && expr.n > 0) {\n // e.g. - 2 -> -2\n var negated = expr.negate();\n // TODO(alex): rework hint system so that this isn't necessary\n negated.hints = expr.hints;\n return negated.addHint(hint);\n } else if (expr instanceof Mul) {\n // e.g. - x*2*3 -> x*-2*3\n // e.g. - x*y -> -1*x*y\n // e.g. - x*-2 -> -1*x*-2\n return expr.factorIn(hint);\n } else {\n // e.g. - x -> -1*x\n return new Mul(Num.negativeOne(hint), expr);\n }\n },\n\n // division can create either a Rational or a Mul\n handleDivide: function (left, right) {\n // dividing by a Mul is the same as repeated division by its terms\n if (right instanceof Mul) {\n var first = Mul.handleDivide(left, right.terms[0]);\n var rest = new Mul(_.rest(right.terms)).flatten();\n return Mul.handleDivide(first, rest);\n }\n\n var isInt = function (expr) {\n return expr instanceof Int;\n };\n var isRational = function (expr) {\n return expr instanceof Rational;\n };\n\n // for simplification purposes, fold Ints into Rationals if possible\n // e.g. 3x / 4 -> 3/4 * x (will still render as 3x/4)\n if (isInt(right) && left instanceof Mul && _.any(left.terms, isInt)) {\n // search from the right\n var reversed = left.terms.slice().reverse();\n var num = _.find(reversed, isRational);\n\n if (!isInt(num)) {\n return new Mul(\n left.terms.concat([\n new Rational(1, right.n).addHint(\"fraction\"),\n ]),\n );\n }\n\n var rational = new Rational(num.n, right.n);\n rational.hints = num.hints;\n\n // in the case of something like 1/3 * 6/8, we want the\n // 6/8 to be considered a fraction, not just a division\n if (num === reversed[0]) {\n rational = rational.addHint(\"fraction\");\n }\n\n var result;\n if (num.n < 0 && right.n < 0) {\n rational.d = -rational.d;\n return left.replace(num, [Num.Neg, rational]);\n } else {\n return left.replace(num, rational);\n }\n }\n\n var divide = function (a, b) {\n if (b instanceof Int) {\n if (a instanceof Int) {\n if (a.n < 0 && b.n < 0) {\n // e.g. -2 / -3 -> -1*-2/3\n return [\n Num.Neg,\n new Rational(a.n, -b.n).addHint(\"fraction\"),\n ];\n } else {\n // e.g. 2 / 3 -> 2/3\n // e.g. -2 / 3 -> -2/3\n // e.g. 2 / -3 -> -2/3\n return [new Rational(a.n, b.n).addHint(\"fraction\")];\n }\n } else {\n // e.g. x / 3 -> x*1/3\n // e.g. x / -3 -> x*-1/3\n var inverse = new Rational(1, b.eval());\n if (b.eval() < 0) {\n return [a, inverse.addHint(\"negate\")];\n } else {\n return [a, inverse];\n }\n }\n } else {\n var pow;\n\n if (b instanceof Trig && b.exp) {\n // e.g. sin^2(x) -> sin(x)^2\n var exp = b.exp;\n b.exp = undefined;\n b = new Pow(b, exp);\n }\n\n if (b instanceof Pow) {\n // e.g. (x^2) ^ -1 -> x^-2\n // e.g. (x^y) ^ -1 -> x^(-1*y)\n // e.g. (x^(yz)) ^ -1 -> x^(-1*y*z)\n pow = new Pow(b.base, Mul.handleNegative(b.exp, \"divide\"));\n } else {\n // e.g. x ^ -1 -> x^-1\n pow = new Pow(b, Num.Div);\n }\n\n if (a instanceof Int && a.n === 1) {\n // e.g. 1 / x -> x^-1\n return [pow];\n } else {\n // e.g. 2 / x -> 2*x^-1\n return [a, pow];\n }\n }\n };\n\n if (left instanceof Mul) {\n var divided = divide(_.last(left.terms), right);\n return new Mul(_.initial(left.terms).concat(divided));\n } else {\n var divided = divide(left, right);\n return new Mul(divided).flatten();\n }\n },\n\n // fold negative signs into numbers if possible\n // negative signs are not the same as multiplying by negative one!\n // e.g. -x -> -1*x simplified\n // e.g. -2*x -> -2*x simplified\n // e.g. -x*2 -> -1*x*2 not simplified -> x*-2 simplified\n // e.g. -1*x*2 -> -1*x*2 not simplified\n\n // also fold multiplicative terms into open Trig and Log nodes\n // e.g. (sin x)*x -> sin(x)*x\n // e.g. sin(x)*x -> sin(x)*x\n // e.g. sin(x)*(x) -> sin(x)*x\n // e.g. sin(x)*sin(y) -> sin(x)*sin(y)\n fold: function (expr) {\n if (expr instanceof Mul) {\n // assuming that this will be second to last\n var trigLog = _.find(_.initial(expr.terms), function (term) {\n return (\n (term instanceof Trig || term instanceof Log) &&\n term.hints.open\n );\n });\n var index = _.indexOf(expr.terms, trigLog);\n\n if (trigLog) {\n var last = _.last(expr.terms);\n if (\n trigLog.hints.parens ||\n last.hints.parens ||\n last.has(Trig) ||\n last.has(Log)\n ) {\n trigLog.hints.open = false;\n } else {\n var newTrigLog;\n if (trigLog instanceof Trig) {\n newTrigLog = Trig.create(\n [trigLog.type, trigLog.exp],\n Mul.createOrAppend(trigLog.arg, last).fold(),\n );\n } else {\n newTrigLog = Log.create(\n trigLog.base,\n Mul.createOrAppend(trigLog.power, last).fold(),\n );\n }\n\n if (index === 0) {\n return newTrigLog;\n } else {\n return new Mul(\n expr.terms.slice(0, index).concat(newTrigLog),\n ).fold();\n }\n }\n }\n\n var partitioned = expr.partition();\n var numbers = partitioned[0].terms;\n\n var pos = function (num) {\n return num.n > 0;\n };\n var neg = function (num) {\n return num.n === -1 && num.hints.negate;\n };\n var posOrNeg = function (num) {\n return pos(num) || neg(num);\n };\n\n if (\n numbers.length > 1 &&\n _.some(numbers, neg) &&\n _.some(numbers, pos) &&\n _.every(numbers, posOrNeg)\n ) {\n var firstNeg = _.indexOf(expr.terms, _.find(expr.terms, neg));\n var firstNum = _.indexOf(expr.terms, _.find(expr.terms, pos));\n\n // e.g. -x*2 -> x*-2\n if (firstNeg < firstNum) {\n return expr\n .replace(firstNum, expr.terms[firstNum].negate())\n .remove(firstNeg);\n }\n }\n }\n\n // in all other cases, make no change\n return expr;\n },\n});\n\n/* exponentiation */\nexport function Pow(base, exp) {\n this.base = base;\n this.exp = exp;\n}\nPow.prototype = new Expr();\n\n_.extend(Pow.prototype, {\n func: Pow,\n args: function () {\n return [this.base, this.exp];\n },\n\n eval: function (vars, options) {\n var evaledBase = this.base.eval(vars, options);\n var evaledExp = this.exp.eval(vars, options);\n\n // Math.pow unequivocally returns NaN when provided with both a\n // negative base and a fractional exponent. However, in some cases, we\n // know that our exponent is actually valid for use with negative\n // bases (e.g., (-5)^(1/3)).\n //\n // Here, we explicitly check for such cases. We really only handle a\n // limited subset (by requiring that the exponent is rational with an\n // odd denominator), but it's still useful.\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n if (evaledBase < 0) {\n var simplifiedExp = this.exp.simplify();\n\n // If Float, convert to a Rational to enable the logic below\n if (simplifiedExp instanceof Float) {\n var num = simplifiedExp.n;\n var decimals = (num - num.toFixed()).toString().length - 2;\n var denominator = Math.pow(10, decimals);\n var rationalExp = new Rational(num * denominator, denominator);\n simplifiedExp = rationalExp.simplify();\n }\n if (simplifiedExp instanceof Rational) {\n var oddDenominator = Math.abs(simplifiedExp.d) % 2 === 1;\n if (oddDenominator) {\n var oddNumerator = Math.abs(simplifiedExp.n) % 2 === 1;\n var sign = oddNumerator ? -1 : 1;\n return sign * Math.pow(-1 * evaledBase, evaledExp);\n }\n }\n }\n return Math.pow(evaledBase, evaledExp);\n },\n\n getUnits: function () {\n return this.base.getUnits().map(\n function (unit) {\n return {\n unit: unit.unit,\n pow: unit.pow * this.exp.n,\n };\n }.bind(this),\n );\n },\n\n codegen: function () {\n return (\n \"Math.pow(\" + this.base.codegen() + \", \" + this.exp.codegen() + \")\"\n );\n },\n\n print: function () {\n var base = this.base.print();\n if (this.base instanceof Seq || this.base instanceof Pow) {\n base = \"(\" + base + \")\";\n }\n return base + \"^(\" + this.exp.print() + \")\";\n },\n\n tex: function () {\n if (this.isDivide()) {\n // e.g. x ^ -1 w/hint -> 1/x\n return \"\\\\frac{1}{\" + this.asDivide().tex() + \"}\";\n } else if (this.isRoot()) {\n if (this.exp.n !== 1) {\n error(\n \"Node marked with hint 'root' does not have exponent \" +\n \"of form 1/x.\",\n );\n }\n\n if (this.exp.d === 2) {\n // e.g. x ^ 1/2 w/hint -> sqrt{x}\n return \"\\\\sqrt{\" + this.base.tex() + \"}\";\n } else {\n // e.g. x ^ 1/y w/hint -> sqrt[y]{x}\n return \"\\\\sqrt[\" + this.exp.d + \"]{\" + this.base.tex() + \"}\";\n }\n } else if (\n this.base instanceof Trig &&\n !this.base.isInverse() &&\n this.exp instanceof Num &&\n this.exp.isSimple() &&\n this.exp.eval() >= 0\n ) {\n // e.g sin(x) ^ 2 -> sin^2(x)\n var split = this.base.tex({split: true});\n return split[0] + \"^{\" + this.exp.tex() + \"}\" + split[1];\n } else {\n // e.g. x ^ y -> x^y\n var base = this.base.tex();\n if (\n this.base instanceof Seq ||\n this.base instanceof Pow ||\n (this.base instanceof Num && !this.base.isSimple())\n ) {\n // e.g. a+b ^ c -> (a+b)^c\n base = \"(\" + base + \")\";\n } else if (this.base instanceof Trig || this.base instanceof Log) {\n // e.g. ln(x) ^ 2 -> [ln(x)]^2\n base = \"[\" + base + \"]\";\n }\n return base + \"^{\" + this.exp.tex() + \"}\";\n }\n },\n\n needsExplicitMul: function () {\n return this.isRoot() ? false : this.base.needsExplicitMul();\n },\n\n expand: function () {\n var pow = this.recurse(\"expand\");\n\n if (pow.base instanceof Mul) {\n // e.g. (ab)^c -> a^c*b^c\n\n var terms = _.map(pow.base.terms, function (term) {\n return new Pow(term, pow.exp);\n });\n\n return new Mul(terms).expand();\n } else if (\n pow.base instanceof Add &&\n pow.exp instanceof Int &&\n pow.exp.abs().eval() > 1\n ) {\n // e.g. (a+b)^2 -> a*a+a*b+a*b+b*b\n // e.g. (a+b)^-2 -> (a*a+a*b+a*b+b*b)^-1\n\n var positive = pow.exp.eval() > 0;\n var n = pow.exp.abs().eval();\n\n var signed = function (mul) {\n return positive ? mul : new Pow(mul, Num.Div);\n };\n\n // compute and cache powers of 2 up to n\n var cache = {1: pow.base};\n for (var i = 2; i <= n; i *= 2) {\n var mul = new Mul(cache[i / 2], cache[i / 2]);\n cache[i] = mul.expand().collect();\n }\n\n // if n is a power of 2, you're done!\n if (_.has(cache, n)) {\n return signed(cache[n]);\n }\n\n // otherwise decompose n into powers of 2 ...\n var indices = _.map(\n n.toString(2).split(\"\"),\n function (str, i, list) {\n return Number(str) * Math.pow(2, list.length - i - 1);\n },\n );\n indices = _.without(indices, 0);\n\n // ... then combine\n var mul = new Mul(_.pick(cache, indices)).expand().collect();\n return signed(mul);\n } else if (pow.exp instanceof Add) {\n // DEFINITELY want behind super-simplify() flag\n // e.g. x^(a+b) -> x^a*x^b\n\n var terms = _.map(pow.exp.terms, function (term) {\n return new Pow(pow.base, term).expand();\n });\n\n return new Mul(terms).expand();\n } else {\n return pow;\n }\n },\n\n factor: function () {\n var pow = this.recurse(\"factor\");\n if (pow.base instanceof Mul) {\n var terms = _.map(pow.base.terms, function (term) {\n if (term instanceof Int && pow.exp.equals(Num.Div)) {\n // Anything that can be a Rational should be a Rational\n // e.g. 2^(-1) -> 1/2\n return new Rational(1, term.n);\n } else {\n return new Pow(term, pow.exp);\n }\n });\n return new Mul(terms);\n } else {\n return pow;\n }\n },\n\n collect: function (options) {\n if (this.base instanceof Pow) {\n // collect this first to avoid having to deal with float precision\n // e.g. sqrt(2)^2 -> 2, not 2.0000000000000004\n // e.g. (x^y)^z -> x^(yz)\n var base = this.base.base;\n var exp = Mul.createOrAppend(this.base.exp, this.exp);\n return new Pow(base, exp).collect(options);\n }\n\n var pow = this.recurse(\"collect\", options);\n\n var isSimilarLog = function (term) {\n return term instanceof Log && term.base.equals(pow.base);\n };\n\n if (pow.exp instanceof Num && pow.exp.eval() === 0) {\n // e.g. x^0 -> 1\n return Num.One;\n } else if (pow.exp instanceof Num && pow.exp.eval() === 1) {\n // e.g. x^1 -> x\n return pow.base;\n } else if (isSimilarLog(pow.exp)) {\n // e.g. b^(log_b(x)) -> x\n return pow.exp.power;\n } else if (\n pow.exp instanceof Mul &&\n _.any(pow.exp.terms, isSimilarLog)\n ) {\n // e.g. b^(2*y*log_b(x)) -> x^(2*y)\n var log = _.find(pow.exp.terms, isSimilarLog);\n var base = log.power;\n var exp = pow.exp.remove(log).flatten();\n return new Pow(base, exp).collect(options);\n } else if (pow.base instanceof Num && pow.exp instanceof Num) {\n // TODO(alex): Consider encapsualting this logic (and similar logic\n // elsewhere) into a separate Decimal class for user-entered floats\n if (options && options.preciseFloats) {\n // Avoid creating an imprecise float\n // e.g. 23^1.5 -> 12167^0.5, not ~110.304\n\n // If you take the root as specified by the denominator and\n // end up with more digits after the decimal point,\n // the result is imprecise. This works for rationals as well\n // as floats, but ideally rationals should be pre-processed\n // e.g. (1/27)^(1/3) -> 1/3 to avoid most cases.\n // TODO(alex): Catch such cases and avoid converting to floats.\n var exp = pow.exp.asRational();\n var decimalsInBase = pow.base.getDecimalPlaces();\n var root = new Pow(pow.base, new Rational(1, exp.d));\n var decimalsInRoot = root.collect().getDecimalPlaces();\n\n if (decimalsInRoot > decimalsInBase) {\n // Collecting over this denominator would result in an\n // imprecise float, so avoid doing so.\n var newBase = new Pow(pow.base, new Int(exp.n)).collect();\n return new Pow(newBase, new Rational(1, exp.d));\n }\n }\n\n // e.g. 4^1.5 -> 8\n return pow.base.raiseToThe(pow.exp, options);\n } else {\n return pow;\n }\n },\n\n // checks whether this Pow represents user-entered division\n isDivide: function () {\n var isDiv = function (arg) {\n return arg instanceof Num && arg.hints.divide;\n };\n return (\n isDiv(this.exp) ||\n (this.exp instanceof Mul && _.any(this.exp.terms, isDiv))\n );\n },\n\n // assuming this Pow represents user-entered division, returns the denominator\n asDivide: function () {\n if (this.exp instanceof Num) {\n if (this.exp.eval() === -1) {\n return this.base;\n } else {\n var negated = this.exp.negate();\n negated.hints = _.clone(this.exp.hints);\n negated.hints.divide = false;\n return new Pow(this.base, negated);\n }\n } else if (this.exp instanceof Mul) {\n return new Pow(this.base, this.exp.factorOut());\n } else {\n error(\"called asDivide() on an Expr that wasn't a Num or Mul\");\n }\n },\n\n isRoot: function () {\n return this.exp instanceof Rational && this.exp.hints.root;\n },\n\n isSquaredTrig: function () {\n return (\n this.base instanceof Trig &&\n !this.base.isInverse() &&\n this.exp instanceof Num &&\n this.exp.eval() === 2\n );\n },\n\n // extract whatever denominator makes sense, ignoring hints\n // if negative exponent, will recursively include the base's denominator as well\n getDenominator: function () {\n if (this.exp instanceof Num && this.exp.eval() === -1) {\n return Mul.createOrAppend(\n this.base,\n this.base.getDenominator(),\n ).flatten();\n } else if (this.exp.isNegative()) {\n var pow = new Pow(\n this.base,\n Mul.handleNegative(this.exp).collect(),\n );\n return Mul.createOrAppend(\n pow,\n pow.collect().getDenominator(),\n ).flatten();\n } else if (this.base instanceof Num) {\n return new Pow(this.base.getDenominator(), this.exp).collect();\n } else {\n return Num.One;\n }\n },\n\n findGCD: function (factor) {\n var base, exp;\n if (factor instanceof Pow) {\n base = factor.base;\n exp = factor.exp;\n } else {\n base = factor;\n exp = Num.One;\n }\n\n // GCD is only relevant if same base\n if (this.base.equals(base)) {\n if (this.exp.equals(exp)) {\n // exact match\n // e.g. GCD(x^y^z, x^y^z) -> x^y^z\n return this;\n } else if (this.exp instanceof Num && exp instanceof Num) {\n // two numerical exponents\n // e.g. GCD(x^3, x^2) -> x^2\n return new Pow(this.base, Num.min(this.exp, exp)).collect();\n } else if (this.exp instanceof Num || exp instanceof Num) {\n // one numerical exponent\n // e.g. GCD(x^2, x^y) -> 1\n return Num.One;\n }\n\n var expA = this.exp.asMul().partition();\n var expB = exp.asMul().partition();\n\n if (expA[1].equals(expB[1])) {\n // exponents match except for coefficient\n // e.g. GCD(x^3y, x^y) -> x^y\n var coefficient = Num.min(expA[0].reduce(), expB[0].reduce());\n var mul = new Mul(coefficient, expA[1].flatten()).flatten();\n return new Pow(base, mul).collect();\n }\n }\n\n return Num.One;\n },\n\n isPositive: function () {\n if (this.base.isPositive()) {\n return true;\n }\n\n var exp = this.exp.simplify();\n return exp instanceof Int && exp.eval() % 2 === 0;\n },\n\n asPositiveFactor: function () {\n if (this.isPositive()) {\n return this;\n } else {\n var exp = this.exp.simplify();\n if (exp instanceof Int) {\n var n = exp.eval();\n if (n > 2) {\n // e.g. x^3 -> x^2\n return new Pow(this.base, new Int(n - 1));\n } else if (n < -2) {\n // e.g. x^-3 -> x^-2\n return new Pow(this.base, new Int(n + 1));\n }\n }\n return Num.One;\n }\n },\n});\n\n_.extend(Pow, {\n sqrt: function (arg) {\n return new Pow(arg, Num.Sqrt);\n },\n\n nthroot: function (radicand, degree) {\n var exp = Mul.fold(Mul.handleDivide(new Int(1), degree));\n\n // FIXME(johnsullivan): If oneOverDegree ends up being a pow object,\n // this \"root\" hint is lost between here and when tex() is called.\n return new Pow(radicand, exp.addHint(\"root\"));\n },\n});\n\n/* logarithm */\nexport function Log(base, power) {\n this.base = base;\n this.power = power;\n}\nLog.prototype = new Expr();\n\n_.extend(Log.prototype, {\n func: Log,\n args: function () {\n return [this.base, this.power];\n },\n\n eval: function (vars, options) {\n return (\n Math.log(this.power.eval(vars, options)) /\n Math.log(this.base.eval(vars, options))\n );\n },\n\n codegen: function () {\n return (\n \"(Math.log(\" +\n this.power.codegen() +\n \") / Math.log(\" +\n this.base.codegen() +\n \"))\"\n );\n },\n\n print: function () {\n var power = \"(\" + this.power.print() + \")\";\n if (this.isNatural()) {\n return \"ln\" + power;\n } else {\n return \"log_(\" + this.base.print() + \") \" + power;\n }\n },\n\n tex: function () {\n var power = \"(\" + this.power.tex() + \")\";\n if (this.isNatural()) {\n return \"\\\\ln\" + power;\n } else {\n return \"\\\\log_{\" + this.base.tex() + \"}\" + power;\n }\n },\n\n collect: function (options) {\n var log = this.recurse(\"collect\", options);\n\n if (log.power instanceof Num && log.power.eval() === 1) {\n // e.g. ln(1) -> 0\n return Num.Zero;\n } else if (log.base.equals(log.power)) {\n // e.g. log_b(b) -> 1\n return Num.One;\n } else if (\n log.power instanceof Pow &&\n log.power.base.equals(log.base)\n ) {\n // e.g. log_b(b^x) -> x\n return log.power.exp;\n } else {\n return log;\n }\n },\n\n expand: function () {\n var log = this.recurse(\"expand\");\n\n if (log.power instanceof Mul) {\n // might want behind super-simplify() flag\n // e.g. ln(xy) -> ln(x) + ln(y)\n\n var terms = _.map(log.power.terms, function (term) {\n // need to expand again in case new log powers are Pows\n return new Log(log.base, term).expand();\n });\n\n return new Add(terms);\n } else if (log.power instanceof Pow) {\n // e.g. ln(x^y) -> y*ln(x)\n\n return new Mul(\n log.power.exp,\n new Log(log.base, log.power.base).expand(),\n ).flatten();\n } else if (!log.isNatural()) {\n // e.g. log_b(x) -> ln(x)/ln(b)\n\n return Mul.handleDivide(\n new Log(Const.e, log.power),\n new Log(Const.e, log.base),\n );\n } else {\n return log;\n }\n },\n\n hints: _.extend(Log.prototype.hints, {\n open: false,\n }),\n\n isPositive: function () {\n var log = this.collect();\n\n if (log.base instanceof Num && log.power instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n },\n\n needsExplicitMul: function () {\n return false;\n },\n\n isNatural: function () {\n return this.base.equals(Const.e);\n },\n});\n\n_.extend(Log, {\n natural: function () {\n return Const.e;\n },\n common: function () {\n return Num.Ten;\n },\n\n create: function (base, power) {\n var log = new Log(base, power);\n if (!power.hints.parens) {\n log = log.addHint(\"open\");\n }\n return log;\n },\n});\n\n/* trigonometric functions */\nexport function Trig(type, arg) {\n this.type = type;\n this.arg = arg;\n}\nTrig.prototype = new Expr();\n\n_.extend(Trig.prototype, {\n func: Trig,\n args: function () {\n return [this.type, this.arg];\n },\n\n functions: {\n sin: {\n eval: Math.sin,\n codegen: \"Math.sin((\",\n tex: \"\\\\sin\",\n expand: function () {\n return this;\n },\n },\n cos: {\n eval: Math.cos,\n codegen: \"Math.cos((\",\n tex: \"\\\\cos\",\n expand: function () {\n return this;\n },\n },\n tan: {\n eval: Math.tan,\n codegen: \"Math.tan((\",\n tex: \"\\\\tan\",\n expand: function () {\n return Mul.handleDivide(Trig.sin(this.arg), Trig.cos(this.arg));\n },\n },\n csc: {\n eval: function (arg) {\n return 1 / Math.sin(arg);\n },\n codegen: \"(1/Math.sin(\",\n tex: \"\\\\csc\",\n expand: function () {\n return Mul.handleDivide(Num.One, Trig.sin(this.arg));\n },\n },\n sec: {\n eval: function (arg) {\n return 1 / Math.cos(arg);\n },\n codegen: \"(1/Math.cos(\",\n tex: \"\\\\sec\",\n expand: function () {\n return Mul.handleDivide(Num.One, Trig.cos(this.arg));\n },\n },\n cot: {\n eval: function (arg) {\n return 1 / Math.tan(arg);\n },\n codegen: \"(1/Math.tan(\",\n tex: \"\\\\cot\",\n expand: function () {\n return Mul.handleDivide(Trig.cos(this.arg), Trig.sin(this.arg));\n },\n },\n arcsin: {\n eval: Math.asin,\n codegen: \"Math.asin((\",\n tex: \"\\\\arcsin\",\n },\n arccos: {\n eval: Math.acos,\n codegen: \"Math.acos((\",\n tex: \"\\\\arccos\",\n },\n arctan: {\n eval: Math.atan,\n codegen: \"Math.atan((\",\n tex: \"\\\\arctan\",\n },\n arccsc: {\n eval: function (arg) {\n return Math.asin(1 / arg);\n },\n codegen: \"Math.asin(1/(\",\n tex: \"\\\\operatorname{arccsc}\",\n },\n arcsec: {\n eval: function (arg) {\n return Math.acos(1 / arg);\n },\n codegen: \"Math.acos(1/(\",\n tex: \"\\\\operatorname{arcsec}\",\n },\n arccot: {\n eval: function (arg) {\n return Math.atan(1 / arg);\n },\n codegen: \"Math.atan(1/(\",\n tex: \"\\\\operatorname{arccot}\",\n },\n sinh: {\n eval: function (arg) {\n return (Math.exp(arg) - Math.exp(-arg)) / 2;\n },\n codegen: function (argStr) {\n return (\n \"((Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\sinh\",\n expand: function () {\n return this;\n },\n },\n cosh: {\n eval: function (arg) {\n return (Math.exp(arg) + Math.exp(-arg)) / 2;\n },\n codegen: function (argStr) {\n return (\n \"((Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\cosh\",\n expand: function () {\n return this;\n },\n },\n tanh: {\n eval: function (arg) {\n return (\n (Math.exp(arg) - Math.exp(-arg)) /\n (Math.exp(arg) + Math.exp(-arg))\n );\n },\n codegen: function (argStr) {\n return (\n \"(\" +\n \"(Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \")))\" +\n \" / \" +\n \"(Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \")))\" +\n \")\"\n );\n },\n tex: \"\\\\tanh\",\n expand: function () {\n return Mul.handleDivide(\n Trig.sinh(this.arg),\n Trig.cosh(this.arg),\n );\n },\n },\n csch: {\n eval: function (arg) {\n return 2 / (Math.exp(arg) - Math.exp(-arg));\n },\n codegen: function (argStr) {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\csch\",\n expand: function () {\n return Mul.handleDivide(Num.One, Trig.sinh(this.arg));\n },\n },\n sech: {\n eval: function (arg) {\n return 2 / (Math.exp(arg) + Math.exp(-arg));\n },\n codegen: function (argStr) {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\sech\",\n expand: function () {\n return Mul.handleDivide(Num.One, Trig.cosh(this.arg));\n },\n },\n coth: {\n eval: function (arg) {\n return (\n (Math.exp(arg) + Math.exp(-arg)) /\n (Math.exp(arg) - Math.exp(-arg))\n );\n },\n codegen: function (argStr) {\n return (\n \"(\" +\n \"(Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \")))\" +\n \" / \" +\n \"(Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \")))\" +\n \")\"\n );\n },\n tex: \"\\\\coth\",\n expand: function () {\n return Mul.handleDivide(\n Trig.cosh(this.arg),\n Trig.sinh(this.arg),\n );\n },\n },\n },\n\n isEven: function () {\n return _.contains([\"cos\", \"sec\"], this.type);\n },\n\n isInverse: function () {\n return this.type.indexOf(\"arc\") === 0;\n },\n\n isBasic: function () {\n return _.contains([\"sin\", \"cos\"], this.type);\n },\n\n eval: function (vars, options) {\n var func = this.functions[this.type].eval;\n var arg = this.arg.eval(vars, options);\n return func(arg);\n },\n\n codegen: function () {\n var func = this.functions[this.type].codegen;\n if (typeof func === \"function\") {\n return func(this.arg.codegen());\n } else if (typeof func === \"string\") {\n return func + this.arg.codegen() + \"))\";\n } else {\n throw new Error(\"codegen not implemented for \" + this.type);\n }\n },\n\n print: function () {\n return this.type + \"(\" + this.arg.print() + \")\";\n },\n\n tex: function (options) {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return options && options.split ? [func, arg] : func + arg;\n },\n\n hints: _.extend(Trig.prototype.hints, {\n open: false,\n }),\n\n isPositive: function () {\n var trig = this.collect();\n\n if (trig.arg instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n },\n\n completeParse: function () {\n if (this.exp) {\n var pow = new Pow(this, this.exp);\n this.exp = undefined;\n return pow;\n } else {\n return this;\n }\n },\n\n // TODO(alex): does every new node type need to redefine these?\n needsExplicitMul: function () {\n return false;\n },\n\n expand: function () {\n var trig = this.recurse(\"expand\");\n if (!trig.isInverse()) {\n // e.g. tan(x) -> sin(x)/cos(x)\n var expand = trig.functions[trig.type].expand;\n return _.bind(expand, trig)();\n } else {\n return trig;\n }\n },\n\n collect: function (options) {\n var trig = this.recurse(\"collect\", options);\n if (!trig.isInverse() && trig.arg.isNegative()) {\n var arg;\n if (trig.arg instanceof Num) {\n arg = trig.arg.abs();\n } else {\n arg = Mul.handleDivide(trig.arg, Num.Neg).collect(options);\n }\n\n if (trig.isEven()) {\n // e.g. cos(-x) -> cos(x)\n return new Trig(trig.type, arg);\n } else {\n // e.g. sin(-x) -> -sin(x)\n return new Mul(Num.Neg, new Trig(trig.type, arg));\n }\n } else {\n return trig;\n }\n },\n});\n\n_.extend(Trig, {\n create: function (pair, arg) {\n var type = pair[0];\n var exp = pair[1];\n\n if (exp && exp.equals(Num.Neg)) {\n // e.g. sin^-1(x) -> arcsin(x)\n type = \"arc\" + type;\n exp = undefined;\n }\n\n var trig = new Trig(type, arg);\n if (!arg.hints.parens) {\n trig = trig.addHint(\"open\");\n }\n\n if (exp) {\n trig.exp = exp;\n }\n\n return trig;\n },\n\n sin: function (arg) {\n return new Trig(\"sin\", arg);\n },\n\n cos: function (arg) {\n return new Trig(\"cos\", arg);\n },\n\n sinh: function (arg) {\n return new Trig(\"sinh\", arg);\n },\n\n cosh: function (arg) {\n return new Trig(\"cosh\", arg);\n },\n});\n\nexport function Abs(arg) {\n this.arg = arg;\n}\nAbs.prototype = new Expr();\n\n_.extend(Abs.prototype, {\n func: Abs,\n args: function () {\n return [this.arg];\n },\n eval: function (vars, options) {\n return Math.abs(this.arg.eval(vars, options));\n },\n codegen: function () {\n return \"Math.abs(\" + this.arg.codegen() + \")\";\n },\n print: function () {\n return \"abs(\" + this.arg.print() + \")\";\n },\n\n tex: function () {\n return \"\\\\left|\" + this.arg.tex() + \"\\\\right|\";\n },\n\n collect: function (options) {\n var abs = this.recurse(\"collect\", options);\n\n if (abs.arg.isPositive()) {\n // e.g. |2^x| -> 2^x\n return abs.arg;\n } else if (abs.arg instanceof Num) {\n // e.g. |-2| -> 2\n return abs.arg.abs();\n } else if (abs.arg instanceof Mul) {\n // e.g. |-2*pi*x| -> 2*pi*|x|\n var terms = _.groupBy(abs.arg.terms, function (term) {\n if (term.isPositive()) {\n return \"positive\";\n } else if (term instanceof Num) {\n return \"number\";\n } else {\n return \"other\";\n }\n });\n\n var positives = terms.positive.concat(\n _.invoke(terms.number, \"abs\"),\n );\n\n if (terms.other.length) {\n positives.push(new Abs(new Mul(terms.other).flatten()));\n }\n\n return new Mul(positives).flatten();\n } else {\n return abs;\n }\n },\n\n // this should definitely be behind a super-simplify flag\n expand: function () {\n var abs = this.recurse(\"expand\");\n\n if (abs.arg instanceof Mul) {\n // e.g. |xyz| -> |x|*|y|*|z|\n var terms = _.map(abs.arg.terms, function (term) {\n return new Abs(term);\n });\n return new Mul(terms);\n } else {\n return abs;\n }\n },\n\n isPositive: function () {\n return true;\n },\n});\n\n/* equation */\nexport function Eq(left, type, right) {\n this.left = left;\n this.type = type;\n this.right = right;\n}\nEq.prototype = new Expr();\n\n_.extend(Eq.prototype, {\n func: Eq,\n args: function () {\n return [this.left, this.type, this.right];\n },\n\n needsExplicitMul: function () {\n return false;\n },\n\n print: function () {\n return this.left.print() + this.type + this.right.print();\n },\n\n signs: {\n \"=\": \" = \",\n \"<\": \" < \",\n \">\": \" > \",\n \"<>\": \" \\\\ne \",\n \"<=\": \" \\\\le \",\n \">=\": \" \\\\ge \",\n },\n\n tex: function () {\n return this.left.tex() + this.signs[this.type] + this.right.tex();\n },\n\n normalize: function () {\n var eq = this.recurse(\"normalize\");\n\n if (_.contains([\">\", \">=\"], eq.type)) {\n // inequalities should have the smaller side on the left\n return new Eq(eq.right, eq.type.replace(\">\", \"<\"), eq.left);\n } else {\n return eq;\n }\n },\n\n // convert this equation to an expression set to zero\n // the expression is normalized to a canonical form\n // e.g. y/2=x/4 -> y/2-x/4(=0) -> 2y-x(=0)\n // unless unfactored is specified, will then divide through\n asExpr: function (unfactored) {\n var isZero = function (expr) {\n return expr instanceof Num && expr.isSimple() && expr.eval() === 0;\n };\n\n // first convert to a sequence of additive terms\n var terms = [];\n\n if (this.left instanceof Add) {\n terms = _.clone(this.left.terms);\n } else if (!isZero(this.left)) {\n terms = [this.left];\n }\n\n if (this.right instanceof Add) {\n terms = terms.concat(this.right.negate().terms);\n } else if (!isZero(this.right)) {\n terms.push(this.right.negate());\n }\n\n var isInequality = !this.isEquality();\n\n // Collect over each term individually to transform simple expressions\n // into numbers that might have denominators, taking into account\n // float precision. We have to be very careful to not introduce any\n // irrational floats before asExpr() returns, because by definition\n // they do not have exact denominators...\n terms = _.invoke(terms, \"collect\", {preciseFloats: true});\n\n // ...and we multiply through by every denominator.\n for (var i = 0; i < terms.length; i++) {\n var denominator = terms[i].getDenominator();\n\n // Can't multiply inequalities by non 100% positive factors\n if (isInequality && !denominator.isPositive()) {\n denominator = denominator.asPositiveFactor();\n }\n\n if (!denominator.equals(Num.One)) {\n terms = _.map(terms, function (term) {\n return Mul.createOrAppend(term, denominator).simplify({\n once: true,\n preciseFloats: true,\n });\n });\n }\n }\n\n var add = new Add(terms).flatten();\n return unfactored ? add : this.divideThrough(add);\n },\n\n // divide through by every common factor in the expression\n // e.g. 2y-4x(=0) -> y-2x(=0)\n // TODO(alex): Make it an option to only divide by variables/expressions\n // guaranteed to be nonzero\n divideThrough: function (expr) {\n var isInequality = !this.isEquality();\n\n var simplified = expr.simplify({once: true});\n var factored = simplified.factor({keepNegative: isInequality});\n\n if (!(factored instanceof Mul)) {\n return expr;\n }\n\n var terms = factored.terms;\n\n var isAdd = function (term) {\n return term instanceof Add;\n };\n var hasVar = function (term) {\n return !!term.getVars().length;\n };\n var isOne = function (term) {\n return term.equals(Num.One);\n };\n\n var grouped = _.groupBy(terms, isAdd);\n var adds = grouped[true] || [];\n var others = grouped[false] || [];\n\n if (adds.length && this.isEquality()) {\n // keep only Adds\n // e.g. 2xy(z+1)(=0) -> z+1(=0)\n return new Mul(adds).flatten();\n }\n\n var denominator = others;\n\n if (!adds.length) {\n // if no Adds, keep all variable terms to preserve meaning\n // e.g. 42xyz(=0) -> xyz(=0)\n denominator = _.reject(denominator, hasVar);\n }\n\n if (isInequality) {\n // can't divide inequalities by non 100% positive factors\n // e.g. 42x^2y(z+1)(=0) -> y(z+1)(=0)\n denominator = _.invoke(denominator, \"asPositiveFactor\");\n }\n\n // don't need to divide by one\n denominator = _.reject(denominator, isOne);\n\n denominator = _.map(denominator, function (term) {\n return new Pow(term, Num.Div);\n });\n\n var dividedResult = new Mul(terms.concat(denominator)).collect();\n\n // If the end result is the same as the original factoring,\n // rollback the factoring and discard all intermediate steps.\n if (dividedResult.equals(factored)) {\n return simplified;\n } else {\n return dividedResult;\n }\n },\n\n isEquality: function () {\n return _.contains([\"=\", \"<>\"], this.type);\n },\n\n compare: function (other) {\n // expression comparisons are handled by Expr.compare()\n if (!(other instanceof Eq)) {\n return false;\n }\n\n var eq1 = this.normalize();\n var eq2 = other.normalize();\n\n if (eq1.type !== eq2.type) {\n return false;\n }\n\n // need to collect to properly factor out common factors\n // e.g x+2x=6 -> 3x=6 -> 3x-6(=0) -> x-2(=0)\n var expr1 = eq1.divideThrough(\n eq1.asExpr(/* unfactored */ true).collect(),\n );\n var expr2 = eq2.divideThrough(\n eq2.asExpr(/* unfactored */ true).collect(),\n );\n\n if (eq1.isEquality()) {\n // equals and not-equals can be subtracted either way\n return (\n expr1.compare(expr2) || expr1.compare(Mul.handleNegative(expr2))\n );\n } else {\n return expr1.compare(expr2);\n }\n },\n\n // should only be done after compare() returns true to avoid false positives\n sameForm: function (other) {\n var eq1 = this.normalize();\n var eq2 = other.normalize();\n\n var same = eq1.left.sameForm(eq2.left) && eq1.right.sameForm(eq2.right);\n\n if (eq1.isEquality()) {\n // equals and not-equals can be commutative with respect to the sign\n return (\n same ||\n (eq1.left.sameForm(eq2.right) && eq1.right.sameForm(eq2.left))\n );\n } else {\n return same;\n }\n },\n\n // we don't want to override collect because it would turn y=x into y-x(=0)\n // instead, we ask if the equation was in that form, would it be simplified?\n isSimplified: function () {\n var expr = this.asExpr(/* unfactored */ true);\n var simplified = this.divideThrough(expr).simplify();\n return (\n expr.equals(simplified) &&\n this.left.isSimplified() &&\n this.right.isSimplified()\n );\n },\n});\n\n_.extend(Eq.prototype, {\n // Assumptions: Expression is of the form a+bx, and we solve for x\n solveLinearEquationForVariable: function (variable) {\n var expr = this.asExpr();\n if (!expr.is(Add) || expr.terms.length !== 2) {\n throw new Error(\n \"Can only handle linear equations of the form \" +\n \"a + bx (= 0)\",\n );\n }\n\n var hasVar = function (term) {\n return term.has(Var) && _.contains(term.getVars(), variable.symbol);\n };\n\n var a, b;\n\n if (hasVar(expr.terms[0])) {\n a = Mul.handleNegative(expr.terms[1]);\n b = Mul.handleDivide(expr.terms[0], variable);\n } else {\n a = Mul.handleNegative(expr.terms[0]);\n b = Mul.handleDivide(expr.terms[1], variable);\n }\n\n return Mul.handleDivide(a, b).simplify();\n },\n});\n\n/* abstract symbol node */\nfunction Symbol() {}\nSymbol.prototype = new Expr();\n\n_.extend(Symbol.prototype, {\n needsExplicitMul: function () {\n return false;\n },\n\n findGCD: function (factor) {\n if (factor instanceof Symbol || factor instanceof Num) {\n return this.equals(factor) ? this : Num.One;\n } else {\n return factor.findGCD(this);\n }\n },\n});\n\n/* function variable */\nexport function Func(symbol, arg) {\n this.symbol = symbol;\n this.arg = arg;\n}\nFunc.prototype = new Symbol();\n\n_.extend(Func.prototype, {\n func: Func,\n args: function () {\n return [this.symbol, this.arg];\n },\n\n print: function () {\n return this.symbol + \"(\" + this.arg.print() + \")\";\n },\n\n tex: function () {\n return this.symbol + \"(\" + this.arg.tex() + \")\";\n },\n\n eval: function (vars, options) {\n var arg = this.arg;\n var func = vars[this.symbol];\n var newVars = _.extend(_.clone(vars), {\n x: arg.eval(vars, options),\n });\n var parsedFunc = parse(func, options);\n if (parsedFunc.parsed) {\n return parsedFunc.expr.eval(newVars, options);\n }\n // If parsedFunc isn't actually parsed, return its error\n return parsedFunc;\n },\n\n codegen: function () {\n return 'vars[\"' + this.symbol + '\"](' + this.arg.codegen() + \")\";\n },\n\n getUnits: function () {\n return this.arg.getUnits();\n },\n\n getVars: function (excludeFunc) {\n if (excludeFunc) {\n return this.arg.getVars();\n } else {\n return _.union(this.arg.getVars(), [this.symbol]).sort();\n }\n },\n\n getConsts: function () {\n return this.arg.getConsts();\n },\n});\n\n/* variable */\nexport function Var(symbol, subscript) {\n this.symbol = symbol;\n this.subscript = subscript;\n}\nVar.prototype = new Symbol();\n\n_.extend(Var.prototype, {\n func: Var,\n args: function () {\n return [this.symbol, this.subscript];\n },\n\n exprArgs: function () {\n return [];\n },\n recurse: function () {\n return this;\n },\n\n print: function () {\n var sub = \"\";\n if (this.subscript) {\n sub = \"_(\" + this.subscript.print() + \")\";\n }\n return this.symbol + sub;\n },\n\n // Provide a way to easily evalate expressions with the common case,\n // subscripts that consist of a single number or symbol e.g. x_a or x_42\n prettyPrint: function () {\n var sub = this.subscript;\n if (sub && (sub instanceof Num || sub instanceof Symbol)) {\n return this.symbol + \"_\" + sub.print();\n } else {\n return this.print();\n }\n },\n\n tex: function () {\n var sub = \"\";\n if (this.subscript) {\n sub = \"_{\" + this.subscript.tex() + \"}\";\n }\n var prefix = this.symbol.length > 1 ? \"\\\\\" : \"\";\n return prefix + this.symbol + sub;\n },\n\n repr: function () {\n return \"Var(\" + this.print() + \")\";\n },\n\n eval: function (vars, options) {\n return vars[this.prettyPrint()];\n },\n\n codegen: function () {\n return 'vars[\"' + this.prettyPrint() + '\"]';\n },\n\n getVars: function () {\n return [this.prettyPrint()];\n },\n\n isPositive: function () {\n return false;\n },\n});\n\n/* constant */\nexport function Const(symbol) {\n this.symbol = symbol;\n}\nConst.prototype = new Symbol();\n\n_.extend(Const.prototype, {\n func: Const,\n args: function () {\n return [this.symbol];\n },\n recurse: function () {\n return this;\n },\n\n eval: function (vars, options) {\n if (this.symbol === \"pi\") {\n return Math.PI;\n } else if (this.symbol === \"e\") {\n return Math.E;\n }\n },\n\n codegen: function () {\n if (this.symbol === \"pi\") {\n return \"Math.PI\";\n } else if (this.symbol === \"e\") {\n return \"Math.E\";\n }\n },\n\n print: function () {\n return this.symbol;\n },\n\n tex: function () {\n if (this.symbol === \"pi\") {\n return \"\\\\pi \";\n } else if (this.symbol === \"e\") {\n return \"e\";\n }\n },\n\n isPositive: function () {\n return this.eval() > 0;\n },\n\n abs: function () {\n if (this.eval() > 0) {\n return this;\n } else {\n return Mul.handleNegative(this);\n }\n },\n\n getConsts: function () {\n return [this.print()];\n },\n});\n\nConst.e = new Const(\"e\");\nConst.pi = new Const(\"pi\");\n\n/* abstract number node */\nfunction Num() {}\nNum.prototype = new Expr();\n\n_.extend(Num.prototype, {\n repr: function () {\n return this.print();\n },\n strip: function () {\n return this.abs();\n },\n recurse: function () {\n return this;\n },\n codegen: function () {\n return this.print();\n },\n\n // takes another Num and returns a new Num\n add: abstract,\n mul: abstract,\n\n // returns this Num's additive inverse\n negate: abstract,\n\n isSubtract: function () {\n return this.hints.subtract;\n },\n\n // return the absolute value of the number\n abs: abstract,\n\n needsExplicitMul: function () {\n return true;\n },\n\n findGCD: abstract,\n\n isPositive: function () {\n return this.eval() > 0;\n },\n\n isNegative: function () {\n return this.eval() < 0;\n },\n\n asPositiveFactor: function () {\n return this.isPositive() ? this : this.abs();\n },\n\n // hints for interpreting and rendering user input\n hints: _.extend(Num.prototype.hints, {\n negate: false,\n subtract: false,\n divide: false,\n root: false,\n fraction: false,\n entered: false,\n }),\n\n // whether a number is considered simple (one term)\n // e.g. for reals, ints and floats are simple\n isSimple: abstract,\n\n // Based on http://stackoverflow.com/a/10454560/2571482\n getDecimalPlaces: function () {\n var match = (\"\" + this.n).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n if (match) {\n return Math.max(\n 0,\n // Number of digits right of decimal point\n (match[1] ? match[1].length : 0) -\n // Adjust for scientific notation\n (match[2] ? +match[2] : 0),\n );\n } else {\n return 0;\n }\n },\n\n asRational: abstract,\n});\n\n/* rational number (n: numerator, d: denominator) */\nexport function Rational(numerator, denominator) {\n var n = numerator;\n var d = denominator;\n if (d < 0) {\n n = -n;\n d = -d;\n }\n this.n = n;\n this.d = d;\n}\nRational.prototype = new Num();\n\n_.extend(Rational.prototype, {\n func: Rational,\n args: function () {\n return [this.n, this.d];\n },\n eval: function () {\n return this.n / this.d;\n },\n\n print: function () {\n return this.n.toString() + \"/\" + this.d.toString();\n },\n\n tex: function () {\n var tex =\n \"\\\\frac{\" +\n Math.abs(this.n).toString() +\n \"}{\" +\n this.d.toString() +\n \"}\";\n return this.n < 0 ? \"-\" + tex : tex;\n },\n\n add: function (num, options) {\n if (num instanceof Rational) {\n return new Rational(\n this.n * num.d + this.d * num.n,\n this.d * num.d,\n ).collect();\n } else {\n return num.add(this, options);\n }\n },\n\n mul: function (num, options) {\n if (num instanceof Rational) {\n return new Rational(this.n * num.n, this.d * num.d).collect();\n } else {\n return num.mul(this, options);\n }\n },\n\n collect: function () {\n var gcd = Num.findGCD(this.n, this.d);\n\n var n = this.n / gcd;\n var d = this.d / gcd;\n\n if (d === 1) {\n return new Int(n);\n } else {\n return new Rational(n, d);\n }\n },\n\n negate: function () {\n return new Rational(-this.n, this.d);\n },\n\n abs: function () {\n return new Rational(Math.abs(this.n), this.d);\n },\n\n findGCD: function (factor) {\n // Attempt to factor out common numerators and denominators to return\n // a Rational instead of a Float\n if (factor instanceof Rational) {\n // For more background, see\n // http://math.stackexchange.com/questions/151081/gcd-of-rationals\n var numerator = Num.findGCD(this.n * factor.d, factor.n * this.d);\n var denominator = this.d * factor.d;\n // Create the rational, then call .collect() to simplify it\n return new Rational(numerator, denominator).collect();\n } else if (factor instanceof Int) {\n return new Rational(Num.findGCD(this.n, factor.n), this.d);\n } else {\n return factor.findGCD(this);\n }\n },\n\n // for now, assuming that exp is a Num\n raiseToThe: function (exp) {\n if (exp instanceof Int) {\n var positive = exp.eval() > 0;\n var abs = exp.abs().eval();\n var n = Math.pow(this.n, abs);\n var d = Math.pow(this.d, abs);\n if (positive) {\n return new Rational(n, d).collect();\n } else {\n return new Rational(d, n).collect();\n }\n } else {\n return new Float(this.eval()).raiseToThe(exp);\n }\n },\n\n getDenominator: function () {\n return new Int(this.d);\n },\n\n isSimple: function () {\n return false;\n },\n\n asRational: function () {\n return this;\n },\n});\n\n/* integer (n: numerator/number) */\nexport function Int(number) {\n this.n = number;\n}\nInt.prototype = new Rational(0, 1);\n\n_.extend(Int.prototype, {\n func: Int,\n args: function () {\n return [this.n];\n },\n print: function () {\n return this.n.toString();\n },\n tex: function () {\n return this.n.toString();\n },\n negate: function () {\n return new Int(-this.n);\n },\n abs: function () {\n return new Int(Math.abs(this.n));\n },\n isSimple: function () {\n return true;\n },\n findGCD: function (factor) {\n if (factor instanceof Int) {\n return new Int(Num.findGCD(this.n, factor.n));\n } else {\n return factor.findGCD(this);\n }\n },\n});\n\n_.extend(Int, {\n create: function (n) {\n return new Int(n).addHint(\"entered\");\n },\n});\n\n/* float (n: number) */\nexport function Float(number) {\n this.n = number;\n}\nFloat.prototype = new Num();\n\n_.extend(Float.prototype, {\n func: Float,\n args: function () {\n return [this.n];\n },\n eval: function () {\n return this.n;\n },\n\n // TODO(alex): when we internationalize number parsing/display\n // we should make sure to use the appropriate decimal mark here\n print: function () {\n return this.n.toString();\n },\n tex: function () {\n return this.n.toString();\n },\n\n add: function (num, options) {\n if (options && options.preciseFloats) {\n return Float.toDecimalPlaces(\n this.n + num.eval(),\n Math.max(this.getDecimalPlaces(), num.getDecimalPlaces()),\n );\n } else {\n return new Float(this.n + num.eval()).collect();\n }\n },\n\n mul: function (num, options) {\n if (options && options.preciseFloats) {\n return Float.toDecimalPlaces(\n this.n * num.eval(),\n this.getDecimalPlaces() + num.getDecimalPlaces(),\n );\n } else {\n return new Float(this.n * num.eval()).collect();\n }\n },\n\n collect: function () {\n // We used to simplify Floats to Ints here whenever possible, but no\n // longer do so in order to preserve significant figures.\n return this;\n },\n\n negate: function () {\n return new Float(-this.n);\n },\n abs: function () {\n return new Float(Math.abs(this.n));\n },\n\n findGCD: function (factor) {\n if (factor instanceof Num) {\n return new Float(Num.findGCD(this.eval(), factor.eval())).collect();\n } else {\n return factor.findGCD(this);\n }\n },\n\n // for now, assuming that exp is a Num\n raiseToThe: function (exp, options) {\n if (\n options &&\n options.preciseFloats &&\n exp instanceof Int &&\n exp.n > 1\n ) {\n return Float.toDecimalPlaces(\n new Pow(this, exp).eval(),\n this.getDecimalPlaces() * exp.n,\n );\n } else {\n return new Float(new Pow(this, exp).eval()).collect();\n }\n },\n\n // only to be used on non-repeating decimals (e.g. user-provided)\n asRational: function () {\n var parts = this.n.toString().split(\".\");\n if (parts.length === 1) {\n return new Rational(this.n, 1);\n } else {\n var numerator = Number(parts.join(\"\"));\n var denominator = Math.pow(10, parts[1].length);\n return new Rational(numerator, denominator).collect();\n }\n },\n\n getDenominator: function () {\n return this.asRational().getDenominator();\n },\n\n isSimple: function () {\n return true;\n },\n});\n\n_.extend(Float, {\n create: function (n) {\n return new Float(n).addHint(\"entered\");\n },\n\n // Account for floating point imprecision by explicitly controlling the\n // number of decimal places in common operations (e.g. +, *, ^)\n toDecimalPlaces: function (n, places) {\n return new Float(+n.toFixed(Math.min(places, 20))).collect();\n },\n});\n\n// static methods and fields that are best defined on Num\n_.extend(Num, {\n negativeOne: function (hint) {\n if (hint === \"subtract\") {\n return Num.Sub;\n } else if (hint === \"divide\") {\n return Num.Div;\n } else {\n return Num.Neg;\n }\n },\n\n // find the greatest common denominator\n findGCD: function (a, b) {\n var mod;\n\n a = Math.abs(a);\n b = Math.abs(b);\n\n // Euclid's method doesn't handle non-integers very well. For now\n // we just say we can't pull out a common factor. It might be\n // reasonable to do better than this in the future.\n if (a !== Math.floor(a) || b !== Math.floor(b)) {\n return 1;\n }\n\n while (b) {\n mod = a % b;\n a = b;\n b = mod;\n }\n\n return a;\n },\n\n min: function () {\n return _.min(_.toArray(arguments), function (num) {\n return num.eval();\n });\n },\n\n max: function () {\n return _.max(_.toArray(arguments), function (num) {\n return num.eval();\n });\n },\n});\n\nNum.Neg = new Int(-1).addHint(\"negate\");\nNum.Sub = new Int(-1).addHint(\"subtract\");\nNum.Div = new Int(-1).addHint(\"divide\");\n\nNum.Sqrt = new Rational(1, 2).addHint(\"root\");\n\nNum.Zero = new Int(0);\nNum.One = new Int(1);\nNum.Ten = new Int(10);\n\n// set identities here\nAdd.prototype.identity = Num.Zero;\nMul.prototype.identity = Num.One;\n\nvar parseError = function (str, hash) {\n // return int location of parsing error\n throw new Error(hash.loc.first_column);\n};\n\n// expose concrete nodes to parser scope\n// see http://zaach.github.io/jison/docs/#sharing-scope\nparser.yy = {\n Add: Add,\n Mul: Mul,\n Pow: Pow,\n Log: Log,\n Trig: Trig,\n Eq: Eq,\n Abs: Abs,\n Func: Func,\n Const: Const,\n Var: Var,\n Int: Int,\n Float: Float,\n parseError: parseError,\n\n constants: [\"e\"],\n symbolLexer: function (symbol) {\n if (_.contains(parser.yy.constants, symbol)) {\n return \"CONST\";\n } else if (_.contains(parser.yy.functions, symbol)) {\n return \"FUNC\";\n } else {\n return \"VAR\";\n }\n },\n};\n\nexport const parse = function (input, options) {\n try {\n if (options && options.functions) {\n // reserve the symbol \"i\" for complex numbers\n parser.yy.functions = _.without(options.functions, \"i\");\n } else {\n parser.yy.functions = [];\n }\n\n // If ',' is the decimal dividor in your country, replace any ','s\n // with '.'s.\n // This isn't perfect, since the output will all still have '.'s.\n // TODO(jack): Fix the output to have ','s in this case\n if (options && options.decimal_separator) {\n input = input.split(options.decimal_separator).join(\".\");\n }\n\n var expr = parser.parse(input).completeParse();\n return {parsed: true, expr: expr};\n } catch (e) {\n return {parsed: false, error: e.message};\n }\n};\n\n/* unit */\nexport function Unit(symbol) {\n this.symbol = symbol;\n}\nUnit.prototype = new Symbol();\n\n// If possible, replace unit prefixes with a multiplication.\n//\n// \"g\" -> Unit(\"g\")\n// \"kg\" -> 1000 * Unit(\"g\")\nvar unprefixify = function (symbol) {\n if (_(baseUnits).has(symbol) || _(derivedUnits).has(symbol)) {\n return new Unit(symbol);\n }\n\n // check for prefix\n var prefix = _(_(siPrefixes).keys()).find(function (testPrefix) {\n return new RegExp(\"^\" + testPrefix).test(symbol);\n });\n\n if (prefix) {\n var base = symbol.replace(new RegExp(\"^\" + prefix), \"\");\n\n // It's okay to be here if either:\n // * `base` is a base unit (the seven units listed in baseUnits)\n // * `base` is a derived unit which allows prefixes\n //\n // Otherwise, we're trying to parse a unit label which is not\n // allowed (mwk, mBTU, etc).\n if (\n _(baseUnits).has(base) ||\n (derivedUnits[base] && derivedUnits[base].prefixes === hasPrefixes)\n ) {\n return new Mul(siPrefixes[prefix], new Unit(base));\n } else {\n throw new Error(base + \" does not allow prefixes\");\n }\n } else {\n return new Unit(symbol);\n }\n};\n\nexport const unitParse = function (input) {\n try {\n var parseResult = unitParser.parse(input);\n\n // parseResult looks like:\n // {\n // magnitude: \"5\",\n // unit: {\n // num: [\n // { name: \"s\", pow: 2 }\n // ],\n // denom: [\n // { name: \"kg\", pow: 1 }\n // ]\n // }\n // }\n //\n // denom is optionally null\n\n var unitArray = [];\n\n _(parseResult.unit.num).each(function (unitSpec) {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(unitSpec.pow)),\n );\n });\n\n _(parseResult.unit.denom).each(function (unitSpec) {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(-1 * unitSpec.pow)),\n );\n });\n\n var unit = new Mul(unitArray).flatten();\n\n if (parseResult.type === \"unitMagnitude\") {\n // in the first case we have a magnitude coefficient as well as the\n // unit itself.\n var coefArray = [new Float(+parseResult.magnitude)].concat(\n unitArray,\n );\n var expr = new Mul(coefArray);\n return {\n parsed: true,\n unit: unit,\n expr: expr,\n coefficient: parseResult.magnitude,\n type: parseResult.type,\n };\n } else {\n // in the second case it's just the unit with no magnitude.\n return {\n parsed: true,\n unit: unit,\n type: parseResult.type,\n };\n }\n } catch (e) {\n return {parsed: false, error: e.message};\n }\n};\n\n_.extend(Unit.prototype, {\n func: Unit,\n args: function () {\n return [this.symbol];\n },\n recurse: function () {\n return this;\n },\n\n eval: function (vars, options) {\n // This is called when comparing units. A unit doesn't affect the\n // numerical value of its coefficient, so this needs to be 1.\n //\n // On the other hand, things must not evaluate to the same thing if\n // they don't have the same type. I believe that's also true - form is\n // checked before numerical equivalence. I do not know where, though.\n // However, there are a couple tests checking this.\n return 1;\n },\n\n getUnits: function () {\n return [{unit: this.symbol, pow: 1}];\n },\n\n codegen: function () {\n return \"1\";\n },\n\n print: function () {\n return this.symbol;\n },\n\n tex: function () {\n return this.symbol;\n },\n\n // Simplify units by replacing prefixes with multiplication\n collect: function (options) {\n if (_(baseUnits).has(this.symbol)) {\n return this;\n } else if (_(derivedUnits).has(this.symbol)) {\n return derivedUnits[this.symbol].conversion;\n } else {\n throw new Error(\"could not understand unit: \" + this.symbol);\n }\n },\n});\n\nvar baseUnits = {\n m: new Unit(\"m\"),\n // Note: kg is the SI base unit but we use g for consistency\n g: new Unit(\"g\"),\n s: new Unit(\"s\"),\n A: new Unit(\"A\"),\n K: new Unit(\"K\"),\n mol: new Unit(\"mol\"),\n cd: new Unit(\"cd\"),\n};\n\nvar siPrefixes = {\n a: new Pow(new Int(10), new Int(-18)),\n f: new Pow(new Int(10), new Int(-15)),\n p: new Pow(new Int(10), new Int(-12)),\n n: new Pow(new Int(10), new Int(-9)),\n u: new Pow(new Int(10), new Int(-6)),\n m: new Pow(new Int(10), new Int(-3)),\n c: new Pow(new Int(10), new Int(-2)),\n d: new Pow(new Int(10), new Int(-1)),\n da: new Int(10),\n h: new Pow(new Int(10), new Int(2)),\n k: new Pow(new Int(10), new Int(3)),\n M: new Pow(new Int(10), new Int(6)),\n G: new Pow(new Int(10), new Int(9)),\n T: new Pow(new Int(10), new Int(12)),\n P: new Pow(new Int(10), new Int(15)),\n E: new Pow(new Int(10), new Int(18)),\n // http://en.wikipedia.org/wiki/Metric_prefix#.22Hella.22_prefix_proposal\n hella: new Pow(new Int(10), new Int(27)),\n};\n\n// Use these two values to mark a unit as either SI-prefixable or not.\nvar hasPrefixes = {};\nvar hasntPrefixes = {};\n\nvar makeAlias = function (str, prefixes) {\n var splits = str.split(\"|\");\n var coefficientStr = splits[0].trim();\n var unitsStr = splits[1].trim();\n\n var coefficient = Num.One;\n if (coefficientStr !== \"\") {\n coefficient = parse(coefficientStr).expr;\n }\n\n var numdenomStr = unitsStr.split(\"/\");\n var numdenom = [coefficient];\n\n if (numdenomStr[0]) {\n numdenomStr[0]\n .split(\" \")\n .filter(function (x) {\n return x !== \"\";\n })\n .map(function (x) {\n numdenom.push(new Unit(x));\n });\n }\n\n if (numdenomStr[1]) {\n numdenomStr[1]\n .split(\" \")\n .filter(function (x) {\n return x !== \"\";\n })\n .map(function (x) {\n numdenom.push(new Pow(new Unit(x), Num.Div));\n });\n }\n\n return {\n conversion: new Mul(numdenom),\n prefixes: prefixes,\n };\n};\n\n// This is a mapping of derived units (or different names for a unit) to their\n// definitions. For example, an inch is defined as 0.0254 m.\n//\n// Definitions don't need to be in terms of base units. For example, tsp is\n// defined in terms of tbsp (which is defined in terms of cup -> gal -> L ->\n// m^3). However, units must get simpler. I.e. there's no loop checking.\n//\n// makeAlias takes two parameters:\n// * a string specifying the simplification to perform\n// - a required pipe separates the constant factor from the base units\n// - the constant factor is parsed by KAS\n// - the base units are in a simple format which disallows exponents and\n// requires multiplicands to be space-separated (\"m m\" rather than \"m^2)\n// with an optional \"/\" separating numerator and denominator\n// - prefixes are not allowed to be used in the converted to units\n// (note that this restriction, the format of the string, and the choice to\n// use a string in the first place are made out of laziness to minimize\n// both typing and parsing)\n// * a boolean specifying whether or not it's acceptable to use SI units\n//\n// Where possible, these units are taken from \"The International System of\n// Units (SI)\" 8th edition (2006).\nvar derivedUnits = {\n // mass\n // The atomic mass unit / dalton.\n Da: makeAlias(\"1.6605388628 x 10^-24 | g\", hasPrefixes),\n u: makeAlias(\"| Da\", hasntPrefixes),\n\n // length\n meter: makeAlias(\"| m\", hasntPrefixes),\n meters: makeAlias(\"| m\", hasntPrefixes),\n in: makeAlias(\"254 / 10000 | m\", hasntPrefixes),\n ft: makeAlias(\"3048 / 10000 | m\", hasntPrefixes),\n yd: makeAlias(\"9144 / 10000 | m\", hasntPrefixes),\n mi: makeAlias(\"1609344 / 1000 | m\", hasntPrefixes),\n ly: makeAlias(\"9.4607 x 10^15 | m\", hasntPrefixes),\n nmi: makeAlias(\"1852 | m\", hasntPrefixes),\n Å: makeAlias(\"10^-10 | m\", hasntPrefixes),\n pc: makeAlias(\"3.0857 x 10^16 | m\", hasntPrefixes),\n\n // time\n min: makeAlias(\"60 | s\", hasntPrefixes),\n hr: makeAlias(\"3600 | s\", hasntPrefixes),\n sec: makeAlias(\"| s\", hasntPrefixes),\n // TODO(joel) make day work\n day: makeAlias(\"86400 | s\", hasntPrefixes),\n wk: makeAlias(\"604800 | s\", hasntPrefixes),\n fortnight: makeAlias(\"14 | day\", hasntPrefixes),\n shake: makeAlias(\"10^-8 | s\", hasntPrefixes),\n olympiad: makeAlias(\"126200000 | s\", hasntPrefixes),\n\n // temperature\n \"°C\": makeAlias(\"1 | K\", hasntPrefixes),\n \"°F\": makeAlias(\"5/9 | K\", hasntPrefixes),\n \"°R\": makeAlias(\"5/9 | K\", hasntPrefixes),\n\n // electric charge\n e: makeAlias(\"1.6021765314 x 10^-19 | C\", hasntPrefixes),\n\n // speed\n c: makeAlias(\"299792458 | m / s\", hasntPrefixes),\n kn: makeAlias(\"514/1000 | m / s\", hasntPrefixes),\n kt: makeAlias(\"| kn\", hasntPrefixes),\n knot: makeAlias(\"| kn\", hasntPrefixes),\n\n // energy\n J: makeAlias(\"| N m\", hasPrefixes),\n BTU: makeAlias(\"1060 | J\", hasntPrefixes),\n cal: makeAlias(\"4184 / 1000 | J\", hasPrefixes),\n eV: makeAlias(\"1.602176514 x 10^-19 | J\", hasPrefixes),\n erg: makeAlias(\"10^−7 | J\", hasPrefixes),\n\n // power\n W: makeAlias(\"| J / s\", hasPrefixes),\n \"H-e\": makeAlias(\"80 | W\", hasntPrefixes),\n\n // force\n N: makeAlias(\"1000 | g m / s s\", hasPrefixes),\n // \"lb\": makeAlias(\"4448 / 1000 | N\", hasntPrefixes),\n // 4.4482216152605\n lb: makeAlias(\"4448221615 / 1000000000 | N\", hasntPrefixes),\n dyn: makeAlias(\"10^-5 | N\", hasntPrefixes),\n\n // pressure\n Pa: makeAlias(\"1 | N / m m m\", hasPrefixes),\n bar: makeAlias(\"10^5 | Pa\", hasPrefixes),\n \"㏔\": makeAlias(\"1/1000 | bar\", hasntPrefixes),\n \"㍴\": makeAlias(\"| bar\", hasntPrefixes),\n atm: makeAlias(\"101325 | Pa\", hasntPrefixes),\n Torr: makeAlias(\"1/760 | atm\", hasntPrefixes),\n mmHg: makeAlias(\"| Torr\", hasntPrefixes),\n\n // area\n ha: makeAlias(\"10^4 | m m\", hasntPrefixes),\n b: makeAlias(\"10^−28 | m m\", hasPrefixes),\n barn: makeAlias(\"| b\", hasPrefixes),\n acre: makeAlias(\"4046.87 | m m\", hasntPrefixes),\n skilodge: makeAlias(\"10^-31 | m m\", hasntPrefixes),\n outhouse: makeAlias(\"10^-34 | m m\", hasntPrefixes),\n shed: makeAlias(\"10^-52 | m m\", hasntPrefixes),\n\n // volume\n L: makeAlias(\"1/1000 | m m m\", hasPrefixes),\n gal: makeAlias(\"3785/1000 | L\", hasPrefixes),\n cup: makeAlias(\"1/16 | gal\", hasntPrefixes),\n qt: makeAlias(\"1/4 | gal\", hasntPrefixes),\n quart: makeAlias(\"| qt\", hasntPrefixes),\n p: makeAlias(\"1/8 | gal\", hasntPrefixes),\n pt: makeAlias(\"| p\", hasntPrefixes),\n pint: makeAlias(\"| p\", hasntPrefixes),\n \"fl oz\": makeAlias(\"1/8 | cup\", hasntPrefixes),\n \"fl. oz.\": makeAlias(\"1/8 | cup\", hasntPrefixes),\n tbsp: makeAlias(\"1/16 | cup\", hasntPrefixes),\n tsp: makeAlias(\"1/3 | tbsp\", hasntPrefixes),\n\n // rotational\n // \"rad\":\n rev: makeAlias(\"2 pi | rad\", hasntPrefixes),\n deg: makeAlias(\"180 pi | rad\", hasntPrefixes),\n \"°\": makeAlias(\"| deg\", hasntPrefixes),\n arcminute: makeAlias(\"1/60 | deg\", hasntPrefixes),\n arcsec: makeAlias(\"1/3600 | deg\", hasntPrefixes),\n\n // dimensionless\n // \"B\": makeAlias(\"10 | dB\", hasntPrefixes), // XXX danger - logarithmic\n // \"dB\"\n // \"nP\"\n Hu: makeAlias(\"1000 | dB\", hasPrefixes),\n dozen: makeAlias(\"12 |\", hasntPrefixes),\n // XXX\n mol: makeAlias(\"6.0221412927 x 10^23 |\", hasPrefixes),\n \"%\": makeAlias(\"1/100 |\", hasntPrefixes),\n percent: makeAlias(\"| %\", hasntPrefixes),\n ppm: makeAlias(\"1/1000000 |\", hasntPrefixes),\n\n // electric / magnetic\n V: makeAlias(\"1000 | g m m / s s C\", hasPrefixes),\n C: makeAlias(\"| A s\", hasPrefixes),\n ampere: makeAlias(\"| A\", hasntPrefixes),\n Ω: makeAlias(\"| V / A\", hasPrefixes),\n ohm: makeAlias(\"| Ω\", hasntPrefixes),\n F: makeAlias(\"| C / V\", hasPrefixes),\n H: makeAlias(\"| ohm s\", hasPrefixes),\n T: makeAlias(\"1000 | g / C s\", hasPrefixes),\n Wb: makeAlias(\"1000 | g m m / C s\", hasPrefixes),\n\n // photometry\n // TODO not sure this is right\n lm: makeAlias(\"pi x 10^4 | cd / m m\", hasntPrefixes),\n lx: makeAlias(\"| lm / m m\", hasntPrefixes),\n nit: makeAlias(\"| cd / m m\", hasntPrefixes),\n sb: makeAlias(\"10^4 | cd / m m\", hasntPrefixes),\n stilb: makeAlias(\"1 | sb\", hasntPrefixes),\n apostilb: makeAlias(\"1 / pi x 10^(-4) | sb\", hasntPrefixes),\n blondel: makeAlias(\"| apostilb\", hasntPrefixes),\n asb: makeAlias(\"| apostilb\", hasntPrefixes),\n la: makeAlias(\"| lm\", hasntPrefixes),\n Lb: makeAlias(\"| lm\", hasntPrefixes),\n sk: makeAlias(\"10^-7 | lm\", hasntPrefixes),\n skot: makeAlias(\"| sk\", hasntPrefixes),\n bril: makeAlias(\"10^-11 | lm\", hasntPrefixes),\n\n // other\n Hz: makeAlias(\"| / s\", hasPrefixes),\n};\n\nexport const Zero = Num.Zero;\nexport const One = Num.One;\n","/* eslint-disable */\nimport _ from \"underscore\";\n\n// Assumes that both expressions have already been parsed\n// TODO(alex): be able to pass a random() function to compare()\nexport const compare = function(expr1, expr2, options) {\n var defaults = {\n form: false, // Check that the two expressions have the same form\n simplify: false, // Check that the second expression is simplified\n };\n\n /* Options that could be added in the future:\n * - Allow ratios: e.g. 3/1 and 3 should both be accepted for something\n * like slope\n * - Allow student to choose their own variable names\n */\n\n if (options !== undefined) {\n // eslint-disable-next-line no-undef\n options = _.extend(defaults, options);\n } else {\n options = defaults;\n }\n\n // TODO(CP-1614): Figure out how to make these messages translatable\n\n // Variable check\n var vars = expr1.sameVars(expr2);\n if (!vars.equal) {\n var message;\n if (vars.equalIgnoringCase) {\n message =\n \"Check your variables; one or more are using \" +\n \"the wrong case (upper or lower).\";\n } else {\n message =\n \"Check your variables; you may have used the wrong \" +\n \"letter for one or more of them.\";\n }\n return {\n equal: false,\n wrongVariableCase: vars.equalIgnoringCase,\n wrongVariableNames: !vars.equalIgnoringCase,\n message: message,\n };\n }\n\n // Semantic check\n if (!expr1.compare(expr2)) {\n return {equal: false, message: null};\n }\n\n // Syntactic check\n if (options.form && !expr1.sameForm(expr2)) {\n return {\n equal: false,\n message: \"Your answer is not in the correct form.\",\n };\n }\n\n // Syntactic check\n if (options.simplify && !expr1.isSimplified()) {\n return {\n equal: false,\n message: \"Your answer is not fully expanded and simplified.\",\n };\n }\n\n return {equal: true, message: null};\n};\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","type","magnitude","unit","$","num","denom","concat","name","pow","table","defaultActions","parseError","str","hash","recoverable","Error","parse","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","Array","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","n","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","i","flex","begin","condition","popState","pop","conditions","topState","Math","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","unitParser","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","Eq","Add","createOrAppend","Mul","handleNegative","fold","handleDivide","Log","natural","common","Trig","Pow","Var","Const","toLowerCase","Int","Number","Float","completeParse","addHint","sqrt","nthroot","Abs","Func","symbolLexer","console","log","abstract","print","error","message","isNaN","object","randomFloat","min","max","extent","random","ITERATIONS","TOLERANCE","Expr","_","extend","func","construct","instance","recurse","method","passed","map","arg","isString","eval","codegen","compile","code","Function","e","tex","asTex","defaults","display","dynamic","times","toString","repr","strip","normalize","expand","factor","collect","equals","other","simplify","once","step1","step2","step3","step4","simplified","isSimplified","exprArgs","filter","getVars","excludeFunc","uniq","flatten","invoke","sort","getConsts","getUnits","is","has","any","raiseToThe","exp","isSubtract","isDivide","isRoot","needsExplicitMul","sameVars","vars1","vars2","same","array1","array2","difference","lower","array","equal","equalIgnoringCase","compare","varList","union","getDelta","num1","num2","equalNumbers","delta","Unit","expr1","expr2","unitList1","unitList2","isEqual","vars","floor","useFloats","each","result1","partialEval","result2","toFixed","sameForm","findGCD","Num","One","getDenominator","asMul","isPositive","isNegative","asPositiveFactor","hint","expr","hints","clone","parens","asExpr","negate","Neg","Seq","terms","sortBy","term","partition","groupBy","numbers","others","identity","grouped","flattened","pluck","undefined","reduce","all","oldTerm","newTerm","indexOf","newTerms","isArray","remove","toArray","memo","pairs","muls","pair","collected","compact","sum","zip","coefficient","keepNegative","factors","rest","remainder","add","tmUnits","chain","value","a","b","localeCompare","cdot","inverses","inverse","number","negatives","numerator","isRational","Rational","withThisRemoved","splice","hasDenom","shouldPushDown","fraction","d","Div","subtract","entered","denominator","isAdd","isInverse","isInverseAdd","base","mul","hasAdd","hasInverseAdd","normals","adds","expanded","temp","factored","rational","partitioned","Zero","summed","isBasic","trigs","trig","logs","exprs","byArg","funcs","sin","cos","tan","cot","byBase","power","factorIn","negativeOne","factorOut","list","divide","isNum","find","left","right","negated","first","isInt","reversed","reverse","divided","last","initial","trigLog","open","newTrigLog","pos","neg","posOrNeg","some","every","firstNeg","firstNum","evaledBase","evaledExp","simplifiedExp","decimals","rationalExp","oddDenominator","oddNumerator","sign","bind","asDivide","isSimple","positive","signed","cache","indices","without","pick","isSimilarLog","preciseFloats","asRational","decimalsInBase","getDecimalPlaces","root","decimalsInRoot","newBase","isDiv","isSquaredTrig","expA","expB","Sqrt","radicand","degree","isNatural","Ten","functions","csc","sec","arcsin","asin","arccos","acos","arctan","atan","arccsc","arcsec","arccot","sinh","argStr","cosh","tanh","csch","sech","coth","isEven","contains","positives","signs","eq","unfactored","isZero","isInequality","isEquality","divideThrough","hasVar","isOne","dividedResult","eq1","eq2","solveLinearEquationForVariable","variable","Symbol","newVars","x","parsedFunc","parsed","subscript","sub","prettyPrint","prefix","PI","E","pi","gcd","toDecimalPlaces","parts","places","Sub","mod","constants","decimal_separator","unprefixify","baseUnits","derivedUnits","siPrefixes","keys","testPrefix","RegExp","test","prefixes","hasPrefixes","unitParse","parseResult","unitArray","unitSpec","coefArray","conversion","m","g","s","A","K","mol","cd","f","u","da","h","M","G","T","P","hella","hasntPrefixes","makeAlias","splits","coefficientStr","trim","unitsStr","numdenomStr","numdenom","Da","meter","meters","in","ft","yd","mi","ly","nmi","Å","pc","hr","day","wk","fortnight","shake","olympiad","kn","kt","knot","J","BTU","cal","eV","erg","W","N","lb","dyn","Pa","bar","atm","Torr","mmHg","ha","barn","acre","skilodge","outhouse","shed","L","gal","cup","qt","quart","pt","pint","tbsp","tsp","rev","deg","arcminute","Hu","dozen","percent","ppm","V","C","ampere","Ω","ohm","F","H","Wb","lm","lx","nit","sb","stilb","apostilb","blondel","asb","la","Lb","sk","skot","bril","Hz","form","wrongVariableCase","wrongVariableNames"],"mappings":"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C,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACqI,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAACC,IAAAA,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;AAACC,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"}