@khanacademy/kas 2.1.5 → 2.1.7

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/version.ts","../src/__genfiles__/unitparser.js","../src/__genfiles__/parser.js","../src/nodes.ts","../src/compare.ts"],"sourcesContent":["// This file is processed by a Rollup plugin (replace) to inject the production\n// version number during the release build.\n// In dev, you'll never see the version number.\n\nimport {addLibraryVersionToPerseusDebug} from \"@khanacademy/perseus-utils\";\n\nconst libName = \"@khanacademy/kas\";\nexport const libVersion = \"__lib_version__\";\n\naddLibraryVersionToPerseusDebug(libName, libVersion);\n","// 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 max-lines */\n/* eslint-disable prettier/prettier */\n/* eslint-disable import/order */\n/* TODO: fix these lint errors (http://eslint.org/docs/rules): */\n/* eslint-disable indent, no-undef, no-var, no-dupe-keys, no-new-func, no-redeclare, 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 (Sym)\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// reliably detect NaN\nconst isNaN = function (object) {\n return object !== object;\n};\n\nconst isInfinite = function (object) {\n return object === Infinity || object === -Infinity;\n};\n\n// return a random float between min (inclusive) and max (exclusive),\n// not that inclusivity means much, probabilistically, on floats\nconst randomFloat = function (min: number, max: number) {\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// NOTE(kevinb): _.partition exists in a more recent version of underscore.\n// To avoid having to update underscore I've added a hacky version of this\n// method here.\nfunction partition<T, V extends _.Collection<T>>(\n list: V,\n iteratee: _.CollectionIterator<T, boolean>,\n): [_.TypeOfCollection<V>[], _.TypeOfCollection<V>[]] {\n const a: _.TypeOfCollection<V>[] = [];\n const b: _.TypeOfCollection<V>[] = [];\n _.forEach(list, (elem, key, ctx) => {\n if (iteratee(elem, key, ctx)) {\n a.push(elem);\n } else {\n b.push(elem);\n }\n });\n return [a, b];\n}\n\nfunction isExpr(arg: string | Expr): arg is Expr {\n return arg instanceof Expr;\n}\n\nconst isAdd = function (term: Expr): term is Add {\n return term instanceof Add;\n};\n\nfunction isRational(arg: Expr): arg is Rational {\n return arg instanceof Rational;\n}\n\nfunction getFactors(expr: Expr): Expr[] {\n if (expr instanceof Mul) {\n return expr.terms;\n } else {\n return [expr];\n }\n}\n\ntype Hints = {\n parens?: boolean;\n divide?: boolean;\n root?: boolean;\n subtract?: boolean;\n fraction?: boolean;\n entered?: boolean;\n negate?: boolean;\n open?: boolean;\n};\n\ntype Vars = Record<string, string>;\n\ntype Options = {\n preciseFloats?: boolean;\n once?: boolean;\n};\n\n/* abstract base expression node */\nabstract class Expr {\n hints: Hints;\n\n constructor() {\n this.hints = {\n parens: false,\n };\n }\n\n // this node's immediate constructor\n // The `new (...args: any[]): any;` part of the type is a\n // \"construct\" signature. It indicates that `func` is a class.\n // See https://www.typescriptlang.org/docs/handbook/2/functions.html#construct-signatures.\n abstract func: {new (...args: any[]): any; name: string};\n\n // an array of the arguments to this node's immediate constructor\n abstract args(): (number | string | Expr | undefined)[];\n\n // make a new node with the given arguments\n construct(args: any[]) {\n const func = this.func;\n const instance = new func(...args);\n if (typeof instance === \"undefined\") {\n throw new Error(\"constructor function returning undefined\");\n }\n return instance;\n }\n\n // an abstraction for chainable, bottom-up recursion\n // NOTE(kevinb): This method is highly dynamic. It's possible that it\n // could be made more type-safe using overload signatures.\n recurse(method: string, ...passed: any[]): this {\n var args = this.args().map(function (arg) {\n return _.isString(arg) || _.isNumber(arg)\n ? arg\n : arg?.[method].apply(arg, passed);\n });\n return this.construct(args);\n }\n\n // evaluate numerically with given variable mapping\n // NOTE(kevin): This could made into an abstract method but\n // Eq doesn't implement it. This indicates that we probably\n // need to introduce another class in our hierarchy.\n eval(vars: Vars = {}, options?: ParseOptions): number {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n // NOTE(kevin): This could made into an abstract method but\n // Eq doesn't implement it. This indicates that we probably\n // need to introduce another class in our hierarchy.\n codegen(): string {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n compile(): (vars: Expr[]) => string {\n var code = this.codegen();\n try {\n // @ts-expect-error: TypeScript doesn't want to unify\n // `Function` with the `compile`'s return type.\n return new Function(\"vars\", \"return \" + code + \";\");\n } catch {\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 abstract print(): string;\n\n // returns a TeX string representing the expression\n abstract tex(): string;\n\n // returns a TeX string, modified by the given options\n asTex(options) {\n options = options || {};\n _.defaults(options, {\n display: true,\n dynamic: true,\n times: false,\n });\n\n let tex: string = 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\n name(): string {\n return this.func.name;\n }\n\n // returns a string representing current node structure\n repr(): string {\n return (\n this.name() +\n \"(\" +\n this.args()\n .map(function (arg) {\n return _.isString(arg) || _.isNumber(arg)\n ? arg\n : arg?.repr();\n })\n .join(\",\") +\n \")\"\n );\n }\n\n // removes all negative signs\n strip(): Expr {\n return this.recurse(\"strip\");\n }\n\n // canonically reorders all commutative elements\n normalize(): Expr {\n return this.recurse(\"normalize\");\n }\n\n // expands the expression\n expand(): Expr {\n return this.recurse(\"expand\");\n }\n\n // naively factors out like terms\n factor(options): Expr {\n return this.recurse(\"factor\", options);\n }\n\n // collect all like terms\n collect(options?: Options): Expr {\n return this.recurse(\"collect\", options);\n }\n\n // strict syntactic equality check\n equals(other: Expr): boolean {\n return this.normalize().print() === other.normalize().print();\n }\n\n // expand and collect until the expression no longer changes\n simplify(options?: Options) {\n options = {\n once: false,\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();\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() {\n return this.equals(this.simplify());\n }\n\n // return the child nodes of this node\n exprArgs(): Expr[] {\n // @ts-expect-error: Type 'string | number | Expr | undefined' is not assignable to type 'string | Expr'.\n return this.args().filter(isExpr);\n }\n\n // return the variables (function and non) within the expression\n getVars(excludeFunc?: boolean) {\n return _.uniq(\n _.flatten(_.invoke(this.exprArgs(), \"getVars\", excludeFunc)),\n ).sort();\n }\n\n getConsts() {\n return _.uniq(_.flatten(_.invoke(this.exprArgs(), \"getConsts\"))).sort();\n }\n\n getUnits() {\n return _.flatten(_.invoke(this.exprArgs(), \"getUnits\"));\n }\n\n // check whether this expression node is of a particular type\n is(func): boolean {\n return this instanceof func;\n }\n\n // check whether this expression has a particular node type\n has(func): boolean {\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(exp: Expr, options?: {preciseFloats?: boolean}): Expr {\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() {\n return false;\n }\n isDivide() {\n return false;\n }\n isRoot() {\n return false;\n }\n\n // whether this node needs an explicit multiplication sign if following a Num\n needsExplicitMul(): boolean {\n return this.exprArgs()[0].needsExplicitMul();\n }\n\n // check that the variables in both expressions are the same\n sameVars(other: Expr) {\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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(other: Expr) {\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: number, num2: number) {\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: number, num2: number) {\n var delta = getDelta(num1, num2);\n return (\n // Treat positive and negative infinity as equal. We want to\n // consider -1 / 0 equal to 1 / 0 so that 1 / (x - 1) is equal\n // to -1 / (1 - x) when we guess-and-check with x = 1.\n (isInfinite(num1) && isInfinite(num2)) ||\n (isNaN(num1) && isNaN(num2)) ||\n delta < Math.pow(10, -TOLERANCE)\n );\n };\n\n // If no variables, only need to evaluate once.\n // note(matthew) Seems to be an optimization for simple cases like `2+2=4`\n // where there are no variables / functions.\n // Ran into issues with it in LEMS-2777 and found that tests pass\n // with this removed, but keeping a modified version out of caution.\n const varAndFuncList = _.union(\n this.getVars(/* excludeFunc */ false),\n other.getVars(/* excludeFunc */ false),\n );\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!varAndFuncList.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 let equal;\n if (\n expr1.has(Func) ||\n expr2.has(Func) ||\n expr1.has(Unit) ||\n expr2.has(Unit)\n ) {\n const result1 = expr1.partialEval(vars);\n const result2 = expr2.partialEval(vars);\n\n equal = result1.simplify().equals(result2.simplify());\n } else {\n const result1 = expr1.eval(vars);\n const 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(vars: Vars): Expr {\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(other: Expr) {\n return this.strip().equals(other.strip());\n }\n\n // returns the GCD of this expression and the given factor\n findGCD(factor: Expr): Expr {\n return this.equals(factor) ? factor : NumOne;\n }\n\n // return this expression's denominator\n getDenominator(): Expr {\n return NumOne;\n }\n\n // return this expression as a Mul\n asMul() {\n return new Mul(NumOne, this);\n }\n\n // TODO(alex): rename to isDefinitePositive or similar?\n // return whether this expression is 100% positive\n isPositive(): boolean {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n // TODO(alex): rename to hasNegativeSign or similar?\n // return whether this expression has a negative sign\n isNegative() {\n return false;\n }\n\n // return a factor of this expression that is 100% positive\n asPositiveFactor(): Expr {\n return this.isPositive() ? this : NumOne;\n }\n\n // return a copy of the expression with a new hint set (preserves hints)\n addHint(hint: keyof Hints) {\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 // complete parse by performing a few necessary transformations\n completeParse(): Expr {\n return this.recurse(\"completeParse\");\n }\n\n abs(): Expr {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n negate(): Expr {\n return new Mul(NumNeg, this);\n }\n}\n\n/* abstract sequence node */\nabstract class Seq extends Expr {\n // This should always have at least two terms.\n // TODO(kevinb): Try enforcing this at the type-level using [T, T, T[]]\n terms: Expr[];\n\n // TODO(kevinb): Update this use `...args: Expr[]`\n constructor(...args: any[]) {\n super();\n if (args.length === 1) {\n this.terms = args[0];\n } else {\n this.terms = args;\n }\n }\n\n args() {\n return this.terms;\n }\n\n normalize() {\n var terms = _.sortBy(_.invoke(this.terms, \"normalize\"), (term) => {\n return term.print();\n });\n\n return new this.func(terms);\n }\n\n expand(): Expr {\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(): [Seq, Seq] {\n var [numbers, others] = partition(this.terms, (term) => {\n return term instanceof Num;\n });\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(): Expr {\n var type = this;\n var terms = _.reject(this.terms, (term) => {\n // @ts-expect-error: `identity` is defined on Add and Mul but doesn't\n // exist on Seq itself.\n return term.equals(type.identity);\n });\n\n if (terms.length === 0) {\n // @ts-expect-error: `identity` is defined on Add and Mul but doesn't\n // exist on Seq itself.\n return type.identity;\n }\n if (terms.length === 1) {\n return terms[0];\n }\n\n // same contains the children which are Seqs of the same type as this Seq\n const [same, others] = partition(terms, (term) => {\n return term instanceof type.func;\n });\n\n var flattened = others.concat(\n _.flatten(_.pluck(same, \"terms\"), /* shallow: */ true),\n );\n return new type.func(flattened);\n }\n\n // reduce a numeric sequence to a Num\n abstract reduce(options?: Options): Expr;\n\n isPositive() {\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(oldTerm: Expr | number, newTerm?: Expr | Expr[]) {\n const index =\n oldTerm instanceof Expr ? _.indexOf(this.terms, oldTerm) : oldTerm;\n\n var newTerms: Expr[] = [];\n if (Array.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(term: number | Expr) {\n return this.replace(term);\n }\n\n getDenominator(): Expr {\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 class Add extends Seq {\n identity: Num = NumZero;\n\n func = Add;\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return _.reduce(\n this.terms,\n (memo, term) => {\n return memo + term.eval(vars, options);\n },\n 0,\n );\n }\n\n codegen(): string {\n return (\n _.map(this.terms, (term) => {\n return \"(\" + term.codegen() + \")\";\n }).join(\" + \") || \"0\"\n );\n }\n\n print(): string {\n return _.invoke(this.terms, \"print\").join(\"+\");\n }\n\n tex(): string {\n let tex = \"\";\n\n _.each(this.terms, (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(options?: Options) {\n var terms = _.invoke(this.terms, \"collect\", options);\n var pairs: [expr: Expr, coefficient: Expr][] = [];\n\n _.each(terms, (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([NumOne, term]);\n } else {\n pairs.push([term, NumOne]);\n }\n });\n\n // { (Expr expr).print(): [[Expr expr, Num coefficient]] }\n var grouped = _.groupBy(pairs, (pair) => {\n return pair[0].normalize().print();\n });\n\n var collected = _.compact(\n _.map(grouped, (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(options: {keepNegative: boolean} = {keepNegative: false}) {\n const terms = this.terms.map((term) => term.collect());\n let factors: Expr[];\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), (term) => {\n factors = _.map(factors, (factor: Expr) => {\n return term.findGCD(factor);\n });\n });\n\n if (!options.keepNegative && this.isNegative()) {\n factors.push(NumNeg);\n }\n\n const left = new Mul(factors).flatten().collect();\n\n const remainder = terms.map((term) =>\n Mul.handleDivide(term, left).simplify(),\n );\n const right = new Add(remainder).flatten();\n\n return Mul.createOrAppend(left, right).flatten();\n }\n\n reduce(options?: Options): Expr {\n return _.reduce(\n this.terms,\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n (memo, term) => {\n return memo.add(term, options);\n },\n this.identity,\n );\n }\n\n needsExplicitMul() {\n return false;\n }\n\n isNegative() {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isNegative\"));\n }\n\n negate() {\n return new Add(_.invoke(this.terms, \"negate\"));\n }\n\n // create a new sequence unless left is already one (returns a copy)\n static createOrAppend(left: Expr, right: Expr) {\n if (left instanceof Add) {\n return new Add(left.terms.concat(right));\n } else {\n return new Add(left, right);\n }\n }\n}\n\n/* sequence of multiplicative terms */\nexport class Mul extends Seq {\n identity: Num = NumOne;\n\n func = Mul;\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return _.reduce(\n this.terms,\n (memo, term) => {\n return memo * term.eval(vars, options);\n },\n 1,\n );\n }\n\n codegen(): string {\n return (\n _.map(this.terms, (term) => {\n return \"(\" + term.codegen() + \")\";\n }).join(\" * \") || \"0\"\n );\n }\n\n print(): string {\n return _.map(this.terms, (term) => {\n return term instanceof Add\n ? \"(\" + term.print() + \")\"\n : term.print();\n }).join(\"*\");\n }\n\n getUnits() {\n var tmUnits = _(this.terms)\n .chain()\n .map((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(): string {\n var cdot = \" \\\\cdot \";\n\n var terms = _.groupBy(this.terms, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var inverses = terms.inverse || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var numbers: Num[] = (terms.number as Num[]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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: Expr[] = 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, (term) => {\n var shouldPushDown =\n !term.hints.fraction || inverses.length > 0;\n if (\n term instanceof Rational &&\n !(term instanceof Int) &&\n shouldPushDown\n ) {\n // e.g. 3x/4 -> 3/4*x (internally) -> 3x/4 (rendered)\n inverses.push(new Pow(new Int(term.d), NumDiv));\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, (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, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(): Expr {\n var terms = _.map(this.terms, (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(): Expr {\n const isInverse = function (term: Expr): term is Pow {\n return term instanceof Pow && term.exp.isNegative();\n };\n\n const isInverseAdd = function (term: Expr) {\n return isInverse(term) && isAdd(term.base);\n };\n\n const mul = this.recurse(\"expand\").flatten();\n const factors = getFactors(mul);\n\n const hasAdd = _.any(factors, isAdd);\n const hasInverseAdd = _.any(factors, isInverseAdd);\n\n if (!(hasAdd || hasInverseAdd)) {\n return mul;\n }\n\n let [inverses, normals] = partition(factors, isInverse);\n\n if (hasAdd) {\n const [adds, others] = partition(normals, isAdd);\n\n // loop over each additive sequence\n const expanded = _.reduce(\n adds as Add[],\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, (term) => array.concat(term)),\n );\n },\n [] as Expr[][],\n );\n },\n [[]] as Expr[][],\n );\n\n // join each fully expanded array of factors with remaining multiplicative factors\n const 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 const denominator = new Mul(\n _.invoke(inverses, \"getDenominator\"),\n ).flatten();\n inverses = [new Pow(denominator.expand(), NumDiv)];\n }\n\n return new Mul(normals.concat(inverses)).flatten();\n }\n\n factor(options): Expr {\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 [rationals, others] = partition(factored.terms, (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 const ratObj = _.reduce(\n rationals as Rational[],\n (memo, term) => {\n return {n: memo.n * term.n, d: memo.d * term.d};\n },\n {n: 1, d: 1},\n );\n\n const rational =\n ratObj.d === 1\n ? new Int(ratObj.n)\n : new Rational(ratObj.n, ratObj.d);\n\n return new Mul(others.concat(rational)).flatten();\n }\n\n collect(options?: Options): Expr {\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 NumZero;\n }\n\n const other = partitioned[1].flatten();\n\n // e.g. 2*2 -> 4\n // e.g. 2*2*x -> 4*x\n if (!(other instanceof Mul)) {\n return new Mul(number, other).flatten();\n }\n\n const others = other.terms;\n\n var pairs: [base: Expr, exp: Expr][] = [];\n\n _.each(others, (term) => {\n if (term instanceof Pow) {\n pairs.push([term.base, term.exp]);\n } else {\n pairs.push([term, NumOne]);\n }\n });\n\n // {(Expr base).print(): [[Expr base, Expr exp]]}\n var grouped = _.groupBy(pairs, (pair) => {\n return pair[0].normalize().print();\n });\n\n var summed: [base: Expr, exp: Expr][] = _.compact(\n _.map(grouped, (pairs): [Expr, Expr] | null => {\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 const groupedPairs = _.groupBy(summed, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let trigs = (groupedPairs.trig as [Trig, Expr][]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let logs = (groupedPairs.log as [Log, Expr][]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const exprs = groupedPairs.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, (pair) => {\n return pair[0].arg.normalize().print();\n });\n\n trigs = [];\n _.each(byArg, (pairs) => {\n const arg = pairs[0][0].arg;\n\n // {Trig.type: Expr exp}\n let funcs: Record<string, Expr> = {sin: NumZero, cos: NumZero};\n _.each(pairs, (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, (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, (pair) => {\n return pair[0].base.normalize().print();\n });\n\n logs = [];\n\n _.each(byBase, (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 var collected = _.map([...trigs, ...logs, ...exprs], (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() {\n return _.any(this.terms, (term) => {\n return term instanceof Num && Boolean(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(hint: keyof Hints): Expr {\n var partitioned = this.partition();\n // `partition` splits the terms into two Seqs - one containing\n // only Nums and the all non-Num nodes.\n var numbers = partitioned[0].terms as Num[];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var fold = numbers.length && _.all(numbers, (num) => num.n > 0);\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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() {\n var factored = false;\n var terms = _.compact(\n _.map(this.terms, (term) => {\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(options?: {preciseFloats: boolean}) {\n return _.reduce(\n this.terms,\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n (memo, term) => {\n return memo.mul(term, options);\n },\n this.identity,\n );\n }\n\n findGCD(factor: Expr): Expr {\n return new Mul(_.invoke(this.terms, \"findGCD\", factor)).flatten();\n }\n\n asMul() {\n return this;\n }\n\n asPositiveFactor(): Expr {\n if (this.isPositive()) {\n return this;\n } else {\n const terms = getFactors(this.collect()).map((factor) =>\n factor.asPositiveFactor(),\n );\n return new Mul(terms).flatten();\n }\n }\n\n isNegative() {\n const terms = getFactors(this.collect()).map((factor) =>\n factor.isNegative(),\n );\n return _.any(terms);\n }\n\n fold() {\n return Mul.fold(this);\n }\n\n negate() {\n var isNum = (expr: Expr) => {\n return expr instanceof Num;\n };\n const num = _.find(this.terms, isNum);\n if (num) {\n return this.replace(num, num.negate());\n } else {\n return new Mul([NumNeg].concat(this.terms));\n }\n }\n\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 static handleNegative(expr: Expr, hint?): Expr {\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 static handleDivide(left: Expr, right: Expr): Expr {\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 = (expr: Expr | undefined): expr is Int => {\n return expr instanceof Int;\n };\n var isRational = (expr: Expr | undefined): expr is Rational => {\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 = reversed.find(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 if (num.n < 0 && right.n < 0) {\n rational.d = -rational.d;\n return left.replace(num, [NumNeg, rational]);\n } else {\n return left.replace(num, rational);\n }\n }\n\n var divide = (a: Expr, b: Expr) => {\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 NumNeg,\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, NumDiv);\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 // NOTE(kevinb): `terms` should always have at least two\n // elements so getting the last element is safe to do.\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 static fold(expr: Expr): Expr {\n if (expr instanceof Mul) {\n // assuming that this will be second to last\n var trigLog = _.find(_.initial(expr.terms), (term) => {\n return (\n (term instanceof Trig || term instanceof Log) &&\n Boolean(term.hints.open)\n );\n }) as Trig | Log | undefined;\n\n if (trigLog) {\n // expr.terms should always have at least two terms\n const 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 const newTrigLog =\n trigLog instanceof Trig\n ? Trig.create(\n [trigLog.type, trigLog.exp],\n Mul.createOrAppend(trigLog.arg, last).fold(),\n )\n : Log.create(\n trigLog.base,\n Mul.createOrAppend(\n trigLog.power,\n last,\n ).fold(),\n );\n\n const index = _.indexOf(expr.terms, trigLog);\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 = (num: Num): boolean => {\n return num.n > 0;\n };\n var neg = (num: Num): boolean => {\n return num.n === -1 && Boolean(num.hints.negate);\n };\n var posOrNeg = function (num: Num): boolean {\n return pos(num) || neg(num);\n };\n\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n const posNum = numbers.find(pos);\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n const negNum = numbers.find(neg);\n if (\n numbers.length > 1 &&\n negNum &&\n posNum &&\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n _.every(numbers, posOrNeg)\n ) {\n var firstNeg = _.indexOf(expr.terms, negNum);\n var firstNum = _.indexOf(expr.terms, posNum);\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 // create a new sequence unless left is already one (returns a copy)\n static createOrAppend(left: Expr, right: Expr) {\n if (left instanceof Mul) {\n return new Mul(left.terms.concat(right));\n } else {\n return new Mul(left, right);\n }\n }\n}\n\n/* exponentiation */\nexport class Pow extends Expr {\n base: Expr;\n exp: Expr;\n\n constructor(base, exp) {\n super();\n this.base = base;\n this.exp = exp;\n }\n\n func = Pow;\n\n args() {\n return [this.base, this.exp];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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() {\n return this.base.getUnits().map((unit) => {\n return {\n unit: unit.unit,\n // Exponents in units should always be integers\n pow: unit.pow * (this.exp as Int).n,\n };\n });\n }\n\n codegen(): string {\n return (\n \"Math.pow(\" + this.base.codegen() + \", \" + this.exp.codegen() + \")\"\n );\n }\n\n print(): string {\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(): string {\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() && isRational(this.exp)) {\n if (this.exp.n !== 1) {\n throw new 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.texSplit();\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() {\n return this.isRoot() ? false : this.base.needsExplicitMul();\n }\n\n expand() {\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, (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, NumDiv);\n };\n\n // compute and cache powers of 2 up to n\n const cache: Record<number, Expr> = {1: pow.base};\n for (var i = 2; i <= n; i *= 2) {\n const 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 (n in cache) {\n return signed(cache[n]);\n }\n\n // otherwise decompose n into powers of 2 ...\n let 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 const factors: Expr[] = [];\n for (const index of indices) {\n if (index in cache) {\n factors.push(cache[index]);\n }\n }\n const mul = new Mul(factors).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 const terms = _.map(pow.exp.terms, (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() {\n var pow = this.recurse(\"factor\");\n if (pow.base instanceof Mul) {\n var terms = _.map(pow.base.terms, (term) => {\n if (term instanceof Int && pow.exp.equals(NumDiv)) {\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(options?: Options): Expr {\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 const base = this.base.base;\n const exp = Mul.createOrAppend(this.base.exp, this.exp);\n return new Pow(base, exp).collect(options);\n }\n\n const pow = this.recurse(\"collect\", options);\n\n const isSimilarLog = function (term: Expr): term is Log {\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 NumOne;\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 // `log` will always be defined here because of the\n // `_.any(pow.exp.terms, isSimilarLog)` check above.\n const log = pow.exp.terms.find(isSimilarLog)!;\n const base = log.power;\n const 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 const exp = pow.exp.asRational();\n const decimalsInBase = pow.base.getDecimalPlaces();\n const root = new Pow(pow.base, new Rational(1, exp.d));\n const decimalsInRoot: number = root\n .collect()\n // @ts-expect-error: we assume that `root.collect()` returns\n // a Num here but tbh I'm not sure how this code isn't causing\n // an infinite loop.\n .getDecimalPlaces();\n\n if (decimalsInRoot > decimalsInBase) {\n // Collecting over this denominator would result in an\n // imprecise float, so avoid doing so.\n const 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() {\n var isDiv = function (arg: Expr) {\n return arg instanceof Num && Boolean(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() {\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 throw new Error(\n \"called asDivide() on an Expr that wasn't a Num or Mul\",\n );\n }\n }\n\n isRoot(): boolean {\n return this.exp instanceof Rational && Boolean(this.exp.hints.root);\n }\n\n isSquaredTrig() {\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() {\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 NumOne;\n }\n }\n\n findGCD(factor: Expr): Expr {\n const [base, exp] =\n factor instanceof Pow\n ? [factor.base, factor.exp]\n : [factor, NumOne];\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 NumOne;\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 NumOne;\n }\n\n isPositive() {\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(): Expr {\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 NumOne;\n }\n }\n\n static sqrt(arg: Expr) {\n return new Pow(arg, NumSqrt);\n }\n\n // NOTE(kevinb): nthroot is used as a constructor so we need to\n // define it as a static property instead of a static method.\n // TODO(kevinb): update parser-generator.ts to call nthrooth\n // without using `new`.\n static nthroot = function (radicand: Expr, degree: Expr) {\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 class Log extends Expr {\n base: Expr;\n power: Expr;\n\n constructor(base: Expr, power: Expr) {\n super();\n this.base = base;\n this.power = power;\n this.hints = {\n ...this.hints,\n open: false,\n };\n }\n\n func = Log;\n\n args() {\n return [this.base, this.power];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return (\n Math.log(this.power.eval(vars, options)) /\n Math.log(this.base.eval(vars, options))\n );\n }\n\n codegen(): string {\n return (\n \"(Math.log(\" +\n this.power.codegen() +\n \") / Math.log(\" +\n this.base.codegen() +\n \"))\"\n );\n }\n\n print(): string {\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(): string {\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(options?: Options): Expr {\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 NumZero;\n } else if (log.base.equals(log.power)) {\n // e.g. log_b(b) -> 1\n return NumOne;\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() {\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, (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 isPositive() {\n var log = this.collect();\n\n if (\n log instanceof Log &&\n log.base instanceof Num &&\n log.power instanceof Num\n ) {\n return this.eval() > 0;\n } else {\n return false;\n }\n }\n\n needsExplicitMul() {\n return false;\n }\n\n isNatural() {\n return this.base.equals(Const.e);\n }\n\n static natural() {\n return Const.e;\n }\n\n static common() {\n return NumTen;\n }\n\n static create(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\ntype TrigFunc = {\n eval: (arg: number) => number;\n codegen: string | ((argStr: string) => string);\n tex: string;\n expand?: () => Expr;\n};\n\n/* trigonometric functions */\nexport class Trig extends Expr {\n type: string; // TODO(kevinb): Use a union type for this\n arg: Expr;\n exp?: Expr;\n\n constructor(type: string, arg: Expr) {\n super();\n this.type = type;\n this.arg = arg;\n this.hints = {\n ...this.hints,\n open: false,\n };\n }\n\n func = Trig;\n\n args() {\n return [this.type, this.arg];\n }\n\n // TODO(kevinb): Use union type for the function names.\n functions: Record<string, TrigFunc> = {\n sin: {\n eval: Math.sin,\n codegen: \"Math.sin((\",\n tex: \"\\\\sin\",\n expand: () => this,\n },\n cos: {\n eval: Math.cos,\n codegen: \"Math.cos((\",\n tex: \"\\\\cos\",\n expand: () => this,\n },\n tan: {\n eval: Math.tan,\n codegen: \"Math.tan((\",\n tex: \"\\\\tan\",\n expand: () =>\n Mul.handleDivide(Trig.sin(this.arg), Trig.cos(this.arg)),\n },\n csc: {\n eval: (arg: number) => {\n return 1 / Math.sin(arg);\n },\n codegen: \"(1/Math.sin(\",\n tex: \"\\\\csc\",\n expand: () => Mul.handleDivide(NumOne, Trig.sin(this.arg)),\n },\n sec: {\n eval: (arg: number) => {\n return 1 / Math.cos(arg);\n },\n codegen: \"(1/Math.cos(\",\n tex: \"\\\\sec\",\n expand: () => Mul.handleDivide(NumOne, Trig.cos(this.arg)),\n },\n cot: {\n eval: (arg: number) => {\n return 1 / Math.tan(arg);\n },\n codegen: \"(1/Math.tan(\",\n tex: \"\\\\cot\",\n expand: () =>\n Mul.handleDivide(Trig.cos(this.arg), Trig.sin(this.arg)),\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: (arg: number) => {\n return Math.asin(1 / arg);\n },\n codegen: \"Math.asin(1/(\",\n tex: \"\\\\operatorname{arccsc}\",\n },\n arcsec: {\n eval: (arg: number) => {\n return Math.acos(1 / arg);\n },\n codegen: \"Math.acos(1/(\",\n tex: \"\\\\operatorname{arcsec}\",\n },\n arccot: {\n eval: (arg: number) => {\n return Math.atan(1 / arg);\n },\n codegen: \"Math.atan(1/(\",\n tex: \"\\\\operatorname{arccot}\",\n },\n sinh: {\n eval: (arg: number) => {\n return (Math.exp(arg) - Math.exp(-arg)) / 2;\n },\n codegen: (argStr: string) => {\n return (\n \"((Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\sinh\",\n expand: () => this,\n },\n cosh: {\n eval: (arg: number) => {\n return (Math.exp(arg) + Math.exp(-arg)) / 2;\n },\n codegen: (argStr: string) => {\n return (\n \"((Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\cosh\",\n expand: () => this,\n },\n tanh: {\n eval: (arg: number) => {\n return (\n (Math.exp(arg) - Math.exp(-arg)) /\n (Math.exp(arg) + Math.exp(-arg))\n );\n },\n codegen: (argStr: string) => {\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: () =>\n Mul.handleDivide(Trig.sinh(this.arg), Trig.cosh(this.arg)),\n },\n csch: {\n eval: (arg: number) => {\n return 2 / (Math.exp(arg) - Math.exp(-arg));\n },\n codegen: (argStr: string) => {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\csch\",\n expand: () => Mul.handleDivide(NumOne, Trig.sinh(this.arg)),\n },\n sech: {\n eval: (arg: number) => {\n return 2 / (Math.exp(arg) + Math.exp(-arg));\n },\n codegen: (argStr: string) => {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\sech\",\n expand: () => Mul.handleDivide(NumOne, Trig.cosh(this.arg)),\n },\n coth: {\n eval: (arg: number) => {\n return (\n (Math.exp(arg) + Math.exp(-arg)) /\n (Math.exp(arg) - Math.exp(-arg))\n );\n },\n codegen: (argStr: string) => {\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: () =>\n Mul.handleDivide(Trig.cosh(this.arg), Trig.sinh(this.arg)),\n },\n };\n\n isEven() {\n return _.contains([\"cos\", \"sec\"], this.type);\n }\n\n isInverse() {\n return this.type.indexOf(\"arc\") === 0;\n }\n\n isBasic() {\n return _.contains([\"sin\", \"cos\"], this.type);\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n var func = this.functions[this.type].eval;\n var arg = this.arg.eval(vars, options);\n return func(arg);\n }\n\n codegen(): string {\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(): string {\n return this.type + \"(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return func + arg;\n }\n\n texSplit(): [func: string, arg: string] {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return [func, arg];\n }\n\n isPositive() {\n var trig = this.collect();\n\n if (trig instanceof Trig && trig.arg instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n }\n\n completeParse(): Expr {\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() {\n return false;\n }\n\n expand() {\n var trig = this.recurse(\"expand\");\n if (!trig.isInverse()) {\n // e.g. tan(x) -> sin(x)/cos(x)\n // NOTE(kevinb): All non-inverse trig functions have an expand property.\n var expand = trig.functions[trig.type].expand!;\n return _.bind(expand, trig)();\n } else {\n return trig;\n }\n }\n\n collect(options?: Options): Expr {\n var trig = this.recurse(\"collect\", options);\n if (!trig.isInverse() && trig.arg.isNegative()) {\n const arg =\n trig.arg instanceof Num\n ? trig.arg.abs()\n : Mul.handleDivide(trig.arg, NumNeg).collect(options);\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(NumNeg, new Trig(trig.type, arg));\n }\n } else {\n return trig;\n }\n }\n\n static create(pair, arg) {\n var type = pair[0];\n var exp = pair[1];\n\n if (exp && exp.equals(NumNeg)) {\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 static sin(arg: Expr) {\n return new Trig(\"sin\", arg);\n }\n\n static cos(arg: Expr) {\n return new Trig(\"cos\", arg);\n }\n\n static sinh(arg: Expr) {\n return new Trig(\"sinh\", arg);\n }\n\n static cosh(arg: Expr) {\n return new Trig(\"cosh\", arg);\n }\n}\n\nexport class Abs extends Expr {\n arg: Expr;\n\n constructor(arg: Expr) {\n super();\n this.arg = arg;\n }\n\n func = Abs;\n\n args() {\n return [this.arg];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return Math.abs(this.arg.eval(vars, options));\n }\n\n codegen(): string {\n return \"Math.abs(\" + this.arg.codegen() + \")\";\n }\n\n print(): string {\n return \"abs(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n return \"\\\\left|\" + this.arg.tex() + \"\\\\right|\";\n }\n\n collect(options): Expr {\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, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(): Expr {\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, (term) => {\n return new Abs(term);\n });\n return new Mul(terms);\n } else {\n return abs;\n }\n }\n\n isPositive() {\n return true;\n }\n}\n\n/* equation */\nexport class Eq extends Expr {\n left: Expr;\n type: string; // TODO(kevinb): use an enum for this\n right: Expr;\n\n constructor(left: Expr, type: string, right: Expr) {\n super();\n this.left = left;\n this.type = type;\n this.right = right;\n }\n\n func = Eq;\n\n args() {\n return [this.left, this.type, this.right];\n }\n\n needsExplicitMul() {\n return false;\n }\n\n print(): string {\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(): string {\n return this.left.tex() + this.signs[this.type] + this.right.tex();\n }\n\n normalize() {\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(unfactored: boolean = false): Expr {\n var isZero = (expr: Expr) => {\n return expr instanceof Num && expr.isSimple() && expr.eval() === 0;\n };\n\n // first convert to a sequence of additive terms\n let terms: Expr[] = [];\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(NumOne)) {\n terms = _.map(terms, (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(expr: Expr) {\n const isInequality = !this.isEquality();\n\n const simplified = expr.simplify({once: true});\n const factored = simplified.factor({keepNegative: isInequality});\n\n if (!(factored instanceof Mul)) {\n return expr;\n }\n\n const terms = factored.terms;\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const hasVar = (term: Expr) => !!term.getVars().length;\n const isOne = (term: Expr) => term.equals(NumOne);\n\n const [adds, others] = partition(terms, isAdd);\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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 let denominator = others;\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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, (term) => {\n return new Pow(term, NumDiv);\n });\n\n const 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() {\n return _.contains([\"=\", \"<>\"], this.type);\n }\n\n compare(other: Eq) {\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(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() {\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 // Assumptions: Expression is of the form a+bx, and we solve for x\n solveLinearEquationForVariable(variable) {\n var expr = this.asExpr();\n if (!(expr instanceof 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 = (term: Expr) => {\n return term.has(Var) && _.contains(term.getVars(), variable.symbol);\n };\n\n const termHasVar = hasVar(expr.terms[0]);\n const a = termHasVar\n ? Mul.handleNegative(expr.terms[1])\n : Mul.handleNegative(expr.terms[0]);\n const b = termHasVar\n ? Mul.handleDivide(expr.terms[0], variable)\n : Mul.handleDivide(expr.terms[1], variable);\n\n return Mul.handleDivide(a, b).simplify();\n }\n}\n\n/* abstract symbol node */\nabstract class Sym extends Expr {\n needsExplicitMul() {\n return false;\n }\n\n findGCD(factor: Expr): Expr {\n if (factor instanceof Sym || factor instanceof Num) {\n return this.equals(factor) ? this : NumOne;\n } else {\n return factor.findGCD(this);\n }\n }\n}\n\n/* function variable */\nexport class Func extends Sym {\n symbol: string;\n arg: Expr;\n\n constructor(symbol: string, arg: Expr) {\n super();\n this.symbol = symbol;\n this.arg = arg;\n }\n\n func = Func;\n\n args() {\n return [this.symbol, this.arg];\n }\n\n print(): string {\n return this.symbol + \"(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n return this.symbol + \"(\" + this.arg.tex() + \")\";\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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(): string {\n return 'vars[\"' + this.symbol + '\"](' + this.arg.codegen() + \")\";\n }\n\n getUnits() {\n return this.arg.getUnits();\n }\n\n getVars(excludeFunc: boolean) {\n if (excludeFunc) {\n return this.arg.getVars();\n } else {\n return _.union(this.arg.getVars(), [this.symbol]).sort();\n }\n }\n\n getConsts() {\n return this.arg.getConsts();\n }\n}\n\n/* variable */\nexport class Var extends Sym {\n symbol: string;\n subscript?: Expr;\n\n constructor(symbol: string, subscript?: Expr) {\n super();\n this.symbol = symbol;\n this.subscript = subscript;\n }\n\n func = Var;\n\n args() {\n return [this.symbol, this.subscript];\n }\n\n exprArgs() {\n return [];\n }\n\n recurse() {\n return this;\n }\n\n print(): string {\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() {\n var sub = this.subscript;\n if (sub && (sub instanceof Num || sub instanceof Sym)) {\n return this.symbol + \"_\" + sub.print();\n } else {\n return this.print();\n }\n }\n\n tex(): string {\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() {\n return \"Var(\" + this.print() + \")\";\n }\n\n eval(vars: Vars = {}, options?: ParseOptions): number {\n // @ts-expect-error: values is Vars are strings, but here\n // we expect them to be numbers. We should probably store\n // Var and Func entries separately in the Vars type so that\n // they can be typed correctly.\n return vars[this.prettyPrint()];\n }\n\n codegen(): string {\n return 'vars[\"' + this.prettyPrint() + '\"]';\n }\n\n getVars() {\n return [this.prettyPrint()];\n }\n\n isPositive() {\n return false;\n }\n}\n\n/* constant */\nexport class Const extends Sym {\n symbol: string;\n\n constructor(symbol: string) {\n super();\n this.symbol = symbol;\n }\n\n func = Const;\n\n args() {\n return [this.symbol];\n }\n\n recurse() {\n return this;\n }\n\n eval(vars: Vars = {}, options?: ParseOptions): number {\n if (this.symbol === \"pi\") {\n return Math.PI;\n } else if (this.symbol === \"e\") {\n return Math.E;\n } else {\n // @ts-expect-error: should we throw an error here?\n return undefined;\n }\n }\n\n codegen(): string {\n if (this.symbol === \"pi\") {\n return \"Math.PI\";\n } else if (this.symbol === \"e\") {\n return \"Math.E\";\n } else {\n // @ts-expect-error: should we throw an error here?\n return undefined;\n }\n }\n\n print(): string {\n return this.symbol;\n }\n\n tex(): string {\n if (this.symbol === \"pi\") {\n return \"\\\\pi \";\n } else if (this.symbol === \"e\") {\n return \"e\";\n } else {\n // @ts-expect-error: should we return this.symbol here?\n return undefined;\n }\n }\n\n isPositive() {\n return this.eval() > 0;\n }\n\n abs() {\n if (this.eval() > 0) {\n return this;\n } else {\n return Mul.handleNegative(this);\n }\n }\n\n getConsts() {\n return [this.print()];\n }\n\n static e = new Const(\"e\");\n static pi = new Const(\"pi\");\n}\n\n/* abstract number node */\nabstract class Num extends Expr {\n n: number = 0;\n\n constructor() {\n super();\n // hints for interpreting and rendering user input\n this.hints = {\n ...this.hints,\n negate: false,\n subtract: false,\n divide: false,\n root: false,\n fraction: false,\n entered: false,\n };\n }\n\n repr() {\n return this.print();\n }\n\n strip() {\n return this.abs();\n }\n\n recurse() {\n return this;\n }\n\n codegen(): string {\n return this.print();\n }\n\n // takes another Num and returns a new Num\n abstract add(other: Expr, options?: Options): Expr;\n\n abstract mul(other: Expr, options?: Options): Expr;\n\n // returns this Num's additive inverse\n abstract negate(): Expr;\n\n isSubtract(): boolean {\n return Boolean(this.hints.subtract);\n }\n\n // return the absolute value of the number\n abstract abs(): Num;\n\n needsExplicitMul(): boolean {\n return true;\n }\n\n abstract findGCD(factor: Expr): Expr;\n\n isPositive(): boolean {\n return this.eval() > 0;\n }\n\n isNegative(): boolean {\n return this.eval() < 0;\n }\n\n asPositiveFactor(): Num {\n return this.isPositive() ? this : this.abs();\n }\n\n // whether a number is considered simple (one term)\n // e.g. for reals, ints and floats are simple\n abstract isSimple(): boolean;\n\n // Based on http://stackoverflow.com/a/10454560/2571482\n getDecimalPlaces() {\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 abstract asRational(): Rational;\n\n static negativeOne(hint) {\n if (hint === \"subtract\") {\n return NumSub;\n } else if (hint === \"divide\") {\n return NumDiv;\n } else {\n return NumNeg;\n }\n }\n\n // find the greatest common denominator\n static findGCD(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 static min(...args: Expr[]) {\n return _.min(args, (num) => num.eval());\n }\n\n static max(...args: Expr[]) {\n return _.max(args, (num) => num.eval());\n }\n}\n\n/* rational number (n: numerator, d: denominator) */\nexport class Rational extends Num {\n n: number;\n d: number;\n\n constructor(numerator: number, denominator: number) {\n super();\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 }\n\n func = Rational;\n\n args() {\n return [this.n, this.d];\n }\n\n eval() {\n return this.n / this.d;\n }\n\n print(): string {\n return this.n.toString() + \"/\" + this.d.toString();\n }\n\n tex(): string {\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(num: Num, options?: {preciseFloats: boolean}) {\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(num: Num, options?: {preciseFloats: boolean}) {\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() {\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() {\n return new Rational(-this.n, this.d);\n }\n\n abs() {\n return new Rational(Math.abs(this.n), this.d);\n }\n\n findGCD(factor: Expr): Expr {\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(exp: Expr) {\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() {\n return new Int(this.d);\n }\n\n isSimple(): boolean {\n return false;\n }\n\n asRational(): Rational {\n return this;\n }\n}\n\n/* integer (n: numerator/number) */\nexport class Int extends Rational {\n constructor(number: number) {\n super(number, 1);\n }\n\n func = Int;\n\n args() {\n return [this.n];\n }\n\n print(): string {\n return this.n.toString();\n }\n\n tex(): string {\n return this.n.toString();\n }\n\n negate() {\n return new Int(-this.n);\n }\n\n abs() {\n return new Int(Math.abs(this.n));\n }\n\n isSimple() {\n return true;\n }\n\n findGCD(factor: Expr): Expr {\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 static create(n: number) {\n return new Int(n).addHint(\"entered\");\n }\n}\n\n/* float (n: number) */\nexport class Float extends Num {\n n: number;\n\n constructor(number: number) {\n super();\n this.n = number;\n }\n\n func = Float;\n\n args() {\n return [this.n];\n }\n\n eval() {\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(): string {\n return this.n.toString();\n }\n\n tex(): string {\n return this.n.toString();\n }\n\n add(num: Num, options?: {preciseFloats: boolean}): Num {\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(num: Num, options?: {preciseFloats: boolean}): Num {\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(options?: Options): Float {\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(): Float {\n return new Float(-this.n);\n }\n\n abs() {\n return new Float(Math.abs(this.n));\n }\n\n findGCD(factor: Expr): Expr {\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(exp: Expr, options?: {preciseFloats?: boolean}) {\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(): Rational {\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() {\n return this.asRational().getDenominator();\n }\n\n isSimple() {\n return true;\n }\n\n static create(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 static toDecimalPlaces(n, places) {\n return new Float(+n.toFixed(Math.min(places, 20))).collect();\n }\n}\n\nconst NumNeg = new Int(-1).addHint(\"negate\");\nconst NumSub = new Int(-1).addHint(\"subtract\");\nconst NumDiv = new Int(-1).addHint(\"divide\");\n\nconst NumSqrt = new Rational(1, 2).addHint(\"root\");\n\nconst NumZero = new Int(0);\nconst NumOne = new Int(1);\nconst NumTen = new Int(10);\n\nvar parseError = function (str: string, 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\ntype ParseOptions = {\n functions?: ReadonlyArray<string>;\n decimal_separator?: string;\n divide_symbol?: string;\n};\n\nexport const parse = function (input: string, options?: ParseOptions) {\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 // If ':' is the divide symbol in your country, replace any ':'s\n // with '/'s.\n if (options && options.divide_symbol) {\n input = input.split(options.divide_symbol).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 as Error).message};\n }\n};\n\n/* unit */\nexport class Unit extends Sym {\n symbol: string;\n\n constructor(symbol: string) {\n super();\n this.symbol = symbol;\n }\n\n func = Unit;\n\n args() {\n return [this.symbol];\n }\n\n recurse() {\n return this;\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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() {\n return [{unit: this.symbol, pow: 1}];\n }\n\n codegen(): string {\n return \"1\";\n }\n\n print(): string {\n return this.symbol;\n }\n\n tex(): string {\n return this.symbol;\n }\n\n // Simplify units by replacing prefixes with multiplication\n collect(options?: 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\n// If possible, replace unit prefixes with a multiplication.\n//\n// \"g\" -> Unit(\"g\")\n// \"kg\" -> 1000 * Unit(\"g\")\nvar unprefixify = function (symbol: string) {\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((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: string) {\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 const unitArray: Pow[] = [];\n\n _(parseResult.unit.num).each((unitSpec) => {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(unitSpec.pow)),\n );\n });\n\n _(parseResult.unit.denom).each((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: Expr[] = [\n new Float(+parseResult.magnitude),\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 as Error).message};\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.\nconst hasPrefixes = \"hasPrefixes\";\nconst hasntPrefixes = \"hasntPrefixes\";\n\ntype Prefixes = typeof hasPrefixes | typeof hasntPrefixes;\n\nconst makeAlias = function (str: string, prefixes: Prefixes) {\n var splits = str.split(\"|\");\n var coefficientStr = splits[0].trim();\n var unitsStr = splits[1].trim();\n\n var coefficient = NumOne;\n if (coefficientStr !== \"\") {\n coefficient = parse(coefficientStr).expr;\n }\n\n var numdenomStr = unitsStr.split(\"/\");\n var numdenom: Expr[] = [coefficient];\n\n if (numdenomStr[0]) {\n numdenomStr[0]\n .split(\" \")\n .filter((x) => x !== \"\")\n .forEach((x) => numdenom.push(new Unit(x)));\n }\n\n if (numdenomStr[1]) {\n numdenomStr[1]\n .split(\" \")\n .filter((x) => x !== \"\")\n .forEach((x) => numdenom.push(new Pow(new Unit(x), NumDiv)));\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 = NumZero;\nexport const One = NumOne;\n","import type {CompareOptions, CompareResult, Expression} from \"./types\";\n\n/**\n * Compares two expressions for equality.\n *\n * Assumes that both expressions have already been parsed.\n */\n// TODO(alex): be able to pass a random() function to compare()\nexport const compare = function (\n expr1: Expression,\n expr2: Expression,\n options: Partial<CompareOptions> = {},\n): CompareResult {\n const defaults: CompareOptions = {\n form: false,\n simplify: false,\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 const optionsWithDefaults: CompareOptions = {\n ...defaults,\n ...options,\n };\n\n // TODO(CP-1614): Figure out how to make these messages translatable\n\n // Variable check\n const vars = expr1.sameVars(expr2);\n if (!vars.equal) {\n let 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 (optionsWithDefaults.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 (optionsWithDefaults.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":["libName","libVersion","addLibraryVersionToPerseusDebug","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","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","isNaN","object","isInfinite","Infinity","randomFloat","min","max","extent","random","ITERATIONS","TOLERANCE","partition","list","iteratee","a","b","_","forEach","elem","key","ctx","isExpr","arg","Expr","isAdd","term","isRational","Rational","getFactors","expr","terms","construct","func","instance","recurse","method","passed","map","isString","isNumber","eval","vars","print","codegen","compile","code","Function","asTex","defaults","display","dynamic","times","tex","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","varAndFuncList","Unit","expr1","expr2","unitList1","unitList2","isEqual","floor","useFloats","each","result1","partialEval","result2","toFixed","sameForm","findGCD","NumOne","getDenominator","asMul","isPositive","isNegative","asPositiveFactor","hint","hints","clone","negate","NumNeg","constructor","parens","Seq","sortBy","numbers","others","Num","identity","flattened","pluck","all","oldTerm","newTerm","indexOf","newTerms","isArray","remove","reduce","memo","pairs","muls","grouped","groupBy","pair","collected","compact","sum","zip","coefficient","keepNegative","factors","rest","left","remainder","right","add","NumZero","tmUnits","chain","value","localeCompare","cdot","inverses","inverse","number","negatives","numerator","withThisRemoved","splice","shouldPushDown","fraction","d","NumDiv","subtract","entered","denominator","isInverse","isInverseAdd","base","mul","hasAdd","hasInverseAdd","normals","adds","expanded","temp","factored","rationals","ratObj","rational","partitioned","summed","groupedPairs","isBasic","trigs","trig","logs","exprs","byArg","funcs","sin","cos","tan","cot","byBase","power","Boolean","factorIn","negativeOne","factorOut","divide","isNum","find","negated","first","isInt","reversed","reverse","undefined","divided","last","initial","trigLog","open","newTrigLog","pos","neg","posOrNeg","posNum","negNum","every","firstNeg","firstNum","evaledBase","evaledExp","simplifiedExp","decimals","toString","rationalExp","oddDenominator","oddNumerator","sign","asDivide","isSimple","texSplit","positive","signed","cache","indices","without","isSimilarLog","preciseFloats","asRational","decimalsInBase","getDecimalPlaces","root","decimalsInRoot","newBase","isDiv","isSquaredTrig","expA","expB","NumSqrt","radicand","degree","isNatural","e","NumTen","isEven","contains","functions","bind","sinh","cosh","csc","sec","arcsin","asin","arccos","acos","arctan","atan","arccsc","arcsec","arccot","argStr","tanh","csch","sech","coth","positives","signs","eq","asExpr","unfactored","isZero","isInequality","isEquality","divideThrough","hasVar","isOne","dividedResult","eq1","eq2","solveLinearEquationForVariable","variable","termHasVar","Sym","newVars","extend","x","parsedFunc","parsed","subscript","sub","prettyPrint","prefix","PI","E","pi","NumSub","mod","gcd","toDecimalPlaces","parts","places","constants","decimal_separator","divide_symbol","error","message","baseUnits","derivedUnits","conversion","unprefixify","siPrefixes","keys","RegExp","testPrefix","test","prefixes","hasPrefixes","unitParse","parseResult","unitArray","unitSpec","coefArray","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","Zero","One","form","optionsWithDefaults","wrongVariableCase","wrongVariableNames"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/version.ts","../src/__genfiles__/unitparser.js","../src/__genfiles__/parser.js","../src/nodes.ts","../src/compare.ts"],"sourcesContent":["// This file is processed by a Rollup plugin (replace) to inject the production\n// version number during the release build.\n// In dev, you'll never see the version number.\n\nimport {addLibraryVersionToPerseusDebug} from \"@khanacademy/perseus-utils\";\n\nconst libName = \"@khanacademy/kas\";\nexport const libVersion = \"__lib_version__\";\n\naddLibraryVersionToPerseusDebug(libName, libVersion);\n","// 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 max-lines */\n/* eslint-disable prettier/prettier */\n/* eslint-disable import/order */\n/* TODO: fix these lint errors (http://eslint.org/docs/rules): */\n/* eslint-disable indent, no-undef, no-var, no-dupe-keys, no-new-func, no-redeclare, 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 (Sym)\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// reliably detect NaN\nconst isNaN = function (object) {\n return object !== object;\n};\n\nconst isInfinite = function (object) {\n return object === Infinity || object === -Infinity;\n};\n\n// return a random float between min (inclusive) and max (exclusive),\n// not that inclusivity means much, probabilistically, on floats\nconst randomFloat = function (min: number, max: number) {\n var extent = max - min;\n // eslint-disable-next-line no-restricted-properties\n return Math.random() * extent + min;\n};\n\n/* constants */\nvar ITERATIONS = 12;\nvar TOLERANCE = 9; // decimal places\n\n// NOTE(kevinb): _.partition exists in a more recent version of underscore.\n// To avoid having to update underscore I've added a hacky version of this\n// method here.\nfunction partition<T, V extends _.Collection<T>>(\n list: V,\n iteratee: _.CollectionIterator<T, boolean>,\n): [_.TypeOfCollection<V>[], _.TypeOfCollection<V>[]] {\n const a: _.TypeOfCollection<V>[] = [];\n const b: _.TypeOfCollection<V>[] = [];\n _.forEach(list, (elem, key, ctx) => {\n if (iteratee(elem, key, ctx)) {\n a.push(elem);\n } else {\n b.push(elem);\n }\n });\n return [a, b];\n}\n\nfunction isExpr(arg: string | Expr): arg is Expr {\n return arg instanceof Expr;\n}\n\nconst isAdd = function (term: Expr): term is Add {\n return term instanceof Add;\n};\n\nfunction isRational(arg: Expr): arg is Rational {\n return arg instanceof Rational;\n}\n\nfunction getFactors(expr: Expr): Expr[] {\n if (expr instanceof Mul) {\n return expr.terms;\n } else {\n return [expr];\n }\n}\n\ntype Hints = {\n parens?: boolean;\n divide?: boolean;\n root?: boolean;\n subtract?: boolean;\n fraction?: boolean;\n entered?: boolean;\n negate?: boolean;\n open?: boolean;\n};\n\ntype Vars = Record<string, string>;\n\ntype Options = {\n preciseFloats?: boolean;\n once?: boolean;\n};\n\n/* abstract base expression node */\nabstract class Expr {\n hints: Hints;\n\n constructor() {\n this.hints = {\n parens: false,\n };\n }\n\n // this node's immediate constructor\n // The `new (...args: any[]): any;` part of the type is a\n // \"construct\" signature. It indicates that `func` is a class.\n // See https://www.typescriptlang.org/docs/handbook/2/functions.html#construct-signatures.\n abstract func: {new (...args: any[]): any; name: string};\n\n // an array of the arguments to this node's immediate constructor\n abstract args(): (number | string | Expr | undefined)[];\n\n // make a new node with the given arguments\n construct(args: any[]) {\n const func = this.func;\n const instance = new func(...args);\n if (typeof instance === \"undefined\") {\n throw new Error(\"constructor function returning undefined\");\n }\n return instance;\n }\n\n // an abstraction for chainable, bottom-up recursion\n // NOTE(kevinb): This method is highly dynamic. It's possible that it\n // could be made more type-safe using overload signatures.\n recurse(method: string, ...passed: any[]): this {\n var args = this.args().map(function (arg) {\n return _.isString(arg) || _.isNumber(arg)\n ? arg\n : arg?.[method].apply(arg, passed);\n });\n return this.construct(args);\n }\n\n // evaluate numerically with given variable mapping\n // NOTE(kevin): This could made into an abstract method but\n // Eq doesn't implement it. This indicates that we probably\n // need to introduce another class in our hierarchy.\n eval(vars: Vars = {}, options?: ParseOptions): number {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n // NOTE(kevin): This could made into an abstract method but\n // Eq doesn't implement it. This indicates that we probably\n // need to introduce another class in our hierarchy.\n codegen(): string {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n compile(): (vars: Expr[]) => string {\n var code = this.codegen();\n try {\n // @ts-expect-error: TypeScript doesn't want to unify\n // `Function` with the `compile`'s return type.\n return new Function(\"vars\", \"return \" + code + \";\");\n } catch {\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 abstract print(): string;\n\n // returns a TeX string representing the expression\n abstract tex(): string;\n\n // returns a TeX string, modified by the given options\n asTex(options) {\n options = options || {};\n _.defaults(options, {\n display: true,\n dynamic: true,\n times: false,\n });\n\n let tex: string = 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\n name(): string {\n return this.func.name;\n }\n\n // returns a string representing current node structure\n repr(): string {\n return (\n this.name() +\n \"(\" +\n this.args()\n .map(function (arg) {\n return _.isString(arg) || _.isNumber(arg)\n ? arg\n : arg?.repr();\n })\n .join(\",\") +\n \")\"\n );\n }\n\n // removes all negative signs\n strip(): Expr {\n return this.recurse(\"strip\");\n }\n\n // canonically reorders all commutative elements\n normalize(): Expr {\n return this.recurse(\"normalize\");\n }\n\n // expands the expression\n expand(): Expr {\n return this.recurse(\"expand\");\n }\n\n // naively factors out like terms\n factor(options): Expr {\n return this.recurse(\"factor\", options);\n }\n\n // collect all like terms\n collect(options?: Options): Expr {\n return this.recurse(\"collect\", options);\n }\n\n // strict syntactic equality check\n equals(other: Expr): boolean {\n return this.normalize().print() === other.normalize().print();\n }\n\n // expand and collect until the expression no longer changes\n simplify(options?: Options) {\n options = {\n once: false,\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();\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() {\n return this.equals(this.simplify());\n }\n\n // return the child nodes of this node\n exprArgs(): Expr[] {\n // @ts-expect-error: Type 'string | number | Expr | undefined' is not assignable to type 'string | Expr'.\n return this.args().filter(isExpr);\n }\n\n // return the variables (function and non) within the expression\n getVars(excludeFunc?: boolean) {\n return _.uniq(\n _.flatten(_.invoke(this.exprArgs(), \"getVars\", excludeFunc)),\n ).sort();\n }\n\n getConsts() {\n return _.uniq(_.flatten(_.invoke(this.exprArgs(), \"getConsts\"))).sort();\n }\n\n getUnits() {\n return _.flatten(_.invoke(this.exprArgs(), \"getUnits\"));\n }\n\n // check whether this expression node is of a particular type\n is(func): boolean {\n return this instanceof func;\n }\n\n // check whether this expression has a particular node type\n has(func): boolean {\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(exp: Expr, options?: {preciseFloats?: boolean}): Expr {\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() {\n return false;\n }\n isDivide() {\n return false;\n }\n isRoot() {\n return false;\n }\n\n // whether this node needs an explicit multiplication sign if following a Num\n needsExplicitMul(): boolean {\n return this.exprArgs()[0].needsExplicitMul();\n }\n\n // check that the variables in both expressions are the same\n sameVars(other: Expr) {\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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(other: Expr) {\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: number, num2: number) {\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: number, num2: number) {\n var delta = getDelta(num1, num2);\n return (\n // Treat positive and negative infinity as equal. We want to\n // consider -1 / 0 equal to 1 / 0 so that 1 / (x - 1) is equal\n // to -1 / (1 - x) when we guess-and-check with x = 1.\n (isInfinite(num1) && isInfinite(num2)) ||\n (isNaN(num1) && isNaN(num2)) ||\n delta < Math.pow(10, -TOLERANCE)\n );\n };\n\n // If no variables, only need to evaluate once.\n // note(matthew) Seems to be an optimization for simple cases like `2+2=4`\n // where there are no variables / functions.\n // Ran into issues with it in LEMS-2777 and found that tests pass\n // with this removed, but keeping a modified version out of caution.\n const varAndFuncList = _.union(\n this.getVars(/* excludeFunc */ false),\n other.getVars(/* excludeFunc */ false),\n );\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!varAndFuncList.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 let equal;\n if (\n expr1.has(Func) ||\n expr2.has(Func) ||\n expr1.has(Unit) ||\n expr2.has(Unit)\n ) {\n const result1 = expr1.partialEval(vars);\n const result2 = expr2.partialEval(vars);\n\n equal = result1.simplify().equals(result2.simplify());\n } else {\n const result1 = expr1.eval(vars);\n const 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(vars: Vars): Expr {\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(other: Expr) {\n return this.strip().equals(other.strip());\n }\n\n // returns the GCD of this expression and the given factor\n findGCD(factor: Expr): Expr {\n return this.equals(factor) ? factor : NumOne;\n }\n\n // return this expression's denominator\n getDenominator(): Expr {\n return NumOne;\n }\n\n // return this expression as a Mul\n asMul() {\n return new Mul(NumOne, this);\n }\n\n // TODO(alex): rename to isDefinitePositive or similar?\n // return whether this expression is 100% positive\n isPositive(): boolean {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n // TODO(alex): rename to hasNegativeSign or similar?\n // return whether this expression has a negative sign\n isNegative() {\n return false;\n }\n\n // return a factor of this expression that is 100% positive\n asPositiveFactor(): Expr {\n return this.isPositive() ? this : NumOne;\n }\n\n // return a copy of the expression with a new hint set (preserves hints)\n addHint(hint: keyof Hints) {\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 // complete parse by performing a few necessary transformations\n completeParse(): Expr {\n return this.recurse(\"completeParse\");\n }\n\n abs(): Expr {\n throw new Error(\n \"Abstract method - must override for expr: \" +\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n this.print(),\n );\n }\n\n negate(): Expr {\n return new Mul(NumNeg, this);\n }\n}\n\n/* abstract sequence node */\nabstract class Seq extends Expr {\n // This should always have at least two terms.\n // TODO(kevinb): Try enforcing this at the type-level using [T, T, T[]]\n terms: Expr[];\n\n // TODO(kevinb): Update this use `...args: Expr[]`\n constructor(...args: any[]) {\n super();\n if (args.length === 1) {\n this.terms = args[0];\n } else {\n this.terms = args;\n }\n }\n\n args() {\n return this.terms;\n }\n\n normalize() {\n var terms = _.sortBy(_.invoke(this.terms, \"normalize\"), (term) => {\n return term.print();\n });\n\n return new this.func(terms);\n }\n\n expand(): Expr {\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(): [Seq, Seq] {\n var [numbers, others] = partition(this.terms, (term) => {\n return term instanceof Num;\n });\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(): Expr {\n var type = this;\n var terms = _.reject(this.terms, (term) => {\n // @ts-expect-error: `identity` is defined on Add and Mul but doesn't\n // exist on Seq itself.\n return term.equals(type.identity);\n });\n\n if (terms.length === 0) {\n // @ts-expect-error: `identity` is defined on Add and Mul but doesn't\n // exist on Seq itself.\n return type.identity;\n }\n if (terms.length === 1) {\n return terms[0];\n }\n\n // same contains the children which are Seqs of the same type as this Seq\n const [same, others] = partition(terms, (term) => {\n return term instanceof type.func;\n });\n\n var flattened = others.concat(\n _.flatten(_.pluck(same, \"terms\"), /* shallow: */ true),\n );\n return new type.func(flattened);\n }\n\n // reduce a numeric sequence to a Num\n abstract reduce(options?: Options): Expr;\n\n isPositive() {\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(oldTerm: Expr | number, newTerm?: Expr | Expr[]) {\n const index =\n oldTerm instanceof Expr ? _.indexOf(this.terms, oldTerm) : oldTerm;\n\n var newTerms: Expr[] = [];\n if (Array.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(term: number | Expr) {\n return this.replace(term);\n }\n\n getDenominator(): Expr {\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 class Add extends Seq {\n identity: Num = NumZero;\n\n func = Add;\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return _.reduce(\n this.terms,\n (memo, term) => {\n return memo + term.eval(vars, options);\n },\n 0,\n );\n }\n\n codegen(): string {\n return (\n _.map(this.terms, (term) => {\n return \"(\" + term.codegen() + \")\";\n }).join(\" + \") || \"0\"\n );\n }\n\n print(): string {\n return _.invoke(this.terms, \"print\").join(\"+\");\n }\n\n tex(): string {\n let tex = \"\";\n\n _.each(this.terms, (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(options?: Options) {\n var terms = _.invoke(this.terms, \"collect\", options);\n var pairs: [expr: Expr, coefficient: Expr][] = [];\n\n _.each(terms, (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([NumOne, term]);\n } else {\n pairs.push([term, NumOne]);\n }\n });\n\n // { (Expr expr).print(): [[Expr expr, Num coefficient]] }\n var grouped = _.groupBy(pairs, (pair) => {\n return pair[0].normalize().print();\n });\n\n var collected = _.compact(\n _.map(grouped, (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(options: {keepNegative: boolean} = {keepNegative: false}) {\n const terms = this.terms.map((term) => term.collect());\n let factors: Expr[];\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), (term) => {\n factors = _.map(factors, (factor: Expr) => {\n return term.findGCD(factor);\n });\n });\n\n if (!options.keepNegative && this.isNegative()) {\n factors.push(NumNeg);\n }\n\n const left = new Mul(factors).flatten().collect();\n\n const remainder = terms.map((term) =>\n Mul.handleDivide(term, left).simplify(),\n );\n const right = new Add(remainder).flatten();\n\n return Mul.createOrAppend(left, right).flatten();\n }\n\n reduce(options?: Options): Expr {\n return _.reduce(\n this.terms,\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n (memo, term) => {\n return memo.add(term, options);\n },\n this.identity,\n );\n }\n\n needsExplicitMul() {\n return false;\n }\n\n isNegative() {\n var terms = _.invoke(this.terms, \"collect\");\n return _.all(_.invoke(terms, \"isNegative\"));\n }\n\n negate() {\n return new Add(_.invoke(this.terms, \"negate\"));\n }\n\n // create a new sequence unless left is already one (returns a copy)\n static createOrAppend(left: Expr, right: Expr) {\n if (left instanceof Add) {\n return new Add(left.terms.concat(right));\n } else {\n return new Add(left, right);\n }\n }\n}\n\n/* sequence of multiplicative terms */\nexport class Mul extends Seq {\n identity: Num = NumOne;\n\n func = Mul;\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return _.reduce(\n this.terms,\n (memo, term) => {\n return memo * term.eval(vars, options);\n },\n 1,\n );\n }\n\n codegen(): string {\n return (\n _.map(this.terms, (term) => {\n return \"(\" + term.codegen() + \")\";\n }).join(\" * \") || \"0\"\n );\n }\n\n print(): string {\n return _.map(this.terms, (term) => {\n return term instanceof Add\n ? \"(\" + term.print() + \")\"\n : term.print();\n }).join(\"*\");\n }\n\n getUnits() {\n var tmUnits = _(this.terms)\n .chain()\n .map((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(): string {\n var cdot = \" \\\\cdot \";\n\n var terms = _.groupBy(this.terms, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var inverses = terms.inverse || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var numbers: Num[] = (terms.number as Num[]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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: Expr[] = 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, (term) => {\n var shouldPushDown =\n !term.hints.fraction || inverses.length > 0;\n if (\n term instanceof Rational &&\n !(term instanceof Int) &&\n shouldPushDown\n ) {\n // e.g. 3x/4 -> 3/4*x (internally) -> 3x/4 (rendered)\n inverses.push(new Pow(new Int(term.d), NumDiv));\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, (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, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(): Expr {\n var terms = _.map(this.terms, (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(): Expr {\n const isInverse = function (term: Expr): term is Pow {\n return term instanceof Pow && term.exp.isNegative();\n };\n\n const isInverseAdd = function (term: Expr) {\n return isInverse(term) && isAdd(term.base);\n };\n\n const mul = this.recurse(\"expand\").flatten();\n const factors = getFactors(mul);\n\n const hasAdd = _.any(factors, isAdd);\n const hasInverseAdd = _.any(factors, isInverseAdd);\n\n if (!(hasAdd || hasInverseAdd)) {\n return mul;\n }\n\n let [inverses, normals] = partition(factors, isInverse);\n\n if (hasAdd) {\n const [adds, others] = partition(normals, isAdd);\n\n // loop over each additive sequence\n const expanded = _.reduce(\n adds as Add[],\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, (term) => array.concat(term)),\n );\n },\n [] as Expr[][],\n );\n },\n [[]] as Expr[][],\n );\n\n // join each fully expanded array of factors with remaining multiplicative factors\n const 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 const denominator = new Mul(\n _.invoke(inverses, \"getDenominator\"),\n ).flatten();\n inverses = [new Pow(denominator.expand(), NumDiv)];\n }\n\n return new Mul(normals.concat(inverses)).flatten();\n }\n\n factor(options): Expr {\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 [rationals, others] = partition(factored.terms, (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 const ratObj = _.reduce(\n rationals as Rational[],\n (memo, term) => {\n return {n: memo.n * term.n, d: memo.d * term.d};\n },\n {n: 1, d: 1},\n );\n\n const rational =\n ratObj.d === 1\n ? new Int(ratObj.n)\n : new Rational(ratObj.n, ratObj.d);\n\n return new Mul(others.concat(rational)).flatten();\n }\n\n collect(options?: Options): Expr {\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 NumZero;\n }\n\n const other = partitioned[1].flatten();\n\n // e.g. 2*2 -> 4\n // e.g. 2*2*x -> 4*x\n if (!(other instanceof Mul)) {\n return new Mul(number, other).flatten();\n }\n\n const others = other.terms;\n\n var pairs: [base: Expr, exp: Expr][] = [];\n\n _.each(others, (term) => {\n if (term instanceof Pow) {\n pairs.push([term.base, term.exp]);\n } else {\n pairs.push([term, NumOne]);\n }\n });\n\n // {(Expr base).print(): [[Expr base, Expr exp]]}\n var grouped = _.groupBy(pairs, (pair) => {\n return pair[0].normalize().print();\n });\n\n var summed: [base: Expr, exp: Expr][] = _.compact(\n _.map(grouped, (pairs): [Expr, Expr] | null => {\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 const groupedPairs = _.groupBy(summed, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let trigs = (groupedPairs.trig as [Trig, Expr][]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let logs = (groupedPairs.log as [Log, Expr][]) || [];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const exprs = groupedPairs.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, (pair) => {\n return pair[0].arg.normalize().print();\n });\n\n trigs = [];\n _.each(byArg, (pairs) => {\n const arg = pairs[0][0].arg;\n\n // {Trig.type: Expr exp}\n let funcs: Record<string, Expr> = {sin: NumZero, cos: NumZero};\n _.each(pairs, (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, (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, (pair) => {\n return pair[0].base.normalize().print();\n });\n\n logs = [];\n\n _.each(byBase, (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 var collected = _.map([...trigs, ...logs, ...exprs], (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() {\n return _.any(this.terms, (term) => {\n return term instanceof Num && Boolean(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(hint: keyof Hints): Expr {\n var partitioned = this.partition();\n // `partition` splits the terms into two Seqs - one containing\n // only Nums and the all non-Num nodes.\n var numbers = partitioned[0].terms as Num[];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n var fold = numbers.length && _.all(numbers, (num) => num.n > 0);\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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() {\n var factored = false;\n var terms = _.compact(\n _.map(this.terms, (term) => {\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(options?: {preciseFloats: boolean}) {\n return _.reduce(\n this.terms,\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n (memo, term) => {\n return memo.mul(term, options);\n },\n this.identity,\n );\n }\n\n findGCD(factor: Expr): Expr {\n return new Mul(_.invoke(this.terms, \"findGCD\", factor)).flatten();\n }\n\n asMul() {\n return this;\n }\n\n asPositiveFactor(): Expr {\n if (this.isPositive()) {\n return this;\n } else {\n const terms = getFactors(this.collect()).map((factor) =>\n factor.asPositiveFactor(),\n );\n return new Mul(terms).flatten();\n }\n }\n\n isNegative() {\n const terms = getFactors(this.collect()).map((factor) =>\n factor.isNegative(),\n );\n return _.any(terms);\n }\n\n fold() {\n return Mul.fold(this);\n }\n\n negate() {\n var isNum = (expr: Expr) => {\n return expr instanceof Num;\n };\n const num = _.find(this.terms, isNum);\n if (num) {\n return this.replace(num, num.negate());\n } else {\n return new Mul([NumNeg].concat(this.terms));\n }\n }\n\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 static handleNegative(expr: Expr, hint?): Expr {\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 static handleDivide(left: Expr, right: Expr): Expr {\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 = (expr: Expr | undefined): expr is Int => {\n return expr instanceof Int;\n };\n var isRational = (expr: Expr | undefined): expr is Rational => {\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 = reversed.find(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 if (num.n < 0 && right.n < 0) {\n rational.d = -rational.d;\n return left.replace(num, [NumNeg, rational]);\n } else {\n return left.replace(num, rational);\n }\n }\n\n var divide = (a: Expr, b: Expr) => {\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 NumNeg,\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, NumDiv);\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 // NOTE(kevinb): `terms` should always have at least two\n // elements so getting the last element is safe to do.\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 static fold(expr: Expr): Expr {\n if (expr instanceof Mul) {\n // assuming that this will be second to last\n var trigLog = _.find(_.initial(expr.terms), (term) => {\n return (\n (term instanceof Trig || term instanceof Log) &&\n Boolean(term.hints.open)\n );\n }) as Trig | Log | undefined;\n\n if (trigLog) {\n // expr.terms should always have at least two terms\n const 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 const newTrigLog =\n trigLog instanceof Trig\n ? Trig.create(\n [trigLog.type, trigLog.exp],\n Mul.createOrAppend(trigLog.arg, last).fold(),\n )\n : Log.create(\n trigLog.base,\n Mul.createOrAppend(\n trigLog.power,\n last,\n ).fold(),\n );\n\n const index = _.indexOf(expr.terms, trigLog);\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 = (num: Num): boolean => {\n return num.n > 0;\n };\n var neg = (num: Num): boolean => {\n return num.n === -1 && Boolean(num.hints.negate);\n };\n var posOrNeg = function (num: Num): boolean {\n return pos(num) || neg(num);\n };\n\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n const posNum = numbers.find(pos);\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n const negNum = numbers.find(neg);\n if (\n numbers.length > 1 &&\n negNum &&\n posNum &&\n // @ts-expect-error: Type 'Expr' is not assignable to type 'Num'.\n _.every(numbers, posOrNeg)\n ) {\n var firstNeg = _.indexOf(expr.terms, negNum);\n var firstNum = _.indexOf(expr.terms, posNum);\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 // create a new sequence unless left is already one (returns a copy)\n static createOrAppend(left: Expr, right: Expr) {\n if (left instanceof Mul) {\n return new Mul(left.terms.concat(right));\n } else {\n return new Mul(left, right);\n }\n }\n}\n\n/* exponentiation */\nexport class Pow extends Expr {\n base: Expr;\n exp: Expr;\n\n constructor(base, exp) {\n super();\n this.base = base;\n this.exp = exp;\n }\n\n func = Pow;\n\n args() {\n return [this.base, this.exp];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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() {\n return this.base.getUnits().map((unit) => {\n return {\n unit: unit.unit,\n // Exponents in units should always be integers\n pow: unit.pow * (this.exp as Int).n,\n };\n });\n }\n\n codegen(): string {\n return (\n \"Math.pow(\" + this.base.codegen() + \", \" + this.exp.codegen() + \")\"\n );\n }\n\n print(): string {\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(): string {\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() && isRational(this.exp)) {\n if (this.exp.n !== 1) {\n throw new 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.texSplit();\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() {\n return this.isRoot() ? false : this.base.needsExplicitMul();\n }\n\n expand() {\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, (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, NumDiv);\n };\n\n // compute and cache powers of 2 up to n\n const cache: Record<number, Expr> = {1: pow.base};\n for (var i = 2; i <= n; i *= 2) {\n const 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 (n in cache) {\n return signed(cache[n]);\n }\n\n // otherwise decompose n into powers of 2 ...\n let 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 const factors: Expr[] = [];\n for (const index of indices) {\n if (index in cache) {\n factors.push(cache[index]);\n }\n }\n const mul = new Mul(factors).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 const terms = _.map(pow.exp.terms, (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() {\n var pow = this.recurse(\"factor\");\n if (pow.base instanceof Mul) {\n var terms = _.map(pow.base.terms, (term) => {\n if (term instanceof Int && pow.exp.equals(NumDiv)) {\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(options?: Options): Expr {\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 const base = this.base.base;\n const exp = Mul.createOrAppend(this.base.exp, this.exp);\n return new Pow(base, exp).collect(options);\n }\n\n const pow = this.recurse(\"collect\", options);\n\n const isSimilarLog = function (term: Expr): term is Log {\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 NumOne;\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 // `log` will always be defined here because of the\n // `_.any(pow.exp.terms, isSimilarLog)` check above.\n const log = pow.exp.terms.find(isSimilarLog)!;\n const base = log.power;\n const 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 const exp = pow.exp.asRational();\n const decimalsInBase = pow.base.getDecimalPlaces();\n const root = new Pow(pow.base, new Rational(1, exp.d));\n const decimalsInRoot: number = root\n .collect()\n // @ts-expect-error: we assume that `root.collect()` returns\n // a Num here but tbh I'm not sure how this code isn't causing\n // an infinite loop.\n .getDecimalPlaces();\n\n if (decimalsInRoot > decimalsInBase) {\n // Collecting over this denominator would result in an\n // imprecise float, so avoid doing so.\n const 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() {\n var isDiv = function (arg: Expr) {\n return arg instanceof Num && Boolean(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() {\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 throw new Error(\n \"called asDivide() on an Expr that wasn't a Num or Mul\",\n );\n }\n }\n\n isRoot(): boolean {\n return this.exp instanceof Rational && Boolean(this.exp.hints.root);\n }\n\n isSquaredTrig() {\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() {\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 NumOne;\n }\n }\n\n findGCD(factor: Expr): Expr {\n const [base, exp] =\n factor instanceof Pow\n ? [factor.base, factor.exp]\n : [factor, NumOne];\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 NumOne;\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 NumOne;\n }\n\n isPositive() {\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(): Expr {\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 NumOne;\n }\n }\n\n static sqrt(arg: Expr) {\n return new Pow(arg, NumSqrt);\n }\n\n // NOTE(kevinb): nthroot is used as a constructor so we need to\n // define it as a static property instead of a static method.\n // TODO(kevinb): update parser-generator.ts to call nthrooth\n // without using `new`.\n static nthroot = function (radicand: Expr, degree: Expr) {\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 class Log extends Expr {\n base: Expr;\n power: Expr;\n\n constructor(base: Expr, power: Expr) {\n super();\n this.base = base;\n this.power = power;\n this.hints = {\n ...this.hints,\n open: false,\n };\n }\n\n func = Log;\n\n args() {\n return [this.base, this.power];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return (\n Math.log(this.power.eval(vars, options)) /\n Math.log(this.base.eval(vars, options))\n );\n }\n\n codegen(): string {\n return (\n \"(Math.log(\" +\n this.power.codegen() +\n \") / Math.log(\" +\n this.base.codegen() +\n \"))\"\n );\n }\n\n print(): string {\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(): string {\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(options?: Options): Expr {\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 NumZero;\n } else if (log.base.equals(log.power)) {\n // e.g. log_b(b) -> 1\n return NumOne;\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() {\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, (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 isPositive() {\n var log = this.collect();\n\n if (\n log instanceof Log &&\n log.base instanceof Num &&\n log.power instanceof Num\n ) {\n return this.eval() > 0;\n } else {\n return false;\n }\n }\n\n needsExplicitMul() {\n return false;\n }\n\n isNatural() {\n return this.base.equals(Const.e);\n }\n\n static natural() {\n return Const.e;\n }\n\n static common() {\n return NumTen;\n }\n\n static create(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\ntype TrigFunc = {\n eval: (arg: number) => number;\n codegen: string | ((argStr: string) => string);\n tex: string;\n expand?: () => Expr;\n};\n\n/* trigonometric functions */\nexport class Trig extends Expr {\n type: string; // TODO(kevinb): Use a union type for this\n arg: Expr;\n exp?: Expr;\n\n constructor(type: string, arg: Expr) {\n super();\n this.type = type;\n this.arg = arg;\n this.hints = {\n ...this.hints,\n open: false,\n };\n }\n\n func = Trig;\n\n args() {\n return [this.type, this.arg];\n }\n\n // TODO(kevinb): Use union type for the function names.\n functions: Record<string, TrigFunc> = {\n sin: {\n eval: Math.sin,\n codegen: \"Math.sin((\",\n tex: \"\\\\sin\",\n expand: () => this,\n },\n cos: {\n eval: Math.cos,\n codegen: \"Math.cos((\",\n tex: \"\\\\cos\",\n expand: () => this,\n },\n tan: {\n eval: Math.tan,\n codegen: \"Math.tan((\",\n tex: \"\\\\tan\",\n expand: () =>\n Mul.handleDivide(Trig.sin(this.arg), Trig.cos(this.arg)),\n },\n csc: {\n eval: (arg: number) => {\n return 1 / Math.sin(arg);\n },\n codegen: \"(1/Math.sin(\",\n tex: \"\\\\csc\",\n expand: () => Mul.handleDivide(NumOne, Trig.sin(this.arg)),\n },\n sec: {\n eval: (arg: number) => {\n return 1 / Math.cos(arg);\n },\n codegen: \"(1/Math.cos(\",\n tex: \"\\\\sec\",\n expand: () => Mul.handleDivide(NumOne, Trig.cos(this.arg)),\n },\n cot: {\n eval: (arg: number) => {\n return 1 / Math.tan(arg);\n },\n codegen: \"(1/Math.tan(\",\n tex: \"\\\\cot\",\n expand: () =>\n Mul.handleDivide(Trig.cos(this.arg), Trig.sin(this.arg)),\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: (arg: number) => {\n return Math.asin(1 / arg);\n },\n codegen: \"Math.asin(1/(\",\n tex: \"\\\\operatorname{arccsc}\",\n },\n arcsec: {\n eval: (arg: number) => {\n return Math.acos(1 / arg);\n },\n codegen: \"Math.acos(1/(\",\n tex: \"\\\\operatorname{arcsec}\",\n },\n arccot: {\n eval: (arg: number) => {\n return Math.atan(1 / arg);\n },\n codegen: \"Math.atan(1/(\",\n tex: \"\\\\operatorname{arccot}\",\n },\n sinh: {\n eval: (arg: number) => {\n return (Math.exp(arg) - Math.exp(-arg)) / 2;\n },\n codegen: (argStr: string) => {\n return (\n \"((Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\sinh\",\n expand: () => this,\n },\n cosh: {\n eval: (arg: number) => {\n return (Math.exp(arg) + Math.exp(-arg)) / 2;\n },\n codegen: (argStr: string) => {\n return (\n \"((Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))) / 2)\"\n );\n },\n tex: \"\\\\cosh\",\n expand: () => this,\n },\n tanh: {\n eval: (arg: number) => {\n return (\n (Math.exp(arg) - Math.exp(-arg)) /\n (Math.exp(arg) + Math.exp(-arg))\n );\n },\n codegen: (argStr: string) => {\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: () =>\n Mul.handleDivide(Trig.sinh(this.arg), Trig.cosh(this.arg)),\n },\n csch: {\n eval: (arg: number) => {\n return 2 / (Math.exp(arg) - Math.exp(-arg));\n },\n codegen: (argStr: string) => {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") - Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\csch\",\n expand: () => Mul.handleDivide(NumOne, Trig.sinh(this.arg)),\n },\n sech: {\n eval: (arg: number) => {\n return 2 / (Math.exp(arg) + Math.exp(-arg));\n },\n codegen: (argStr: string) => {\n return (\n \"(2 / (Math.exp(\" +\n argStr +\n \") + Math.exp(-(\" +\n argStr +\n \"))))\"\n );\n },\n tex: \"\\\\sech\",\n expand: () => Mul.handleDivide(NumOne, Trig.cosh(this.arg)),\n },\n coth: {\n eval: (arg: number) => {\n return (\n (Math.exp(arg) + Math.exp(-arg)) /\n (Math.exp(arg) - Math.exp(-arg))\n );\n },\n codegen: (argStr: string) => {\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: () =>\n Mul.handleDivide(Trig.cosh(this.arg), Trig.sinh(this.arg)),\n },\n };\n\n isEven() {\n return _.contains([\"cos\", \"sec\"], this.type);\n }\n\n isInverse() {\n return this.type.indexOf(\"arc\") === 0;\n }\n\n isBasic() {\n return _.contains([\"sin\", \"cos\"], this.type);\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n var func = this.functions[this.type].eval;\n var arg = this.arg.eval(vars, options);\n return func(arg);\n }\n\n codegen(): string {\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(): string {\n return this.type + \"(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return func + arg;\n }\n\n texSplit(): [func: string, arg: string] {\n var func = this.functions[this.type].tex;\n var arg = \"(\" + this.arg.tex() + \")\";\n return [func, arg];\n }\n\n isPositive() {\n var trig = this.collect();\n\n if (trig instanceof Trig && trig.arg instanceof Num) {\n return this.eval() > 0;\n } else {\n return false;\n }\n }\n\n completeParse(): Expr {\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() {\n return false;\n }\n\n expand() {\n var trig = this.recurse(\"expand\");\n if (!trig.isInverse()) {\n // e.g. tan(x) -> sin(x)/cos(x)\n // NOTE(kevinb): All non-inverse trig functions have an expand property.\n var expand = trig.functions[trig.type].expand!;\n return _.bind(expand, trig)();\n } else {\n return trig;\n }\n }\n\n collect(options?: Options): Expr {\n var trig = this.recurse(\"collect\", options);\n if (!trig.isInverse() && trig.arg.isNegative()) {\n const arg =\n trig.arg instanceof Num\n ? trig.arg.abs()\n : Mul.handleDivide(trig.arg, NumNeg).collect(options);\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(NumNeg, new Trig(trig.type, arg));\n }\n } else {\n return trig;\n }\n }\n\n static create(pair, arg) {\n var type = pair[0];\n var exp = pair[1];\n\n if (exp && exp.equals(NumNeg)) {\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 static sin(arg: Expr) {\n return new Trig(\"sin\", arg);\n }\n\n static cos(arg: Expr) {\n return new Trig(\"cos\", arg);\n }\n\n static sinh(arg: Expr) {\n return new Trig(\"sinh\", arg);\n }\n\n static cosh(arg: Expr) {\n return new Trig(\"cosh\", arg);\n }\n}\n\nexport class Abs extends Expr {\n arg: Expr;\n\n constructor(arg: Expr) {\n super();\n this.arg = arg;\n }\n\n func = Abs;\n\n args() {\n return [this.arg];\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\n return Math.abs(this.arg.eval(vars, options));\n }\n\n codegen(): string {\n return \"Math.abs(\" + this.arg.codegen() + \")\";\n }\n\n print(): string {\n return \"abs(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n return \"\\\\left|\" + this.arg.tex() + \"\\\\right|\";\n }\n\n collect(options): Expr {\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, (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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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(): Expr {\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, (term) => {\n return new Abs(term);\n });\n return new Mul(terms);\n } else {\n return abs;\n }\n }\n\n isPositive() {\n return true;\n }\n}\n\n/* equation */\nexport class Eq extends Expr {\n left: Expr;\n type: string; // TODO(kevinb): use an enum for this\n right: Expr;\n\n constructor(left: Expr, type: string, right: Expr) {\n super();\n this.left = left;\n this.type = type;\n this.right = right;\n }\n\n func = Eq;\n\n args() {\n return [this.left, this.type, this.right];\n }\n\n needsExplicitMul() {\n return false;\n }\n\n print(): string {\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(): string {\n return this.left.tex() + this.signs[this.type] + this.right.tex();\n }\n\n normalize() {\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(unfactored: boolean = false): Expr {\n var isZero = (expr: Expr) => {\n return expr instanceof Num && expr.isSimple() && expr.eval() === 0;\n };\n\n // first convert to a sequence of additive terms\n let terms: Expr[] = [];\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(NumOne)) {\n terms = _.map(terms, (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(expr: Expr) {\n const isInequality = !this.isEquality();\n\n const simplified = expr.simplify({once: true});\n const factored = simplified.factor({keepNegative: isInequality});\n\n if (!(factored instanceof Mul)) {\n return expr;\n }\n\n const terms = factored.terms;\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const hasVar = (term: Expr) => !!term.getVars().length;\n const isOne = (term: Expr) => term.equals(NumOne);\n\n const [adds, others] = partition(terms, isAdd);\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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 let denominator = others;\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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, (term) => {\n return new Pow(term, NumDiv);\n });\n\n const 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() {\n return _.contains([\"=\", \"<>\"], this.type);\n }\n\n compare(other: Eq) {\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(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() {\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 // Assumptions: Expression is of the form a+bx, and we solve for x\n solveLinearEquationForVariable(variable) {\n var expr = this.asExpr();\n if (!(expr instanceof 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 = (term: Expr) => {\n return term.has(Var) && _.contains(term.getVars(), variable.symbol);\n };\n\n const termHasVar = hasVar(expr.terms[0]);\n const a = termHasVar\n ? Mul.handleNegative(expr.terms[1])\n : Mul.handleNegative(expr.terms[0]);\n const b = termHasVar\n ? Mul.handleDivide(expr.terms[0], variable)\n : Mul.handleDivide(expr.terms[1], variable);\n\n return Mul.handleDivide(a, b).simplify();\n }\n}\n\n/* abstract symbol node */\nabstract class Sym extends Expr {\n needsExplicitMul() {\n return false;\n }\n\n findGCD(factor: Expr): Expr {\n if (factor instanceof Sym || factor instanceof Num) {\n return this.equals(factor) ? this : NumOne;\n } else {\n return factor.findGCD(this);\n }\n }\n}\n\n/* function variable */\nexport class Func extends Sym {\n symbol: string;\n arg: Expr;\n\n constructor(symbol: string, arg: Expr) {\n super();\n this.symbol = symbol;\n this.arg = arg;\n }\n\n func = Func;\n\n args() {\n return [this.symbol, this.arg];\n }\n\n print(): string {\n return this.symbol + \"(\" + this.arg.print() + \")\";\n }\n\n tex(): string {\n return this.symbol + \"(\" + this.arg.tex() + \")\";\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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(): string {\n return 'vars[\"' + this.symbol + '\"](' + this.arg.codegen() + \")\";\n }\n\n getUnits() {\n return this.arg.getUnits();\n }\n\n getVars(excludeFunc: boolean) {\n if (excludeFunc) {\n return this.arg.getVars();\n } else {\n return _.union(this.arg.getVars(), [this.symbol]).sort();\n }\n }\n\n getConsts() {\n return this.arg.getConsts();\n }\n}\n\n/* variable */\nexport class Var extends Sym {\n symbol: string;\n subscript?: Expr;\n\n constructor(symbol: string, subscript?: Expr) {\n super();\n this.symbol = symbol;\n this.subscript = subscript;\n }\n\n func = Var;\n\n args() {\n return [this.symbol, this.subscript];\n }\n\n exprArgs() {\n return [];\n }\n\n recurse() {\n return this;\n }\n\n print(): string {\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() {\n var sub = this.subscript;\n if (sub && (sub instanceof Num || sub instanceof Sym)) {\n return this.symbol + \"_\" + sub.print();\n } else {\n return this.print();\n }\n }\n\n tex(): string {\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() {\n return \"Var(\" + this.print() + \")\";\n }\n\n eval(vars: Vars = {}, options?: ParseOptions): number {\n // @ts-expect-error: values is Vars are strings, but here\n // we expect them to be numbers. We should probably store\n // Var and Func entries separately in the Vars type so that\n // they can be typed correctly.\n return vars[this.prettyPrint()];\n }\n\n codegen(): string {\n return 'vars[\"' + this.prettyPrint() + '\"]';\n }\n\n getVars() {\n return [this.prettyPrint()];\n }\n\n isPositive() {\n return false;\n }\n}\n\n/* constant */\nexport class Const extends Sym {\n symbol: string;\n\n constructor(symbol: string) {\n super();\n this.symbol = symbol;\n }\n\n func = Const;\n\n args() {\n return [this.symbol];\n }\n\n recurse() {\n return this;\n }\n\n eval(vars: Vars = {}, options?: ParseOptions): number {\n if (this.symbol === \"pi\") {\n return Math.PI;\n } else if (this.symbol === \"e\") {\n return Math.E;\n } else {\n // @ts-expect-error: should we throw an error here?\n return undefined;\n }\n }\n\n codegen(): string {\n if (this.symbol === \"pi\") {\n return \"Math.PI\";\n } else if (this.symbol === \"e\") {\n return \"Math.E\";\n } else {\n // @ts-expect-error: should we throw an error here?\n return undefined;\n }\n }\n\n print(): string {\n return this.symbol;\n }\n\n tex(): string {\n if (this.symbol === \"pi\") {\n return \"\\\\pi \";\n } else if (this.symbol === \"e\") {\n return \"e\";\n } else {\n // @ts-expect-error: should we return this.symbol here?\n return undefined;\n }\n }\n\n isPositive() {\n return this.eval() > 0;\n }\n\n abs() {\n if (this.eval() > 0) {\n return this;\n } else {\n return Mul.handleNegative(this);\n }\n }\n\n getConsts() {\n return [this.print()];\n }\n\n static e = new Const(\"e\");\n static pi = new Const(\"pi\");\n}\n\n/* abstract number node */\nabstract class Num extends Expr {\n n: number = 0;\n\n constructor() {\n super();\n // hints for interpreting and rendering user input\n this.hints = {\n ...this.hints,\n negate: false,\n subtract: false,\n divide: false,\n root: false,\n fraction: false,\n entered: false,\n };\n }\n\n repr() {\n return this.print();\n }\n\n strip() {\n return this.abs();\n }\n\n recurse() {\n return this;\n }\n\n codegen(): string {\n return this.print();\n }\n\n // takes another Num and returns a new Num\n abstract add(other: Expr, options?: Options): Expr;\n\n abstract mul(other: Expr, options?: Options): Expr;\n\n // returns this Num's additive inverse\n abstract negate(): Expr;\n\n isSubtract(): boolean {\n return Boolean(this.hints.subtract);\n }\n\n // return the absolute value of the number\n abstract abs(): Num;\n\n needsExplicitMul(): boolean {\n return true;\n }\n\n abstract findGCD(factor: Expr): Expr;\n\n isPositive(): boolean {\n return this.eval() > 0;\n }\n\n isNegative(): boolean {\n return this.eval() < 0;\n }\n\n asPositiveFactor(): Num {\n return this.isPositive() ? this : this.abs();\n }\n\n // whether a number is considered simple (one term)\n // e.g. for reals, ints and floats are simple\n abstract isSimple(): boolean;\n\n // Based on http://stackoverflow.com/a/10454560/2571482\n getDecimalPlaces() {\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 abstract asRational(): Rational;\n\n static negativeOne(hint) {\n if (hint === \"subtract\") {\n return NumSub;\n } else if (hint === \"divide\") {\n return NumDiv;\n } else {\n return NumNeg;\n }\n }\n\n // find the greatest common denominator\n static findGCD(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 static min(...args: Expr[]) {\n return _.min(args, (num) => num.eval());\n }\n\n static max(...args: Expr[]) {\n return _.max(args, (num) => num.eval());\n }\n}\n\n/* rational number (n: numerator, d: denominator) */\nexport class Rational extends Num {\n n: number;\n d: number;\n\n constructor(numerator: number, denominator: number) {\n super();\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 }\n\n func = Rational;\n\n args() {\n return [this.n, this.d];\n }\n\n eval() {\n return this.n / this.d;\n }\n\n print(): string {\n return this.n.toString() + \"/\" + this.d.toString();\n }\n\n tex(): string {\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(num: Num, options?: {preciseFloats: boolean}) {\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(num: Num, options?: {preciseFloats: boolean}) {\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() {\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() {\n return new Rational(-this.n, this.d);\n }\n\n abs() {\n return new Rational(Math.abs(this.n), this.d);\n }\n\n findGCD(factor: Expr): Expr {\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(exp: Expr) {\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() {\n return new Int(this.d);\n }\n\n isSimple(): boolean {\n return false;\n }\n\n asRational(): Rational {\n return this;\n }\n}\n\n/* integer (n: numerator/number) */\nexport class Int extends Rational {\n constructor(number: number) {\n super(number, 1);\n }\n\n func = Int;\n\n args() {\n return [this.n];\n }\n\n print(): string {\n return this.n.toString();\n }\n\n tex(): string {\n return this.n.toString();\n }\n\n negate() {\n return new Int(-this.n);\n }\n\n abs() {\n return new Int(Math.abs(this.n));\n }\n\n isSimple() {\n return true;\n }\n\n findGCD(factor: Expr): Expr {\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 static create(n: number) {\n return new Int(n).addHint(\"entered\");\n }\n}\n\n/* float (n: number) */\nexport class Float extends Num {\n n: number;\n\n constructor(number: number) {\n super();\n this.n = number;\n }\n\n func = Float;\n\n args() {\n return [this.n];\n }\n\n eval() {\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(): string {\n return this.n.toString();\n }\n\n tex(): string {\n return this.n.toString();\n }\n\n add(num: Num, options?: {preciseFloats: boolean}): Num {\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(num: Num, options?: {preciseFloats: boolean}): Num {\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(options?: Options): Float {\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(): Float {\n return new Float(-this.n);\n }\n\n abs() {\n return new Float(Math.abs(this.n));\n }\n\n findGCD(factor: Expr): Expr {\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(exp: Expr, options?: {preciseFloats?: boolean}) {\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(): Rational {\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() {\n return this.asRational().getDenominator();\n }\n\n isSimple() {\n return true;\n }\n\n static create(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 static toDecimalPlaces(n, places) {\n return new Float(+n.toFixed(Math.min(places, 20))).collect();\n }\n}\n\nconst NumNeg = new Int(-1).addHint(\"negate\");\nconst NumSub = new Int(-1).addHint(\"subtract\");\nconst NumDiv = new Int(-1).addHint(\"divide\");\n\nconst NumSqrt = new Rational(1, 2).addHint(\"root\");\n\nconst NumZero = new Int(0);\nconst NumOne = new Int(1);\nconst NumTen = new Int(10);\n\nvar parseError = function (str: string, 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\ntype ParseOptions = {\n functions?: ReadonlyArray<string>;\n decimal_separator?: string;\n divide_symbol?: string;\n};\n\nexport const parse = function (input: string, options?: ParseOptions) {\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 // If ':' is the divide symbol in your country, replace any ':'s\n // with '/'s.\n if (options && options.divide_symbol) {\n input = input.split(options.divide_symbol).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 as Error).message};\n }\n};\n\n/* unit */\nexport class Unit extends Sym {\n symbol: string;\n\n constructor(symbol: string) {\n super();\n this.symbol = symbol;\n }\n\n func = Unit;\n\n args() {\n return [this.symbol];\n }\n\n recurse() {\n return this;\n }\n\n eval(vars: Vars = {}, options?: ParseOptions) {\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() {\n return [{unit: this.symbol, pow: 1}];\n }\n\n codegen(): string {\n return \"1\";\n }\n\n print(): string {\n return this.symbol;\n }\n\n tex(): string {\n return this.symbol;\n }\n\n // Simplify units by replacing prefixes with multiplication\n collect(options?: 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\n// If possible, replace unit prefixes with a multiplication.\n//\n// \"g\" -> Unit(\"g\")\n// \"kg\" -> 1000 * Unit(\"g\")\nvar unprefixify = function (symbol: string) {\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((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: string) {\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 const unitArray: Pow[] = [];\n\n _(parseResult.unit.num).each((unitSpec) => {\n unitArray.push(\n new Pow(unprefixify(unitSpec.name), new Int(unitSpec.pow)),\n );\n });\n\n _(parseResult.unit.denom).each((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: Expr[] = [\n new Float(+parseResult.magnitude),\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 as Error).message};\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.\nconst hasPrefixes = \"hasPrefixes\";\nconst hasntPrefixes = \"hasntPrefixes\";\n\ntype Prefixes = typeof hasPrefixes | typeof hasntPrefixes;\n\nconst makeAlias = function (str: string, prefixes: Prefixes) {\n var splits = str.split(\"|\");\n var coefficientStr = splits[0].trim();\n var unitsStr = splits[1].trim();\n\n var coefficient = NumOne;\n if (coefficientStr !== \"\") {\n coefficient = parse(coefficientStr).expr;\n }\n\n var numdenomStr = unitsStr.split(\"/\");\n var numdenom: Expr[] = [coefficient];\n\n if (numdenomStr[0]) {\n numdenomStr[0]\n .split(\" \")\n .filter((x) => x !== \"\")\n .forEach((x) => numdenom.push(new Unit(x)));\n }\n\n if (numdenomStr[1]) {\n numdenomStr[1]\n .split(\" \")\n .filter((x) => x !== \"\")\n .forEach((x) => numdenom.push(new Pow(new Unit(x), NumDiv)));\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 = NumZero;\nexport const One = NumOne;\n","import type {CompareOptions, CompareResult, Expression} from \"./types\";\n\n/**\n * Compares two expressions for equality.\n *\n * Assumes that both expressions have already been parsed.\n */\n// TODO(alex): be able to pass a random() function to compare()\nexport const compare = function (\n expr1: Expression,\n expr2: Expression,\n options: Partial<CompareOptions> = {},\n): CompareResult {\n const defaults: CompareOptions = {\n form: false,\n simplify: false,\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 const optionsWithDefaults: CompareOptions = {\n ...defaults,\n ...options,\n };\n\n // TODO(CP-1614): Figure out how to make these messages translatable\n\n // Variable check\n const vars = expr1.sameVars(expr2);\n if (!vars.equal) {\n let 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 (optionsWithDefaults.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 (optionsWithDefaults.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":["libName","libVersion","addLibraryVersionToPerseusDebug","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","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","isNaN","object","isInfinite","Infinity","randomFloat","min","max","extent","random","ITERATIONS","TOLERANCE","partition","list","iteratee","a","b","_","forEach","elem","key","ctx","isExpr","arg","Expr","isAdd","term","isRational","Rational","getFactors","expr","terms","construct","func","instance","recurse","method","passed","map","isString","isNumber","eval","vars","print","codegen","compile","code","Function","asTex","defaults","display","dynamic","times","tex","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","varAndFuncList","Unit","expr1","expr2","unitList1","unitList2","isEqual","floor","useFloats","each","result1","partialEval","result2","toFixed","sameForm","findGCD","NumOne","getDenominator","asMul","isPositive","isNegative","asPositiveFactor","hint","hints","clone","negate","NumNeg","constructor","parens","Seq","sortBy","numbers","others","Num","identity","flattened","pluck","all","oldTerm","newTerm","indexOf","newTerms","isArray","remove","reduce","memo","pairs","muls","grouped","groupBy","pair","collected","compact","sum","zip","coefficient","keepNegative","factors","rest","left","remainder","right","add","NumZero","tmUnits","chain","value","localeCompare","cdot","inverses","inverse","number","negatives","numerator","withThisRemoved","splice","shouldPushDown","fraction","d","NumDiv","subtract","entered","denominator","isInverse","isInverseAdd","base","mul","hasAdd","hasInverseAdd","normals","adds","expanded","temp","factored","rationals","ratObj","rational","partitioned","summed","groupedPairs","isBasic","trigs","trig","logs","exprs","byArg","funcs","sin","cos","tan","cot","byBase","power","Boolean","factorIn","negativeOne","factorOut","divide","isNum","find","negated","first","isInt","reversed","reverse","undefined","divided","last","initial","trigLog","open","newTrigLog","pos","neg","posOrNeg","posNum","negNum","every","firstNeg","firstNum","evaledBase","evaledExp","simplifiedExp","decimals","toString","rationalExp","oddDenominator","oddNumerator","sign","asDivide","isSimple","texSplit","positive","signed","cache","indices","without","isSimilarLog","preciseFloats","asRational","decimalsInBase","getDecimalPlaces","root","decimalsInRoot","newBase","isDiv","isSquaredTrig","expA","expB","NumSqrt","radicand","degree","isNatural","e","NumTen","isEven","contains","functions","bind","sinh","cosh","csc","sec","arcsin","asin","arccos","acos","arctan","atan","arccsc","arcsec","arccot","argStr","tanh","csch","sech","coth","positives","signs","eq","asExpr","unfactored","isZero","isInequality","isEquality","divideThrough","hasVar","isOne","dividedResult","eq1","eq2","solveLinearEquationForVariable","variable","termHasVar","Sym","newVars","extend","x","parsedFunc","parsed","subscript","sub","prettyPrint","prefix","PI","E","pi","NumSub","mod","gcd","toDecimalPlaces","parts","places","constants","decimal_separator","divide_symbol","error","message","baseUnits","derivedUnits","conversion","unprefixify","siPrefixes","keys","RegExp","testPrefix","test","prefixes","hasPrefixes","unitParse","parseResult","unitArray","unitSpec","coefArray","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","Zero","One","form","optionsWithDefaults","wrongVariableCase","wrongVariableNames"],"mappings":"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"}