UNPKG

@khanacademy/kas

Version:

A lightweight JavaScript CAS for comparing expressions and equations.

18 lines (10 loc) 91.1 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var perseusUtils = require('@khanacademy/perseus-utils'); var _ = require('underscore'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } var ___default = /*#__PURE__*/_interopDefaultCompat(_); const libName="@khanacademy/kas";const libVersion="2.2.3";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion); var parser$1=function(){var 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];var parser={trace:function trace(){},yy:{},symbols_:{"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},terminals_:{2:"error",6:"EOF",8:"POW",11:"DIV",13:"MUL",15:"^",17:"ATOM",18:"FLOAT",19:"NAT",20:"NEG"},productions_:[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]],performAction:function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$){var $0=$$.length-1;switch(yystate){case 1:return {type:"unitMagnitude",magnitude:$$[$0-2],unit:$$[$0-1]};case 2:return {type:"unitStandalone",unit:$$[$0-1]};case 3:this.$=$$[$0-2]+"e"+$$[$0];break;case 4:case 13:case 14:case 15:case 17:this.$=$$[$0];break;case 5:this.$={num:$$[$0-2],denom:$$[$0]};break;case 6:this.$={num:$$[$0],denom:null};break;case 7:this.$=[$$[$0-2]].concat($$[$0]);break;case 8:this.$=[$$[$0-1]].concat($$[$0]);break;case 9:this.$=[$$[$0]];break;case 10:this.$={name:$$[$0-2],pow:$$[$0]};break;case 11:this.$={name:$$[$0],pow:1};break;case 12:this.$=yytext;break;case 16:this.$="-"+$$[$0];break}},table:[{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]}],defaultActions:{13:[2,2],19:[2,1],20:[2,3],22:[2,17],23:[2,5],26:[2,16]},parseError:function parseError(str,hash){if(hash.recoverable){this.trace(str);}else {throw new Error(str)}},parse:function parse(input){var self=this,stack=[0],vstack=[null],lstack=[],table=this.table,yytext="",yylineno=0,yyleng=0,TERROR=2,EOF=1;var args=lstack.slice.call(arguments,1);var lexer=Object.create(this.lexer);var sharedState={yy:{}};for(var k in this.yy){if(Object.prototype.hasOwnProperty.call(this.yy,k)){sharedState.yy[k]=this.yy[k];}}lexer.setInput(input,sharedState.yy);sharedState.yy.lexer=lexer;sharedState.yy.parser=this;if(typeof lexer.yylloc=="undefined"){lexer.yylloc={};}var yyloc=lexer.yylloc;lstack.push(yyloc);var ranges=lexer.options&&lexer.options.ranges;if(typeof sharedState.yy.parseError==="function"){this.parseError=sharedState.yy.parseError;}else {this.parseError=Object.getPrototypeOf(this).parseError;}function lex(){var token;token=lexer.lex()||EOF;if(typeof token!=="number"){token=self.symbols_[token]||token;}return token}var symbol,state,action,r,yyval={},p,len,newState,expected;while(true){state=stack[stack.length-1];if(this.defaultActions[state]){action=this.defaultActions[state];}else {if(symbol===null||typeof symbol=="undefined"){symbol=lex();}action=table[state]&&table[state][symbol];}if(typeof action==="undefined"||!action.length||!action[0]){var errStr="";expected=[];for(p in table[state]){if(this.terminals_[p]&&p>TERROR){expected.push("'"+this.terminals_[p]+"'");}}if(lexer.showPosition){errStr="Parse error on line "+(yylineno+1)+":\n"+lexer.showPosition()+"\nExpecting "+expected.join(", ")+", got '"+(this.terminals_[symbol]||symbol)+"'";}else {errStr="Parse error on line "+(yylineno+1)+": Unexpected "+(symbol==EOF?"end of input":"'"+(this.terminals_[symbol]||symbol)+"'");}this.parseError(errStr,{text:lexer.match,token:this.terminals_[symbol]||symbol,line:lexer.yylineno,loc:yyloc,expected:expected});}if(action[0]instanceof Array&&action.length>1){throw new Error("Parse Error: multiple actions possible at state: "+state+", token: "+symbol)}switch(action[0]){case 1:stack.push(symbol);vstack.push(lexer.yytext);lstack.push(lexer.yylloc);stack.push(action[1]);symbol=null;{yyleng=lexer.yyleng;yytext=lexer.yytext;yylineno=lexer.yylineno;yyloc=lexer.yylloc;}break;case 2:len=this.productions_[action[1]][1];yyval.$=vstack[vstack.length-len];yyval._$={first_line:lstack[lstack.length-(len||1)].first_line,last_line:lstack[lstack.length-1].last_line,first_column:lstack[lstack.length-(len||1)].first_column,last_column:lstack[lstack.length-1].last_column};if(ranges){yyval._$.range=[lstack[lstack.length-(len||1)].range[0],lstack[lstack.length-1].range[1]];}r=this.performAction.apply(yyval,[yytext,yyleng,yylineno,sharedState.yy,action[1],vstack,lstack].concat(args));if(typeof r!=="undefined"){return r}if(len){stack=stack.slice(0,-1*len*2);vstack=vstack.slice(0,-1*len);lstack=lstack.slice(0,-1*len);}stack.push(this.productions_[action[1]][0]);vstack.push(yyval.$);lstack.push(yyval._$);newState=table[stack[stack.length-2]][stack[stack.length-1]];stack.push(newState);break;case 3:return true}}return true}};var lexer=function(){var lexer={EOF:1,parseError:function parseError(str,hash){if(this.yy.parser){this.yy.parser.parseError(str,hash);}else {throw new Error(str)}},setInput:function(input,yy){this.yy=yy||this.yy||{};this._input=input;this._more=this._backtrack=this.done=false;this.yylineno=this.yyleng=0;this.yytext=this.matched=this.match="";this.conditionStack=["INITIAL"];this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};if(this.options.ranges){this.yylloc.range=[0,0];}this.offset=0;return this},input:function(){var ch=this._input[0];this.yytext+=ch;this.yyleng++;this.offset++;this.match+=ch;this.matched+=ch;var lines=ch.match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno++;this.yylloc.last_line++;}else {this.yylloc.last_column++;}if(this.options.ranges){this.yylloc.range[1]++;}this._input=this._input.slice(1);return ch},unput:function(ch){var len=ch.length;var lines=ch.split(/(?:\r\n?|\n)/g);this._input=ch+this._input;this.yytext=this.yytext.substr(0,this.yytext.length-len);this.offset-=len;var oldLines=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1);this.matched=this.matched.substr(0,this.matched.length-1);if(lines.length-1){this.yylineno-=lines.length-1;}var r=this.yylloc.range;this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:lines?(lines.length===oldLines.length?this.yylloc.first_column:0)+oldLines[oldLines.length-lines.length].length-lines[0].length:this.yylloc.first_column-len};if(this.options.ranges){this.yylloc.range=[r[0],r[0]+this.yyleng-len];}this.yyleng=this.yytext.length;return this},more:function(){this._more=true;return this},reject:function(){if(this.options.backtrack_lexer){this._backtrack=true;}else {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(),{text:"",token:null,line:this.yylineno})}return this},less:function(n){this.unput(this.match.slice(n));},pastInput:function(){var past=this.matched.substr(0,this.matched.length-this.match.length);return (past.length>20?"...":"")+past.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var next=this.match;if(next.length<20){next+=this._input.substr(0,20-next.length);}return (next.substr(0,20)+(next.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var pre=this.pastInput();var c=new Array(pre.length+1).join("-");return pre+this.upcomingInput()+"\n"+c+"^"},test_match:function(match,indexed_rule){var token,lines,backup;if(this.options.backtrack_lexer){backup={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done};if(this.options.ranges){backup.yylloc.range=this.yylloc.range.slice(0);}}lines=match[0].match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno+=lines.length;}this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lines?lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+match[0].length};this.yytext+=match[0];this.match+=match[0];this.matches=match;this.yyleng=this.yytext.length;if(this.options.ranges){this.yylloc.range=[this.offset,this.offset+=this.yyleng];}this._more=false;this._backtrack=false;this._input=this._input.slice(match[0].length);this.matched+=match[0];token=this.performAction.call(this,this.yy,this,indexed_rule,this.conditionStack[this.conditionStack.length-1]);if(this.done&&this._input){this.done=false;}if(token){return token}else if(this._backtrack){for(var k in backup){this[k]=backup[k];}return false}return false},next:function(){if(this.done){return this.EOF}if(!this._input){this.done=true;}var token,match,tempMatch,index;if(!this._more){this.yytext="";this.match="";}var rules=this._currentRules();for(var i=0;i<rules.length;i++){tempMatch=this._input.match(this.rules[rules[i]]);if(tempMatch&&(!match||tempMatch[0].length>match[0].length)){match=tempMatch;index=i;if(this.options.backtrack_lexer){token=this.test_match(tempMatch,rules[i]);if(token!==false){return token}else if(this._backtrack){match=false;continue}else {return false}}else if(!this.options.flex){break}}}if(match){token=this.test_match(match,rules[index]);if(token!==false){return token}return false}if(this._input===""){return this.EOF}else {return this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})}},lex:function lex(){var r=this.next();if(r){return r}else {return this.lex()}},begin:function begin(condition){this.conditionStack.push(condition);},popState:function popState(){var n=this.conditionStack.length-1;if(n>0){return this.conditionStack.pop()}else {return this.conditionStack[0]}},_currentRules:function _currentRules(){if(this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules}else {return this.conditions["INITIAL"].rules}},topState:function topState(n){n=this.conditionStack.length-1-Math.abs(n||0);if(n>=0){return this.conditionStack[n]}else {return "INITIAL"}},pushState:function pushState(condition){this.begin(condition);},stateStackSize:function stateStackSize(){return this.conditionStack.length},options:{},performAction:function anonymous(yy,yy_,$avoiding_name_collisions,YY_START){switch($avoiding_name_collisions){case 0:return 11;case 1:return "(";case 2:return ")";case 3:return 8;case 4:return 15;case 5:return 13;case 6:return 18;case 7:return 19;case 8:return 20;case 9:return 17;case 10:return 17;case 11:return 17;case 12:break;case 13:return 6;}},rules:[/^(?:\/)/,/^(?:\()/,/^(?:\))/,/^(?:(\*|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+)/,/^(?:$)/],conditions:{"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"inclusive":true}}};return lexer}();parser.lexer=lexer;function Parser(){this.yy={};}Parser.prototype=parser;parser.Parser=Parser;return new Parser}();const unitParser=parser$1; var parser=function(){var 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];var parser={trace:function trace(){},yy:{},symbols_:{"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},terminals_:{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"},productions_:[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]],performAction:function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$){var $0=$$.length-1;switch(yystate){case 1:return new yy.Eq($$[$0-3],$$[$0-2],$$[$0-1]);case 2:return $$[$0-1];case 3:return new yy.Add([]);case 4:case 7:case 11:case 13:case 15:case 20:case 23:case 25:case 42:case 43:this.$=$$[$0];break;case 5:this.$=yy.Add.createOrAppend($$[$0-2],$$[$0]);break;case 6:this.$=yy.Add.createOrAppend($$[$0-2],yy.Mul.handleNegative($$[$0],"subtract"));break;case 8:this.$=yy.Mul.fold(yy.Mul.createOrAppend($$[$0-1],$$[$0]));break;case 9:this.$=yy.Mul.fold(yy.Mul.createOrAppend($$[$0-2],$$[$0]));break;case 10:this.$=yy.Mul.fold(yy.Mul.handleDivide($$[$0-2],$$[$0]));break;case 12:this.$=yy.Mul.handleNegative($$[$0]);break;case 14:case 17:this.$=[yytext];break;case 16:this.$=$$[$0-2].concat($$[$0]);break;case 18:this.$=yy.Log.natural();break;case 19:this.$=yy.Log.common();break;case 21:this.$=yy.Trig.create($$[$0-1],$$[$0]);break;case 22:this.$=yy.Log.create($$[$0-1],$$[$0]);break;case 24:this.$=new yy.Pow($$[$0-2],$$[$0]);break;case 26:case 34:this.$=yytext;break;case 27:this.$=new yy.Var($$[$0-2],$$[$0]);break;case 28:this.$=new yy.Var($$[$0]);break;case 29:this.$=new yy.Const(yytext.toLowerCase());break;case 30:this.$=yy.Int.create(Number(yytext));break;case 31:this.$=yy.Float.create(Number(yytext));break;case 32:this.$=$$[$0-1].completeParse();break;case 33:this.$=$$[$0-1].completeParse().addHint("parens");break;case 35:case 36:this.$=yy.Pow.sqrt($$[$0-1]);break;case 37:this.$=new yy.Pow.nthroot($$[$0-1],$$[$0-4]);break;case 38:case 39:case 40:this.$=new yy.Abs($$[$0-1]);break;case 41:this.$=new yy.Func($$[$0-3],$$[$0-1]);break;case 44:this.$=yy.Mul.handleDivide($$[$0-4],$$[$0-1]);break}},table:[{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])],defaultActions:{3:[2,3],33:[2,34],35:[2,2],77:[2,1]},parseError:function parseError(str,hash){if(hash.recoverable){this.trace(str);}else {throw new Error(str)}},parse:function parse(input){var self=this,stack=[0],vstack=[null],lstack=[],table=this.table,yytext="",yylineno=0,yyleng=0,TERROR=2,EOF=1;var args=lstack.slice.call(arguments,1);var lexer=Object.create(this.lexer);var sharedState={yy:{}};for(var k in this.yy){if(Object.prototype.hasOwnProperty.call(this.yy,k)){sharedState.yy[k]=this.yy[k];}}lexer.setInput(input,sharedState.yy);sharedState.yy.lexer=lexer;sharedState.yy.parser=this;if(typeof lexer.yylloc=="undefined"){lexer.yylloc={};}var yyloc=lexer.yylloc;lstack.push(yyloc);var ranges=lexer.options&&lexer.options.ranges;if(typeof sharedState.yy.parseError==="function"){this.parseError=sharedState.yy.parseError;}else {this.parseError=Object.getPrototypeOf(this).parseError;}function lex(){var token;token=lexer.lex()||EOF;if(typeof token!=="number"){token=self.symbols_[token]||token;}return token}var symbol,state,action,r,yyval={},p,len,newState,expected;while(true){state=stack[stack.length-1];if(this.defaultActions[state]){action=this.defaultActions[state];}else {if(symbol===null||typeof symbol=="undefined"){symbol=lex();}action=table[state]&&table[state][symbol];}if(typeof action==="undefined"||!action.length||!action[0]){var errStr="";expected=[];for(p in table[state]){if(this.terminals_[p]&&p>TERROR){expected.push("'"+this.terminals_[p]+"'");}}if(lexer.showPosition){errStr="Parse error on line "+(yylineno+1)+":\n"+lexer.showPosition()+"\nExpecting "+expected.join(", ")+", got '"+(this.terminals_[symbol]||symbol)+"'";}else {errStr="Parse error on line "+(yylineno+1)+": Unexpected "+(symbol==EOF?"end of input":"'"+(this.terminals_[symbol]||symbol)+"'");}this.parseError(errStr,{text:lexer.match,token:this.terminals_[symbol]||symbol,line:lexer.yylineno,loc:yyloc,expected:expected});}if(action[0]instanceof Array&&action.length>1){throw new Error("Parse Error: multiple actions possible at state: "+state+", token: "+symbol)}switch(action[0]){case 1:stack.push(symbol);vstack.push(lexer.yytext);lstack.push(lexer.yylloc);stack.push(action[1]);symbol=null;{yyleng=lexer.yyleng;yytext=lexer.yytext;yylineno=lexer.yylineno;yyloc=lexer.yylloc;}break;case 2:len=this.productions_[action[1]][1];yyval.$=vstack[vstack.length-len];yyval._$={first_line:lstack[lstack.length-(len||1)].first_line,last_line:lstack[lstack.length-1].last_line,first_column:lstack[lstack.length-(len||1)].first_column,last_column:lstack[lstack.length-1].last_column};if(ranges){yyval._$.range=[lstack[lstack.length-(len||1)].range[0],lstack[lstack.length-1].range[1]];}r=this.performAction.apply(yyval,[yytext,yyleng,yylineno,sharedState.yy,action[1],vstack,lstack].concat(args));if(typeof r!=="undefined"){return r}if(len){stack=stack.slice(0,-1*len*2);vstack=vstack.slice(0,-1*len);lstack=lstack.slice(0,-1*len);}stack.push(this.productions_[action[1]][0]);vstack.push(yyval.$);lstack.push(yyval._$);newState=table[stack[stack.length-2]][stack[stack.length-1]];stack.push(newState);break;case 3:return true}}return true}};var lexer=function(){var lexer={EOF:1,parseError:function parseError(str,hash){if(this.yy.parser){this.yy.parser.parseError(str,hash);}else {throw new Error(str)}},setInput:function(input,yy){this.yy=yy||this.yy||{};this._input=input;this._more=this._backtrack=this.done=false;this.yylineno=this.yyleng=0;this.yytext=this.matched=this.match="";this.conditionStack=["INITIAL"];this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};if(this.options.ranges){this.yylloc.range=[0,0];}this.offset=0;return this},input:function(){var ch=this._input[0];this.yytext+=ch;this.yyleng++;this.offset++;this.match+=ch;this.matched+=ch;var lines=ch.match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno++;this.yylloc.last_line++;}else {this.yylloc.last_column++;}if(this.options.ranges){this.yylloc.range[1]++;}this._input=this._input.slice(1);return ch},unput:function(ch){var len=ch.length;var lines=ch.split(/(?:\r\n?|\n)/g);this._input=ch+this._input;this.yytext=this.yytext.substr(0,this.yytext.length-len);this.offset-=len;var oldLines=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1);this.matched=this.matched.substr(0,this.matched.length-1);if(lines.length-1){this.yylineno-=lines.length-1;}var r=this.yylloc.range;this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:lines?(lines.length===oldLines.length?this.yylloc.first_column:0)+oldLines[oldLines.length-lines.length].length-lines[0].length:this.yylloc.first_column-len};if(this.options.ranges){this.yylloc.range=[r[0],r[0]+this.yyleng-len];}this.yyleng=this.yytext.length;return this},more:function(){this._more=true;return this},reject:function(){if(this.options.backtrack_lexer){this._backtrack=true;}else {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(),{text:"",token:null,line:this.yylineno})}return this},less:function(n){this.unput(this.match.slice(n));},pastInput:function(){var past=this.matched.substr(0,this.matched.length-this.match.length);return (past.length>20?"...":"")+past.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var next=this.match;if(next.length<20){next+=this._input.substr(0,20-next.length);}return (next.substr(0,20)+(next.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var pre=this.pastInput();var c=new Array(pre.length+1).join("-");return pre+this.upcomingInput()+"\n"+c+"^"},test_match:function(match,indexed_rule){var token,lines,backup;if(this.options.backtrack_lexer){backup={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done};if(this.options.ranges){backup.yylloc.range=this.yylloc.range.slice(0);}}lines=match[0].match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno+=lines.length;}this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lines?lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+match[0].length};this.yytext+=match[0];this.match+=match[0];this.matches=match;this.yyleng=this.yytext.length;if(this.options.ranges){this.yylloc.range=[this.offset,this.offset+=this.yyleng];}this._more=false;this._backtrack=false;this._input=this._input.slice(match[0].length);this.matched+=match[0];token=this.performAction.call(this,this.yy,this,indexed_rule,this.conditionStack[this.conditionStack.length-1]);if(this.done&&this._input){this.done=false;}if(token){return token}else if(this._backtrack){for(var k in backup){this[k]=backup[k];}return false}return false},next:function(){if(this.done){return this.EOF}if(!this._input){this.done=true;}var token,match,tempMatch,index;if(!this._more){this.yytext="";this.match="";}var rules=this._currentRules();for(var i=0;i<rules.length;i++){tempMatch=this._input.match(this.rules[rules[i]]);if(tempMatch&&(!match||tempMatch[0].length>match[0].length)){match=tempMatch;index=i;if(this.options.backtrack_lexer){token=this.test_match(tempMatch,rules[i]);if(token!==false){return token}else if(this._backtrack){match=false;continue}else {return false}}else if(!this.options.flex){break}}}if(match){token=this.test_match(match,rules[index]);if(token!==false){return token}return false}if(this._input===""){return this.EOF}else {return this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})}},lex:function lex(){var r=this.next();if(r){return r}else {return this.lex()}},begin:function begin(condition){this.conditionStack.push(condition);},popState:function popState(){var n=this.conditionStack.length-1;if(n>0){return this.conditionStack.pop()}else {return this.conditionStack[0]}},_currentRules:function _currentRules(){if(this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules}else {return this.conditions["INITIAL"].rules}},topState:function topState(n){n=this.conditionStack.length-1-Math.abs(n||0);if(n>=0){return this.conditionStack[n]}else {return "INITIAL"}},pushState:function pushState(condition){this.begin(condition);},stateStackSize:function stateStackSize(){return this.conditionStack.length},options:{"flex":true},performAction:function anonymous(yy,yy_,$avoiding_name_collisions,YY_START){switch($avoiding_name_collisions){case 0:break;case 1:break;case 2:break;case 3:return "INT";case 4:return "FLOAT";case 5:return "^";case 6:return "*";case 7:return "*";case 8:return "*";case 9:return "*";case 10:return "/";case 11:return "/";case 12:return "-";case 13:return "-";case 14:return "+";case 15:return "^";case 16:return "(";case 17:return ")";case 18:return "(";case 19:return ")";case 20:return "[";case 21:return "]";case 22:return "{";case 23:return "}";case 24:return "{";case 25:return "}";case 26:return "_";case 27:return "|";case 28:return "LEFT|";case 29:return "RIGHT|";case 30:return "!";case 31:return "SIGN";case 32:yy_.yytext="<=";return "SIGN";case 33:yy_.yytext=">=";return "SIGN";case 34:yy_.yytext="<=";return "SIGN";case 35:yy_.yytext=">=";return "SIGN";case 36:yy_.yytext="<>";return "SIGN";case 37:yy_.yytext="<>";return "SIGN";case 38:yy_.yytext="<>";return "SIGN";case 39:yy_.yytext="<>";return "SIGN";case 40:yy_.yytext="<=";return "SIGN";case 41:yy_.yytext=">=";return "SIGN";case 42:return "FRAC";case 43:return "FRAC";case 44:return "sqrt";case 45:return "abs";case 46:return "ln";case 47:return "log";case 48:return "TRIG";case 49:return "TRIG";case 50:return "TRIG";case 51:return "TRIG";case 52:yy_.yytext="sin";return "TRIG";case 53:yy_.yytext="cos";return "TRIG";case 54:yy_.yytext="tan";return "TRIG";case 55:yy_.yytext="csc";return "TRIG";case 56:yy_.yytext="sec";return "TRIG";case 57:yy_.yytext="cot";return "TRIG";case 58:yy_.yytext="arcsin";return "TRIG";case 59:yy_.yytext="arccos";return "TRIG";case 60:yy_.yytext="arctan";return "TRIG";case 61:yy_.yytext="arccsc";return "TRIG";case 62:yy_.yytext="arcsec";return "TRIG";case 63:yy_.yytext="arccot";return "TRIG";case 64:return "TRIGINV";case 65:return "TRIGINV";case 66:yy_.yytext="sinh";return "TRIG";case 67:yy_.yytext="cosh";return "TRIG";case 68:yy_.yytext="tanh";return "TRIG";case 69:yy_.yytext="csch";return "TRIG";case 70:yy_.yytext="sech";return "TRIG";case 71:yy_.yytext="tanh";return "TRIG";case 72:return "CONST";case 73:yy_.yytext="pi";return "CONST";case 74:yy_.yytext="pi";return "CONST";case 75:return "VAR";case 76:yy_.yytext="theta";return "VAR";case 77:yy_.yytext="theta";return "VAR";case 78:return "VAR";case 79:yy_.yytext="phi";return "VAR";case 80:yy_.yytext="phi";return "VAR";case 81:return yy.symbolLexer(yy_.yytext);case 82:return "EOF";case 83:return "INVALID";case 84:console.log(yy_.yytext);break}},rules:[/^(?:\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])/,/^(?:$)/,/^(?:.)/,/^(?:.)/],conditions:{"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}}};return lexer}();parser.lexer=lexer;function Parser(){this.yy={};}Parser.prototype=parser;parser.Parser=Parser;return new Parser}(); const isNaN=function(object){return object!==object};const isInfinite=function(object){return object===Infinity||object===-Infinity};const randomFloat=function(min,max){var extent=max-min;return Math.random()*extent+min};var TOLERANCE=9;function partition(list,iteratee){const a=[];const b=[];___default.default.forEach(list,(elem,key,ctx)=>{if(iteratee(elem,key,ctx)){a.push(elem);}else {b.push(elem);}});return [a,b]}function isExpr(arg){return arg instanceof Expr}const isAdd=function(term){return term instanceof Add};function isRational(arg){return arg instanceof Rational}function getFactors(expr){if(expr instanceof Mul){return expr.terms}else {return [expr]}}class Expr{construct(args){const func=this.func;const instance=new func(...args);if(typeof instance==="undefined"){throw new Error("constructor function returning undefined")}return instance}recurse(method,...passed){var args=this.args().map(function(arg){return ___default.default.isString(arg)||___default.default.isNumber(arg)?arg:arg?.[method].apply(arg,passed)});return this.construct(args)}eval(vars={},options){throw new Error("Abstract method - must override for expr: "+this.print())}codegen(){throw new Error("Abstract method - must override for expr: "+this.print())}compile(){var code=this.codegen();try{return new Function("vars","return "+code+";")}catch{throw new Error("Function did not compile: "+code)}}asTex(options){options=options||{};___default.default.defaults(options,{display:true,dynamic:true,times:false});let tex=this.tex();if(options.display){tex="\\displaystyle "+tex;}if(options.dynamic){tex=tex.replace(/\(/g,"\\left(");tex=tex.replace(/\)/g,"\\right)");}if(options.times){tex=tex.replace(/\\cdot/g,"\\times");}return tex}name(){return this.func.name}repr(){return this.name()+"("+this.args().map(function(arg){return ___default.default.isString(arg)||___default.default.isNumber(arg)?arg:arg?.repr()}).join(",")+")"}strip(){return this.recurse("strip")}normalize(){return this.recurse("normalize")}expand(){return this.recurse("expand")}factor(options){return this.recurse("factor",options)}collect(options){return this.recurse("collect",options)}equals(other){return this.normalize().print()===other.normalize().print()}simplify(options){options={once:false,...options};var step1=this.factor(options);var step2=step1.collect(options);if(step1.equals(step2)){step2=this.collect(options);}var step3=step2.expand();var step4=step3.collect(options);if(step3.equals(step4)){step4=step2.collect(options);}var simplified=step4;if(options.once||this.equals(simplified)){return simplified}else {return simplified.simplify(options)}}isSimplified(){return this.equals(this.simplify())}exprArgs(){return this.args().filter(isExpr)}getVars(excludeFunc){return ___default.default.uniq(___default.default.flatten(___default.default.invoke(this.exprArgs(),"getVars",excludeFunc))).sort()}getConsts(){return ___default.default.uniq(___default.default.flatten(___default.default.invoke(this.exprArgs(),"getConsts"))).sort()}getUnits(){return ___default.default.flatten(___default.default.invoke(this.exprArgs(),"getUnits"))}is(func){return this instanceof func}has(func){if(this instanceof func){return true}return ___default.default.any(this.exprArgs(),function(arg){return arg.has(func)})}raiseToThe(exp,options){return new Pow(this,exp)}isSubtract(){return false}isDivide(){return false}isRoot(){return false}needsExplicitMul(){return this.exprArgs()[0].needsExplicitMul()}compare(other){if(other instanceof Eq){return false}var varList=___default.default.union(this.getVars(true),other.getVars(true));var getDelta=function(num1,num2){if(Math.abs(num1)<1||Math.abs(num2)<1){return Math.abs(num1-num2)}else {return Math.abs(1-num1/num2)}};var equalNumbers=function(num1,num2){var delta=getDelta(num1,num2);return isInfinite(num1)&&isInfinite(num2)||isNaN(num1)&&isNaN(num2)||delta<Math.pow(10,-9)};const varAndFuncList=___default.default.union(this.getVars(false),other.getVars(false));if(!varAndFuncList.length&&!this.has(Unit)&&!other.has(Unit)){return equalNumbers(this.eval(),other.eval())}var expr1=this.collect();var expr2=other.collect();var unitList1=this.getUnits();var unitList2=other.getUnits();if(!___default.default.isEqual(unitList1,unitList2)){return false}const randomValueGenerators=[floatGenerator(0,1),floatGenerator(-1,0),intGenerator(0,10),intGenerator(-10,0),floatGenerator(0,10),floatGenerator(-10,0),intGenerator(0,100),intGenerator(-100,0),floatGenerator(0,100),floatGenerator(-100,0),intGenerator(0,1e3),intGenerator(-1e3,0),floatGenerator(0,1e3),floatGenerator(-1e3,0)];const variableValueGenerators=[constantGenerator(-1),constantGenerator(0),constantGenerator(1),...randomValueGenerators,...randomValueGenerators];for(const generateValue of variableValueGenerators){var vars={};___default.default.each(varList,function(v){vars[v]=generateValue();});let equal;if(expr1.has(Func)||expr2.has(Func)||expr1.has(Unit)||expr2.has(Unit)){const result1=expr1.partialEval(vars);const result2=expr2.partialEval(vars);equal=result1.simplify().equals(result2.simplify());}else {const result1=expr1.eval(vars);const result2=expr2.eval(vars);equal=equalNumbers(result1,result2);}if(!equal){return false}}return true}partialEval(vars){if(this instanceof Unit){return this}else if(!this.has(Func)){return new Float(+this.eval(vars).toFixed(TOLERANCE)).collect()}else if(this instanceof Func){return new Func(this.symbol,this.arg.partialEval(vars))}else {return this.recurse("partialEval",vars)}}sameForm(other){return this.strip().equals(other.strip())}findGCD(factor){return this.equals(factor)?factor:NumOne}getDenominator(){return NumOne}asMul(){return new Mul(NumOne,this)}isPositive(){throw new Error("Abstract method - must override for expr: "+this.print())}isNegative(){return false}asPositiveFactor(){return this.isPositive()?this:NumOne}addHint(hint){if(!hint){return this}var expr=this.construct(this.args());expr.hints=___default.default.clone(this.hints);expr.hints[hint]=true;return expr}completeParse(){return this.recurse("completeParse")}abs(){throw new Error("Abstract method - must override for expr: "+this.print())}negate(){return new Mul(NumNeg,this)}constructor(){this.hints={parens:false};}}class Seq extends Expr{args(){return this.terms}normalize(){var terms=___default.default.sortBy(___default.default.invoke(this.terms,"normalize"),term=>{return term.print()});return new this.func(terms)}expand(){return this.recurse("expand").flatten()}partition(){var[numbers,others]=partition(this.terms,term=>{return term instanceof Num});return [new this.func(numbers),new this.func(others)]}flatten(){var type=this;var terms=___default.default.reject(this.terms,term=>{return term.equals(type.identity)});if(terms.length===0){return type.identity}if(terms.length===1){return terms[0]}const[same,others]=partition(terms,term=>{return term instanceof type.func});var flattened=others.concat(___default.default.flatten(___default.default.pluck(same,"terms"),true));return new type.func(flattened)}isPositive(){var terms=___default.default.invoke(this.terms,"collect");return ___default.default.all(___default.default.invoke(terms,"isPositive"))}replace(oldTerm,newTerm){const index=oldTerm instanceof Expr?___default.default.indexOf(this.terms,oldTerm):oldTerm;var newTerms=[];if(Array.isArray(newTerm)){newTerms=newTerm;}else if(newTerm){newTerms=[newTerm];}var terms=this.terms.slice(0,index).concat(newTerms).concat(this.terms.slice(index+1));return new this.func(terms)}remove(term){return this.replace(term)}getDenominator(){return new Mul(___default.default.invoke(this.terms,"getDenominator")).flatten()}constructor(...args){super();if(args.length===1){this.terms=args[0];}else {this.terms=args;}}}class Add extends Seq{eval(vars={},options){return ___default.default.reduce(this.terms,(memo,term)=>{return memo+term.eval(vars,options)},0)}codegen(){return ___default.default.map(this.terms,term=>{return "("+term.codegen()+")"}).join(" + ")||"0"}print(){return ___default.default.invoke(this.terms,"print").join("+")}tex(){let tex="";___default.default.each(this.terms,term=>{if(!tex||term.isSubtract()){tex+=term.tex();}else {tex+="+"+term.tex();}});return tex}collect(options){var terms=___default.default.invoke(this.terms,"collect",options);var pairs=[];___default.default.each(terms,term=>{if(term instanceof Mul){var muls=term.partition();pairs.push([muls[1].flatten(),muls[0].reduce(options)]);}else if(term instanceof Num){pairs.push([NumOne,term]);}else {pairs.push([term,NumOne]);}});var grouped=___default.default.groupBy(pairs,pair=>{return pair[0].normalize().print()});var collected=___default.default.compact(___default.default.map(grouped,pairs=>{var expr=pairs[0][0];var sum=new Add(___default.default.zip.apply(___default.default,pairs)[1]);var coefficient=sum.reduce(options);return new Mul(coefficient,expr).collect(options)}));return new Add(collected).flatten()}factor(options={keepNegative:false}){const terms=this.terms.map(term=>term.collect());let factors;if(terms[0]instanceof Mul){factors=terms[0].terms;}else {factors=[terms[0]];}___default.default.each(___default.default.rest(this.terms),term=>{factors=___default.default.map(factors,factor=>{return term.findGCD(factor)});});if(!options.keepNegative&&this.isNegative()){factors.push(NumNeg);}const left=new Mul(factors).flatten().collect();const remainder=terms.map(term=>Mul.handleDivide(term,left).simplify());const right=new Add(remainder).flatten();return Mul.createOrAppend(left,right).flatten()}reduce(options){return ___default.default.reduce(this.terms,(memo,term)=>{return memo.add(term,options)},this.identity)}needsExplicitMul(){return false}isNegative(){var terms=___default.default.invoke(this.terms,"collect");return ___default.default.all(___default.default.invoke(terms,"isNegative"))}negate(){return new Add(___default.default.invoke(this.terms,"negate"))}static createOrAppend(left,right){if(left instanceof Add){return new Add(left.terms.concat(right))}else {return new Add(left,right)}}constructor(...args){super(...args),this.identity=NumZero,this.func=Add;}}class Mul extends Seq{eval(vars={},options){return ___default.default.reduce(this.terms,(memo,term)=>{return memo*term.eval(vars,options)},1)}codegen(){return ___default.default.map(this.terms,term=>{return "("+term.codegen()+")"}).join(" * ")||"0"}print(){return ___default.default.map(this.terms,term=>{return term instanceof Add?"("+term.print()+")":term.print()}).join("*")}getUnits(){var tmUnits=___default.default(this.terms).chain().map(term=>{return term.getUnits()}).flatten().value();tmUnits.sort((a,b)=>a.unit.localeCompare(b.unit));return tmUnits}tex(){var cdot=" \\cdot ";var terms=___default.default.groupBy(this.terms,term=>{if(term.isDivide()){return "inverse"}else if(term instanceof Num){return "number"}else {return "other"}});var inverses=terms.inverse||[];var numbers=terms.number||[];var others=terms.other||[];var negatives="";var numerator;for(var i=0;i<numbers.length;i++){var isRational=numbers[i]instanceof Rational&&!(numbers[i]instanceof Int);if(isRational&&others.length>0&&inverses.length>0){var withThisRemoved=numbers.slice();withThisRemoved.splice(i,1);var newTerms=withThisRemoved.concat(inverses).concat(others);return numbers[i].tex()+new Mul(newTerms).tex()}}numbers=___default.default.compact(___default.default.map(numbers,term=>{var shouldPushDown=!term.hints.fraction||inverses.length>0;if(term instanceof Rational&&!(term instanceof Int)&&shouldPushDown){inverses.push(new Pow(new Int(term.d),NumDiv));var number=new Int(term.n);number.hints=term.hints;return ___default.default.any(term.hints)?number:null}else {return term}}));if(numbers.length===0&&others.length===1){numerator=others[0].tex();}else {var tex="";___default.default.each(numbers,term=>{if(term.hints.subtract&&term.hints.entered){negatives+="-";tex+=(tex?cdot:"")+term.abs().tex();}else if(term instanceof Int&&term.n===-1&&(term.hints.negate||term.hints.subtract)){negatives+="-";}else {tex+=(tex?cdot:"")+term.tex();}});___default.default.each(others,term=>{if(term.needsExplicitMul()){tex+=(tex?cdot:"")+term.tex();}else if(term instanceof Add){tex+="("+term.tex()+")";}else {tex+=term.tex();}});numerator=tex?tex:"1";}if(!inverses.length){return negatives+numerator}else {var denominator=new Mul(___default.default.invoke(inverses,"asDivide")).flatten().tex();return negatives+"\\frac{"+numerator+"}{"+denominator+"}"}}strip(){var terms=___default.default.map(this.terms,term=>{return term instanceof Num?term.abs():term.strip()});return new Mul(terms).flatten()}expand(){const isInverse=function(term){return term instanceof Pow&&term.exp.isNegative()};const isInverseAdd=function(term){return isInverse(term)&&isAdd(term.base)};const mul=this.recurse("expand").flatten();const factors=getFactors(mul);const hasAdd=___default.default.any(factors,isAdd);const hasInverseAdd=___default.default.any(factors,isInverseAdd);if(!(hasAdd||hasInverseAdd)){return mul}let[inverses,normals]=partition(factors,isInverse);if(hasAdd){const[adds,others]=partition(normals,isAdd);const expanded=___default.default.reduce(adds,function(expanded,add){return ___default.default.reduce(expanded,function(temp,array){return temp.concat(___default.default.map(add.terms,term=>array.concat(term)))},[])},[[]]);const muls=___default.default.map(expanded,function(array){return new Mul(others.concat(array)).flatten()});normals=[new Add(muls)];}if(hasInverseAdd){const denominator=new Mul(___default.default.invoke(inverses,"getDenominator")).flatten();inverses=[new Pow(denominator.expand(),NumDiv)];}return new Mul(normals.concat(inverses)).flatten()}factor(options){var factored=this.recurse("factor",options).flatten();if(!(factored instanceof Mul)){return factored}var[rationals,others]=partition(factored.terms,term=>{return term instanceof Rational});const ratObj=___default.default.reduce(rationals,(memo,term)=>{return {n:memo.n*term.n,d:memo.d*term.d}},{n:1,d:1});const rational=ratObj.d===1?new Int(ratObj.n):new Rational(ratObj.n,ratObj.d);return new Mul(others.concat(rational)).flatten()}collect(options){var partitioned=this.recurse("collect",options).partition();var number=partitioned[0].reduce(options);if(number.eval()===0){return NumZero}const other=partitioned[1].flatten();if(!(other instanceof Mul)){return new Mul(number,other).flatten()}const others=other.terms;var pairs=[];___default.default.each(others,term=>{if(term instanceof Pow){pairs.push([term.base,term.exp]);}else {pairs.push([term,NumOne]);}});var grouped=___default.default.groupBy(pairs,pair=>{return pair[0].normalize().print()});var summed=___default.default.compact(___default.default.map(grouped,pairs=>{var base=pairs[0][0];var sum=new Add(___default.default.zip.apply(___default.default,pairs)[1]);var exp=sum.collect(options);if(exp instanceof Num&&exp.eval()===0){return null}else {return [base,exp]}}));const groupedPairs=___default.default.groupBy(summed,pair=>{if(pair[0]instanceof Trig&&pair[0].isBasic()){return "trig"}else if(pair[0]instanceof Log){return "log"}else {return "expr"}});let trigs=groupedPairs.trig||[];let logs=groupedPairs.log||[];const exprs=groupedPairs.expr||[];if(trigs.length>1){var byArg=___default.default.groupBy(trigs,pair=>{return pair[0].arg.normalize().print()});trigs=[