@cortex-js/compute-engine
Version:
Symbolic computing and numeric evaluations for JavaScript and Node.js
6 lines • 1.12 MB
JavaScript
/** Compute Engine 0.58.0 */
var yn=Math.cosh||function(e){return Math.abs(e)<1e-9?1-e:(Math.exp(e)+Math.exp(-e))*.5},Kn=Math.sinh||function(e){return Math.abs(e)<1e-9?e:(Math.exp(e)-Math.exp(-e))*.5},oE=function(e){var n=Math.PI/4;if(-n>e||e>n)return Math.cos(e)-1;var t=e*e;return t*(t*(t*(t*(t*(t*(t*(t/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-1/2)},sE=function(e,n){var t=Math.abs(e),i=Math.abs(n);return t<3e3&&i<3e3?Math.sqrt(t*t+i*i):(t<i?(t=i,i=e/n):i=n/e,t*Math.sqrt(1+i*i))},zr=function(){throw SyntaxError("Invalid Param")};function pc(e,n){var t=Math.abs(e),i=Math.abs(n);return e===0?Math.log(i):n===0?Math.log(t):t<3e3&&i<3e3?Math.log(e*e+n*n)*.5:(e=e/2,n=n/2,.5*Math.log(e*e+n*n)+Math.LN2)}var aE=function(e,n){var t={re:0,im:0};if(e==null)t.re=t.im=0;else if(n!==void 0)t.re=e,t.im=n;else switch(typeof e){case"object":if("im"in e&&"re"in e)t.re=e.re,t.im=e.im;else if("abs"in e&&"arg"in e){if(!Number.isFinite(e.abs)&&Number.isFinite(e.arg))return J.INFINITY;t.re=e.abs*Math.cos(e.arg),t.im=e.abs*Math.sin(e.arg)}else if("r"in e&&"phi"in e){if(!Number.isFinite(e.r)&&Number.isFinite(e.phi))return J.INFINITY;t.re=e.r*Math.cos(e.phi),t.im=e.r*Math.sin(e.phi)}else e.length===2?(t.re=e[0],t.im=e[1]):zr();break;case"string":t.im=t.re=0;var i=e.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),r=1,o=0;i===null&&zr();for(var s=0;s<i.length;s++){var a=i[s];a===" "||a===" "||a===`
`||(a==="+"?r++:a==="-"?o++:a==="i"||a==="I"?(r+o===0&&zr(),i[s+1]!==" "&&!isNaN(Number(i[s+1]))?(t.im+=parseFloat((o%2?"-":"")+i[s+1]),s++):t.im+=parseFloat((o%2?"-":"")+"1"),r=o=0):((r+o===0||isNaN(Number(a)))&&zr(),i[s+1]==="i"||i[s+1]==="I"?(t.im+=parseFloat((o%2?"-":"")+a),s++):t.re+=parseFloat((o%2?"-":"")+a),r=o=0))}r+o>0&&zr();break;case"number":t.im=0,t.re=e;break;default:zr()}return isNaN(t.re)||isNaN(t.im),t},J=class e{constructor(n,t){this.re=0,this.im=0;var i=aE(n,t);this.re=i.re,this.im=i.im}sign(){var n=this.abs();return new e(this.re/n,this.im/n)}add(n,t){var i=new e(n,t);return this.isInfinite()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:new e(this.re+i.re,this.im+i.im)}sub(n,t){var i=new e(n,t);return this.isInfinite()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:new e(this.re-i.re,this.im-i.im)}mul(n,t){var i=new e(n,t);return this.isInfinite()&&i.isZero()||this.isZero()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:i.im===0&&this.im===0?new e(this.re*i.re,0):new e(this.re*i.re-this.im*i.im,this.re*i.im+this.im*i.re)}div(n,t){var i=new e(n,t);if(this.isZero()&&i.isZero()||this.isInfinite()&&i.isInfinite())return e.NAN;if(this.isInfinite()||i.isZero())return e.INFINITY;if(this.isZero()||i.isInfinite())return e.ZERO;n=this.re,t=this.im;var r=i.re,o=i.im,s,a;return o===0?new e(n/r,t/r):Math.abs(r)<Math.abs(o)?(a=r/o,s=r*a+o,new e((n*a+t)/s,(t*a-n)/s)):(a=o/r,s=o*a+r,new e((n+t*a)/s,(t-n*a)/s))}pow(n,t){var i=new e(n,t);if(n=this.re,t=this.im,i.isZero())return e.ONE;if(i.im===0){if(t===0&&n>0)return new e(Math.pow(n,i.re),0);if(n===0)switch((i.re%4+4)%4){case 0:return new e(Math.pow(t,i.re),0);case 1:return new e(0,Math.pow(t,i.re));case 2:return new e(-Math.pow(t,i.re),0);case 3:return new e(0,-Math.pow(t,i.re))}}if(n===0&&t===0&&i.re>0&&i.im>=0)return e.ZERO;var r=Math.atan2(t,n),o=pc(n,t);return n=Math.exp(i.re*o-i.im*r),t=i.im*o+i.re*r,new e(n*Math.cos(t),n*Math.sin(t))}sqrt(){var n=this.re,t=this.im,i=this.abs(),r,o;if(n>=0){if(t===0)return new e(Math.sqrt(n),0);r=.5*Math.sqrt(2*(i+n))}else r=Math.abs(t)/Math.sqrt(2*(i-n));return n<=0?o=.5*Math.sqrt(2*(i-n)):o=Math.abs(t)/Math.sqrt(2*(i+n)),new e(r,t<0?-o:o)}exp(){var n=Math.exp(this.re);return this.im,new e(n*Math.cos(this.im),n*Math.sin(this.im))}expm1(){var n=this.re,t=this.im;return new e(Math.expm1(n)*Math.cos(t)+oE(t),Math.exp(n)*Math.sin(t))}log(){var n=this.re,t=this.im;return t===0&&n>0,new e(pc(n,t),Math.atan2(t,n))}abs(){return sE(this.re,this.im)}arg(){return Math.atan2(this.im,this.re)}sin(){var n=this.re,t=this.im;return new e(Math.sin(n)*yn(t),Math.cos(n)*Kn(t))}cos(){var n=this.re,t=this.im;return new e(Math.cos(n)*yn(t),-Math.sin(n)*Kn(t))}tan(){var n=2*this.re,t=2*this.im,i=Math.cos(n)+yn(t);return new e(Math.sin(n)/i,Kn(t)/i)}cot(){var n=2*this.re,t=2*this.im,i=Math.cos(n)-yn(t);return new e(-Math.sin(n)/i,Kn(t)/i)}sec(){var n=this.re,t=this.im,i=.5*yn(2*t)+.5*Math.cos(2*n);return new e(Math.cos(n)*yn(t)/i,Math.sin(n)*Kn(t)/i)}csc(){var n=this.re,t=this.im,i=.5*yn(2*t)-.5*Math.cos(2*n);return new e(Math.sin(n)*yn(t)/i,-Math.cos(n)*Kn(t)/i)}asin(){var n=this.re,t=this.im,i=new e(t*t-n*n+1,-2*n*t).sqrt(),r=new e(i.re-t,i.im+n).log();return new e(r.im,-r.re)}acos(){var n=this.re,t=this.im,i=new e(t*t-n*n+1,-2*n*t).sqrt(),r=new e(i.re-t,i.im+n).log();return new e(Math.PI/2-r.im,r.re)}atan(){var n=this.re,t=this.im;if(n===0){if(t===1)return new e(0,1/0);if(t===-1)return new e(0,-1/0)}var i=n*n+(1-t)*(1-t),r=new e((1-t*t-n*n)/i,-2*n/i).log();return new e(-.5*r.im,.5*r.re)}acot(){var n=this.re,t=this.im;if(t===0)return new e(Math.atan2(1,n),0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).atan():new e(n!==0?n/0:0,t!==0?-t/0:0).atan()}asec(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(0,1/0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).acos():new e(n!==0?n/0:0,t!==0?-t/0:0).acos()}acsc(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(Math.PI/2,1/0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).asin():new e(n!==0?n/0:0,t!==0?-t/0:0).asin()}sinh(){var n=this.re,t=this.im;return new e(Kn(n)*Math.cos(t),yn(n)*Math.sin(t))}cosh(){var n=this.re,t=this.im;return new e(yn(n)*Math.cos(t),Kn(n)*Math.sin(t))}tanh(){var n=2*this.re,t=2*this.im,i=yn(n)+Math.cos(t);return new e(Kn(n)/i,Math.sin(t)/i)}coth(){var n=2*this.re,t=2*this.im,i=yn(n)-Math.cos(t);return new e(Kn(n)/i,-Math.sin(t)/i)}csch(){var n=this.re,t=this.im,i=Math.cos(2*t)-yn(2*n);return new e(-2*Kn(n)*Math.cos(t)/i,2*yn(n)*Math.sin(t)/i)}sech(){var n=this.re,t=this.im,i=Math.cos(2*t)+yn(2*n);return new e(2*yn(n)*Math.cos(t)/i,-2*Kn(n)*Math.sin(t)/i)}asinh(){var n=this.im;this.im=-this.re,this.re=n;var t=this.asin();return this.re=-this.im,this.im=n,n=t.re,t.re=-t.im,t.im=n,t}acosh(){var n=this.acos();if(n.im<=0){var t=n.re;n.re=-n.im,n.im=t}else{var t=n.im;n.im=-n.re,n.re=t}return n}atanh(){var n=this.re,t=this.im,i=n>1&&t===0,r=1-n,o=1+n,s=r*r+t*t,a=s!==0?new e((o*r-t*t)/s,(t*r+o*t)/s):new e(n!==-1?n/0:0,t!==0?t/0:0),u=a.re;return a.re=pc(a.re,a.im)/2,a.im=Math.atan2(a.im,u)/2,i&&(a.im=-a.im),a}acoth(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(0,Math.PI/2);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).atanh():new e(n!==0?n/0:0,t!==0?-t/0:0).atanh()}acsch(){var n=this.re,t=this.im;if(t===0)return new e(n!==0?Math.log(n+Math.sqrt(n*n+1)):1/0,0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).asinh():new e(n!==0?n/0:0,t!==0?-t/0:0).asinh()}asech(){var n=this.re,t=this.im;if(this.isZero())return e.INFINITY;var i=n*n+t*t;return i!==0?new e(n/i,-t/i).acosh():new e(n!==0?n/0:0,t!==0?-t/0:0).acosh()}inverse(){if(this.isZero())return e.INFINITY;if(this.isInfinite())return e.ZERO;var n=this.re,t=this.im,i=n*n+t*t;return new e(n/i,-t/i)}conjugate(){return new e(this.re,-this.im)}neg(){return new e(-this.re,-this.im)}ceil(n){return n=Math.pow(10,n||0),new e(Math.ceil(this.re*n)/n,Math.ceil(this.im*n)/n)}floor(n){return n=Math.pow(10,n||0),new e(Math.floor(this.re*n)/n,Math.floor(this.im*n)/n)}round(n){return n=Math.pow(10,n||0),new e(Math.round(this.re*n)/n,Math.round(this.im*n)/n)}equals(n,t){var i=new e(n,t);return Math.abs(i.re-this.re)<=e.EPSILON&&Math.abs(i.im-this.im)<=e.EPSILON}clone(){return new e(this.re,this.im)}toString(){var n=this.re,t=this.im,i="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(n)<e.EPSILON&&(n=0),Math.abs(t)<e.EPSILON&&(t=0),t===0?i+n:(n!==0?(i+=n,i+=" ",t<0?(t=-t,i+="-"):i+="+",i+=" "):t<0&&(t=-t,i+="-"),t!==1&&(i+=t),i+"i"))}toVector(){return[this.re,this.im]}valueOf(){return this.im===0?this.re:null}isNaN(){return isNaN(this.re)||isNaN(this.im)}isZero(){return this.im===0&&this.re===0}isFinite(){return isFinite(this.re)&&isFinite(this.im)}isInfinite(){return!(this.isNaN()||this.isFinite())}};J.ZERO=new J(0,0);J.ONE=new J(1,0);J.I=new J(0,1);J.PI=new J(Math.PI,0);J.E=new J(Math.E,0);J.INFINITY=new J(1/0,1/0);J.NAN=new J(NaN,NaN);J.EPSILON=1e-15;var Pd=new Map;function me(e){if(e<=100){let n=Pd.get(e);return n===void 0&&(n=10n**BigInt(e),Pd.set(e,n)),n}return 10n**BigInt(e)}function $d(e,n,t){return e*n/t}function Ld(e,n,t){return e*t/n}function os(e,n){if(e===0n)return 0n;if(e<0n)throw new RangeError("fpsqrt: negative input");let t,i=Number(e),r=Number(n);if(Number.isFinite(i)&&Number.isFinite(r)&&i>0&&r>0){let c=Math.sqrt(i/r)*r;Number.isFinite(c)&&c>0?(t=BigInt(Math.floor(c)),t===0n&&(t=1n)):t=Od(e,n)}else t=Od(e,n);let o=e*n,s;do s=t,t=(t+o/t)/2n;while(ht(t-s)>1n);let a=(t+o/t)/2n,u=ht(t*t-o);return ht(a*a-o)<u?a:t}function Od(e,n){let i=He(e),r=Math.max(0,i-15),o=Number(r>0?e/me(r):e),s=He(n),a=Math.max(0,s-15),u=Number(a>0?n/me(a):n),l=r+a,c=Math.floor(l/2),f=Math.sqrt(o*u);l%2!==0&&(f*=3.1622776601683795);let m=BigInt(Math.round(f))*me(c);return m>0n?m:1n}function ht(e){return e<0n?-e:e}function He(e){if(e===0n)return 1;if(e<0n&&(e=-e),e<0x20000000000000n)return Math.floor(Math.log10(Number(e)))+1;let n=0,t=e,i=1;for(;t>>BigInt(i)>0n;)i*=2;for(let o=i>>1;o>=1;o>>=1)t>>BigInt(o)>0n&&(n+=o,t>>=BigInt(o));n+=1;let r=Math.ceil(n*.30102999566398);return e<me(r-1)?r-1:e>=me(r)?r+1:r}function gc(e,n){if(e===0n)return n;let t=0,i=e,r=n/2n;for(;ht(i)>r;)i=i/2n,t++;let o=n,s=i;o+=s;for(let a=2;s=s*i/(BigInt(a)*n),ht(s)!==0n;a++)o+=s;for(let a=0;a<t;a++)o=o*o/n;return o}function Fd(e,n){if(e===n)return 0n;let t=Number(e),i=Number(n),r,o=e,s=0;if(Number.isFinite(t)&&Number.isFinite(i)&&t>0&&i>0){let u=t/i;if(Number.isFinite(u)&&u>0){let l=Math.log(u);Number.isFinite(l)?r=BigInt(Math.round(l*i)):r=mc(e,n)}else r=mc(e,n)}else{o=e;let u=2n*n,l=n/2n;for(;o>u||o<l;)o=os(o,n),s++;r=mc(o,n)}let a=0n;for(let u=0;u<100;u++){let l=gc(r,n);if(l===0n){r=r/2n;continue}let c=r+o*n/l-n,f=ht(c-r);if(f<=1n||f<100000n&&a>0n&&a<100000n&&f*4n>=a)break;a=f,r=c}for(let u=0;u<s;u++)r=2n*r;return r}function mc(e,n){let t=He(e),i=He(n);return BigInt(t-i)*2302585n*n/1000000n}var Ca="314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576407895126946839835259570982582262052248940772671947826848260147699090264013639443745530506820349625245174939965143142980919065925093722169646151570985838741059788595977297549893016175392846813826868386894277415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944169486855584840635",ka=null;function dc(e){if(ka!==null&&ka.scale===e)return ka.value;let t=He(e)-1+10,i=Ca.slice(0,t+1),r=BigInt(i),o=i.length-1,s=r*e/me(o);return ka={scale:e,value:s},s}function Aa(e,n){if(e===0n)return[0n,n];let t=dc(n),i=2n*t,r=t/2n,o,s=ht(e);if(s>n*(1n<<30n)){let T=He(s)-He(n)+20,I=n*me(T),w=e*me(T),k=2n*dc(I),C=w%k;C<0n&&(C+=k),o=C/me(T)}else o=e%i;o<0n&&(o+=i);let a=1n,u=1n;o>3n*r?(o=i-o,a=-1n):o>t?(o=o-t,a=-1n,u=-1n):o>r&&(o=t-o,u=-1n);let l=He(n)-1,c=Math.min(18,Math.max(2,Math.ceil(.87*Math.sqrt(l)))),f=0,m=n>>BigInt(c);for(;o>m;)o=o/2n,f++;let d=o,g=n,h=o,b=n,y=o*o,v=n*n;for(let T=2;;T+=2){if(b=b*y/(BigInt(T)*BigInt(T-1)*v),b===0n){h=h*y/(BigInt(T+1)*BigInt(T)*v),h!==0n&&(T%4===2?(g-=b,d-=h):(g+=b,d+=h));break}if(h=h*y/(BigInt(T+1)*BigInt(T)*v),T%4===2?(g-=b,d-=h):(g+=b,d+=h),h===0n)break}for(let T=0;T<f;T++){let I=2n*d*g/n,w=2n*g*g/n-n;d=I,g=w}return[a*d,u*g]}function rs(e,n){if(e===0n)return 0n;if(e<0n)return-rs(-e,n);let i=dc(n)/2n;if(e>n){let f=n*n/e;return i-rs(f,n)}let r=4n*n/10n,o=0,s=e;for(;s>r;){let f=s*s,m=(n*n+f)/n,d=os(m,n);s=s*n/(n+d),o++}let a=s,u=s,l=s*s,c=n*n;for(let f=3;u=u*l/c,u!==0n;f+=2)f%4===3?a-=u/BigInt(f):a+=u/BigInt(f);for(let f=0;f<o;f++)a=2n*a;return a}var hc=NaN,x=class e{static precision=50;static ZERO=Object.freeze(Object.assign(Object.create(e.prototype),{significand:0n,exponent:0}));static ONE=Object.freeze(Object.assign(Object.create(e.prototype),{significand:1n,exponent:0}));static TWO=Object.freeze(Object.assign(Object.create(e.prototype),{significand:2n,exponent:0}));static NEGATIVE_ONE=Object.freeze(Object.assign(Object.create(e.prototype),{significand:-1n,exponent:0}));static HALF=Object.freeze(Object.assign(Object.create(e.prototype),{significand:5n,exponent:-1}));static NAN=Object.freeze(Object.assign(Object.create(e.prototype),{significand:0n,exponent:NaN}));static POSITIVE_INFINITY=Object.freeze(Object.assign(Object.create(e.prototype),{significand:1n,exponent:1/0}));static NEGATIVE_INFINITY=Object.freeze(Object.assign(Object.create(e.prototype),{significand:-1n,exponent:1/0}));static _piFullPrecision=null;static _piCache=null;static _piCachePrecision=0;static get PI(){e._piFullPrecision===null&&(e._piFullPrecision=new e(Ca[0]+"."+Ca.slice(1)));let n=e.precision;return(e._piCache===null||e._piCachePrecision!==n)&&(e._piCache=e._piFullPrecision.toPrecision(n+4),e._piCachePrecision=n),e._piCache}significand;exponent;constructor(n){if(n instanceof e){this.significand=n.significand,this.exponent=n.exponent;return}if(typeof n=="bigint"){[this.significand,this.exponent]=Ra(n,0);return}if(typeof n=="number"){[this.significand,this.exponent]=uE(n);return}[this.significand,this.exponent]=Vd(n)}isNaN(){return Number.isNaN(this.exponent)}isZero(){return this.exponent===0&&this.significand===0n}isFinite(){return Number.isFinite(this.exponent)}isInteger(){return this.isFinite()&&this.exponent>=0}isPositive(){return this.significand>0n}isNegative(){return this.significand<0n}cmp(n){if(typeof n=="number"){if(Number.isNaN(n))return hc;let d=this.exponent;if(Number.isNaN(d))return hc;if(n===0)return this.significand===0n?0:this.significand>0n?1:-1;if(!Number.isFinite(d))return n===1/0?this.significand>0n?0:-1:n===-1/0?this.significand<0n?0:1:this.significand>0n?1:-1;if(this.significand===0n)return n>0?-1:1;if(n===1/0)return-1;if(n===-1/0)return 1;if(this.significand>0n!=n>0)return this.significand>0n?1:-1;if(Number.isInteger(n)&&d>=0&&d<=15){let g=this.significand*me(d),h=BigInt(n);return g<h?-1:g>h?1:0}n=new e(n)}let t=this.exponent,i=n.exponent,r=this.significand,o=n.significand;if(t!==t||i!==i)return hc;if(!Number.isFinite(t)||!Number.isFinite(i))return!Number.isFinite(t)&&!Number.isFinite(i)?r===o?0:r>o?1:-1:Number.isFinite(t)?o>0n?-1:1:r>0n?1:-1;if(r===0n)return o===0n?0:o>0n?-1:1;if(o===0n)return r>0n?1:-1;if(r>0n&&o<0n)return 1;if(r<0n&&o>0n)return-1;if(t===i)return r<o?-1:r>o?1:0;let s=He(r),a=He(o),u=s+t,l=a+i;if(u!==l){let d=r>0n?1:-1;return u>l?d:-d}let c=r,f=o,m=Math.abs(t-i);if(m>1e3){let d=s,g=a,h=Math.max(d,g)+1;d<h&&(c=c*me(h-d)),g<h&&(f=f*me(h-g))}else t<i?f=f*me(m):c=c*me(m);return c<f?-1:c>f?1:0}eq(n){return typeof n=="number"?n===0?this.significand===0n&&this.exponent===0:n===1?this.significand===1n&&this.exponent===0:n===-1?this.significand===-1n&&this.exponent===0:Number.isInteger(n)&&Number.isFinite(this.exponent)&&this.exponent>=0&&this.exponent<=15?this.significand*me(this.exponent)===BigInt(n):this.cmp(n)===0:this.significand===n.significand&&this.exponent===n.exponent}lt(n){return this.cmp(n)===-1}lte(n){let t=this.cmp(n);return t===-1||t===0}gt(n){return this.cmp(n)===1}gte(n){let t=this.cmp(n);return t===1||t===0}add(n){typeof n=="number"&&(n=new e(n));let t=this.exponent,i=n.exponent;if(Number.isFinite(t)&&Number.isFinite(i)){if(t===i)return Ee(this.significand+n.significand,t);let s=t-i;return s>0?Ee(this.significand*me(s)+n.significand,i):Ee(this.significand+n.significand*me(-s),t)}if(t!==t||i!==i)return e.NAN;let r=!Number.isFinite(t),o=!Number.isFinite(i);return r&&o?this.significand!==n.significand?e.NAN:this.significand>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY:r?this.significand>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY:n.significand>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY}sub(n){typeof n=="number"&&(n=new e(n));let t=this.exponent,i=n.exponent;if(Number.isFinite(t)&&Number.isFinite(i)){if(t===i)return Ee(this.significand-n.significand,t);let s=t-i;return s>0?Ee(this.significand*me(s)-n.significand,i):Ee(this.significand-n.significand*me(-s),t)}if(t!==t||i!==i)return e.NAN;let r=!Number.isFinite(t),o=!Number.isFinite(i);return r&&o?this.significand===n.significand?e.NAN:this.significand>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY:r?this.significand>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY:n.significand>0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY}mul(n){typeof n=="number"&&(n=new e(n));let t=this.exponent,i=n.exponent;if(Number.isFinite(t)&&Number.isFinite(i))return Ee(this.significand*n.significand,t+i);if(t!==t||i!==i||this.significand===0n||n.significand===0n)return e.NAN;let r=this.significand>0n?1n:-1n,o=n.significand>0n?1n:-1n;return r*o>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY}neg(){let n=this.significand;return n===0n?this:Number.isFinite(this.exponent)?Ee(-n,this.exponent):n>0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY}abs(){return this.significand>=0n?this:Number.isFinite(this.exponent)?Ee(-this.significand,this.exponent):e.POSITIVE_INFINITY}floor(){let n=this.exponent;if(n>=0)return this;if(Number.isFinite(n)){let t=this.trunc();return this.significand<0n?t.sub(Ee(1n,0)):t}return this}ceil(){let n=this.exponent;if(n>=0)return this;if(Number.isFinite(n)){let t=this.trunc();return this.significand>0n?t.add(Ee(1n,0)):t}return this}round(){let n=this.exponent;if(n>=0)return this;if(Number.isFinite(n)){let t=Ee(5n,-1);return this.significand>0n?this.add(t).trunc():this.sub(t).trunc()}return this}trunc(){let n=this.exponent;if(n>=0)return this;if(Number.isFinite(n)){let t=this.significand/me(-n);return Ee(t===0n?0n:t,0)}return this}div(n){typeof n=="number"&&(n=new e(n));let t=this.exponent,i=n.exponent,r=this.significand,o=n.significand;if(Number.isFinite(t)&&Number.isFinite(i)){if(o===0n)return r===0n?e.NAN:r>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY;if(r===0n)return Ee(0n,0);let u=e.precision,l=10,c=r<0n?-r:r,f=o<0n?-o:o,m=He(c),d=He(f),g=u+l+Math.max(0,d-m),h=me(g),b=r*h/o,y=t-i-g;return Ee(b,y).toPrecision(u)}if(t!==t||i!==i)return e.NAN;let s=!Number.isFinite(t),a=!Number.isFinite(i);if(s&&a)return e.NAN;if(s){let u=r>0n?1n:-1n,l=o>0n?1n:o<0n?-1n:1n;return u*l>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY}return Ee(0n,0)}inv(){return Ee(1n,0).div(this)}mod(n){typeof n=="number"&&(n=new e(n));let t=this.exponent,i=n.exponent;return Number.isFinite(t)&&Number.isFinite(i)?n.significand===0n?e.NAN:this.significand===0n?Ee(0n,0):this.sub(this.div(n).trunc().mul(n)).toPrecision(e.precision):t!==t||i!==i||!Number.isFinite(t)?e.NAN:new e(this)}pow(n){if(typeof n=="number"&&(n=new e(n)),this.isNaN()||n.isNaN()||!n.isFinite())return e.NAN;if(n.isInteger()){let t=n.toBigInt();if(t===0n)return Ee(1n,0);if(!this.isFinite())return t>0n?this.significand<0n&&t%2n!==0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY:Ee(0n,0);if(this.isZero())return t>0n?Ee(0n,0):e.POSITIVE_INFINITY;if(t<0n)return this.pow(n.neg()).inv();let i=this.significand<0n?-this.significand:this.significand,r=He(i)+this.exponent,o=Number(t)*r;if(o>9e15)return this.significand<0n&&t%2n!==0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY;if(o<-9e15)return Ee(0n,0);let s=e.precision,a=Ee(1n,0),u=this,l=t;for(;l>0n;)l&1n&&(a=a.mul(u).toPrecision(s)),l>>=1n,l>0n&&(u=u.mul(u).toPrecision(s));return a}return this.isFinite()?this.isZero()?n.significand>0n?e.ZERO:e.POSITIVE_INFINITY:this.significand<0n?e.NAN:n.mul(this.ln()).exp():this.significand<0n?e.NAN:n.significand>0n?e.POSITIVE_INFINITY:e.ZERO}toNumber(){return Number.isFinite(this.exponent)?this.significand===0n?0:this.exponent===0?Number(this.significand):Number(this.toString()):this.exponent!==this.exponent?NaN:this.significand>0n?1/0:-1/0}toString(){if(!Number.isFinite(this.exponent))return this.exponent!==this.exponent?"NaN":this.significand>0n?"Infinity":"-Infinity";if(this.significand===0n)return"0";let n=this.significand<0n,t=(n?-this.significand:this.significand).toString(),i=t.length,r=i+this.exponent-1,o=n?"-":"";if(r>20||r<-6){let u=i===1?t:t[0]+"."+t.slice(1),l=r>=0?"+":"";return`${o}${u}e${l}${r}`}if(this.exponent>=0)return o+t+"0".repeat(this.exponent);let s=-this.exponent;if(s<i){let u=t.slice(0,i-s),l=t.slice(i-s);return`${o}${u}.${l}`}let a=s-i;return`${o}0.${"0".repeat(a)}${t}`}toFixed(n){let t=n??0;if(!Number.isFinite(this.exponent))return this.exponent!==this.exponent?"NaN":this.significand>0n?"Infinity":"-Infinity";let i=this.significand<0n,r=i?-this.significand:this.significand,o=this.exponent+t,s;if(o>=0)s=r*me(o);else{let f=me(-o),m=r/f,d=r%f,g=f/2n;d>g?s=m+1n:d<g||f%2n!==0n||m%2n===0n?s=m:s=m+1n}let a=i&&s!==0n?"-":"",u=s.toString();if(t===0)return`${a}${u}`;if(u.length<=t){let f=u.padStart(t,"0");return`${a}0.${f}`}let l=u.slice(0,u.length-t),c=u.slice(u.length-t);return`${a}${l}.${c}`}toPrecision(n){if(this.significand===0n||!Number.isFinite(this.exponent))return this;let t=this.significand<0n?-this.significand:this.significand,i=He(t);if(i<=n)return this;let r=i-n,o=me(r),s=t/o,a=t%o,u=o/2n;(a>u||a===u&&s%2n!==0n)&&(s+=1n);let l=this.significand<0n?-s:s;return Ee(l,this.exponent+r)}toBigInt(){if(!Number.isFinite(this.exponent))throw this.exponent!==this.exponent?new RangeError("Cannot convert NaN to BigInt"):new RangeError("Cannot convert Infinity to BigInt");if(this.exponent>=0)return this.significand*me(this.exponent);let n=me(-this.exponent);return this.significand/n}};function Ee(e,n){let[t,i]=Ra(e,n),r=Object.create(x.prototype);return r.significand=t,r.exponent=i,r}var Bd=1000000000n,qd=1000n;function Ra(e,n){if(e===0n)return[0n,0];for(;e%Bd===0n;)e/=Bd,n+=9;for(;e%qd===0n;)e/=qd,n+=3;for(;e%10n===0n;)e/=10n,n+=1;return[e,n]}function uE(e){return Number.isNaN(e)?[0n,NaN]:e===1/0?[1n,1/0]:e===-1/0?[-1n,1/0]:Number.isInteger(e)?Ra(BigInt(e),0):Vd(e.toString())}function Vd(e){if(e=e.trim(),e===""||e==="NaN")return[0n,NaN];if(e==="Infinity"||e==="+Infinity")return[1n,1/0];if(e==="-Infinity")return[-1n,1/0];let n,t=0,i=e.search(/[eE]/);if(i!==-1){if(n=e.slice(0,i),t=Number(e.slice(i+1)),!Number.isFinite(t))return[0n,NaN]}else n=e;let r=!1;n.startsWith("-")?(r=!0,n=n.slice(1)):n.startsWith("+")&&(n=n.slice(1));let o=n.indexOf("."),s,a;o===-1?(s=n,a=""):(s=n.slice(0,o),a=n.slice(o+1)),s=s.replace(/^0+/,"")||"0";let u=s+a;if(u.length===0||!/^\d+$/.test(u))return[0n,NaN];let l=BigInt(u);r&&(l=-l);let c=-a.length;return Ra(l,c+t)}function ei(e,n){let t=me(n),i=e.exponent+n;return i>=0?[e.significand*me(i),t]:[e.significand/me(-i),t]}function ni(e,n,t){if(e===0n)return x.ZERO;let i=e<0n,r=i?-e:e,o=He(r);if(o>t){let l=o-t,c=me(l),f=c/2n,m=r%c;r=r/c,m>=f&&(r+=1n);let d=He(n)-1,g=l-d,h=i?-r:r;return Ee(h,g)}let a=-(He(n)-1),u=i?-r:r;return Ee(u,a)}x.prototype.sqrt=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite())return this.significand>0n?x.POSITIVE_INFINITY:x.NAN;if(this.significand<0n)return x.NAN;let e=x.precision,n=e+10,[t,i]=ei(this,n),r=os(t,i);return ni(r,i,e)};x.prototype.cbrt=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite())return this.significand>0n?x.POSITIVE_INFINITY:x.NEGATIVE_INFINITY;if(this.significand<0n)return this.neg().cbrt().neg();let e=x.precision,n=e+10,[t,i]=ei(this,n),r=t*i*i,o,s=this.toNumber(),a=Number(i);if(Number.isFinite(s)&&s>0&&Number.isFinite(a)){let l=Math.cbrt(s);Number.isFinite(l)&&l>0?(o=BigInt(Math.floor(l*a)),o===0n&&(o=1n)):o=zd(t,i)}else o=zd(t,i);let u;do{u=o;let l=o*o;if(l===0n){o=1n;break}o=(2n*o+r/l)/3n}while(ht(o-u)>1n);{let l=(2n*o+r/(o*o))/3n,c=ht(o*o*o-r);ht(l*l*l-r)<c&&(o=l)}return ni(o,i,e)};x.sqrt=function(e){return e.sqrt()};x.cbrt=function(e){return e.cbrt()};x.prototype.exp=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return this.significand>0n?x.POSITIVE_INFINITY:x.ZERO;if(this.isZero())return x.ONE;let e=x.precision,n=e+15,[t,i]=ei(this,n),r=gc(t,i);return ni(r,i,e)};x.prototype.ln=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return this.significand>0n?x.POSITIVE_INFINITY:x.NAN;if(this.isZero())return x.NEGATIVE_INFINITY;if(this.significand<0n)return x.NAN;if(this.eq(1))return x.ZERO;let e=x.precision,n=e+15,[t,i]=ei(this,n),r=Fd(t,i);return ni(r,i,e)};x.prototype.log=function(e){let n=e instanceof x?e:new x(e);return this.ln().div(n.ln())};x.exp=function(e){return e.exp()};x.ln=function(e){return e.ln()};x.log10=function(e){return e.log(10)};x.prototype.sin=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return x.NAN;if(this.isZero())return x.ZERO;let e=x.precision,n=e+15,[t,i]=ei(this,n),[r]=Aa(t,i);return ni(r,i,e)};x.prototype.cos=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return x.NAN;if(this.isZero())return x.ONE;let e=x.precision,n=e+15,[t,i]=ei(this,n),[,r]=Aa(t,i);return ni(r,i,e)};x.prototype.tan=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return x.NAN;if(this.isZero())return x.ZERO;let e=x.precision,n=e+15,[t,i]=ei(this,n),[r,o]=Aa(t,i);if(o===0n)return r>0n?x.POSITIVE_INFINITY:x.NEGATIVE_INFINITY;let s=r*i/o;return ni(s,i,e)};x.prototype.atan=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite()){let o=x.PI.div(x.TWO);return this.significand>0n?o:o.neg()}let e=x.precision,n=e+15,[t,i]=ei(this,n),r=rs(t,i);return ni(r,i,e)};x.prototype.asin=function(){if(this.isNaN())return x.NAN;if(!this.isFinite())return x.NAN;if(this.isZero())return x.ZERO;let e=this.abs(),n=x.ONE;if(e.gt(n))return x.NAN;if(e.eq(n)){let f=x.PI.div(x.TWO);return this.significand>0n?f:f.neg()}let t=x.precision,i=t+20,[r,o]=ei(this,i),s=$d(r,r,o),a=o-s,u=os(a,o),l=Ld(r,u,o),c=rs(l,o);return ni(c,o,t)};x.prototype.acos=function(){return this.isNaN()?x.NAN:this.isFinite()?this.abs().gt(x.ONE)?x.NAN:this.eq(1)?x.ZERO:this.eq(-1)?x.PI:x.PI.div(x.TWO).sub(this.asin()):x.NAN};x.sin=function(e){return e.sin()};x.cos=function(e){return e.cos()};x.tan=function(e){return e.tan()};x.asin=function(e){return e.asin()};x.acos=function(e){return e.acos()};x.atan=function(e){return e.atan()};x.atan2=function(e,n){let t=e instanceof x?e:new x(e);if(t.isNaN()||n.isNaN())return x.NAN;let i=x.PI,r=i.div(x.TWO);if(n.isZero())return t.isZero()?x.ZERO:t.significand>0n?r:r.neg();let o=t.div(n);return n.significand>0n?o.atan():t.significand>=0n?o.atan().add(i):o.atan().sub(i)};x.prototype.sinh=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite())return this.significand>0n?x.POSITIVE_INFINITY:x.NEGATIVE_INFINITY;let e=this.exp(),n=e.inv();return e.sub(n).div(x.TWO)};x.prototype.cosh=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ONE;if(!this.isFinite())return x.POSITIVE_INFINITY;let e=this.exp(),n=e.inv();return e.add(n).div(x.TWO)};x.prototype.tanh=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite())return this.significand>0n?x.ONE:x.NEGATIVE_ONE;let e=this.mul(x.TWO).exp();return e.sub(x.ONE).div(e.add(x.ONE))};x.sinh=function(e){return e.sinh()};x.cosh=function(e){return e.cosh()};x.tanh=function(e){return e.tanh()};function zd(e,n){let i=He(e),r=Math.max(0,i-15),o=Number(r>0?e/me(r):e),s=He(n),a=Math.max(0,s-15),u=Number(a>0?n/me(a):n),l=r+2*a,c=Math.floor(l/3),f=l%3,m=Math.cbrt(o*u*u);f===1&&(m*=2.154434690031882),f===2&&(m*=4.641588833612779);let d=BigInt(Math.round(m))*me(c);return d>0n?d:1n}var _i=["number","finite_number","complex","finite_complex","imaginary","real","finite_real","rational","finite_rational","integer","finite_integer","non_finite_number"],bc=["indexed_collection","list","tuple"],Da=[...bc,"collection","set","record","dictionary"],Pa=["scalar",..._i,"boolean","string"],yc=["value","color",...Da,...Pa],xc=["expression","symbol","function",...yc],ti=["any","unknown","nothing","never","error",...xc];function Jd(e){return typeof e!="string"?!1:ti.includes(e)}function ii(e){return typeof e=="string"?ti.includes(e):typeof e!="object"||!("kind"in e)?!1:e.kind==="signature"||e.kind==="union"||e.kind==="intersection"||e.kind==="negation"||e.kind==="tuple"||e.kind==="list"||e.kind==="record"||e.kind==="dictionary"||e.kind==="set"||e.kind==="function"||e.kind==="collection"||e.kind==="indexed_collection"||e.kind==="reference"}var Gd=3,Ud=1,Hd=2,lE=4,cE=5,fE=6,pE=7,mE=8,dE=9,gE=10,hE=11;function te(e,n=0){if(typeof e=="string")return e;let t="";switch(e.kind){case"value":typeof e.value=="string"?t=`"${e.value}"`:typeof e.value=="boolean"?t=e.value?"true":"false":t=e.value.toString();break;case"reference":t=e.name;break;case"negation":t=`!${te(e.type,Gd)}`;break;case"union":t=e.types.map(u=>te(u,Ud)).join(" | ");break;case"intersection":t=e.types.map(u=>te(u,Hd)).join(" & ");break;case"expression":t=`expression<${jd(e.operator)}>`;break;case"symbol":t=`symbol<${jd(e.name)}>`;break;case"numeric":Number.isFinite(e.lower)&&Number.isFinite(e.upper)?t=`${e.type}<${e.lower}..${e.upper}>`:Number.isFinite(e.lower)?t=`${e.type}<${e.lower}..>`:Number.isFinite(e.upper)?t=`${e.type}<..${e.upper}>`:t=`${e.type}`;break;case"list":if(e.dimensions&&typeof e.elements=="string"&&_i.includes(e.elements)){if(e.dimensions===void 0)e.elements==="number"&&(t="tensor");else if(e.dimensions.length===1)e.elements==="number"?e.dimensions[0]<0?t="vector":t=`vector<${e.dimensions[0]}>`:e.dimensions[0]<0?t=`vector<${te(e.elements)}>`:t=`vector<${te(e.elements)}^${e.dimensions[0]}>`;else if(e.dimensions.length===2){let u=e.dimensions;e.elements==="number"?u[0]<0&&u[1]<0?t="matrix":t=`matrix<${u[0]}x${u[1]}>`:u[0]<0&&u[1]<0?t=`matrix<${te(e.elements)}>`:t=`matrix<${te(e.elements)}^(${u[0]}x${u[1]})>`}}if(!t){let u=e.dimensions?e.dimensions.length===1?`^${e.dimensions[0].toString()}`:`^(${e.dimensions.join("x")})`:"";t=`list<${te(e.elements)}${u}>`}break;case"record":t=`record<${Object.entries(e.elements).map(([u,l])=>`${u}: ${te(l)}`).join(", ")}>`;break;case"dictionary":t=`dictionary<${te(e.values)}>`;break;case"set":t=`set<${te(e.elements)}>`;break;case"collection":t=`collection<${te(e.elements)}>`;break;case"indexed_collection":t=`indexed_collection<${te(e.elements)}>`;break;case"tuple":if(e.elements.length===0)t="tuple";else if(e.elements.length===1){let[u]=e.elements;t=`tuple<${Jr(u)}>`}else t="tuple<"+e.elements.map(u=>Jr(u)).join(", ")+">";break;case"signature":let r=e.args?e.args.map(u=>Jr(u)).join(", "):"",o=e.optArgs?e.optArgs.map(u=>Jr(u)+"?").join(", "):"",s=e.variadicArg?e.variadicMin===0?`${Jr(e.variadicArg)}*`:`${Jr(e.variadicArg)}+`:"";t=`(${[r,o,s].filter(u=>u).join(", ")}) -> ${te(e.result)}`;break;default:t="error"}return n>0&&n>bE(e.kind)?`(${t})`:t}function Jr(e){return e.name?`${e.name}: ${te(e.type)}`:te(e.type)}function jd(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`\`${e}\``}function bE(e){switch(e){case"negation":return Gd;case"union":return Ud;case"intersection":return Hd;case"list":return lE;case"record":return cE;case"dictionary":return fE;case"set":return pE;case"collection":case"indexed_collection":return mE;case"tuple":return dE;case"signature":return gE;case"value":return hE;default:return 0}}function yE(e,n){if(e===n)return 0;if(e.length===0)return n.length;if(n.length===0)return e.length;let t=Array.from({length:e.length+1},(r,o)=>o),i=new Array(e.length+1);for(let r=1;r<=n.length;r++){i[0]=r;for(let o=1;o<=e.length;o++){let s=e[o-1]===n[r-1]?0:1;i[o]=Math.min(t[o]+1,i[o-1]+1,t[o-1]+s)}[t,i]=[i,t]}return t[e.length]}function Oa(e,n){let i=null,r=1/0,o=e.length;for(let s of n){if(Math.abs(o-s.length)>7)continue;let a=yE(e,s);if(a===0)return s;a<=7&&a<r&&(r=a,i=s)}return i}var $a=class{input;pos=0;line=1;column=1;tokens=[];constructor(n){this.input=n}saveState(){return{pos:this.pos,line:this.line,column:this.column,tokens:[...this.tokens]}}restoreState(n){this.pos=n.pos,this.line=n.line,this.column=n.column,this.tokens=n.tokens}error(n){throw new Error(`Lexer error at line ${this.line}, column ${this.column}: ${n}`)}peek(n=0){let t=this.pos+n;return t<this.input.length?this.input[t]:""}advance(){let n=this.input[this.pos++];return n===`
`?(this.line++,this.column=1):this.column++,n}match(n){if(this.input.slice(this.pos,this.pos+n.length)===n){for(let t=0;t<n.length;t++)this.advance();return!0}return!1}isEOF(){return this.pos>=this.input.length}skipWhitespace(){for(;!this.isEOF()&&/\s/.test(this.peek());)this.advance()}readIdentifier(){let n="";for(;!this.isEOF()&&/[a-zA-Z0-9_]/.test(this.peek());)n+=this.advance();return n}readVerbatimString(){if(!this.match("`"))return"";let n="";for(;!this.isEOF()&&this.peek()!=="`";)this.match("\\`")?n+="`":this.match("\\\\")?n+="\\":n+=this.advance();return this.isEOF()&&this.error("Unterminated verbatim string"),this.advance(),n}readStringLiteral(){let n=this.advance(),t="";for(;!this.isEOF()&&this.peek()!==n;)this.match("\\"+n)?t+=n:this.match("\\\\")?t+="\\":t+=this.advance();return this.isEOF()&&this.error("Unterminated string literal"),this.advance(),t}readNumber(){let n="";if((this.peek()==="-"||this.peek()==="+")&&(n+=this.advance()),this.match("0x")||this.match("0X")){for(n+="x";!this.isEOF()&&/[0-9a-fA-F]/.test(this.peek());)n+=this.advance();return"0"+n}if(this.match("0b")||this.match("0B")){for(n+="b";!this.isEOF()&&/[01]/.test(this.peek());)n+=this.advance();return"0"+n}for(;!this.isEOF()&&/[0-9]/.test(this.peek());)n+=this.advance();if(this.peek()==="."&&/[0-9]/.test(this.peek(1)))for(n+=this.advance();!this.isEOF()&&/[0-9]/.test(this.peek());)n+=this.advance();if(this.peek()==="e"||this.peek()==="E")for(n+=this.advance(),(this.peek()==="+"||this.peek()==="-")&&(n+=this.advance());!this.isEOF()&&/[0-9]/.test(this.peek());)n+=this.advance();return n}createToken(n,t){return{type:n,value:t,position:this.pos-t.length,line:this.line,column:this.column-t.length}}nextToken(){if(this.skipWhitespace(),this.isEOF())return this.createToken("EOF","");let n=this.pos,t=this.peek();if(this.match("->"))return this.createToken("->","->");if(this.match(".."))return this.createToken("..","..");if(this.match("+\u221E")||this.match("+oo"))return this.createToken("PLUS_INFINITY",this.input.slice(n,this.pos));if(this.match("-\u221E")||this.match("-oo"))return this.createToken("MINUS_INFINITY",this.input.slice(n,this.pos));if(this.match("+infinity"))return this.createToken("PLUS_INFINITY","+infinity");if(this.match("-infinity"))return this.createToken("MINUS_INFINITY","-infinity");if(/[a-zA-Z_]/.test(t)){let i=this.readIdentifier();switch(i){case"true":return this.createToken("TRUE",i);case"false":return this.createToken("FALSE",i);case"nan":return this.createToken("NAN",i);case"infinity":return this.createToken("INFINITY",i);case"oo":return this.createToken("INFINITY",i);default:return this.createToken("IDENTIFIER",i)}}switch(t){case"|":return this.advance(),this.createToken("|","|");case"&":return this.advance(),this.createToken("&","&");case"!":return this.advance(),this.createToken("!","!");case"^":return this.advance(),this.createToken("^","^");case"(":return this.advance(),this.createToken("(","(");case")":return this.advance(),this.createToken(")",")");case"<":return this.advance(),this.createToken("<","<");case">":return this.advance(),this.createToken(">",">");case"[":return this.advance(),this.createToken("[","[");case"]":return this.advance(),this.createToken("]","]");case",":return this.advance(),this.createToken(",",",");case":":return this.advance(),this.createToken(":",":");case"?":return this.advance(),this.createToken("?","?");case"*":return this.advance(),this.createToken("*","*");case"+":return/[0-9]/.test(this.peek(1))?this.createToken("NUMBER_LITERAL",this.readNumber()):(this.advance(),this.createToken("+","+"));case"x":return/[0-9]/.test(this.peek(1))?(this.advance(),this.createToken("x","x")):(this.advance(),this.createToken("x","x"))}if(t==='"'||t==="'")return this.createToken("STRING_LITERAL",this.readStringLiteral());if(t==="`")return this.createToken("VERBATIM_STRING",this.readVerbatimString());if(/[0-9]/.test(t)||t==="-"&&/[0-9]/.test(this.peek(1))){let i=this.readNumber();return this.peek()==="x"&&/[0-9]/.test(this.peek(1)),this.createToken("NUMBER_LITERAL",i)}if(t==="\u221E")return this.advance(),this.createToken("INFINITY","\u221E");this.error(`Unexpected character: ${t}`)}tokenize(){let n=[];for(;!this.isEOF();){let t=this.nextToken();if(t&&(n.push(t),t.type==="EOF"))break}return n}peekToken(){if(this.tokens.length===0){let n=this.nextToken();n&&this.tokens.push(n)}return this.tokens[0]||this.createToken("EOF","")}consumeToken(){if(this.tokens.length===0){let n=this.nextToken();if(n)return n}return this.tokens.shift()||this.createToken("EOF","")}matchToken(n){return this.peekToken().type===n?(this.consumeToken(),!0):!1}expectToken(n){let t=this.consumeToken();return t.type!==n&&this.error(`Expected ${n}, got ${t.type}`),t}};var La=class{lexer;typeResolver;current;constructor(n,t){this.lexer=new $a(n),this.typeResolver=t?.typeResolver??{forward:()=>{},resolve:()=>{},get names(){return[]}},this.current=this.lexer.consumeToken()}error(n,t){this.errorAtToken(this.current,n,t)}errorAtToken(n,t,i){let r=this.lexer.input,s=r.split(`
`)[n.line-1]||r,a=n.column,u=" ".repeat(Math.max(0,a-1))+"^",l=["","Invalid type",`| ${s}`,`| ${u}`,"|",`| ${t}`];throw i&&l.push(`| ${i}`),l.push(""),new Error(l.join(`
`))}advance(){let n=this.current;return this.current=this.lexer.consumeToken(),n}match(n){return this.current.type===n?(this.advance(),!0):!1}expect(n){return this.current.type!==n&&this.error(`Expected ${n}, got ${this.current.type}`),this.advance()}createNode(n,t={}){return{kind:n,position:this.current.position,line:this.current.line,column:this.current.column,...t}}parseType(){this.checkForNakedFunctionSignature();let n=this.parseUnionType();if(n||this.error("Expected a type"),this.current.type!=="EOF")if(this.current.type==="->"||this.current.type==="+"||this.current.type==="*"||this.current.type==="?")this.error("Function signatures must be enclosed in parentheses","For example `(x: number) -> number`");else if(this.current.type==="("){let t=this.lexer.input;t.includes("set(")||t.includes("collection(")||t.includes("list(")||t.includes("tuple(")?t.includes("set(")?this.error("Use `set<integer>` instead of `set(integer)`."):t.includes("collection(")?this.error("Use `collection<type>` instead of `collection(type)`.","For example `collection<number>`"):t.includes("list(")?this.error("Use `list<type>` instead of `list(type)`.","For example `list<number>`"):t.includes("tuple(")&&this.error("Use `tuple<type1, type2>` instead of `tuple(type1, type2)`.","For example `tuple<string, number>`"):this.error("Unexpected token after type")}else this.error("Unexpected token after type");return n}checkForNakedFunctionSignature(){if(this.current.type==="IDENTIFIER"){let n=this.lexer.saveState(),t=this.current;try{let i=this.current;if(this.advance(),this.current.type===":"){this.advance();let r=!1,o=0,s=10;for(;this.current.type!=="EOF"&&o<s;){if(this.current.type==="->"){r=!0;break}if(this.current.type==="+"||this.current.type==="*"||this.current.type==="?"){if(this.advance(),this.current.type==="->"){r=!0;break}o++}this.advance(),o++}r&&(this.lexer.restoreState(n),this.current=t,this.errorAtToken(i,"Function signatures must be enclosed in parentheses","For example `(z: string*) -> boolean`"))}this.lexer.restoreState(n),this.current=t}catch(i){if(this.lexer.restoreState(n),this.current=t,i instanceof Error&&i.message.includes("Function signatures must be enclosed"))throw i}}}parseUnionType(){let n=this.parseIntersectionType();if(!n)return;let t=[n];for(;this.match("|");){let i=this.parseIntersectionType();i||this.error("Expected type after |"),t.push(i)}return t.length===1?t[0]:this.createNode("union",{types:t})}parseIntersectionType(){let n=this.parsePrimaryType();if(!n)return;let t=[n];for(;this.match("&");){let i=this.parsePrimaryType();i||this.error("Expected type after &"),t.push(i)}return t.length===1?t[0]:this.createNode("intersection",{types:t})}parsePrimaryType(){if(this.match("!")){let n=this.parsePrimaryType();return n||this.error("Expected type after !"),this.createNode("negation",{type:n})}if(this.current.type==="("){let n=this.parseFunctionSignature();if(n)return n;if(this.match("(")){let t=this.parseUnionType();if(t||this.error("Expected type after ("),this.current.type===","){let i=[this.createNode("named_element",{name:void 0,type:t})];for(;this.match(",");){let r=this.parseUnionType();r||this.error("Expected type after ,"),i.push(this.createNode("named_element",{name:void 0,type:r}))}return this.expect(")"),this.createNode("tuple",{elements:i})}return this.expect(")"),this.createNode("group",{type:t})}}return this.parseListType()||this.parseTupleType()||this.parseRecordType()||this.parseDictionaryType()||this.parseSetType()||this.parseCollectionType()||this.parseExpressionType()||this.parseSymbolType()||this.parseNumericType()||this.parsePrimitiveType()||this.parseValue()||this.parseTypeReference()}isFunctionSignature(){let n=this.lexer.saveState(),t=this.current;this.advance();let i=1;for(;i>0&&this.current.type!=="EOF";)this.current.type==="("?i++:this.current.type===")"&&i--,this.advance();let r=this.current.type==="->";return this.lexer.restoreState(n),this.current=t,r}parseFunctionSignature(){if(this.current.type!=="("||!this.isFunctionSignature())return;let n=[];if(this.advance(),!this.match(")")){do{let s=this.parseArgument();s||this.error("Expected argument"),n.push(s)}while(this.match(","));this.expect(")")}this.expect("->");let t=this.parseUnionType();t||this.error("Expected return type after ->");let i=n.some(s=>s.modifier==="optional"),r=n.some(s=>s.modifier==="variadic_zero"||s.modifier==="variadic_one"),o=n.filter(s=>s.modifier==="variadic_zero"||s.modifier==="variadic_one").length;return i&&r&&this.error("Variadic arguments cannot be used with optional arguments"),o>1&&this.error("There can be only one variadic argument"),this.createNode("function_signature",{arguments:n,returnType:t})}parseArgument(){let n=this.parseNamedElement();if(!n)return;let t;return this.match("?")?t="optional":this.match("*")?t="variadic_zero":this.match("+")&&(t="variadic_one"),this.createNode("argument",{element:n,modifier:t})}parseNamedElement(){let n;if(this.current.type==="IDENTIFIER"||this.current.type==="VERBATIM_STRING"){let i=this.current;if(this.lexer.peekToken().type===":"){n=i.value,this.advance(),this.advance();let o=this.parseUnionType();return o?this.createNode("named_element",{name:n,type:o}):void 0}}let t=this.parseUnionType();if(t)return this.createNode("named_element",{name:void 0,type:t})}parseListType(){if(this.current.type==="IDENTIFIER"){let n=this.current,i=this.lexer.peekToken().type==="<";switch(n.value){case"list":return i?(this.advance(),this.parseListTypeImpl()):void 0;case"vector":return i?(this.advance(),this.parseVectorType()):(this.advance(),this.createNode("list",{elementType:this.createNode("primitive",{name:"number"}),dimensions:void 0}));case"matrix":return i?(this.advance(),this.parseMatrixType()):(this.advance(),this.createNode("matrix",{elementType:this.createNode("primitive",{name:"number"}),dimensions:[this.createNode("dimension",{size:-1}),this.createNode("dimension",{size:-1})]}));case"tensor":return i?(this.advance(),this.parseTensorType()):(this.advance(),this.createNode("list",{elementType:this.createNode("primitive",{name:"number"}),dimensions:void 0}));default:return}}}parseListTypeImpl(){let n=this.createNode("primitive",{name:"any"}),t;if(this.match("<")){if(t=this.parseDimensionWithX(),t||(t=this.parseDimensions()),!t){let i=this.parseUnionType();i&&(n=i,this.match("^")&&(t=this.parseDimensionWithX(),t||(t=this.parseDimensions())))}this.expect(">")}return this.createNode("list",{elementType:n,dimensions:t})}parseVectorType(){let n=this.createNode("primitive",{name:"number"}),t;if(this.match("<")){if(this.current.type==="NUMBER_LITERAL")t=parseInt(this.advance().value);else{let i=this.parseUnionType();i&&(n=i,this.match("^")&&(this.current.type==="NUMBER_LITERAL"?t=parseInt(this.advance().value):this.error("Expected number after ^")))}this.expect(">")}return this.createNode("vector",{elementType:n,size:t})}parseMatrixType(){let n=this.createNode("primitive",{name:"number"}),t;if(this.match("<")){if(t=this.parseDimensionWithX(),t||(t=this.parseDimensions()),!t){let i=this.parseUnionType();i&&(n=i,this.match("^")&&(t=this.parseDimensionWithX(),t||(t=this.parseDimensions())))}this.expect(">")}else t=[this.createNode("dimension",{size:null}),this.createNode("dimension",{size:null})];return this.createNode("matrix",{elementType:n,dimensions:t})}parseTensorType(){let n=this.createNode("primitive",{name:"number"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("tensor",{elementType:n})}parseDimensions(){let n=[],t=this.parseDimension();if(t){for(n.push(t);this.match("x");){let i=this.parseDimension();i||this.error("Expected dimension after x"),n.push(i)}return n}}parseDimension(){if(this.match("?"))return this.createNode("dimension",{size:null});if(this.current.type==="NUMBER_LITERAL"){let n=parseInt(this.advance().value);return this.createNode("dimension",{size:n})}}parseDimensionWithX(){if(this.current.type==="NUMBER_LITERAL"){let n=[],t=parseInt(this.advance().value);if(n.push(this.createNode("dimension",{size:t})),this.current.type==="IDENTIFIER"&&this.current.value.startsWith("x")){let i=this.current.value,r=i.match(/x(\d+)/g);if(r&&r.join("")===i){this.advance();for(let o of r){let s=parseInt(o.substring(1));n.push(this.createNode("dimension",{size:s}))}}else(i==="x"||i.startsWith("x"))&&this.error("Expected a positive integer literal or `?` after x. For example: `2x3` or `2x?`")}if(n.length>1)return n}}parseTupleType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="tuple"){if(this.lexer.peekToken().type!=="<")return;this.advance(),this.expect("<");let t=[];if(this.current.type!==">"){let i=this.parseNamedElement();i||this.error("Expected tuple element"),t.push(i);let r=i.name!==void 0;for(;this.match(",");){let o=this.parseNamedElement();o||this.error("Expected tuple element"),r&&!o.name&&this.error("All tuple elements should be named, or none. Previous elements were named, but this one isn't."),!r&&o.name&&this.error("All tuple elements should be named, or none. Previous elements were not named, but this one is."),t.push(o)}}return this.expect(">"),this.createNode("tuple",{elements:t})}}parseRecordType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="record"){this.advance();let n=[];if(this.match("<")){if(this.current.type!==">")do{let t=this.parseRecordEntry();t||this.error("Expected record entry"),n.push(t)}while(this.match(","));this.expect(">")}return this.createNode("record",{entries:n})}}parseRecordEntry(){let n;if(this.current.type==="IDENTIFIER")n=this.advance().value;else if(this.current.type==="VERBATIM_STRING")n=this.advance().value;else return;this.expect(":");let t=this.parseUnionType();return t||this.error("Expected value type"),this.createNode("record_entry",{key:n,valueType:t})}parseDictionaryType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="dictionary"){this.advance();let n=this.createNode("primitive",{name:"any"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("dictionary",{valueType:n})}}parseSetType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="set"){this.advance();let n=this.createNode("primitive",{name:"any"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("set",{elementType:n})}}parseCollectionType(){if(this.current.type==="IDENTIFIER"){let n=this.current.value==="indexed_collection",t=this.current.value==="collection";if(n||t){this.advance();let i=this.createNode("primitive",{name:"any"});if(this.match("<")){let r=this.parseUnionType();r&&(i=r),this.expect(">")}return this.createNode("collection",{elementType:i,indexed:n})}}}parseExpressionType(){if(this.current.type==="IDENTIFIER"