theorem.js
Version:
A Math library for computation in JavaScript
1 lines • 32.4 kB
JavaScript
if(!BigNumber)var BigNumber=require('bignumber.js');class TheoremJS{constructor(a=20){BigNumber.set({DECIMAL_PLACES:a}),this.version='v1.1.0'}exp(a){return a.isComplex?a.exp():new BigNumber(Math.exp(new BigNumber(a).toNumber()))}factorial(a){return new BigNumber(a).eq(0)?new BigNumber(1):new BigNumber(a).times(this.factorial(new BigNumber(a).minus(1)))}gamma(a){var b=Math.PI,c=Math.exp;const d=7,e=[0.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-0.13857109526572012,0.000009984369578019572,1.5056327351493116e-7];if(0.5>a)return new BigNumber((+(b/(Math.sin(b*a)*this.gamma(1-a).toNumber()))).toFixed(10));if(100<a)return c(this.lngamma(a));a-=1;let f=e[0];for(var g=1;g<d+2;g++)f+=e[g]/(a+g);const h=a+d+0.5;return new BigNumber((+(Math.sqrt(2*b)*Math.pow(h,a+0.5)*c(-h)*f)).toFixed(10))}ln(a,b=15){if(a.isComplex)return a.ln();let c=new BigNumber(0);for(let d=0;d<Math.ceil(b+3/2*a);d++){const b=new BigNumber(1).div(new BigNumber(d).times(2).plus(1)).times(new BigNumber(a).minus(1).div(new BigNumber(a).plus(1)).pow(new BigNumber(d).times(2).plus(1)));c=c.plus(b)}return new BigNumber(c.times(2).toFixed(b-1))}lngamma(a){var b=Math.log;const c=[0.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-0.4919138160976202,0.00003399464998481189,0.00004652362892704858,-0.00009837447530487956,0.0001580887032249125,-0.00021026444172410488,0.00021743961811521265,-0.0001643181065367639,0.00008441822398385275,-0.000026190838401581408,0.0000036899182659531625];if(0>a)return+'0/0';let d=c[0];for(var e=c.length-1;0<e;--e)d+=c[e]/(a+e);const f=a+607/128+0.5;return new BigNumber((+(.5*b(2*Math.PI)+(a+.5)*b(f)-f+b(d)-b(a))).toFixed(10))}log(a,b,c=15){return a.isComplex?a.log(b):new BigNumber(this.ln(a,c).div(this.ln(b,c)).toFixed(c-1))}pow(a,b){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=[a]);let c=[];for(var d=0;d<a.length;d++)c.push(new BigNumber(Math.pow(new BigNumber(a[d]).toNumber(),new BigNumber(b).toNumber()).toFixed(10)));return 1==c.length?c[0]:new BigNumber(c)}root(a,b){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=[a]);let c=[];for(var d=0;d<a.length;d++)c.push(new BigNumber(Math.pow(new BigNumber(a[d]).toNumber(),new BigNumber(1).div(b).toNumber()).toFixed(15)));return 1==c.length?c[0]:c}sigmoid(a,b=15){return new BigNumber(new BigNumber(1).div(this.pow(this.c('e',b),a).plus(1)).toFixed(b))}sqrt(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=[a]);let b=[];for(var c=0;c<a.length;c++)new BigNumber(a[c]).lt(0)?b.push(this.complex(0,new BigNumber(a[c]).abs().sqrt())):b.push(new BigNumber(new BigNumber(a[c]).sqrt()));return 1==b.length?b[0]:b}apply(a,b){'object'!=typeof a&&(a=[a]);let c=[];for(var d=0;d<a.length;d++)c.push(b(a[d]));return 1==c.length?c[0]:c}max(){const a=this.sort(...arguments);return a[a.length-1]}min(){const a=this.sort(...arguments);return a[0]}product(){return[...arguments].reduce((c,a)=>new BigNumber(c).times(a))}sort(){const a=this;return Array.prototype.quickSort=function(){var b=this;if(1>=this.length)return this;for(var c=[],d=[],e=b.splice(a.floor(new BigNumber(b.length).div(2)),1),f=b.length-1;0<=f;f--)new BigNumber(b[f]).lte(new BigNumber(e))?c.push(b[f]):d.push(b[f]);return[].concat(c.quickSort(),e,d.quickSort())},[...arguments].quickSort()}sum(){return[...arguments].reduce((c,a)=>new BigNumber(c).plus(a))}average(){const a=this.sum(...arguments),b=new BigNumber(a).div(arguments.length);return b}correlation(a,b){var c=Math.pow;if(a.length!=b.length)throw'[TheoremJS]: Correlation error, arrays are not the same size';const d=this.average(...a).toNumber(),e=this.average(...b).toNumber();let f=0,g=0,h=0;for(var j=0;j<a.length;j++)f+=(a[j]-d)*(b[j]-e),g+=c(a[j]-d,2),h+=c(b[j]-e,2);const i=f/Math.sqrt(g*h);return new BigNumber(Math.round(i*10000000000)/10000000000)}median(){let a=[...arguments];if('object'==typeof a[0]&&(a=a[0]),a.sort((c,a)=>new BigNumber(c).minus(a).toNumber()),0==a.length)return 0;const b=Math.floor(a.length/2);return a.length%2?new BigNumber(a[b]):new BigNumber((a[b-1]+a[b])/2)}quantile(){let a=[...arguments],b=a[0];if(a.shift(),'object'==typeof a[0]&&(a=a[0]),1<b||0>b)throw'[TheoremJS] n should be a Float between 0 and 1';if(a.sort((c,a)=>c-a),0==a.length)return 0;const c=(a.length-1)*b,d=Math.floor(c);if(void 0!==a[c+1]){const b=a[d]+(c-d)*(a[d+1]-a[d]);return new BigNumber(b)}return a[d]}regression(a,b){return 1==b?this.linreg(a):this.polyreg(a,b)}linreg(a){const b=Object.keys(a),c=Object.values(a),d=c.length;let e=0,f=0,g=0,h=0,j=0;for(let d=0;d<c.length;d++)e+=parseFloat(b[d]),f+=parseFloat(c[d]),g+=parseFloat(b[d]*c[d]),h+=parseFloat(b[d]*b[d]),j+=parseFloat(c[d]*c[d]);const i=(d*g-e*f)/(d*h-e*e),k=(f-i*e)/d;return this.polynomial(i,k)}polyreg(d,e){const f=Object.keys(d);for(let a in f)f[a]=parseFloat(f[a]);const g=Object.values(d);for(let a in g)g[a]=parseFloat(g[a]);const h=[],m=[];let n,c,k=0,a=0;var b;let i,j;const l=f.length;let o;for(c='undefined'==typeof e?3:e+1,b=0;b<c;b++){for(j=0;j<l;j++)null!==g[j]&&(k+=f[j]**b*g[j]);for(h.push(k),k=0,n=[],i=0;i<c;i++){for(j=0;j<l;j++)null!==g[j]&&(a+=f[j]**(b+i));n.push(a),a=0}m.push(n)}return m.push(h),o=this.gaussElimination(m,c),this.polynomial(...o.reverse())}acos(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.acos(a[c]).toFixed(15));return 1==b.length?b[0]:b}acosh(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.acosh(a[c]).toFixed(15));return 1==b.length?b[0]:b}angle2Vec(a){return[this.cos(a),this.sin(a)]}asin(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.asin(a[c]).toFixed(15));return 1==b.length?b[0]:b}asinh(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.asinh(a[c]).toFixed(15));return 1==b.length?b[0]:b}atan(a){('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.atan(a[c]).toFixed(15));return 1==b.length?b[0]:b}atan2(a,b){a=[BigNumber(a).toNumber()],b=[BigNumber(b).toNumber()];let c=[];for(var d=0;d<a.length;d++)c.push(Math.atan2(a[d],b[d]));return 1==c.length?c[0]:c}atanh(a){'object'!=typeof a&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.atanh(a[c]).toFixed(15));return 1==b.length?b[0]:b}cos(c){var d=Math.cos;if(c.isComplex){const e=c.a.toNumber(),a=c.b.toNumber(),b=d(e)*Math.cosh(a),f=Math.sin(e)*Math.sinh(a);return this.complex(b,-f)}('object'!=typeof c||BigNumber.isBigNumber(c))&&(c=!0==BigNumber.isBigNumber(c)?c.toNumber():c,c=[c]);let a=[];for(var b=0;b<c.length;b++)a.push(d(c[b]).toFixed(15));return 1==a.length?a[0]:a}cosh(c){var d=Math.cosh;if(c.isComplex){const e=c.a.toNumber(),a=c.b.toNumber(),b=Math.cos(a)*d(e),f=Math.sin(a)*Math.sinh(e);return this.complex(b,f)}('object'!=typeof c||BigNumber.isBigNumber(c))&&(c=!0==BigNumber.isBigNumber(c)?c.toNumber():c,c=[c]);let a=[];for(var b=0;b<c.length;b++)a.push(d(c[b]).toFixed(15));return 1==a.length?a[0]:a}deg2rad(a){return new BigNumber(a).times(this.pi).div(180)}drawCircularPoints(a,b=1,c=[-b,0],d=!1){const e=this.pi.times(2).div(a);let f={};f[c[0]]=c[1];let g=this.atan2(...c.reverse())+e.toNumber();for(var h=0;h<a-1;h++){const a=new BigNumber(b).times(this.cos(g)).toString(),c=new BigNumber(b).times(this.sin(g)).toNumber();!0===d?f[h]=this.complex(a,c):f[a]=c,g+=e.toNumber()}return!0===d?Object.values(f):f}rad2deg(a){return new BigNumber(a).times(180).div(this.pi)}sin(c){var d=Math.sin;if(c.isComplex){const e=c.a.toNumber(),a=c.b.toNumber(),b=Math.cosh(a)*d(e),f=Math.cos(e)*Math.sinh(a);return this.complex(b,f)}('object'!=typeof c||BigNumber.isBigNumber(c))&&(c=!0==BigNumber.isBigNumber(c)?c.toNumber():c,c=[c]);let a=[];for(var b=0;b<c.length;b++)a.push(d(c[b]).toFixed(15));return 1==a.length?a[0]:a}sinh(c){var d=Math.sinh;if(c.isComplex){const e=c.a.toNumber(),a=c.b.toNumber(),b=Math.cos(a)*d(e),f=Math.cosh(e)*Math.sin(a);return this.complex(b,f)}('object'!=typeof c||BigNumber.isBigNumber(c))&&(c=!0==BigNumber.isBigNumber(c)?c.toNumber():c,c=[c]);let a=[];for(var b=0;b<c.length;b++)a.push(d(c[b]).toFixed(15));return 1==a.length?a[0]:a}tan(a){if(a.isComplex){const b=a.a.times(2).toNumber(),c=a.b.times(2).toNumber(),d=Math.sin(b),e=Math.cos(b),f=Math.cosh(c),g=Math.sinh(c);return this.complex(d/(e+f),g/(e+f))}('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.tan(a[c]).toFixed(15));return 1==b.length?b[0]:b}tanh(a){if(a.isComplex){const b=a.a.times(2).toNumber(),c=a.b.times(2).toNumber(),d=Math.sin(c),e=Math.cos(c),f=Math.cosh(b),g=Math.sinh(b);return this.complex(g/(e+f),d/(e+f))}('object'!=typeof a||BigNumber.isBigNumber(a))&&(a=!0==BigNumber.isBigNumber(a)?a.toNumber():a,a=[a]);let b=[];for(var c=0;c<a.length;c++)b.push(Math.tanh(a[c]).toFixed(15));return 1==b.length?b[0]:b}derivate(a){if('polynomial'!=a.type)throw'TheoremJS: Derivative: Not a polynomial';let b=[];const c=a.values.reverse();for(let d=0;d<c.length;d++)b.push(d*c[d]);b.reverse(),b.pop();const d=b.filter((b)=>!isNaN(b));return this.polynomial(...d)}f(v,func){return'function'==typeof v?{type:'function',core:v}:{type:'function',v:v,f:func,core:x=>{let regex=new RegExp(v),newStr=func.replace(regex,`(${x})`);return eval(newStr).toFixed(14)}}}findRoots(e){var f=Math.cbrt,g=Math.abs,a=Math.cos,h=Math.sqrt;let j=[];if('polynomial'==e.type)switch(e.values.length-1){case 1:{j.push(`${new BigNumber(e.values[1]).isNegative()?'':'-'}${e.values[1]} / ${e.values[0]}`);break}case 2:{const a=new BigNumber(e.values[1]).pow(2).minus(new BigNumber(4).times(e.values[0]).times(e.values[2])).toNumber();0<a&&(j.push(`(${new BigNumber(e.values[1]).isNegative()?'':'-'}${new BigNumber(e.values[1]).abs()} + Math.sqrt(${a})) / ${new BigNumber(e.values[0]).times(2)}`),j.push(`(${new BigNumber(e.values[1]).isNegative()?'':'-'}${new BigNumber(e.values[1]).abs()} - Math.sqrt(${a})) / ${new BigNumber(e.values[0]).times(2)}`));break}case 3:{let i=new BigNumber(e.values[0]).toNumber(),r=new BigNumber(e.values[1]).toNumber(),s=new BigNumber(e.values[2]).toNumber(),t=new BigNumber(e.values[3]).toNumber();var l,m=(3*i*s-r*r)/(3*i*i),n=(2*r*r*r-9*i*r*s+27*i*i*t)/(27*i*i*i);if(1e-8>g(m))l=[f(-n)];else if(1e-8>g(n))l=[0].concat(0>m?[h(-m),-h(-m)]:[]);else{var b,c=n*n/4+m*m*m/27;if(1e-8>g(c))l=[-1.5*n/m,3*n/m];else if(0<c)b=f(-n/2-h(c)),l=[b-m/(3*b)];else{b=2*h(-m/3);var d=Math.acos(3*n/m/b)/3,o=2*Math.PI/3;l=[b*a(d),b*a(d-o),b*a(d-2*o)]}}for(var k=0;k<l.length;k++)l[k]-=r/(3*i);j=l;break}default:j=[this.numeralSolve(e,0)[0]];}else j=[this.numeralSolve(e,0)[0]];return j}gaussElimination(a,b){var c=Math.abs;const d=a,e=a.length-1,f=[b];for(let f,g=0;g<e;g++){f=g;for(let a=g+1;a<e;a++)c(d[g][a])>c(d[g][f])&&(f=a);for(let a=g;a<e+1;a++){const b=d[a][g];d[a][g]=d[a][f],d[a][f]=b}for(let a=g+1;a<e;a++)for(let b=e;b>=g;b--)d[b][a]-=d[b][g]*d[g][a]/d[g][g]}for(let c,g=e-1;0<=g;g--){c=0;for(let a=g+1;a<e;a++)c+=d[a][g]*f[a];f[g]=(d[e][g]-c)/d[g][g]}return f}gradient(a,b){const c=+Object.keys(a)[0],d=+Object.values(a)[0],e=+Object.keys(b)[0],f=+Object.values(b)[0];return(f-d)/(e-c)}graph(a,b=-100,c=100,d=0.1){let e={};for(var f=new BigNumber(b);f.lessThanOrEqualTo(new BigNumber(c));f=f.plus(new BigNumber(d)))e[f.toString()]=a.core(f).toFixed(15);return e}integrate(a){if('polynomial'!=a.type)throw'TheoremJS: Integrate: Not a polynomial';let b=[];for(let c in a.values.reverse())b.push(a.values[c]/(parseInt(c)+1));b.reverse(),b.push(0);const c=b.filter((b)=>!isNaN(b));return this.polynomial(...c)}numeralSolve(a,b,c=-100,d=100,e=0.1){var f=Math.abs;let g=[],h=[];for(let f=new BigNumber(c);f.lt(d);f=f.plus(e))g.push(this.run(a,f.toNumber())),h.push(f.toNumber());const i=function(a,b){let c=b[0],d=f(a-c);for(let e=0;e<b.length;e++){const g=f(a-b[e]);g<d&&(d=g,c=b[e])}return c}(b,g.filter((a)=>!isNaN(a)));return h[g.indexOf(i)]}polynomial(){const arg=[...arguments],args=this.reverse(arg);let buffer='';for(let a=0;a<args.length;a++)buffer+=`${args[a]} * x**${a} ${a==args.length-1?'':'+ '}`;return{type:'polynomial',v:'x',f:buffer,values:arg,core:x=>{let regex=/x/,newStr=buffer.replace(regex,`(${x})`);return eval(newStr).toFixed(14)}}}run(a,b){b=new BigNumber(b).toNumber();let c=0;try{c=a.core(b)}catch(a){throw`[TheoremJS]: ${a}`}return c}slope(a,b=0,c=1e-10){const d=a.core(b),e=a.core(b+c);return new BigNumber(e).minus(d).div(new BigNumber(b+c).minus(b))}y_intercept(a){return a.core(0)}toDec(){const a=[...arguments];if('object'==typeof a[0]){if(2!=a[0].length)throw'Require 2 numbers';return new BigNumber(a[0][0]).div(a[0][1])}if(2!=a.length)throw'Require 2 numbers';return new BigNumber(a[0]).div(a[1])}toFraction(a,b=15){const c=BigNumber.clone({DECIMAL_PLACES:20});return new c(a.toFixed(15)).toFraction(b)}*collatz(a){for(;1!=a;)0==a%2?a/=2:a=3*a+1,yield a}*fibonacci(){for(let a=0,b=1;;){const c=a;a=b,b=a+c;const d=yield c;d&&(a=0,b=1)}}*sieve(){for(let a=2;;)this.isPrime(a)&&(yield a),a++}convert(c,d,e,a){const b=new class{area(c,d,a){const b=['mm2','cm2','dm2','m2','dam2','hm2','ha','km2','in2','ft2','yd2','mi2'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Area: wrong units';const e=b.indexOf(d),f=b.indexOf(a),h=[new BigNumber(1).div(1e6),new BigNumber(1).div(1e4),new BigNumber(1).div(100),1,100,1e4,1e4,1e6,'0.00064516','0.09290304','0.83612736','2589988.110336'],i=new BigNumber(c).times(h[e]),g=i.div(h[f]);return g}distance(){return this.length(...arguments)}length(c,d,a){const b=['mm','cm','dm','m','dam','hm','km','yd','ft','mi','in','li','au','ly','Nm'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Length: wrong units';const e=b.indexOf(d),f=b.indexOf(a),g=[1/1e3,1/100,1/10,1,10,100,1e3,new BigNumber(0.9144),new BigNumber(0.3048),new BigNumber(1609.344),new BigNumber(25.4).div(1e3),new BigNumber(6.35).times('0.0001'),new BigNumber('149597870700'),new BigNumber('9460730472580.8').times(1e3),1852],h=new BigNumber(c).times(g[e]),i=h.div(g[f]);return i}mass(c,d,a){const b=['mg','cg','dg','g','dag','hg','kg','t','oz','lb'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Mass: wrong units';const e=b.indexOf(d),f=b.indexOf(a),h=[1e3,100,10,1,new BigNumber(1).div(10),new BigNumber(1).div(100),new BigNumber(1).div(1e3),new BigNumber(1).div(1e6),new BigNumber(1).div('28.349523125'),new BigNumber(1).div('453.59237')],i=new BigNumber(c).div(h[e]),g=new BigNumber(i).times(h[f]);return g}speed(c,d,a){const b=['m/s','km/h','m/h','knot','ft/s'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Speed: wrong units';const e=b.indexOf(d),f=b.indexOf(a),g=[new BigNumber(1),new BigNumber(1).div(3.6),new BigNumber(0.44704),new BigNumber(0.514444),new BigNumber(0.3048)],h=new BigNumber(c).times(g[e]),i=h.div(g[f]);return i}temperature(c,d,a){const b=['c','f','k'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Temperature: wrong units';const e=b.indexOf(d),f=b.indexOf(a),h=[0,-32,-273.15],i=[1,new BigNumber(5).div(9),1],j=new BigNumber(c).plus(h[e]).times(i[e]),g=j.div(i[f]).minus(h[f]);return g}time(c,d,a){const b=['ms','s','m','h','d','w','mo','y'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Time: wrong units';const e=b.indexOf(d),f=b.indexOf(a),h=[new BigNumber(1).div(1e3),1,60,3600,86400,604800,'2592000',new BigNumber('365.2421891').times(24).times(3600)],i=new BigNumber(c).times(h[e]),g=i.div(h[f]);return g}volume(c,d,a){const b=['mm3','ml','cm3','cl','dl','dm3','l','hl','m3','dam3','hm3','km3','gal','floz'];if(!b.includes(d)||!b.includes(a))throw'[TheoremJS] Volume: wrong units';const e=b.indexOf(d),f=b.indexOf(a),h=[new BigNumber(1).div(1e9),new BigNumber(1).div(1e6),new BigNumber(1).div(1e6),new BigNumber(10).div(1e6),'0.0001',new BigNumber(1).div(1e3),new BigNumber(1).div(1e3),0.1,1,1e3,1e6,1e9,'0.003785411784','2.95735295625e-5'],i=new BigNumber(c).times(h[e]),g=i.div(h[f]);return g}};return b[d](c,e,a)}units(){return this.convert(...arguments)}abs(a){return new BigNumber(a).abs()}c(a,b=15){const c=BigNumber.clone({DECIMAL_PLACES:b}),d={alphaParticleMass:'6.64465675e-27',atomicMass:'1.660538921e-27',Avogadro:'6.02214129e23',Boltzmann:'1.3806488e-23',conductanceQuantum:'7.7480917346e-5',e:'2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668',"earth-moon":'384401',"earth-sun":'1.496e8',earthMass:'5.974e+24',earthRadius:'6378',electric:'8.854187e-12',electronMass:'9.10938291e-31',elementaryCharge:'1.602176565e-19',EulerGamma:'0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015080',Faraday:'96485.3365',fineStructure:'7.2973525698e-3',goldenRatio:'1.618033988749894848204586834365638117720309179805762862135448622705260462818902449707207204189391137484754088075386891752126633862223536931793180060766726354433389086595939582905638322661319928290267880675208766892501711696207032221043216269548626296',gravity:'9.80665',inverseFineStructure:'137.035999074',magnetic:'12.566370614e-7',magneticFluxQuantum:'2.067833758e-15',molarGas:'8.3144621',moonMass:'7.348e22',moonRadius:'1738',neutronMass:'1.674927351e-27',NewtonGravitation:'6.67384e-11',pi:'3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909',Planck:'6.62606957e-34',"proton-electronMassRatio":'1836.15267245',"proton-neutronMassRatio":'0.99862347826',protonMass:'1.672621777e-27',Rydberg:'10973731.568539',speedOfLight:'299792458',speedOfSound:'340.27',"sqrt(2)":'1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889199',"Stefan-Boltzmann":'5.670373e-8',sunMass:'1.989e30',sunRadius:'695500',TheRockMass:'124.73790175',ThomsonCrossSection:'0.6652458734e-28',UltimateAnswer:'42',zeroKelvin:'-273.15'}[a].split('e');return 1<d.length?new c(`${d[0].slice(0,b+2)}e${d[1]}`):new c(d[0].slice(0,b+2))}ceil(a){return new BigNumber(a).integerValue(BigNumber.ROUND_CEIL)}get e(){const a=15,b=BigNumber.clone({DECIMAL_PLACES:a});let c=new b(0),d=new b(1);for(let b=0;b<=10*a;b++){let a=this.factorial(b),e=d.div(a);c=c.plus(e)}return new b(c)}floor(a){return new BigNumber(a).integerValue(BigNumber.ROUND_FLOOR)}get goldenRatio(){const a=15,b=BigNumber.clone({DECIMAL_PLACES:a+1});return new b(b(1).plus(this.sqrt(5)).div(2).toFixed(a+1))}isPrime(a){a=new BigNumber(a).abs();const b=this.leastFactor(a);return a.eq(b)&&a.gte(2)}leastFactor(a){var b=Number.MAX_SAFE_INTEGER;if(a=new BigNumber(a).abs().toNumber(),b<a)throw`${a} is superior to ${b}`;let c=!1;(isNaN(a)||!isFinite(a))&&(c=!1==c?NaN:c),0==a&&(c=!1===c?0:c),(a%1||2>a*a)&&(c=!1===c?1:c),0==a%2&&(c=!1===c?2:c),0==a%3&&(c=!1===c?3:c),0==a%5&&(c=!1===c?5:c);const d=Math.sqrt(a);for(let b=7;b<=d;b+=30)0==a%b&&(c=!1===c?b:c),0==a%(b+4)&&(c=!1===c?b+4:c),0==a%(b+6)&&(c=!1===c?b+6:c),0==a%(b+10)&&(c=!1===c?b+10:c),0==a%(b+12)&&(c=!1===c?b+12:c),0==a%(b+16)&&(c=!1===c?b+16:c),0==a%(b+22)&&(c=!1===c?b+22:c),0==a%(b+24)&&(c=!1===c?b+24:c);return c=!1===c?a:c,new BigNumber(c)}n(a,b=10){return new BigNumber(a,b)}nPrime(a){var b=Number.MAX_SAFE_INTEGER;if(a=new BigNumber(a).toNumber(),1>a)throw'[TheoremJS]: n is less than 1';if(a>b)throw`[TheoremJS] Input was larger than ${b}`;const c=this.sieve();let d=0;for(var e=0;e<a;e++)d=c.next().value;return new BigNumber(d)}get pi(){function a(a){for(var b=a,c=NaN,d=a.times(a),e=a,f=-1,g=3;!b.eq(c);g+=2)e=e.times(d),c=b,b=0<f?b.plus(e.div(g)):b.minus(e.div(g)),f=-f;return b}const b=15,c=BigNumber.clone({DECIMAL_PLACES:b});var d=BigNumber.clone({DECIMAL_PLACES:b+4}),e=new d(4).times(a(new d(1).div(5))).minus(a(new d(1).div(239)));return new c(4).times(new c(e))}primeFactors(a){var b=Number.MAX_SAFE_INTEGER;if(a=new BigNumber(a).toNumber(),2>a)throw'[TheoremJS] Number should be greater or equal to 2';if(a>b)throw`[TheoremJS] Input was larger than ${b}`;let c=[];for(var d=2;d<=a;d++)0==a%d&&this.isPrime(d)&&(a/=d,c.push(new BigNumber(d)),--d);return c}primePi(a){var b=Number.MAX_SAFE_INTEGER;if(a=new BigNumber(a).toNumber(),2>a)throw'[TheoremJS] Number should be greater or equal to 2';if(a>b)throw`[TheoremJS] Input was larger than ${b}`;const c=this.sieve();let d=0;for(var e=0;e<a;e=c.next().value)d+=1;return new BigNumber(d-1)}round(a,b=0){const c=this.pow(10,b);return new BigNumber(a).times(c).integerValue(BigNumber.ROUND_HALF_CEIL).div(c)}rand(a=1,b=!1){const c=BigNumber.clone({CRYPTO:b});let d=[];for(var e=0;e<a;e++)d.push(c.random());return 1==d.length?d[0]:d}config(a){BigNumber.set(a)}convertToBase(a,b){const c=BigNumber.clone({ALPHABET:'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'});return new c(a).toString(b)}get fn(){return this.prototype}toBase10(a,b){return new BigNumber(a,b)}flatten(a){return a.reduce((c,a)=>c.concat(a),[])}linspace(a,b,c){return this.arange(a,b,(b-a)/c)}arange(a,b,c,d){const e=(Math.abs(b-a)+2*(d||0))/(c||1)+1,f=a<b?1:-1;return Array(e).fill(0).map((b,e)=>a-f*(d||0)+f*(c||1)*e)}range(a){return this.arange(0,a,1)}reshape(a,b){const c=[];for(let d=0;d<a.length;d+=b)c.push(a.slice(d,d+b));return c}reverse(a){return a.slice(0).reverse()}bin2str(a){return a.replace(/\s*[01]{8}\s*/g,function(a){return String.fromCharCode(parseInt(a,2))})}huffmanEncode(a){const b=function(a){const b=[...a],c=b.reduce((a,b)=>{return a[b]=(a[b]||0)+1,a},{}),d=Object.entries(c).map(([a,b])=>({key:a,weight:b})),e=function(a){return{data:[...a].sort((c,a)=>c.weight-a.weight),enqueue(a){const b=this.data.findIndex((b)=>b.weight>a.weight);-1===b?this.data.push(a):this.data=[...this.data.slice(0,b),a,...this.data.slice(b)]},dequeue(){return this.data.shift()}}}(d);for(;1<e.data.length;){const a=e.dequeue(),b=e.dequeue();e.enqueue({weight:a.weight+b.weight,left:a,right:b})}return e.dequeue()}(a),d=function(a){function b(a,c,d){return a.left||a.right?(a.left&&b(a.left,`${c}0`,d),a.right&&b(a.right,`${c}1`,d)):d[a.key]=c,d}return b(a,'',{})}(b);return{string:[...a].map((a)=>d[a]).join(''),tree:b,codebook:d}}huffmanDecode(a,b){const c=[];let d=b;for(const e of[...a])d='0'===e?d.left:d.right,d.left||d.right||(c.push(d.key),d=b);return c.join('')}md5(e){function f(a,b){return a<<b|a>>>32-b}function g(a,b){let c,d,e,f,g;return e=2147483648&a,f=2147483648&b,c=1073741824&a,d=1073741824&b,g=(1073741823&a)+(1073741823&b),c&d?2147483648^g^e^f:c|d?1073741824&g?3221225472^g^e^f:1073741824^g^e^f:g^e^f}function h(a,b,c){return a&b|~a&c}function i(a,b,c){return a&c|b&~c}function j(a,b,c){return a^b^c}function l(a,b,c){return b^(a|~c)}function m(e,a,b,c,d,i,j){return e=g(e,g(g(h(a,b,c),d),j)),g(f(e,i),a)}function n(e,a,b,c,d,h,j){return e=g(e,g(g(i(a,b,c),d),j)),g(f(e,h),a)}function o(e,a,b,c,d,h,i){return e=g(e,g(g(j(a,b,c),d),i)),g(f(e,h),a)}function p(e,a,b,c,d,h,i){return e=g(e,g(g(l(a,b,c),d),i)),g(f(e,h),a)}function q(a){let b;const c=a.length,d=c+8,e=16*((d-d%64)/64+1),f=Array(e-1);let g=0,h=0;for(;h<c;)b=(h-h%4)/4,g=8*(h%4),f[b]|=a.charCodeAt(h)<<g,h++;return b=(h-h%4)/4,g=8*(h%4),f[b]|=128<<g,f[e-2]=c<<3,f[e-1]=c>>>29,f}function r(a){let b,c,d='',e='';for(c=0;3>=c;c++)b=255&a>>>8*c,e=`0${b.toString(16)}`,d+=e.substr(e.length-2,2);return d}function s(a){a=a.replace(/\r\n/g,'\n');let b='';for(let d=0;d<a.length;d++){const e=a.charCodeAt(d);128>e?b+=t(e):127<e&&2048>e?(b+=t(192|e>>6),b+=t(128|63&e)):(b+=t(224|e>>12),b+=t(128|63&e>>6),b+=t(128|63&e))}return b}var t=String.fromCharCode;(BigNumber.isBigNumber(e)||!isNaN(parseFloat(e))&&isFinite(e))&&(e=e.toString());let u,k,v,w,y,z,a,b,c,d=e,A=[];const x=7,B=12,C=17,D=22,E=5,F=9,G=14,H=20,I=4,J=11,K=16,L=23,M=6,N=10,O=15,P=21;for(d=s(d),A=q(d),z=1732584193,a=4023233417,b=2562383102,c=271733878,u=0;u<A.length;u+=16)k=z,v=a,w=b,y=c,z=m(z,a,b,c,A[u+0],x,3614090360),c=m(c,z,a,b,A[u+1],B,3905402710),b=m(b,c,z,a,A[u+2],C,606105819),a=m(a,b,c,z,A[u+3],D,3250441966),z=m(z,a,b,c,A[u+4],x,4118548399),c=m(c,z,a,b,A[u+5],B,1200080426),b=m(b,c,z,a,A[u+6],C,2821735955),a=m(a,b,c,z,A[u+7],D,4249261313),z=m(z,a,b,c,A[u+8],x,1770035416),c=m(c,z,a,b,A[u+9],B,2336552879),b=m(b,c,z,a,A[u+10],C,4294925233),a=m(a,b,c,z,A[u+11],D,2304563134),z=m(z,a,b,c,A[u+12],x,1804603682),c=m(c,z,a,b,A[u+13],B,4254626195),b=m(b,c,z,a,A[u+14],C,2792965006),a=m(a,b,c,z,A[u+15],D,1236535329),z=n(z,a,b,c,A[u+1],E,4129170786),c=n(c,z,a,b,A[u+6],F,3225465664),b=n(b,c,z,a,A[u+11],G,643717713),a=n(a,b,c,z,A[u+0],H,3921069994),z=n(z,a,b,c,A[u+5],E,3593408605),c=n(c,z,a,b,A[u+10],F,38016083),b=n(b,c,z,a,A[u+15],G,3634488961),a=n(a,b,c,z,A[u+4],H,3889429448),z=n(z,a,b,c,A[u+9],E,568446438),c=n(c,z,a,b,A[u+14],F,3275163606),b=n(b,c,z,a,A[u+3],G,4107603335),a=n(a,b,c,z,A[u+8],H,1163531501),z=n(z,a,b,c,A[u+13],E,2850285829),c=n(c,z,a,b,A[u+2],F,4243563512),b=n(b,c,z,a,A[u+7],G,1735328473),a=n(a,b,c,z,A[u+12],H,2368359562),z=o(z,a,b,c,A[u+5],I,4294588738),c=o(c,z,a,b,A[u+8],J,2272392833),b=o(b,c,z,a,A[u+11],K,1839030562),a=o(a,b,c,z,A[u+14],L,4259657740),z=o(z,a,b,c,A[u+1],I,2763975236),c=o(c,z,a,b,A[u+4],J,1272893353),b=o(b,c,z,a,A[u+7],K,4139469664),a=o(a,b,c,z,A[u+10],L,3200236656),z=o(z,a,b,c,A[u+13],I,681279174),c=o(c,z,a,b,A[u+0],J,3936430074),b=o(b,c,z,a,A[u+3],K,3572445317),a=o(a,b,c,z,A[u+6],L,76029189),z=o(z,a,b,c,A[u+9],I,3654602809),c=o(c,z,a,b,A[u+12],J,3873151461),b=o(b,c,z,a,A[u+15],K,530742520),a=o(a,b,c,z,A[u+2],L,3299628645),z=p(z,a,b,c,A[u+0],M,4096336452),c=p(c,z,a,b,A[u+7],N,1126891415),b=p(b,c,z,a,A[u+14],O,2878612391),a=p(a,b,c,z,A[u+5],P,4237533241),z=p(z,a,b,c,A[u+12],M,1700485571),c=p(c,z,a,b,A[u+3],N,2399980690),b=p(b,c,z,a,A[u+10],O,4293915773),a=p(a,b,c,z,A[u+1],P,2240044497),z=p(z,a,b,c,A[u+8],M,1873313359),c=p(c,z,a,b,A[u+15],N,4264355552),b=p(b,c,z,a,A[u+6],O,2734768916),a=p(a,b,c,z,A[u+13],P,1309151649),z=p(z,a,b,c,A[u+4],M,4149444226),c=p(c,z,a,b,A[u+11],N,3174756917),b=p(b,c,z,a,A[u+2],O,718787259),a=p(a,b,c,z,A[u+9],P,3951481745),z=g(z,k),a=g(a,v),b=g(b,w),c=g(c,y);const Q=r(z)+r(a)+r(b)+r(c);return Q.toLowerCase()}sha256(a){function k(a,b){const c=(65535&a)+(65535&b);return(a>>16)+(b>>16)+(c>>16)<<16|65535&c}function b(a,b){return a>>>b|a<<32-b}function c(a,b){return a>>>b}function l(a,b,c){return a&b^~a&c}function n(a,b,c){return a&b^a&c^b&c}function o(a){return b(a,2)^b(a,13)^b(a,22)}function p(a){return b(a,6)^b(a,11)^b(a,25)}function q(a){return b(a,7)^b(a,18)^c(a,3)}function r(a){return b(a,17)^b(a,19)^c(a,10)}var d=String.fromCharCode;let e=a;const f=8;return(BigNumber.isBigNumber(e)||!isNaN(parseFloat(e))&&isFinite(e))&&(e=e.toString()),e=function(a){a=a.replace(/\r\n/g,'\n');let b='';for(let e=0;e<a.length;e++){const f=a.charCodeAt(e);128>f?b+=d(f):127<f&&2048>f?(b+=d(192|f>>6),b+=d(128|63&f)):(b+=d(224|f>>12),b+=d(128|63&f>>6),b+=d(128|63&f))}return b}(e),function(a){const b='0123456789abcdef';let c='';for(let d=0;d<4*a.length;d++)c+=b.charAt(15&a[d>>2]>>8*(3-d%4)+4)+b.charAt(15&a[d>>2]>>8*(3-d%4));return c}(function(s,m){const t=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],u=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],v=Array(64);let w,a,b,c,d,e,f,g;var h,i;let j,x;for(s[m>>5]|=128<<24-m%32,s[(m+64>>9<<4)+15]=m,h=0;h<s.length;h+=16){for(w=u[0],a=u[1],b=u[2],c=u[3],d=u[4],e=u[5],f=u[6],g=u[7],i=0;64>i;i++)v[i]=16>i?s[i+h]:k(k(k(r(v[i-2]),v[i-7]),q(v[i-15])),v[i-16]),j=k(k(k(k(g,p(d)),l(d,e,f)),t[i]),v[i]),x=k(o(w),n(w,a,b)),g=f,f=e,e=d,d=k(c,j),c=b,b=a,a=w,w=k(j,x);u[0]=k(w,u[0]),u[1]=k(a,u[1]),u[2]=k(b,u[2]),u[3]=k(c,u[3]),u[4]=k(d,u[4]),u[5]=k(e,u[5]),u[6]=k(f,u[6]),u[7]=k(g,u[7])}return u}(function(a){const b=[];for(let c=0;c<a.length*f;c+=f)b[c>>5]|=(a.charCodeAt(c/f)&(1<<f)-1)<<24-c%32;return b}(e),e.length*f))}str2bin(a,b){function c(a){return'00000000'.slice((a+'').length)+a}return a.replace(/[\s\S]/g,function(a){return a=c(a.charCodeAt().toString(2)),!1==b?a:a+' '})}complex(c=0,a=0){var d=Math.abs,e=Math.log;class complex{abs(){return new BigNumber(this.a).times(this.a).plus(this.b.times(this.b)).sqrt()}arg(){return new BigNumber(this.t.atan2(this.b,this.a))}clone(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)}conjugate(){return this.b=this.b.negated(),this}constructor(c,a,b){this.a=new BigNumber(c),this.b=new BigNumber(a),this.t=b}dividedBy(){return this.times(...arguments)}div(e){if(!e.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';const f=this.a,a=this.b,b=e.a,c=e.b,d=b.times(b).plus(c.times(c)),g=f.times(b).plus(a.times(c)),h=a.times(b).minus(f.times(c)),i=g.div(d),j=h.div(d);return this.a=i,this.b=j,this}equal(){return this.eq(...arguments)}eq(a){if(!a.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';return this.a.eq(a.a)&&this.b.eq(a.b)}exp(){const c=this.a,a=this.b,b=this.t.exp(c),d=this.t.cos(a),e=this.t.sin(a),f=b.times(d),g=b.times(e);return this.a=f,this.b=g,this}get isComplex(){return!0}ln(){const c=this.a,a=this.b,b=c.times(c).plus(a.times(a)),d=this.t.ln(b),e=d.div(2);return this.b=this.arg(),this.a=e,this}log(e){if(!e)throw'[TheoremJS] Log: wrong base';let f=this.a,a=this.b;if(a.eq(0))return this.a=this.t.log(f,e),this;const b=f.times(f).plus(a.times(a)),g=this.t.ln(b),h=g.div(2);f=this.arg(),a=h;const i=this.t.ln(e),c=new BigNumber(0),d=i.times(i).plus(c.times(c)),j=f.times(i).plus(a.times(c)),k=a.times(i).minus(f.times(c)),l=j.div(d),m=k.div(d);return this.a=m,this.b=l,this}minus(a){if(!a.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';return this.a=this.a.minus(a.a),this.b=this.b.minus(a.b),this}negated(){return this.a=this.a.negated(),this.b=this.b.negated(),this}plus(a){if(!a.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';return this.a=this.a.plus(a.a),this.b=this.b.plus(a.b),this}pow(f){if(!f.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';let g=this.a,a=this.b;const b=f.a,c=f.b,h=this.t.atan2(a,g),i=function(c,a){c=new BigNumber(c).toNumber(),a=new BigNumber(a).toNumber();const b=d(c),f=d(a);return 0===c?new BigNumber(e(f)):0===a?new BigNumber(e(b)):3e3>b&&3e3>f?new BigNumber(0.5*e(c*c+a*a)):new BigNumber(e(c/Math.cos(Math.atan2(a,c))))}(g,a);return g=this.t.exp(b.times(i).minus(c.times(h))),a=c.times(i).plus(b.times(h)),this.a=g.times(this.t.cos(a)),this.b=g.times(this.t.sin(a)),this}multipliedBy(){return this.times(...arguments)}times(c){if(!c.isComplex)throw'[TheoremJS]: Complex operation require complex numbers';const d=this.a,a=this.b;return this.a=d.times(c.a).minus(a.times(c.b)),this.b=d.plus(a).times(c.a.plus(c.b)).minus(d.times(c.a)).minus(a.times(c.b)),this}toString(){return`${this.a.toString()} ${this.b.lt(0)?'-':'+'} ${this.b.abs().toString()}i`}}return new complex(c,a,this)}get i(){return this.complex(0,1)}}'function'==typeof define&&define.amd?define(()=>new TheoremJS):'undefined'==typeof exports?'undefined'!=typeof global&&(global.TheoremJS=new TheoremJS):('undefined'!=typeof module&&module.exports&&(exports=module.exports=new TheoremJS),exports.TheoremJS=new TheoremJS);