UNPKG

@cortex-js/compute-engine

Version:

Symbolic computing and numeric evaluations for JavaScript and Node.js

6 lines 235 kB
/** LatexSyntax 0.58.0 */ (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.LatexSyntax = {}));})(this, (function (exports) { 'use strict'; var LatexSyntax=(()=>{var zn=Object.defineProperty;var Ir=Object.getOwnPropertyDescriptor;var Mr=Object.getOwnPropertyNames;var Dr=Object.prototype.hasOwnProperty;var Pr=(e,n)=>{for(var t in n)zn(e,t,{get:n[t],enumerable:!0})},Ar=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Mr(n))!Dr.call(e,r)&&r!==t&&zn(e,r,{get:()=>n[r],enumerable:!(i=Ir(n,r))||i.enumerable});return e};var _r=e=>Ar(zn({},"__esModule",{value:!0}),e);var ro={};Pr(ro,{ALGEBRA_DICTIONARY:()=>hn,ARITHMETIC_DICTIONARY:()=>bn,CALCULUS_DICTIONARY:()=>Sn,COMPLEX_DICTIONARY:()=>kn,CORE_DICTIONARY:()=>gn,INEQUALITIES_DICTIONARY:()=>pe,LATEX_DICTIONARY:()=>Jn,LINEAR_ALGEBRA_DICTIONARY:()=>vn,LOGIC_DICTIONARY:()=>pn,LatexSyntax:()=>en,OTHERS_DICTIONARY:()=>_n,PHYSICS_DICTIONARY:()=>xt,SETS_DICTIONARY:()=>xn,STATISTICS_DICTIONARY:()=>In,SYMBOLS_DICTIONARY:()=>mn,TRIGONOMETRY_DICTIONARY:()=>Nn,UNITS_DICTIONARY:()=>Pn,parse:()=>Sr,serialize:()=>vr,version:()=>io});var be=["Error","'missing'"];function le(e){return!!(typeof e=="number"||ke(e)||typeof e=="string"&&Ie(e))}function ke(e){return e!==null&&typeof e=="object"&&"num"in e}function Ne(e){return e!==null&&typeof e=="object"&&"sym"in e}function Gn(e){return e!==null&&typeof e=="object"&&"str"in e}function Ct(e){return e!==null&&typeof e=="object"&&"dict"in e&&typeof e.dict=="object"&&!Array.isArray(e.dict)&&e.dict!==null}function Se(e){return e!==null&&typeof e=="object"&&"fn"in e&&Array.isArray(e.fn)&&e.fn.length>0&&typeof e.fn[0]=="string"}function I(e){return e==null?null:typeof e=="object"&&"str"in e?e.str:typeof e!="string"?null:e.length>=2&&e.at(0)==="'"&&e.at(-1)==="'"?e.substring(1,e.length-1):Ie(e)||Fe(e)?null:e}function Un(e){if(e==null||I(e)!==null)return null;let n=f(e);return n?[n,...x(e).map(t=>Un(t)).filter(t=>t!==null)]:e}function f(e){return Array.isArray(e)?e[0]:e==null?"":Se(e)?e.fn[0]:""}function x(e){return Array.isArray(e)?e.slice(1):e!==void 0&&Se(e)?e.fn.slice(1):[]}function c(e,n){return Array.isArray(e)?e[n]??null:e===null||!Se(e)?null:e.fn[n]??null}function A(e){return e==null?0:Array.isArray(e)?Math.max(0,e.length-1):Se(e)?Math.max(0,e.fn.length-1):0}function jn(e){return e==null?null:f(e)==="Hold"?c(e,1):e}function y(e){return typeof e=="string"&&Fe(e)?e.length>=2&&e.at(0)==="`"&&e.at(-1)==="`"?e.slice(1,-1):e:e==null?null:Ne(e)?e.sym:null}function Ft(e){let n=f(e);if(n==="KeyValuePair"||n==="Tuple"||n==="Pair"){let[t,i]=x(e),r=I(t);return r?[r,i??"Nothing"]:null}return null}function Yn(e){if(e===null)return null;if(Ct(e))return e;let n=Ft(e);if(n)return{[n[0]]:n[1]};if(f(e)==="Dictionary"){let t={},i=x(e);for(let r=1;r<A(e);r++){let s=Ft(i[r]);s&&(t[s[0]]=wr(s[1])??"Nothing")}return{dict:t}}return null}function nn(e){return{dict:Object.fromEntries(Object.entries(e).map(([t,i])=>[t,Vn(i)??"Nothing"]))}}function Jr(e){if(e=e.toLowerCase().replace(/[nd]$/,"").replace(/[\u0009-\u000d\u0020\u00a0]/g,""),e==="nan")return NaN;if(/^(infinity|\+infinity|oo|\+oo)$/i.test(e))return 1/0;if(/^(-infinity|-oo)$/.test(e))return-1/0;if(/\([0-9]+\)/.test(e)){let[n,t,i,r]=e.match(/(.+)\(([0-9]+)\)(.*)$/)??[];e=t+i.repeat(Math.ceil(16/i.length))+(r??"")}return parseFloat(e)}function k(e){return typeof e=="number"?e:typeof e=="string"&&Ie(e)?Jr(e):e!==void 0&&ke(e)?k(e.num):null}function ve(e){if(e==null)return null;if(y(e)==="Half")return[1,2];let n=f(e);if(!n)return null;let t=null,i=null;if(n==="Negate"){let r=ve(x(e)[0]);if(r)return[-r[0],r[1]]}if(n==="Rational"||n==="Divide"){let[r,s]=x(e);t=k(r)??NaN,i=k(s)??NaN}if(n==="Power"){let[r,s]=x(e),o=k(s);o===1?(t=k(r),i=1):o===-1&&(t=1,i=k(r))}if(n==="Multiply"){let[r,s]=x(e);if(f(s)==="Power"){let[o,a]=x(s);k(a)===-1&&(t=k(r),i=k(o))}}return t===null||i===null?null:Number.isInteger(t)&&Number.isInteger(i)?[t,i]:null}function tn(e,n){let t=null;if(Array.isArray(e)&&(t=e),Se(e)&&(t=e.fn),t===null)return[];let i=1,r=[];for(;i<t.length;)r.push(n(t[i])),i+=1;return r}function he(e,n,t){let i=f(n),r=f(t);return i===e&&r===e?[e,...x(n),...x(t)]:i===e?[e,...x(n),t]:r===e?[e,n,...x(t)]:[e,n,t]}function ue(e){if(e==null)return null;let n=f(e);if(n==="Delimiter"){if(e=c(e,1),e===null)return[];if(n=f(e),n!=="Sequence")return[e]}return n!=="Sequence"?null:x(e)}function P(e){return e==null||e==="Nothing"?!0:f(e)==="Sequence"&&A(e)===0}function M(e){return P(e)?be:e}function qn(e){return e[0]==="Square"?qn(e.slice(1))+2:e.reduce((n,t)=>n+Oe(t),0)}function Oe(e){if(e===null)return 0;if(typeof e=="number"||typeof e=="string"||le(e)||Ne(e)||Gn(e))return 1;if(Array.isArray(e))return qn(e);if("fn"in e)return qn(e.fn);let n=Yn(e);if(n){let t=Object.keys(n);return 1+t.length+t.reduce((i,r)=>i+Oe(n[r]),0)}return 0}function Ie(e){return/^(nan|oo|\+oo|-oo|infinity|\+infinity|-infinity)$/i.test(e)||/^[+-]?(0|[1-9][0-9]*)(\.[0-9]+)?(\([0-9]+\))?([eE][+-]?[0-9]+)?$/.test(e)}function Fe(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)||e.length>=2&&e[0]==="`"&&e[e.length-1]==="`"}function $t(e){return e.length>=2&&e[0]==="'"&&e[e.length-1]==="'"?!0:!Ie(e)&&!Fe(e)}function Vn(e){if(typeof e=="string")return{str:e};if(typeof e=="number")return{num:e.toString()};if(typeof e=="boolean")return e?"True":"False";if(Array.isArray(e))return["List",...e.map(n=>Vn(n)??"Nothing")];if(e===null)return null;if(typeof e=="object"){let n={};for(let t in e)n[t]=Vn(e[t])??"Nothing";return{dict:n}}return Se(e)||Ne(e)||ke(e)||Gn(e)||Ct(e)?e:null}function wr(e){return e==null?null:Gn(e)?e.str:ke(e)?parseFloat(e.num):Ne(e)?e.sym:typeof e=="string"||typeof e=="number"?e:Array.isArray(e)?{fn:e}:e}var S=245,Ce=260,K=270,R=275,C=390,V=600,Wn=650,$e=700,Hn=810;function zt(e){return!("kind"in e)||e.kind==="expression"}function qt(e){return"kind"in e&&e.kind==="symbol"}function ze(e){return"kind"in e&&e.kind==="matchfix"}function Zn(e){return"kind"in e&&e.kind==="infix"}function rn(e){return"kind"in e&&e.kind==="prefix"}function Xn(e){return"kind"in e&&e.kind==="postfix"}function Vt(e){return"kind"in e&&e.kind==="environment"}function Rr(e){let n=[];for(let t=0;t<e.length;t++){let i=e.charCodeAt(t);if(i>=55296&&i<=56319){let r=e.charCodeAt(t+1);if(r>=56320&&r<=57343){let s=i-55296,o=r-56320;i=2**16+s*2**10+o,t++}}n.push(i)}return n}var sn=8205,Gt=[127462,127487];function Ut(e){return e===sn||e===65038||e===65039||e>=127995&&e<=128e3||e>=129456&&e<=129460||e>=917536&&e<=917632}function Lr(e){return e>=Gt[0]&&e<=Gt[1]}function jt(e){if(/^[\u0020-\u00FF]*$/.test(e))return e;let n=[],t=Rr(e),i=0;for(;i<t.length;){let r=t[i++],s=t[i];if(s===sn){let o=i-1;for(i+=2;t[i]===sn;)i+=2;n.push(String.fromCodePoint(...t.slice(o,2*i-o+1)))}else if(Ut(s)){let o=i-1;for(;Ut(t[i]);)i+=t[i]===sn?2:1;n.push(String.fromCodePoint(...t.slice(o,2*i-o-1)))}else Lr(r)?(i+=1,n.push(String.fromCodePoint(...t.slice(i-2,2)))):n.push(String.fromCodePoint(r))}return n}var Br={"\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u207B":"-","\u2071":"i",\u207F:"n"},Or={"\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u208B":"-"},Qn=class{s;pos;obeyspaces=!1;constructor(n){n=n.replace(/[\u200E\u200F\u2066-\u2069\u202A-\u202E]/g,""),n=n.replace(/\u2212/g,"-"),n=n.replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹⁻ⁱⁿ]+/g,t=>`^{${Array.from(t).map(r=>Br[r]).join("")}}`),n=n.replace(/[₀₁₂₃₄₅₆₇₈₉₋]+/g,t=>`_{${Array.from(t).map(r=>Or[r]).join("")}}`),this.s=jt(n),this.pos=0}end(){return this.pos>=this.s.length}get(){return this.pos<this.s.length?this.s[this.pos++]:""}peek(){return this.s[this.pos]}match(n){let t;return typeof this.s=="string"?t=n.exec(this.s.slice(this.pos)):t=n.exec(this.s.slice(this.pos).join("")),t?.[0]?(this.pos+=t[0].length,t[0]):null}next(){if(this.end())return null;if(!this.obeyspaces&&this.match(/^[ \f\n\r\t\v\xA0\u2028\u2029]+/))return"<space>";if(this.obeyspaces&&this.match(/^[ \f\n\r\t\v\xA0\u2028\u2029]/))return"<space>";let n=this.get();if(n==="\\"){if(!this.end()){let t=this.match(/^[a-zA-Z]+/);if(t)this.match(/^[ \f\n\r\t\v\xA0\u2028\u2029]*/);else if(t=this.get(),t===" ")return"<space>";return"\\"+t}}else{if(n==="{")return"<{>";if(n==="}")return"<}>";if(n==="^"){if(this.peek()==="^"){this.get();let t=this.match(/^(\^(\^(\^(\^[0-9a-f])?[0-9a-f])?[0-9a-f])?[0-9a-f])?[0-9a-f][0-9a-f]/);if(t)return String.fromCodePoint(parseInt(t.slice(t.lastIndexOf("^")+1),16))}return n}else if(n==="#"){if(!this.end()){let t=!1;if(/[0-9?]/.test(this.peek())&&(t=!0,this.pos+1<this.s.length)){let i=this.s[this.pos+1];t=/[^0-9A-Za-z]/.test(i)}return t?"#"+this.get():"#"}}else if(n==="$")return this.peek()==="$"?(this.get(),"<$$>"):"<$>"}return n}};function Fr(e,n){let t=e.next();if(!t)return[];let i=[];if(t!=="\\relax"){if(t==="\\noexpand")t=e.next(),t&&i.push(t);else if(t==="\\obeyspaces")e.obeyspaces=!0;else if(t==="\\space"||t==="~")i.push("<space>");else if(t==="\\bgroup")i.push("<{>");else if(t==="\\egroup")i.push("<}>");else if(t==="\\string")t=e.next(),t&&(t[0]==="\\"?Array.from(t).forEach(r=>i.push(r==="\\"?"\\backslash":r)):t==="<{>"?i.push("\\{"):t==="<space>"?i.push("~"):t==="<}>"&&i.push("\\}"));else if(t==="\\csname"){for(;e.peek()==="<space>";)e.next();let r="",s=!1,o=[];do{if(o.length===0)if(/^#[0-9?]$/.test(e.peek())){let a=e.get().slice(1);o=F(n?.[a]??n?.["?"]??"\\placeholder{}",n),t=o[0]}else t=e.next(),o=t?[t]:[];s=o.length===0,!s&&t==="\\endcsname"&&(s=!0,o.shift()),s||(s=t==="<$>"||t==="<$$>"||t==="<{>"||t==="<}>"||!!t&&t.length>1&&t[0]==="\\"),s||(r+=o.shift())}while(!s);r&&i.push("\\"+r),i=i.concat(o)}else if(t!=="\\endcsname")if(t.length>1&&t[0]==="#"){let r=t.slice(1);i=i.concat(F(n?.[r]??n?.["?"]??"\\placeholder{}",n))}else i.push(t)}return i}function F(e,n=[]){let t=e.toString().split(/\r?\n/),i="",r="";for(let a of t){i+=r,r=" ";let l=a.match(/((?:\\%)|[^%])*/);l!==null&&(i+=l[0])}let s=new Qn(i),o=[];do o.push(...Fr(s,n));while(!s.end());return o}function on(e){return F(e).length}function h(e){let n="",t="";for(let i of e)i!=null&&(typeof i=="string"&&(/[a-zA-Z]/.test(i[0])&&(t+=n),/\\[a-zA-Z]+\*?$/.test(i)?n=" ":n=""),t+=i.toString());return t}function ce(e,n,t){return n.includes(e)&&(n=`{${n}}`),/^[0-9]$/.test(t)?`${n}${e}${t}`:`${n}${e}{${t}}`}function j(e){let n=[];if(Array.isArray(e))for(let i of e)Array.isArray(i)?n=[...n,...i]:n.push(i);else n=[e];return h(n.map(i=>({"<space>":" ","<$$>":"$$","<$>":"$","<{>":"{","<}>":"}"})[i]??i))}var pe=[{latexTrigger:["\\not","<"],kind:"infix",associativity:"any",precedence:246,parse:"NotLess"},{name:"NotLess",latexTrigger:["\\nless"],kind:"infix",associativity:"any",precedence:246},{latexTrigger:["<"],kind:"infix",associativity:"any",precedence:245,parse:"Less"},{name:"Less",latexTrigger:["\\lt"],kind:"infix",associativity:"any",precedence:245},{latexTrigger:["<","="],kind:"infix",associativity:"any",precedence:241,parse:"LessEqual"},{name:"LessEqual",latexTrigger:["\\le"],kind:"infix",associativity:"any",precedence:241},{latexTrigger:["\\leq"],kind:"infix",associativity:"any",precedence:241,parse:"LessEqual"},{latexTrigger:["\\leqslant"],kind:"infix",associativity:"any",precedence:S+5,parse:"LessEqual"},{name:"LessNotEqual",latexTrigger:["\\lneqq"],kind:"infix",associativity:"any",precedence:S},{name:"NotLessNotEqual",latexTrigger:["\\nleqq"],kind:"infix",associativity:"any",precedence:S},{name:"LessOverEqual",latexTrigger:["\\leqq"],kind:"infix",associativity:"any",precedence:S+5},{name:"GreaterOverEqual",latexTrigger:["\\geqq"],kind:"infix",associativity:"any",precedence:S+5,parse:"GreaterEqual"},{name:"Equal",latexTrigger:["="],kind:"infix",associativity:"right",precedence:S},{latexTrigger:["*","="],kind:"infix",associativity:"right",precedence:S,parse:"StarEqual"},{name:"StarEqual",latexTrigger:["\\star","="],kind:"infix",associativity:"right",precedence:S},{name:"PlusEqual",latexTrigger:["+","="],kind:"infix",associativity:"right",precedence:S},{name:"MinusEqual",latexTrigger:["-","="],kind:"infix",associativity:"right",precedence:S},{name:"SlashEqual",latexTrigger:["/","="],kind:"infix",associativity:"right",precedence:S},{name:"EqualEqual",latexTrigger:["=","="],kind:"infix",associativity:"right",precedence:S},{name:"EqualEqualEqual",latexTrigger:["=","=","="],kind:"infix",associativity:"right",precedence:S+5},{name:"TildeFullEqual",latexTrigger:["\\cong"],kind:"infix",associativity:"right",precedence:S},{name:"NotTildeFullEqual",latexTrigger:["\\ncong"],kind:"infix",associativity:"right",precedence:S},{name:"Approx",latexTrigger:["\\approx"],kind:"infix",associativity:"right",precedence:247},{name:"NotApprox",latexTrigger:["\\not","\\approx"],kind:"infix",associativity:"right",precedence:247},{name:"ApproxEqual",latexTrigger:["\\approxeq"],kind:"infix",associativity:"right",precedence:S},{name:"NotApproxEqual",latexTrigger:["\\not","\\approxeq"],kind:"infix",associativity:"right",precedence:250},{name:"NotEqual",latexTrigger:["\\ne"],kind:"infix",associativity:"right",precedence:255},{name:"Unequal",latexTrigger:["!","="],kind:"infix",associativity:"right",precedence:S},{name:"GreaterEqual",latexTrigger:["\\ge"],kind:"infix",associativity:"right",precedence:242},{latexTrigger:["\\geq"],kind:"infix",associativity:"right",precedence:242,parse:"GreaterEqual"},{latexTrigger:[">","="],kind:"infix",associativity:"right",precedence:243,parse:"GreaterEqual"},{latexTrigger:["\\geqslant"],kind:"infix",associativity:"right",precedence:S+5,parse:"GreaterEqual"},{name:"GreaterNotEqual",latexTrigger:["\\gneqq"],kind:"infix",associativity:"right",precedence:S},{name:"NotGreaterNotEqual",latexTrigger:["\\ngeqq"],kind:"infix",associativity:"right",precedence:S},{latexTrigger:[">"],kind:"infix",associativity:"right",precedence:245,parse:"Greater"},{name:"Greater",latexTrigger:["\\gt"],kind:"infix",associativity:"right",precedence:245},{name:"NotGreater",latexTrigger:["\\ngtr"],kind:"infix",associativity:"right",precedence:244},{latexTrigger:["\\not",">"],kind:"infix",associativity:"right",precedence:244,parse:"NotGreater"},{name:"RingEqual",latexTrigger:["\\circeq"],kind:"infix",associativity:"right",precedence:S},{name:"TriangleEqual",latexTrigger:["\\triangleq"],kind:"infix",associativity:"right",precedence:S},{name:"DotEqual",latexTrigger:["\\doteq"],kind:"infix",associativity:"right",precedence:S+5},{name:"DotEqualDot",latexTrigger:["\\doteqdot"],kind:"infix",associativity:"right",precedence:S+5},{name:"FallingDotEqual",latexTrigger:["\\fallingdotseq"],kind:"infix",associativity:"right",precedence:S+5},{name:"RisingDotEqual",latexTrigger:["\\fallingdotseq"],kind:"infix",associativity:"right",precedence:S+5},{name:"QuestionEqual",latexTrigger:["\\questeq"],kind:"infix",associativity:"right",precedence:S},{name:"MuchLess",latexTrigger:["\\ll"],kind:"infix",associativity:"right",precedence:S},{name:"MuchGreater",latexTrigger:["\\gg"],kind:"infix",associativity:"right",precedence:S},{name:"Precedes",latexTrigger:["\\prec"],kind:"infix",associativity:"right",precedence:S},{name:"Succeeds",latexTrigger:["\\succ"],kind:"infix",associativity:"right",precedence:S},{name:"PrecedesEqual",latexTrigger:["\\preccurlyeq"],kind:"infix",associativity:"right",precedence:S},{name:"SucceedsEqual",latexTrigger:["\\curlyeqprec"],kind:"infix",associativity:"right",precedence:S},{name:"NotPrecedes",latexTrigger:["\\nprec"],kind:"infix",associativity:"right",precedence:S},{name:"NotSucceeds",latexTrigger:["\\nsucc"],kind:"infix",associativity:"right",precedence:S},{name:"Between",latexTrigger:["\\between"],kind:"infix",associativity:"right",precedence:S+5}];function Kn(e){return typeof e!="string"?!1:["Less","LessEqual","Greater","GreaterEqual"].includes(e)}function et(e){return typeof e!="string"?!1:["Equal","NotEqual"].includes(e)}var Me=["number","finite_number","complex","finite_complex","imaginary","real","finite_real","rational","finite_rational","integer","finite_integer","non_finite_number"],nt=["indexed_collection","list","tuple"],an=[...nt,"collection","set","record","dictionary"],ln=["scalar",...Me,"boolean","string"],tt=["value","color",...an,...ln],it=["expression","symbol","function",...tt],fe=["any","unknown","nothing","never","error",...it];function rt(e){return typeof e=="string"?fe.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 Wt=3,Ht=1,Zt=2,Cr=4,$r=5,zr=6,qr=7,Vr=8,Gr=9,Ur=10,jr=11;function L(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=`!${L(e.type,Wt)}`;break;case"union":t=e.types.map(l=>L(l,Ht)).join(" | ");break;case"intersection":t=e.types.map(l=>L(l,Zt)).join(" & ");break;case"expression":t=`expression<${Yt(e.operator)}>`;break;case"symbol":t=`symbol<${Yt(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"&&Me.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<${L(e.elements)}>`:t=`vector<${L(e.elements)}^${e.dimensions[0]}>`;else if(e.dimensions.length===2){let l=e.dimensions;e.elements==="number"?l[0]<0&&l[1]<0?t="matrix":t=`matrix<${l[0]}x${l[1]}>`:l[0]<0&&l[1]<0?t=`matrix<${L(e.elements)}>`:t=`matrix<${L(e.elements)}^(${l[0]}x${l[1]})>`}}if(!t){let l=e.dimensions?e.dimensions.length===1?`^${e.dimensions[0].toString()}`:`^(${e.dimensions.join("x")})`:"";t=`list<${L(e.elements)}${l}>`}break;case"record":t=`record<${Object.entries(e.elements).map(([l,u])=>`${l}: ${L(u)}`).join(", ")}>`;break;case"dictionary":t=`dictionary<${L(e.values)}>`;break;case"set":t=`set<${L(e.elements)}>`;break;case"collection":t=`collection<${L(e.elements)}>`;break;case"indexed_collection":t=`indexed_collection<${L(e.elements)}>`;break;case"tuple":if(e.elements.length===0)t="tuple";else if(e.elements.length===1){let[l]=e.elements;t=`tuple<${De(l)}>`}else t="tuple<"+e.elements.map(l=>De(l)).join(", ")+">";break;case"signature":let r=e.args?e.args.map(l=>De(l)).join(", "):"",s=e.optArgs?e.optArgs.map(l=>De(l)+"?").join(", "):"",o=e.variadicArg?e.variadicMin===0?`${De(e.variadicArg)}*`:`${De(e.variadicArg)}+`:"";t=`(${[r,s,o].filter(l=>l).join(", ")}) -> ${L(e.result)}`;break;default:t="error"}return n>0&&n>Yr(e.kind)?`(${t})`:t}function De(e){return e.name?`${e.name}: ${L(e.type)}`:L(e.type)}function Yt(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`\`${e}\``}function Yr(e){switch(e){case"negation":return Wt;case"union":return Ht;case"intersection":return Zt;case"list":return Cr;case"record":return $r;case"dictionary":return zr;case"set":return qr;case"collection":case"indexed_collection":return Vr;case"tuple":return Gr;case"signature":return Ur;case"value":return jr;default:return 0}}var un=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 cn=class{lexer;typeResolver;current;constructor(n,t){this.lexer=new un(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,l=" ".repeat(Math.max(0,a-1))+"^",u=["","Invalid type",`| ${o}`,`| ${l}`,"|",`| ${t}`];throw i&&u.push(`| ${i}`),u.push(""),new Error(u.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(fe.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 Xt(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 st=class{typeResolver;constructor(n){this.typeResolver=n??{forward:()=>{},resolve:()=>{},get names(){return[]}}}buildType(n){return Xt(n,this)}visitFunctionSignature(n){let t=[],i=[],r,s;for(let l of n.arguments){let u=this.buildNamedElement(l.element);switch(l.modifier){case"optional":i.push(u);break;case"variadic_zero":r=u,s=0;break;case"variadic_one":r=u,s=1;break;default:t.push(u);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 Qt(e,n){return new st(n).buildType(e)}function Pe(e,n){if(e!==void 0){if(rt(e))return e;if(typeof e=="string")try{let i=new cn(e,{typeResolver:n}).parseType();return Qt(i,n)}catch(t){throw new Error(`Failed to parse type "${e}": ${t instanceof Error?t.message:String(t)}`)}}}var Wr={number:Me,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_number"],finite_integer:[],any:fe,unknown:[],nothing:[],never:[],error:[],value:tt,scalar:ln,collection:an,indexed_collection:nt,list:[],set:[],tuple:[],record:[],dictionary:[],function:[],symbol:[],boolean:[],string:[],color:[],expression:it};function qe(e,n){return n==="any"||e==="never"?!0:e==="unknown"||n==="unknown"?!1:e===n?!0:Wr[n].includes(e)}function N(e,n){if(typeof e=="string"&&!fe.includes(e)&&(e=Pe(e)),typeof n=="string"&&!fe.includes(n)&&(n=Pe(n)),n==="any")return!0;if(n==="never")return!1;if(n==="error")return e==="error";if(n==="nothing")return e==="nothing";if(e==="nothing")return!1;if(n==="unknown")return!0;if(e==="unknown")return!1;if(typeof n=="string")return typeof e=="string"?qe(e,n):e.kind==="value"?typeof e.value=="boolean"?n==="boolean":typeof e.value=="number"?Number.isInteger(e.value)?qe("integer",n):qe("number",n):typeof e.value=="boolean"?qe("boolean",n):typeof e.value=="string"?qe("string",n):!1:e.kind==="union"?e.types.every(t=>N(t,n)):e.kind==="intersection"?e.types.some(t=>N(t,n)):e.kind==="negation"?!N(e.type,n):e.kind==="numeric"?!!N(e.type,n):n==="number"?Kt(e):n==="symbol"?ot(e):n==="expression"?Hr(e):n==="function"?ri(e):n==="scalar"?ei(e):n==="value"?ii(e):n==="indexed_collection"?ti(e):n==="collection"?ni(e):n==="tuple"?e.kind==="tuple":n==="list"?e.kind==="list":n==="set"?e.kind==="set":n==="record"?e.kind==="record":n==="dictionary"?e.kind==="dictionary":!1;if(n.kind==="union")return typeof e!="string"&&e.kind==="union"?e.types.every(t=>n.types.some(i=>N(t,i))):n.types.some(t=>N(e,t));if(n.kind==="expression"){if(e==="symbol")return!0;if(typeof e=="string")return!1;if(e.kind==="expression")return n.operator==="Symbol"?ot(e):e.operator===n.operator;if(e.kind==="symbol")return!0}if(typeof e=="string")return!1;if(n.kind==="reference"){if(e.kind==="reference")return e.name===n.name;if(n.alias===!0&&n.def)return N(e,n.def)}if(e.kind==="union")return e.types.some(t=>N(t,n));if(e.kind==="intersection"&&n.kind==="intersection")return n.types.every(t=>e.types.some(i=>N(i,t)));if(e.kind==="intersection")return e.types.every(t=>N(t,n));if(n.kind==="intersection")return n.types.every(t=>N(e,t));if(e.kind==="signature"&&n.kind==="signature"){if(!N(e.result,n.result))return!1;if(e.optArgs||e.variadicArg){if(n.args){if(!e.args||e.args.length!==n.args.length)return!1;for(let t=0;t<n.args.length;t++)if(!N(n.args[t].type,e.args[t].type))return!1}else if(e.args)return!1;if(n.optArgs){if(!e.optArgs||e.optArgs.length!==n.optArgs.length)return!1;for(let t=0;t<e.optArgs.length;t++)if(!N(n.optArgs[t].type,e.optArgs[t].type))return!1}else if(e.optArgs)return!1;if(n.variadicArg){if(!e.variadicArg||e.variadicMin!=n.variadicMin||!N(n.variadicArg.type,e.variadicArg.type))return!1}else if(e.variadicArg)return!1}else{if(n.args&&!e.args)return!1;let t=0;if(n.args){if(e.args.length<n.args.length)return!1;for(;t<n.args.length;){if(!N(n.args[t].type,e.args[t].type))return!1;t+=1}}if(n.optArgs){if(t>=e.args.length)return!0;for(let i=0;i<n.optArgs.length;i++){if(!N(n.optArgs[i].type,e.args[t].type))return!1;if(t+=1,t>=e.args.length)return!0}}if(n.variadicArg){if(t>=e.args.length&&n.variadicMin===0)return!0;if(n.variadicMin>0&&t+n.variadicMin>e.args.length)return!1;for(;t<e.args.length;){if(!N(n.variadicArg.type,e.args[t].type))return!1;t+=1}}}return!0}if(e.kind==="record"&&n.kind==="record"){for(let t of Object.keys(n.elements))if(!(t in e.elements)||!N(e.elements[t],n.elements[t]))return!1;return!0}if(e.kind==="dictionary"&&n.kind==="dictionary")return N(e.values,n.values);if(n.kind==="indexed_collection")return e.kind==="indexed_collection"||e.kind==="list"?N(e.elements,n.elements):e.kind==="tuple"?e.elements.every(t=>N(t.type,n.elements)):!1;if(n.kind==="collection"){if(e.kind==="collection"||e.kind==="indexed_collection"||e.kind==="list")return N(e.elements,n.elements);if(e.kind==="tuple")return e.elements.every(t=>N(t.type,n.elements));if(e.kind==="set")return N(e.elements,n.elements);if(e.kind==="dictionary")return N({kind:"tuple",elements:[{type:"string"},{type:e.values}]},n.elements);if(e.kind==="record")return N({kind:"tuple",elements:[{type:"string"},{type:Ve(...Object.values(e.elements))}]},n.elements)}if(e.kind==="tuple"&&n.kind==="tuple"){if(e.elements.length!==n.elements.length)return!1;for(let t=0;t<e.elements.length;t++){let i=e.elements[t],r=n.elements[t];if(!N(i.type,r.type)||i.name!==r.name)return!1}return!0}if(n.kind==="list"&&e.kind==="list"){if(!N(e.elements,n.elements))return!1;if(n.dimensions){if(!e.dimensions||e.dimensions.length!==n.dimensions.length)return!1;for(let t=0;t<e.dimensions.length;t++)if(n.dimensions[t]!==-1&&e.dimensions[t]!==n.dimensions[t])return!1}return!0}if(e.kind==="symbol"&&n.kind==="symbol")return e.name===n.name;if(e.kind==="numeric"&&n.kind==="numeric")return!(!N(e.type,n.type)||(e.lower??-1/0)<(n.lower??-1/0)||(e.upper??1/0)>(n.upper??1/0));if(n.kind==="set"&&e.kind==="set")return!!N(e.elements,n.elements);if(e.kind==="negation"&&n.kind==="negation")return N(e.type,n.type);if(n.kind==="negation")return!N(e,n.type);if(n.kind==="value"&&e.kind==="value")return n.value===e.value;if(e.kind==="value"){if(typeof e.value=="boolean")return N("boolean",n);if(typeof e.value=="number")return Number.isInteger(e.value)?N("integer",n):N("real",n);if(typeof e.value=="string")return N("string",n)}return!1}function Kt(e){return typeof e=="string"?Me.includes(e):e.kind==="value"?typeof e.value=="number":e.kind==="numeric"}function ei(e){return Kt(e)?!0:typeof e=="string"?ln.includes(e):e.kind==="value"?["string","boolean","number"].includes(typeof e.value):!1}function ni(e){return ti(e)?!0:typeof e=="string"?an.includes(e):["collection","set","record","dictionary"].includes(e.kind)}function ti(e){return typeof e=="string"?!1:["indexed_collection","list","tuple"].includes(e.kind)}function ii(e){return ei(e)||ni(e)}function ri(e){return e==="function"||typeof e!="string"&&e.kind==="signature"}function Hr(e){return typeof e=="string"&&["expression","symbol","function"].includes(e)||ii(e)||ri(e)||ot(e)?!0:typeof e=="string"?!1:e.kind==="expression"}function ot(e){return e==="symbol"?!0:typeof e=="string"?!1:e.kind==="symbol"?!0:e.kind==="expression"?e.operator==="Symbol":!1}function Zr(e,n){return e===n?e:e==="nothing"||n==="nothing"?"nothing":e==="any"?n:n==="any"?e:e==="never"?n:n==="never"?e:e==="unknown"?n:n==="unknown"||N(e,n)?e:N(n,e)?n:si(e,n)}function Xr(e,n){if(e===n)return e;if(e==="any"||n==="any")return"any";if(e==="never")return n;if(n==="never")return e;if(e==="unknown")return n;if(n==="unknown")return e;if(e==="nothing")return n;if(n==="nothing")return e;if(N(e,n))return n;if(N(n,e))return e;let t=si(e,n);return Qr.has(t)?Kr(e,n):t}var Qr=new Set(["scalar","value","function","expression","collection","indexed_collection","list","set","tuple","record","dictionary","map","any"]);function