UNPKG

@cortex-js/compute-engine

Version:

Symbolic computing and numeric evaluations for JavaScript and Node.js

5 lines 417 kB
/** Compute Engine 0.58.0 */ function xi(e,n,t={}){let{contract:i=.125,step:r=1,power:s=2,atol:o=1e-16,rtol:a=o>0?0:Math.sqrt(Number.EPSILON),maxeval:u=1e6,breaktol:l=2}=t;if(!isFinite(n))return xi(T=>e(1/T),1/n,{rtol:a,atol:o,maxeval:u,contract:Math.abs(i)>1?1/i:i,step:1/r,power:s});let c=r,f=Math.pow(1/i,s),m=e(n+c),d=[m],b=1/0,v=1;for(;v<u;){v+=1,c*=i,d.push(e(n+c));let T=f,M=1/0;for(let C=d.length-2;C>=0;C--){let F=d[C];d[C]=d[C+1]+(d[C+1]-d[C])/(T-1);let V=Math.abs(d[C]-F);M=Math.min(M,V),V<b&&(m=d[C],b=V),T*=f}if(M>l*b||!isFinite(M)||b<=Math.max(a*Math.abs(m),o))break}return[m,b]}var qs=new Map;function O(e){if(e<=100){let n=qs.get(e);return n===void 0&&(n=10n**BigInt(e),qs.set(e,n)),n}return 10n**BigInt(e)}function Gs(e,n,t){return e*n/t}function js(e,n,t){return e*t/n}function Gn(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=zs(e,n)}else t=zs(e,n);let s=e*n,o;do o=t,t=(t+s/t)/2n;while(_e(t-o)>1n);let a=(t+s/t)/2n,u=_e(t*t-s);return _e(a*a-s)<u?a:t}function zs(e,n){let i=K(e),r=Math.max(0,i-15),s=Number(r>0?e/O(r):e),o=K(n),a=Math.max(0,o-15),u=Number(a>0?n/O(a):n),l=r+a,c=Math.floor(l/2),f=Math.sqrt(s*u);l%2!==0&&(f*=3.1622776601683795);let m=BigInt(Math.round(f))*O(c);return m>0n?m:1n}function _e(e){return e<0n?-e:e}function K(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 s=i>>1;s>=1;s>>=1)t>>BigInt(s)>0n&&(n+=s,t>>=BigInt(s));n+=1;let r=Math.ceil(n*.30102999566398);return e<O(r-1)?r-1:e>=O(r)?r+1:r}function Ni(e,n){if(e===0n)return n;let t=0,i=e,r=n/2n;for(;_e(i)>r;)i=i/2n,t++;let s=n,o=i;s+=o;for(let a=2;o=o*i/(BigInt(a)*n),_e(o)!==0n;a++)s+=o;for(let a=0;a<t;a++)s=s*s/n;return s}function Us(e,n){if(e===n)return 0n;let t=Number(e),i=Number(n),r,s=e,o=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=vi(e,n)}else r=vi(e,n)}else{s=e;let u=2n*n,l=n/2n;for(;s>u||s<l;)s=Gn(s,n),o++;r=vi(s,n)}let a=0n;for(let u=0;u<100;u++){let l=Ni(r,n);if(l===0n){r=r/2n;continue}let c=r+s*n/l-n,f=_e(c-r);if(f<=1n||f<100000n&&a>0n&&a<100000n&&f*4n>=a)break;a=f,r=c}for(let u=0;u<o;u++)r=2n*r;return r}function vi(e,n){let t=K(e),i=K(n);return BigInt(t-i)*2302585n*n/1000000n}var vt="314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576407895126946839835259570982582262052248940772671947826848260147699090264013639443745530506820349625245174939965143142980919065925093722169646151570985838741059788595977297549893016175392846813826868386894277415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944169486855584840635",xt=null;function Ei(e){if(xt!==null&&xt.scale===e)return xt.value;let t=K(e)-1+10,i=vt.slice(0,t+1),r=BigInt(i),s=i.length-1,o=r*e/O(s);return xt={scale:e,value:o},o}function Et(e,n){if(e===0n)return[0n,n];let t=Ei(n),i=2n*t,r=t/2n,s,o=_e(e);if(o>n*(1n<<30n)){let F=K(o)-K(n)+20,V=n*O(F),U=e*O(F),ue=2n*Ei(V),H=U%ue;H<0n&&(H+=ue),s=H/O(F)}else s=e%i;s<0n&&(s+=i);let a=1n,u=1n;s>3n*r?(s=i-s,a=-1n):s>t?(s=s-t,a=-1n,u=-1n):s>r&&(s=t-s,u=-1n);let l=K(n)-1,c=Math.min(18,Math.max(2,Math.ceil(.87*Math.sqrt(l)))),f=0,m=n>>BigInt(c);for(;s>m;)s=s/2n,f++;let d=s,b=n,v=s,T=n,M=s*s,C=n*n;for(let F=2;;F+=2){if(T=T*M/(BigInt(F)*BigInt(F-1)*C),T===0n){v=v*M/(BigInt(F+1)*BigInt(F)*C),v!==0n&&(F%4===2?(b-=T,d-=v):(b+=T,d+=v));break}if(v=v*M/(BigInt(F+1)*BigInt(F)*C),F%4===2?(b-=T,d-=v):(b+=T,d+=v),v===0n)break}for(let F=0;F<f;F++){let V=2n*d*b/n,U=2n*b*b/n-n;d=V,b=U}return[a*d,u*b]}function zn(e,n){if(e===0n)return 0n;if(e<0n)return-zn(-e,n);let i=Ei(n)/2n;if(e>n){let f=n*n/e;return i-zn(f,n)}let r=4n*n/10n,s=0,o=e;for(;o>r;){let f=o*o,m=(n*n+f)/n,d=Gn(m,n);o=o*n/(n+d),s++}let a=o,u=o,l=o*o,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<s;f++)a=2n*a;return a}var Ti=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(vt[0]+"."+vt.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]=Nt(n,0);return}if(typeof n=="number"){[this.significand,this.exponent]=nl(n);return}[this.significand,this.exponent]=Ys(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 Ti;let d=this.exponent;if(Number.isNaN(d))return Ti;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 b=this.significand*O(d),v=BigInt(n);return b<v?-1:b>v?1:0}n=new e(n)}let t=this.exponent,i=n.exponent,r=this.significand,s=n.significand;if(t!==t||i!==i)return Ti;if(!Number.isFinite(t)||!Number.isFinite(i))return!Number.isFinite(t)&&!Number.isFinite(i)?r===s?0:r>s?1:-1:Number.isFinite(t)?s>0n?-1:1:r>0n?1:-1;if(r===0n)return s===0n?0:s>0n?-1:1;if(s===0n)return r>0n?1:-1;if(r>0n&&s<0n)return 1;if(r<0n&&s>0n)return-1;if(t===i)return r<s?-1:r>s?1:0;let o=K(r),a=K(s),u=o+t,l=a+i;if(u!==l){let d=r>0n?1:-1;return u>l?d:-d}let c=r,f=s,m=Math.abs(t-i);if(m>1e3){let d=o,b=a,v=Math.max(d,b)+1;d<v&&(c=c*O(v-d)),b<v&&(f=f*O(v-b))}else t<i?f=f*O(m):c=c*O(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*O(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 G(this.significand+n.significand,t);let o=t-i;return o>0?G(this.significand*O(o)+n.significand,i):G(this.significand+n.significand*O(-o),t)}if(t!==t||i!==i)return e.NAN;let r=!Number.isFinite(t),s=!Number.isFinite(i);return r&&s?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 G(this.significand-n.significand,t);let o=t-i;return o>0?G(this.significand*O(o)-n.significand,i):G(this.significand-n.significand*O(-o),t)}if(t!==t||i!==i)return e.NAN;let r=!Number.isFinite(t),s=!Number.isFinite(i);return r&&s?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 G(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,s=n.significand>0n?1n:-1n;return r*s>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY}neg(){let n=this.significand;return n===0n?this:Number.isFinite(this.exponent)?G(-n,this.exponent):n>0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY}abs(){return this.significand>=0n?this:Number.isFinite(this.exponent)?G(-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(G(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(G(1n,0)):t}return this}round(){let n=this.exponent;if(n>=0)return this;if(Number.isFinite(n)){let t=G(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/O(-n);return G(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,s=n.significand;if(Number.isFinite(t)&&Number.isFinite(i)){if(s===0n)return r===0n?e.NAN:r>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY;if(r===0n)return G(0n,0);let u=e.precision,l=10,c=r<0n?-r:r,f=s<0n?-s:s,m=K(c),d=K(f),b=u+l+Math.max(0,d-m),v=O(b),T=r*v/s,M=t-i-b;return G(T,M).toPrecision(u)}if(t!==t||i!==i)return e.NAN;let o=!Number.isFinite(t),a=!Number.isFinite(i);if(o&&a)return e.NAN;if(o){let u=r>0n?1n:-1n,l=s>0n?1n:s<0n?-1n:1n;return u*l>0n?e.POSITIVE_INFINITY:e.NEGATIVE_INFINITY}return G(0n,0)}inv(){return G(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?G(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 G(1n,0);if(!this.isFinite())return t>0n?this.significand<0n&&t%2n!==0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY:G(0n,0);if(this.isZero())return t>0n?G(0n,0):e.POSITIVE_INFINITY;if(t<0n)return this.pow(n.neg()).inv();let i=this.significand<0n?-this.significand:this.significand,r=K(i)+this.exponent,s=Number(t)*r;if(s>9e15)return this.significand<0n&&t%2n!==0n?e.NEGATIVE_INFINITY:e.POSITIVE_INFINITY;if(s<-9e15)return G(0n,0);let o=e.precision,a=G(1n,0),u=this,l=t;for(;l>0n;)l&1n&&(a=a.mul(u).toPrecision(o)),l>>=1n,l>0n&&(u=u.mul(u).toPrecision(o));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,s=n?"-":"";if(r>20||r<-6){let u=i===1?t:t[0]+"."+t.slice(1),l=r>=0?"+":"";return`${s}${u}e${l}${r}`}if(this.exponent>=0)return s+t+"0".repeat(this.exponent);let o=-this.exponent;if(o<i){let u=t.slice(0,i-o),l=t.slice(i-o);return`${s}${u}.${l}`}let a=o-i;return`${s}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,s=this.exponent+t,o;if(s>=0)o=r*O(s);else{let f=O(-s),m=r/f,d=r%f,b=f/2n;d>b?o=m+1n:d<b||f%2n!==0n||m%2n===0n?o=m:o=m+1n}let a=i&&o!==0n?"-":"",u=o.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=K(t);if(i<=n)return this;let r=i-n,s=O(r),o=t/s,a=t%s,u=s/2n;(a>u||a===u&&o%2n!==0n)&&(o+=1n);let l=this.significand<0n?-o:o;return G(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*O(this.exponent);let n=O(-this.exponent);return this.significand/n}};function G(e,n){let[t,i]=Nt(e,n),r=Object.create(x.prototype);return r.significand=t,r.exponent=i,r}var Hs=1000000000n,Zs=1000n;function Nt(e,n){if(e===0n)return[0n,0];for(;e%Hs===0n;)e/=Hs,n+=9;for(;e%Zs===0n;)e/=Zs,n+=3;for(;e%10n===0n;)e/=10n,n+=1;return[e,n]}function nl(e){return Number.isNaN(e)?[0n,NaN]:e===1/0?[1n,1/0]:e===-1/0?[-1n,1/0]:Number.isInteger(e)?Nt(BigInt(e),0):Ys(e.toString())}function Ys(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 s=n.indexOf("."),o,a;s===-1?(o=n,a=""):(o=n.slice(0,s),a=n.slice(s+1)),o=o.replace(/^0+/,"")||"0";let u=o+a;if(u.length===0||!/^\d+$/.test(u))return[0n,NaN];let l=BigInt(u);r&&(l=-l);let c=-a.length;return Nt(l,c+t)}function Ve(e,n){let t=O(n),i=e.exponent+n;return i>=0?[e.significand*O(i),t]:[e.significand/O(-i),t]}function Je(e,n,t){if(e===0n)return x.ZERO;let i=e<0n,r=i?-e:e,s=K(r);if(s>t){let l=s-t,c=O(l),f=c/2n,m=r%c;r=r/c,m>=f&&(r+=1n);let d=K(n)-1,b=l-d,v=i?-r:r;return G(v,b)}let a=-(K(n)-1),u=i?-r:r;return G(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]=Ve(this,n),r=Gn(t,i);return Je(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]=Ve(this,n),r=t*i*i,s,o=this.toNumber(),a=Number(i);if(Number.isFinite(o)&&o>0&&Number.isFinite(a)){let l=Math.cbrt(o);Number.isFinite(l)&&l>0?(s=BigInt(Math.floor(l*a)),s===0n&&(s=1n)):s=Ws(t,i)}else s=Ws(t,i);let u;do{u=s;let l=s*s;if(l===0n){s=1n;break}s=(2n*s+r/l)/3n}while(_e(s-u)>1n);{let l=(2n*s+r/(s*s))/3n,c=_e(s*s*s-r);_e(l*l*l-r)<c&&(s=l)}return Je(s,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]=Ve(this,n),r=Ni(t,i);return Je(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]=Ve(this,n),r=Us(t,i);return Je(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]=Ve(this,n),[r]=Et(t,i);return Je(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]=Ve(this,n),[,r]=Et(t,i);return Je(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]=Ve(this,n),[r,s]=Et(t,i);if(s===0n)return r>0n?x.POSITIVE_INFINITY:x.NEGATIVE_INFINITY;let o=r*i/s;return Je(o,i,e)};x.prototype.atan=function(){if(this.isNaN())return x.NAN;if(this.isZero())return x.ZERO;if(!this.isFinite()){let s=x.PI.div(x.TWO);return this.significand>0n?s:s.neg()}let e=x.precision,n=e+15,[t,i]=Ve(this,n),r=zn(t,i);return Je(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,s]=Ve(this,i),o=Gs(r,r,s),a=s-o,u=Gn(a,s),l=js(r,u,s),c=zn(l,s);return Je(c,s,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 s=t.div(n);return n.significand>0n?s.atan():t.significand>=0n?s.atan().add(i):s.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 Ws(e,n){let i=K(e),r=Math.max(0,i-15),s=Number(r>0?e/O(r):e),o=K(n),a=Math.max(0,o-15),u=Number(a>0?n/O(a):n),l=r+2*a,c=Math.floor(l/3),f=l%3,m=Math.cbrt(s*u*u);f===1&&(m*=2.154434690031882),f===2&&(m*=4.641588833612779);let d=BigInt(Math.round(m))*O(c);return d>0n?d:1n}var qp=[BigInt(4),BigInt(2),BigInt(4),BigInt(2),BigInt(4),BigInt(6),BigInt(2),BigInt(6)];var tl=53,Xs=Math.floor(Math.log10(Math.pow(2,tl))),il=1e-10;var Ii=1e4;function Me(e,n){if(e===0)return n;if(n===0||e===n)return e;if(!Number.isInteger(e)||!Number.isInteger(n))return NaN;for(;n!==0;)[e,n]=[n,e%n];return e<0?-e:e}function Xe(e,n){if(e===0||n===0)return 0;let t=BigInt(e)*BigInt(n)/BigInt(Me(e,n));return Number(t)}function Un(e){if(!Number.isInteger(e)||e<0)return NaN;if(e>=170)return 1/0;let n=1;for(let t=2;t<=e;t++)n=n*t;return n}function Hn(e){if(!Number.isInteger(e)||e<0)return NaN;if(e<0)return NaN;if(e<=1)return 1;let n=e;for(;e>2;)e-=2,n*=e;return n}function Zn(e,n=il){return typeof e=="number"&&Math.abs(e)<=n?0:e}function Tt(e,n,t=1){if(t===0){let s=Tt(e,n,-1),o=Tt(e,n,1);return s===void 0||o===void 0?NaN:Math.abs(s-o)>1e-5?NaN:(s+o)/2}let[i,r]=xi(e,n,{step:t>0?1:-1});return i}var En=["number","finite_number","complex","finite_complex","imaginary","real","finite_real","rational","finite_rational","integer","finite_integer","non_finite_number"],_i=["indexed_collection","list","tuple"],It=[..._i,"collection","set","record","dictionary"],_t=["scalar",...En,"boolean","string"],ki=["value","color",...It,..._t],Si=["expression","symbol","function",...ki],Qe=["any","unknown","nothing","never","error",...Si];function kt(e){return typeof e=="string"?Qe.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 Ks=3,eo=1,no=2,rl=4,sl=5,ol=6,al=7,ul=8,ll=9,cl=10,fl=11;function J(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=`!${J(e.type,Ks)}`;break;case"union":t=e.types.map(u=>J(u,eo)).join(" | ");break;case"intersection":t=e.types.map(u=>J(u,no)).join(" & ");break;case"expression":t=`expression<${Qs(e.operator)}>`;break;case"symbol":t=`symbol<${Qs(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"&&En.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<${J(e.elements)}>`:t=`vector<${J(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<${J(e.elements)}>`:t=`matrix<${J(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<${J(e.elements)}${u}>`}break;case"record":t=`record<${Object.entries(e.elements).map(([u,l])=>`${u}: ${J(l)}`).join(", ")}>`;break;case"dictionary":t=`dictionary<${J(e.values)}>`;break;case"set":t=`set<${J(e.elements)}>`;break;case"collection":t=`collection<${J(e.elements)}>`;break;case"indexed_collection":t=`indexed_collection<${J(e.elements)}>`;break;case"tuple":if(e.elements.length===0)t="tuple";else if(e.elements.length===1){let[u]=e.elements;t=`tuple<${Nn(u)}>`}else t="tuple<"+e.elements.map(u=>Nn(u)).join(", ")+">";break;case"signature":let r=e.args?e.args.map(u=>Nn(u)).join(", "):"",s=e.optArgs?e.optArgs.map(u=>Nn(u)+"?").join(", "):"",o=e.variadicArg?e.variadicMin===0?`${Nn(e.variadicArg)}*`:`${Nn(e.variadicArg)}+`:"";t=`(${[r,s,o].filter(u=>u).join(", ")}) -> ${J(e.result)}`;break;default:t="error"}return n>0&&n>pl(e.kind)?`(${t})`:t}function Nn(e){return e.name?`${e.name}: ${J(e.type)}`:J(e.type)}function Qs(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`\`${e}\``}function pl(e){switch(e){case"negation":return Ks;case"union":return eo;case"intersection":return no;case"list":return rl;case"record":return sl;case"dictionary":return ol;case"set":return al;case"collection":case"indexed_collection":return ul;case"tuple":return ll;case"signature":return cl;case"value":return fl;default:return 0}}function ml(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,s)=>s),i=new Array(e.length+1);for(let r=1;r<=n.length;r++){i[0]=r;for(let s=1;s<=e.length;s++){let o=e[s-1]===n[r-1]?0:1;i[s]=Math.min(t[s]+1,i[s-1]+1,t[s-1]+o)}[t,i]=[i,t]}return t[e.length]}function St(e,n){let i=null,r=1/0,s=e.length;for(let o of n){if(Math.abs(s-o.length)>7)continue;let a=ml(e,o);if(a===0)return o;a<=7&&a<r&&(r=a,i=o)}return i}var Mt=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 wt=class{lexer;typeResolver;current;constructor(n,t){this.lexer=new Mt(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,o=r.split(` `)[n.line-1]||r,a=n.column,u=" ".repeat(Math.max(0,a-1))+"^",l=["","Invalid type",`| ${o}`,`| ${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,s=0,o=10;for(;this.current.type!=="EOF"&&s<o;){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}s++}this.advance(),s++}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 o=this.parseArgument();o||this.error("Expected argument"),n.push(o)}while(this.match(","));this.expect(")")}this.expect("->");let t=this.parseUnionType();t||this.error("Expected return type after ->");let i=n.some(o=>o.modifier==="optional"),r=n.some(o=>o.modifier==="variadic_zero"||o.modifier==="variadic_one"),s=n.filter(o=>o.modifier==="variadic_zero"||o.modifier==="variadic_one").length;return i&&r&&this.error("Variadic arguments cannot be used with optional arguments"),s>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 s=this.parseUnionType();return s?this.createNode("named_element",{name:n,type:s}):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 s of r){let o=parseInt(s.substring(1));n.push(this.createNode("dimension",{size:o}))}}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 s=this.parseNamedElement();s||this.error("Expected tuple element"),r&&!s.name&&this.error("All tuple elements should be named, or none. Previous elements were named, but this one isn't."),!r&&s.name&&this.error("All tuple elements should be named, or none. Previous elements were not named, but this one is."),t.push(s)}}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"&&this.current.value==="expression"){if(this.lexer.peekToken().type!=="<")return;this.advance(),this.expect("<");let i=this.expect("IDENTIFIER").value;return this.expect(">"),this.createNode("expression",{operator:i})}}parseSymbolType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="symbol"){if(this.lexer.peekToken().type!=="<")return;this.advance(),this.expect("<");let i=this.expect("IDENTIFIER").value;return this.expect(">"),this.createNode("symbol",{name:i})}}parseNumericType(){if(this.current.type==="IDENTIFIER"&&["real","finite_real","rational","finite_rational","integer","finite_integer"].includes(this.current.value)){let t=this.advance().value;if(this.match("<")){let i=this.parseValue();this.expect("..");let r=this.parseValue();return this.expect(">"),this.createNode("numeric",{baseType:t,lowerBound:i,upperBound:r})}return this.createNode("numeric",{baseType:t})}}parsePrimitiveType(){if(this.current.type==="IDENTIFIER"){let n=this.current.value;if(Qe.includes(n))return this.advance(),this.createNode("primitive",{name:n})}}parseValue(){let n,t;switch(this.current.type){case"STRING_LITERAL":n=this.advance().value,t="string";break;case"NUMBER_LITERAL":n=parseFloat(this.advance().value),t="number";break;case"TRUE":this.advance(),n=!0,t="boolean";break;case"FALSE":this.advance(),n=!1,t="boolean";break;case"NAN":this.advance(),n=NaN,t="nan";break;case"INFINITY":case"PLUS_INFINITY":this.advance(),n=1/0,t="infinity";break;case"MINUS_INFINITY":this.advance(),n=-1/0,t="infinity";break;default:return}return this.createNode("value",{value:n,valueType:t})}parseTypeReference(){let n=this.current.type==="IDENTIFIER"&&this.current.value==="type";if(n&&this.advance(),this.current.type==="IDENTIFIER"){let t=this.current,i=this.advance().value;return this.typeResolver.resolve(i)?this.createNode("type_reference",{name:i,isForward:n}):n&&this.typeResolver.forward(i)?this.createNode("type_reference",{name:i,isForward:!0}):(n||this.errorAtToken(t,`Unknown type "${i}"`,"Syntax error. The type was not recognized."),this.createNode("type_reference",{name:i,isForward:n}))}}};function to(e,n){switch(e.kind){case"function_signature":return n.visitFunctionSignature(e);case"union":return n.visitUnionType(e);case"intersection":return n.visitIntersectionType(e);case"negation":return n.visitNegationType(e);case"group":return n.visitGroupType(e);case"list":return n.visitListType(e);case"vector":return n.visitVectorType(e);case"matrix":return n.visitMatrixType(e);case"tensor":return n.visitTensorType(e);case"tuple":return n.visitTupleType(e);case"record":return n.visitRecordType(e);case"dictionary":return n.visitDictionaryType(e);case"set":return n.visitSetType(e);case"collection":return n.visitCollectionType(e);case"expression":return n.visitExpressionType(e);case"symbol":return n.visitSymbolType(e);case"numeric":return n.visitNumericType(e);case"primitive":return n.visitPrimitiveType(e);case"type_reference":return n.visitTypeReference(e);case"value":return n.visitValue(e);default:throw new Error(`Unknown node kind: ${e.kind}`)}}var Mi=class{typeResolver;constructor(n){this.typeResolver=n??{forward:()=>{},resolve:()=>{},get names(){return[]}}}buildType(n){return to(n,this)}visitFunctionSignature(n){let t=[],i=[],r,s;for(let u of n.arguments){let l=this.buildNamedElement(u.element);switch(u.modifier){case"optional":i.push(l);break;case"variadic_zero":r=l,s=0;break;case"variadic_one":r=l,s=1;break;default:t.push(l);break}}let o=this.buildType(n.returnType),a={kind:"signature",args:t.length>0?t:void 0,result:o};return i.length>0&&(a.optArgs=i),r&&(a.variadicArg=r,a.variadicMin=s),a}visitUnionType(n){return{kind:"union",types:n.types.map(i=>this.buildType(i))}}visitIntersectionType(n){return{kind:"intersection",types:n.types.map(i=>this.buildType(i))}}visitNegationType(n){return{kind:"negation",type:this.buildType(n.type)}}visitGroupType(n){return this.buildType(n.type)}visitListType(n){let t=this.buildType(n.elementType),i=n.dimensions?.map(r=>this.buildDimension(r));return{kind:"list",elements:t,dimensions:i}}visitVectorType(n){let t=this.buildType(n.elementType);return n.size!==void 0?{kind:"list",elements:t,dimensions:[n.size]}:{kind:"list",elements:t}}visitMatrixType(n){let t=this.buildType(n.elementType);if(n.dimensions){let i=n.dimensions.map(r=>this.buildDimension(r));return{kind:"list",elements:t,dimensions:i}}return{kind:"list",elements:t,dimensions:[-1,-1]}}visitTensorType(n){return{kind:"list",elements:this.buildType(n.elementType)}}visitTupleType(n){return{kind:"tuple",elements:n.elements.map(i=>this.buildNamedElement(i))}}visitRecordType(n){if(n.entries.length===0)return"record";let t={};for(let i of n.entries)t[i.key]=this.buildType(i.valueType);return{kind:"record",elements:t}}visitDictionaryType(n){let t=this.buildType(n.valueType);return this.isAnyType(t)?"dictionary":{kind:"dictionary",values:t}}visitSetType(n){let t=this.buildType(n.elementType);return this.isAnyType(t)?"set":{kind:"set",elements:t}}visitCollectionType(n){let t=this.buildType(n.elementType);return n.indexed?this.isAnyType(t)?"indexed_collection":{kind:"indexed_collection",elements:t}:this.isAnyType(t)?"collection":{kind:"collection",elements:t}}visitExpressionType(n){return{kind:"expression",operator:n.operator}}visitSymbolType(n){return{kind:"symbol",name:n.name}}visitNumericType(n){if(!n.lowerBound&&!n.upperBound)return n.baseType;let t=n.lowerBound?this.buildValue(n.lowerBound):-1/0,i=n.upperBound?this.buildValue(n.upperBound):1/0;return t===-1/0&&i===1/0?n.baseType:{kind:"numeric",type:n.baseType,lower:t,upper:i}}visitPrimitiveType(n){return n.name}visitTypeReference(n){let t=this.typeResolver.resolve(n.name);if(t)return t;if(n.isForward){let i=this.typeResolver.forward(n.name);if(i)return i}return n.name}visitValue(n){return{kind:"value",value:n.value}}buildNamedElement(n){let t=this.buildType(n.type);return n.name?{name:n.name,type:t}:{type:t}}buildDimension(n){return n.size??-1}buildValue(n){return n.value}isAnyType(n){return n==="any"||typeof n=="object"&&"kind"in n&&n.kind==="primitive"&&"name"in n&&n.name==="any"}};function io(e,n){return new Mi(n).buildType(e)}function W(e,n){if(e!==void 0){if(kt(e))return e;if(typeof e=="string")try{let i=new wt(e,{typeResolver:n}).parseType();return io(i,n)}catch(t){throw new Error(`Failed to parse type "${e}": ${t instanceof Error?t.message:String(t)}`)}}}var dl={number:En,non_finite_number:[],finite_number:["finite_complex","finite_real","finite_integer","finite_rational"],complex:["finite_complex","imaginary","finite_real","finite_rational","finite_integer","non_finite_number"],finite_complex:["imaginary","finite_real","finite_rational","finite_integer"],imaginary:[],real:["rational","integer","finite_real","finite_rational","finite_integer","non_finite_number"],finite_real:["finite_rational","finite_integer"],rational:["finite_rational","finite_integer","integer","non_finite_number"],finite_rational:["finite_integer"],integer:["finite_integer","non_finite_num