@cortex-js/compute-engine 0.53.0 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compute-engine.esm.js +1684 -333
- package/dist/compute-engine.min.esm.js +527 -55
- package/dist/compute-engine.min.umd.cjs +1035 -0
- package/dist/{compute-engine.umd.js → compute-engine.umd.cjs} +1684 -333
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/{math-json.min.umd.js → math-json.min.umd.cjs} +2 -2
- package/dist/{math-json.umd.js → math-json.umd.cjs} +2 -2
- package/dist/types/common/ansi-codes.d.ts +1 -1
- package/dist/types/common/configuration-change.d.ts +1 -1
- package/dist/types/common/fuzzy-string-match.d.ts +1 -1
- package/dist/types/common/grapheme-splitter.d.ts +1 -1
- package/dist/types/common/interruptible.d.ts +1 -1
- package/dist/types/common/one-of.d.ts +1 -1
- package/dist/types/common/signals.d.ts +1 -1
- package/dist/types/common/type/ast-nodes.d.ts +1 -1
- package/dist/types/common/type/boxed-type.d.ts +1 -1
- package/dist/types/common/type/lexer.d.ts +1 -1
- package/dist/types/common/type/parse.d.ts +1 -1
- package/dist/types/common/type/parser.d.ts +1 -1
- package/dist/types/common/type/primitive.d.ts +1 -1
- package/dist/types/common/type/reduce.d.ts +1 -1
- package/dist/types/common/type/serialize.d.ts +1 -1
- package/dist/types/common/type/subtype.d.ts +1 -1
- package/dist/types/common/type/type-builder.d.ts +1 -1
- package/dist/types/common/type/types.d.ts +1 -1
- package/dist/types/common/type/utils.d.ts +1 -1
- package/dist/types/common/utils.d.ts +1 -1
- package/dist/types/compute-engine/assume.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +14 -3
- package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +3 -3
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +3 -3
- package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +3 -3
- package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/factor.d.ts +37 -4
- package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/match.d.ts +2 -2
- package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
- package/dist/types/compute-engine/collection-utils.d.ts +1 -1
- package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
- package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
- package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/gpu-target.d.ts +68 -1
- package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/types.d.ts +9 -1
- package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
- package/dist/types/compute-engine/cost-function.d.ts +1 -1
- package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
- package/dist/types/compute-engine/engine-cache.d.ts +1 -1
- package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
- package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
- package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
- package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
- package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
- package/dist/types/compute-engine/engine-latex-dictionary-state.d.ts +1 -1
- package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
- package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
- package/dist/types/compute-engine/engine-parse-entrypoint.d.ts +1 -1
- package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
- package/dist/types/compute-engine/engine-scope.d.ts +1 -1
- package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
- package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
- package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
- package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
- package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/free-functions.d.ts +1 -1
- package/dist/types/compute-engine/function-utils.d.ts +1 -1
- package/dist/types/compute-engine/global-types.d.ts +1 -1
- package/dist/types/compute-engine/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
- package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
- package/dist/types/compute-engine/interval/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
- package/dist/types/compute-engine/interval/types.d.ts +1 -1
- package/dist/types/compute-engine/interval/util.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/calculus.d.ts +1 -1
- package/dist/types/compute-engine/library/collections.d.ts +1 -1
- package/dist/types/compute-engine/library/colors.d.ts +1 -1
- package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
- package/dist/types/compute-engine/library/complex.d.ts +1 -1
- package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
- package/dist/types/compute-engine/library/core.d.ts +1 -1
- package/dist/types/compute-engine/library/fractals.d.ts +1 -1
- package/dist/types/compute-engine/library/library.d.ts +1 -1
- package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
- package/dist/types/compute-engine/library/logic.d.ts +1 -1
- package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
- package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
- package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
- package/dist/types/compute-engine/library/sets.d.ts +1 -1
- package/dist/types/compute-engine/library/statistics.d.ts +1 -1
- package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
- package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/library/units.d.ts +1 -1
- package/dist/types/compute-engine/library/utils.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
- package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
- package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +2 -2
- package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
- package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
- package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
- package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
- package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
- package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
- package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
- package/dist/types/compute-engine/numerics/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/oeis.d.ts +1 -1
- package/dist/types/compute-engine/sequence.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
- package/dist/types/compute-engine/types-definitions.d.ts +1 -1
- package/dist/types/compute-engine/types-engine.d.ts +1 -1
- package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-expression.d.ts +61 -2
- package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-serialization.d.ts +12 -1
- package/dist/types/compute-engine/types-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types.d.ts +1 -1
- package/dist/types/compute-engine.d.ts +1 -1
- package/dist/types/math-json/symbols.d.ts +1 -1
- package/dist/types/math-json/types.d.ts +1 -1
- package/dist/types/math-json/utils.d.ts +1 -1
- package/dist/types/math-json.d.ts +2 -2
- package/package.json +3 -3
- package/dist/compute-engine.min.umd.js +0 -563
|
@@ -0,0 +1,1035 @@
|
|
|
1
|
+
/** Compute Engine 0.54.0 */
|
|
2
|
+
(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.ComputeEngine = {}));})(this, (function (exports) { 'use strict';
|
|
3
|
+
var ComputeEngine=(()=>{var Hl=Object.defineProperty;var zE=Object.getOwnPropertyDescriptor;var UE=Object.getOwnPropertyNames;var jE=Object.prototype.hasOwnProperty;var GE=(e,n)=>{for(var t in n)Hl(e,t,{get:n[t],enumerable:!0})},ZE=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of UE(n))!jE.call(e,r)&&r!==t&&Hl(e,r,{get:()=>n[r],enumerable:!(i=zE(n,r))||i.enumerable});return e};var HE=e=>ZE(Hl({},"__esModule",{value:!0}),e);var vw={};GE(vw,{BaseCompiler:()=>C,ComputeEngine:()=>Vr,GLSLTarget:()=>Fr,GPUShaderTarget:()=>Yi,IntervalJavaScriptTarget:()=>qr,JavaScriptTarget:()=>Lr,N:()=>nd,PythonTarget:()=>ba,WGSLTarget:()=>Yo,assign:()=>id,compile:()=>ud,declare:()=>td,evaluate:()=>ed,expand:()=>rd,expandAll:()=>sd,factor:()=>ad,getDefaultEngine:()=>er,isBoxedExpression:()=>og,isBoxedFunction:()=>ug,isBoxedNumber:()=>sg,isBoxedString:()=>lg,isBoxedSymbol:()=>ag,isBoxedTensor:()=>cg,isCollection:()=>pg,isDictionary:()=>fg,isExpression:()=>Pa,isFunction:()=>m,isIndexedCollection:()=>mg,isNumber:()=>E,isString:()=>q,isSymbol:()=>_,isTensor:()=>Mi,numericValue:()=>ce,parse:()=>Xm,simplify:()=>Km,solve:()=>od,version:()=>Ew});var bn=Math.cosh||function(e){return Math.abs(e)<1e-9?1-e:(Math.exp(e)+Math.exp(-e))*.5},et=Math.sinh||function(e){return Math.abs(e)<1e-9?e:(Math.exp(e)-Math.exp(-e))*.5},WE=function(e){var n=Math.PI/4;if(-n>e||e>n)return Math.cos(e)-1;var t=e*e;return t*(t*(t*(t*(t*(t*(t*(t/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-1/2)},YE=function(e,n){var t=Math.abs(e),i=Math.abs(n);return t<3e3&&i<3e3?Math.sqrt(t*t+i*i):(t<i?(t=i,i=e/n):i=n/e,t*Math.sqrt(1+i*i))},Jr=function(){throw SyntaxError("Invalid Param")};function Wl(e,n){var t=Math.abs(e),i=Math.abs(n);return e===0?Math.log(i):n===0?Math.log(t):t<3e3&&i<3e3?Math.log(e*e+n*n)*.5:(e=e/2,n=n/2,.5*Math.log(e*e+n*n)+Math.LN2)}var QE=function(e,n){var t={re:0,im:0};if(e==null)t.re=t.im=0;else if(n!==void 0)t.re=e,t.im=n;else switch(typeof e){case"object":if("im"in e&&"re"in e)t.re=e.re,t.im=e.im;else if("abs"in e&&"arg"in e){if(!Number.isFinite(e.abs)&&Number.isFinite(e.arg))return z.INFINITY;t.re=e.abs*Math.cos(e.arg),t.im=e.abs*Math.sin(e.arg)}else if("r"in e&&"phi"in e){if(!Number.isFinite(e.r)&&Number.isFinite(e.phi))return z.INFINITY;t.re=e.r*Math.cos(e.phi),t.im=e.r*Math.sin(e.phi)}else e.length===2?(t.re=e[0],t.im=e[1]):Jr();break;case"string":t.im=t.re=0;var i=e.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),r=1,o=0;i===null&&Jr();for(var s=0;s<i.length;s++){var a=i[s];a===" "||a===" "||a===`
|
|
4
|
+
`||(a==="+"?r++:a==="-"?o++:a==="i"||a==="I"?(r+o===0&&Jr(),i[s+1]!==" "&&!isNaN(Number(i[s+1]))?(t.im+=parseFloat((o%2?"-":"")+i[s+1]),s++):t.im+=parseFloat((o%2?"-":"")+"1"),r=o=0):((r+o===0||isNaN(Number(a)))&&Jr(),i[s+1]==="i"||i[s+1]==="I"?(t.im+=parseFloat((o%2?"-":"")+a),s++):t.re+=parseFloat((o%2?"-":"")+a),r=o=0))}r+o>0&&Jr();break;case"number":t.im=0,t.re=e;break;default:Jr()}return isNaN(t.re)||isNaN(t.im),t},z=class e{constructor(n,t){this.re=0,this.im=0;var i=QE(n,t);this.re=i.re,this.im=i.im}sign(){var n=this.abs();return new e(this.re/n,this.im/n)}add(n,t){var i=new e(n,t);return this.isInfinite()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:new e(this.re+i.re,this.im+i.im)}sub(n,t){var i=new e(n,t);return this.isInfinite()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:new e(this.re-i.re,this.im-i.im)}mul(n,t){var i=new e(n,t);return this.isInfinite()&&i.isZero()||this.isZero()&&i.isInfinite()?e.NAN:this.isInfinite()||i.isInfinite()?e.INFINITY:i.im===0&&this.im===0?new e(this.re*i.re,0):new e(this.re*i.re-this.im*i.im,this.re*i.im+this.im*i.re)}div(n,t){var i=new e(n,t);if(this.isZero()&&i.isZero()||this.isInfinite()&&i.isInfinite())return e.NAN;if(this.isInfinite()||i.isZero())return e.INFINITY;if(this.isZero()||i.isInfinite())return e.ZERO;n=this.re,t=this.im;var r=i.re,o=i.im,s,a;return o===0?new e(n/r,t/r):Math.abs(r)<Math.abs(o)?(a=r/o,s=r*a+o,new e((n*a+t)/s,(t*a-n)/s)):(a=o/r,s=o*a+r,new e((n+t*a)/s,(t-n*a)/s))}pow(n,t){var i=new e(n,t);if(n=this.re,t=this.im,i.isZero())return e.ONE;if(i.im===0){if(t===0&&n>0)return new e(Math.pow(n,i.re),0);if(n===0)switch((i.re%4+4)%4){case 0:return new e(Math.pow(t,i.re),0);case 1:return new e(0,Math.pow(t,i.re));case 2:return new e(-Math.pow(t,i.re),0);case 3:return new e(0,-Math.pow(t,i.re))}}if(n===0&&t===0&&i.re>0&&i.im>=0)return e.ZERO;var r=Math.atan2(t,n),o=Wl(n,t);return n=Math.exp(i.re*o-i.im*r),t=i.im*o+i.re*r,new e(n*Math.cos(t),n*Math.sin(t))}sqrt(){var n=this.re,t=this.im,i=this.abs(),r,o;if(n>=0){if(t===0)return new e(Math.sqrt(n),0);r=.5*Math.sqrt(2*(i+n))}else r=Math.abs(t)/Math.sqrt(2*(i-n));return n<=0?o=.5*Math.sqrt(2*(i-n)):o=Math.abs(t)/Math.sqrt(2*(i+n)),new e(r,t<0?-o:o)}exp(){var n=Math.exp(this.re);return this.im,new e(n*Math.cos(this.im),n*Math.sin(this.im))}expm1(){var n=this.re,t=this.im;return new e(Math.expm1(n)*Math.cos(t)+WE(t),Math.exp(n)*Math.sin(t))}log(){var n=this.re,t=this.im;return t===0&&n>0,new e(Wl(n,t),Math.atan2(t,n))}abs(){return YE(this.re,this.im)}arg(){return Math.atan2(this.im,this.re)}sin(){var n=this.re,t=this.im;return new e(Math.sin(n)*bn(t),Math.cos(n)*et(t))}cos(){var n=this.re,t=this.im;return new e(Math.cos(n)*bn(t),-Math.sin(n)*et(t))}tan(){var n=2*this.re,t=2*this.im,i=Math.cos(n)+bn(t);return new e(Math.sin(n)/i,et(t)/i)}cot(){var n=2*this.re,t=2*this.im,i=Math.cos(n)-bn(t);return new e(-Math.sin(n)/i,et(t)/i)}sec(){var n=this.re,t=this.im,i=.5*bn(2*t)+.5*Math.cos(2*n);return new e(Math.cos(n)*bn(t)/i,Math.sin(n)*et(t)/i)}csc(){var n=this.re,t=this.im,i=.5*bn(2*t)-.5*Math.cos(2*n);return new e(Math.sin(n)*bn(t)/i,-Math.cos(n)*et(t)/i)}asin(){var n=this.re,t=this.im,i=new e(t*t-n*n+1,-2*n*t).sqrt(),r=new e(i.re-t,i.im+n).log();return new e(r.im,-r.re)}acos(){var n=this.re,t=this.im,i=new e(t*t-n*n+1,-2*n*t).sqrt(),r=new e(i.re-t,i.im+n).log();return new e(Math.PI/2-r.im,r.re)}atan(){var n=this.re,t=this.im;if(n===0){if(t===1)return new e(0,1/0);if(t===-1)return new e(0,-1/0)}var i=n*n+(1-t)*(1-t),r=new e((1-t*t-n*n)/i,-2*n/i).log();return new e(-.5*r.im,.5*r.re)}acot(){var n=this.re,t=this.im;if(t===0)return new e(Math.atan2(1,n),0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).atan():new e(n!==0?n/0:0,t!==0?-t/0:0).atan()}asec(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(0,1/0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).acos():new e(n!==0?n/0:0,t!==0?-t/0:0).acos()}acsc(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(Math.PI/2,1/0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).asin():new e(n!==0?n/0:0,t!==0?-t/0:0).asin()}sinh(){var n=this.re,t=this.im;return new e(et(n)*Math.cos(t),bn(n)*Math.sin(t))}cosh(){var n=this.re,t=this.im;return new e(bn(n)*Math.cos(t),et(n)*Math.sin(t))}tanh(){var n=2*this.re,t=2*this.im,i=bn(n)+Math.cos(t);return new e(et(n)/i,Math.sin(t)/i)}coth(){var n=2*this.re,t=2*this.im,i=bn(n)-Math.cos(t);return new e(et(n)/i,-Math.sin(t)/i)}csch(){var n=this.re,t=this.im,i=Math.cos(2*t)-bn(2*n);return new e(-2*et(n)*Math.cos(t)/i,2*bn(n)*Math.sin(t)/i)}sech(){var n=this.re,t=this.im,i=Math.cos(2*t)+bn(2*n);return new e(2*bn(n)*Math.cos(t)/i,-2*et(n)*Math.sin(t)/i)}asinh(){var n=this.im;this.im=-this.re,this.re=n;var t=this.asin();return this.re=-this.im,this.im=n,n=t.re,t.re=-t.im,t.im=n,t}acosh(){var n=this.acos();if(n.im<=0){var t=n.re;n.re=-n.im,n.im=t}else{var t=n.im;n.im=-n.re,n.re=t}return n}atanh(){var n=this.re,t=this.im,i=n>1&&t===0,r=1-n,o=1+n,s=r*r+t*t,a=s!==0?new e((o*r-t*t)/s,(t*r+o*t)/s):new e(n!==-1?n/0:0,t!==0?t/0:0),u=a.re;return a.re=Wl(a.re,a.im)/2,a.im=Math.atan2(a.im,u)/2,i&&(a.im=-a.im),a}acoth(){var n=this.re,t=this.im;if(n===0&&t===0)return new e(0,Math.PI/2);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).atanh():new e(n!==0?n/0:0,t!==0?-t/0:0).atanh()}acsch(){var n=this.re,t=this.im;if(t===0)return new e(n!==0?Math.log(n+Math.sqrt(n*n+1)):1/0,0);var i=n*n+t*t;return i!==0?new e(n/i,-t/i).asinh():new e(n!==0?n/0:0,t!==0?-t/0:0).asinh()}asech(){var n=this.re,t=this.im;if(this.isZero())return e.INFINITY;var i=n*n+t*t;return i!==0?new e(n/i,-t/i).acosh():new e(n!==0?n/0:0,t!==0?-t/0:0).acosh()}inverse(){if(this.isZero())return e.INFINITY;if(this.isInfinite())return e.ZERO;var n=this.re,t=this.im,i=n*n+t*t;return new e(n/i,-t/i)}conjugate(){return new e(this.re,-this.im)}neg(){return new e(-this.re,-this.im)}ceil(n){return n=Math.pow(10,n||0),new e(Math.ceil(this.re*n)/n,Math.ceil(this.im*n)/n)}floor(n){return n=Math.pow(10,n||0),new e(Math.floor(this.re*n)/n,Math.floor(this.im*n)/n)}round(n){return n=Math.pow(10,n||0),new e(Math.round(this.re*n)/n,Math.round(this.im*n)/n)}equals(n,t){var i=new e(n,t);return Math.abs(i.re-this.re)<=e.EPSILON&&Math.abs(i.im-this.im)<=e.EPSILON}clone(){return new e(this.re,this.im)}toString(){var n=this.re,t=this.im,i="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(n)<e.EPSILON&&(n=0),Math.abs(t)<e.EPSILON&&(t=0),t===0?i+n:(n!==0?(i+=n,i+=" ",t<0?(t=-t,i+="-"):i+="+",i+=" "):t<0&&(t=-t,i+="-"),t!==1&&(i+=t),i+"i"))}toVector(){return[this.re,this.im]}valueOf(){return this.im===0?this.re:null}isNaN(){return isNaN(this.re)||isNaN(this.im)}isZero(){return this.im===0&&this.re===0}isFinite(){return isFinite(this.re)&&isFinite(this.im)}isInfinite(){return!(this.isNaN()||this.isFinite())}};z.ZERO=new z(0,0);z.ONE=new z(1,0);z.I=new z(0,1);z.PI=new z(Math.PI,0);z.E=new z(Math.E,0);z.INFINITY=new z(1/0,1/0);z.NAN=new z(NaN,NaN);z.EPSILON=1e-15;var zr=9e15,Ti=1e9,Yl="0123456789abcdef",va="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",_a="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ql={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-zr,maxE:zr,crypto:!1},vd,Wt,te=!0,Sa="[DecimalError] ",Si=Sa+"Invalid argument: ",_d=Sa+"Precision limit exceeded",Nd=Sa+"crypto unavailable",Sd="[object Decimal]",yn=Math.floor,tn=Math.pow,XE=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,KE=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,ev=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Td=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,gt=1e7,X=7,nv=9007199254740991,tv=va.length-1,Xl=_a.length-1,R={toStringTag:Sd};R.absoluteValue=R.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),H(e)};R.ceil=function(){return H(new this.constructor(this),this.e+1,2)};R.clampedTo=R.clamp=function(e,n){var t,i=this,r=i.constructor;if(e=new r(e),n=new r(n),!e.s||!n.s)return new r(NaN);if(e.gt(n))throw Error(Si+n);return t=i.cmp(e),t<0?e:i.cmp(n)>0?n:new r(i)};R.comparedTo=R.cmp=function(e){var n,t,i,r,o=this,s=o.d,a=(e=new o.constructor(e)).d,u=o.s,l=e.s;if(!s||!a)return!u||!l?NaN:u!==l?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-l:0;if(u!==l)return u;if(o.e!==e.e)return o.e>e.e^u<0?1:-1;for(i=s.length,r=a.length,n=0,t=i<r?i:r;n<t;++n)if(s[n]!==a[n])return s[n]>a[n]^u<0?1:-1;return i===r?0:i>r^u<0?1:-1};R.cosine=R.cos=function(){var e,n,t=this,i=t.constructor;return t.d?t.d[0]?(e=i.precision,n=i.rounding,i.precision=e+Math.max(t.e,t.sd())+X,i.rounding=1,t=iv(i,Cd(i,t)),i.precision=e,i.rounding=n,H(Wt==2||Wt==3?t.neg():t,e,n,!0)):new i(1):new i(NaN)};R.cubeRoot=R.cbrt=function(){var e,n,t,i,r,o,s,a,u,l,c=this,f=c.constructor;if(!c.isFinite()||c.isZero())return new f(c);for(te=!1,o=c.s*tn(c.s*c,1/3),!o||Math.abs(o)==1/0?(t=dn(c.d),e=c.e,(o=(e-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=tn(t,1/3),e=yn((e+1)/3)-(e%3==(e<0?-1:2)),o==1/0?t="5e"+e:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),i=new f(t),i.s=c.s):i=new f(o.toString()),s=(e=f.precision)+3;;)if(a=i,u=a.times(a).times(a),l=u.plus(c),i=Me(l.plus(c).times(a),l.plus(u),s+2,1),dn(a.d).slice(0,s)===(t=dn(i.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,e+1,0),a.times(a).times(a).eq(c))){i=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(i,e+1,1),n=!i.times(i).times(i).eq(c));break}return te=!0,H(i,e,f.rounding,n)};R.decimalPlaces=R.dp=function(){var e,n=this.d,t=NaN;if(n){if(e=n.length-1,t=(e-yn(this.e/X))*X,e=n[e],e)for(;e%10==0;e/=10)t--;t<0&&(t=0)}return t};R.dividedBy=R.div=function(e){return Me(this,new this.constructor(e))};R.dividedToIntegerBy=R.divToInt=function(e){var n=this,t=n.constructor;return H(Me(n,new t(e),0,1,1),t.precision,t.rounding)};R.equals=R.eq=function(e){return this.cmp(e)===0};R.floor=function(){return H(new this.constructor(this),this.e+1,3)};R.greaterThan=R.gt=function(e){return this.cmp(e)>0};R.greaterThanOrEqualTo=R.gte=function(e){var n=this.cmp(e);return n==1||n===0};R.hyperbolicCosine=R.cosh=function(){var e,n,t,i,r,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,i=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,r=o.d.length,r<32?(e=Math.ceil(r/3),n=(1/Ia(4,e)).toString()):(e=16,n="2.3283064365386962890625e-10"),o=Ur(s,1,o.times(n),new s(1),!0);for(var u,l=e,c=new s(8);l--;)u=o.times(o),o=a.minus(u.times(c.minus(u.times(c))));return H(o,s.precision=t,s.rounding=i,!0)};R.hyperbolicSine=R.sinh=function(){var e,n,t,i,r=this,o=r.constructor;if(!r.isFinite()||r.isZero())return new o(r);if(n=o.precision,t=o.rounding,o.precision=n+Math.max(r.e,r.sd())+4,o.rounding=1,i=r.d.length,i<3)r=Ur(o,2,r,r,!0);else{e=1.4*Math.sqrt(i),e=e>16?16:e|0,r=r.times(1/Ia(5,e)),r=Ur(o,2,r,r,!0);for(var s,a=new o(5),u=new o(16),l=new o(20);e--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(l))))}return o.precision=n,o.rounding=t,H(r,n,t,!0)};R.hyperbolicTangent=R.tanh=function(){var e,n,t=this,i=t.constructor;return t.isFinite()?t.isZero()?new i(t):(e=i.precision,n=i.rounding,i.precision=e+7,i.rounding=1,Me(t.sinh(),t.cosh(),i.precision=e,i.rounding=n)):new i(t.s)};R.inverseCosine=R.acos=function(){var e=this,n=e.constructor,t=e.abs().cmp(1),i=n.precision,r=n.rounding;return t!==-1?t===0?e.isNeg()?wt(n,i,r):new n(0):new n(NaN):e.isZero()?wt(n,i+4,r).times(.5):(n.precision=i+6,n.rounding=1,e=new n(1).minus(e).div(e.plus(1)).sqrt().atan(),n.precision=i,n.rounding=r,e.times(2))};R.inverseHyperbolicCosine=R.acosh=function(){var e,n,t=this,i=t.constructor;return t.lte(1)?new i(t.eq(1)?0:NaN):t.isFinite()?(e=i.precision,n=i.rounding,i.precision=e+Math.max(Math.abs(t.e),t.sd())+4,i.rounding=1,te=!1,t=t.times(t).minus(1).sqrt().plus(t),te=!0,i.precision=e,i.rounding=n,t.ln()):new i(t)};R.inverseHyperbolicSine=R.asinh=function(){var e,n,t=this,i=t.constructor;return!t.isFinite()||t.isZero()?new i(t):(e=i.precision,n=i.rounding,i.precision=e+2*Math.max(Math.abs(t.e),t.sd())+6,i.rounding=1,te=!1,t=t.times(t).plus(1).sqrt().plus(t),te=!0,i.precision=e,i.rounding=n,t.ln())};R.inverseHyperbolicTangent=R.atanh=function(){var e,n,t,i,r=this,o=r.constructor;return r.isFinite()?r.e>=0?new o(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(e=o.precision,n=o.rounding,i=r.sd(),Math.max(i,e)<2*-r.e-1?H(new o(r),e,n,!0):(o.precision=t=i-r.e,r=Me(r.plus(1),new o(1).minus(r),t+e,1),o.precision=e+4,o.rounding=1,r=r.ln(),o.precision=e,o.rounding=n,r.times(.5))):new o(NaN)};R.inverseSine=R.asin=function(){var e,n,t,i,r=this,o=r.constructor;return r.isZero()?new o(r):(n=r.abs().cmp(1),t=o.precision,i=o.rounding,n!==-1?n===0?(e=wt(o,t+4,i).times(.5),e.s=r.s,e):new o(NaN):(o.precision=t+6,o.rounding=1,r=r.div(new o(1).minus(r.times(r)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=i,r.times(2)))};R.inverseTangent=R.atan=function(){var e,n,t,i,r,o,s,a,u,l=this,c=l.constructor,f=c.precision,p=c.rounding;if(l.isFinite()){if(l.isZero())return new c(l);if(l.abs().eq(1)&&f+4<=Xl)return s=wt(c,f+4,p).times(.25),s.s=l.s,s}else{if(!l.s)return new c(NaN);if(f+4<=Xl)return s=wt(c,f+4,p).times(.5),s.s=l.s,s}for(c.precision=a=f+10,c.rounding=1,t=Math.min(28,a/X+2|0),e=t;e;--e)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(te=!1,n=Math.ceil(a/X),i=1,u=l.times(l),s=new c(l),r=l;e!==-1;)if(r=r.times(u),o=s.minus(r.div(i+=2)),r=r.times(u),s=o.plus(r.div(i+=2)),s.d[n]!==void 0)for(e=n;s.d[e]===o.d[e]&&e--;);return t&&(s=s.times(2<<t-1)),te=!0,H(s,c.precision=f,c.rounding=p,!0)};R.isFinite=function(){return!!this.d};R.isInteger=R.isInt=function(){return!!this.d&&yn(this.e/X)>this.d.length-2};R.isNaN=function(){return!this.s};R.isNegative=R.isNeg=function(){return this.s<0};R.isPositive=R.isPos=function(){return this.s>0};R.isZero=function(){return!!this.d&&this.d[0]===0};R.lessThan=R.lt=function(e){return this.cmp(e)<0};R.lessThanOrEqualTo=R.lte=function(e){return this.cmp(e)<1};R.logarithm=R.log=function(e){var n,t,i,r,o,s,a,u,l=this,c=l.constructor,f=c.precision,p=c.rounding,d=5;if(e==null)e=new c(10),n=!0;else{if(e=new c(e),t=e.d,e.s<0||!t||!t[0]||e.eq(1))return new c(NaN);n=e.eq(10)}if(t=l.d,l.s<0||!t||!t[0]||l.eq(1))return new c(t&&!t[0]?-1/0:l.s!=1?NaN:t?0:1/0);if(n)if(t.length>1)o=!0;else{for(r=t[0];r%10===0;)r/=10;o=r!==1}if(te=!1,a=f+d,s=Ni(l,a),i=n?Na(c,a+10):Ni(e,a),u=Me(s,i,a,1),Ko(u.d,r=f,p))do if(a+=10,s=Ni(l,a),i=n?Na(c,a+10):Ni(e,a),u=Me(s,i,a,1),!o){+dn(u.d).slice(r+1,r+15)+1==1e14&&(u=H(u,f+1,0));break}while(Ko(u.d,r+=10,p));return te=!0,H(u,f,p)};R.minus=R.sub=function(e){var n,t,i,r,o,s,a,u,l,c,f,p,d=this,g=d.constructor;if(e=new g(e),!d.d||!e.d)return!d.s||!e.s?e=new g(NaN):d.d?e.s=-e.s:e=new g(e.d||d.s!==e.s?d:NaN),e;if(d.s!=e.s)return e.s=-e.s,d.plus(e);if(l=d.d,p=e.d,a=g.precision,u=g.rounding,!l[0]||!p[0]){if(p[0])e.s=-e.s;else if(l[0])e=new g(d);else return new g(u===3?-0:0);return te?H(e,a,u):e}if(t=yn(e.e/X),c=yn(d.e/X),l=l.slice(),o=c-t,o){for(f=o<0,f?(n=l,o=-o,s=p.length):(n=p,t=c,s=l.length),i=Math.max(Math.ceil(a/X),s)+2,o>i&&(o=i,n.length=1),n.reverse(),i=o;i--;)n.push(0);n.reverse()}else{for(i=l.length,s=p.length,f=i<s,f&&(s=i),i=0;i<s;i++)if(l[i]!=p[i]){f=l[i]<p[i];break}o=0}for(f&&(n=l,l=p,p=n,e.s=-e.s),s=l.length,i=p.length-s;i>0;--i)l[s++]=0;for(i=p.length;i>o;){if(l[--i]<p[i]){for(r=i;r&&l[--r]===0;)l[r]=gt-1;--l[r],l[i]+=gt}l[i]-=p[i]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--t;return l[0]?(e.d=l,e.e=Ta(l,t),te?H(e,a,u):e):new g(u===3?-0:0)};R.modulo=R.mod=function(e){var n,t=this,i=t.constructor;return e=new i(e),!t.d||!e.s||e.d&&!e.d[0]?new i(NaN):!e.d||t.d&&!t.d[0]?H(new i(t),i.precision,i.rounding):(te=!1,i.modulo==9?(n=Me(t,e.abs(),0,3,1),n.s*=e.s):n=Me(t,e,0,i.modulo,1),n=n.times(e),te=!0,t.minus(n))};R.naturalExponential=R.exp=function(){return Kl(this)};R.naturalLogarithm=R.ln=function(){return Ni(this)};R.negated=R.neg=function(){var e=new this.constructor(this);return e.s=-e.s,H(e)};R.plus=R.add=function(e){var n,t,i,r,o,s,a,u,l,c,f=this,p=f.constructor;if(e=new p(e),!f.d||!e.d)return!f.s||!e.s?e=new p(NaN):f.d||(e=new p(e.d||f.s===e.s?f:NaN)),e;if(f.s!=e.s)return e.s=-e.s,f.minus(e);if(l=f.d,c=e.d,a=p.precision,u=p.rounding,!l[0]||!c[0])return c[0]||(e=new p(f)),te?H(e,a,u):e;if(o=yn(f.e/X),i=yn(e.e/X),l=l.slice(),r=o-i,r){for(r<0?(t=l,r=-r,s=c.length):(t=c,i=o,s=l.length),o=Math.ceil(a/X),s=o>s?o+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=l.length,r=c.length,s-r<0&&(r=s,t=c,c=l,l=t),n=0;r;)n=(l[--r]=l[r]+c[r]+n)/gt|0,l[r]%=gt;for(n&&(l.unshift(n),++i),s=l.length;l[--s]==0;)l.pop();return e.d=l,e.e=Ta(l,i),te?H(e,a,u):e};R.precision=R.sd=function(e){var n,t=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Si+e);return t.d?(n=Id(t.d),e&&t.e+1>n&&(n=t.e+1)):n=NaN,n};R.round=function(){var e=this,n=e.constructor;return H(new n(e),e.e+1,n.rounding)};R.sine=R.sin=function(){var e,n,t=this,i=t.constructor;return t.isFinite()?t.isZero()?new i(t):(e=i.precision,n=i.rounding,i.precision=e+Math.max(t.e,t.sd())+X,i.rounding=1,t=ov(i,Cd(i,t)),i.precision=e,i.rounding=n,H(Wt>2?t.neg():t,e,n,!0)):new i(NaN)};R.squareRoot=R.sqrt=function(){var e,n,t,i,r,o,s=this,a=s.d,u=s.e,l=s.s,c=s.constructor;if(l!==1||!a||!a[0])return new c(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);for(te=!1,l=Math.sqrt(+s),l==0||l==1/0?(n=dn(a),(n.length+u)%2==0&&(n+="0"),l=Math.sqrt(n),u=yn((u+1)/2)-(u<0||u%2),l==1/0?n="5e"+u:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+u),i=new c(n)):i=new c(l.toString()),t=(u=c.precision)+3;;)if(o=i,i=o.plus(Me(s,o,t+2,1)).times(.5),dn(o.d).slice(0,t)===(n=dn(i.d)).slice(0,t))if(n=n.slice(t-3,t+1),n=="9999"||!r&&n=="4999"){if(!r&&(H(o,u+1,0),o.times(o).eq(s))){i=o;break}t+=4,r=1}else{(!+n||!+n.slice(1)&&n.charAt(0)=="5")&&(H(i,u+1,1),e=!i.times(i).eq(s));break}return te=!0,H(i,u,c.rounding,e)};R.tangent=R.tan=function(){var e,n,t=this,i=t.constructor;return t.isFinite()?t.isZero()?new i(t):(e=i.precision,n=i.rounding,i.precision=e+10,i.rounding=1,t=t.sin(),t.s=1,t=Me(t,new i(1).minus(t.times(t)).sqrt(),e+10,0),i.precision=e,i.rounding=n,H(Wt==2||Wt==4?t.neg():t,e,n,!0)):new i(NaN)};R.times=R.mul=function(e){var n,t,i,r,o,s,a,u,l,c=this,f=c.constructor,p=c.d,d=(e=new f(e)).d;if(e.s*=c.s,!p||!p[0]||!d||!d[0])return new f(!e.s||p&&!p[0]&&!d||d&&!d[0]&&!p?NaN:!p||!d?e.s/0:e.s*0);for(t=yn(c.e/X)+yn(e.e/X),u=p.length,l=d.length,u<l&&(o=p,p=d,d=o,s=u,u=l,l=s),o=[],s=u+l,i=s;i--;)o.push(0);for(i=l;--i>=0;){for(n=0,r=u+i;r>i;)a=o[r]+d[i]*p[r-i-1]+n,o[r--]=a%gt|0,n=a/gt|0;o[r]=(o[r]+n)%gt|0}for(;!o[--s];)o.pop();return n?++t:o.shift(),e.d=o,e.e=Ta(o,t),te?H(e,f.precision,f.rounding):e};R.toBinary=function(e,n){return ec(this,2,e,n)};R.toDecimalPlaces=R.toDP=function(e,n){var t=this,i=t.constructor;return t=new i(t),e===void 0?t:(Pn(e,0,Ti),n===void 0?n=i.rounding:Pn(n,0,8),H(t,e+t.e+1,n))};R.toExponential=function(e,n){var t,i=this,r=i.constructor;return e===void 0?t=Mt(i,!0):(Pn(e,0,Ti),n===void 0?n=r.rounding:Pn(n,0,8),i=H(new r(i),e+1,n),t=Mt(i,!0,e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};R.toFixed=function(e,n){var t,i,r=this,o=r.constructor;return e===void 0?t=Mt(r):(Pn(e,0,Ti),n===void 0?n=o.rounding:Pn(n,0,8),i=H(new o(r),e+r.e+1,n),t=Mt(i,!1,e+i.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};R.toFraction=function(e){var n,t,i,r,o,s,a,u,l,c,f,p,d=this,g=d.d,h=d.constructor;if(!g)return new h(d);if(l=t=new h(1),i=u=new h(0),n=new h(i),o=n.e=Id(g)-d.e-1,s=o%X,n.d[0]=tn(10,s<0?X+s:s),e==null)e=o>0?n:l;else{if(a=new h(e),!a.isInt()||a.lt(l))throw Error(Si+a);e=a.gt(n)?o>0?n:l:a}for(te=!1,a=new h(dn(g)),c=h.precision,h.precision=o=g.length*X*2;f=Me(a,n,0,1,1),r=t.plus(f.times(i)),r.cmp(e)!=1;)t=i,i=r,r=l,l=u.plus(f.times(r)),u=r,r=n,n=a.minus(f.times(r)),a=r;return r=Me(e.minus(t),i,0,1,1),u=u.plus(r.times(l)),t=t.plus(r.times(i)),u.s=l.s=d.s,p=Me(l,i,o,1).minus(d).abs().cmp(Me(u,t,o,1).minus(d).abs())<1?[l,i]:[u,t],h.precision=c,te=!0,p};R.toHexadecimal=R.toHex=function(e,n){return ec(this,16,e,n)};R.toNearest=function(e,n){var t=this,i=t.constructor;if(t=new i(t),e==null){if(!t.d)return t;e=new i(1),n=i.rounding}else{if(e=new i(e),n===void 0?n=i.rounding:Pn(n,0,8),!t.d)return e.s?t:e;if(!e.d)return e.s&&(e.s=t.s),e}return e.d[0]?(te=!1,t=Me(t,e,0,n,1).times(e),te=!0,H(t)):(e.s=t.s,t=e),t};R.toNumber=function(){return+this};R.toOctal=function(e,n){return ec(this,8,e,n)};R.toPower=R.pow=function(e){var n,t,i,r,o,s,a=this,u=a.constructor,l=+(e=new u(e));if(!a.d||!e.d||!a.d[0]||!e.d[0])return new u(tn(+a,l));if(a=new u(a),a.eq(1))return a;if(i=u.precision,o=u.rounding,e.eq(1))return H(a,i,o);if(n=yn(e.e/X),n>=e.d.length-1&&(t=l<0?-l:l)<=nv)return r=wd(u,a,t,i),e.s<0?new u(1).div(r):H(r,i,o);if(s=a.s,s<0){if(n<e.d.length-1)return new u(NaN);if((e.d[n]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=tn(+a,l),n=t==0||!isFinite(t)?yn(l*(Math.log("0."+dn(a.d))/Math.LN10+a.e+1)):new u(t+"").e,n>u.maxE+1||n<u.minE-1?new u(n>0?s/0:0):(te=!1,u.rounding=a.s=1,t=Math.min(12,(n+"").length),r=Kl(e.times(Ni(a,i+t)),i),r.d&&(r=H(r,i+5,1),Ko(r.d,i,o)&&(n=i+10,r=H(Kl(e.times(Ni(a,n+t)),n),n+5,1),+dn(r.d).slice(i+1,i+15)+1==1e14&&(r=H(r,i+1,0)))),r.s=s,te=!0,u.rounding=o,H(r,i,o))};R.toPrecision=function(e,n){var t,i=this,r=i.constructor;return e===void 0?t=Mt(i,i.e<=r.toExpNeg||i.e>=r.toExpPos):(Pn(e,1,Ti),n===void 0?n=r.rounding:Pn(n,0,8),i=H(new r(i),e,n),t=Mt(i,e<=i.e||i.e<=r.toExpNeg,e)),i.isNeg()&&!i.isZero()?"-"+t:t};R.toSignificantDigits=R.toSD=function(e,n){var t=this,i=t.constructor;return e===void 0?(e=i.precision,n=i.rounding):(Pn(e,1,Ti),n===void 0?n=i.rounding:Pn(n,0,8)),H(new i(t),e,n)};R.toString=function(){var e=this,n=e.constructor,t=Mt(e,e.e<=n.toExpNeg||e.e>=n.toExpPos);return e.isNeg()&&!e.isZero()?"-"+t:t};R.truncated=R.trunc=function(){return H(new this.constructor(this),this.e+1,1)};R.valueOf=R.toJSON=function(){var e=this,n=e.constructor,t=Mt(e,e.e<=n.toExpNeg||e.e>=n.toExpPos);return e.isNeg()?"-"+t:t};function dn(e){var n,t,i,r=e.length-1,o="",s=e[0];if(r>0){for(o+=s,n=1;n<r;n++)i=e[n]+"",t=X-i.length,t&&(o+=_i(t)),o+=i;s=e[n],i=s+"",t=X-i.length,t&&(o+=_i(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function Pn(e,n,t){if(e!==~~e||e<n||e>t)throw Error(Si+e)}function Ko(e,n,t,i){var r,o,s,a;for(o=e[0];o>=10;o/=10)--n;return--n<0?(n+=X,r=0):(r=Math.ceil((n+1)/X),n%=X),o=tn(10,X-n),a=e[r]%o|0,i==null?n<3?(n==0?a=a/100|0:n==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(e[r+1]/o/100|0)==tn(10,n-2)-1||(a==o/2||a==0)&&(e[r+1]/o/100|0)==0:n<4?(n==0?a=a/1e3|0:n==1?a=a/100|0:n==2&&(a=a/10|0),s=(i||t<4)&&a==9999||!i&&t>3&&a==4999):s=((i||t<4)&&a+1==o||!i&&t>3&&a+1==o/2)&&(e[r+1]/o/1e3|0)==tn(10,n-3)-1,s}function xa(e,n,t){for(var i,r=[0],o,s=0,a=e.length;s<a;){for(o=r.length;o--;)r[o]*=n;for(r[0]+=Yl.indexOf(e.charAt(s++)),i=0;i<r.length;i++)r[i]>t-1&&(r[i+1]===void 0&&(r[i+1]=0),r[i+1]+=r[i]/t|0,r[i]%=t)}return r.reverse()}function iv(e,n){var t,i,r;if(n.isZero())return n;i=n.d.length,i<32?(t=Math.ceil(i/3),r=(1/Ia(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),e.precision+=t,n=Ur(e,1,n.times(r),new e(1));for(var o=t;o--;){var s=n.times(n);n=s.times(s).minus(s).times(8).plus(1)}return e.precision-=t,n}var Me=(function(){function e(i,r,o){var s,a=0,u=i.length;for(i=i.slice();u--;)s=i[u]*r+a,i[u]=s%o|0,a=s/o|0;return a&&i.unshift(a),i}function n(i,r,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(i[a]!=r[a]){u=i[a]>r[a]?1:-1;break}return u}function t(i,r,o,s){for(var a=0;o--;)i[o]-=a,a=i[o]<r[o]?1:0,i[o]=a*s+i[o]-r[o];for(;!i[0]&&i.length>1;)i.shift()}return function(i,r,o,s,a,u){var l,c,f,p,d,g,h,b,y,x,N,T,I,M,w,k,P,F,G,U,ge=i.constructor,he=i.s==r.s?1:-1,le=i.d,ee=r.d;if(!le||!le[0]||!ee||!ee[0])return new ge(!i.s||!r.s||(le?ee&&le[0]==ee[0]:!ee)?NaN:le&&le[0]==0||!ee?he*0:he/0);for(u?(d=1,c=i.e-r.e):(u=gt,d=X,c=yn(i.e/d)-yn(r.e/d)),G=ee.length,P=le.length,y=new ge(he),x=y.d=[],f=0;ee[f]==(le[f]||0);f++);if(ee[f]>(le[f]||0)&&c--,o==null?(M=o=ge.precision,s=ge.rounding):a?M=o+(i.e-r.e)+1:M=o,M<0)x.push(1),g=!0;else{if(M=M/d+2|0,f=0,G==1){for(p=0,ee=ee[0],M++;(f<P||p)&&M--;f++)w=p*u+(le[f]||0),x[f]=w/ee|0,p=w%ee|0;g=p||f<P}else{for(p=u/(ee[0]+1)|0,p>1&&(ee=e(ee,p,u),le=e(le,p,u),G=ee.length,P=le.length),k=G,N=le.slice(0,G),T=N.length;T<G;)N[T++]=0;U=ee.slice(),U.unshift(0),F=ee[0],ee[1]>=u/2&&++F;do p=0,l=n(ee,N,G,T),l<0?(I=N[0],G!=T&&(I=I*u+(N[1]||0)),p=I/F|0,p>1?(p>=u&&(p=u-1),h=e(ee,p,u),b=h.length,T=N.length,l=n(h,N,b,T),l==1&&(p--,t(h,G<b?U:ee,b,u))):(p==0&&(l=p=1),h=ee.slice()),b=h.length,b<T&&h.unshift(0),t(N,h,T,u),l==-1&&(T=N.length,l=n(ee,N,G,T),l<1&&(p++,t(N,G<T?U:ee,T,u))),T=N.length):l===0&&(p++,N=[0]),x[f++]=p,l&&N[0]?N[T++]=le[k]||0:(N=[le[k]],T=1);while((k++<P||N[0]!==void 0)&&M--);g=N[0]!==void 0}x[0]||x.shift()}if(d==1)y.e=c,vd=g;else{for(f=1,p=x[0];p>=10;p/=10)f++;y.e=f+c*d-1,H(y,a?o+y.e+1:o,s,g)}return y}})();function H(e,n,t,i){var r,o,s,a,u,l,c,f,p,d=e.constructor;e:if(n!=null){if(f=e.d,!f)return e;for(r=1,a=f[0];a>=10;a/=10)r++;if(o=n-r,o<0)o+=X,s=n,c=f[p=0],u=c/tn(10,r-s-1)%10|0;else if(p=Math.ceil((o+1)/X),a=f.length,p>=a)if(i){for(;a++<=p;)f.push(0);c=u=0,r=1,o%=X,s=o-X+1}else break e;else{for(c=a=f[p],r=1;a>=10;a/=10)r++;o%=X,s=o-X+r,u=s<0?0:c/tn(10,r-s-1)%10|0}if(i=i||n<0||f[p+1]!==void 0||(s<0?c:c%tn(10,r-s-1)),l=t<4?(u||i)&&(t==0||t==(e.s<0?3:2)):u>5||u==5&&(t==4||i||t==6&&(o>0?s>0?c/tn(10,r-s):0:f[p-1])%10&1||t==(e.s<0?8:7)),n<1||!f[0])return f.length=0,l?(n-=e.e+1,f[0]=tn(10,(X-n%X)%X),e.e=-n||0):f[0]=e.e=0,e;if(o==0?(f.length=p,a=1,p--):(f.length=p+1,a=tn(10,X-o),f[p]=s>0?(c/tn(10,r-s)%tn(10,s)|0)*a:0),l)for(;;)if(p==0){for(o=1,s=f[0];s>=10;s/=10)o++;for(s=f[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(e.e++,f[0]==gt&&(f[0]=1));break}else{if(f[p]+=a,f[p]!=gt)break;f[p--]=0,a=1}for(o=f.length;f[--o]===0;)f.pop()}return te&&(e.e>d.maxE?(e.d=null,e.e=NaN):e.e<d.minE&&(e.e=0,e.d=[0])),e}function Mt(e,n,t){if(!e.isFinite())return kd(e);var i,r=e.e,o=dn(e.d),s=o.length;return n?(t&&(i=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+_i(i):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(e.e<0?"e":"e+")+e.e):r<0?(o="0."+_i(-r-1)+o,t&&(i=t-s)>0&&(o+=_i(i))):r>=s?(o+=_i(r+1-s),t&&(i=t-r-1)>0&&(o=o+"."+_i(i))):((i=r+1)<s&&(o=o.slice(0,i)+"."+o.slice(i)),t&&(i=t-s)>0&&(r+1===s&&(o+="."),o+=_i(i))),o}function Ta(e,n){var t=e[0];for(n*=X;t>=10;t/=10)n++;return n}function Na(e,n,t){if(n>tv)throw te=!0,t&&(e.precision=t),Error(_d);return H(new e(va),n,1,!0)}function wt(e,n,t){if(n>Xl)throw Error(_d);return H(new e(_a),n,t,!0)}function Id(e){var n=e.length-1,t=n*X+1;if(n=e[n],n){for(;n%10==0;n/=10)t--;for(n=e[0];n>=10;n/=10)t++}return t}function _i(e){for(var n="";e--;)n+="0";return n}function wd(e,n,t,i){var r,o=new e(1),s=Math.ceil(i/X+4);for(te=!1;;){if(t%2&&(o=o.times(n),xd(o.d,s)&&(r=!0)),t=yn(t/2),t===0){t=o.d.length-1,r&&o.d[t]===0&&++o.d[t];break}n=n.times(n),xd(n.d,s)}return te=!0,o}function yd(e){return e.d[e.d.length-1]&1}function Md(e,n,t){for(var i,r,o=new e(n[0]),s=0;++s<n.length;){if(r=new e(n[s]),!r.s){o=r;break}i=o.cmp(r),(i===t||i===0&&o.s===t)&&(o=r)}return o}function Kl(e,n){var t,i,r,o,s,a,u,l=0,c=0,f=0,p=e.constructor,d=p.rounding,g=p.precision;if(!e.d||!e.d[0]||e.e>17)return new p(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(n==null?(te=!1,u=g):u=n,a=new p(.03125);e.e>-2;)e=e.times(a),f+=5;for(i=Math.log(tn(2,f))/Math.LN10*2+5|0,u+=i,t=o=s=new p(1),p.precision=u;;){if(o=H(o.times(e),u,1),t=t.times(++c),a=s.plus(Me(o,t,u,1)),dn(a.d).slice(0,u)===dn(s.d).slice(0,u)){for(r=f;r--;)s=H(s.times(s),u,1);if(n==null)if(l<3&&Ko(s.d,u-i,d,l))p.precision=u+=10,t=o=a=new p(1),c=0,l++;else return H(s,p.precision=g,d,te=!0);else return p.precision=g,s}s=a}}function Ni(e,n){var t,i,r,o,s,a,u,l,c,f,p,d=1,g=10,h=e,b=h.d,y=h.constructor,x=y.rounding,N=y.precision;if(h.s<0||!b||!b[0]||!h.e&&b[0]==1&&b.length==1)return new y(b&&!b[0]?-1/0:h.s!=1?NaN:b?0:h);if(n==null?(te=!1,c=N):c=n,y.precision=c+=g,t=dn(b),i=t.charAt(0),Math.abs(o=h.e)<15e14){for(;i<7&&i!=1||i==1&&t.charAt(1)>3;)h=h.times(e),t=dn(h.d),i=t.charAt(0),d++;o=h.e,i>1?(h=new y("0."+t),o++):h=new y(i+"."+t.slice(1))}else return l=Na(y,c+2,N).times(o+""),h=Ni(new y(i+"."+t.slice(1)),c-g).plus(l),y.precision=N,n==null?H(h,N,x,te=!0):h;for(f=h,u=s=h=Me(h.minus(1),h.plus(1),c,1),p=H(h.times(h),c,1),r=3;;){if(s=H(s.times(p),c,1),l=u.plus(Me(s,new y(r),c,1)),dn(l.d).slice(0,c)===dn(u.d).slice(0,c))if(u=u.times(2),o!==0&&(u=u.plus(Na(y,c+2,N).times(o+""))),u=Me(u,new y(d),c,1),n==null)if(Ko(u.d,c-g,x,a))y.precision=c+=g,l=s=h=Me(f.minus(1),f.plus(1),c,1),p=H(h.times(h),c,1),r=a=1;else return H(u,y.precision=N,x,te=!0);else return y.precision=N,u;u=l,r+=2}}function kd(e){return String(e.s*e.s/0)}function Ea(e,n){var t,i,r;for((t=n.indexOf("."))>-1&&(n=n.replace(".","")),(i=n.search(/e/i))>0?(t<0&&(t=i),t+=+n.slice(i+1),n=n.substring(0,i)):t<0&&(t=n.length),i=0;n.charCodeAt(i)===48;i++);for(r=n.length;n.charCodeAt(r-1)===48;--r);if(n=n.slice(i,r),n){if(r-=i,e.e=t=t-i-1,e.d=[],i=(t+1)%X,t<0&&(i+=X),i<r){for(i&&e.d.push(+n.slice(0,i)),r-=X;i<r;)e.d.push(+n.slice(i,i+=X));n=n.slice(i),i=X-n.length}else i-=r;for(;i--;)n+="0";e.d.push(+n),te&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function rv(e,n){var t,i,r,o,s,a,u,l,c;if(n.indexOf("_")>-1){if(n=n.replace(/(\d)_(?=\d)/g,"$1"),Td.test(n))return Ea(e,n)}else if(n==="Infinity"||n==="NaN")return+n||(e.s=NaN),e.e=NaN,e.d=null,e;if(KE.test(n))t=16,n=n.toLowerCase();else if(XE.test(n))t=2;else if(ev.test(n))t=8;else throw Error(Si+n);for(o=n.search(/p/i),o>0?(u=+n.slice(o+1),n=n.substring(2,o)):n=n.slice(2),o=n.indexOf("."),s=o>=0,i=e.constructor,s&&(n=n.replace(".",""),a=n.length,o=a-o,r=wd(i,new i(t),o,o*2)),l=xa(n,t,gt),c=l.length-1,o=c;l[o]===0;--o)l.pop();return o<0?new i(e.s*0):(e.e=Ta(l,c),e.d=l,te=!1,s&&(e=Me(e,r,a*4)),u&&(e=e.times(Math.abs(u)<54?tn(2,u):K.pow(2,u))),te=!0,e)}function ov(e,n){var t,i=n.d.length;if(i<3)return n.isZero()?n:Ur(e,2,n,n);t=1.4*Math.sqrt(i),t=t>16?16:t|0,n=n.times(1/Ia(5,t)),n=Ur(e,2,n,n);for(var r,o=new e(5),s=new e(16),a=new e(20);t--;)r=n.times(n),n=n.times(o.plus(r.times(s.times(r).minus(a))));return n}function Ur(e,n,t,i,r){var o,s,a,u,l=1,c=e.precision,f=Math.ceil(c/X);for(te=!1,u=t.times(t),a=new e(i);;){if(s=Me(a.times(u),new e(n++*n++),c,1),a=r?i.plus(s):i.minus(s),i=Me(s.times(u),new e(n++*n++),c,1),s=a.plus(i),s.d[f]!==void 0){for(o=f;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=i,i=s,s=o,l++}return te=!0,s.d.length=f+1,s}function Ia(e,n){for(var t=e;--n;)t*=e;return t}function Cd(e,n){var t,i=n.s<0,r=wt(e,e.precision,1),o=r.times(.5);if(n=n.abs(),n.lte(o))return Wt=i?4:1,n;if(t=n.divToInt(r),t.isZero())Wt=i?3:2;else{if(n=n.minus(t.times(r)),n.lte(o))return Wt=yd(t)?i?2:3:i?4:1,n;Wt=yd(t)?i?1:4:i?3:2}return n.minus(r).abs()}function ec(e,n,t,i){var r,o,s,a,u,l,c,f,p,d=e.constructor,g=t!==void 0;if(g?(Pn(t,1,Ti),i===void 0?i=d.rounding:Pn(i,0,8)):(t=d.precision,i=d.rounding),!e.isFinite())c=kd(e);else{for(c=Mt(e),s=c.indexOf("."),g?(r=2,n==16?t=t*4-3:n==8&&(t=t*3-2)):r=n,s>=0&&(c=c.replace(".",""),p=new d(1),p.e=c.length-s,p.d=xa(Mt(p),10,r),p.e=p.d.length),f=xa(c,10,r),o=u=f.length;f[--u]==0;)f.pop();if(!f[0])c=g?"0p+0":"0";else{if(s<0?o--:(e=new d(e),e.d=f,e.e=o,e=Me(e,p,t,i,0,r),f=e.d,o=e.e,l=vd),s=f[t],a=r/2,l=l||f[t+1]!==void 0,l=i<4?(s!==void 0||l)&&(i===0||i===(e.s<0?3:2)):s>a||s===a&&(i===4||l||i===6&&f[t-1]&1||i===(e.s<0?8:7)),f.length=t,l)for(;++f[--t]>r-1;)f[t]=0,t||(++o,f.unshift(1));for(u=f.length;!f[u-1];--u);for(s=0,c="";s<u;s++)c+=Yl.charAt(f[s]);if(g){if(u>1)if(n==16||n==8){for(s=n==16?4:3,--u;u%s;u++)c+="0";for(f=xa(c,r,n),u=f.length;!f[u-1];--u);for(s=1,c="1.";s<u;s++)c+=Yl.charAt(f[s])}else c=c.charAt(0)+"."+c.slice(1);c=c+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)c="0"+c;c="0."+c}else if(++o>u)for(o-=u;o--;)c+="0";else o<u&&(c=c.slice(0,o)+"."+c.slice(o))}c=(n==16?"0x":n==2?"0b":n==8?"0o":"")+c}return e.s<0?"-"+c:c}function xd(e,n){if(e.length>n)return e.length=n,!0}function sv(e){return new this(e).abs()}function av(e){return new this(e).acos()}function uv(e){return new this(e).acosh()}function lv(e,n){return new this(e).plus(n)}function cv(e){return new this(e).asin()}function fv(e){return new this(e).asinh()}function pv(e){return new this(e).atan()}function mv(e){return new this(e).atanh()}function dv(e,n){e=new this(e),n=new this(n);var t,i=this.precision,r=this.rounding,o=i+4;return!e.s||!n.s?t=new this(NaN):!e.d&&!n.d?(t=wt(this,o,1).times(n.s>0?.25:.75),t.s=e.s):!n.d||e.isZero()?(t=n.s<0?wt(this,i,r):new this(0),t.s=e.s):!e.d||n.isZero()?(t=wt(this,o,1).times(.5),t.s=e.s):n.s<0?(this.precision=o,this.rounding=1,t=this.atan(Me(e,n,o,1)),n=wt(this,o,1),this.precision=i,this.rounding=r,t=e.s<0?t.minus(n):t.plus(n)):t=this.atan(Me(e,n,o,1)),t}function gv(e){return new this(e).cbrt()}function hv(e){return H(e=new this(e),e.e+1,2)}function bv(e,n,t){return new this(e).clamp(n,t)}function yv(e){if(!e||typeof e!="object")throw Error(Sa+"Object expected");var n,t,i,r=e.defaults===!0,o=["precision",1,Ti,"rounding",0,8,"toExpNeg",-zr,0,"toExpPos",0,zr,"maxE",0,zr,"minE",-zr,0,"modulo",0,9];for(n=0;n<o.length;n+=3)if(t=o[n],r&&(this[t]=Ql[t]),(i=e[t])!==void 0)if(yn(i)===i&&i>=o[n+1]&&i<=o[n+2])this[t]=i;else throw Error(Si+t+": "+i);if(t="crypto",r&&(this[t]=Ql[t]),(i=e[t])!==void 0)if(i===!0||i===!1||i===0||i===1)if(i)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Nd);else this[t]=!1;else throw Error(Si+t+": "+i);return this}function xv(e){return new this(e).cos()}function Ev(e){return new this(e).cosh()}function Ad(e){var n,t,i;function r(o){var s,a,u,l=this;if(!(l instanceof r))return new r(o);if(l.constructor=r,Ed(o)){l.s=o.s,te?!o.d||o.e>r.maxE?(l.e=NaN,l.d=null):o.e<r.minE?(l.e=0,l.d=[0]):(l.e=o.e,l.d=o.d.slice()):(l.e=o.e,l.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){l.s=1/o<0?-1:1,l.e=0,l.d=[0];return}if(o<0?(o=-o,l.s=-1):l.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;te?s>r.maxE?(l.e=NaN,l.d=null):s<r.minE?(l.e=0,l.d=[0]):(l.e=s,l.d=[o]):(l.e=s,l.d=[o]);return}if(o*0!==0){o||(l.s=NaN),l.e=NaN,l.d=null;return}return Ea(l,o.toString())}if(u==="string")return(a=o.charCodeAt(0))===45?(o=o.slice(1),l.s=-1):(a===43&&(o=o.slice(1)),l.s=1),Td.test(o)?Ea(l,o):rv(l,o);if(u==="bigint")return o<0?(o=-o,l.s=-1):l.s=1,Ea(l,o.toString());throw Error(Si+o)}if(r.prototype=R,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=yv,r.clone=Ad,r.isDecimal=Ed,r.abs=sv,r.acos=av,r.acosh=uv,r.add=lv,r.asin=cv,r.asinh=fv,r.atan=pv,r.atanh=mv,r.atan2=dv,r.cbrt=gv,r.ceil=hv,r.clamp=bv,r.cos=xv,r.cosh=Ev,r.div=vv,r.exp=_v,r.floor=Nv,r.hypot=Sv,r.ln=Tv,r.log=Iv,r.log10=Mv,r.log2=wv,r.max=kv,r.min=Cv,r.mod=Av,r.mul=Rv,r.pow=Pv,r.random=Dv,r.round=$v,r.sign=Ov,r.sin=Lv,r.sinh=Fv,r.sqrt=qv,r.sub=Vv,r.sum=Bv,r.tan=Jv,r.tanh=zv,r.trunc=Uv,e===void 0&&(e={}),e&&e.defaults!==!0)for(i=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],n=0;n<i.length;)e.hasOwnProperty(t=i[n++])||(e[t]=this[t]);return r.config(e),r}function vv(e,n){return new this(e).div(n)}function _v(e){return new this(e).exp()}function Nv(e){return H(e=new this(e),e.e+1,3)}function Sv(){var e,n,t=new this(0);for(te=!1,e=0;e<arguments.length;)if(n=new this(arguments[e++]),n.d)t.d&&(t=t.plus(n.times(n)));else{if(n.s)return te=!0,new this(1/0);t=n}return te=!0,t.sqrt()}function Ed(e){return e instanceof K||e&&e.toStringTag===Sd||!1}function Tv(e){return new this(e).ln()}function Iv(e,n){return new this(e).log(n)}function wv(e){return new this(e).log(2)}function Mv(e){return new this(e).log(10)}function kv(){return Md(this,arguments,-1)}function Cv(){return Md(this,arguments,1)}function Av(e,n){return new this(e).mod(n)}function Rv(e,n){return new this(e).mul(n)}function Pv(e,n){return new this(e).pow(n)}function Dv(e){var n,t,i,r,o=0,s=new this(1),a=[];if(e===void 0?e=this.precision:Pn(e,1,Ti),i=Math.ceil(e/X),this.crypto)if(crypto.getRandomValues)for(n=crypto.getRandomValues(new Uint32Array(i));o<i;)r=n[o],r>=429e7?n[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=r%1e7;else if(crypto.randomBytes){for(n=crypto.randomBytes(i*=4);o<i;)r=n[o]+(n[o+1]<<8)+(n[o+2]<<16)+((n[o+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(n,o):(a.push(r%1e7),o+=4);o=i/4}else throw Error(Nd);else for(;o<i;)a[o++]=Math.random()*1e7|0;for(i=a[--o],e%=X,i&&e&&(r=tn(10,X-e),a[o]=(i/r|0)*r);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=X)a.shift();for(i=1,r=a[0];r>=10;r/=10)i++;i<X&&(t-=X-i)}return s.e=t,s.d=a,s}function $v(e){return H(e=new this(e),e.e+1,this.rounding)}function Ov(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function Lv(e){return new this(e).sin()}function Fv(e){return new this(e).sinh()}function qv(e){return new this(e).sqrt()}function Vv(e,n){return new this(e).sub(n)}function Bv(){var e=0,n=arguments,t=new this(n[e]);for(te=!1;t.s&&++e<n.length;)t=t.plus(n[e]);return te=!0,H(t,this.precision,this.rounding)}function Jv(e){return new this(e).tan()}function zv(e){return new this(e).tanh()}function Uv(e){return H(e=new this(e),e.e+1,1)}R[Symbol.for("nodejs.util.inspect.custom")]=R.toString;R[Symbol.toStringTag]="Decimal";var K=R.constructor=Ad(Ql);va=new K(va);_a=new K(_a);var Ii=["number","finite_number","complex","finite_complex","imaginary","real","finite_real","rational","finite_rational","integer","finite_integer","non_finite_number"],nc=["indexed_collection","list","tuple"],wa=[...nc,"collection","set","record","dictionary"],Ma=["scalar",...Ii,"boolean","string"],tc=["value",...wa,...Ma],ic=["expression","symbol","function",...tc],Yt=["any","unknown","nothing","never","error",...ic];function Rd(e){return typeof e!="string"?!1:Yt.includes(e)}function Qt(e){return typeof e=="string"?Yt.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 Dd=3,$d=1,Od=2,jv=4,Gv=5,Zv=6,Hv=7,Wv=8,Yv=9,Qv=10,Xv=11;function _e(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=`!${_e(e.type,Dd)}`;break;case"union":t=e.types.map(u=>_e(u,$d)).join(" | ");break;case"intersection":t=e.types.map(u=>_e(u,Od)).join(" & ");break;case"expression":t=`expression<${Pd(e.operator)}>`;break;case"symbol":t=`symbol<${Pd(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"&&Ii.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<${_e(e.elements)}>`:t=`vector<${_e(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<${_e(e.elements)}>`:t=`matrix<${_e(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<${_e(e.elements)}${u}>`}break;case"record":t=`record<${Object.entries(e.elements).map(([u,l])=>`${u}: ${_e(l)}`).join(", ")}>`;break;case"dictionary":t=`dictionary<${_e(e.values)}>`;break;case"set":t=`set<${_e(e.elements)}>`;break;case"collection":t=`collection<${_e(e.elements)}>`;break;case"indexed_collection":t=`indexed_collection<${_e(e.elements)}>`;break;case"tuple":if(e.elements.length===0)t="tuple";else if(e.elements.length===1){let[u]=e.elements;t=`tuple<${jr(u)}>`}else t="tuple<"+e.elements.map(u=>jr(u)).join(", ")+">";break;case"signature":let r=e.args?e.args.map(u=>jr(u)).join(", "):"",o=e.optArgs?e.optArgs.map(u=>jr(u)+"?").join(", "):"",s=e.variadicArg?e.variadicMin===0?`${jr(e.variadicArg)}*`:`${jr(e.variadicArg)}+`:"";t=`(${[r,o,s].filter(u=>u).join(", ")}) -> ${_e(e.result)}`;break;default:t="error"}return n>0&&n>Kv(e.kind)?`(${t})`:t}function jr(e){return e.name?`${e.name}: ${_e(e.type)}`:_e(e.type)}function Pd(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`\`${e}\``}function Kv(e){switch(e){case"negation":return Dd;case"union":return $d;case"intersection":return Od;case"list":return jv;case"record":return Gv;case"dictionary":return Zv;case"set":return Hv;case"collection":case"indexed_collection":return Wv;case"tuple":return Yv;case"signature":return Qv;case"value":return Xv;default:return 0}}function e2(e,n){if(e===n)return 0;if(e.length===0)return n.length;if(n.length===0)return e.length;let t=Array.from({length:e.length+1},(r,o)=>o),i=new Array(e.length+1);for(let r=1;r<=n.length;r++){i[0]=r;for(let o=1;o<=e.length;o++){let s=e[o-1]===n[r-1]?0:1;i[o]=Math.min(t[o]+1,i[o-1]+1,t[o-1]+s)}[t,i]=[i,t]}return t[e.length]}function ka(e,n){let i=null,r=1/0,o=e.length;for(let s of n){if(Math.abs(o-s.length)>7)continue;let a=e2(e,s);if(a===0)return s;a<=7&&a<r&&(r=a,i=s)}return i}var Ca=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===`
|
|
5
|
+
`?(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 Aa=class{lexer;typeResolver;current;constructor(n,t){this.lexer=new Ca(n),this.typeResolver=t?.typeResolver??{forward:()=>{},resolve:()=>{},get names(){return[]}},this.current=this.lexer.consumeToken()}error(n,t){this.errorAtToken(this.current,n,t)}errorAtToken(n,t,i){let r=this.lexer.input,s=r.split(`
|
|
6
|
+
`)[n.line-1]||r,a=n.column,u=" ".repeat(Math.max(0,a-1))+"^",l=["","Invalid type",`| ${s}`,`| ${u}`,"|",`| ${t}`];throw i&&l.push(`| ${i}`),l.push(""),new Error(l.join(`
|
|
7
|
+
`))}advance(){let n=this.current;return this.current=this.lexer.consumeToken(),n}match(n){return this.current.type===n?(this.advance(),!0):!1}expect(n){return this.current.type!==n&&this.error(`Expected ${n}, got ${this.current.type}`),this.advance()}createNode(n,t={}){return{kind:n,position:this.current.position,line:this.current.line,column:this.current.column,...t}}parseType(){this.checkForNakedFunctionSignature();let n=this.parseUnionType();if(n||this.error("Expected a type"),this.current.type!=="EOF")if(this.current.type==="->"||this.current.type==="+"||this.current.type==="*"||this.current.type==="?")this.error("Function signatures must be enclosed in parentheses","For example `(x: number) -> number`");else if(this.current.type==="("){let t=this.lexer.input;t.includes("set(")||t.includes("collection(")||t.includes("list(")||t.includes("tuple(")?t.includes("set(")?this.error("Use `set<integer>` instead of `set(integer)`."):t.includes("collection(")?this.error("Use `collection<type>` instead of `collection(type)`.","For example `collection<number>`"):t.includes("list(")?this.error("Use `list<type>` instead of `list(type)`.","For example `list<number>`"):t.includes("tuple(")&&this.error("Use `tuple<type1, type2>` instead of `tuple(type1, type2)`.","For example `tuple<string, number>`"):this.error("Unexpected token after type")}else this.error("Unexpected token after type");return n}checkForNakedFunctionSignature(){if(this.current.type==="IDENTIFIER"){let n=this.lexer.saveState(),t=this.current;try{let i=this.current;if(this.advance(),this.current.type===":"){this.advance();let r=!1,o=0,s=10;for(;this.current.type!=="EOF"&&o<s;){if(this.current.type==="->"){r=!0;break}if(this.current.type==="+"||this.current.type==="*"||this.current.type==="?"){if(this.advance(),this.current.type==="->"){r=!0;break}o++}this.advance(),o++}r&&(this.lexer.restoreState(n),this.current=t,this.errorAtToken(i,"Function signatures must be enclosed in parentheses","For example `(z: string*) -> boolean`"))}this.lexer.restoreState(n),this.current=t}catch(i){if(this.lexer.restoreState(n),this.current=t,i instanceof Error&&i.message.includes("Function signatures must be enclosed"))throw i}}}parseUnionType(){let n=this.parseIntersectionType();if(!n)return;let t=[n];for(;this.match("|");){let i=this.parseIntersectionType();i||this.error("Expected type after |"),t.push(i)}return t.length===1?t[0]:this.createNode("union",{types:t})}parseIntersectionType(){let n=this.parsePrimaryType();if(!n)return;let t=[n];for(;this.match("&");){let i=this.parsePrimaryType();i||this.error("Expected type after &"),t.push(i)}return t.length===1?t[0]:this.createNode("intersection",{types:t})}parsePrimaryType(){if(this.match("!")){let n=this.parsePrimaryType();return n||this.error("Expected type after !"),this.createNode("negation",{type:n})}if(this.current.type==="("){let n=this.parseFunctionSignature();if(n)return n;if(this.match("(")){let t=this.parseUnionType();if(t||this.error("Expected type after ("),this.current.type===","){let i=[this.createNode("named_element",{name:void 0,type:t})];for(;this.match(",");){let r=this.parseUnionType();r||this.error("Expected type after ,"),i.push(this.createNode("named_element",{name:void 0,type:r}))}return this.expect(")"),this.createNode("tuple",{elements:i})}return this.expect(")"),this.createNode("group",{type:t})}}return this.parseListType()||this.parseTupleType()||this.parseRecordType()||this.parseDictionaryType()||this.parseSetType()||this.parseCollectionType()||this.parseExpressionType()||this.parseSymbolType()||this.parseNumericType()||this.parsePrimitiveType()||this.parseValue()||this.parseTypeReference()}isFunctionSignature(){let n=this.lexer.saveState(),t=this.current;this.advance();let i=1;for(;i>0&&this.current.type!=="EOF";)this.current.type==="("?i++:this.current.type===")"&&i--,this.advance();let r=this.current.type==="->";return this.lexer.restoreState(n),this.current=t,r}parseFunctionSignature(){if(this.current.type!=="("||!this.isFunctionSignature())return;let n=[];if(this.advance(),!this.match(")")){do{let s=this.parseArgument();s||this.error("Expected argument"),n.push(s)}while(this.match(","));this.expect(")")}this.expect("->");let t=this.parseUnionType();t||this.error("Expected return type after ->");let i=n.some(s=>s.modifier==="optional"),r=n.some(s=>s.modifier==="variadic_zero"||s.modifier==="variadic_one"),o=n.filter(s=>s.modifier==="variadic_zero"||s.modifier==="variadic_one").length;return i&&r&&this.error("Variadic arguments cannot be used with optional arguments"),o>1&&this.error("There can be only one variadic argument"),this.createNode("function_signature",{arguments:n,returnType:t})}parseArgument(){let n=this.parseNamedElement();if(!n)return;let t;return this.match("?")?t="optional":this.match("*")?t="variadic_zero":this.match("+")&&(t="variadic_one"),this.createNode("argument",{element:n,modifier:t})}parseNamedElement(){let n;if(this.current.type==="IDENTIFIER"||this.current.type==="VERBATIM_STRING"){let i=this.current;if(this.lexer.peekToken().type===":"){n=i.value,this.advance(),this.advance();let o=this.parseUnionType();return o?this.createNode("named_element",{name:n,type:o}):void 0}}let t=this.parseUnionType();if(t)return this.createNode("named_element",{name:void 0,type:t})}parseListType(){if(this.current.type==="IDENTIFIER"){let n=this.current,i=this.lexer.peekToken().type==="<";switch(n.value){case"list":return i?(this.advance(),this.parseListTypeImpl()):void 0;case"vector":return i?(this.advance(),this.parseVectorType()):(this.advance(),this.createNode("list",{elementType:this.createNode("primitive",{name:"number"}),dimensions:void 0}));case"matrix":return i?(this.advance(),this.parseMatrixType()):(this.advance(),this.createNode("matrix",{elementType:this.createNode("primitive",{name:"number"}),dimensions:[this.createNode("dimension",{size:-1}),this.createNode("dimension",{size:-1})]}));case"tensor":return i?(this.advance(),this.parseTensorType()):(this.advance(),this.createNode("list",{elementType:this.createNode("primitive",{name:"number"}),dimensions:void 0}));default:return}}}parseListTypeImpl(){let n=this.createNode("primitive",{name:"any"}),t;if(this.match("<")){if(t=this.parseDimensionWithX(),t||(t=this.parseDimensions()),!t){let i=this.parseUnionType();i&&(n=i,this.match("^")&&(t=this.parseDimensionWithX(),t||(t=this.parseDimensions())))}this.expect(">")}return this.createNode("list",{elementType:n,dimensions:t})}parseVectorType(){let n=this.createNode("primitive",{name:"number"}),t;if(this.match("<")){if(this.current.type==="NUMBER_LITERAL")t=parseInt(this.advance().value);else{let i=this.parseUnionType();i&&(n=i,this.match("^")&&(this.current.type==="NUMBER_LITERAL"?t=parseInt(this.advance().value):this.error("Expected number after ^")))}this.expect(">")}return this.createNode("vector",{elementType:n,size:t})}parseMatrixType(){let n=this.createNode("primitive",{name:"number"}),t;if(this.match("<")){if(t=this.parseDimensionWithX(),t||(t=this.parseDimensions()),!t){let i=this.parseUnionType();i&&(n=i,this.match("^")&&(t=this.parseDimensionWithX(),t||(t=this.parseDimensions())))}this.expect(">")}else t=[this.createNode("dimension",{size:null}),this.createNode("dimension",{size:null})];return this.createNode("matrix",{elementType:n,dimensions:t})}parseTensorType(){let n=this.createNode("primitive",{name:"number"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("tensor",{elementType:n})}parseDimensions(){let n=[],t=this.parseDimension();if(t){for(n.push(t);this.match("x");){let i=this.parseDimension();i||this.error("Expected dimension after x"),n.push(i)}return n}}parseDimension(){if(this.match("?"))return this.createNode("dimension",{size:null});if(this.current.type==="NUMBER_LITERAL"){let n=parseInt(this.advance().value);return this.createNode("dimension",{size:n})}}parseDimensionWithX(){if(this.current.type==="NUMBER_LITERAL"){let n=[],t=parseInt(this.advance().value);if(n.push(this.createNode("dimension",{size:t})),this.current.type==="IDENTIFIER"&&this.current.value.startsWith("x")){let i=this.current.value,r=i.match(/x(\d+)/g);if(r&&r.join("")===i){this.advance();for(let o of r){let s=parseInt(o.substring(1));n.push(this.createNode("dimension",{size:s}))}}else(i==="x"||i.startsWith("x"))&&this.error("Expected a positive integer literal or `?` after x. For example: `2x3` or `2x?`")}if(n.length>1)return n}}parseTupleType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="tuple"){if(this.lexer.peekToken().type!=="<")return;this.advance(),this.expect("<");let t=[];if(this.current.type!==">"){let i=this.parseNamedElement();i||this.error("Expected tuple element"),t.push(i);let r=i.name!==void 0;for(;this.match(",");){let o=this.parseNamedElement();o||this.error("Expected tuple element"),r&&!o.name&&this.error("All tuple elements should be named, or none. Previous elements were named, but this one isn't."),!r&&o.name&&this.error("All tuple elements should be named, or none. Previous elements were not named, but this one is."),t.push(o)}}return this.expect(">"),this.createNode("tuple",{elements:t})}}parseRecordType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="record"){this.advance();let n=[];if(this.match("<")){if(this.current.type!==">")do{let t=this.parseRecordEntry();t||this.error("Expected record entry"),n.push(t)}while(this.match(","));this.expect(">")}return this.createNode("record",{entries:n})}}parseRecordEntry(){let n;if(this.current.type==="IDENTIFIER")n=this.advance().value;else if(this.current.type==="VERBATIM_STRING")n=this.advance().value;else return;this.expect(":");let t=this.parseUnionType();return t||this.error("Expected value type"),this.createNode("record_entry",{key:n,valueType:t})}parseDictionaryType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="dictionary"){this.advance();let n=this.createNode("primitive",{name:"any"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("dictionary",{valueType:n})}}parseSetType(){if(this.current.type==="IDENTIFIER"&&this.current.value==="set"){this.advance();let n=this.createNode("primitive",{name:"any"});if(this.match("<")){let t=this.parseUnionType();t&&(n=t),this.expect(">")}return this.createNode("set",{elementType:n})}}parseCollectionType(){if(this.current.type==="IDENTIFIER"){let n=this.current.value==="indexed_collection",t=this.current.value==="collection";if(n||t){this.advance();let i=this.createNode("primitive",{name:"any"});if(this.match("<")){let r=this.parseUnionType();r&&(i=r),this.expect(">")}return this.createNode("collection",{elementType:i,indexed:n})}}}parseExpressionType(){if(this.current.type==="IDENTIFIER"&&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(Yt.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 Ld(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 rc=class{typeResolver;constructor(n){this.typeResolver=n??{forward:()=>{},resolve:()=>{},get names(){return[]}}}buildType(n){return Ld(n,this)}visitFunctionSignature(n){let t=[],i=[],r,o;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,o=0;break;case"variadic_one":r=l,o=1;break;default:t.push(l);break}}let s=this.buildType(n.returnType),a={kind:"signature",args:t.length>0?t:void 0,result:s};return i.length>0&&(a.optArgs=i),r&&(a.variadicArg=r,a.variadicMin=o),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 Fd(e,n){return new rc(n).buildType(e)}function Q(e,n){if(e!==void 0){if(Qt(e))return e;if(typeof e=="string")try{let i=new Aa(e,{typeResolver:n}).parseType();return Fd(i,n)}catch(t){throw new Error(`Failed to parse type "${e}": ${t instanceof Error?t.message:String(t)}`)}}}var n2={number:Ii,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:Yt,unknown:[],nothing:[],never:[],error:[],value:tc,scalar:Ma,collection:wa,indexed_collection:nc,list:[],set:[],tuple:[],record:[],dictionary:[],function:[],symbol:[],boolean:[],string:[],expression:ic};function es(e,n){return n==="any"||e==="never"?!0:e==="unknown"||n==="unknown"?!1:e===n?!0:n2[n].includes(e)}function L(e,n){if(typeof e=="string"&&!Yt.includes(e)&&(e=Q(e)),typeof n=="string"&&!Yt.includes(n)&&(n=Q(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"?es(e,n):e.kind==="value"?typeof e.value=="boolean"?n==="boolean":typeof e.value=="number"?Number.isInteger(e.value)?es("integer",n):es("number",n):typeof e.value=="boolean"?es("boolean",n):typeof e.value=="string"?es("string",n):!1:e.kind==="union"?e.types.every(t=>L(t,n)):e.kind==="intersection"?e.types.some(t=>L(t,n)):e.kind==="negation"?!L(e.type,n):e.kind==="numeric"?!!L(e.type,n):n==="number"?qd(e):n==="symbol"?oc(e):n==="expression"?t2(e):n==="function"?Ud(e):n==="scalar"?Vd(e):n==="value"?zd(e):n==="indexed_collection"?Jd(e):n==="collection"?Bd(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=>L(t,i))):n.types.some(t=>L(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"?oc(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 L(e,n.def)}if(e.kind==="union")return e.types.some(t=>L(t,n));if(e.kind==="intersection"&&n.kind==="intersection")return n.types.every(t=>e.types.some(i=>L(i,t)));if(e.kind==="intersection")return e.types.every(t=>L(t,n));if(n.kind==="intersection")return n.types.every(t=>L(e,t));if(e.kind==="signature"&&n.kind==="signature"){if(!L(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(!L(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(!L(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||!L(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(!L(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(!L(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(!L(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)||!L(e.elements[t],n.elements[t]))return!1;return!0}if(e.kind==="dictionary"&&n.kind==="dictionary")return L(e.values,n.values);if(n.kind==="indexed_collection")return e.kind==="indexed_collection"||e.kind==="list"?L(e.elements,n.elements):e.kind==="tuple"?e.elements.every(t=>L(t.type,n.elements)):!1;if(n.kind==="collection"){if(e.kind==="collection"||e.kind==="indexed_collection"||e.kind==="list")return L(e.elements,n.elements);if(e.kind==="tuple")return e.elements.every(t=>L(t.type,n.elements));if(e.kind==="set")return L(e.elements,n.elements);if(e.kind==="dictionary")return L({kind:"tuple",elements:[{type:"string"},{type:e.values}]},n.elements);if(e.kind==="record")return L({kind:"tuple",elements:[{type:"string"},{type:Se(...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(!L(i.type,r.type)||i.name!==r.name)return!1}return!0}if(n.kind==="list"&&e.kind==="list"){if(!L(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!(!L(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!!L(e.elements,n.elements);if(e.kind==="negation"&&n.kind==="negation")return L(e.type,n.type);if(n.kind==="negation")return!L(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 L("boolean",n);if(typeof e.value=="number")return Number.isInteger(e.value)?L("integer",n):L("real",n);if(typeof e.value=="string")return L("string",n)}return!1}function qd(e){return typeof e=="string"?Ii.includes(e):e.kind==="value"?typeof e.value=="number":e.kind==="numeric"}function Vd(e){return qd(e)?!0:typeof e=="string"?Ma.includes(e):e.kind==="value"?["string","boolean","number"].includes(typeof e.value):!1}function Bd(e){return Jd(e)?!0:typeof e=="string"?wa.includes(e):["collection","set","record","dictionary"].includes(e.kind)}function Jd(e){return typeof e=="string"?!1:["indexed_collection","list","tuple"].includes(e.kind)}function zd(e){return Vd(e)||Bd(e)}function Ud(e){return e==="function"||typeof e!="string"&&e.kind==="signature"}function t2(e){return typeof e=="string"&&["expression","symbol","function"].includes(e)||zd(e)||Ud(e)||oc(e)?!0:typeof e=="string"?!1:e.kind==="expression"}function oc(e){return e==="symbol"?!0:typeof e=="string"?!1:e.kind==="symbol"?!0:e.kind==="expression"?e.operator==="Symbol":!1}function i2(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"||L(e,n)?e:L(n,e)?n:jd(e,n)}function r2(e,n){return e===n?e:e==="any"||n==="any"?"any":e==="never"?n:n==="never"?e:e==="unknown"?n:n==="unknown"?e:e==="nothing"?n:n==="nothing"?e:L(e,n)?n:L(n,e)?e:jd(e,n)}function wi(...e){return e.length===0?"nothing":e.length===1?e[0]:e.reduce((n,t)=>i2(n,t))}function Se(...e){return e.length===0?"nothing":e.length===1?e[0]:e.reduce((n,t)=>r2(n,t))}function jd(e,n){return e===n?e:e==="any"||n==="any"?"any":e==="never"?n:n==="never"?e:e==="unknown"?n:n==="unknown"?e:e==="nothing"?n:n==="nothing"?e:Oe(e,n,"non_finite_number")?"non_finite_number":Oe(e,n,"finite_integer")?"finite_integer":Oe(e,n,"integer")?"integer":Oe(e,n,"finite_rational")?"finite_rational":Oe(e,n,"rational")?"rational":Oe(e,n,"finite_real")?"finite_real":Oe(e,n,"real")?"real":Oe(e,n,"imaginary")?"imaginary":Oe(e,n,"finite_complex")?"finite_complex":Oe(e,n,"complex")?"complex":Oe(e,n,"finite_number")?"finite_number":Oe(e,n,"number")?"number":Oe(e,n,"list")?"list":Oe(e,n,"record")?"record":Oe(e,n,"dictionary")?"dictionary":Oe(e,n,"set")?"set":Oe(e,n,"tuple")?"tuple":Oe(e,n,"indexed_collection")?"indexed_collection":Oe(e,n,"collection")?"collection":Oe(e,n,"scalar")?"scalar":Oe(e,n,"value")?"value":Oe(e,n,"function")?"function":Oe(e,n,"expression")?"expression":"any"}function Oe(e,n,t){return!!(L(e,t)&&L(n,t))}function Ra(e){return e=typeof e=="string"?Q(e):e,typeof e!="string"&&e.kind==="signature"}function jn(e){if(e){if(e==="function")return"any";if(typeof e!="string"&&e.kind==="signature")return e.result}}function Dn(e){if(e==="collection"||e==="indexed_collection"||e==="list"||e==="set"||e==="tuple"||e==="dictionary"||e==="record")return"any";if(typeof e!="string"){if(e.kind==="collection"||e.kind==="indexed_collection"||e.kind==="list"||e.kind==="set")return e.elements;if(e.kind==="tuple")return Se(...e.elements.map(n=>n.type));if(e.kind==="dictionary")return Q(`tuple<string, ${e.values}>`);if(e.kind==="record")return Q(`tuple<string, ${_e(Se(...Object.values(e.elements)))}>`)}}function Gd(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}var V=class e{static unknown=new e("unknown");static number=new e("number");static non_finite_number=new e("non_finite_number");static finite_number=new e("finite_number");static finite_integer=new e("finite_integer");static finite_real=new e("finite_real");static string=new e("string");static dictionary=new e("dictionary");static setNumber=new e("set<number>");static setComplex=new e("set<complex>");static setImaginary=new e("set<imaginary>");static setReal=new e("set<real>");static setRational=new e("set<rational>");static setFiniteInteger=new e("set<finite_integer>");static setInteger=new e("set<integer>");type;static widen(...n){return new e(Se(...n.map(t=>t instanceof e?t.type:t)))}static narrow(...n){return new e(wi(...n.map(t=>t instanceof e?t.type:t)))}constructor(n,t){typeof n=="string"?this.type=Q(n,t):this.type=n}matches(n){return n instanceof e?L(this.type,n.type):L(this.type,n)}is(n){return L(this.type,n)&&L(n,this.type)}get isUnknown(){return this.type==="unknown"}toString(){return _e(this.type)}toJSON(){return _e(this.type)}[Symbol.toPrimitive](n){return n==="string"?this.toString():null}valueOf(){return _e(this.type)}};function Zd(e,n){if(e.length>6)return`${e.length}${Hd(e.length)}`,[];let t=[],i=(r,o=[])=>{if(r.length===0)(!n||n(o))&&t.push([...o]);else for(let s=0;s<r.length;s++){let a=r.slice(),u=a.splice(s,1);i(a.slice(),o.concat(u))}};return i(e),t}function Hd(e){return e<=1?1:e*Hd(e-1)}function Wd(e){for(let n in e)n.startsWith("_")&&e.hasOwnProperty(n)&&Object.defineProperty(e,n,{enumerable:!1,configurable:!0,writable:!0,value:e[n]})}function sc(e,n,t={}){let{contract:i=.125,step:r=1,power:o=2,atol:s=1e-16,rtol:a=s>0?0:Math.sqrt(Number.EPSILON),maxeval:u=1e6,breaktol:l=2}=t;if(!isFinite(n))return sc(b=>e(1/b),1/n,{rtol:a,atol:s,maxeval:u,contract:Math.abs(i)>1?1/i:i,step:1/r,power:o});let c=r,f=Math.pow(1/i,o),p=e(n+c),d=[p],g=1/0,h=1;for(;h<u;){h+=1,c*=i,d.push(e(n+c));let b=f,y=1/0;for(let x=d.length-2;x>=0;x--){let N=d[x];d[x]=d[x+1]+(d[x+1]-d[x])/(b-1);let T=Math.abs(d[x]-N);y=Math.min(y,T),T<g&&(p=d[x],g=T),b*=f}if(y>l*g||!isFinite(y)||g<=Math.max(a*Math.abs(p),s))break}return[p,g]}function Re(e){if(typeof e=="bigint")return e;if(typeof e=="number")return Number.isInteger(e)?e>=Number.MAX_SAFE_INTEGER&&e<=Number.MAX_SAFE_INTEGER?BigInt(e):Re(e.toString()):null;if(e instanceof K)return e.isInteger()?BigInt(e.toFixed(0)):null;let n=e.toLowerCase(),t=n.match(/^([+-]?[0-9]+)e([+-]?[0-9]+)$/);if(t){let r=parseInt(t[2]);if(r<0)return null;n=t[1]+"0".repeat(r)}if(n.indexOf(".")>=0||!/^[+-]?[0-9]+$/.test(n))return null;try{return BigInt(n)}catch(r){return console.error(r.message),null}}var Yd=0x3ffffffffffe5,ac=new Set([2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919]),Qd=7919;function Xt(e){if(Number.isInteger(e)&&e>=0&&e<Number.MAX_SAFE_INTEGER,e<=3)return{[e]:1};let n={},t=0;for(;e%2===0;)t+=1,e/=2;for(t>0&&(n[2]=t),t=0;e%3===0;)t+=1,e/=3;t>0&&(n[3]=t);let i=!1;for(;!i;){if(e===1)return n;let r=Math.sqrt(e);i=!0;for(let o=6;o<=r+6;o+=6){if(e%(o-1)===0){n[o-1]=(n[o-1]??0)+1,e/=o-1,i=!1;break}if(e%(o+1)===0){n[o+1]=(n[o+1]??0)+1,e/=o+1,i=!1;break}}}return n[e]!==void 0?n[e]+=1:n[e]=1,n}function uc(e){if(!Number.isInteger(e)||!Number.isFinite(e)||Number.isNaN(e)||e<=1)return!1;if(e<=Qd)return ac.has(e);for(let n of ac)if(e%n===0)return!1;return e<Yd?e===o2(e)||void 0:a2(e,30)?void 0:!1}function o2(e){if(e===1)return 1;if(e%2===0)return 2;if(e%3===0)return 3;if(e%5===0)return 5;let n=Math.floor(Math.sqrt(e)),t=7;for(;t<=n;){if(e%t===0)return t;if(e%(t+4)===0)return t+4;if(e%(t+6)===0)return t+6;if(e%(t+10)===0)return t+10;if(e%(t+12)===0)return t+12;if(e%(t+16)===0)return t+16;if(e%(t+22)===0)return t+22;if(e%(t+24)===0)return t+24;t+=30}return e}function Xd(e){if(e<=1)return!1;if(e<=Qd)return uc(Number(e));for(let n of ac)if(e%BigInt(n)===BigInt(0))return!1;return e<Yd&&(e=s2(e)),u2(e,30)?void 0:!1}function s2(e){if(e===BigInt(1))return BigInt(1);if(e%BigInt(2)===BigInt(0))return BigInt(2);if(e%BigInt(3)===BigInt(0))return BigInt(3);if(e%BigInt(5)===BigInt(0))return BigInt(5);let n=BigInt(Math.floor(Math.sqrt(Number(e)))),t=BigInt(7);for(;t<=n;){if(e%t===BigInt(0))return t;if(e%(t+BigInt(4))===BigInt(0))return t+BigInt(4);if(e%(t+BigInt(6))===BigInt(0))return t+BigInt(6);if(e%(t+BigInt(10))===BigInt(0))return t+BigInt(10);if(e%(t+BigInt(12))===BigInt(0))return t+BigInt(12);if(e%(t+BigInt(16))===BigInt(0))return t+BigInt(16);if(e%(t+BigInt(22))===BigInt(0))return t+BigInt(22);if(e%(t+BigInt(24))===BigInt(0))return t+BigInt(24);t+=BigInt(30)}return e}function a2(e,n){let t=0,i=e-1;for(;i%2===0;)i/=2,++t;e:do{let r=Math.pow(2+Math.floor(Math.random()*(e-3)),i)%e;if(!(r===1||r===e-1)){for(let o=t-1;o--;){if(r=r*r%e,r===1)return!1;if(r===e-1)continue e}return!1}}while(--n);return!0}function u2(e,n){let t=0,i=e-BigInt(1);for(;i%BigInt(2)===BigInt(0);)i=i/BigInt(2),++t;e:do{let r=BigInt(2+Math.floor(Math.random()*(Number(e)-3)))**i%e;if(!(r===BigInt(1)||r===e-BigInt(1))){for(let o=t-1;o--;){if(r=r*r%e,r===BigInt(1))return!1;if(r===e-BigInt(1))continue e}return!1}}while(--n);return!0}var P5=[BigInt(4),BigInt(2),BigInt(4),BigInt(2),BigInt(4),BigInt(6),BigInt(2),BigInt(6)];var lc=21,l2=53,ht=Math.floor(Math.log10(Math.pow(2,l2))),Gr=1e-10,re=1e6,Kd=1024,rr=1e4;function Zr(e,n){if(e>=Number.MAX_SAFE_INTEGER)return[1,e];if(e===0)return[0,0];if(e===1)return[1,1];if(Number.isInteger(e)&&e>0&&e<Number.MAX_SAFE_INTEGER,n===2){let o=[[0,0],[1,1],[1,2],[1,3],[2,1],[1,5],[1,6],[1,7],[1,8],[3,1],[1,10],[1,11],[2,3],[1,13],[1,14],[1,15],[4,1],[1,17],[3,2],[1,19],[1,20]][e];if(o)return o}let t=Xt(e),i=BigInt(1),r=BigInt(1);for(let o of Object.keys(t)){let s=BigInt(parseInt(o)),a=BigInt(n);i=i*s**(BigInt(t[o])/a),r=r*s**(BigInt(t[o])%a)}return[Number(i),Number(r)]}function Pe(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 bt(e,n){if(e===0||n===0)return 0;let t=BigInt(e)*BigInt(n)/BigInt(Pe(e,n));return Number(t)}function ns(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 or(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 ts(e,n=Gr){return typeof e=="number"&&Math.abs(e)<=n?0:e}function eg(e,n,t=.1){return(e(n-4*t)/280-4*e(n-3*t)/105+e(n-2*t)/5-4*e(n-t)/5+4*e(n+t)/5-e(n+2*t)/5+4*e(n+3*t)/105-e(n+4*t)/280)/t}function ir(e,n,t=1){if(t===0){let o=ir(e,n,-1),s=ir(e,n,1);return o===void 0||s===void 0?NaN:Math.abs(o-s)>1e-5?NaN:(o+s)/2}let[i,r]=sc(e,n,{step:t>0?1:-1});return i}function*cc(){yield[0,1];for(let e=1;;e++)for(let n=0;n<=e;n++){let t=e-n;t!==0&&Pe(n,t)===1&&(yield[n,t],yield[-n,t])}}function*ng(){yield[0,1];for(let e=1;;e++)for(let n=0;n<=e;n++){let t=e-n;t!==0&&Pe(n,t)===1&&(yield[n,t])}}function*tg(){yield[0,0];for(let e=1;;e++)for(let n=0;n<=e;n++){let t=e-n;if(t===0||Pe(n,t)!==1)continue;let i=n/t;for(let r=0;r<=e;r++){let o=e-r;if(o===0||Pe(r,o)!==1)continue;let s=r/o;yield[i,s],yield[-i,s],yield[i,-s],yield[-i,-s]}}}function*ig(){yield 0;for(let e=1;;e++)yield e,yield-e}function rg(e){let n=e;return n!=null&&typeof n=="object"&&"_kind"in n&&typeof n._kind=="string"}function Pa(e){return rg(e)}function E(e){return e?._kind==="number"}function _(e,n){return e?._kind==="symbol"&&(n===void 0||e.symbol===n)}function m(e,n){return(e?._kind==="function"||e?._kind==="tensor")&&(n===void 0||e.operator===n)}function q(e){return e?._kind==="string"}function Mi(e){return e?._kind==="tensor"}function og(e){return rg(e)}function sg(e){return E(e)}function ag(e,n){return _(e,n)}function ug(e,n){return m(e,n)}function lg(e){return q(e)}function cg(e){return Mi(e)}function fg(e){return e?._kind==="dictionary"}function pg(e){return e?.isCollection===!0}function mg(e){return e?.isIndexedCollection===!0}function ce(e){return E(e)?e.numericValue:void 0}function v(e){return e?._kind==="symbol"?e.symbol:void 0}var dg=100;function Ve(e){return(e.isFiniteCollection??!1)&&e.isIndexedCollection}function c2(e,n){return typeof n=="number"?(n<0&&(n=0),{next(){return n===0?{done:!0,value:void 0}:(n--,{done:!1,value:e})}}):{next(){return{done:!1,value:e}}}}function fc(e){if(e.length===0)return{next(){return{done:!0,value:void 0}}};if(e.length===1){let r=e[0],o=r.each();if(!o){let s=!1;return{next(){return s?{done:s,value:void 0}:(s=!0,{done:!1,value:[r]})}}}return{next(){let s=o.next();return s.done?{done:!0,value:void 0}:{done:!1,value:[s.value]}}}}let n=Math.min(...e.map(r=>r.isCollection?r.count??1:1/0));if(n===0)return{next(){return{done:!0,value:void 0}}};let t=e.map(r=>r.isCollection?r.each():c2(r)),i=0;return{next(){if(i>=n)return{done:!0,value:void 0};let r=t.map(o=>o.next());return i+=1,{done:!1,value:r.map(o=>o.value)}}}}function gg(e,n,t){if(!(e.isFiniteCollection!==!0||n.isFiniteCollection!==!0)){for(let i of e.each())if(n.contains(i)!==!0)return!1;if(t){let i=e.count;if(i===void 0)return!1;let r=n.count;if(r===void 0||i===r)return!1}return!0}}function f2(e,n){if(m(e)){for(let t=0;t!==e.nops;t+=1)if(n(e.ops[t]))return t+1}}function p2(e,n){if(e.isIndexedCollection!==!0)return;let t=1,i=e.at(t);for(;i!==void 0;){if(n(i))return t;t+=1,i=e.at(t)}}function m2(e,n){if(e.isFiniteCollection===!0){if(e.isIndexedCollection)return e.indexWhere(t=>t.isSame(n))!==void 0;for(let t of e.each())if(t.isSame(n))return!0;return!1}}function Da(){return{isLazy:e=>!1,count:e=>m(e)?e.nops:0,isEmpty:e=>!m(e)||e.nops===0,isFinite:e=>!0,contains:(e,n)=>m(e)?e.ops.some(t=>t.isSame(n)):!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=1,t=e.nops;return{next:()=>n===t+1?{value:void 0,done:!0}:(n+=1,{value:e.ops[n-1-1],done:!1})}},subsetOf:gg,at:(e,n)=>{if(!(typeof n!="number"||!m(e))&&(n<0&&(n=e.nops+n+1),!(n<1||n>e.nops)))return e.ops[n-1]},indexWhere:f2,eltsgn:e=>{},elttype:e=>!m(e)||e.nops===0?"unknown":e.nops===1?e.ops[0].type.type:Se(...e.ops.map(n=>n.type.type))}}function $a(e){if(!e)return;if(!e.count||!e.iterator)throw new Error('A collection must have at least an "iterator" and a "count" handler');if(e.indexWhere&&e.at===void 0)throw new Error('A collection with an "indexWhere" handler must also have an "at" handler');let n={iterator:e.iterator,count:e.count,contains:e.contains??m2,isEmpty:e.isEmpty??(t=>{if(e.count(t)!==void 0)return e.count(t)===0}),isFinite:e.isFinite??(t=>{let i=e.count(t);if(i!==void 0)return Number.isFinite(i)}),subsetOf:e.subsetOf??gg};return e.isLazy&&(n.isLazy=e.isLazy),e.eltsgn&&(n.eltsgn=e.eltsgn),e.elttype&&(n.elttype=e.elttype),e.at&&(n.at=e.at,n.indexWhere=e.indexWhere??p2),n}function be(e,n,t=!0){let i=!t||e.every(o=>o.isCanonical)?e:e.map(o=>o.canonical);if(n){let o=a=>_(a,"Nothing")||a.operator===n||a.operator==="Sequence";if(i.every(a=>!o(a)))return i;let s=[];for(let a of i)_(a,"Nothing")||(m(a)&&(a.operator===n||a.operator==="Sequence")?s.push(...be(a.ops,n,t)):s.push(a));return s}if(i.every(o=>!(_(o,"Nothing")||o.operator==="Sequence")))return i;let r=[];for(let o of i)_(o,"Nothing")||(m(o,"Sequence")?r.push(...be(o.ops,n,t)):r.push(o));return r}function pc(e){if(e.every(t=>t.operator!=="Sequence"&&t.operator!=="Delimiter"))return e;let n=[];for(let t of e)if(!t.isValid)n.push(t);else if(m(t,"Delimiter"))if(t.op1.operator==="Sequence"){let i=m(t.op1)?t.op1.ops:[];i.length===0?n.push(t.engine.box(["Tuple"])):n.push(...pc(i))}else n.push(t.op1);else m(t,"Sequence")?n.push(...t.ops):n.push(t);return n}function Kt(e,n){let t={},i=e.context?.assumptions;if(!i)return t;for(let[r,o]of i.entries()){let s=r.operator;if(!s||s!=="Less"&&s!=="LessEqual"||!m(r))continue;let a=r.ops;if(a.length!==2)continue;let[u,l]=a;if(!l.isSame(0))continue;let c=s==="Less";if(m(u,"Negate")&&_(u.op1,n)){let f=e.Zero;(t.lowerBound===void 0||f.isGreater(t.lowerBound)===!0)&&(t.lowerBound=f,t.lowerStrict=c)}if(m(u,"Add")){let f=!1,p=0;for(let d of u.ops)if(m(d,"Negate")&&_(d.op1,n))f=!0;else if(E(d)){let g=typeof d.numericValue=="number"?d.numericValue:d.numericValue?.re;g!==void 0&&Number.isFinite(g)&&(p+=g)}if(f&&p!==0){let d=e.box(p);(t.lowerBound===void 0||d.isGreater(t.lowerBound)===!0)&&(t.lowerBound=d,t.lowerStrict=c)}}if(_(u,n)){let f=e.Zero;(t.upperBound===void 0||f.isLess(t.upperBound)===!0)&&(t.upperBound=f,t.upperStrict=c)}if(m(u,"Add")){let f=!1,p=0;for(let d of u.ops)if(_(d,n))f=!0;else if(E(d)){let g=typeof d.numericValue=="number"?d.numericValue:d.numericValue?.re;g!==void 0&&Number.isFinite(g)&&(p+=g)}if(f&&p!==0){let d=e.box(-p);(t.upperBound===void 0||d.isLess(t.upperBound)===!0)&&(t.upperBound=d,t.upperStrict=c)}}}return t}var mc;function yg(e){mc=e}var d2=[0,-1,1,Math.PI,Math.E,-Math.PI,-Math.E,.5,-.5],g2=41,h2=1e3;function xg(e,n){let i=e.engine.tolerance,r=[...new Set([...e.unknowns,...n.unknowns])],o=null,s=null;try{let p=mc(e);p.run&&(o=d=>hg(p.run(d)))}catch{}try{let p=mc(n);p.run&&(s=d=>hg(p.run(d)))}catch{}let a=(p,d)=>{let g=p.subs(d).N();return{re:g.re,im:g.im}},u=o??(p=>a(e,p)),l=s??(p=>a(n,p)),c=0,f=p=>{let d,g;try{d=u(p),g=l(p)}catch{return}if(Number.isNaN(d.re)||Number.isNaN(d.im)||Number.isNaN(g.re)||Number.isNaN(g.im))return;let h=bg(d.re,g.re,i);if(h===!1)return!1;let b=bg(d.im,g.im,i);if(b===!1)return!1;(h===!0||b===!0)&&c++};for(let p of d2){let d={};for(let h of r)d[h]=p;if(f(d)===!1)return!1}for(let p=0;p<g2;p++){let d={};for(let h of r)d[h]=(Math.random()-.5)*2*h2;if(f(d)===!1)return!1}if(c!==0)return!0}function hg(e){return typeof e=="number"?{re:e,im:0}:{re:e.re,im:e.im}}function bg(e,n,t){let i=Number.isFinite(e),r=Number.isFinite(n);if(!i&&!r)return;if(i!==r)return!1;let o=Math.abs(e-n),s=Math.max(1,Math.abs(e),Math.abs(n));return!(o>t*s)}var dc;function vg(e){dc=e}function sr(e,n){if(e===n)return!0;if(m(e))return e.operator!==n.operator||!m(n)||e.nops!==n.nops?!1:e.ops.every((t,i)=>sr(t,n.ops[i]));if(E(e)){if(!E(n))return!1;let t=e.numericValue,i=n.numericValue;return t===i?!0:typeof t=="number"?typeof i=="number"?t===i:i.eq(t):t.eq(i)}if(q(e)||q(n))return!q(e)||!q(n)?!1:e.string===n.string;if(_(e)||_(n))return!_(e)||!_(n)?!1:e.symbol===n.symbol;if(Mi(e)&&e.rank!==0){if(!Mi(n)||e.rank!==n.rank)return!1;for(let t=0;t<e.rank;t++)if(e.shape[t]!==n.shape[t])return!1;return e.tensor.equals(n.tensor)}return!1}function Oa(e,n){if(e.operatorDefinition?.eq){let r=e.operatorDefinition.eq(e,e.engine.box(n));if(r!==void 0)return r}if(typeof n!="number"&&n.operatorDefinition?.eq){let r=n.operatorDefinition.eq(n,e);if(r!==void 0)return r}e=e.N();let t=typeof n!="number"?n.N():e.engine.box(n);if(m(e)||m(t)){let r=e.operatorDefinition?.eq?.(e,t);return r!==void 0||(r=t.operatorDefinition?.eq?.(t,e),r!==void 0)?r:e.isSame(t)?!0:e.unknowns.length===0&&t.unknowns.length===0?e.isFinite&&t.isFinite?Eg(e.sub(t).simplify().N()):e.isNaN||t.isNaN?!1:!!(e.isInfinity&&t.isInfinity&&e.sgn===t.sgn):(e=dc(e).simplify(),t=dc(t).simplify(),sr(e,t)?!0:xg(e,t))}if(_(e)){let r=e.valueDefinition?.eq?.(t);if(r!==void 0)return r}if(_(t)){let r=t.valueDefinition?.eq?.(e);if(r!==void 0)return r}if(_(e)&&_(t))return e.symbol===t.symbol;let i=e.engine;if(E(e)&&E(t))return e.isFinite&&t.isFinite?Eg(e.sub(t)):e.isNaN||t.isNaN?!1:!!(e.isInfinity&&t.isInfinity&&e.sgn===t.sgn);if(i.ask(i.box(["Equal",e,t])).length>0)return!0;if(i.ask(i.box(["NotEqual",e,t])).length>0)return!1;if(!(e.unknowns.length>0||t.unknowns.length>0))return sr(e,t)}function Hr(e,n){if(E(e)){if(typeof n!="number"&&E(n)&&typeof n.numericValue=="number"&&(n=n.numericValue),typeof n=="number"){if(n===0){let o=e.sgn;return o===void 0?void 0:o==="zero"?"=":o==="positive"?">":o==="negative"?"<":o==="non-negative"?">=":o==="non-positive"?"<=":void 0}let r=e.numericValue;return typeof r=="number"?Math.abs(r-n)<=e.engine.tolerance?"=":r<n?"<":">":r.eq(n)?"=":r.lt(n)?"<":">"}if(!E(n)){if(_(n)){let r=Kt(e.engine,n.symbol),o=typeof e.numericValue=="number"?e.numericValue:e.numericValue.re;if(o!==void 0&&Number.isFinite(o)){if(r.lowerBound!==void 0){let a=r.lowerBound,u=E(a)?typeof a.numericValue=="number"?a.numericValue:a.numericValue.re:void 0;if(u!==void 0&&Number.isFinite(u)){if(u>o||u===o&&r.lowerStrict)return"<";if(u===o&&!r.lowerStrict)return"<="}}if(r.upperBound!==void 0){let a=r.upperBound,u=E(a)?typeof a.numericValue=="number"?a.numericValue:a.numericValue.re:void 0;if(u!==void 0&&Number.isFinite(u)){if(u<o||u===o&&r.upperStrict)return">";if(u===o&&!r.upperStrict)return">="}}let s=n.re;if(typeof s=="number"&&Number.isFinite(s)){let a=e.engine.tolerance;return Math.abs(o-s)<=a?"=":o<s?"<":">"}}}return}let t=e.numericValue,i=n.numericValue;return typeof t=="number"?i.eq(t)?"=":i.lt(t)?">":"<":t.eq(i)?"=":t.lt(i)?"<":">"}if(typeof n=="number"){if(_(e)){let t=Kt(e.engine,e.symbol);if(t.lowerBound!==void 0){let r=t.lowerBound,o=E(r)?typeof r.numericValue=="number"?r.numericValue:r.numericValue.re:void 0;if(o!==void 0&&Number.isFinite(o)){if(o>n||o===n&&t.lowerStrict)return">";if(o===n&&!t.lowerStrict)return">="}}if(t.upperBound!==void 0){let r=t.upperBound,o=E(r)?typeof r.numericValue=="number"?r.numericValue:r.numericValue.re:void 0;if(o!==void 0&&Number.isFinite(o)){if(o<n||o===n&&t.upperStrict)return"<";if(o===n&&!t.upperStrict)return"<="}}let i=e.re;if(typeof i=="number"&&Number.isFinite(i)){let r=e.engine.tolerance;return Math.abs(i-n)<=r?"=":i<n?"<":">"}}if(m(e)){if(n===0){let i=e.sgn;if(i==="zero")return"=";if(i==="positive")return">";if(i==="negative")return"<";if(i==="non-negative")return">=";if(i==="non-positive")return"<="}let t=e.re;if(typeof t=="number"&&Number.isFinite(t)){let i=e.engine.tolerance;return Math.abs(t-n)<=i?"=":t<n?"<":">"}}return}if(m(e)||m(n)){if(e.operatorDefinition?.eq?.(e,n)!==void 0)return"=";let i=e.sub(n).N();if(!E(i))return;if(typeof i.numericValue=="number")return i.numericValue===0?"=":i.numericValue<0?"<":">";let r=e.engine.tolerance;return i.numericValue.isZeroWithTolerance(r)?"=":i.numericValue.lt(0)?"<":">"}if(_(e)){if(_(n)&&e.symbol===n.symbol)return"=";let t=e.valueDefinition?.cmp?.(n);if(t)return t;if(e.valueDefinition?.eq?.(n)===!0)return"=";if(E(n)){let o=Kt(e.engine,e.symbol),s=typeof n.numericValue=="number"?n.numericValue:n.numericValue.re;if(s!==void 0&&Number.isFinite(s)){if(o.lowerBound!==void 0){let a=o.lowerBound,u=E(a)?typeof a.numericValue=="number"?a.numericValue:a.numericValue.re:void 0;if(u!==void 0&&Number.isFinite(u)){if(u>s||u===s&&o.lowerStrict)return">";if(u===s&&!o.lowerStrict)return">="}}if(o.upperBound!==void 0){let a=o.upperBound,u=E(a)?typeof a.numericValue=="number"?a.numericValue:a.numericValue.re:void 0;if(u!==void 0&&Number.isFinite(u)){if(u<s||u===s&&o.upperStrict)return"<";if(u===s&&!o.upperStrict)return"<="}}}}let r=e.re;if(typeof r=="number"&&Number.isFinite(r)){let o=typeof n=="number"?n:n.re;if(typeof o=="number"&&Number.isFinite(o)){let s=e.engine.tolerance;return Math.abs(r-o)<=s?"=":r<o?"<":">"}}return}if(q(e))return q(n)?e.string===n.string?"=":e.string<n.string?"<":">":void 0;if(Mi(e))return Mi(n)&&e.tensor.equals(n.tensor)?"=":void 0}function Eg(e){if(!E(e))return!1;let n=e.numericValue,t=e.engine;return typeof n=="number"?t.chop(n)===0:n.isZeroWithTolerance(t.tolerance)}function Qe(e){if(!e)return;if(e.operator==="Function"&&e.isCanonical||_(e))return e;if(m(e,"BuiltinFunction"))return e.op1;if(m(e,"Delimiter")){let o=e.op1;if(m(o,"Sequence"))if(o.nops===1)e=o;else return Qe(e.engine._fn("Block",o.ops,{canonical:!1}));return Qe(m(e)?e.op1:void 0)}if(m(e,"Function"))return Wr(e.engine,e.ops);e.operator;let n=e.engine,t=e.subs({_:"_1"}),i=1,r=[];for(;i<10;)t.has(`_${i}`)&&r.push(t.engine.symbol(`_${i}`,{canonical:!1})),i++;if(r.length===0){t.operator!=="Block"?t=n.function("Block",[t]):t=t.canonical;let o=t.unknowns;o.length>0&&(r=o.map(s=>n.symbol(s,{canonical:!1})))}return Wr(n,[t,...r])}function Wr(e,n){if(n.length===0)return;let t=n[0].operator==="Block"?n[0].canonical:e.function("Block",[n[0]]),i=n.slice(1).map(r=>_(r)?r:e.error("expected-a-symbol",r.toString()));t.isScoped;for(let r of i)_(r)&&!t.localScope.bindings.has(r.symbol)&&e.declare(r.symbol,{inferred:!0,type:"unknown"},t.localScope);return e._fn("Function",[t,...i])}function ei(e,n){let t=gc(e)?.(n);return t||e.engine.function("Apply",[e,...n])}function La(e,n){let t=e.Nothing;for(let i of n){let r=i.operator;if(r==="Return"&&m(i)){t=i.op1.evaluate();break}if((r==="Break"||r==="Continue")&&m(i)){t=e.box([r,i.op1.evaluate()]);break}t=i.evaluate()}return t}function _g(e,n){let t=[];for(let i of n){if(!i)continue;let r=e.bindings.get(i);r&&(t.push([i,r]),e.bindings.delete(i))}return t}function Ng(e,n){for(let[t,i]of n)e.bindings.set(t,i)}function Sg(e,n,t){if(n.operator==="Function"&&m(n)){let i=n.op1;if(i&&m(i)&&i.localScope){let r=new Set(n.ops.slice(1).map(u=>_(u)?u.symbol:"").filter(u=>u)),o=new Map;for(let[u,l]of i.localScope.bindings)r.has(u)&&o.set(u,l);let s={parent:t,bindings:o},a=e._fn("Block",i.ops,{scope:s});return e._fn("Function",[a,...n.ops.slice(1)])}return n}if(m(n)&&n.ops.length>0){let i=!1,r=n.ops.map(o=>{let s=Sg(e,o,t);return s!==o&&(i=!0),s});if(i)return e._fn(n.operator,r)}return n}function gc(e){let n=e.engine;if(_(e)){let a=e.symbol;return u=>n.function(a,u).evaluate()}let t=Qe(e);if(!t)throw new Error("Invalid function literal");e=t,e.operator,e.isCanonical;let i=e;if(i.ops.length===1)return i.ops[0],()=>i.ops[0].evaluate();let[r,...o]=i.ops;if(r.isScoped,!r.localScope)throw new Error("Function body must be a scoped Block expression");let s=r;return a=>{if(a.length>o.length)throw new Error(`Too many arguments for function "${e.toString()}": expected ${o.length}, got ${a.length}`);if(n.strict&&!a.every(b=>b.isValid))return;if(a.length<o.length){let b=new Set([...r.symbols,...o.map(G=>_(G)?G.symbol:"")]),y=o.slice(a.length).map((G,U)=>{let ge=`_${U+1}`,he=0;for(;b.has(ge);)ge=`_${U+1}_${he++}`;return b.add(ge),n.symbol(ge,{canonical:!1})}),x=Object.fromEntries(o.slice(a.length).map((G,U)=>[_(G)?G.symbol:"",y[U]])),N=a.map(G=>G.evaluate()),I={parent:s.localScope.parent??n.context.lexicalScope,bindings:new Map};for(let G=0;G<a.length;G++){let U=o[G],ge=_(U)?U.symbol:"";ge&&n.declare(ge,{value:N[G],inferred:!0},I)}let M=s.localScope,w=M.parent;M.parent=I;let k=o.slice(0,a.length).map(G=>_(G)?G.symbol:""),P=_g(M,k);n.pushScope(I);let F;try{F=La(n,s.ops)}finally{n.popScope(),M.parent=w,Ng(M,P)}return n.function("Function",[F.subs(x),...y])}let u=a.map(b=>b.evaluate()),c={parent:s.localScope.parent??n.context.lexicalScope,bindings:new Map},f=o.map(b=>_(b)?b.symbol:"");for(let b=0;b<o.length;b++)f[b]&&n.declare(f[b],{value:u[b],inferred:!0},c);let p=s.localScope,d=p.parent;p.parent=c;let g=_g(p,f);n.pushScope(c);let h;try{h=La(n,s.ops),h=Sg(n,h,c)}finally{n.popScope(),p.parent=d,Ng(p,g)}return h.isValid?h:void 0}}function Le(e){return gc(e)??(n=>e.engine.function("Apply",[e,...n]).evaluate())}function ki(e){let n=gc(e),t=e.engine;return n?i=>n([t.number(i)])?.re??NaN:i=>t.function("Apply",[e,t.number(i)]).evaluate().re}function Yr(e,n){typeof e=="string"&&e.length>0;let t=n;for(;t;){let i=t.bindings.get(e);if(i)return i;t=t.parent}}var b2=new Set(["engine","name","description","examples","wikidata","url","lazy","scoped","broadcastable","associative","commutative","commutativeOrder","idempotent","involution","pure","inferredSignature","signature","type","sgn","even","complexity","canonical","evaluate","evaluateAsync","evalDimension","compile","eq","neq","cmp","collection"]),ar=class{engine;name;description;url;wikidata;broadcastable=!1;associative=!1;commutative=!1;commutativeOrder;idempotent=!1;involution=!1;pure=!0;complexity=1e5;lazy=!1;scoped=!1;signature;inferredSignature=!0;type;sgn;eq;neq;even;canonical;evaluate;evaluateAsync;evalDimension;compile;collection;constructor(n,t,i){this.name=t,this.engine=n,i.signature?(this.inferredSignature=!1,this.signature=i.signature instanceof V?i.signature:new V(i.signature,n._typeResolver)):this.signature=new V("(any*) -> unknown"),this.update(i),n.listenToConfigurationChange(this)}toJSON(){let n={name:this.name};return this.wikidata&&(n.wikidata=this.wikidata),this.description&&(n.description=this.description),this.url&&(n.url=this.url),n.broadcastable=this.broadcastable,n.associative=this.associative,n.commutative=this.commutative,n.idempotent=this.idempotent,n.involution=this.involution,n.pure=this.pure,n.lazy=this.lazy,n.complexity=this.complexity,n.scoped=this.scoped,n.signature=this.signature.toString(),n.inferredSignature=this.inferredSignature,this.collection&&(n.collection=this.collection),n}infer(n){let t=new V(n,this.engine._typeResolver);if(!t.matches(this.signature))throw new Error(`Operator Definition "${this.name}": inferred signature "${t}" does not match current signature "${this.signature}"`);this.inferredSignature&&(this.signature=t)}update(n){if(this.engine.strict){for(let o in n)if(!b2.has(o))throw new Error(`Operator Definition "${this.name}": unexpected key "${o}"`)}if("name"in n&&n.name!==this.name)throw new Error(`Operator Definition "${this.name}": cannot change name to "${n.name}"`);if("engine"in n&&n.engine!==this.engine)throw new Error(`Operator Definition "${this.name}": cannot change engine`);this.lazy=n.lazy??this.lazy,this.scoped=n.scoped??this.scoped;let t=n.idempotent??this.idempotent,i=n.involution??this.involution;if(t&&i)throw new Error(`Operator Definition "${this.name}": the 'idempotent' and 'involution' flags are mutually exclusive`);if(this.idempotent=t,this.involution=i,this.description=n.description??this.description,this.collection=n.collection??this.collection,this.url=n.url??this.url,this.wikidata=n.wikidata??this.wikidata,this.broadcastable=n.broadcastable??this.broadcastable,this.associative=n.associative??this.associative,this.commutative=n.commutative??this.commutative,this.commutativeOrder=n.commutativeOrder??this.commutativeOrder,this.commutativeOrder&&!this.commutative)throw new Error(`Operator Definition "${this.name}": the 'commutativeOrder' handler requires the 'commutative' flag`);if(n.canonical&&(n.associative||n.commutative||n.idempotent||n.involution))throw new Error(`Operator Definition "${this.name}": the 'canonical' handler is incompatible with the 'associative', 'commutative', 'idempotent', and 'involution' flags`);if(this.pure=n.pure??this.pure,this.complexity=n.complexity??this.complexity,n.signature){let o=n.signature,s=n.signature instanceof V?n.signature:this.engine.type(n.signature);if(o&&!s.matches(this.engine.type(o)))throw new Error(`Operator Definition "${this.name}": signature "${s}" does not match "${o}"`);this.signature=s,"inferredSignature"in n&&(this.inferredSignature=n.inferredSignature)}if(this.type=n.type??this.type,this.evaluateAsync=n.evaluateAsync??this.evaluateAsync,this.canonical=n.canonical??this.canonical,this.evalDimension=n.evalDimension??this.evalDimension,this.sgn=n.sgn??this.sgn,this.even=n.even??this.even,this.compile=n.xcompile??this.compile,this.eq=n.eq??this.eq,this.neq=n.neq??this.neq,this.scoped=n.scoped??this.scoped,this.lazy=n.lazy??this.lazy,n.collection&&(this.collection=$a(n.collection)),this.collection){let o=jn(this.signature.type);if(!o)throw new Error(`Operator Definition "${this.name}": a collection handler is defined, but the signature "${this.signature}" does not have a result type`);if(!L(o,"collection"))throw new Error(`Operator Definition "${this.name}": a collection handler is defined, but the signature "${this.signature}" is not a collection type`);if(L(o,"indexed_collection")&&!this.collection.at)throw new Error(`Operator Definition "${this.name}" returns an indexed collection, but the 'at' handler is missing`)}let r;if(n.evaluate&&typeof n.evaluate!="function"){let o=this.scoped?{parent:this.engine.context.lexicalScope,bindings:new Map}:void 0,s=this.engine.box(n.evaluate,{form:"raw",scope:o});if(!s.isValid)throw Error(`Invalid function ${s.toString()}`);if(this.inferredSignature&&m(s)&&s.operator==="Function"){let u=s.ops[0],l=s.ops.slice(1),c=u.type.toString(),f=l.map(()=>"unknown").join(", ");this.signature=new V(`(${f}) -> ${c}`,this.engine._typeResolver)}let a=Le(s);r=(u,l)=>a(u),Object.defineProperty(r,"toString",{value:()=>s.toString()})}else typeof n.evaluate=="function"?r=n.evaluate:r=this.evaluate;this.evaluate=r}onConfigurationChange(){}};var Qr=["Error","'missing'"];function kt(e){return!!(typeof e=="number"||Ai(e)||typeof e=="string"&&nt(e))}function Ai(e){return e!==null&&typeof e=="object"&&"num"in e}function Xr(e){return e!==null&&typeof e=="object"&&"sym"in e}function yc(e){return e!==null&&typeof e=="object"&&"str"in e}function Ig(e){return e!==null&&typeof e=="object"&&"dict"in e&&typeof e.dict=="object"&&!Array.isArray(e.dict)&&e.dict!==null}function Kr(e){return e!==null&&typeof e=="object"&&"fn"in e&&Array.isArray(e.fn)&&e.fn.length>0&&typeof e.fn[0]=="string"}function y2(e){return e!==null&&typeof e=="object"&&("fn"in e||"num"in e||"sym"in e||"str"in e)}function wg(e){return y2(e)&&(e.latex!==void 0||e.wikidata!==void 0)}function ye(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):nt(e)||$n(e)?null:e}function xc(e){if(e==null||ye(e)!==null)return null;let n=A(e);return n?[n,...O(e).map(t=>xc(t)).filter(t=>t!==null)]:e}function A(e){return Array.isArray(e)?e[0]:e==null?"":Kr(e)?e.fn[0]:""}function O(e){return Array.isArray(e)?e.slice(1):e!==void 0&&Kr(e)?e.fn.slice(1):[]}function S(e,n){return Array.isArray(e)?e[n]??null:e===null||!Kr(e)?null:e.fn[n]??null}function Ie(e){return e==null?0:Array.isArray(e)?Math.max(0,e.length-1):Kr(e)?Math.max(0,e.fn.length-1):0}function Ec(e){return e==null?null:A(e)==="Hold"?S(e,1):e}function J(e){return typeof e=="string"&&$n(e)?e.length>=2&&e.at(0)==="`"&&e.at(-1)==="`"?e.slice(1,-1):e:e==null?null:Xr(e)?e.sym:null}function Tg(e){let n=A(e);if(n==="KeyValuePair"||n==="Tuple"||n==="Pair"){let[t,i]=O(e),r=ye(t);return r?[r,i??"Nothing"]:null}return null}function vc(e){if(e===null)return null;if(Ig(e))return e;let n=Tg(e);if(n)return{[n[0]]:n[1]};if(A(e)==="Dictionary"){let t={},i=O(e);for(let r=1;r<Ie(e);r++){let o=Tg(i[r]);o&&(t[o[0]]=E2(o[1])??"Nothing")}return{dict:t}}return null}function _c(e){return{dict:Object.fromEntries(Object.entries(e).map(([t,i])=>[t,bc(i)??"Nothing"]))}}function x2(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 Y(e){return typeof e=="number"?e:typeof e=="string"&&nt(e)?x2(e):e!==void 0&&Ai(e)?Y(e.num):null}function eo(e){if(e==null)return null;if(J(e)==="Half")return[1,2];let n=A(e);if(!n)return null;let t=null,i=null;if(n==="Negate"){let r=eo(O(e)[0]);if(r)return[-r[0],r[1]]}if(n==="Rational"||n==="Divide"){let[r,o]=O(e);t=Y(r)??NaN,i=Y(o)??NaN}if(n==="Power"){let[r,o]=O(e),s=Y(o);s===1?(t=Y(r),i=1):s===-1&&(t=1,i=Y(r))}if(n==="Multiply"){let[r,o]=O(e);if(A(o)==="Power"){let[s,a]=O(o);Y(a)===-1&&(t=Y(r),i=Y(s))}}return t===null||i===null?null:Number.isInteger(t)&&Number.isInteger(i)?[t,i]:null}function Fa(e,n){let t=null;if(Array.isArray(e)&&(t=e),Kr(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 ur(e,n,t){let i=A(n),r=A(t);return i===e&&r===e?[e,...O(n),...O(t)]:i===e?[e,...O(n),t]:r===e?[e,n,...O(t)]:[e,n,t]}function Ri(e){if(e==null)return null;let n=A(e);if(n==="Delimiter"){if(e=S(e,1),e===null)return[];if(n=A(e),n!=="Sequence")return[e]}return n!=="Sequence"?null:O(e)}function Te(e){return e==null||e==="Nothing"?!0:A(e)==="Sequence"&&Ie(e)===0}function me(e){return Te(e)?Qr:e}function hc(e){return e[0]==="Square"?hc(e.slice(1))+2:e.reduce((n,t)=>n+is(t),0)}function is(e){if(e===null)return 0;if(typeof e=="number"||typeof e=="string"||kt(e)||Xr(e)||yc(e))return 1;if(Array.isArray(e))return hc(e);if("fn"in e)return hc(e.fn);let n=vc(e);if(n){let t=Object.keys(n);return 1+t.length+t.reduce((i,r)=>i+is(n[r]),0)}return 0}function nt(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 $n(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)||e.length>=2&&e[0]==="`"&&e[e.length-1]==="`"}function qa(e){return e.length>=2&&e[0]==="'"&&e[e.length-1]==="'"?!0:!nt(e)&&!$n(e)}function bc(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=>bc(n)??"Nothing")];if(e===null)return null;if(typeof e=="object"){let n={};for(let t in e)n[t]=bc(e[t])??"Nothing";return{dict:n}}return Kr(e)||Xr(e)||Ai(e)||yc(e)||Ig(e)?e:null}function E2(e){return e==null?null:yc(e)?e.str:Ai(e)?parseFloat(e.num):Xr(e)?e.sym:typeof e=="string"||typeof e=="number"?e:Array.isArray(e)?{fn:e}:e}function v2(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 o=i-55296,s=r-56320;i=2**16+o*2**10+s,t++}}n.push(i)}return n}var Va=8205,Mg=[127462,127487];function kg(e){return e===Va||e===65038||e===65039||e>=127995&&e<=128e3||e>=129456&&e<=129460||e>=917536&&e<=917632}function _2(e){return e>=Mg[0]&&e<=Mg[1]}function Cg(e){if(/^[\u0020-\u00FF]*$/.test(e))return e;let n=[],t=v2(e),i=0;for(;i<t.length;){let r=t[i++],o=t[i];if(o===Va){let s=i-1;for(i+=2;t[i]===Va;)i+=2;n.push(String.fromCodePoint(...t.slice(s,2*i-s+1)))}else if(kg(o)){let s=i-1;for(;kg(t[i]);)i+=t[i]===Va?2:1;n.push(String.fromCodePoint(...t.slice(s,2*i-s-1)))}else _2(r)?(i+=1,n.push(String.fromCodePoint(...t.slice(i-2,2)))):n.push(String.fromCodePoint(r))}return n}var N2={"\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"},S2={"\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u208B":"-"},Nc=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=>N2[r]).join("")}}`),n=n.replace(/[₀₁₂₃₄₅₆₇₈₉₋]+/g,t=>`_{${Array.from(t).map(r=>S2[r]).join("")}}`),this.s=Cg(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 T2(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="",o=!1,s=[];do{if(s.length===0)if(/^#[0-9?]$/.test(e.peek())){let a=e.get().slice(1);s=Xe(n?.[a]??n?.["?"]??"\\placeholder{}",n),t=s[0]}else t=e.next(),s=t?[t]:[];o=s.length===0,!o&&t==="\\endcsname"&&(o=!0,s.shift()),o||(o=t==="<$>"||t==="<$$>"||t==="<{>"||t==="<}>"||!!t&&t.length>1&&t[0]==="\\"),o||(r+=s.shift())}while(!o);r&&i.push("\\"+r),i=i.concat(s)}else if(t!=="\\endcsname")if(t.length>1&&t[0]==="#"){let r=t.slice(1);i=i.concat(Xe(n?.[r]??n?.["?"]??"\\placeholder{}",n))}else i.push(t)}return i}function Xe(e,n=[]){let t=e.toString().split(/\r?\n/),i="",r="";for(let a of t){i+=r,r=" ";let u=a.match(/((?:\\%)|[^%])*/);u!==null&&(i+=u[0])}let o=new Nc(i),s=[];do s.push(...T2(o,n));while(!o.end());return s}function Ba(e){return Xe(e).length}function $(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 Pi(e,n,t){return n.includes(e)&&(n=`{${n}}`),/^[0-9]$/.test(t)?`${n}${e}${t}`:`${n}${e}{${t}}`}function yt(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 $(n.map(i=>({"<space>":" ","<$$>":"$$","<$>":"$","<{>":"{","<}>":"}"})[i]??i))}function Ag(e,n){return"normal"}function Rg(e,n){return"normal"}function Pg(e,n){return n>2?"solidus":"radical"}function Dg(e,n){if(n>3)return"inline-solidus";if(A(e)==="Divide"){let[t,i]=O(e),[r,o]=[is(t),is(i)];if(o<=2&&r>5)return"factor";let s=A(i);if(r<=2&&o>5&&s!=="Sqrt"&&s!=="Root")return"reciprocal"}return"quotient"}function $g(e,n){return"boolean"}function Og(e,n){return"solidus"}function Lg(e,n){return"compact"}function no(e,n,t){e.indexOf("#1")<0&&e.indexOf("#2")<0&&(e=`#1 ${e} #2`);let i=e.split(/(#\d+)/).filter(r=>r.trim()!=="").map(r=>r.trim());return $(i.map(r=>{switch(r){case"#1":return n;case"#2":return t;default:return r}}))}var oe=245,rs=260,ni=270,Be=275,On=390,tt=600,Sc=650,os=700,Tc=810;function Fg(e){return!("kind"in e)||e.kind==="expression"}function qg(e){return"kind"in e&&e.kind==="symbol"}function ss(e){return"kind"in e&&e.kind==="matchfix"}function Ic(e){return"kind"in e&&e.kind==="infix"}function Ja(e){return"kind"in e&&e.kind==="prefix"}function wc(e){return"kind"in e&&e.kind==="postfix"}function Vg(e){return"kind"in e&&e.kind==="environment"}function Jg(e,n,t){if(t.repeatingDecimal&&t.repeatingDecimal!=="none"){let o=e.slice(0,-1);for(let s=0;s<e.length-16;s++){let a=o.substring(0,s);for(let u=0;u<17;u++){let l=o.substring(s,s+u+1),c=Math.floor((o.length-a.length)/l.length);if(c<=3)break;if((a+l.repeat(c+1)).startsWith(o)){if(l==="0")return Mc(a,t);let f={vinculum:"\\overline{#}",parentheses:"(#)",dots:"\\overset{\\cdots}{#1}#2\\overset{\\cdots}{#3}",arc:"\\wideparen{#}"}[t.repeatingDecimal]??"\\overline{#}";return f=f.replace(/#1/g,l[0]).replace(/#2/g,l.slice(1)).replace(/#3/g,l.slice(-1)).replace(/#/,l),Mc(a,t)+f}}}}let i=typeof t.fractionalDigits=="number"?t.fractionalDigits:1/0;i<0&&(i=i-n),i<0&&(i=0);let r=e.length>i;return r&&(e=e.substring(0,i)),e=Mc(e,t),r&&(e+=t.truncationMarker),e}function zg(e,n){return!e||e==="0"?"":n.beginExponentMarker?n.beginExponentMarker+e+(n.endExponentMarker??""):`10^{${e}}`}function Ug(e,n){if(e===null)return"";let t;if(typeof e=="number"||typeof e=="string")t=e;else if(typeof e=="object"&&"num"in e)t=e.num;else return"";if(typeof t=="number"){if(t===1/0)return n.positiveInfinity;if(t===-1/0)return n.negativeInfinity;if(Number.isNaN(t))return n.notANumber;let o;return n.notation==="engineering"?o=to(t.toExponential(),n,3):n.notation==="scientific"?o=to(t.toExponential(),{...n,avoidExponentsInRange:null}):n.notation==="adaptiveScientific"&&(o=to(t.toExponential(),n)),o??kc(t.toString(),n)}if(t=t.toLowerCase().replace(/[\u0009-\u000d\u0020\u00a0]/g,""),t==="infinity"||t==="+infinity"||t==="oo"||t==="+oo")return n.positiveInfinity;if(t==="-infinity"||t==="-oo")return n.negativeInfinity;if(t==="nan")return n.notANumber;if(!/^[-+\.]?[0-9]/.test(t))return"";if(t=t.replace(/[nd]$/,""),/\([0-9]+\)/.test(t)){let[o,s,a,u]=t.match(/(.+)\(([0-9]+)\)(.*)$/)??[];t=s+a.repeat(6)+u}let i="";for(t[0]==="-"?(i="-",t=t.substring(1)):t[0]==="+"&&(t=t.substring(1));t[0]==="0";)t=t.substring(1);t.length===0?t="0":t[0]==="."&&(t="0"+t);let r;return n.notation==="engineering"?r=to(t,n,3):(n.notation==="scientific"||n.notation==="adaptiveScientific")&&(r=to(t,n)),i+(r??kc(t,{...n}))}function to(e,n,t=1){let i=e.match(/^(.*)[e|E]([-+]?[0-9]+)$/);if(!i){let c="";if(e[0]==="-"?(c="-",e=e.substring(1)):e[0]==="+"&&(e=e.substring(1)),e.indexOf(".")<0)e.length===1?e=c+e+"e+0":e=c+e[0]+"."+e.slice(1)+"e+"+(e.length-1).toString();else{let[f,p,d]=e.match(/^(.*)\.(.*)$/);for(d||(d="");p.startsWith("0");)p=p.substring(1);if(p)e=c+p[0]+"."+p.slice(1)+d+"e+"+(p.length-1).toString();else{let g=0;for(;d[g]==="0";)g++;if(g===d.length)e=c+"0e+0";else{let h=d.slice(g),b=h[0],y=h.slice(1),x=-(g+1);y?e=c+b+"."+y+"e"+x:e=c+b+"e"+x}}}i=e.match(/^(.*)[e|E]([-+]?[0-9]+)$/)}if(!i)return kc(e,n);let r=parseInt(i[2]),o=i[1];{let c=o.match(/^(-?)/),f=c?c[1]:"",d=(f?o.substring(1):o).match(/^(\d+)(?:\.(\d*))?$/);if(d){let g=d[1],h=d[2]??"";g.length>1&&(h=g.slice(1)+h,r+=g.length-1,g=g[0]),o=f+g,h&&(o+="."+h)}}if(Math.abs(r)%t!==0){let c=r>0?r%t:-((t+r)%t);r=r>=0?r-c:r+c;let[f,p,d]=o.match(/^(.*)\.(.*)$/)??["",o,""];o=p+(d+"00000000000000000").slice(0,Math.abs(c))+"."+d.slice(Math.abs(c))}let s=n.avoidExponentsInRange;if(s&&r>=s[0]&&r<=s[1])return;let a="",u=o;i=u.match(/^(.*)\.(.*)$/),i&&(u=i[1],a=i[2]);let l=zg(Number(r).toString(),n);return a=Jg(a,u.length,n),a&&(a=n.decimalSeparator+a),u=Gg(u,n),l?u+a+n.exponentProduct+l:u+a}function kc(e,n){let t=e.match(/^(.*)[e|E]([-+]?[0-9]+)$/i),i=0,r=0;t?.[1]&&t[2]&&(i=parseInt(t[2]),r=i,e=t[1]);let o=t?.[1]??e,s="";t=e.match(/^(.*)\.(.*)$/),t?.[1]&&t[2]&&(o=t[1],s=t[2]),i!==0&&s&&(o+=s,i-=s.length,s="");let a=n.avoidExponentsInRange;i!==0&&a&&r>=a[0]&&r<=a[1]&&([o,s]=M2(o,s,i),i=0);let u=zg(i.toString(),n);if(s&&(s=n.decimalSeparator+Jg(s,o.length,n)),o=Gg(o,n),!u)return o+s;if(!s){if(o==="1")return u;if(o==="-1")return"-"+u}return o+s+n.exponentProduct+u}function Bg(e,n,t){let i=new RegExp(`(\\d{${n}})(?=\\d)`,"g");return e.replace(i,`$1${t}`)}function I2(e,n,t){let i=new RegExp(`(\\d{${n}})(?=\\d)`,"g"),r=t.split("").reverse().join("");return e.split("").reverse().join("").replace(i,`$1${r}`).split("").reverse().join("")}function w2(e,n){let t=e.split("").reverse().join(""),i=n.split("").reverse().join(""),r=t.replace(/(\d{3})(?=\d)/,`$1${i}`);return r=r.replace(/(\d{2})(?=(\d{2})+,)/g,`$1${i}`),r.split("").reverse().join("")}function jg(e,n,t){let i=n.digitGroup;typeof i!="string"&&Array.isArray(i)&&(i=i[t]);let r=typeof n.digitGroupSeparator=="string"?n.digitGroupSeparator:n.digitGroupSeparator[t];return r?i==="lakh"?t===0?w2(e,r):Bg(e,3,r):i===!1||i<=0?e:t===1?Bg(e,i,r):I2(e,i,r):e}function Mc(e,n){return jg(e,n,1)}function Gg(e,n){return jg(e,n,0)}function M2(e,n,t){let i=e+n,o=e.length+t,s,a;return o>0?o>=i.length?(i=i+"0".repeat(o-i.length),s=i,a=""):(s=i.slice(0,o),a=i.slice(o)):(s="0",a="0".repeat(-o)+i),[s,a]}var xt=[["alpha","\\alpha",945],["beta","\\beta",946],["gamma","\\gamma",947],["delta","\\delta",948],["epsilon","\\epsilon",949],["epsilonSymbol","\\varepsilon",1013],["zeta","\\zeta",950],["eta","\\eta",951],["theta","\\theta",952],["thetaSymbol","\\vartheta",977],["iota","\\iota",953],["kappa","\\kappa",954],["kappaSymbol","\\varkappa",1008],["lambda","\\lambda",955],["mu","\\mu",956],["nu","\\nu",957],["xi","\\xi",958],["omicron","\\omicron",959],["pi","\\pi",960],["piSymbol","\\varpi",982],["rho","\\rho",961],["rhoSymbol","\\varrho",1009],["sigma","\\sigma",963],["finalSigma","\\varsigma",962],["tau","\\tau",964],["phi","\\phi",981],["phiLetter","\\varphi",966],["upsilon","\\upsilon",965],["chi","\\chi",967],["psi","\\psi",968],["omega","\\omega",969],["Alpha","\\Alpha",913],["Beta","\\Beta",914],["Gamma","\\Gamma",915],["Delta","\\Delta",916],["Epsilon","\\Epsilon",917],["Zeta","\\Zeta",918],["Eta","\\Eta",919],["Theta","\\Theta",920],["Iota","\\Iota",921],["Kappa","\\Kappa",922],["Lambda","\\Lambda",923],["Mu","\\Mu",924],["Nu","\\Nu",925],["Xi","\\Xi",926],["Omicron","\\Omicron",927],["Rho","\\Rho",929],["Sigma","\\Sigma",931],["Tau","\\Tau",932],["Phi","\\Phi",934],["Upsilon","\\Upsilon",933],["Chi","\\Chi",935],["Psi","\\Psi",936],["Omega","\\Omega",937],["digamma","\\digamma",989],["aleph","\\aleph",8501],["bet","\\beth",8502],["gimel","\\gimel",8503],["dalet","\\daleth",8504],["ell","\\ell",8499],["turnedCapitalF","\\Finv",8498],["turnedCapitalG","\\Game",8513],["weierstrass","\\wp",8472],["eth","\\eth",240],["invertedOhm","\\mho",8487],["hBar","\\hbar",295],["hSlash","\\hslash",8463],["blackClubSuit","\\clubsuit",9827],["whiteHeartSuit","\\heartsuit",9825],["blackSpadeSuit","\\spadesuit",9824],["whiteDiamondSuit","\\diamondsuit",9826],["sharp","\\sharp",9839],["flat","\\flat",9837],["natural","\\natural",9838]],Zg=[...xt.map(([e,n,t])=>({kind:"symbol",name:e,latexTrigger:[n],parse:e})),...xt.map(([e,n,t])=>({kind:"symbol",latexTrigger:[String.fromCodePoint(t)],parse:e}))];var lr=[{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:oe+5,parse:"LessEqual"},{name:"LessNotEqual",latexTrigger:["\\lneqq"],kind:"infix",associativity:"any",precedence:oe},{name:"NotLessNotEqual",latexTrigger:["\\nleqq"],kind:"infix",associativity:"any",precedence:oe},{name:"LessOverEqual",latexTrigger:["\\leqq"],kind:"infix",associativity:"any",precedence:oe+5},{name:"GreaterOverEqual",latexTrigger:["\\geqq"],kind:"infix",associativity:"any",precedence:oe+5,parse:"GreaterEqual"},{name:"Equal",latexTrigger:["="],kind:"infix",associativity:"right",precedence:oe},{latexTrigger:["*","="],kind:"infix",associativity:"right",precedence:oe,parse:"StarEqual"},{name:"StarEqual",latexTrigger:["\\star","="],kind:"infix",associativity:"right",precedence:oe},{name:"PlusEqual",latexTrigger:["+","="],kind:"infix",associativity:"right",precedence:oe},{name:"MinusEqual",latexTrigger:["-","="],kind:"infix",associativity:"right",precedence:oe},{name:"SlashEqual",latexTrigger:["/","="],kind:"infix",associativity:"right",precedence:oe},{name:"EqualEqual",latexTrigger:["=","="],kind:"infix",associativity:"right",precedence:oe},{name:"EqualEqualEqual",latexTrigger:["=","=","="],kind:"infix",associativity:"right",precedence:oe+5},{name:"TildeFullEqual",latexTrigger:["\\cong"],kind:"infix",associativity:"right",precedence:oe},{name:"NotTildeFullEqual",latexTrigger:["\\ncong"],kind:"infix",associativity:"right",precedence:oe},{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:oe},{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:oe},{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:oe+5,parse:"GreaterEqual"},{name:"GreaterNotEqual",latexTrigger:["\\gneqq"],kind:"infix",associativity:"right",precedence:oe},{name:"NotGreaterNotEqual",latexTrigger:["\\ngeqq"],kind:"infix",associativity:"right",precedence:oe},{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:oe},{name:"TriangleEqual",latexTrigger:["\\triangleq"],kind:"infix",associativity:"right",precedence:oe},{name:"DotEqual",latexTrigger:["\\doteq"],kind:"infix",associativity:"right",precedence:oe+5},{name:"DotEqualDot",latexTrigger:["\\doteqdot"],kind:"infix",associativity:"right",precedence:oe+5},{name:"FallingDotEqual",latexTrigger:["\\fallingdotseq"],kind:"infix",associativity:"right",precedence:oe+5},{name:"RisingDotEqual",latexTrigger:["\\fallingdotseq"],kind:"infix",associativity:"right",precedence:oe+5},{name:"QuestionEqual",latexTrigger:["\\questeq"],kind:"infix",associativity:"right",precedence:oe},{name:"MuchLess",latexTrigger:["\\ll"],kind:"infix",associativity:"right",precedence:oe},{name:"MuchGreater",latexTrigger:["\\gg"],kind:"infix",associativity:"right",precedence:oe},{name:"Precedes",latexTrigger:["\\prec"],kind:"infix",associativity:"right",precedence:oe},{name:"Succeeds",latexTrigger:["\\succ"],kind:"infix",associativity:"right",precedence:oe},{name:"PrecedesEqual",latexTrigger:["\\preccurlyeq"],kind:"infix",associativity:"right",precedence:oe},{name:"SucceedsEqual",latexTrigger:["\\curlyeqprec"],kind:"infix",associativity:"right",precedence:oe},{name:"NotPrecedes",latexTrigger:["\\nprec"],kind:"infix",associativity:"right",precedence:oe},{name:"NotSucceeds",latexTrigger:["\\nsucc"],kind:"infix",associativity:"right",precedence:oe},{name:"Between",latexTrigger:["\\between"],kind:"infix",associativity:"right",precedence:oe+5}];function cr(e){return typeof e=="string"?e.startsWith("$")&&e.endsWith("$"):!1}function ti(e){if(typeof e=="number")return e.toString();if(typeof e=="string"){let n=e.trim();if(n.startsWith("$$")&&n.endsWith("$$"))return n.slice(2,-2);if(n.startsWith("$")&&n.endsWith("$"))return n.slice(1,-1)}return Array.isArray(e)?ti($(e)):null}function Gn(e){return typeof e!="string"?!1:lr.some(n=>n.name===e)}function Ct(e){return typeof e!="string"?!1:["Less","LessEqual","Greater","GreaterEqual"].includes(e)}function io(e){return typeof e!="string"?!1:["Equal","NotEqual"].includes(e)}function Cc(e,n,t,i,r){if(n&&n.minPrec>=i)return null;let o=t?[t]:["Nothing"],s=!1;for(;!s;){for(s=!0,e.skipSpace();e.match(r);)o.push("Nothing"),e.skipSpace();if(e.skipVisualSpace(),e.atTerminator(n))o.push("Nothing");else{let a=e.parseExpression({...n,minPrec:i});o.push(a??"Nothing"),s=a===null}s||(e.skipSpace(),s=!e.match(r),s||e.skipVisualSpace())}return o}function At(e=""){return(n,t)=>{if(!t)return"";let i=O(t);if(i.length===0)return"";if(i.length===1)return n.serialize(i[0]);e={"&":"\\&",":":"\\colon","|":"\\mvert","-":"-","\xB7":"\\cdot","\u2012":"-","\u2013":"--","\u2014":"---","\u2015":"-","\u2022":"\\bullet","\u2026":"\\ldots"}[e]??e;let r=i.reduce((o,s)=>(o.push(n.serialize(s),e),o),[]);return r.pop(),$(r)}}var Qg=[{latexTrigger:["\\placeholder"],kind:"symbol",parse:e=>{for(;e.match("<space>"););if(e.match("["))for(;!e.match("]")&&!e.atBoundary;)e.nextToken();for(;e.match("<space>"););if(e.match("<{>"))for(;!e.match("<}>")&&!e.atBoundary;)e.nextToken();return"Nothing"}},{name:"ContinuationPlaceholder",latexTrigger:["\\dots"]},{latexTrigger:["\\ldots"],parse:"ContinuationPlaceholder"},{latexTrigger:[".",".","."],parse:"ContinuationPlaceholder"},{name:"Function",latexTrigger:["\\mapsto"],kind:"infix",precedence:ni,parse:(e,n,t)=>{let i=[];if(A(n)==="Delimiter"&&(n=S(n,1)??"Nothing"),A(n)==="Sequence")for(let o of O(n)){if(!J(o))return null;i.push(J(o))}else{if(!J(n))return null;i=[J(n)]}let r=e.parseExpression({minPrec:ni})??"Nothing";return A(r)==="Delimiter"&&(r=S(r,1)??"Nothing"),A(r)==="Sequence"&&(r=["Block",...O(r)]),["Function",r,...i]},serialize:(e,n)=>{let t=O(n);return t.length<1?"()\\mapsto()":t.length===1?$(["()","\\mapsto",e.serialize(S(n,1))]):t.length===2?$([e.serialize(S(n,2)),"\\mapsto",e.serialize(S(n,1))]):$([e.wrapString(O(n)?.slice(1).map(i=>e.serialize(i)).join(", "),"normal"),"\\mapsto",e.serialize(S(n,1))])}},{name:"Apply",kind:"function",symbolTrigger:"apply",serialize:(e,n)=>{let t=S(n,1),i=A(t);if(i==="InverseFunction"||i==="Derivative"){let s=e.options.applyFunctionStyle(n,e.level),a=O(n).slice(1);return e.serializeFunction(t,e.dictionary.ids.get(i))+e.wrapString(a.map(u=>e.serialize(u)).join(", "),s)}let r=S(n,2);if(typeof t=="string"||!r){let s=O(n).slice(1);return e.serialize(s)}if(Ie(n)===2)return $([e.wrap(t,20),"\\lhd",e.wrap(r,20)]);let o=e.options.applyFunctionStyle(n,e.level);return $(["\\operatorname{apply}",e.wrapString(e.serialize(i)+", "+e.serialize(["List",...O(n)]),o)])}},{latexTrigger:"\\lhd",kind:"infix",precedence:20,parse:"Apply"},{latexTrigger:"\\rhd",kind:"infix",precedence:20,parse:(e,n,t)=>["Apply",e.parseExpression({minPrec:21})??"Nothing",n]},{name:"EvaluateAt",openTrigger:".",closeTrigger:"|",kind:"matchfix",serialize:(e,n)=>{let t=S(n,1);if(!t)return"";let i=O(n).slice(1);if(A(t)==="Function"){let r=O(t).slice(1),o=S(t,1);if(A(o)==="Block"&&Ie(o)===1&&(o=S(o,1)),r.length>0)return`\\left.\\left(${e.serialize(o)}\\right)\\right|_{${r.map((s,a)=>`${e.serialize(s)}=${e.serialize(i[a])}`).join(", ")}}`}return`\\left.\\left(${e.serialize(t)}\\right)\\right|_{${i.map(r=>e.serialize(r)).join(", ")}}`}},{name:"Assign",latexTrigger:"\\coloneq",kind:"infix",associativity:"right",precedence:rs,serialize:(e,n)=>{let t=Ec(S(n,1));if(A(S(n,2))==="Function"){let i=S(n,2),r=Ec(S(i,1)),o=O(i).slice(1);return $([e.serialize(t),e.wrapString(o.map(s=>e.serialize(s)).join(", "),e.options.applyFunctionStyle(n,e.level)),"\\coloneq",e.serialize(r)])}return $([e.serialize(t),"\\coloneq",e.serialize(S(n,2))])},parse:za},{latexTrigger:"\\coloneqq",kind:"infix",associativity:"right",precedence:rs,parse:za},{latexTrigger:"\\colonequals",kind:"infix",associativity:"right",precedence:rs,parse:za},{latexTrigger:[":","="],kind:"infix",associativity:"right",precedence:rs,parse:za},{name:"Colon",latexTrigger:":",kind:"infix",associativity:"right",precedence:250,serialize:(e,n)=>$([e.serialize(S(n,1)),"\\colon",e.serialize(S(n,2))])},{latexTrigger:"\\colon",kind:"infix",associativity:"right",precedence:250,parse:"Colon"},{name:"BaseForm",serialize:(e,n)=>{let t=Y(S(n,2))??NaN;if(isFinite(t)&&t>=2&&t<=36){let i=Y(S(n,1))??NaN;if(isFinite(i)&&Number.isInteger(i)){let r=Number(i).toString(t),o=0;if(t===2||t===10?o=4:t===16?o=2:t>16&&(o=4),o>0){let s=r;r="";for(let a=0;a<s.length;a++)a>0&&a%o===0&&(r="\\, "+r),r=s[s.length-a-1]+r}return`(\\text{${r}}_{${t}}`}}return"\\operatorname{BaseForm}("+e.serialize(S(n,1))+", "+e.serialize(S(n,2))+")"}},{name:"Sequence",serialize:At(" ")},{name:"InvisibleOperator",serialize:At("")},{name:"Delimiter",serialize:(e,n)=>{let t=e.options.groupStyle(n,e.level+1),i=S(n,1),r={Set:"{,}",List:"[,]",Tuple:"(,)",Single:"(,)",Pair:"(,)",Triple:"(,)",Sequence:"(,)",String:'""'}[A(i)],o=r?i:["Sequence",i];if(r??="(,)",Ie(n)>1){let c=ye(S(n,2));typeof c=="string"&&c.length<=3&&(r=c)}let[s,a,u]=["","",""];r.length===3?[s,a,u]=r:r.length===2?[s,u]=r:r.length===1&&(a=r);let l=i?o?At(a)(e,o):e.serialize(i):"";return e.wrapString(l,t,s+u)}},{name:"Tuple",serialize:(e,n)=>$(["(",At(",")(e,n),")"])},{name:"Pair",serialize:(e,n)=>$(["(",At(",")(e,n),")"])},{name:"Triple",serialize:(e,n)=>$(["(",At(",")(e,n),")"])},{name:"Single",serialize:(e,n)=>$(["(",At(",")(e,n),")"])},{name:"Domain",serialize:(e,n)=>A(n)==="Error"?e.serialize(n):`\\mathbf{${e.serialize(S(n,1))}}`},{latexTrigger:["\\mathtip"],parse:e=>{let n=e.parseGroup();return e.parseGroup(),n}},{latexTrigger:["\\texttip"],parse:e=>{let n=e.parseGroup();return e.parseGroup(),n}},{latexTrigger:["\\error"],parse:e=>["Error",e.parseGroup()]},{name:"Error",serialize:(e,n)=>{let t=S(n,1);if(ye(t)==="missing")return`\\error{${e.options.missingSymbol??"\\placeholder{}"}}`;let i=A2(e,n)||"\\blacksquare",r=A(t)==="ErrorCode"?ye(S(t,1)):ye(t);return r==="incompatible-type"?J(S(t,3))==="Undefined"?`\\mathtip{\\error{${i}}}{\\notin ${e.serialize(S(t,2))}}`:`\\mathtip{\\error{${i}}}{\\in ${e.serialize(S(t,3))}\\notin ${e.serialize(S(t,2))}}`:typeof r=="string"?`\\error{${i}}`:`\\error{${i}}`}},{name:"ErrorCode",serialize:(e,n)=>{let t=ye(S(n,1));return t==="missing"?e.options.missingSymbol??"\\placeholder{}":t==="unexpected-command"||t==="unexpected-operator"||t==="unexpected-token"||t==="invalid-symbol"||t==="unknown-environment"||t==="unexpected-base"||t==="incompatible-type"?"":`\\texttip{\\error{\\blacksquare}}{\\mathtt{${t}}}`}},{name:"FromLatex",serialize:(e,n)=>`\\texttt{${C2(ye(S(n,1)))}}`},{name:"Latex",serialize:(e,n)=>n===null?"":$(Fa(n,t=>ye(t)??e.serialize(t)))},{name:"LatexString",serialize:(e,n)=>n===null?"":$(Fa(n,t=>e.serialize(t)))},{name:"LatexTokens",serialize:k2},{name:"At",kind:"postfix",precedence:810,latexTrigger:["["],parse:Rc("]"),serialize:(e,n)=>$(["\\lbrack",At(", ")(e,n),"\\rbrack"])},{kind:"postfix",precedence:810,latexTrigger:["\\lbrack"],parse:Rc("\\rbrack")},{kind:"postfix",precedence:810,latexTrigger:["\\left","\\lbrack"],parse:Rc("\\right","\\rbrack")},{kind:"postfix",latexTrigger:["_"],parse:(e,n,t)=>{let i=e.parseGroup()??e.parseToken();i===null&&e.options.strict===!1&&e.peek==="("&&(i=e.parseEnclosure());let r=J(n);return i!==null&&(r&&e.getSymbolType(r).matches("indexed_collection")||A(n)==="List")?(A(i)==="Delimiter"&&(i=S(i,1)??"Nothing"),A(i)==="Sequence"?["At",n,...O(i)]:["At",n,i]):["Subscript",n,i]}},{name:"List",kind:"matchfix",openTrigger:"[",closeTrigger:"]",parse:Xg,serialize:P2},{kind:"matchfix",openTrigger:"(",closeTrigger:")",parse:R2},{latexTrigger:[","],kind:"infix",precedence:20,parse:(e,n,t)=>{let i=Cc(e,t,n,20,",");return i===null?null:["Delimiter",["Sequence",...i],{str:","}]}},{latexTrigger:[","],kind:"prefix",precedence:20,parse:(e,n)=>{let t=Cc(e,n,null,20,",");return t===null?null:["Delimiter",["Sequence",...t],{str:","}]}},{name:"Range",latexTrigger:[".","."],kind:"infix",precedence:800,parse:D2,serialize:(e,n)=>{let t=O(n);if(t.length===0)return"";if(t.length===1)return"1.."+e.serialize(S(n,1));if(t.length===2)return e.wrap(S(n,1),10)+".."+e.wrap(S(n,2),10);if(t.length===3){let i=Y(S(n,3)),r=Y(S(n,1));return i!==null&&r!==null?e.wrap(S(n,1),10)+".."+e.wrap(r+i,10)+".."+e.wrap(S(n,2),10):e.wrap(S(n,1),10)+"..("+(e.wrap(S(n,1),Be)+"+"+e.wrap(S(n,3),Be))+").."+e.wrap(S(n,2),10)}return""}},{latexTrigger:[";"],kind:"infix",precedence:19,parse:(e,n,t)=>{let i=Cc(e,t,n,19,";");return i===null?null:i.some(r=>A(r)==="Assign")?$2(i):["Delimiter",["Sequence",...i],"';'"]}},{latexTrigger:["\\text"],kind:"infix",associativity:"none",precedence:21,parse:(e,n,t)=>{let i=e.index;return fr(e,"where")?Yg(e,n,t):(e.index=i,null)}},{symbolTrigger:"where",kind:"infix",associativity:"none",precedence:21,parse:(e,n,t)=>Yg(e,n,t)},{name:"Block",serialize:(e,n)=>{let t=O(n);return!t||t.length===0?"":t.filter(r=>A(r)!=="Declare").map(r=>e.serialize(r)).join("; ")}},{name:"If",serialize:(e,n)=>{let t=O(n);return!t||t.length<3?"":$(["\\text{if }",e.serialize(t[0]),"\\text{ then }",e.serialize(t[1]),"\\text{ else }",e.serialize(t[2])])}},{name:"Loop",serialize:(e,n)=>{let t=O(n);if(!t||t.length<2)return"";let i=t[0],r=t[1];if(A(r)==="Element"){let o=S(r,1),s=S(r,2);if(A(s)==="Range"){let a=S(s,1),u=S(s,2);return $(["\\text{for }",e.serialize(o),"\\text{ from }",e.serialize(a),"\\text{ to }",e.serialize(u),"\\text{ do }",e.serialize(i)])}}return $(["\\operatorname{Loop}(",e.serialize(i),", ",e.serialize(r),")"])}},{name:"Break",serialize:()=>"\\text{break}"},{name:"Continue",serialize:()=>"\\text{continue}"},{name:"Return",serialize:(e,n)=>{let t=S(n,1);return!t||J(t)==="Nothing"?"\\text{return}":$(["\\text{return }",e.serialize(t)])}},{symbolTrigger:"if",kind:"prefix",precedence:245,parse:(e,n)=>Hg(e,n)},{symbolTrigger:"for",kind:"prefix",precedence:245,parse:(e,n)=>Wg(e,n)},{symbolTrigger:"break",kind:"prefix",precedence:245,parse:()=>["Break"]},{symbolTrigger:"continue",kind:"prefix",precedence:245,parse:()=>["Continue"]},{symbolTrigger:"return",kind:"prefix",precedence:245,parse:(e,n)=>["Return",e.parseExpression(n)??"Nothing"]},{name:"String",latexTrigger:["\\text"],parse:(e,n)=>{let t=e.index;return fr(e,"if")?Hg(e,n):(e.index=t,fr(e,"for")?Wg(e,n):(e.index=t,fr(e,"break")?["Break"]:(e.index=t,fr(e,"continue")?["Continue"]:(e.index=t,fr(e,"return")?["Return",e.parseExpression(n)??"Nothing"]:(e.index=t,ri(e))))))},serialize:(e,n)=>{let t=O(n);return t.length===0?"\\text{}":$(["\\text{",t.map(i=>e.serialize(i)).join(""),"}"])}},{name:"Subscript",latexTrigger:["_"],kind:"infix",serialize:(e,n)=>Ie(n)===2?e.serialize(S(n,1))+"_{"+e.serialize(S(n,2))+"}":"_{"+e.serialize(S(n,1))+"}"},{name:"Superplus",latexTrigger:["^","+"],kind:"postfix"},{name:"Subplus",latexTrigger:["_","+"],kind:"postfix"},{name:"Superminus",latexTrigger:["^","-"],kind:"postfix",parse:(e,n)=>e.options.strict===!1&&/^[0-9]$/.test(e.peek)?null:["Superminus",n]},{name:"Subminus",latexTrigger:["_","-"],kind:"postfix"},{latexTrigger:["^","*"],kind:"postfix",parse:(e,n)=>["Superstar",n]},{latexTrigger:["_","*"],kind:"postfix",parse:(e,n)=>["Substar",n]},{name:"Substar",latexTrigger:["_","\\star"],kind:"postfix"},{name:"Superdagger",latexTrigger:["^","\\dagger"],kind:"postfix"},{latexTrigger:["^","\\dag"],kind:"postfix",parse:(e,n)=>["Superdagger",n]},{name:"Prime",latexTrigger:["^","\\prime"],kind:"postfix",parse:(e,n)=>ii(e,n,1),serialize:(e,n)=>{let t=Y(S(n,2))??1,i=e.serialize(S(n,1));return t===1?i+"^\\prime":t===2?i+"^\\doubleprime":t===3?i+"^\\tripleprime":i+"^{("+e.serialize(S(n,2))+")}"}},{latexTrigger:"^{\\prime\\prime}",kind:"postfix",parse:(e,n)=>ii(e,n,2)},{latexTrigger:"^{\\prime\\prime\\prime}",kind:"postfix",parse:(e,n)=>ii(e,n,3)},{latexTrigger:["^","\\doubleprime"],kind:"postfix",parse:(e,n)=>ii(e,n,2)},{latexTrigger:["^","\\tripleprime"],kind:"postfix",parse:(e,n)=>ii(e,n,3)},{latexTrigger:"'",kind:"postfix",precedence:810,parse:(e,n)=>ii(e,n,1)},{latexTrigger:"\\prime",kind:"postfix",precedence:810,parse:(e,n)=>ii(e,n,1)},{latexTrigger:"\\doubleprime",kind:"postfix",precedence:810,parse:(e,n)=>ii(e,n,2)},{latexTrigger:"\\tripleprime",kind:"postfix",precedence:810,parse:(e,n)=>ii(e,n,3)},{latexTrigger:["^","<{>","("],kind:"postfix",parse:(e,n,t)=>{let i=J(n);if(!i||!e.getSymbolType(i).matches("function"))return null;e.addBoundary([")"]);let r=e.parseExpression(t);return!e.matchBoundary()||!e.match("<}>")?null:["Derivative",n,r]}},{name:"InverseFunction",latexTrigger:"^{-1",kind:"postfix",parse:(e,n)=>{if(A(n)==="Matrix")return e.match("<}>"),["Inverse",n];let t=J(n);if(!t)return null;let i=e.getSymbolType(t);if(i.matches(new V("matrix")))return e.match("<}>"),["Inverse",n];if(!i.matches("function"))return null;let r=0;for(;!e.atEnd&&!e.match("<}>");)if(e.match("'"))r++;else if(e.match("\\prime"))r++;else if(e.match("\\doubleprime"))r+=2;else if(e.match("\\tripleprime"))r+=3;else return null;return r===1?["Derivative",["InverseFunction",n]]:r>0?["Derivative",["InverseFunction",n],r]:["InverseFunction",n]},serialize:(e,n)=>e.serialize(S(n,1))+"^{-1}"},{name:"Derivative",serialize:(e,n)=>{let t=Y(S(n,2))??1,i=e.serialize(S(n,1));return t===1?i+"^{\\prime}":t===2?i+"^{\\doubleprime}":t===3?i+"^{\\tripleprime}":i+"^{("+e.serialize(S(n,2))+")}"}},{name:"D",serialize:(e,n)=>{if(A(n)!=="D")return"D";let t=S(n,1),i=S(n,2);if(!t||!i)return"D";let r=1,o=t;for(;A(o)==="D";){let l=S(o,2);if(J(l)===J(i))r++,o=S(o,1);else break}let s=o;A(o)==="Function"&&(s=S(o,1)??o);let a=e.serialize(s),u=e.serialize(i);return r===1?`\\frac{\\mathrm{d}}{\\mathrm{d}${u}}${a}`:`\\frac{\\mathrm{d}^{${r}}}{\\mathrm{d}${u}^{${r}}}${a}`}},{name:"NewtonDerivative1",latexTrigger:["\\dot"],kind:"prefix",precedence:740,parse:e=>{let n=e.parseGroup();if(n===null)return null;let t=e.options.timeDerivativeVariable;return["D",n,t]}},{name:"NewtonDerivative2",latexTrigger:["\\ddot"],kind:"prefix",precedence:740,parse:e=>{let n=e.parseGroup();if(n===null)return null;let t=e.options.timeDerivativeVariable;return["D",["D",n,t],t]}},{name:"NewtonDerivative3",latexTrigger:["\\dddot"],kind:"prefix",precedence:740,parse:e=>{let n=e.parseGroup();if(n===null)return null;let t=e.options.timeDerivativeVariable;return["D",["D",["D",n,t],t],t]}},{name:"NewtonDerivative4",latexTrigger:["\\ddddot"],kind:"prefix",precedence:740,parse:e=>{let n=e.parseGroup();if(n===null)return null;let t=e.options.timeDerivativeVariable;return["D",["D",["D",["D",n,t],t],t],t]}},{name:"EulerDerivative",latexTrigger:["D"],kind:"expression",parse:e=>{let n=1,t=null,i=!1;for(;!i;)if(e.match("_")){if(t=e.parseGroup()??e.parseToken(),!t)return null}else if(e.match("^")){let s=e.parseGroup()??e.parseToken();n=Y(s)??1}else i=!0;if(!t)return null;e.skipSpace();let r=e.parseExpression({minPrec:740});if(!r)return null;let o=r;for(let s=0;s<n;s++)o=["D",o,t];return o}},{kind:"environment",name:"Which",symbolTrigger:"cases",parse:Ac,serialize:(e,n)=>{let t=[],i=O(n);if(i.length>0)for(let r=0;r<=i.length-2;r+=2){let o=[];o.push(e.serialize(i[r+1])),o.push(e.serialize(i[r])),t.push(o.join("&"))}return $(["\\begin{cases}",t.join("\\\\"),"\\end{cases}"])}},{kind:"environment",symbolTrigger:"dcases",parse:Ac},{kind:"environment",symbolTrigger:"rcases",parse:Ac}];function ri(e,n){if(!e.match("<{>"))return"''";let t=[],i="",r=null,o=()=>{r!==null&&i?t.push(["Annotated",`'${i}'`,_c(r)]):i&&t.push(`'${i}'`),i="",r=null};for(;!e.atEnd&&!e.match("<}>");)if(e.peek==="<{>")o(),t.push(ri(e));else if(e.match("\\textbf"))o(),t.push(ri(e,{fontWeight:"bold"}));else if(e.match("\\textmd"))o(),t.push(ri(e,{fontStyle:"normal"}));else if(e.match("\\textup"))o(),t.push(ri(e,{fontStyle:"normal"}));else if(e.match("\\textsl"))o(),t.push(ri(e,{fontStyle:"italic"}));else if(e.match("\\textit"))o(),t.push(ri(e,{fontStyle:"italic"}));else if(e.match("\\texttt"))o(),t.push(ri(e,{fontFamily:"monospace"}));else if(e.match("\\textsf"))o(),t.push(ri(e,{fontFamily:"sans-serif"}));else if(e.match("\\textcolor")){let a=e.index,u=e.parseStringGroup(),l=e.parseExpression();u!==null&&l!==null?t.push(["Annotated",l,{dict:{color:u}}]):(e.index=a,i+="\\textcolor")}else if(e.match("\\color")){let a=e.parseStringGroup();a!==null&&(o(),r={color:a})}else if(e.match("<space>"))i+=" ";else if(e.match("<$>")){let a=e.index,u=e.parseExpression()??"Nothing";e.skipSpace(),e.match("<$>")?t.push(u):(i+="$",e.index=a)}else if(e.match("<$$>")){let a=e.index,u=e.parseExpression()??"Nothing";e.skipSpace(),e.match("<$$>")?t.push(u):(i+="$$",e.index=a)}else{let a=e.parseChar()??e.nextToken();i+={"\\enskip":"\u2002","\\enspace":"\u2002","\\quad":"\u2003","\\qquad":"\u2003\u2003","\\space":"\u2003","\\ ":"\u2003","\\;":"\u2004","\\,":"\u2009","\\:":"\u205F","\\!":"","\\{":"{","\\}":"}","\\$":"$","\\&":"&","\\#":"#","\\%":"%","\\_":"_","\\textbackslash":"\\","\\textasciitilde":"~","\\textasciicircum":"^","\\textless":"<","\\textgreater":">","\\textbar":"|","\\textunderscore":"_","\\textbraceleft":"{","\\textbraceright":"}","\\textasciigrave":"`","\\textquotesingle":"'","\\textquotedblleft":"\u201C","\\textquotedblright":"\u201D","\\textquotedbl":'"',"\\textquoteleft":"\u2018","\\textquoteright":"\u2019","\\textbullet":"\u2022","\\textdagger":"\u2020","\\textdaggerdbl":"\u2021","\\textsection":"\xA7","\\textparagraph":"\xB6","\\textperiodcentered":"\xB7","\\textellipsis":"\u2026","\\textemdash":"\u2014","\\textendash":"\u2013","\\textregistered":"\xAE","\\texttrademark":"\u2122","\\textdegree":"\xB0"}[a]??a}o();let s;return t.length===1?s=t[0]:t.every(a=>ye(a)!==null)?s="'"+t.map(a=>ye(a)).join()+"'":s=["Text",...t],n?["Annotated",s,_c(n)]:s}function k2(e,n){return n===null?"":$(Fa(n,t=>{let i=ye(t);return i===null?e.serialize(t):i==="<{>"?"{":i==="<}>"?"}":i==="<$>"?"$":i==="<$$>"?"$$":i==="<space>"?" ":i}))}function C2(e){return e===null?"":e.replace(/[{}\[\]\\:\-\$%]/g,n=>({"{":"\\lbrace ","}":"\\rbrace ","[":"\\lbrack ","]":"\\rbrack ",":":"\\colon ","\\":"\\backslash "})[n]??"\\"+n)}function A2(e,n){let t=S(n,2);return t?A(t)==="LatexString"?ye(S(t,1))??"":A(t)==="Hold"?e.serialize(S(t,1)):e.serialize(t):""}function ii(e,n,t){for(;!e.atEnd;)if(e.match("'")||e.match("\\prime"))t++;else if(e.match("\\doubleprime"))t+=2;else if(e.match("\\tripleprime"))t+=3;else break;let i=A(n);if(i==="Derivative"||i==="Prime"){let a=Y(S(n,2))??1;return[i,me(S(n,1)),a+t]}let r=J(n),o=r&&e.getSymbolType(r).matches("function")||A(n);e.skipSpace();let s=e.parseArguments("enclosure");if(s&&s.length>0){let a=s[0],u=J(a)??"x",c=typeof n=="string"?[n,...s]:["Apply",n,...s];for(let f=0;f<t;f++)c=["D",c,u];return c}return o?t===1?["Derivative",n]:["Derivative",n,t]:t===1?["Prime",me(n)]:["Prime",me(n),t]}function R2(e,n){if(Te(n))return["Delimiter"];let t=A(n);if(t==="Delimiter"&&S(n,2)!==null){let i=ye(S(n,2));if(i?.length===1)return["Delimiter",S(n,1)??"Nothing",{str:`(${i})`}]}return t==="Matrix"&&(ye(S(n,2))??"..")===".."?["Matrix",S(n,1)]:["Delimiter",n]}function Xg(e,n){if(Te(n))return["List"];let t=A(n);if(t==="Range"||t==="Linspace")return n;if(t==="Sequence")return["List",...O(n)];if(t==="Delimiter"){let i=ye(S(n,2))??"...";if(i===";"||i===".;.")return["List",...(O(S(n,1))??[]).map(r=>Xg(e,r))];if(i===","||i===".,.")return n=S(n,1),A(n)==="Sequence"?["List",...O(n)]:["List",n??"Nothing"]}return["List",n]}function P2(e,n){return Ie(n)>1&&O(n).every(t=>{let i=A(t);return io(i)||Ct(i)})?$(["\\begin{cases}",At("\\\\")(e,n),"\\end{cases}"]):$(["\\bigl\\lbrack",At(", ")(e,n),"\\bigr\\rbrack"])}function D2(e,n){if(n===null)return null;let t=e.parseExpression({minPrec:270});if(t===null)return null;if(A(t)==="Range"){let i=S(t,1),r=S(t,2);return i&&r?["Range",n,r,["Subtract",i,n]]:null}return["Range",n,t]}var oo={"(":"(",")":")","[":"\\lbrack","]":"\\rbrack","\u27E6":"\\llbrack","\u27E7":"\\rrbrack","{":"\\lbrace","}":"\\rbrace","<":"\\langle",">":"\\rangle","\u2016":"\\Vert","\\":"\\backslash","\u2308":"\\lceil","\u2309":"\\rceil","\u230A":"\\lfloor","\u230B":"\\rfloor","\u231C":"\\ulcorner","\u231D":"\\urcorner","\u231E":"\\llcorner","\u231F":"\\lrcorner","\u23B0":"\\lmoustache","\u23B1":"\\rmoustache"};function za(e,n,t){let i=(t?.minPrec??0)>=19,r=J(n);if(r&&r.includes("_")){let a=r.indexOf("_"),u=r.substring(0,a),l=r.substring(a+1),c=parseInt(l,10),f=!isNaN(c)&&String(c)===l?c:l,p=f!==""&&(typeof f=="number"||typeof f=="string"&&f.length===1);(e.getSymbolType(u).matches("indexed_collection")||!i&&p)&&(n=["Subscript",u,f])}if(A(n)==="InvisibleOperator"&&Ie(n)===2&&A(S(n,2))==="Delimiter"){let a=J(S(n,1));if(!a)return null;let u=e.parseExpression({...t??{},minPrec:20});if(u===null)return null;let l=S(S(n,2),1),c=[];return A(l)==="Sequence"?c=[...O(l)]:l&&(c=[l]),["Assign",a,["Function",u,...c??[]]]}if(A(n)==="Subscript"&&J(S(n,1))){let a=J(S(n,1));if(!e.getSymbolType(a).matches("indexed_collection")){let c=S(n,2),f=(c!==null&&typeof c=="string"?c:void 0)??(c!==null&&typeof c=="number"?String(c):void 0);if(f&&i){let p=e.parseExpression({...t??{},minPrec:20});return p===null?null:["Assign",a+"_"+f,p]}}let u=e.parseExpression({...t??{},minPrec:20});if(u===null)return null;let l=S(n,2);return ye(l)!==null?["Assign",n,u]:J(l)?["Assign",n,u]:["Assign",n,u]}let o=A(n);if(o){let a=O(n),u=e.parseExpression({...t??{},minPrec:20});return u===null?null:["Assign",o,["Function",u,...a]]}if(!J(n))return null;let s=e.parseExpression({...t??{},minPrec:20});return s===null?null:["Assign",n,s]}function Ac(e){let n=e.parseTabular();if(!n)return["List"];if(n.every(i=>{if(i.length!==1)return!1;let r=A(i[0]);return Ct(r)||io(r)}))return["List",...n.map(i=>i[0])];let t=[];for(let i of n)if(i.length===1)t.push("True"),t.push(i[0]);else if(i.length===2){let r=ye(i[1]);t.push(r?"True":xc(i[1])??"True"),t.push(i[0])}return["Which",...t]}function fr(e,n){let t=e.index;if(!e.match("<{>"))return e.index=t,!1;for(;e.match("<space>"););let i="";for(;!e.atEnd&&e.peek!=="<}>"&&e.peek!=="<space>";){let r=e.peek;if(/^[a-zA-Z]$/.test(r))i+=r,e.nextToken();else break}for(;e.match("<space>"););return!e.match("<}>")||i!==n?(e.index=t,!1):!0}function ro(e,n){let t=e.index;if(e.skipVisualSpace(),e.match("\\text")){if(fr(e,n))return!0;e.index=t}let i=e.index,r=e.parseSymbol();return r!==null&&J(r)===n?!0:(e.index=i,!1)}function as(e,n){let t=e.index,i=ro(e,n);return e.index=t,i}function Hg(e,n){e.skipVisualSpace();let t=e.parseExpression({minPrec:0,condition:o=>as(o,"then")});if(t===null||!ro(e,"then"))return null;e.skipVisualSpace();let i=e.parseExpression({minPrec:0,condition:o=>as(o,"else")});if(i===null||!ro(e,"else"))return null;e.skipVisualSpace();let r=e.parseExpression(n)??"Nothing";return["If",t,i,r]}function Wg(e,n){let t=e.parseExpression({minPrec:0,condition:a=>as(a,"from")}),i=t?J(t):null;if(!i||!ro(e,"from"))return null;let r=e.parseExpression({minPrec:0,condition:a=>as(a,"to")});if(r===null||!ro(e,"to"))return null;let o=e.parseExpression({minPrec:0,condition:a=>as(a,"do")});return o===null||!ro(e,"do")?null:["Loop",e.parseExpression(n)??"Nothing",["Element",i,["Range",r,o]]]}function Yg(e,n,t){let i={minPrec:21,condition:s=>{if(t?.condition?.(s))return!0;let a=s.index;s.skipVisualSpace();let u=s.peek===",";return s.index=a,u}},r=[];do{e.skipVisualSpace();let s=e.parseExpression(i);if(!s)break;r.push(s),e.skipVisualSpace()}while(e.match(","));if(r.length===0)return null;let o=[];for(let s of r){let a=Kg(s);A(a)==="Assign"&&o.push(["Declare",S(a,1)]),o.push(a)}return o.push(n),["Block",...o]}function $2(e){let n=[];for(let t of e){let i=Kg(t);A(i)==="Assign"&&n.push(["Declare",S(i,1)]),n.push(i)}return["Block",...n]}function Kg(e){if(A(e)!=="Assign")return e;let n=S(e,1);if(A(n)!=="Subscript")return e;let t=J(S(n,1));if(!t)return e;let i=S(n,2),r=(typeof i=="string"?i:void 0)??(typeof i=="number"?String(i):void 0);return r?["Assign",`${t}_${r}`,S(e,2)??"Nothing"]:e}function Rc(...e){return(n,t)=>{if(!J(t)&&A(t)!=="List")return null;let i=null;return e.length===0&&(i=n.parseGroup()),i??=n.parseExpression({minPrec:0}),i===null||e.length>0&&!n.matchAll(e)||ye(i)!==null?null:(A(i)==="Delimiter"&&(i=S(i,1)??"Nothing"),A(i)==="Sequence"?["At",t,...O(i)]:["At",t,i])}}var Pc;function th(e){if(!Pc){let t=`^[${["Zyyy","Zinh","Arab","Armn","Beng","Bopo","Cyrl","Deva","Ethi","Geor","Grek","Gujr","Guru","Hang","Hani","Hebr","Hira","Kana","Knda","Khmr","Laoo","Latn","Mlym","Mymr","Orya","Sinh","Taml","Telu","Thaa","Thai","Tibt"].map(i=>`\\p{Script=${i}}`).join("")}]*$`;Pc=new RegExp(t,"u")}return Pc.test(e)}function rn(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)||so.test(e)?!0:th(e)?/^[\p{XIDS}_]\p{XIDC}*$/u.test(e):!1}var O2="\\u{FE0F}",L2="\\u{20E3}",F2="\\u{200D}",q2="\\p{RI}\\p{RI}",V2="(?:[\\u{E0020}-\\u{E007E}]+\\u{E007F})",eh=`(?:\\p{EMod}|${O2}${L2}?|${V2})`,B2="(?:(?=\\P{XIDC})\\p{Emoji})",nh=`(?:${B2}${eh}*|\\p{Emoji}${eh}+|${q2})`,ih=`(?:${nh})(${F2}${nh})*`,J2=new RegExp(`(?:${ih})+`,"u"),so=new RegExp(`^(?:${ih})+$`,"u");function it(e){return typeof e!="string"?"not-a-string":e===""?"empty-string":e.normalize()!==e?"expected-nfc":/[\u200E\u200F\u2066-\u2069\u202A-\u202E]/.test(e)?"unexpected-bidi-marker":so.test(e)?"valid":/\p{XIDC}/u.test(e)&&J2.test(e)?"unexpected-mixed-emoji":th(e)?rn(e)?"valid":rn(e[0])?"invalid-char":"invalid-first-char":"unexpected-script"}var $c={deg:e=>`${e}\\degree`,prime:e=>`${e}^{\\prime}`,dprime:e=>`${e}^{\\doubleprime}`,ring:e=>`\\mathring{${e}}`,hat:e=>`\\hat{${e}}`,tilde:e=>`\\tilde{${e}}`,vec:e=>`\\vec{${e}}`,bar:e=>`\\overline{${e}}`,underbar:e=>`\\underline{${e}}`,dot:e=>`\\dot{${e}}`,ddot:e=>`\\ddot{${e}}`,tdot:e=>`\\dddot{${e}}`,qdot:e=>`\\ddddot{${e}}`,acute:e=>`\\acute{${e}}`,grave:e=>`\\grave{${e}}`,breve:e=>`\\breve{${e}}`,check:e=>`\\check{${e}}`},Oc={upright:e=>`\\mathrm{${e}}`,italic:e=>`\\mathit{${e}}`,bold:e=>`\\mathbf{${e}}`,script:e=>`\\mathscr{${e}}`,fraktur:e=>`\\mathfrak{${e}}`,doublestruck:e=>`\\mathbb{${e}}`,blackboard:e=>`\\mathbb{${e}}`,calligraphic:e=>`\\mathcal{${e}}`,gothic:e=>`\\mathfrak{${e}}`,sansserif:e=>`\\mathsf{${e}}`,monospace:e=>`\\mathtt{${e}}`},Lc=class{options;dictionary;level=-1;constructor(n,t){this.dictionary=n,this.options={dmsFormat:!1,angleNormalization:"none",...t}}wrap(n,t){if(n==null)return"";if(t===void 0)return this.wrapString(this.serialize(n),this.options.groupStyle(n,this.level+1));if(typeof n=="number"||Ai(n)){let r=Y(n);return r!==null&&r<0&&t>Be?this.wrap(n):this.serialize(n)}let i=A(n);if(i&&i!=="Delimiter"&&i!=="Subscript"){let r=this.dictionary.ids.get(i);if(r&&(r.kind==="symbol"||r.kind==="expression"||r.kind==="prefix"||r.kind==="infix"||r.kind==="postfix")&&r.precedence<t)return this.wrapString(this.serialize(n),this.options.applyFunctionStyle(n,this.level))}return this.serialize(n)}wrapShort(n){if(n==null)return"";let t=this.serialize(n);if(J(n)!==null||kt(n)&&!/^(-|\.)/.test(t))return t;let r=A(n);return r==="Delimiter"&&Ie(n)===1||r!=="Add"&&r!=="Negate"&&r!=="Subtract"&&r!=="PlusMinus"&&r!=="Multiply"?t:this.wrapString(t,this.options.groupStyle(n,this.level+1))}wrapString(n,t,i){if(t==="none")return n;i??="()";let r=i?.[0]??".",o=i?.[1]??".";return r==='"'?r="``":r==="|"?r="\\lvert":r=oo[r]??r,o==='"'?o="''":o==="|"?o="\\rvert":o=oo[o]??o,r==="."&&o==="."?n:((r==="."||o===".")&&t==="normal"&&(t="scaled"),t==="scaled"?`\\left${r}${n}\\right${o}}`:t==="big"?`${`\\Bigl${r}`}${n}${`\\Bigr${o}`})`:r+n+o)}wrapArguments(n){return this.wrapString(O(n).map(t=>this.serialize(t)).join(", "),this.options.applyFunctionStyle(n,this.level))}serializeSymbol(n,t){return typeof n=="string"||Xr(n),t?.kind==="function"?Dc(J(n)??"")??"":t?.serialize?.(this,n)??Dc(J(n))??""}serializeFunction(n,t){if(t?.serialize)return t.serialize(this,n);let i=A(n);return Dc(i,"auto")+this.wrapArguments(n)}serialize(n){if(n==null)return"";this.level+=1;try{let t=(()=>{let i=Ug(n,this.options);if(i)return i;let r=ye(n);if(r!==null)return`\\text{${r}}`;let o=J(n);if(o!==null)return this.serializeSymbol(n,this.dictionary.ids.get(o));let s=A(n);if(s){let a=this.dictionary.ids.get(s);return this.serializeFunction(n,a)}throw Error(`Syntax error ${n?JSON.stringify(n,void 0,4):""}`)})();return this.level-=1,t??""}catch{}return this.level-=1,""}applyFunctionStyle(n,t){return this.options.applyFunctionStyle(n,t)}groupStyle(n,t){return this.options.groupStyle(n,t)}rootStyle(n,t){return this.options.rootStyle(n,t)}fractionStyle(n,t){return this.options.fractionStyle(n,t)}logicStyle(n,t){return this.options.logicStyle(n,t)}powerStyle(n,t){return this.options.powerStyle(n,t)}numericSetStyle(n,t){return this.options.numericSetStyle(n,t)}};function Fc(e){let n=e.match(/^____([0-9A-Fa-f]{6})(.*)/s);if(n)return[`\\unicode{"${(n[1].replace(/^0+/,"")||"0").padStart(4,"0")}}`,n[2]];let t=e.match(/^([^_]+)/)?.[1]??"",i=xt.findIndex(a=>t===a[0]);if(i>=0)return[xt[i][1],e.substring(xt[i][0].length)];let r={zero:"0",one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9",ten:"10"};if(i=Object.keys(r).findIndex(a=>e.startsWith(a)),i>=0){let a=Object.keys(r)[i];return[r[a],e.substring(a.length)]}let o=e.codePointAt(0);if(i=xt.findIndex(a=>a[2]===o),i>=0)return[xt[i][1],e.substring(1)];let s={plus:"+",minus:"-",pm:"\\pm",ast:"\\ast",dag:"\\dag",ddag:"\\ddag",hash:"\\#",bottom:"\\bot",top:"\\top",bullet:"\\bullet",circle:"\\circ",diamond:"\\diamond",times:"\\times",square:"\\square",star:"\\star"};if(i=Object.keys(s).findIndex(a=>t===a),i>=0){let a=Object.keys(s)[i];return[s[a],e.substring(a.length)]}return[t,e.substring(t.length)]}function z2(e){let[n,t]=Fc(e),i=[];for(;t.length>0;){let o=t.match(/^_([a-zA-Z]+)(.*)/);if(!o||!$c[o[1]])break;i.push(o[1]),t=o[2]}let r=[];for(;t.length>0;){let o=t.match(/^_([a-zA-Z]+)(.*)/);if(!o||!Oc[o[1]])break;r.push(o[1]),t=o[2]}return[n,i,r,t]}function Ua(e,n=!0,t="auto"){let[i,r,o,s]=z2(e);for(let a of r)$c[a]&&(i=$c[a](i));for(;s.length>0&&!s.startsWith("_")&&!/^\d/.test(s);){let[a,u]=Fc(s);if(a===""||u===s)break;i+=a,s=u}if(n){let a=[],u=[],l=i.match(/^([^\d].*?)(\d+)$/);for(l&&(u.push(l[2]),i=l[1]);s.length>0;){let c=s.match(/^____([0-9A-Fa-f]{6})(.*)/s);if(c){let f=c[1].replace(/^0+/,"")||"0";if(i+=`\\unicode{"${f.padStart(4,"0")}}`,s=c[2],s.length>0&&!s.startsWith("_")){let[p,d]=Fc(s);i+=p,s=d}}else if(s.startsWith("__")){let[f,p]=Ua(s.substring(2),!1,"none");a.push(f),s=p}else if(s.startsWith("_")){let[f,p]=Ua(s.substring(1),!1,"none");u.push(f),s=p}else break}a.length>0&&(i=Pi("^",i,a.join(","))),u.length>0&&(i=Pi("_",i,u.join(",")))}for(let a of o)Oc[a]&&(i=Oc[a](i));if(o.length===0&&t!=="none")switch(t){case"auto":Ba(i)>1&&(i.includes("\\unicode")?i=`\\operatorname{${i}}`:i=`\\mathrm{${i}}`);break;case"operator":i=`\\operatorname{${i}}`;break;case"italic":i=`\\mathit{${i}}`;break;case"upright":i=`\\mathrm{${i}}`;break}return[i,s]}function Dc(e,n="auto"){if(e===null)return null;if(so.test(e))return e;let t=e.match(/^(_+)(.*)/);if(t&&!e.match(/^____[0-9A-Fa-f]{6}/)){let[o,s]=Ua(t[2],!0,"none");return`\\operatorname{${"\\_".repeat(t[1].length)+o+s}}`}let[i,r]=Ua(e,!0,n);return r.length>0?`\\operatorname{${e}}`:i}function rh(e,n,t){return new Lc(n,t).serialize(e)}function pr(e,n){for(;n!==BigInt(0);)[e,n]=[n,e%n];return e<0?-e:e}function oh(e,n){return e*n/pr(e,n)}function*ja(e){if(e<0)return BigInt(0);if(e<10)return BigInt([1,1,2,6,24,120,720,5040,40320,362880][Number(e)]);if(e%BigInt(2)===BigInt(1))return e*(yield*ja(e-BigInt(1)));let n=e,t=e,i=e;for(;n>2;)n-=BigInt(2),t+=n,i*=t,yield i;return i}function Rt(e){return e!==null&&Array.isArray(e)}function xn(e){return e!==null&&Array.isArray(e)&&typeof e[0]=="number"}function sh(e){return e!==null&&Array.isArray(e)&&typeof e[0]=="bigint"}function Pt(e){return e[0]==0}function qc(e){return e[0]>0}function En(e){return e[0]==e[1]}function us(e){return e[0]===-e[1]}function mr(e){return e[1]==1}function ah(e){return Number(e[0])}function uh(e){return Number(e[1])}function lh(e){return Number(e[0])/Number(e[1])}function Di(e,n){if(typeof e[0]=="number"&&!Number.isFinite(e[0]))return e;let t=n;if(t===null)return e;if(sh(t))return e=[BigInt(e[0]),BigInt(e[1])],[t[1]*e[0]+t[0]*e[1],t[1]*e[1]];if(!Number.isFinite(t[0]))return t;if(sh(e)){let o=[BigInt(t[0]),BigInt(t[1])];return[o[1]*e[0]+o[0]*e[1],o[1]*e[1]]}let i=t[1]*e[0]+t[0]*e[1],r=t[1]*e[1];return i<=9007199254740991&&i>=-9007199254740991&&r<=9007199254740991?[i,r]:!Number.isFinite(i)||!Number.isFinite(r)?[NaN,1]:[BigInt(t[1])*BigInt(e[0])+BigInt(t[0])*BigInt(e[1]),BigInt(t[1])*BigInt(e[1])]}function Zn(e,n){if(xn(e)&&xn(n)){let t=e[0]*n[0],i=e[1]*n[1];return t<=9007199254740991&&t>=-9007199254740991&&i<=9007199254740991?[t,i]:!Number.isFinite(t)||!Number.isFinite(i)?[NaN,1]:[BigInt(e[0])*BigInt(n[0]),BigInt(e[1])*BigInt(n[1])]}return xn(e)?[BigInt(e[0])*n[0],BigInt(e[1])*n[1]]:xn(n)?[BigInt(n[0])*e[0],BigInt(n[1])*e[1]]:[e[0]*n[0],e[1]*n[1]]}function dr(e){return[-e[0],e[1]]}function Ga(e){return e[0]<0?[-e[1],-e[0]]:[e[1],e[0]]}function ch(e){return[Number(e[0]),Number(e[1])]}function Za(e,n){return xn(e)&&xn(n)?e[1]===1&&n[1]===1?[Pe(e[0],n[0]),1]:[Pe(e[0],n[0]),bt(e[1],n[1])]:e[1]===1&&n[1]===1?[pr(BigInt(e[0]),BigInt(n[0])),BigInt(1)]:[pr(BigInt(e[0]),BigInt(n[0])),oh(BigInt(e[1]),BigInt(n[1]))]}function ao(e){if(xn(e)){if(e[1]<0&&(e=[-e[0],-e[1]]),e[0]===1||e[1]===1)return e;if(!Number.isFinite(e[1]))return[0,1];let r=Pe(e[0],e[1]);return r<=1?e:[e[0]/r,e[1]/r]}e[1]<0&&(e=[-e[0],-e[1]]);let n=pr(e[0],e[1]),[t,i]=n<=1?e:[e[0]/n,e[1]/n];return t<=Number.MAX_SAFE_INTEGER&&t>=Number.MIN_SAFE_INTEGER&&i<=Number.MAX_SAFE_INTEGER?[Number(t),Number(i)]:[t,i]}function fh(e){if(!Number.isFinite(e)||e%1===0)return e;let t=1e-15,i=Math.floor(e),r=1,o=0,s=i,a=1;for(;e-i>t*a*a;){e=1/(e-i),i=Math.floor(e);let u=r;r=s;let l=o;o=a,s=u+i*r,a=l+i*o}return[s,a]}function uo(e){if(_(e))return e.symbol;if(E(e))return String(e.re);if(!m(e))return"";let n=e.operator;if(n==="Divide")return`${uo(e.op1)}/${uo(e.op2)}`;if(n==="Multiply")return e.ops.map(uo).join("\u22C5");if(n==="Power"){let t=e.op2?.re;return t!==void 0?`${uo(e.op1)}^${t}`:uo(e.op1)}return""}var ph={PositiveInfinity:"+oo",NegativeInfinity:"-oo",ComplexInfinity:"~oo",NaN:"NaN",Pi:"pi",ExponentialE:"e",ImaginaryUnit:"i",ContinuationPlaceholder:"...",alpha:"alpha",beta:"beta",gamma:"gamma",delta:"delta",epsilon:"epsilon",epsilonSymbol:"varepsilon",zeta:"zeta",eta:"eta",theta:"theta",thetaSymbol:"vartheta",iota:"iota",kappa:"kappa",lambda:"lambda",mu:"mu",nu:"nu",xi:"xi",omicron:"omicron",pi:"pi",rho:"rho",sigma:"sigma",tau:"tau",upsilon:"upsilon",phi:"phi",phiSymbol:"varphi",chi:"chi",psi:"psi",omega:"omega",Gamma:"Gamma",Delta:"Delta",Theta:"Theta",Lambda:"Lambda",Xi:"Xi",Sigma:"Sigma",Upsilon:"Upsilon",Phi:"Phi",Psi:"Psi",Omega:"Omega"},mh={Add:[(e,n)=>{let i=[...e.ops];return i.length===2&&i[0].operator==="Negate"&&i[1].operator!=="Negate"&&E(i[1])&&(i=[i[1],i[0]]),i.reduce((r,o)=>{if(m(o,"Negate")){let s=n(o.op1,10);return r===""?`-${s}`:s.startsWith("+")?`${r} - ${s.substring(1)}`:s.startsWith("-")?`${r} + ${s.substring(1)}`:`${r} - ${s}`}return dh(r,n(o,10))},"")??""},11],Negate:[(e,n)=>{let t=e,i=n(t.op1,14),r=t.op1?.operator;return r==="Power"||r==="Square"?`-(${i})`:`-${i}`},14],Subtract:[(e,n)=>e.ops.reduce((i,r)=>{let o=n(r,10);return i===""?o:o.startsWith("-")?`${i} - (${o})`:`${i} - ${o}`},"")??"",11],Multiply:[(e,n)=>{let t=e;if(t.nops===2){let i=t.op1;if(E(i)){let r=i.numericValue;typeof r!="number"&&r.im!==0&&Bc(n(t.op2,12),dh(r.re.toString(),`${r.im}i`));let o=t.op2;if((_(o)||o.operator==="Power"||o.operator==="Square"||typeof lo[o.operator]=="string")&&Rt(r)&&r[0]===1){let s=r[1];return`${n(o,12)}/${s}`}return Bc(n(t.op1,12),n(t.op2,12))}}return t.ops.reduce((i,r)=>Bc(i,n(r,12)),"")},12],Divide:["/",13],Power:[(e,n)=>{let t=e,i=n(t.op2,14);if(i==="1")return n(t.op1);if(i==="(1/2)"||i==="1/2"||i==="0.5")return`sqrt(${n(t.op1)})`;if(i==="-0.5"||i==="-1/2"||i==="(-1/2)")return`1 / sqrt(${n(t.op1)})`;let r=n(t.op1,14);return r.startsWith("-")&&(r=`(${r})`),i.length===1?`${r}^${i}`:`${r}^${Tn(i)}`},15],Equal:["===",8],NotEqual:["!==",8],LessEqual:["<=",9],GreaterEqual:[">=",9],Less:["<",9],Greater:[">",9],And:["&&",4],Or:["||",3],Not:["!",14]},lo={Abs:(e,n)=>`|${n(e.op1)}|`,Norm:(e,n)=>`||${n(e.op1)}||`,Sin:"sin",Cos:"cos",Tan:"tan",Sec:"sec",Csc:"csc",Cot:"cot",Arcsin:"arcsin",Arccos:"arccos",Arctan:"arctan",Arcsec:"arcsec",Arccsc:"arccsc",Arccot:"arccot",Sinh:"sinh",Cosh:"cosh",Tanh:"tanh",Sech:"sech",Csch:"csch",Coth:"coth",Arsinh:"arsinh",Arcosh:"arcosh",Artanh:"artanh",Arsech:"arsech",Arcsch:"arcsch",Arcoth:"arcoth",Ceil:"ceil",Exp:"exp",Factorial:(e,n)=>`${n(e.op1,12)}!`,Floor:"floor",Log:"log",Ln:"ln",Log10:"log10",Sqrt:"sqrt",Root:(e,n)=>{let t=e,i=t.op1,r=t.op2;return r.isSame(2)?`sqrt${Tn(n(i))}`:`root${Tn(n(r))}${Tn(n(i))}`},Square:(e,n)=>`${n(e.op1,12)}^2`,Det:"det",Dim:"dim",Mod:"mod",Quantity:(e,n)=>{let t=e;return`${n(t.op1)} ${uo(t.op2)}`},GCD:"gcd",LCM:"lcm",Lub:"lub",Glb:"glb",Max:"max",Min:"min",PlusMinus:(e,n)=>{let[t,i]=e.ops;if(!i)return n(t);if(t&&i){let r=n(t),o=n(i);return`${r} \xB1 ${o}`}return t?`\xB1 ${n(t)}`:i?`\xB1 ${n(i)}`:"0"},Sum:(e,n)=>Vc(e,"sum",n),Product:(e,n)=>Vc(e,"prod",n),Integrate:(e,n)=>Vc(e,"int",n),Limit:(e,n)=>{let t=e,[i,r]=t.ops;if(m(i,"Function")){let o=i.ops.slice(2),s=i.op1??i,a=null;return o.length===1&&(a=o[0]),a?`lim_(${n(a)} -> ${n(r)}) ${n(s)}`:`lim_(${n(r)}) ${n(s)}`}else if(_(i))return`lim_(x -> ${n(r)}) ${n(i)}(x)`;return"lim"},Delimiter:(e,n)=>{let t=e,i=q(t.ops[1])?t.ops[1].string:void 0;return U2(t.ops[0],i,n)},Sequence:(e,n)=>{let t=e;return t.nops===0?"":t.ops.map(i=>n(i)).join(" ")},List:(e,n)=>`[${e.ops.map(i=>n(i))}]`,Single:(e,n)=>`(${e.ops.map(i=>n(i)).join(", ")})`,Pair:(e,n)=>`(${e.ops.map(i=>n(i)).join(", ")})`,Triple:(e,n)=>`(${e.ops.map(i=>n(i)).join(", ")})`,Tuple:(e,n)=>`(${e.ops.map(i=>n(i)).join(", ")})`,Block:(e,n)=>{let t=e;return t.nops===0?"{}":t.nops===1?`{${n(t.op1)}}`:`{ ${t.ops.map(i=>n(i)).join(`;
|
|
8
|
+
`)}
|
|
9
|
+
}`},EvaluateAt:(e,n)=>{let t=e,i=t.op1,r=t.ops.slice(1);return r.length===0?n(i):r.length===1?`(${n(i)})|_(${n(r[0])})`:r.length===2?`(${n(i)})|_(${n(r[0])})^(${n(r[1])})`:`(${n(i)})|_(${r.map(o=>n(o)).join(", ")})`},Function:(e,n)=>{let t=e,i=t.ops.slice(1),r=()=>i.map(o=>n(o)).join(", ");return m(t.op1,"Block")?t.op1.nops===0?`(${r()}) |-> {}`:t.op1.nops===1?i.length===1&&_(i[0],"_1")?`(_) |-> ${n(t.op1.op1.subs({_1:"_"}))}`:`(${r()}) |-> ${n(t.op1.op1)}`:`(${r()}) |-> {
|
|
10
|
+
${t.op1.ops.map(o=>n(o)).join(`;
|
|
11
|
+
`)}
|
|
12
|
+
}`:`(${r()}) |-> ${n(t.op1)}`},Domain:e=>JSON.stringify(e.json),Error:(e,n)=>{let t=e;return t.nops===1?`Error(${n(t.op1)})`:t.nops===2?q(t.op1)?`Error("${t.op1.string}", ${n(t.op2)})`:`Error(${n(t.op1)}, ${n(t.op2)})`:`Error(${t.ops.map(i=>n(i)).join(", ")})`},LatexString:e=>{let n=e;return`"${q(n.op1)?n.op1.string:""}"`}};function Vc(e,n,t){if(!m(e))return`${n}()`;let[i,...r]=e.ops,o=[],s,a=[];if(m(i,"Function")){a=i.ops.slice(1);let l=i.op1??i;m(l,"Block")?s=t(l.op1??l):s=t(l)}else if(i)a=[],s=t(i);else return`${n}()`;let u=n;for(let l of r)if(["Range","Tuple","Pair","Single","Limits"].includes(l.operator)&&m(l)&&l.nops!==0){if(l.nops===2)_(l.op1)&&l.op1.symbol?(l.op1.symbol!=="Nothing"&&o.push(l.op1),_(l.op2,"Nothing")||(n==="int"?u+=`_${Tn(t(l.op2))}`:u+="_"+Tn(`${l.op1.symbol}=${t(l.op2)}`))):(_(l.op1,"Nothing")||(u+=`_${Tn(t(l.op1))}`),_(l.op2,"Nothing")||(u+=`^${Tn(t(l.op2))}`));else if(l.nops===3){let c="";_(l.op1,"Nothing")||(o.push(l.op1),c=_(l.op1)?l.op1.symbol:"");let f=_(l.op2,"Nothing")?null:l.op2,p=_(l.op3,"Nothing")?null:l.op3;f?n==="int"||!c?u+=`_${Tn(t(f))}`:u+="_"+Tn(`${c}=${t(f)}`):n!=="int"&&(u+=`_${Tn(t(l.op1))}`),p&&(u+=`^${Tn(t(p))}`)}}return n==="int"?u+=Tn(s+a.map(l=>` d${t(l)}`).join(" ")):u+=Tn(s),u}function U2(e,n,t){n||(n="(,)");let i="",r="",o="";if(n.length===1&&(i=n),n.length===2&&(r=n[0],o=n[1]),n.length===3&&(r=n[0],i=n[1],o=n[2]),!e)return`${r}${o}`;let s=[e];return m(e,"Sequence")&&(s=e.ops),`${r}${s.map(a=>t(a)).join(i)}${o}`}function Tn(e,n=0,t=-1){return n>t&&!/^\(.+\)$/.test(e)?`(${e})`:e}function Ha(e,n={}){return n.symbols?.[e]?n.symbols[e]:ph[e]?ph[e]:e.startsWith("_")?e:lo[e]&&typeof lo[e]=="string"?lo[e]:e.length===1?e:`"${e}"`}function ls(e,n={},t=0){if(e===void 0)return"[undefined]";if(e===null)return"[null]";if(_(e))return Ha(e.symbol,n);let i=(c,f=0)=>ls(c,n,f);if(q(e))return`"${e.string.replace(/"/g,'\\"')}"`;if(E(e)){let c=e.numericValue;return e.isNaN?Ha("NaN",n):e.isFinite===!1?e.isNegative!==!0&&e.isPositive!==!0?Ha("ComplexInfinity",n):Ha(e.isNegative?"NegativeInfinity":"PositiveInfinity",n):c.toString()}let r=m(e)?e:null,o=n.operators?{...mh,...n.operators}:mh,[s,a]=o[e.operator]??[];if(s&&r){let c="";if(typeof s=="function")c=s(r,i);else{if(r.nops===1)return`${s}${i(r.op1,a+1)}`;c=r.ops.map(f=>i(f,a+1)).join(` ${s} `)??""}return Tn(c,t,a)}let l=(n.functions?{...lo,...n.functions}:lo)[e.operator];return typeof l=="function"?l(e,i):r?typeof l=="string"?`${l}(${r.ops.map(c=>i(c)).join(", ")??""})`:`${e.operator}(${r.ops.map(c=>i(c)).join(", ")??""})`:JSON.stringify(e.json)}function Bc(e,n){return e?n?((n.startsWith("-")||n.startsWith("+"))&&(n=`(${n})`),e.match(/^[-+]?\d+$/)&&n.match(/^[a-zA-Z\(]/)?e+n:`${e} * ${n}`):e:n}function dh(e,n){return e?n?n.startsWith("-")?`${e} - ${n.substring(1)}`:n.startsWith("+")?`${e} + ${n.substring(1)}`:`${e} + ${n}`:e:n}var vn=class extends Error{cause;value;constructor({message:n,value:t,cause:i}={}){super(n??"Operation canceled"),t&&(this.value=t),this.cause=i,this.name="CancellationError"}};async function co(e,n,t){let i=performance.now();for(;;){let r=performance.now(),o=16;for(;performance.now()-r<o;){let{done:s,value:a}=e.next();if(s)return a;if(t?.aborted)throw new vn({value:a,cause:t.reason});if(performance.now()-i>=n)throw new vn({value:a,cause:"timeout",message:`Timeout exceeded (${n}ms)`})}await new Promise(s=>setTimeout(s,0))}}function Dt(e,n){let t=Date.now();for(;;){let{done:i,value:r}=e.next();if(i)return r;if(Date.now()-t>=n)throw new vn({value:r,cause:"timeout",message:`Timeout exceeded (${n}ms)`})}}var hh;function bh(e){hh=e}var Wa;function yh(e){Wa=e}var xh;function Eh(e){xh=e}var Jc;function vh(e){Jc=e}var _h;function Nh(e){_h=e}var gh=["Multiply","Power","Negate","Divide"];function j2(e,n){return e.has(gh)?!0:typeof n=="object"&&n!==null&&"has"in n?n.has(gh):!1}var de=class e{_kind="expression";engine;verbatimLatex;constructor(n,t){this.engine=n,t?.latex!==void 0&&(this.verbatimLatex=t.latex)}valueOf(){try{return this.symbol==="True"?!0:this.symbol==="False"?!1:this.symbol==="NaN"?NaN:this.symbol==="PositiveInfinity"?1/0:this.symbol==="NegativeInfinity"?-1/0:this.symbol==="ComplexInfinity"?"~oo":this.isInfinity?this.isPositive?1/0:this.isNegative?-1/0:"~oo":typeof this.string=="string"?this.string:typeof this.symbol=="string"?this.value?.valueOf()??this.symbol:ls(this)}catch(n){if(n instanceof vn){let t=n.message??"<canceled>";return n.cause?`${t}: ${n.cause}`:`${t}`}return n.message?n.message:"<error>"}}[Symbol.toPrimitive](n){if(n==="number"){let t=this.valueOf();return typeof t=="number"?t:null}return this.toString()}toString(){try{if(this.isLazyCollection){let n=this.evaluate({materialization:!0});if(!n.isLazyCollection)return ls(n)}return ls(this)}catch(n){if(n instanceof vn){let t=n.message??"<canceled>";return n.cause?`${t}: ${n.cause}`:`${t}`}return n.message?n.message:"<error>"}}toLatex(n){if(this.isLazyCollection){let r=this.evaluate({materialization:n?.materialization??!0});if(!r.isLazyCollection)return r.toLatex(n)}let t=this.toMathJson({prettify:n?.prettify??!0}),i={imaginaryUnit:"\\imaginaryI",positiveInfinity:"\\infty",negativeInfinity:"-\\infty",notANumber:"\\operatorname{NaN}",decimalSeparator:this.engine.decimalSeparator,digitGroupSeparator:"\\,",exponentProduct:"\\cdot",beginExponentMarker:"10^{",endExponentMarker:"}",digitGroup:3,truncationMarker:"\\ldots",repeatingDecimal:"vinculum",fractionalDigits:"max",notation:"auto",avoidExponentsInRange:[-7,20],prettify:!0,materialization:!1,invisibleMultiply:"",invisiblePlus:"",multiply:"\\times",missingSymbol:"\\blacksquare",dmsFormat:!1,angleNormalization:"none",applyFunctionStyle:Ag,groupStyle:Rg,rootStyle:Pg,fractionStyle:Dg,logicStyle:$g,powerStyle:Og,numericSetStyle:Lg};return n?.fractionalDigits==="auto"?i.fractionalDigits=-this.engine.precision:i.fractionalDigits=n?.fractionalDigits??"max",typeof i.fractionalDigits=="number"&&i.fractionalDigits>this.engine.precision&&(i.fractionalDigits=this.engine.precision),i={...i,...n??{},fractionalDigits:i.fractionalDigits},!i.prettify&&this.verbatimLatex?this.verbatimLatex:rh(t,this.engine._indexedLatexDictionary,i)}get latex(){return this.toLatex()}toJSON(){return this.json}toMathJson(n){let t={exclude:[],shorthands:["function","symbol","string","number","dictionary"],metadata:[],fractionalDigits:"max",repeatingDecimal:!0,prettify:!0};n&&((typeof n.shorthands=="string"&&n.shorthands==="all"||n.shorthands?.includes("all"))&&(t.shorthands=["function","symbol","string","number","dictionary"]),Array.isArray(n.shorthands)&&(t.shorthands=n.shorthands),(typeof n.metadata=="string"&&n.metadata==="all"||n.metadata?.includes("all"))&&(t.metadata=["latex","wikidata"]),n.fractionalDigits==="auto"&&(t.fractionalDigits=-this.engine.precision),typeof n.fractionalDigits=="number"&&(t.fractionalDigits=n.fractionalDigits));let i={...t,...n,fractionalDigits:t.fractionalDigits,shorthands:t.shorthands,metadata:t.metadata};return hh(this.engine,this,i)}print(){let n=console.info;n?.(this.toString())}get isStructural(){return!0}get canonical(){return this}get structural(){return this}get isValid(){return!0}get isPure(){return!1}get isConstant(){return!0}get isNumberLiteral(){return!1}get numericValue(){}toNumericValue(){return[this.engine._numericValue(1),this]}get isEven(){}get isOdd(){}get re(){return NaN}get im(){return NaN}get bignumRe(){}get bignumIm(){}get sgn(){}get isPositive(){}get isNonNegative(){}get isNegative(){}get isNonPositive(){}neg(){return this.engine.NaN}inv(){return this.engine.NaN}abs(){return this.engine.NaN}add(n){return this.engine.NaN}sub(n){return this.add(n.neg())}mul(n){return this.engine.NaN}div(n){return this.engine.NaN}pow(n){return this.engine.NaN}root(n){return this.engine.NaN}sqrt(){return this.engine.NaN}ln(n){return this.engine.NaN}get numerator(){return this}get denominator(){return this.engine.One}get numeratorDenominator(){return[this,this.engine.One]}toRational(){return null}factors(){return[this]}polynomialCoefficients(n){let t;if(n===void 0){let r=this.unknowns;if(r.length!==1)return;t=[r[0]]}else if(typeof n=="string")t=[n];else{if(n.length===0)return;t=n}for(let r of t)if(Jc(this,r)<0)return;let i=xh(this,t[0]);if(i!==null)return i.reverse()}polynomialRoots(n){if(n===void 0){let t=this.unknowns;if(t.length!==1)return;n=t[0]}if(!(Jc(this,n)<0))return _h(this,n)}is(n,t){if(this.isSame(n))return!0;if(Wa&&j2(this,n)){let i=Wa(this);if(i!==this&&i.isSame(n))return!0;if(n instanceof e){let r=Wa(n);if(i.isSame(r))return!0}}if(this.freeVariables.length>0)return!1;if(typeof n=="number"||typeof n=="bigint"){let i=this.N();if(i===this||!E(i))return!1;let r=t??this.engine.tolerance,o=i.re,s=i.im;return typeof n=="number"?Number.isNaN(n)?Number.isNaN(o):Number.isFinite(n)?Math.abs(o-n)<=r&&Math.abs(s)<=r:o===n:Math.abs(o-Number(n))<=r&&Math.abs(s)<=r}if(n instanceof e){if(n.freeVariables.length>0)return!1;let i=this.N(),r=n.N();if(!E(i)||!E(r))return!1;let o=t??this.engine.tolerance;return Math.abs(i.re-r.re)<=o&&Math.abs(i.im-r.im)<=o}return!1}isSame(n){if(typeof n=="number"||typeof n=="bigint"||n==null)return!1;if(typeof n=="boolean"){let t=this.value;return n===!0?_(t,"True"):n===!1?_(t,"False"):!1}if(typeof n=="string"){let t=this.value;return q(t)?t.string===n:!1}return sr(this,n)}isEqual(n){return Oa(this,n)}isLess(n){let t=Hr(this,n);if(t!==void 0)return t==="<"}isLessEqual(n){let t=Hr(this,n);if(t!==void 0)return t==="<="||t==="<"||t==="="}isGreater(n){let t=Hr(this,n);if(t!==void 0)return t===">"}isGreaterEqual(n){let t=Hr(this,n);if(t!==void 0)return t===">="||t===">"||t==="="}get symbol(){}get tensor(){}get string(){}getSubexpressions(n){return Sh(this,n)}get subexpressions(){return this.getSubexpressions("")}get symbols(){let n=new Set;return Th(this,n),Array.from(n).sort()}get unknowns(){let n=new Set;return zc(this,n),Array.from(n).sort()}get freeVariables(){return this.unknowns}get errors(){return this.getSubexpressions("Error")}get isFunctionExpression(){return!1}get ops(){}get isScoped(){return!1}get localScope(){}get nops(){return 0}get op1(){return this.engine.Nothing}get op2(){return this.engine.Nothing}get op3(){return this.engine.Nothing}get isNaN(){}get isInfinity(){}get isFinite(){}get shape(){return[]}get rank(){return 0}subs(n,t){return t?.canonical===!0?this.canonical:this}map(n,t){if(!this.ops)return n(this);let i=t?.canonical??this.isCanonical,r=t?.recursive??!0,o=this.ops.map(s=>r?s.map(n,t):n(s));return n(this.engine.function(this.operator,o,{form:i?"canonical":"raw"}))}solve(n){return null}replace(n){return null}has(n){return!1}get description(){if(this.baseDefinition&&this.baseDefinition.description)return typeof this.baseDefinition.description=="string"?[this.baseDefinition.description]:this.baseDefinition.description}get url(){return this.baseDefinition?.url??void 0}get wikidata(){return this.baseDefinition?.wikidata??void 0}get complexity(){}get baseDefinition(){}get valueDefinition(){}get operatorDefinition(){}infer(n,t){return!1}bind(){}reset(){}get value(){}set value(n){throw new Error(`Can't change the value of \\(${this.toString()}\\)`)}get type(){return V.unknown}set type(n){throw new Error(`Can't change the type of \\(${this.toString()}\\)`)}get isNumber(){}get isInteger(){}get isRational(){}get isReal(){}simplify(n){return this}evaluate(n){return this.simplify()}evaluateAsync(n){return Promise.resolve(this.evaluate())}N(){return this.evaluate({numericApproximation:!0})}get isCollection(){return!1}get isIndexedCollection(){return!1}get isLazyCollection(){return!1}contains(n){}subsetOf(n,t){}get count(){}get isEmptyCollection(){if(!this.isCollection)return;let n=this.count;if(n!==void 0)return n===0}get isFiniteCollection(){if(!this.isCollection)return;let n=this.count;if(n!==void 0)return Number.isFinite(n)}each(){return(function*(){})()}at(n){}get(n){}indexWhere(n){}};function Sh(e,n){let t=!n||e.operator===n?[e]:[];if(m(e))for(let i of e.ops)t.push(...Sh(i,n));return t}function Th(e,n){if(_(e)){n.add(e.symbol);return}if(m(e))for(let t of e.ops)Th(t,n)}function zc(e,n){if(_(e)){let t=e.symbol;if(t==="Unknown"||t==="Undefined"||t==="Nothing"||e.valueDefinition?.isConstant||e.operatorDefinition)return;e.engine._getSymbolValue(t)===void 0&&n.add(t);return}if(m(e))if(e.isScoped&&e.localScope){let t=new Set;for(let r of e.ops)m(r)&&((r.operator==="Limits"||r.operator==="Element")&&_(r.op1)&&t.add(r.op1.symbol),(r.operator==="Assign"||r.operator==="Declare")&&_(r.op1)&&t.add(r.op1.symbol));let i=new Set;for(let r of e.ops)zc(r,i);for(let r of i)t.has(r)||n.add(r)}else for(let t of e.ops)zc(t,n)}var Et=class{name;wikidata;description;url;_engine;_defValue;_value;_type;inferredType;_isConstant=!1;holdUntil="evaluate";eq;neq;cmp;collection;subscriptEvaluate;constructor(n,t,i){if(this._engine=n,this.name=t,i.wikidata&&(this.wikidata=i.wikidata),i.description&&(this.description=i.description),i.url&&(this.url=i.url),i.holdUntil&&(this.holdUntil=i.holdUntil),i.isConstant&&(this._isConstant=i.isConstant,this._defValue=i.value),i.type){let r=i.type instanceof V?i.type:Q(i.type);if(!Qt(r))throw new Error([`Symbol "${this.name}"`,`The type "${i.type}" is invalid `].join(`
|
|
13
|
+
| `));this._type=new V(r,n._typeResolver),this.inferredType=i.inferred??!1,n.listenToConfigurationChange(this)}if(this._value=Ih(this._engine,i.value),this._value){if(!this._type||this._type.isUnknown)this.isConstant?(this._type=this._value.type,this.inferredType=!1):(this._type=G2(n,this._value),this.inferredType=!0);else if(!this._value.type.matches(this._type))throw new Error([`Symbol "${this.name}"`,`The value "${this._value.toString()}" of type "${this._value.type}" is not compatible with the type "${this._type}"`].join(`
|
|
14
|
+
| `))}if(i.eq&&(this.eq=i.eq),i.neq&&(this.neq=i.neq),i.cmp&&(this.cmp=i.cmp),i.collection&&(this.collection=$a(i.collection)),i.subscriptEvaluate&&(this.subscriptEvaluate=i.subscriptEvaluate),this.holdUntil==="never"&&!this.isConstant)throw new Error([`Symbol "${this.name}"`,'The "holdUntil" property cannot be "never" for a non-constant symbol'].join(`
|
|
15
|
+
| `))}toJSON(){let n={name:this.name,isConstant:this._isConstant};return this.wikidata&&(n.wikidata=this.wikidata),this.description&&(n.description=this.description),this.url&&(n.url=this.url),this._type&&(n.type=this._type.toString()),n.inferredType=this.inferredType,n.holdUntil=this.holdUntil,this.collection&&(n.collection=this.collection),n}get isConstant(){return this._isConstant}get value(){return this._value===null&&(this._value=Ih(this._engine,this._defValue)),this._value}set value(n){if(this._isConstant)throw new Error(`Cannot set value of constant "${this.name}"`);this._value=n,this._engine._generation+=1}get type(){return this._type??this._value?.type??V.unknown}set type(n){if(this._isConstant)throw new Error(`The type of the constant "${this.name}" cannot be changed`);this._type=n instanceof V?n:new V(n,this._engine._typeResolver),this._type.isUnknown&&(this._defValue=void 0,this._value=void 0)}onConfigurationChange(){this.isConstant&&(this._value=null)}};function Ih(e,n){if(n!==void 0)return cr(n)?e.parse(n)??e.symbol("Undefined"):typeof n=="function"?e.box(n(e)??"Undefined"):n instanceof de?n:e.box(n)}function G2(e,n){return n?n.type.matches("integer")?e.type("integer"):n.type.matches("rational")||n.type.matches("real")?e.type("real"):n.type.matches("complex")?e.type("number"):n.type:e.type("unknown")}function Ya(e){let n=e.operator;if(["Ln","Log","Log2","Log10","Sin","Cos","Tan","Exp"].includes(n)&&m(e)&&e.op1?.isConstant)return!e.simplify().isRational;if(m(e)){for(let i of e.ops)if(Ya(i))return!0}return!1}function wh(e){return e!=null&&e instanceof de&&e.type.matches("dictionary")}function $t(e){return e instanceof de}function Mh(e){return e!==null&&typeof e=="object"}function Z2(e){return e!=null&&typeof e[Symbol.iterator]=="function"}function Je(e){return e.precision>ht}function rt(e){let n=0;for(let t=0;t<e.length;t++)n=Math.imul(31,n)+e.charCodeAt(t)|0;return Math.abs(n)}function cs(e){if(e==null)return[];if(typeof e=="string")return[e];if($t(e))return cs(_(e)?e.symbol:void 0);if(Z2(e)){let n=[];for(let t of e)typeof t=="string"?n.push(t):$t(t)&&_(t)?n.push(t.symbol):n.push("");return n}return[]}function Qa(e){return _(e)?e.symbol==="Numbers"?"number":e.symbol==="ComplexNumbers"?"complex":e.symbol==="ImaginaryNumbers"?"imaginary":e.symbol==="RealNumbers"?"real":e.symbol==="RationalNumbers"?"rational":e.symbol==="Integers"?"integer":"unknown":"unknown"}function H2(e){if(!e)return e;let n=e.engine,t=n.angularUnit;return t==="rad"||(t==="deg"&&(e=e.mul(n.Pi).div(180)),t==="grad"&&(e=e.mul(n.Pi).div(200)),t==="turn"&&(e=e.mul(n.Pi).mul(2))),e}function Xa(e){if(!e)return e;let n=H2(e);if(!n)return;if(n.N().im!==0)return n;let t=n.engine,[i,r]=gr(n);if(i.isZero)return t.number(r);let o=t._numericValue(i.bignumRe?i.bignumRe.mod(2):i.re%2),s=t.Pi.mul(o).N();return t.number(r.add(ce(s)??0))}function hr(e){if(typeof e=="number")return;let n=e.engine;if(_(e,"ImaginaryUnit"))return n.One;if(e.re===0)return n.number(e.im);if(m(e,"Negate"))return hr(e.op1)?.neg();if(m(e,"Complex"))return e.op1.isSame(0)&&!isNaN(e.op2.re)?n.number(e.op2.re):void 0;if(m(e,"Multiply")&&e.nops===2){let[t,i]=e.ops;if(_(t,"ImaginaryUnit"))return i;if(_(i,"ImaginaryUnit"))return t;if(E(i)&&i.re===0&&i.im!==0)return t.mul(i.im);if(E(t)&&t.re===0&&t.im!==0)return i.mul(t.im)}if(m(e,"Divide")){let t=e.op2;return t.isSame(0)?void 0:hr(e.op1)?.div(t)}}function fs(e){let{engine:n}=e;return e===n.I?!0:E(e)?e.re===0&&e.im===1:_(e)?e.canonical.isSame(n.I):!1}function gr(e){let n=e.engine;if(_(e,"Pi"))return[n._numericValue(1),n._numericValue(0)];if(m(e,"Negate")){let[i,r]=gr(e.ops[0]);return[i.neg(),r.neg()]}if(m(e,"Add")&&e.nops===2){let[i,r]=gr(e.op1),[o,s]=gr(e.op2);return[i.add(o),r.add(s)]}if(m(e,"Multiply")&&e.nops===2){if(E(e.op1)){let[i,r]=gr(e.op2),o=e.op1.numericValue;return[i.mul(o),r.mul(o)]}if(E(e.op2)){let[i,r]=gr(e.op1),o=e.op2.numericValue;return[i.mul(o),r.mul(o)]}}if(m(e,"Divide")&&E(e.op2)){let[i,r]=gr(e.op1),o=e.op2.numericValue;return[i.div(o),r.div(o)]}let t=e.N();return[n._numericValue(0),n._numericValue(ce(t)??0)]}function ps(e){if(!Mh(e)||$t(e))return!1;if(("signature"in e||"complexity"in e)&&"constant"in e)throw new Error("Operator definition cannot have a `constant` field and value definition cannot have a `signature` field.");if(!("evaluate"in e)&&!("signature"in e)&&!("sgn"in e)&&!("complexity"in e)&&!("canonical"in e))return!1;if("type"in e&&e.type!==void 0&&typeof e.type!="function")throw new Error("The `type` field of an operator definition should be a function");if("sgn"in e&&e.sgn!==void 0&&typeof e.sgn!="function")throw new Error("The `sgn` field of an operator definition should be a function");return!0}function ms(e){if(!Mh(e)||$t(e))return!1;if("value"in e||"constant"in e||"inferred"in e||"subscriptEvaluate"in e){if("type"in e&&typeof e.type=="function")return!1;if("signature"in e)throw new Error("Value definition cannot have a `signature` field. Use a `type` field instead.");if("sgn"in e)throw new Error("Value definition cannot have a `sgn` field. Use a `flags.sgn` field instead.");return!0}if("type"in e&&e.type!==void 0&&typeof e.type!="function")return!0;if("description"in e)throw new Error("Definitions should have a `type` or `value` field.");return!1}function se(e){return e!==void 0&&"value"in e}function xe(e){return e!==void 0&&"operator"in e}function ot(e,n,t,i){let r=t;i instanceof Et?(delete r.operator,r.value=i):ms(i)?(delete r.operator,r.value=new Et(e,n,i)):i instanceof ar?(delete r.value,r.operator=i):ps(i)&&(delete r.value,r.operator=new ar(e,n,i))}function eu(e,n){switch(n){case"float64":case"float32":case"int32":case"uint8":return new Ka(e);case"complex128":case"complex64":return new jc(e);case"bool":case"expression":return new Uc(e);case void 0:return new Ka(e)}throw new Error(`Unknown dtype ${n}`)}var Ka=class{constructor(n){this.ce=n}one=1;zero=0;nan=NaN;cast(n,t){let i=this.ce;switch(t){case"float64":case"float32":case"int32":case"uint8":return n;case"complex128":case"complex64":return Array.isArray(n)?n.map(r=>i.complex(r)):this.ce.complex(n);case"bool":return Array.isArray(n)?n.map(r=>r!==0):n!==0;case"expression":return Array.isArray(n)?n.map(r=>i.number(r)):i.number(n)}throw new Error(`Cannot cast ${n} to ${t}`)}expression(n){return this.ce.number(n)}isZero(n){return n===0}isOne(n){return n===1}equals(n,t){return n===t}add(n,t){return n+t}addn(...n){return n.reduce((t,i)=>t+i,0)}neg(n){return-n}sub(n,t){return n-t}mul(n,t){return n*t}muln(...n){return n.reduce((t,i)=>t*i,1)}div(n,t){return n/t}pow(n,t){return n**t}conjugate(n){return n}},Uc=class{one;zero;nan;ce;constructor(n){this.one=n.One,this.zero=n.Zero,this.nan=n.NaN,this.ce=n}cast(n,t){if(Array.isArray(n))switch(t){case"float64":return n.map(i=>this.cast(i,"float64"));case"float32":return n.map(i=>this.cast(i,"float32"));case"int32":return n.map(i=>this.cast(i,"int32"));case"uint8":return n.map(i=>this.cast(i,"uint8"));case"complex128":return n.map(i=>this.cast(i,"complex128"));case"complex64":return n.map(i=>this.cast(i,"complex64"));case"bool":return n.map(i=>this.cast(i,"bool"));case"expression":return n.map(i=>this.cast(i,"expression"))}switch(t){case"float64":case"float32":return n.im===0?n.re:void 0;case"int32":return typeof n.re=="number"?Math.round(n.re):void 0;case"uint8":if(typeof n.re!="number")return;let i=Math.round(n.re);return i>=0&&i<=255?i:void 0;case"complex128":case"complex64":let[r,o]=[n.re,n.im];return typeof r=="number"&&typeof o=="number"?this.ce.complex(r,o):typeof r=="number"?this.ce.complex(r):void 0;case"bool":let s=n.valueOf();return typeof s=="boolean"?s:void 0;case"expression":return n}throw new Error(`Cannot cast ${n} to ${t}`)}expression(n){return n}isZero(n){return n.isSame(0)}isOne(n){return n.isSame(1)}equals(n,t){return n.isSame(t)===!0}add(n,t){return n.add(t)}addn(...n){return n.reduce((t,i)=>t.add(i),this.zero)}neg(n){return n.neg()}sub(n,t){return n.sub(t)}mul(n,t){return n.mul(t)}muln(...n){return n.reduce((t,i)=>t.mul(i),this.one)}div(n,t){return n.div(t)}pow(n,t){return n.pow(t)}conjugate(n){return this.ce.function("Conjugate",[n]).evaluate()}},jc=class{one;zero;nan;ce;constructor(n){this.ce=n,this.one=n.complex(1),this.zero=n.complex(0),this.nan=n.complex(NaN)}cast(n,t){if(Array.isArray(n))switch(t){case"float64":return n.map(i=>this.cast(i,"float64"));case"float32":return n.map(i=>this.cast(i,"float32"));case"int32":return n.map(i=>this.cast(i,"int32"));case"uint8":return n.map(i=>this.cast(i,"uint8"));case"complex128":return n.map(i=>this.cast(i,"complex128"));case"complex64":return n.map(i=>this.cast(i,"complex64"));case"bool":return n.map(i=>this.cast(i,"bool"));case"expression":return n.map(i=>this.cast(i,"expression"))}switch(t){case"float64":return n.im===0?n.re:void 0;case"float32":return n.im===0?n.re:void 0;case"int32":return n.im===0?Math.round(n.re):void 0;case"uint8":if(n.im!==0)return;let i=Math.round(n.re);return i>=0&&i<=255?i:void 0;case"complex128":return n;case"complex64":return n;case"bool":return!(n.im===0&&n.re===0);case"expression":return this.ce.number(n)}throw new Error(`Cannot cast ${n} to ${t}`)}expression(n){return this.ce.number(n)}isZero(n){return n.isZero()}isOne(n){return n.re===1&&n.im===0}equals(n,t){return n.equals(t)}add(n,t){return n.add(t)}addn(...n){return n.reduce((t,i)=>t.add(i),this.zero)}neg(n){return n.neg()}sub(n,t){return n.sub(t)}mul(n,t){return n.mul(t)}muln(...n){return n.reduce((t,i)=>t.mul(i),this.one)}div(n,t){return n.div(t)}pow(n,t){return n.pow(t)}conjugate(n){return n.conjugate()}};function nu(e,n){return e===void 0?n:e===n?e:e==="expression"||n==="expression"?"expression":e==="complex128"||n==="complex128"?"complex128":e==="complex64"||n==="complex64"?"complex64":e==="float64"||n==="float64"?"float64":e==="float32"||n==="float32"?"float32":e==="int32"||n==="int32"?"int32":e==="uint8"||n==="uint8"?"uint8":e==="bool"||n==="bool"?"bool":"expression"}function kh(e){if(_(e)){if(e.symbol==="True"||e.symbol==="False")return"bool";if(e.symbol==="NaN"||e.symbol==="PositiveInfinity"||e.symbol==="NegativeInfinity")return"float64";if(e.symbol==="ComplexInfinity"||e.symbol==="ImaginaryUnit")return"complex128"}if(E(e))switch(e.type.type){case"real":case"rational":case"finite_real":case"finite_rational":case"integer":return"float64";case"complex":case"finite_complex":case"imaginary":return"complex128";case"finite_integer":{let n=e.re;return n>=0&&n<=255?"uint8":"int32"}default:return"expression"}return"expression"}var fo=class e{constructor(n,t){this.ce=n;this.shape=t.shape,this.rank=this.shape.length,this._strides=ds(this.shape),this.field=eu(n,t.dtype)}static align(n,t){if(n.dtype===t.dtype)return[n,t];let i=nu(n.dtype,t.dtype);return n.dtype===i?[n,t.upcast(i)]:[n.upcast(i),t]}static broadcast(n,t,i){if(!(i instanceof e))return t.map1(n,i);let[r,o]=e.align(t,i),s=r.data.map((a,u)=>n(a,o.data[u]));return Ln(r.ce,{dtype:r.dtype,shape:r.shape,data:s})}field;shape;rank;_strides;get expression(){let n=this.shape,t=this.rank,i=this.data,r=this._index.bind(this),o=this.field.expression.bind(this.field),s=a=>{if(a.length===t-1){let u=r(a);return this.ce._fn("List",i.slice(u,u+n[t-1]).map(l=>o(l)))}else{let u=[];for(let l=1;l<=n[a.length];l++)u.push(s([...a,l]));return this.ce._fn("List",u)}};return s([])}get array(){let n=this.shape,t=this.rank,i=this.data;if(t===1)return i;if(t===2){let[s,a]=n,u=new Array(s);for(let l=0;l<s;l++)u[l]=i.slice(l*a,(l+1)*a);return u}let r=this._index.bind(this),o=s=>{if(s.length===t-1){let a=r(s);return i.slice(a,a+n[t-1])}else{let a=[];for(let u=0;u<n[s.length];u++)a.push(o([...s,u+1]));return a}};return o([])}_index(n){let t=this._strides;return n.reduce((i,r,o)=>i+(r-1)*t[o],0)}get isSquare(){let n=this.shape;return n.length===2&&n[0]===n[1]}get isSymmetric(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.equals.bind(this.field);for(let r=0;r<n;r++)for(let o=r+1;o<n;o++)if(!i(t[r*n+o],t[o*n+r]))return!1;return!0}get isSkewSymmetric(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.equals.bind(this.field),r=this.field.neg.bind(this.field);for(let o=0;o<n;o++)for(let s=o+1;s<n;s++)if(!i(t[o*n+s],r(t[s*n+o])))return!1;return!0}get isUpperTriangular(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.isZero.bind(this.field);for(let r=1;r<n;r++)for(let o=0;o<r;o++)if(i(t[r*n+o]))return!1;return!0}get isLowerTriangular(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.isZero.bind(this.field);for(let r=0;r<n-1;r++)for(let o=r+1;o<n;o++)if(!i(t[r*n+o]))return!1;return!0}get isTriangular(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.isZero.bind(this.field);for(let r=0;r<n;r++)for(let o=0;o<n;o++)if(r<o&&!i(t[r*n+o])||r>o&&!i(t[r*n+o]))return!1;return!0}get isDiagonal(){if(!this.isSquare)return!1;let n=this.shape[0],t=this.data,i=this.field.isZero.bind(this.field);for(let r=0;r<n;r++)for(let o=0;o<n;o++)if(r===o&&!i(t[r*n+o])||r!==o&&!i(t[r*n+o]))return!1;return!0}get isIdentity(){if(!this.isSquare)return!1;let[n,t]=this.shape,i=this.data,r=this.field.isOne.bind(this.field),o=this.field.isZero.bind(this.field);for(let s=0;s<t;s++)for(let a=0;a<t;a++)if(s===a&&!r(i[s*t+a])||s!==a&&!o(i[s*t+a]))return!1;return!0}get isZero(){let n=this.field.isZero.bind(this.field);return this.data.every(t=>n(t))}at(...n){let t=this.data.length;return this.data[this._index(n)%t]}diagonal(n,t){if(n??=1,t??=2,n===t||n<=0||n>this.shape.length||this.shape[n-1]!==this.shape[t-1])return;let i=new Array(this.shape[n-1]),r=this.data,o=this.shape[n-1];for(let s=0;s<o;s++)i[s]=r[s*o+s];return i}trace(n,t){let i=this.rank;if(i<2)return;n??=i-1,t??=i;let r=n-1,o=t-1;if(this.shape[r]!==this.shape[o])return;let s=this.shape[r];if(i===2){let p=this.data,d=s,g=new Array(d);for(let h=0;h<d;h++)g[h]=p[h*d+h];return this.field.addn(...g)}let a=this.shape.filter((p,d)=>d!==r&&d!==o),u=ds(this.shape),l=a.reduce((p,d)=>p*d,1),c=new Array(l),f=ds(a);for(let p=0;p<l;p++){let d=new Array(a.length),g=p;for(let x=0;x<a.length;x++)d[x]=Math.floor(g/f[x]),g=g%f[x];let h=new Array(i),b=0;for(let x=0;x<i;x++)x===r||x===o?h[x]=0:h[x]=d[b++];let y=new Array(s);for(let x=0;x<s;x++){h[r]=x,h[o]=x;let N=0;for(let T=0;T<i;T++)N+=h[T]*u[T];y[x]=this.data[N]}c[p]=this.field.addn(...y)}return Ln(this.ce,{dtype:this.dtype,shape:a,data:c})}reshape(...n){return Ln(this.ce,{dtype:this.dtype,shape:n,data:this.data})}slice(n){if(n<0&&(n=this.shape[0]+n+1),this.rank===0)return this;if(this.rank===1){let s=this.data[n-1];return Ln(this.ce,{dtype:this.dtype,shape:[],data:[s]})}let t=this.shape[1],i=this._strides[0],r=n*i,o=r+i;return Ln(this.ce,{dtype:this.dtype,shape:this.shape.slice(1),data:this.data.slice(r,o)})}flatten(){return this.data}upcast(n){let t=this.field.cast(this.data,n);if(t===void 0)throw Error(`Cannot cast tensor to ${n}`);return Ln(this.ce,{dtype:n,shape:this.shape,data:t})}transpose(n,t,i){let r=this.rank;if(r===1)return this;if(n??=r-1,t??=r,n===t)return this;if(n<=0||n>r||t<=0||t>r)return;let o=n-1,s=t-1,a=[...this.shape];[a[o],a[s]]=[a[s],a[o]];let u=this.data;if(i&&(u=u.map(d=>i(d))),r===2){let[d,g]=this.shape,h=0,b=new Array(d*g);for(let y=0;y<g;y++)for(let x=0;x<d;x++)b[h++]=u[x*g+y];return Ln(this.ce,{dtype:this.dtype,shape:a,data:b})}let l=u.length,c=new Array(l),f=ds(this.shape),p=ds(a);for(let d=0;d<l;d++){let g=new Array(r),h=d;for(let x=0;x<r;x++)g[x]=Math.floor(h/p[x]),h=h%p[x];let b=[...g];[b[o],b[s]]=[b[s],b[o]];let y=0;for(let x=0;x<r;x++)y+=b[x]*f[x];c[d]=u[y]}return Ln(this.ce,{dtype:this.dtype,shape:a,data:c})}conjugateTranspose(n,t){let i=this.field.conjugate.bind(this.field);return this.transpose(n,t,i)}determinant(){if(this.rank!==2)return;let[n,t]=this.shape;if(n!==t)return;if(n===1)return this.data[0];let i=this.field.add.bind(this.field),r=this.field.mul.bind(this.field),o=this.field.neg.bind(this.field);if(n===2){let[h,b,y,x]=this.data;return i(r(h,x),o(r(b,y)))}let s=this.field.addn.bind(this.field),a=this.field.muln.bind(this.field);if(n===3){let[h,b,y,x,N,T,I,M,w]=this.data;return s([a(h,N,w),a(b,T,I),a(y,x,M),o(a(y,N,I)),o(a(b,x,w)),o(a(h,T,M))])}let u=this.shape[0],l=!1,c=this.field.div.bind(this.field),f=this.field.sub.bind(this.field),p=new Array(u).fill(0).map((h,b)=>b),d=[...this.data];for(let h=0;h<u;h++){let b=p[h-1];if(this.at(b,h)===0){let N;for(N=h+1;N<u;N++)if(this.at(p[N],h)!==0){b=p[N],p[N-1]=p[h-1],p[h-1]=b,l=!l;break}if(N===u)return this.at(b,h)}let y=this.at(b,h),x=h===0?1:this.at(p[h-2],h-2);for(let N=h+1;N<u;N++){let T=p[N-1];for(let I=h+1;I<u;I++)d[T][I]=c(f(r(d[T][I],y),r(d[T][h],d[b][I])),x)}}let g=d[p[u-1]][u-1];return l?this.field.neg(g):g}inverse(){if(this.rank!==2)return;let[n,t]=this.shape;if(n!==t)return;if(n===2){let[p,d,g,h]=this.data,b=this.determinant();if(b===void 0||this.field.isZero(b))return;let y=this.field.div.bind(this.field),x=this.field.neg.bind(this.field),N=[y(h,b),x(y(d,b)),x(y(g,b)),y(p,b)];return Ln(this.ce,{dtype:this.dtype,shape:[t,t],data:N})}let i=this.shape[0],r=this.field.div.bind(this.field),o=this.field.sub.bind(this.field),s=this.field.mul.bind(this.field),a=this.array,u=new Array(i).fill(0).map((p,d)=>{let g=new Array(i).fill(0);return g[d]=1,g}),l=a.map((p,d)=>[...p,...u[d]]),c=new Array(i).fill(0).map((p,d)=>d);for(let p=0;p<i;p++){let d=c[p-1];if(this.at(d,p)===0){let b;for(b=p+1;b<i;b++)if(this.at(c[b],p)!==0){d=c[b],c[b-1]=c[p-1],c[p-1]=d;break}if(b===i)return}let g=this.at(d,p),h=p===0?1:this.at(c[p-2],p-2);for(let b=p+1;b<i;b++){let y=c[b-1];for(let x=p+1;x<i*2;x++)l[y][x]=o(l[y][x],s(r(s(l[y][p],l[d][x]),g),h))}}for(let p=i-1;p>=0;p--){let d=l[c[p],p];for(let g=0;g<p;g++){let h=c[g];for(let b=i;b<i*2;b++)l[h][b]=o(l[h][b],s(r(s(l[h][p],l[p][b]),d),d))}for(let g=i;g<i*2;g++)l[p][g]=r(l[p][g],d)}let f=l.map(p=>p.slice(i));return Ln(this.ce,{dtype:this.dtype,shape:[t,t],data:f})}pseudoInverse(){}adjugateMatrix(){}minor(n,t){}map1(n,t){return Ln(this.ce,{dtype:this.dtype,shape:this.shape,data:this.data.map(i=>n(i,t))})}map2(n,t){let i=t.data;return Ln(this.ce,{dtype:this.dtype,shape:this.shape,data:this.data.map((r,o)=>n(r,i[o]))})}add(n){return e.broadcast(this.field.add.bind(this.field),this,n)}subtract(n){return e.broadcast(this.field.sub.bind(this.field),this,n)}multiply(n){return e.broadcast(this.field.mul.bind(this.field),this,n)}divide(n){return e.broadcast(this.field.div.bind(this.field),this,n)}power(n){return e.broadcast(this.field.pow.bind(this.field),this,n)}equals(n){if(this.rank!==n.rank||!this.shape.every((o,s)=>o===n.shape[s]))return!1;let t=this.field.equals.bind(this.field),i=this.field.cast.bind(this.field),r=this.dtype;return this.dtype!==n.dtype?!!this.data.every((o,s)=>t(o,i(n.data[s],r))):this.data.every((o,s)=>t(o,n.data[s]))}};function ds(e){let n=new Array(e.length);for(let t=e.length-1,i=1;t>=0;t--)n[t]=i,i*=e[t];return n}var Gc=class extends fo{dtype="float64";data;constructor(n,t){super(n,t),this.data=t.data}get isZero(){return this.data.every(n=>n===0)}},Zc=class extends fo{dtype="complex128";data;constructor(n,t){super(n,t),this.data=t.data}},Hc=class extends fo{dtype="bool";data;constructor(n,t){super(n,t),this.data=t.data}},Wc=class extends fo{dtype="expression";data;constructor(n,t){super(n,t),this.data=t.data}};function Ln(e,n){let t=n.dtype;return t==="float64"||t==="float32"||t==="uint8"||t==="int32"?new Gc(e,n):t==="bool"?new Hc(e,n):t==="complex64"||t==="complex128"?new Zc(e,n):new Wc(e,n)}function Ze(e){return _(e)&&e.symbol.startsWith("_")||e.operator==="Wildcard"||e.operator==="WildcardSequence"||e.operator==="WildcardOptionalSequence"}function on(e){if(_(e)&&e.symbol.startsWith("_"))return e.symbol;if(m(e)&&e.nops===1){let n=e.op1;if(e.operator==="Wildcard")return`_${n}`;if(e.operator==="WildcardSequence")return`__${n}`;if(e.operator==="WildcardOptionalSequence")return`___${n}`}return e.operator==="Wildcard"?"_":e.operator==="WildcardSequence"?"__":e.operator==="WildcardOptionalSequence"?"___":null}function vt(e){if(typeof e=="string")return e.startsWith("_")?e.startsWith("__")?e.startsWith("___")?"OptionalSequence":"Sequence":"Wildcard":null;if(_(e)){let n=e.symbol;return n.startsWith("_")?n.startsWith("__")?n.startsWith("___")?"OptionalSequence":"Sequence":"Wildcard":null}if(m(e)){if(e.operator==="Wildcard")return"Wildcard";if(e.operator==="WildcardSequence")return"Sequence";if(e.operator==="WildcardOptionalSequence")return"OptionalSequence"}return null}var gs=class e extends de{constructor(t,i,r){super(t,r?.metadata);this.input=i;this.options=r;let o=W2(t,"List",i.ops,i.shape,i.dtype);if(!o)throw new Error("Invalid tensor");this._tensor=Ln(t,o)}_kind="tensor";_tensor;_expression;get structural(){return this._expression??=this._tensor.expression,this._expression}get tensor(){return this._tensor}get baseDefinition(){return this.structural.baseDefinition}get operatorDefinition(){return this.structural.operatorDefinition}get hash(){return rt("BoxedTensor")}get canonical(){return this}get isCanonical(){return this._tensor?!0:this._expression.isCanonical}get isPure(){return this._tensor?!0:this.structural.isPure}get isValid(){return this._tensor?!0:this.structural.isValid}get complexity(){return 97}get operator(){return"List"}get nops(){if(this._tensor)return this._tensor.shape[0];let t=this.structural;return m(t)?t.nops:0}get ops(){let t=this.structural;return m(t)?t.ops:[]}get op1(){if(this._tensor){let i=this._tensor.data;return i.length===0?this.engine.Nothing:this.engine.box(i[0])}let t=this.structural;return m(t)?t.op1:this.engine.Nothing}get op2(){if(this._tensor){let i=this._tensor.data;return i.length<2?this.engine.Nothing:this.engine.box(i[1])}let t=this.structural;return m(t)?t.op2:this.engine.Nothing}get op3(){if(this._tensor){let i=this._tensor.data;return i.length<3?this.engine.Nothing:this.engine.box(i[2])}let t=this.structural;return m(t)?t.op3:this.engine.Nothing}neg(){return this.structural.neg()}inv(){return this.engine.One.div(this.structural)}abs(){return this.structural.abs()}add(t){return this.structural.add(t)}sub(t){return this.structural.sub(t)}mul(t){return this.structural.mul(t)}div(t){return this.structural.div(t)}pow(t){return this.structural.pow(t)}root(t){return this.structural.root(t)}sqrt(){return this.structural.sqrt()}get shape(){return this.tensor.shape}get rank(){try{return this.tensor.rank}catch{}return 0}get type(){if(!this.isValid)return new V("error");let t=this.shape;if(t.length===0)return new V("number");let i=t.join("x");return new V(`list<number^${i}>`)}get json(){return this.structural.json}isEqual(t){return this===t?!0:t instanceof e?this.tensor.equals(t.tensor):this.structural.isEqual(t)}get isCollection(){return!0}get isIndexedCollection(){return!0}contains(t){return["float64","float32","int32","uint8"].includes(this.tensor.dtype)?this.tensor.data.includes(t.re):this.tensor.data.some(i=>t.isSame(this.tensor.field.cast(i,"expression")??t.engine.Nothing))}get count(){return this.tensor.shape.reduce((t,i)=>t*i,1)}each(){let t=this.tensor.shape,i=this.tensor.rank;if(i===0)return(function*(o){yield o})(this);let r=t[0];return i===1?(function*(o){for(let s=1;s<=r;s+=1){let a=o.tensor.data,u=s-1;u>=0&&u<a.length&&(yield o.engine.box(a[u]))}})(this):(function*(o){for(let s=1;s<=r;s+=1){let a=o.tensor.slice(s-1),u=a.expression,l=m(u)?u.ops:[];yield new e(o.engine,{ops:l,shape:a.shape,dtype:a.dtype})}})(this)}at(t){let i=this.tensor.slice(t);if(i.rank===0)return this.engine.box(i.data[0]);if(i.rank===1)return this.engine.box(i.data[0]);if(i.rank>1){let r=i.expression,o=m(r)?r.ops:[];return new e(this.engine,{ops:o,shape:i.shape,dtype:i.dtype})}}match(t,i){return $t(t)||(t=this.engine.box(t,{form:"raw"})),Ze(t)?{[on(t)]:this}:this.structural.match(t,i)}evaluate(t){return this._tensor&&this._tensor.dtype!=="expression"?this:this.structural.evaluate(t)}simplify(t){return this._tensor&&this._tensor.dtype!=="expression"?this:this.structural.simplify(t)}N(){return this._tensor&&this._tensor.dtype!=="expression"?this:this.structural.N()}solve(t){return this.structural.solve(t)}};function ne(e){return e instanceof gs}function Ch(e,n){let t,i=[],r=!0,o=(s,a=0)=>{if(!r)return;let u=s.length;if(u===0)return;if(i[a]===void 0)i[a]=u;else if(i[a]!==u){r=!1;return}let l=0;for(let f of s)f.operator===e&&l++;let c=u-l;if(l>0&&c>0){r=!1;return}if(l===u){for(let f of s)if(m(f)&&(o(f.ops,a+1),!r))return}else for(let f of s)t=nu(t,kh(f))};return o(n),r?{shape:i,dtype:t}:void 0}function W2(e,n,t,i,r){let o=!0,s=[],a=eu(e,"expression"),u=a.cast.bind(a),l=(c,f=0)=>{if(c.length!==0){if(i[f]===void 0)i[f]=c.length;else if(i[f]!==c.length){o=!1;return}for(let p of c){if(!o)return;if(m(p,n))l(p.ops,f+1);else{let d=u(p,r);if(d===void 0){o=!1;return}s.push(d)}}}};if(l(t),!!o)return{shape:i,rank:i.length,data:s,dtype:r}}function br(e){return typeof e=="string"?e==="collection"||e==="indexed_collection"||e==="list"||e==="set"||e==="tuple"||e==="any":e.kind==="list"||e.kind==="set"||e.kind==="tuple"?!0:e.kind==="union"?e.types.some(n=>br(n)):!1}function Ah(e){return typeof e=="string"?e==="list"||e==="set"||e==="collection"||e==="indexed_collection":e.kind==="list"||e.kind==="set"?!0:e.kind==="union"?e.types.some(n=>Ah(n)):!1}function Fn(e,n,t){if(n=be(n),!e.strict||n.length===t)return n;let i=[...n.slice(0,t)],r=Math.min(t,n.length);for(;r<t;)i.push(e.error("missing")),r+=1;for(;r<n.length;)i.push(e.error("unexpected-argument",n[r].toString())),r+=1;return i}function In(e,n,t){let i=typeof t=="number"?t:t?.count,r=typeof t=="number"?void 0:t?.flatten;if(n=be(n,r),!e.strict){let a="real";for(let u of n)if(L("complex",u.type.type)){a="number";break}for(let u of n)Ve(u)||u.infer(a);return n}let o=!0;i??=n.length;let s=[];for(let a=0;a<=Math.max(i-1,n.length-1);a++){let u=n[a];if(a>i-1)o=!1,s.push(e.error("unexpected-argument",u.toString()));else if(u===void 0)o=!1,s.push(e.error("missing"));else if(!u.isValid)o=!1,s.push(u);else if(u.isNumber)s.push(u);else if(u.operator==="Quantity")s.push(u);else if(_(u)&&!e.lookupDefinition(u.symbol))s.push(u);else if(u.type.isUnknown||u.type.type==="any")s.push(u);else if(Ah(u.type.type))s.push(u);else if(ne(u))s.push(u);else if(Ve(u)){for(let l of u.each())if(!l.isNumber){o=!1;break}o?s.push(u):s.push(e.typeError("number",u.type,u))}else u.valueDefinition?.inferredType&&L("number",u.type.type)||u.operatorDefinition?.inferredSignature&&L("number",u.type.type)||u.operator==="Hold"||u.valueDefinition?.value?.operator==="Hold"?s.push(u):(o=!1,s.push(e.typeError("number",u.type,u)))}if(o){let a="real";for(let u of s)if(L("complex",u.type.type)){a="number";break}for(let u of s)if(Ve(u))for(let l of u.each())l.infer(a);else u.infer(a)}return s}function sn(e,n,t){return n==null?e.error("missing"):t===void 0?e.error("unexpected-argument",n.toString()):(n=n.canonical,!n.isValid||n.type.matches(t)?n:e.typeError(t,n.type,n))}function hs(e,n,t){if(n.length===t.length&&n.every((r,o)=>r.type.matches(t[o])))return n;let i=[];for(let r=0;r<=t.length-1;r++)i.push(sn(e,n[r],t[r]));for(let r=t.length;r<=n.length-1;r++)i.push(e.error("unexpected-argument",n[r].toString()));return i}function po(e,n,t,i,r){if(!e.strict||typeof t=="string"||t.kind!=="signature")return null;let o=[],s=!0,a=t.args?.map(p=>p.type)??[],u=t.optArgs?.map(p=>p.type)??[],l=t.variadicArg?.type,c=t.variadicMin??0,f=0;for(let p of a){let d=n[f++];if(!d){o.push(e.error("missing")),s=!1;continue}if(i){o.push(d);continue}if(!d.isValid){o.push(d),s=!1;continue}if(d.type.isUnknown||d.type.type==="any"){o.push(d);continue}if(r&&(Ve(d)||br(d.type.type))){o.push(d);continue}if(d.valueDefinition?.inferredType&&d.type.matches(p)){o.push(d);continue}if(d.operatorDefinition?.inferredSignature&&d.type.matches(p)){o.push(d);continue}if(!d.type.matches(p)){o.push(e.typeError(p,d.type,d)),s=!1;continue}o.push(d)}for(let p of u){let d=n[f];if(!d)break;if(i){o.push(d),f+=1;continue}if(!d.isValid){o.push(d),s=!1,f+=1;continue}if(d.type.isUnknown||d.type.type==="any"){o.push(d),f+=1;continue}if(r&&(Ve(d)||br(d.type.type))){o.push(d),f+=1;continue}if(d.valueDefinition?.inferredType&&d.type.matches(p)){o.push(d),f+=1;continue}if(!d.type.matches(p)){o.push(e.typeError(p,d.type,d)),s=!1,f+=1;continue}o.push(d),f+=1}if(l){let p=0;for(let d of n.slice(f)){if(f+=1,p+=1,i){o.push(d);continue}if(!d.isValid){o.push(d),s=!1;continue}if(d.type.isUnknown||d.type.type==="any"){o.push(d);continue}if(r&&(Ve(d)||br(d.type.type))){o.push(d);continue}if(d.valueDefinition?.inferredType&&d.type.matches(l)){o.push(d);continue}if(!d.type.matches(l)){o.push(e.typeError(l,d.type,d)),s=!1;continue}o.push(d)}p<c&&(o.push(e.error("missing")),s=!1)}if(f<n.length)for(let p of n.slice(f))o.push(e.error("unexpected-argument",p.toString())),s=!1;if(!s)return o;f=0;for(let p of a)i||(!r||!Ve(n[f])&&!br(n[f].type.type))&&n[f].infer(p),f+=1;for(let p of u){if(!n[f])break;(!r||!Ve(n[f])&&!br(n[f].type.type))&&n[f]?.infer(p),f+=1}if(l)for(let p of n.slice(f))i||(!r||!Ve(p)&&!br(p.type.type))&&p.infer(l),f+=1;return null}function Rh(e){let n={},t=Q2(e.engine),i=Y2(e.engine);if(_(e)&&!n[e.symbol]&&!e.symbol.startsWith("_")){if(!t.includes(e.symbol)){let r=ka(e.symbol,t);r&&(n[e.symbol]=r)}}else if(m(e)&&!n[e.operator]&&!e.operator.startsWith("_")){let r=e.operator;if(!i.includes(r)){let o=ka(r,i);o&&(n[r]=o)}for(let o of e.ops)n={...n,...Rh(o)}}return n}function Y2(e){let n=[],t=e.context.lexicalScope;for(;t;){for(let i of t.bindings.keys()){let r=t.bindings.get(i);xe(r)&&n.push(i)}t=t.parent}return n}function Q2(e){let n=[],t=e.context.lexicalScope;for(;t;){for(let i of t.bindings.keys()){let r=t.bindings.get(i);se(r)&&n.push(i)}t=t.parent}return n}function st(e){let n=Rh(e);if(Object.keys(n).length===0)return"";if(Object.keys(n).length===1){let[i,r]=Object.entries(n)[0];return`Unknown symbol "${i}". Did you mean "${r}"?`}let t=[];for(let[i,r]of Object.entries(n))t.push(`- "${i}" -> "${r}"?`);return`Unknown symbols found:
|
|
16
|
+
${t.join(`
|
|
17
|
+
`)}`}var Ee=class{get bignumRe(){}im;get bignumIm(){}isZeroWithTolerance(n){return this.isZero}valueOf(){return this.im===0?this.bignumRe?this.bignumRe.toNumber():this.re:this.toString()}[Symbol.toPrimitive](n){return n==="string"?this.toString():this.valueOf()}toJSON(){if(this.im===0){let n=this.re;if(Number.isFinite(n))return n}return this.N().toString()}print(){let n=console.log;n?.(this.toString())}};function X2(e){if(e==="N")return[0,""];let n={I:1,V:5,X:10,L:50,C:100,D:500,M:1e3},t=0,i=0;e=e.toUpperCase();for(let r=e.length-1;r>=0;r--){let o=n[e[r]];if(o===void 0)return[t,e.slice(r)];o<i?t-=o:t+=o,i=o}return[t,""]}function bs(e,n){if(e=e.trim(),e.length===0)return[NaN,""];if(e.startsWith("+"))return bs(e.slice(1),n);if(e.startsWith("-")){let[r,o]=bs(e.slice(1),n);return[-r,o]}let t=10;if(typeof n=="string"&&(n=n.toLowerCase()),e.startsWith("0x"))t=16,e=e.slice(2);else if(e.startsWith("0b"))t=2,e=e.slice(2);else{if(n==="roman")return X2(e);if(n==="base64"||n==="base-64")try{return[parseInt(btoa(e)),""]}catch{return[NaN,""]}else typeof n=="number"?t=n:typeof n=="string"&&(t=parseInt(n))}let i=0;for(let r=0;r<e.length;r++){let o={" ":-1,"\xA0":-1,"\u2000":-1,"\u2001":-1,"\u2002":-1,"\u2003":-1,"\u2004":-1,"\u2005":-1,"\u2006":-1,"\u2007":-1,"\u2008":-1,"\u2009":-1,"\u200A":-1,"\u200B":-1,"\u202F":-1,"\u205F":-1,_:-1,",":-1,0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,b:11,c:12,d:13,e:14,f:15,g:16,h:17,i:18,j:19,k:20,l:21,m:22,n:23,o:24,p:25,q:26,r:27,s:28,t:29,u:30,v:31,w:32,x:33,y:34,z:35}[e[r]];if(o!==-1){if(o===void 0)return[i,e.substring(r)];if(o>=t)return[i,e.substring(r)];i=i*t+o}}return[i,""]}function an(e,n){if(typeof n=="number"&&typeof e=="number")return e.toFixed(n);let t=e.toString();if(typeof e=="number"&&Number.isInteger(e)&&t.includes("e")){let i=BigInt(e).toString(),r=i.match(/0+$/);if((r?r[0].length:0)<=5)return i}else if(typeof e=="bigint"){let i=t.match(/0+$/),r=i?i[0].length:0;if(r>5)return`${t.slice(0,-r)}e+${r}`}return t}function Ph(e){if(typeof e=="number")return Number.isInteger(e)?BigInt(e):null;if(e==null||!kt(e))return null;let n=Ai(e)?e.num:e;if(typeof n=="number")return Number.isInteger(n)?BigInt(n):null;if(typeof n!="string")return null;let t=n.toLowerCase().replace(/[nd]$/,"").replace(/[\u0009-\u000d\u0020\u00a0]/g,"");return t==="nan"||/^(infinity|\+infinity|oo|\+oo|-infinity|-oo)$/.test(t)?null:Re(t)}function _n(e,n){if(typeof e=="number")return isNaN(e)?"NaN":Number.isFinite(e)?typeof n=="number"?{num:e.toFixed(n)}:e:e<0?"NegativeInfinity":"PositiveInfinity";if(e>=Number.MIN_SAFE_INTEGER&&e<=Number.MAX_SAFE_INTEGER)return Number(e);let t=an(e);return Number(e).toString()===t?Number(e):{num:t}}var we=class e extends Ee{__brand;rational;radical;im=0;factory;bignum;constructor(n,t,i){if(super(),this.factory=t,this.bignum=i,typeof n=="number"){!Number.isFinite(n)||Number.isInteger(n),this.rational=[n,1],this.radical=1;return}if(typeof n=="bigint"){this.rational=[n,BigInt(1)],this.radical=1;return}typeof n!="object"||"im"in n;let r=1;if(typeof r!="number"||Number.isInteger(r),r==0){this.rational=[0,1],this.radical=1;return}let o=n.rational?[...n.rational]:[1,1];r!=1&&(typeof r=="bigint"?o=Zn(o,[r,BigInt(1)]):o=Zn(o,[r,1])),this.rational=o,this.radical=n.radical??1,this.radical<=re&&this.radical>=1,this.normalize()}get type(){return this.isNaN?"number":this.isPositiveInfinity||this.isNegativeInfinity?"non_finite_number":this.radical!==1?(Pt(this.rational),"finite_real"):mr(this.rational)?"finite_integer":"finite_rational"}get isExact(){return!0}get asExact(){return this}toJSON(){if(this.isNaN)return"NaN";if(this.isPositiveInfinity)return"PositiveInfinity";if(this.isNegativeInfinity)return"NegativeInfinity";if(this.isZero)return 0;if(this.isOne)return 1;if(this.isNegativeOne)return-1;let n=t=>mr(t)?_n(t[0]):["Rational",_n(t[0]),_n(t[1])];return this.radical===1?n(this.rational):En(this.rational)?["Sqrt",this.radical]:us(this.rational)?["Negate",["Sqrt",this.radical]]:this.rational[0]==1?["Divide",["Sqrt",this.radical],_n(this.rational[1])]:this.rational[0]==-1?["Negate",["Divide",["Sqrt",this.radical],_n(this.rational[1])]]:["Multiply",n(this.rational),["Sqrt",this.radical]]}clone(n){return new e(n,this.factory,this.bignum)}toString(){if(this.isZero)return"0";if(this.isOne)return"1";if(this.isNegativeOne)return"-1";let n=i=>mr(i)?an(i[0]):`${an(i[0])}/${an(i[1])}`;if(this.radical===1)return n(this.rational);let t=i=>`sqrt(${an(i)})`;return En(this.rational)?t(this.radical):us(this.rational)?`-${t(this.radical)}`:this.rational[0]==1?`${t(this.radical)}/${an(this.rational[1])}`:this.rational[0]==-1?`-${t(this.radical)}/${an(this.rational[1])}`:`${n(this.rational)}${t(this.radical)}`}get sign(){return Pt(this.rational)?0:qc(this.rational)?1:-1}get re(){return lh(this.rational)*Math.sqrt(this.radical)}get bignumRe(){let n,t=this.rational;return xn(t)?n=this.bignum(t[0]).div(t[1]):n=this.bignum(t[0].toString()).div(this.bignum(t[1].toString())),this.radical===1?n:n.mul(this.bignum(this.radical).sqrt())}get numerator(){return this.rational[1]==1?this:this.clone({rational:xn(this.rational)?[this.rational[0],1]:[this.rational[0],BigInt(1)],radical:this.radical})}get denominator(){return xn(this.rational)?this.clone(this.rational[1]):this.clone({rational:[this.rational[1],BigInt(1)]})}normalize(){if(Number.isInteger(this.radical)&&this.radical>0&&Number.isFinite(this.radical),isNaN(this.radical)){this.rational=[NaN,1],this.radical=1;return}let[n,t]=this.rational;if(t==0){this.rational=[NaN,1],this.radical=1;return}if(this.radical===0||n===0){this.rational=[0,1],this.radical=1;return}if(this.radical>=4){let[i,r]=Zr(this.radical,2);i!==1&&(this.rational=Zn(this.rational,[i,1])),this.radical=r}this.rational=ao(this.rational)}get isNaN(){return Number.isNaN(this.rational[0])}get isPositiveInfinity(){return this.rational[0]==1/0}get isNegativeInfinity(){return this.rational[0]==-1/0}get isComplexInfinity(){return!1}get isZero(){return Pt(this.rational)}get isOne(){return!(this.rational[0]!==this.rational[1]||this.radical!==1)}get isNegativeOne(){return!(this.rational[0]!==-this.rational[1]||this.radical!==1)}sgn(){if(!Number.isNaN(this.rational[0]))return Pt(this.rational)?0:qc(this.rational)?1:-1}N(){return this.isZero||this.isOne||this.isNegativeOne?this:this.rational[1]==1&&this.radical===1?this:this.factory(this.bignumRe)}neg(){return this.isZero?this:this.clone({rational:dr(this.rational),radical:this.radical})}inv(){return this.isOne?this:this.isNegativeOne?this:this.clone({rational:Zn([BigInt(this.rational[1]),BigInt(1)],Ga([BigInt(this.rational[0])*BigInt(this.radical),BigInt(1)])),radical:this.radical})}add(n){return typeof n=="number"?n===0?this:Number.isInteger(n)&&this.radical===1?this.clone({rational:Di(this.rational,[n,1])}):this.factory(this.bignumRe).add(n):n.isZero?this:this.isZero?n:n instanceof e?this.radical===n.radical?this.clone({rational:Di(this.rational,n.rational),radical:this.radical}):this.factory(this.bignumRe).add(n):n.add(this)}sub(n){return this.add(n.neg())}mul(n){if(n===0)return this.isPositiveInfinity||this.isNegativeInfinity||this.isNaN?this.clone(NaN):this.clone(0);if(n===1)return this;if(n===-1)return this.neg();if(typeof n=="number")return Number.isInteger(n)?this.clone({rational:Zn(this.rational,[n,1]),radical:this.radical}):this.factory(this.bignumRe).mul(n);if(n instanceof K)return this.factory(n).mul(this);if(n.im!==0)return n.mul(this);if(n.isZero)return this.isPositiveInfinity||this.isNegativeInfinity||this.isNaN?this.clone(NaN):n;if(n.isOne)return this;if(n.isNegativeOne)return this.neg();if(n.isNaN)return n;if(this.isZero)return n.isPositiveInfinity||n.isNegativeInfinity||n.isComplexInfinity||n.isNaN?this.clone(NaN):this;if(this.isOne)return n;if(this.isNegativeOne)return n.neg();if(!(n instanceof e))return n.mul(this);let t=BigInt(this.radical)*BigInt(n.radical);return t>BigInt(re)?this.factory(this.bignumRe).mul(n):this.clone({rational:Zn(this.rational,n.rational),radical:Number(t)})}div(n){if(typeof n=="number")return n===1?this:n===-1?this.neg():n===0?this.clone(NaN):this.clone({rational:Zn(this.rational,[1,n]),radical:this.radical});if(n.isOne)return this;if(n.isNegativeOne)return this.neg();if(this.isZero)return n.isZero?this.clone(NaN):n.isNaN?n:this;if(n.isNaN)return n;if(n.isZero)return this.clone(this.sign*(1/0));if(!(n instanceof e))return this.factory(this.bignumRe).div(n);if(n.im!==0)return this.factory(this.bignumRe).div(n);let t=Zn(this.rational,[BigInt(n.rational[1]),BigInt(n.rational[0])*BigInt(n.radical)]),i=BigInt(this.radical)*BigInt(n.radical);return i>BigInt(re)?this.factory(this.bignumRe).div(n):this.clone({rational:t,radical:Number(i)})}pow(n){if(Array.isArray(n),this.isNaN)return this;if(typeof n=="number"&&isNaN(n))return this.clone(NaN);if(n instanceof Ee){if(n.isNaN)return this.clone(NaN);if(n.isZero)return this.clone(1);if(n.isOne)return this;if(n.im)n={re:n.re,im:n.im};else{if(n instanceof e&&n.radical===1&&n.rational[0]==1)return this.root(n.rational[0]);n=n.re}}if(n===.5)return this.sqrt();if(typeof n=="object"&&("re"in n||"im"in n))return this.factory(this.bignumRe).pow(n);if(this.isPositiveInfinity){if(n===-1)return this.clone(0);if(n===1/0)return this.clone(1/0);if(n===-1/0)return this.clone(0)}else if(this.isNegativeInfinity&&n===1/0)return this.clone(NaN);if((n===1/0||n===-1/0)&&(this.isOne||this.isNegativeOne))return this.clone(NaN);if(n===1)return this;if(n===-1)return this.inv();if(n===0)return this.clone(1);if(this.isZero){if(n>0)return this;if(n<0)return this.factory({im:1/0})}if(n<0)return this.pow(-n).inv();if(n%1===.5)return this.pow(Math.floor(n)).mul(this.sqrt());if(this.radical>re||this.rational[0]>re||this.rational[0]<-re||this.rational[1]>re)return this.factory(this.bignumRe).pow(n);if(this.sign<0){if(Number.isInteger(n)){let t=n%2===0?1:-1,i=BigInt(n),r=BigInt(this.radical)**i;return r>BigInt(re)?this.factory(this.bignumRe).pow(n):this.clone({rational:[BigInt(t)*(-BigInt(this.rational[0]))**i,BigInt(this.rational[1])**i],radical:Number(r)})}return this.factory({im:(-this.re)**n})}else if(Number.isInteger(n)){let t=BigInt(n),i=BigInt(this.radical)**t;return i>BigInt(re)?this.factory(this.bignumRe).pow(n):this.clone({rational:[BigInt(this.rational[0])**t,BigInt(this.rational[1])**t],radical:Number(i)})}return this.factory(this.bignumRe).pow(n)}root(n){if(n===0)return this.clone(NaN);if(this.isNaN)return this;if(this.isZero)return this;if(n===1)return this;if(n===-1)return this.inv();if(n<0)return this.root(-n).inv();if(n%1===.5)return this.root(Math.floor(n)).sqrt();if(this.radical===1){if(this.sign>0){let t=this.re;if(Number.isInteger(t)){if(t>0){let i=Math.pow(t,1/n);if(Number.isInteger(i))return this.clone(i)}return this.factory(this.bignumRe).root(n)}}return this.factory(this.bignumRe).root(n)}if(this.sign<0)return this.factory({im:Math.pow(-this.re,1/n)});if(this.radical>re||this.rational[0]>re||this.rational[0]<-re||this.rational[1]>re)return this.factory(this.bignumRe).root(n);if(this.rational[1]==1){let t=Math.pow(this.rational[0],1/n);if(Number.isInteger(t))return this.clone(t)}return this.factory(this.bignumRe).root(n)}sqrt(){if(this.isZero||this.isOne)return this;if(this.radical===1)if(xn(this.rational)){let[n,t]=this.rational;return n*t>re?this.factory(this.bignumRe).sqrt():n>0?this.clone({radical:n*t,rational:[1,t]}):this.factory({im:Math.sqrt(-n*t)/t})}else return this.factory(this.bignumRe).sqrt();if(this.sign>0){let n=Math.sqrt(this.re);if(Number.isInteger(n))return this.clone(n)}return this.factory(this.bignumRe).sqrt()}gcd(n){if(!(n instanceof e))return n.gcd(this);if(this.isOne||n.im!==0||n.isOne)return this.clone(1);let t=Za(this.rational,n.rational),i=Pe(this.radical,n.radical);return this.clone({rational:t,radical:i})}abs(){return this.sign===-1?this.neg():this}ln(n){return this.isZero?this.clone(NaN):this.isPositiveInfinity?this.clone(1/0):this.sign<0?this.clone(NaN):this.isOne?this.clone(0):this.isNegativeOne?this.factory({im:Math.PI}):this.factory(this.bignumRe).ln(n)}exp(){return this.isNaN?this.clone(NaN):this.isZero?this.clone(1):this.isNegativeInfinity?this.clone(0):this.isPositiveInfinity?this.clone(1/0):this.factory(this.bignumRe).exp()}floor(){return this.isNaN?this.clone(NaN):this.type==="integer"?this:this.clone(Math.floor(this.re))}ceil(){return this.isNaN?this.clone(NaN):this.type==="integer"?this:this.clone(Math.ceil(this.re))}round(){return this.isNaN?this.clone(NaN):this.type==="integer"?this:this.clone(Math.round(this.re))}eq(n){return typeof n=="number"?this.radical===1&&mr(this.rational)&&this.rational[0]==n:n instanceof e?this.radical===n.radical&&this.rational[0]==n.rational[0]&&this.rational[1]==n.rational[1]:n.im===0&&n.re===this.re}lt(n){if(this.im===0)return typeof n=="number"?this.re<n:this.re<n.re}lte(n){if(this.im===0)return typeof n=="number"?this.re<=n:this.re<=n.re}gt(n){if(this.im===0)return typeof n=="number"?this.re>n:this.re>n.re}gte(n){if(this.im===0)return typeof n=="number"?this.re>=n:this.re>=n.re}static sum(n,t,i){if(n.length===1)return n;if(n.some(u=>!u.isExact)){if(n.length===2)return[n[0].add(n[1])];let u=t(0);for(let l of n)u=u.add(l);return[u]}let r=0,o=[0,1],s=[];for(let u of n){if(u.isNaN)return[new e(NaN,t,i)];if(!u.isZero)if(r+=u.im,u instanceof e){let l=u.rational;if(u.radical===1)o=Di(o,l);else{let c=s.findIndex(f=>f.radical===u.radical);c===-1?s.push({multiple:l,radical:u.radical}):s[c].multiple=Di(s[c].multiple,l)}}else{L(u.type,"integer");let l=BigInt(u.bignumRe.toFixed(0));o=Di(o,[l,BigInt(1)])}}if(Pt(o)&&s.length===0)return r===0?[new e(0,t,i)]:[t({im:r})];let a=[];return r!==0&&a.push(t({im:r})),s.length===0?a.push(new e({rational:o},t,i)):(s.push({multiple:o,radical:1}),a.push(...s.map(u=>new e({rational:u.multiple,radical:u.radical},t,i)))),a}};function Ke(e){if(!E(e))return;let n=e.numericValue;if(typeof n=="number"&&!Number.isFinite(n)||n instanceof Ee&&(n.isNaN||n.isPositiveInfinity||n.isNegativeInfinity))return;if(typeof n=="number")return Number.isInteger(n)?[n,1]:void 0;let t=n.type;if(t!=="finite_integer"&&t!=="finite_rational"||n.im!==0)return;if(n instanceof we)return n.radical!==1?void 0:n.rational;let i=n.bignumRe;if(i!==void 0&&Number.isInteger(i))return[Re(i),BigInt(1)];let r=n.re;if(Number.isInteger(r))return[r,1]}function Ot(e){if(e==null)return null;if(typeof e=="bigint")return e;if(typeof e=="number"&&Number.isInteger(e))return BigInt(e);if($t(e)){if(!E(e))return null;let n=e.numericValue;if(typeof n=="number")return Number.isInteger(n)?BigInt(n):null;if(n.im!==0)return null;let t=n.bignumRe;return t?.isInteger()?Re(t):Number.isInteger(n.re)?BigInt(n.re):null}return e instanceof K||typeof e=="string"?Re(e):e instanceof z?e.im===0?Re(e.re):null:Ph(e)}function Yc(e){if(e==null||!E(e))return null;let n=typeof e=="number"?e:e.numericValue;if(typeof n=="number")return e.engine.bignum(n);if(n.im!==0)return null;let t=n.bignumRe??n.re;return typeof t=="number"&&isNaN(t)?null:e.engine.bignum(t)}function W(e){if(e==null)return null;if(typeof e=="number")return Number.isInteger(e)&&e>=-re&&e<=re?e:null;if(!E(e))return null;let n=e.numericValue;if(typeof n=="number")return Number.isInteger(n)&&n>=-re&&n<=re?n:null;if(n.im!==0)return null;let t=n.re;return Number.isInteger(t)&&t>=-re&&t<=re?Number(t):null}function ie(e){if(!E(e))return null;let n=e.numericValue;return Math.round(typeof n=="number"?n:n.re)}function He(e){if(e==null||!E(e))return null;let n=e.numericValue;if(typeof n=="number")return BigInt(Math.round(n));let t=n.bignumRe??n.re;return typeof t=="number"?BigInt(Math.round(t)):Re(t.round())}function ln(e){if(_(e)&&!e.isConstant)return 1;if(!m(e))return 0;if(e.operator==="Power"&&E(e.op2)){if(ln(e.op1)===0)return 0;let n=W(e.op2);return n!==null&&n>0?n:0}if(e.operator==="Multiply"){let n=0;for(let t of e.ops){let i=ln(t);n=n+i}return n}if(e.operator==="Add"||e.operator==="Subtract"){let n=0;for(let t of e.ops)n=Math.max(n,ln(t));return n}return e.operator==="Negate"||e.operator==="Divide"?ln(e.op1):0}function Hn(e){if(_(e)&&!e.isConstant)return 1;if(!m(e))return 0;if(e.operator==="Power"&&E(e.op2)){if(Hn(e.op1)===0)return 0;let n=W(e.op2);return n!==null&&n>0?n:0}if(e.operator==="Multiply"||e.operator==="Add"||e.operator==="Subtract"){let n=0;for(let t of e.ops)n=Math.max(n,ln(t));return n}return e.operator==="Negate"||e.operator==="Divide"?Hn(e.op1):0}function Qc(e){return _(e)&&!e.isConstant?e.symbol:m(e)?e.ops.map(n=>Qc(n)).join(" ").trim():""}function tu(e){return Qc(e).split(" ").reverse().join(" ").trim()}function ve(e,n,t,i){if(!E(e))return;let r=e.engine,o;if(e.im!==0)o=i?.(r.complex(e.re,e.im));else{let s=e.bignumRe;if(s!==void 0&&Je(r)&&t)o=t(s);else{let a=e.re;Je(r)&&t?o=t(r.bignum(a)):o=n(a)}}if(o!==void 0)return o instanceof z?r.number(r._numericValue({re:o.re,im:o.im})):r.number(o)}function gn(e,n,t,i,r){if(!E(e)||!E(n))return;let o=e.engine,s;if((e.im!==0||n.im!==0)&&(s=r?.(o.complex(e.re,e.im),o.complex(n.re,n.im))),s===void 0&&i){let a=e.bignumRe,u=n.bignumRe;(a!==void 0||u!==void 0)&&(a??=o.bignum(e.re),u??=o.bignum(n.re),s=i(a,u))}if(s===void 0){let a=e.re,u=n.re;!isNaN(a)&&!isNaN(u)&&(Je(o)&&i?s=i(o.bignum(e.bignumRe??a),o.bignum(n.bignumRe??u)):s=t(a,u))}if(s!==void 0)return s instanceof z?o.number(o._numericValue({re:o.chop(s.re),im:o.chop(s.im)})):o.number(o.chop(s))}function Dh(e){return m(e)?e.operator==="Sqrt"||e.operator==="Power"&&e.op2.im===0&&e.op2.re===.5||e.operator==="Root"&&e.op2.im===0&&e.op2.re===2:!1}function iu(e){if(Dh(e)&&m(e)){let n=Ke(e.op1);return n===void 0||n[0]<0||n[1]<0?null:n}if(m(e,"Divide")&&e.op1.isSame(1)&&Dh(e.op2)){let n=e.op2.re;return!Number.isInteger(n)||n<=0?null:[1,n]}return null}function oi(e,n){let t=e.engine,i=(e.isCanonical||e.isStructural)&&(n.isCanonical||n.isStructural),r=()=>t._fn("Power",[e,n],{canonical:i});if(m(e,"Power")){let[a,u]=e.ops,l=n.isInteger===!0,c=u.isInteger===!0&&u.isOdd===!0;if(a.isNonNegative===!0||l||c)return t._fn("Power",[a,t.box(["Multiply",u,n],{form:i?"canonical":"Power"})])}if(m(e,"Divide")&&n.isNegative===!0){let a=e.op1,u=e.op2;if(n.isInteger===!0||a.isNonNegative===!0&&u.isNonNegative===!0)return We(a,n,{numericApproximation:!1}).div(We(u,n,{numericApproximation:!1}))}if(E(e)&&e.isSame(0)&&!n.isSame(0)&&!n.isInfinity){if(n.isPositive===!0)return t.Zero;if(n.isNegative===!0)return t.ComplexInfinity}if(m(n)||_(n)||!n.type.matches("number"))return r();if(E(e)&&e.isSame(0))return n.type.matches("imaginary")||n.isNaN||n.isSame(0)?t.NaN:n.isInfinity?n.isPositive?t.Zero:n.isNegative?t.ComplexInfinity:t.NaN:n.isGreater(0)?t.Zero:n.isLess(0)?t.ComplexInfinity:r();let o=e.type.matches("number")&&(!m(e)||e.operator==="Negate");if(n.isSame(0))return o&&e.isFinite!==void 0?e.isFinite?t.One:t.NaN:r();if(o&&e.isSame(1))return n.isFinite?t.One:t.NaN;if(n.isSame(1)&&e.type.matches("number"))return e;if(n.isSame(-1)){if(o){if(e.isInfinity&&(e.isNegative||e.isPositive))return t.Zero;if(e.isSame(-1))return t.NegativeOne;if(e.isSame(1))return t.One}return e.type.matches(new V("matrix"))?t.function("Inverse",[e]):e.isCanonical||e.isStructural?e.inv():t._fn("Power",[e,t.number(-1)],{canonical:!1})}if(n.isInfinity&&o)return n.isPositive?_(e,"ExponentialE")?t.PositiveInfinity:e.isSame(-1)?t.NaN:e.isInfinity?t.ComplexInfinity:e.isNaN?t.NaN:e.isReal?e.isGreater(1)?t.PositiveInfinity:e.isLess(-1)?t.ComplexInfinity:t.Zero:r():n.isNegative?_(e,"ExponentialE")?t.Zero:e.isSame(-1)?t.NaN:e.isInfinity?t.Zero:e.isNaN?t.NaN:e.isReal?e.isGreater(0)?e.isLess(1)?t.PositiveInfinity:t.Zero:e.isGreater(-1)?t.ComplexInfinity:t.Zero:r():t.NaN;if(E(e)&&e.isInfinity){if(e.isNegative){if(n.isNegative===!0)return t.Zero;if(n.isInteger===!0){if(n.isEven===!0)return t.PositiveInfinity;if(n.isOdd===!0)return t.NegativeInfinity}if(n.isRational===!0){let[a,u]=n.numeratorDenominator,l=a.re,c=u.re;if(typeof l=="number"&&typeof c=="number"&&Number.isInteger(l)&&Number.isInteger(c)){let f=l%2===0,p=l%2!==0,d=c%2!==0;if(f&&d)return t.PositiveInfinity;if(p&&d)return t.NegativeInfinity}}}if(e.isPositive){if(n.isPositive===!0)return t.PositiveInfinity;if(n.isNegative===!0)return t.Zero}if(n.type.matches("imaginary"))return t.NaN;if(n.type.matches("complex")&&!isNaN(n.re)){if(n.re>0)return t.ComplexInfinity;if(n.re<0)return t.Zero}}if(n.isSame(.5))return e.isCanonical||e.isStructural?yr(e,2):t._fn("Sqrt",[e],{canonical:!1});let s=Ke(n);if(s!==void 0&&s[0]===1&&s[1]!==1)return e.isCanonical||e.isStructural?yr(e,t.number(s[1])):t._fn("Root",[e,t.number(s[1])],{canonical:!1});if(E(e)&&E(n)){let a=n.re;if(typeof a=="number"&&Number.isInteger(a)&&Math.abs(a)<=64){let u=e.numericValue;if(typeof u=="number"){let l=Math.pow(u,a);if(Number.isSafeInteger(l))return t.number(l)}else if(u.isExact)return t.number(u.pow(a))}}return r()}function yr(e,n){let t=e.engine,i;if(typeof n=="number"?i=n:E(n)&&n.im===0&&(i=n.re),i===1)return e;if(i===2){if(E(e)&&e.type.matches("rational")&&e.re<re){let r=e.sqrt();if(E(r)&&(typeof r.numericValue=="number"||r.numericValue.isExact))return r}return t._fn("Sqrt",[e],{canonical:e.isCanonical||e.isStructural})}return t._fn("Root",[e,typeof n=="number"?t.number(n):n],{canonical:(e.isCanonical||e.isStructural)&&(typeof n=="number"||n.isCanonical||n.isStructural)})}function We(e,n,{numericApproximation:t}){if(!(e.isCanonical||e.isStructural)||typeof n!="number"&&!(n.isCanonical||n.isStructural))return e.engine._fn("Power",[e,e.engine.box(n)],{canonical:!1});if(t&&E(e)){if(typeof n=="number")return ve(e,s=>Math.pow(s,n),s=>s.pow(n),s=>s.pow(n))??We(e,n,{numericApproximation:!1});if(E(n))return gn(e,n,(s,a)=>Math.pow(s,a),(s,a)=>s.pow(a),(s,a)=>s.pow(a))??We(e,n,{numericApproximation:!1})}let i=e.engine;typeof n!="number"&&(n=n.canonical);let r=oi(e,i.box(n));if(r.operator!=="Power")return r;let o=typeof n=="number"?n:n.im===0?n.re:void 0;if(_(e,"ComplexInfinity"))return i.NaN;if(_(e,"ExponentialE")){let s=hr(n);if(s!==void 0){if(s=Xa(s),s!==void 0){let a=i.function("Cos",[s]).evaluate(),u=i.function("Sin",[s]).evaluate();return a.add(u.mul(i.I))}}else if(t){let a=i.E.N(),u=ce(a);if(u!==void 0){if(typeof n=="number")return i.number(i._numericValue(u).pow(n));if(E(n))return i.number(i._numericValue(u).pow(n.numericValue))}}}if(m(e,"Power")){let[s,a]=e.ops,u=typeof n=="number"?i.number(n):n,l=typeof n=="number"?Number.isInteger(n):n.isInteger===!0,c=a.isInteger===!0&&a.isOdd===!0;if(s.isNonNegative===!0||l||c)return We(s,a.mul(u),{numericApproximation:t})}if(m(e,"Divide")){let[s,a]=e.ops;if((typeof n=="number"?Number.isInteger(n):n.isInteger===!0)||s.isNonNegative===!0&&a.isNonNegative===!0)return We(s,n,{numericApproximation:t}).div(We(a,n,{numericApproximation:t}))}if(m(e,"Negate")&&o!==void 0&&Number.isInteger(o))return o%2===0?We(e.op1,n,{numericApproximation:t}):We(e.op1,n,{numericApproximation:t}).neg();if(m(e,"Sqrt")){if(o===2)return e.op1;if(o!==void 0&&o%2===0)return e.op1.pow(o/2);if(e.op1.isNonNegative===!0)return We(e.op1,n,{numericApproximation:t}).sqrt()}if(m(e,"Exp"))return We(i.E,e.op1.mul(n),{numericApproximation:t});if(m(e,"Multiply")&&(typeof n=="number"?Number.isInteger(n):n.isInteger===!0)){let a=e.ops.map(u=>We(u,n,{numericApproximation:t}));return i._fn("Multiply",a)}if(typeof n!="number"&&E(n)){let s=Ke(n);if(s!==void 0&&s[0]===1)return ru(e,i.number(s[1]),{numericApproximation:t})}if(m(e,"Root")){let[s,a]=e.ops,u=typeof n=="number"?Number.isInteger(n):n.isInteger===!0;if(s.isNonNegative===!0||u)return We(s,i.box(n).div(a),{numericApproximation:t})}if(E(e)&&Number.isInteger(o)){let s=e.numericValue;return typeof s=="number"?ve(e,a=>Math.pow(a,o),a=>a.pow(o),a=>a.pow(o))??i._fn("Power",[e,i.box(n)]):i.number(s.pow(o))}return i._fn("Power",[e,i.box(n)])}function ru(e,n,{numericApproximation:t}){if(!(e.isCanonical||e.isStructural)||!(n.isCanonical||n.isStructural))return e.engine._fn("Root",[e,n],{canonical:!1});if(t&&E(e)&&E(n)){let i=e.isNegative,r=n.isEven;return i&&(e=e.neg()),gn(e,n,(o,s)=>{let a=Math.pow(o,1/s);return i&&!r?-a:a},(o,s)=>{let a=o.pow(s.pow(-1));return i&&!r?a.neg():a},(o,s)=>{let a=o.pow(typeof s=="number"?1/s:s.inverse());return i&&!r?a.neg():a})??ru(e,n,{numericApproximation:!1})}if(E(e)&&E(n)&&n.isInteger){let i=typeof n=="number"?n:n.im===0?n.re:void 0;if(i!==void 0)if(typeof e.numericValue=="number"){let r=e.engine._numericValue(e.numericValue).root(i);if(r?.isExact)return e.engine.number(r)}else{let r=e.numericValue.asExact?.root(i);if(r?.isExact)return e.engine.number(r)}}return e.engine._fn("Root",[e,n])}var K2={Sin:!0,Cos:!0,Tan:!0,Cot:!0,Sec:!0,Csc:!0,Sinh:!0,Cosh:!0,Tanh:!0,Coth:!0,Sech:!0,Csch:!0,Arcsin:!0,Arccos:!0,Arctan:!0,Arccot:!0,Arcsec:!0,Arccsc:!0,Arsinh:!0,Arcosh:!0,Artanh:!0,Arcoth:!0,Arcsch:!0,Arsech:!0};function e_(e){return!e||typeof e!="string"?!1:e in K2}function xr(e,n){let t=ln(e),i=ln(n);if(t!==i)return i-t;let r=Hn(e),o=Hn(n);if(r!==o)return o-r;let s=tu(e),a=tu(n);if(s||a){if(!s)return 1;if(!a||s<a)return-1;if(s>a)return 1}return ze(e,n)}var $h=["integer","rational","radical","real","complex","constant","symbol","multiply","divide","add","trig","fn","power","string","other"];function Oh(e){if(E(e)){if(typeof e.numericValue=="number")return Number.isInteger(e.numericValue)?"integer":"real";let n=e.numericValue.type;return n==="integer"||n==="finite_integer"?"integer":n==="rational"||n==="finite_rational"?"rational":n==="real"||n==="finite_real"?"real":n==="complex"||n==="finite_complex"||n==="imaginary"||n==="finite_number"?"complex":n==="non_finite_number"?"constant":n==="number"?"real":"other"}return _(e,"ImaginaryUnit")?"complex":iu(e)?"radical":_(e)&&e.isConstant?"constant":_(e)?"symbol":e_(e.operator)?"trig":e.operator==="Add"?"add":e.operator==="Power"||e.operator==="Root"?"power":e.operator==="Multiply"||e.operator==="Negate"?"multiply":e.operator==="Divide"?"divide":e.operator==="Rational"?"rational":e.operator==="Complex"?e.im!==0?"complex":"real":m(e,"Sqrt")?E(e.op1)&&(e.op1.isInteger||e.op1.isRational)?"radical":"power":m(e)?"fn":q(e)?"string":"other"}function ze(e,n){if(e===n)return 0;let t=Oh(e),i=Oh(n);if(t!==i)return $h.indexOf(t)-$h.indexOf(i);if(t==="complex"){let[r,o]=Lh(e),[s,a]=Lh(n);return o!==a?o-a:r-s}if(t==="integer"||t==="rational"||t==="real"){let r=ce(e),o=ce(n);r===void 0&&m(e,"Rational")&&(r=e.op1.re/e.op2.re),o===void 0&&m(n,"Rational")&&(o=n.op1.re/n.op2.re);let s=typeof r=="number"?r:r.re,a=typeof o=="number"?o:o.re;return s-a}if(t==="radical")return m(e)&&m(n)?ze(e.op1,n.op1):0;if(t==="constant"||t==="symbol"){let r=_(e)?e.symbol:"",o=_(n)?n.symbol:"";return r===o?0:r>o?1:-1}if(t==="add"){if(!m(e)||!m(n))return 0;let r=e.ops,o=n.ops;if(r.length!==o.length)return o.length-r.length;for(let s=0;s<r.length;s++){let a=ze(r[s],o[s]);if(a!==0)return a}return 0}if(t==="power"){let r=ln(e),o=ln(n);if(r!==o)return o-r;let s=Hn(e),a=Hn(n);return s!==a?s-a:m(e)&&m(n)?ze(e.op1,n.op1):0}if(t==="multiply"){let r=ln(e),o=ln(n);if(r!==o)return o-r;let s=Hn(e),a=Hn(n);if(s!==a)return s-a;if(!m(e)||!m(n))return 0;let u=e.ops,l=n.ops;if(u.length!==l.length)return l.length-u.length;for(let c=0;c<u.length;c++){let f=ze(u[c],l[c]);if(f!==0)return f}return 0}if(t==="divide"){if(!m(e)||!m(n))return 0;let r=ln(e.op1),o=ln(n.op1);if(r!==o)return o-r;let s=Hn(e.op1),a=Hn(n.op1);if(s!==a)return s-a;let u=ze(e.op1,n.op1);return u!==0?u:ze(e.op2,n.op2)}if(t==="fn"||t==="trig"){if(m(e)&&m(n)&&e.operator==n.operator&&e.nops===1&&n.nops===1)return ze(e.op1,n.op1);let r=e.operatorDefinition?.complexity??1e5,o=n.operatorDefinition?.complexity??1e5;return r===o?e.operator===n.operator?Xc(e)-Xc(n):e.operator<n.operator?1:-1:r-o}return t==="string"?q(e)&&q(n)?e.string===n.string?0:n.string<e.string?-1:1:0:(e.complexity??1e5)-(n.complexity??1e5)}function Kc(e,{recursive:n=!1}){if(e.isCanonical||e.isStructural||!m(e))return e;let t=e.ops;return n&&(t=t.map(i=>Kc(i,{recursive:n}))),t=ys(e.operator,t),e.engine._fn(e.operator,t,{canonical:!1})}function ys(e,n){if(n.length===0)return n;let t=n[0].engine;if(e==="Add")return[...n].sort(xr);if(e==="Multiply")return[...n].sort(ze);let i=t.lookupDefinition(e);return!i||!xe(i)||!i.operator.commutative?n:i.operator.commutativeOrder?[...n].sort(i.operator.commutativeOrder):[...n].sort(ze)}function Xc(e){return m(e)?1+[...e.ops].reduce((n,t)=>n+Xc(t),0):1}function Lh(e){if(_(e,"ImaginaryUnit"))return[0,1];if(E(e)){if(typeof e.numericValue=="number")return[e.numericValue,0];let n=e.numericValue;return[n.re,n.im]}if(m(e,"Complex")){let n=e.op1,t=e.op2;if(!E(n))return[0,0];let i=typeof n.numericValue=="number"?n.numericValue:n.numericValue.re;if(!E(t))return[0,0];let r=typeof t.numericValue=="number"?t.numericValue:t.numericValue.re;return[i,r]}return[0,0]}function ef(e,n){for(e.isInteger()&&n.isInteger();!n.isZero();)[e,n]=[n,e.modulo(n)];return e.abs()}function Fh(e,n){return e.mul(n).div(ef(e,n))}function*qh(e,n){if(!n.isInteger()||n.isNegative())return e._BIGNUM_NAN;if(n.lessThan(1))return e._BIGNUM_ONE;let t=n;for(;n.greaterThan(2);)n=n.minus(2),t=t.mul(n),yield t;return t}function Er(e){return e.isFinite()?e.d.length>3||e.d.length===3&&e.d[0]>=90?!1:(e.precision()<=16,e.e<308&&e.e>-306):!0}var Vh=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23];function Wn(e){if(e<0)return NaN;let n=Math.PI,t=e*e*e;return e*Math.log(e)-e-.5*Math.log(e)+.5*Math.log(2*n)+1/(12*e)-1/(360*t)+1/(1260*t*e*e)}function De(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*De(1-e));if(e>100)return Math.exp(Wn(e));e-=1;let n=Vh[0];for(let i=1;i<9;i++)n+=Vh[i]/(e+i);let t=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(t,e+.5)*Math.exp(-t)*n}function su(e){let n=Math.PI,t=n*n,i=t*n,r=e*e,o=e*r,s=o*r,a=s*r;return Math.sqrt(n)/2*(e+n/12*o+7*t/480*s+127*i/40320*a+4369*t*t/5806080*a*r+34807*i*t/182476800*a*r*r)}function xs(e){return 1-ai(e)}function ai(e){let n=.254829592,t=-.284496736,i=1.421413741,r=-1.453152027,o=1.061405429,s=.3275911,a=e<0?-1:1;e=Math.abs(e);let u=1/(1+s*e),l=((((o*u+r)*u+i)*u+t)*u+n)*u;return a*(1-l*Math.exp(-e*e))}function nf(e,n){if(n.isNegative())return e._BIGNUM_NAN;let t=e._cache("gamma-p-ln",()=>["0.99999999999999709182","57.156235665862923517","-59.597960355475491248","14.136097974741747174","-0.49191381609762019978","0.33994649984811888699e-4","0.46523628927048575665e-4","-0.98374475304879564677e-4","0.15808870322491248884e-3","-0.21026444172410488319e-3","0.2174396181152126432e-3","-0.16431810653676389022e-3","0.84418223983852743293e-4","-0.2619083840158140867e-4","0.36899182659531622704e-5"].map(s=>e.bignum(s))),i=t[0];for(let s=t.length-1;s>0;--s)i=i.add(t[s].div(n.add(s)));let r=e._cache("gamma-g-ln",()=>e.bignum(607).div(128)),o=n.add(r).add(e._BIGNUM_HALF);return e._BIGNUM_NEGATIVE_ONE.acos().mul(e._BIGNUM_TWO).log().mul(e._BIGNUM_HALF).add(o.log().mul(n.add(e._BIGNUM_HALF)).minus(o).add(i.log()).minus(n.log()))}function vr(e,n){if(n.lessThan(e._BIGNUM_HALF)){let o=e._BIGNUM_NEGATIVE_ONE.acos();return o.div(o.mul(n).sin().mul(vr(e,e._BIGNUM_ONE.sub(n))))}if(n.greaterThan(100))return nf(e,n).exp();n=n.sub(1);let t=e._cache("lanczos-7-c",()=>["0.99999999999980993227684700473478","676.520368121885098567009190444019","-1259.13921672240287047156078755283","771.3234287776530788486528258894","-176.61502916214059906584551354","12.507343278686904814458936853","-0.13857109526572011689554707","9.984369578019570859563e-6","1.50563273514931155834e-7"].map(o=>e.bignum(o))),i=t[0];for(let o=1;o<9;o++)i=i.add(t[o].div(n.add(o)));let r=n.add(7).add(e._BIGNUM_HALF);return e._BIGNUM_NEGATIVE_ONE.acos().times(e._BIGNUM_TWO).sqrt().mul(i.mul(r.neg().exp()).mul(r.pow(n.add(e._BIGNUM_HALF))))}var au=["0.16666666666666666666666666666666666666666666666666","-0.03333333333333333333333333333333333333333333333333","0.02380952380952380952380952380952380952380952380952","-0.03333333333333333333333333333333333333333333333333","0.07575757575757575757575757575757575757575757575758","-0.25311355311355311355311355311355311355311355311355","1.16666666666666666666666666666666666666666666666667","-7.09215686274509803921568627450980392156862745098039","54.97117794486215538847117794486215538847117794486216","-529.12424242424242424242424242424242424242424242424242","6192.12318840579710144927536231884057971014492753623188","-86580.25311355311355311355311355311355311355311355311355","1425517.16666666666666666666666666666666666666666666666667","-27298231.06781609195402298850574712643678160919540229885","601580873.90064236838430386817483591677140064236838430387"];function uu(e,n){let t=e._cache("digamma-bernoulli",()=>au.map(u=>e.bignum(u)));if(!n.isFinite())return e._BIGNUM_NAN;if(n.isNegative()){if(n.isInteger())return e._BIGNUM_NAN;let u=e._BIGNUM_NEGATIVE_ONE.acos(),l=u.mul(n),c=l.cos().div(l.sin());return uu(e,e._BIGNUM_ONE.sub(n)).sub(u.mul(c))}if(n.isZero())return e._BIGNUM_NAN;let i=Math.max(7,Math.ceil(e.precision/2)),r=e.bignum(0),o=n;for(;o.lessThan(i);)r=r.sub(e._BIGNUM_ONE.div(o)),o=o.add(e._BIGNUM_ONE);r=r.add(o.ln()).sub(e._BIGNUM_ONE.div(o.mul(2)));let s=o.mul(o),a=s;for(let u=0;u<t.length;u++){let l=t[u].div(e.bignum(2*(u+1)).mul(s));if(l.abs().lessThan(e.bignum(10).pow(-e.precision-5)))break;r=r.sub(l),s=s.mul(a)}return r}function lu(e,n){let t=e._cache("digamma-bernoulli",()=>au.map(u=>e.bignum(u)));if(!n.isFinite())return e._BIGNUM_NAN;if(n.isNegative()){if(n.isInteger())return e._BIGNUM_NAN;let u=e._BIGNUM_NEGATIVE_ONE.acos(),l=u.mul(n).sin();return u.mul(u).div(l.mul(l)).sub(lu(e,e._BIGNUM_ONE.sub(n)))}if(n.isZero())return e._BIGNUM_NAN;let i=Math.max(7,Math.ceil(e.precision/2)),r=e.bignum(0),o=n;for(;o.lessThan(i);)r=r.add(e._BIGNUM_ONE.div(o.mul(o))),o=o.add(e._BIGNUM_ONE);r=r.add(e._BIGNUM_ONE.div(o)),r=r.add(e._BIGNUM_ONE.div(o.mul(o).mul(2)));let s=o.mul(o).mul(o),a=o.mul(o);for(let u=0;u<t.length;u++){let l=t[u].div(s);if(l.abs().lessThan(e.bignum(10).pow(-e.precision-5)))break;r=r.add(l),s=s.mul(a)}return r}function Bh(e,n,t){let i=n.toNumber();if(!Number.isInteger(i)||i<0)return e._BIGNUM_NAN;if(i===0)return uu(e,t);if(i===1)return lu(e,t);if(!t.isFinite()||t.isZero())return e._BIGNUM_NAN;let r=e._cache("digamma-bernoulli",()=>au.map(h=>e.bignum(h))),o=h=>{let b=e._BIGNUM_ONE;for(let y=2;y<=h;y++)b=b.mul(y);return b},s=Math.max(7,Math.ceil(e.precision/2)),a=t,u=e.bignum(0),l=i%2===0?-1:1;if(a.isNegative()){if(a.isInteger())return e._BIGNUM_NAN;let h=i%2===0?1:-1;for(;a.lessThan(1);)u=u.add(e.bignum(h).mul(o(i)).div(a.pow(i+1))),a=a.add(e._BIGNUM_ONE)}for(;a.lessThan(s);)u=u.add(e.bignum(l).mul(o(i)).div(a.pow(i+1))),a=a.add(e._BIGNUM_ONE);let c=i%2===0?-1:1;u=u.add(e.bignum(c).mul(o(i-1)).div(a.pow(i))),u=u.add(e.bignum(c).mul(o(i)).div(a.pow(i+1).mul(2)));let f=a.pow(i+2),p=a.mul(a),d=Math.min(r.length,10),g=e.bignum(10).pow(-e.precision-5);for(let h=0;h<d;h++){let b=2*(h+1),y=e._BIGNUM_ONE;for(let N=0;N<b;N++)y=y.mul(i+N);let x=e.bignum(c).mul(r[h]).mul(y).div(o(b).mul(f));if(x.abs().lessThan(g))break;u=u.add(x),f=f.mul(p)}return u}function Jh(e,n,t){return vr(e,n).mul(vr(e,t)).div(vr(e,n.add(t)))}function tf(e,n){if(!n.isFinite())return e._BIGNUM_NAN;if(n.eq(1))return e.bignum(1/0);let t=e._BIGNUM_NEGATIVE_ONE.acos();if(n.isZero())return e._BIGNUM_HALF.neg();if(n.isInteger()&&n.isPositive()){let u=n.toNumber();if(u%2===0&&u>=2&&u<=20){let l=u/2,f=e._cache("digamma-bernoulli",()=>au.map(g=>e.bignum(g)))[l-1].abs(),p=t.mul(2),d=e._BIGNUM_ONE;for(let g=2;g<=u;g++)d=d.mul(g);return f.mul(p.pow(u)).div(d.mul(2))}}if(n.isNegative())return e.bignum(2).pow(n).mul(t.pow(n.sub(1))).mul(t.mul(n).div(2).sin()).mul(vr(e,e._BIGNUM_ONE.sub(n))).mul(tf(e,e._BIGNUM_ONE.sub(n)));let i=Math.max(22,Math.ceil(e.precision*1.3)),r=n_(e,i),o=r[i],s=e.bignum(0);for(let u=0;u<=i;u++){let l=u%2===0?1:-1;s=s.add(e.bignum(l).mul(r[u].sub(o)).div(e.bignum(u+1).pow(n)))}let a=e._BIGNUM_ONE.sub(e.bignum(2).pow(e._BIGNUM_ONE.sub(n)));return s.div(o.mul(a)).neg()}function n_(e,n){let t=new Array(n+1);t[0]=e._BIGNUM_ONE;let i=e._BIGNUM_ONE;for(let r=1;r<=n;r++)i=i.mul(n-r+1).div(r),t[r]=t[r-1].add(i);return t}function zh(e,n){if(!n.isFinite())return n;if(n.isZero())return e.bignum(0);let i=e._BIGNUM_ONE.div(e._BIGNUM_ONE.exp()).neg(),r=e.bignum(10).pow(-e.precision),o=e.bignum(10).pow(-15);if(n.sub(i).abs().lessThan(o))return e._BIGNUM_NEGATIVE_ONE;if(n.lessThan(i))return e._BIGNUM_NAN;let s,a=n.toNumber();if(a<0){let u=Math.sqrt(2*(Math.E*a+1));s=e.bignum(-1+u-u*u/3+11/72*u*u*u)}else if(a<=1)s=e.bignum(a*(1-a*(1-1.5*a)));else if(a<100){let u=Math.log(a);s=e.bignum(u-Math.log(u))}else{let u=n.ln(),l=u.ln();s=u.sub(l).add(l.div(u))}for(let u=0;u<100;u++){let l=s.exp(),f=s.mul(l).sub(n),p=l.mul(s.add(1)),d=l.mul(s.add(2)),g=f.div(p.sub(f.mul(d).div(p.mul(2))));if(s=s.sub(g),g.abs().lessThan(r.mul(s.abs().add(1))))break}return s}var ou=.5772156649015329,go=[1/6,-1/30,1/42,-1/30,5/66,-691/2730,7/6,-3617/510,43867/798,-174611/330];function bo(e){if(!isFinite(e))return NaN;if(e<0)return Number.isInteger(e)?NaN:bo(1-e)-Math.PI/Math.tan(Math.PI*e);if(e===0)return NaN;let n=0,t=e;for(;t<7;)n-=1/t,t+=1;n+=Math.log(t)-1/(2*t);let i=t*t;for(let r=0;r<go.length;r++)n-=go[r]/(2*(r+1)*i),i*=t*t;return n}function yo(e){if(!isFinite(e))return NaN;if(e<0){if(Number.isInteger(e))return NaN;let r=Math.sin(Math.PI*e);return Math.PI*Math.PI/(r*r)-yo(1-e)}if(e===0)return NaN;let n=0,t=e;for(;t<7;)n+=1/(t*t),t+=1;n+=1/t+1/(2*t*t);let i=t*t*t;for(let r=0;r<go.length;r++)n+=go[r]/i,i*=t*t;return n}function Es(e,n){if(!Number.isInteger(e)||e<0)return NaN;if(e===0)return bo(n);if(e===1)return yo(n);if(!isFinite(n)||n===0)return NaN;if(n<0){if(Number.isInteger(n))return NaN;let a=0,u=n,l=e%2===0?1:-1;for(;u<1;)a+=l*mo(e)/Math.pow(u,e+1),u+=1;return a+Es(e,u)}let t=0,i=n,r=e%2===0?-1:1;for(;i<7;)t+=r*mo(e)/Math.pow(i,e+1),i+=1;let o=e%2===0?-1:1;t+=o*mo(e-1)/Math.pow(i,e),t+=o*mo(e)/(2*Math.pow(i,e+1));let s=Math.pow(i,e+2);for(let a=0;a<Math.min(go.length,6);a++){let u=2*(a+1),l=1;for(let c=0;c<u;c++)l*=e+c;t+=o*go[a]*l/(mo(u)*s),s*=i*i}return t}function mo(e){if(e<=1)return 1;let n=1;for(let t=2;t<=e;t++)n*=t;return n}function cu(e,n){return e>100||n>100||e+n>100?Math.exp(Wn(e)+Wn(n)-Wn(e+n)):De(e)*De(n)/De(e+n)}function vs(e){if(!isFinite(e))return NaN;if(e===1)return 1/0;if(e===0)return-.5;if(e===2)return Math.PI*Math.PI/6;if(e===4)return Math.PI**4/90;if(e===6)return Math.PI**6/945;if(e===8)return Math.PI**8/9450;if(e<0)return Math.pow(2,e)*Math.pow(Math.PI,e-1)*Math.sin(Math.PI*e/2)*De(1-e)*vs(1-e);let n=22,t=t_(n),i=t[n],r=0;for(let o=0;o<=n;o++)r+=(o%2===0?1:-1)*(t[o]-i)/Math.pow(o+1,e);return-1/(i*(1-Math.pow(2,1-e)))*r}function t_(e){let n=new Array(e+1);n[0]=1;for(let t=1;t<=e;t++)n[t]=n[t-1]+i_(e,t);return n}function i_(e,n){n>e-n&&(n=e-n);let t=1;for(let i=0;i<n;i++)t=t*(e-i)/(i+1);return t}function fu(e){if(!isFinite(e))return e;if(e===0)return 0;let n=1/Math.E;if(e<-n)return NaN;if(Math.abs(e+n)<1e-15)return-1;let t;if(e<0){let i=Math.sqrt(2*(Math.E*e+1));t=-1+i-i*i/3+11/72*i*i*i}else if(e<=1)t=e*(1-e*(1-1.5*e));else if(e<100){let i=Math.log(e);t=i-Math.log(i)}else{let i=Math.log(e),r=Math.log(i);t=i-r+r/i}for(let i=0;i<30;i++){let r=Math.exp(t),s=t*r-e,a=r*(t+1),u=r*(t+2),l=s/(a-s*u/(2*a));if(t-=l,Math.abs(l)<1e-15*(1+Math.abs(t)))break}return t}function Lt(e,n){return!isFinite(n)||!Number.isInteger(e)?NaN:n===0?e===0?1:0:e<0?(e=-e,e%2===0?Lt(e,n):-Lt(e,n)):n<0?e%2===0?Lt(e,-n):-Lt(e,-n):n>25+e*e/2?o_(e,n):n<5+e?r_(e,n):s_(e,n)}function r_(e,n){let t=n/2,i=-(n*n)/4,r=1;for(let s=1;s<=e;s++)r/=s;let o=r;for(let s=1;s<=60&&(r*=i/(s*(e+s)),o+=r,!(Math.abs(r)<Math.abs(o)*1e-16));s++);return o*Math.pow(t,e)}function Uh(e,n){let t=4*e*e,i=1,r=0,o=1,s=8*n;for(let a=1;a<=20;a++){o*=t-(2*a-1)*(2*a-1);let u=mo(a)*Math.pow(s,a),l=o/u;if(a%2===1?r+=(a%4===1?1:-1)*l:i+=(a%4===2?-1:1)*l,Math.abs(l)<1e-15)break}return[i,r]}function o_(e,n){let t=n-(e/2+.25)*Math.PI,[i,r]=Uh(e,n);return Math.sqrt(2/(Math.PI*n))*(i*Math.cos(t)-r*Math.sin(t))}function s_(e,n){let t=Math.max(e+20,Math.ceil(n)+30),i=0,r=1,o=new Array(t+1);o[t]=r;for(let u=t;u>=1;u--){let l=2*u/n*r-i;i=r,r=l,o[u-1]=r}let s=o[0];for(let u=2;u<=t;u+=2)s+=2*o[u];let a=1/s;return o[e]*a}function ho(e,n){if(!isFinite(n)||!Number.isInteger(e))return NaN;if(n<=0)return NaN;if(e<0)return e=-e,e%2===0?ho(e,n):-ho(e,n);if(n>12+e*e/4)return l_(e,n);let t=a_(n);if(e===0)return t;let i=u_(n);if(e===1)return i;let r=t,o=i;for(let s=1;s<e;s++){let a=2*s/n*o-r;r=o,o=a}return o}function a_(e){let n=e/2,t=n*n,i=Lt(0,e),r=0,o=1,s=0;for(let a=1;a<=60&&(s+=1/a,o*=-t/(a*a),r-=o*s,!(Math.abs(o*s)<Math.abs(r)*1e-16));a++);return 2/Math.PI*(i*(Math.log(n)+ou)+r)}function u_(e){let n=e/2,t=n*n,i=Lt(1,e),r=0,o=1,s=1;for(let a=0;a<=60;a++){a>0&&(s*=a,o*=t);let u=s*(a+1),l=0;for(let h=1;h<=a;h++)l+=1/h;let c=l+1/(a+1),f=-ou+l,p=-ou+c,g=(a%2===0?1:-1)*(f+p)*o/(s*u);if(r+=g,a>3&&Math.abs(g)<1e-16*Math.abs(r))break}return-2/(Math.PI*e)+2/Math.PI*Math.log(n)*i-n/Math.PI*r}function l_(e,n){let t=n-(e/2+.25)*Math.PI,[i,r]=Uh(e,n);return Math.sqrt(2/(Math.PI*n))*(i*Math.sin(t)+r*Math.cos(t))}function si(e,n){return!isFinite(n)||!Number.isInteger(e)?NaN:n===0?e===0?1:0:(e<0&&(e=-e),n<0?e%2===0?si(e,-n):-si(e,-n):n>40?f_(e,n):c_(e,n))}function c_(e,n){let t=n/2,i=n*n/4,r=1;for(let s=1;s<=e;s++)r/=s;let o=r;for(let s=1;s<=80&&(r*=i/(s*(e+s)),o+=r,!(Math.abs(r)<Math.abs(o)*1e-16));s++);return o*Math.pow(t,e)}function f_(e,n){let t=4*e*e,i=1,r=1;for(let o=1;o<=12;o++){let s=t-(2*o-1)*(2*o-1);if(i*=s/(o*8*n),r+=i,Math.abs(i)<1e-15)break}return Math.exp(n)/Math.sqrt(2*Math.PI*n)*r}function pu(e,n){if(!isFinite(n)||!Number.isInteger(e))return NaN;if(n<=0)return NaN;if(e<0&&(e=-e),n>40)return m_(e,n);let t=jh(n);if(e===0)return t;let i=p_(n);if(e===1)return i;let r=t,o=i;for(let s=1;s<e;s++){let a=2*s/n*o+r;r=o,o=a}return o}function jh(e){let n=e/2,t=n*n,i=si(0,e),r=0,o=1,s=0;for(let a=1;a<=60&&(s+=1/a,o*=t/(a*a),r+=o*s,!(Math.abs(o*s)<Math.abs(r)*1e-16&&a>3));a++);return-(Math.log(n)+ou)*i+r}function p_(e){let n=si(0,e),t=si(1,e),i=jh(e);return(1/e-t*i)/n}function m_(e,n){let t=4*e*e,i=1,r=1;for(let o=1;o<=12;o++){let s=t-(2*o-1)*(2*o-1);if(i*=s/(o*8*n),r+=i,Math.abs(i)<1e-15)break}return Math.sqrt(Math.PI/(2*n))*Math.exp(-n)*r}function mu(e){if(!isFinite(e))return NaN;if(e>5){let a=.6666666666666666*Math.pow(e,1.5);return d_(e,a)}if(e<-5){let a=-e,u=2/3*Math.pow(a,1.5);return g_(a,u)}let n=1/(Math.pow(3,2/3)*De(2/3)),t=1/(Math.pow(3,1/3)*De(1/3)),i=1,r=e,o=1,s=e;for(let a=1;a<=80;a++){let u=3*a;if(o*=e*e*e/((u-1)*u),s*=e*e*e/(u*(u+1)),i+=o,r+=s,Math.abs(o)+Math.abs(s)<1e-16*(Math.abs(i)+Math.abs(r)))break}return n*i-t*r}function d_(e,n){let t=Math.pow(e,.25),i=1,r=1,o=[1,5/72,385/10368,85085/2239488,37182145/644972544];for(let s=1;s<o.length;s++)r=o[s]/Math.pow(n,s),i+=(s%2===0?1:-1)*r;return Math.exp(-n)/(2*Math.sqrt(Math.PI)*t)*i}function g_(e,n){let t=Math.pow(e,.25);return Math.sin(n+Math.PI/4)/(Math.sqrt(Math.PI)*t)}function du(e){if(!isFinite(e))return NaN;if(e>5){let a=.6666666666666666*Math.pow(e,1.5);return h_(e,a)}if(e<-5){let a=-e,u=2/3*Math.pow(a,1.5);return b_(a,u)}let n=1/(Math.pow(3,2/3)*De(2/3)),t=1/(Math.pow(3,1/3)*De(1/3)),i=1,r=e,o=1,s=e;for(let a=1;a<=80;a++){let u=3*a;if(o*=e*e*e/((u-1)*u),s*=e*e*e/(u*(u+1)),i+=o,r+=s,Math.abs(o)+Math.abs(s)<1e-16*(Math.abs(i)+Math.abs(r)))break}return Math.sqrt(3)*(n*i+t*r)}function h_(e,n){let t=Math.pow(e,.25),i=1,r=1,o=[1,5/72,385/10368,85085/2239488,37182145/644972544];for(let s=1;s<o.length;s++)r=o[s]/Math.pow(n,s),i+=r;return Math.exp(n)/(Math.sqrt(Math.PI)*t)*i}function b_(e,n){let t=Math.pow(e,.25);return Math.cos(n+Math.PI/4)/(Math.sqrt(Math.PI)*t)}var y_=[-2991.8191940101983,708840.0452577386,-6297414862058625e-8,25489088057337637e-7,-4429795180596978e-5,3180162978765678e-4],x_=[1,281.3762688899943,45584.78108065326,5173438887700964e-9,4193202458981112e-7,22441179564534092e-6,607366389490085e-3],E_=[-49884311457357354e-24,9504280628298596e-21,-.0006451914356839651,.018884331939670384,-.20552590095501388,1],v_=[399982968972496e-26,9154392157746574e-25,12500186247959882e-23,12226278902417902e-21,.0008680295429417843,.04121420907221998,1],Gh=[.4215435550436775,.1434079197807589,.011522095507358577,.000345017939782574,46361374928786735e-22,3055689837902576e-23,10230451416490724e-26,17201074326816183e-29,13428327623306275e-32,3763297112699879e-35],Zh=[1,.7515863983533789,.11688892585919138,.0064405152650885865,.00015593440916415301,18462756734893055e-22,11269922476399903e-24,36014002958937136e-27,5887545336215784e-29,45200143407412973e-33,12544323709001127e-36],Hh=[.5044420736433832,.1971028335255234,.018764858409257526,.0006840793809153931,11513882611188428e-21,9828524436884223e-23,44534441586175015e-26,10826804113902088e-28,1375554606332618e-30,8363544356306774e-34,18695871016278324e-38],Wh=[1,1.4749575992512833,.33774898912002,.02536037414203388,.0008146791071843061,12754507566772912e-21,10431458965757199e-23,46068072851523205e-26,11027321506624028e-28,13879653125957886e-31,8391588162831187e-34,18695871016278324e-38];function at(e,n){let t=n[0];for(let i=1;i<n.length;i++)t=t*e+n[i];return t}function ui(e){if(!isFinite(e))return e!==e?NaN:e>0?.5:-.5;let n=e<0?-1:1;if(e=Math.abs(e),e<1.6){let t=e*e,i=t*t;return n*e*t*at(i,y_)/at(i,x_)}if(e<36){let t=e*e,i=Math.PI*t,r=1/(i*i),o=1-r*at(r,Gh)/at(r,Zh),s=1/i*at(r,Hh)/at(r,Wh),a=Math.PI/2*t,u=Math.cos(a),l=Math.sin(a);return n*(.5-(o*u+s*l)/(Math.PI*e))}return n*.5}function li(e){if(!isFinite(e))return e!==e?NaN:e>0?.5:-.5;let n=e<0?-1:1;if(e=Math.abs(e),e<1.6){let t=e*e,i=t*t;return n*e*at(i,E_)/at(i,v_)}if(e<36){let t=e*e,i=Math.PI*t,r=1/(i*i),o=1-r*at(r,Gh)/at(r,Zh),s=1/i*at(r,Hh)/at(r,Wh),a=Math.PI/2*t,u=Math.cos(a),l=Math.sin(a);return n*(.5+(o*l-s*u)/(Math.PI*e))}return n*.5}function gu(e){return e===0?1:Math.sin(e)/e}function _s(e){if(!e.isInteger||e.isNegative||!E(e))return;let n=ie(e);if(n!==null)return uc(n);let t=Ot(e);if(t!==null)return Xd(t)}var _r=class e extends Ee{__brand;decimal;bignum;constructor(n,t){if(super(),this.bignum=t,typeof n=="number")this.decimal=t(n),this.im=0;else if(n instanceof K)this.decimal=n,this.im=0;else{let i=t(n.re??0);this.decimal=i,this.im=n.im??0}this.decimal.isNaN()&&(this.im=NaN),this.decimal.isNaN(),isNaN(this.im)}get type(){return this.isNaN?"number":this.isComplexInfinity?"complex":this.im!==0?this.decimal.isZero()?"imaginary":"finite_complex":this.decimal.isFinite()?this.decimal.isInteger()?"finite_integer":"finite_real":"non_finite_number"}get isExact(){return this.im===0&&this.decimal.isInteger()}get asExact(){if(this.isExact)return this._makeExact(Re(this.decimal))}toJSON(){return this.isNaN?"NaN":this.isPositiveInfinity?"PositiveInfinity":this.isNegativeInfinity?"NegativeInfinity":this.isComplexInfinity?"ComplexInfinity":this.im===0?Er(this.decimal)?this.decimal.toNumber():{num:hu(this.decimal)}:Er(this.decimal)?["Complex",_n(this.decimal.toNumber()),_n(this.im)]:["Complex",{num:hu(this.decimal)},_n(this.im)]}toString(){if(this.isZero)return"0";if(this.isOne)return"1";if(this.isNegativeOne)return"-1";if(this.im===0)return hu(this.decimal);if(this.decimal.isZero())return this.im===1?"i":this.im===-1?"-i":`${an(this.im)}i`;if(this.isComplexInfinity)return"~oo";let n="";return this.im===1?n="+ i":this.im===-1?n="- i":this.im>0?n=`+ ${this.im}i`:n=`- ${-this.im}i`,`(${hu(this.decimal)} ${n})`}clone(n){return new e(n,this.bignum)}_makeExact(n){return new we(n,t=>this.clone(t),this.bignum)}get re(){return this.decimal.toNumber()}get bignumRe(){return this.decimal}get numerator(){return this}get denominator(){return this._makeExact(1)}get isNaN(){return this.decimal.isNaN()}get isPositiveInfinity(){return this.im===0&&!this.decimal.isFinite()&&!this.decimal.isNaN()&&this.decimal.isPositive()}get isNegativeInfinity(){return this.im===0&&!this.decimal.isFinite()&&!this.decimal.isNaN()&&this.decimal.isNegative()}get isComplexInfinity(){return!Number.isFinite(this.im)&&!Number.isNaN(this.im)}get isZero(){return this.im===0&&this.decimal.isZero()}isZeroWithTolerance(n){if(this.im!==0)return!1;let t=typeof n=="number"?this.bignum(n):n;return this.decimal.abs().lte(t)}get isOne(){return this.im===0&&this.decimal.eq(1)}get isNegativeOne(){return this.im===0&&this.decimal.eq(-1)}sgn(){if(this.im===0){if(this.decimal.isZero())return 0;if(this.decimal.isPositive())return 1;if(this.decimal.isNegative())return-1}}N(){return this}neg(){return this.isZero?this:this.clone({re:this.decimal.neg(),im:-this.im})}inv(){if(this.isOne)return this;if(this.isNegativeOne)return this;if(this.im===0)return this.clone(this.decimal.pow(-1));let n=Math.hypot(this.re,this.im),t=this.decimal.mul(this.decimal).add(this.im*this.im).sqrt();return this.clone({re:this.decimal.div(t),im:-this.im/n})}add(n){return typeof n=="number"?n===0?this:this.clone({re:this.decimal.add(n),im:this.im}):n.isZero?this:this.isZero?this.clone(n):this.clone({re:this.decimal.add(n.bignumRe??n.re),im:this.im+n.im})}sub(n){return this.add(n.neg())}mul(n){if(this.isZero)return n instanceof Ee&&(n.isPositiveInfinity||n.isNegativeInfinity||n.isComplexInfinity||n.isNaN)?this._makeExact(NaN):this;if(n===1)return this;if(n===-1)return this.neg();if(n===0)return this.isPositiveInfinity||this.isNegativeInfinity||this.isComplexInfinity?this._makeExact(NaN):this.clone(0);if(this.isOne)return typeof n=="number"||n instanceof K?this.clone(n):this.clone({re:n.bignumRe??n.re,im:n.im});if(typeof n=="number")return this.im===0?this.clone(this.decimal.mul(n)):this.clone({re:this.decimal.mul(n),im:this.im*n});if(n instanceof K)return this.im===0?this.clone(this.decimal.mul(n)):this.clone({re:this.decimal.mul(n),im:this.im*n.toNumber()});if(this.isNegativeOne){let t=n.neg();return this.clone({re:t.bignumRe??t.re,im:t.im})}return n.isOne?this:n.isNegativeOne?this.neg():n.isZero?this.isPositiveInfinity||this.isNegativeInfinity||this.isComplexInfinity?this._makeExact(NaN):this.clone(0):this.im===0&&n.im===0?this.clone(this.decimal.mul(n.bignumRe??n.re)):this.clone({re:this.decimal.mul(n.bignumRe??n.re).sub(this.im*n.im),im:this.re*n.im+this.im*n.re})}div(n){if(typeof n=="number")return n===1?this:n===-1?this.neg():n===0?this.clone(NaN):this.clone({re:this.decimal.div(n),im:this.im/n});if(n.isOne)return this;if(n.isNegativeOne)return this.neg();if(n.isZero)return this.clone(this.isZero?NaN:1/0);if(this.im===0&&n.im===0)return this.clone(this.decimal.div(n.bignumRe??n.re));let[t,i]=[this.re,this.im],[r,o]=[n.re,n.im],s=r*r+o*o,a=n.bignumRe??this.bignum(n.re),u=a.mul(a).add(o*o);return this.clone({re:this.decimal.mul(a).add(i*o).div(u),im:(i*r-t*o)/s})}pow(n){if(Array.isArray(n),this.isNaN)return this;if(typeof n=="number"&&isNaN(n))return this.clone(NaN);if(n instanceof Ee){if(n.isNaN)return this.clone(NaN);if(n.isZero)return this.clone(1);if(n.isOne)return this;n.im?n={re:n.re,im:n.im}:n=n.re}if(typeof n=="object"&&("re"in n||"im"in n)){let[u,l]=[n?.re??0,n?.im??0];if(Number.isNaN(l)||Number.isNaN(u))return this.clone(NaN);if(l===0)n=u;else{if(this.im===1/0)return this.clone(NaN);if(this.isNegativeInfinity)return this.clone(0);if(this.isPositiveInfinity)return this.clone({im:1/0});let c=this.pow(u),f=this.decimal.ln().mul(l),p=this.clone({re:f.cos(),im:xo(f.sin().toNumber())});return c.mul(p)}}if(this.isPositiveInfinity){if(n===-1)return this.clone(0);if(n===1/0)return this.clone(1/0);if(n===-1/0)return this.clone(0)}else if(this.isNegativeInfinity&&n===1/0)return this.clone(NaN);if((n===1/0||n===-1/0)&&(this.isOne||this.isNegativeOne))return this.clone(NaN);if(n===1)return this;if(n===-1)return this.inv();if(n===0)return this.clone(1);if(this.isZero){if(n>0)return this;if(n<0)return this.clone({im:1/0})}if(n<0)return this.pow(-n).inv();if(this.im===0)return this.clone(this.decimal.pow(n));let t=this.decimal,i=this.im,r=t.mul(t).add(i*i).sqrt(),o=K.atan2(i,t),s=r.pow(n),a=o.mul(n);return this.clone({re:s.mul(a.cos()),im:xo(s.mul(a.sin()).toNumber())})}root(n){if(!Number.isInteger(n))return this._makeExact(NaN);if(n===0)return this._makeExact(NaN);if(n===1)return this;if(this.isZero)return this;if(this.isOne)return this;if(this.isNegativeOne)return this;if(this.im===0)return this.decimal.isNegative()?this._makeExact(NaN):n===2?this.clone(this.decimal.sqrt()):n===3?this.clone(this.decimal.cbrt()):this.clone(this.decimal.pow(1/n));let t=this.decimal,i=this.im,r=t.mul(t).add(i*i).sqrt(),o=K.atan2(i,t),s=r.pow(1/n),a=o.div(n);return this.clone({re:s.mul(a.cos()),im:xo(s.mul(a.sin()).toNumber())})}sqrt(){if(this.isZero||this.isOne)return this;if(this.im!==0){let n=this.decimal,t=this.im,i=n.mul(n).add(t*t).sqrt(),r=n.add(i).div(2).sqrt(),o=xo(Math.sign(t)*i.sub(n).div(2).sqrt().toNumber());return this.clone({re:r,im:o})}return this.decimal.isPositive()?this.clone(this.decimal.sqrt()):this.clone({im:Math.sqrt(-this.re)})}gcd(n){if(this.isZero)return n;if(n.isZero)return this;if(this.im!==0||n.im!==0)return this._makeExact(NaN);if(!this.decimal.isInteger())return this._makeExact(1);let t=this.bignum(n.bignumRe??n.re);if(!t.isInteger())return this._makeExact(1);let i=this.decimal;for(;!t.isZero();){let r=t;t=i.mod(t),i=r}return this.clone(i.abs())}abs(){return this.im===0?this.decimal.isPositive()?this:this.clone(this.decimal.neg()):this.clone(this.decimal.pow(2).add(this.im**2).sqrt())}ln(n){if(this.isZero)return this._makeExact(NaN);if(this.isNegativeInfinity)return this._makeExact(NaN);if(this.isPositiveInfinity)return this._makeExact(1/0);if(this.im===0)return this.decimal.isNegative()?this._makeExact(NaN):this.isOne?this._makeExact(0):this.isNegativeOne?this.clone({im:Math.PI}):n===void 0?this.clone(this.decimal.ln()):this.clone(this.decimal.log(n));let t=this.decimal,i=this.im,r=t.mul(t).add(i*i).sqrt(),o=K.atan2(i,t).toNumber();return n===void 0?this.clone({re:r.ln(),im:o}):this.clone({re:r.log(n),im:o})}exp(){if(this.isNaN)return this._makeExact(NaN);if(this.isZero)return this._makeExact(1);if(this.isNegativeInfinity)return this._makeExact(0);if(this.isPositiveInfinity)return this._makeExact(1/0);if(this.im!==0){let n=this.decimal.exp();return this.clone({re:n.mul(xo(Math.cos(this.im))),im:xo(n.mul(Math.sin(this.im)).toNumber())})}return this.clone(this.decimal.exp())}floor(){return this.isNaN||this.im!==0?this._makeExact(NaN):this.decimal.isInteger()?this:this._makeExact(Re(this.decimal.floor()))}ceil(){return this.isNaN||this.im!==0?this._makeExact(NaN):this.decimal.isInteger()?this:this._makeExact(Re(this.decimal.ceil()))}round(){return this.isNaN||this.im!==0?this._makeExact(NaN):this.decimal.isInteger()?this:this._makeExact(Re(this.decimal.round()))}eq(n){return this.isNaN?!1:typeof n=="number"?this.im===0&&this.decimal.eq(n):n.isNaN?!1:Number.isFinite(this.im)?this.decimal.eq(n.bignumRe??n.re)&&this.im-n.im===0:!Number.isFinite(n.im)}lt(n){if(this.im===0)return typeof n=="number"?this.decimal.lt(n):this.decimal.lt(n.bignumRe??n.re)}lte(n){if(this.im===0)return typeof n=="number"?this.decimal.lte(n):this.decimal.lte(n.bignumRe??n.re)}gt(n){if(this.im===0)return typeof n=="number"?this.decimal.gt(n):this.decimal.gt(n.bignumRe??n.re)}gte(n){if(this.im===0)return typeof n=="number"?this.decimal.gte(n):this.decimal.gte(n.bignumRe??n.re)}};function hu(e){let n=e.toString();if(e.isInteger()&&n.includes("e")){let t=e.toFixed(),i=t.match(/0+$/);if((i?i[0].length:0)<=5)return t}return n}function xo(e){return Math.abs(e)<=1e-14?0:e}var Nr=class e extends Ee{__brand;decimal;bignum;constructor(n,t){if(super(),this.bignum=t,typeof n=="number")this.decimal=n,this.im=0;else if(n instanceof K)this.decimal=n.toNumber(),this.im=0;else{let i=n.re===void 0?0:n.re instanceof K?n.re.toNumber():n.re;this.decimal=i,this.im=n.im??0,isFinite(this.im)||(this.decimal=this.im)}isNaN(this.im)}_makeExact(n){return new we(n,t=>this.clone(t),this.bignum)}get type(){return this.isNaN?"number":this.isComplexInfinity?"complex":this.im!==0?this.decimal===0?"imaginary":"finite_complex":Number.isFinite(this.decimal)?Number.isInteger(this.decimal)?"finite_integer":"finite_real":"non_finite_number"}get isExact(){return this.im===0&&Number.isInteger(this.decimal)}get asExact(){if(this.isExact)return this._makeExact(this.decimal)}toJSON(){return this.isNaN?"NaN":this.isPositiveInfinity?"PositiveInfinity":this.isNegativeInfinity?"NegativeInfinity":this.im===0?_n(this.decimal):["Complex",_n(this.decimal),_n(this.im)]}toString(){if(this.isZero)return"0";if(this.isOne)return"1";if(this.isNegativeOne)return"-1";if(this.im===0)return an(this.decimal);if(this.decimal===0)return this.im===1?"i":this.im===-1?"-i":`${an(this.im)}i`;if(this.isComplexInfinity)return"~oo";let n="";return this.im===1?n="+ i":this.im===-1?n="- i":this.im>0?n=`+ ${an(this.im)}i`:n=`- ${an(-this.im)}i`,`(${an(this.decimal)} ${n})`}clone(n){return new e(n,this.bignum)}get re(){return this.decimal}get bignumRe(){}get numerator(){return this}get denominator(){return this._makeExact(1)}get isNaN(){return Number.isNaN(this.decimal)}get isPositiveInfinity(){return!Number.isFinite(this.decimal)&&this.decimal>0&&this.im===0}get isNegativeInfinity(){return!Number.isFinite(this.decimal)&&this.decimal<0&&this.im===0}get isComplexInfinity(){return!Number.isFinite(this.im)&&!Number.isNaN(this.im)}get isZero(){return this.im===0&&this.decimal===0}isZeroWithTolerance(n){if(this.im!==0)return!1;let t=n instanceof K?n.toNumber():n;return Math.abs(this.decimal)<t}get isOne(){return this.im===0&&this.decimal===1}get isNegativeOne(){return this.im===0&&this.decimal===-1}sgn(){if(!(this.im!==0||!Number.isFinite(this.decimal)))return Math.sign(this.decimal)}N(){return this}neg(){return this.isNaN?this._makeExact(NaN):this.isZero?this:this.clone({re:-this.decimal,im:-this.im})}inv(){if(this.isNaN)return this._makeExact(NaN);if(this.isOne)return this;if(this.isNegativeOne)return this;if(this.im===0)return this.clone(1/this.decimal);let n=Math.hypot(this.re,this.im);return this.clone({re:this.decimal/n,im:-this.im/n})}add(n){return this.isNaN?this._makeExact(NaN):typeof n=="number"?n===0?this:this.clone({re:this.decimal+n,im:this.im}):n.isZero?this:this.isZero?this.clone({re:n.bignumRe??n.re,im:n.im}):this.clone({re:this.decimal+n.re,im:this.im+n.im})}sub(n){return this.add(n.neg())}mul(n){if(this.isNaN)return this._makeExact(NaN);if(this.isZero)return n instanceof Ee&&(n.isPositiveInfinity||n.isNegativeInfinity||n.isComplexInfinity||n.isNaN)?this._makeExact(NaN):this;if(n instanceof K&&(n=n.toNumber()),n===1)return this;if(n===-1)return this.neg();if(n===0)return this.isPositiveInfinity||this.isNegativeInfinity||this.isComplexInfinity?this._makeExact(NaN):this.clone(0);if(this.isOne)return typeof n=="number"||n instanceof K?this.clone(n):this.clone({re:n.bignumRe??n.re,im:n.im});if(typeof n=="number")return this.im===0?this.clone(this.decimal*n):this.clone({re:this.decimal*n,im:this.im*n});if(this.isNegativeOne){let t=n.neg();return this.clone({re:t.bignumRe??t.re,im:t.im})}return n.isOne?this:n.isNegativeOne?this.neg():n.isZero?this.isPositiveInfinity||this.isNegativeInfinity||this.isComplexInfinity?this._makeExact(NaN):this.clone(0):this.im===0&&n.im===0?this.clone(this.decimal*n.re):this.clone({re:this.decimal*n.re-this.im*n.im,im:this.re*n.im+this.im*n.re})}div(n){if(this.isNaN)return this._makeExact(NaN);if(typeof n=="number")return n===1?this:n===-1?this.neg():n===0?this.clone(NaN):this.clone({re:this.decimal/n,im:this.im/n});if(n.isOne)return this;if(n.isNegativeOne)return this.neg();if(n.isZero)return this.clone(this.isZero?NaN:1/0);if(this.im===0&&n.im===0)return this.clone(this.decimal/n.re);let[t,i]=[this.decimal,this.im],[r,o]=[n.re,n.im],s=r*r+o*o;return this.clone({re:(t*r+i*o)/s,im:(i*r-t*o)/s})}pow(n){if(Array.isArray(n),this.isNaN)return this._makeExact(NaN);if(typeof n=="number"&&isNaN(n))return this.clone(NaN);if(n instanceof Ee){if(n.isNaN)return this.clone(NaN);if(n.isZero)return this.clone(1);if(n.isOne)return this;n.im?n={re:n.re,im:n.im}:n=n.re}if(typeof n=="object"&&("re"in n||"im"in n)){let[u,l]=[n?.re??0,n?.im??0];if(Number.isNaN(l)||Number.isNaN(u))return this.clone(NaN);if(l===0)n=u;else{if(this.im===1/0)return this.clone(NaN);if(this.isNegativeInfinity)return this.clone(0);if(this.isPositiveInfinity)return this.clone({im:1/0});let c=this.pow(u).re,f=Math.log(this.decimal)*l;return this.clone({re:Yh(c*Math.cos(f)),im:Yh(c*Math.sin(f))})}}if(this.isPositiveInfinity){if(n===-1)return this.clone(0);if(n===1/0)return this.clone(1/0);if(n===-1/0)return this.clone(0)}else if(this.isNegativeInfinity&&n===1/0)return this.clone(NaN);if((n===1/0||n===-1/0)&&(this.isOne||this.isNegativeOne))return this.clone(NaN);if(n===1)return this;if(n===-1)return this.inv();if(n===0)return this.clone(1);if(this.isZero){if(n>0)return this;if(n<0)return this.clone({im:1/0})}if(n<0)return this.clone(1/this.decimal**-n);if(this.im===0)return this.clone(this.decimal**n);let t=this.decimal,i=this.im,r=Math.sqrt(t*t+i*i),o=Math.atan2(i,t),s=r**n,a=o**n;return this.clone({re:s*Math.cos(a),im:s*Math.sin(a)})}root(n){if(this.isNaN)return this._makeExact(NaN);if(n===0)return this.clone(NaN);if(this.isNaN)return this;if(this.isZero)return this;if(this.isOne)return this;if(this.isNegativeOne)return this;if(n===1)return this;if(n===2)return this.sqrt();if(n===3)return this.clone(Math.cbrt(this.decimal));if(this.im===0)return this.decimal<0?n%2===0?this.clone(NaN):this.clone(-Math.pow(-this.decimal,1/n)):this.clone(Math.pow(this.decimal,1/n));let t=this.decimal,i=this.im,r=Math.hypot(t,i),o=Math.atan2(i,t),s=Math.pow(r,1/n),a=o/n;return this.clone({re:s*Math.cos(a),im:s*Math.sin(a)})}sqrt(){if(this.isNaN)return this._makeExact(NaN);if(this.isZero||this.isOne)return this;if(this.im!==0){let n=this.decimal,t=this.im,i=Math.sqrt(n*n+t*t),r=Math.sqrt((n+i)/2),o=Math.sign(t)*Math.sqrt((i-n)/2);return this.clone({re:r,im:o})}return this.decimal>0?this.clone(Math.sqrt(this.decimal)):this.clone({im:Math.sqrt(-this.decimal)})}gcd(n){if(this.isNaN)return this._makeExact(NaN);if(this.isZero)return n;if(n.isZero)return this;if(this.im!==0||n.im!==0)return this._makeExact(NaN);if(!Number.isInteger(this.decimal))return this._makeExact(1);let t=n.re;if(!Number.isInteger(t))return this._makeExact(1);let i=this.decimal;for(;t!==0;){let r=t;t=i%t,i=r}return this.clone(Math.abs(i))}abs(){return this.isNaN?this._makeExact(NaN):this.im===0?this.decimal>0?this:this.clone(-this.decimal):this.clone(Math.sqrt(this.decimal**2+this.im**2))}ln(n){if(this.isNaN)return this._makeExact(NaN);if(this.isZero)return this._makeExact(NaN);if(this.isNegativeInfinity)return this._makeExact(NaN);if(this.isPositiveInfinity)return this._makeExact(1/0);if(this.im===0)return this.decimal<0?this._makeExact(NaN):this.isOne?this._makeExact(0):this.isNegativeOne?this.clone({im:Math.PI}):n===void 0?this.clone(Math.log(this.decimal)):this.clone(Math.log(this.decimal)/Math.log(n));let t=this.decimal,i=this.im,r=Math.hypot(t,i),o=Math.atan2(i,t),s=n===void 0?Math.log(r):Math.log(r)/Math.log(n);return this.clone({re:s,im:o})}exp(){if(this.isNaN)return this._makeExact(NaN);if(this.isZero)return this._makeExact(1);if(this.isNegativeInfinity)return this._makeExact(0);if(this.isPositiveInfinity)return this._makeExact(1/0);if(this.im!==0){let n=Math.exp(this.decimal);return this.clone({re:n*Math.cos(this.im),im:n*Math.sin(this.im)})}return this.clone(Math.exp(this.decimal))}floor(){return this.isNaN||this.im!==0?this._makeExact(NaN):Number.isInteger(this.decimal)?this:this._makeExact(Math.floor(this.decimal))}ceil(){return this.isNaN||this.im!==0?this._makeExact(NaN):Number.isInteger(this.decimal)?this:this._makeExact(Math.ceil(this.decimal))}round(){return this.isNaN||this.im!==0?this._makeExact(NaN):Number.isInteger(this.decimal)?this:this._makeExact(Math.round(this.decimal))}eq(n){return this.isNaN?!1:typeof n=="number"?this.im===0&&this.decimal-n===0:n.isNaN?!1:Number.isFinite(this.im)?this.decimal-n.re===0&&this.im-n.im===0:!Number.isFinite(n.im)}lt(n){if(this.im===0)return typeof n=="number"?this.decimal<n:this.decimal<n.re}lte(n){if(this.im===0)return typeof n=="number"?this.decimal<=n:this.decimal<=n.re}gt(n){if(this.im===0)return typeof n=="number"?this.decimal>n:this.decimal>n.re}gte(n){if(this.im===0)return typeof n=="number"?this.decimal>=n:this.decimal>=n.re}};function Yh(e){return Math.abs(e)<=1e-14?0:e}function ut(e,n){if(n=be(n,"Add"),n=n.filter(i=>!E(i)||!i.isSame(0)),n.length===0)return e.Zero;if(n.length===1&&!n[0].isIndexedCollection)return n[0];{let i=[],r=[];for(let o of n){if(E(o)&&!o.isInfinity&&!o.isNaN){let s=o.numericValue;if(typeof s=="number"||s.isExact){i.push(typeof s=="number"?e._numericValue(s):s);continue}}r.push(o)}if(i.length>=2){let o=rf(e,i);for(let s of o)s.isZero||r.push(e.number(s));if(n=r,n.length===0)return e.Zero;if(n.length===1&&!n[0].isIndexedCollection)return n[0]}}let t=[];{let i=0,r=!1;for(let o of n)if(E(o)){let s=hr(o);if(s!==void 0&&E(s)){let a=s.numericValue,u=typeof a=="number"?a:a.re;u!==0&&typeof u=="number"&&(i+=u,r=!0)}}if(r){let o,s=!1;for(let a of n){if(E(a)){let u=hr(a);if(E(u)){let l=u.numericValue,c=typeof l=="number"?l:l.re;if(c!==0&&typeof c=="number")continue}if(!s){let l=a.numericValue;if(typeof l=="number"||L(l.type,"real")&&!l.isExact||L(l.type,"integer")){let c=typeof l=="number"?l:l.re;if(typeof c=="number"){o=c,s=!0;continue}}}}t.push(a)}s?t.push(e.number(e._numericValue({re:o,im:i}))):i!==0&&t.push(e.number(e._numericValue({re:0,im:i})))}else t.push(...n)}return t.length===1?t[0]:e._fn("Add",[...t].sort(xr))}function Qh(e){return e.length===0?"finite_integer":e.length===1?e[0].type:Se(...e.map(n=>n.type.type))}function fe(...e){return e.length>0,e.every(t=>t.isValid)?e.some(t=>ne(t))?Kh(e[0].engine,e):new Ns(e[0].engine,e).asExpression():e[0].engine._fn("Add",e)}function Xh(...e){return e.length>0,e.every(t=>t.isValid)?e.some(t=>ne(t))?(e=e.map(t=>ne(t)?t.evaluate():t.N()),Kh(e[0].engine,e)):(e=e.map(t=>E(t)?t.evaluate():t.N()),new Ns(e[0].engine,e).N()):e[0].engine._fn("Add",e)}function Kh(e,n){let t=[],i=[];for(let s of n){let a=s.evaluate();ne(a)?t.push(a):i.push(a)}if(t.length===0)return new Ns(e,i).asExpression();let r=t[0].shape;for(let s=1;s<t.length;s++){let a=t[s].shape;if(a.length!==r.length||!a.every((u,l)=>u===r[l]))return e.error("incompatible-dimensions",`${r.join("x")} vs ${a.join("x")}`)}let o=e.Zero;for(let s of i)o=o.add(s);if(r.length===1){let s=r[0],a=[];for(let u=0;u<s;u++){let l=o;for(let c of t){let f=c.tensor.at(u+1)??e.Zero;l=l.add(e.box(f))}a.push(l.evaluate())}return e.box(["List",...a])}if(r.length===2){let[s,a]=r,u=[];for(let l=0;l<s;l++){let c=[];for(let f=0;f<a;f++){let p=o;for(let d of t){let g=d.tensor.at(l+1,f+1)??e.Zero;p=p.add(e.box(g))}c.push(p.evaluate())}u.push(e.box(["List",...c]))}return e.box(["List",...u])}return e._fn("Add",[...n])}var Ns=class{engine;terms=[];constructor(n,t){this.engine=n;let i=0,r=0,o=[];for(let s of t){if(s.type.is("complex")&&s.isInfinity){this.terms=[{term:n.ComplexInfinity,coef:[]}];return}if(s.isNaN||_(s,"Undefined")){this.terms=[{term:n.NaN,coef:[]}];return}let[a,u]=s.toNumericValue();a.isPositiveInfinity?i+=1:a.isNegativeInfinity&&(r+=1),u.isSame(1)?a.isZero||o.push(a):this._add(a,u)}if(i>0&&r>0){this.terms=[{term:n.NaN,coef:[]}];return}if(i>0){this.terms=[{term:n.PositiveInfinity,coef:[]}];return}if(r>0){this.terms=[{term:n.NegativeInfinity,coef:[]}];return}o.length===1?this._add(o[0],n.One):o.length>0&&rf(n,o).forEach(s=>this._add(s,n.One))}_add(n,t){if(t.isSame(0)||n.isZero)return;if(t.isSame(1)){let r=this.engine;this.terms.push({coef:[],term:r.number(n)});return}if(m(t,"Add")){for(let r of t.ops){let[o,s]=r.toNumericValue();this._add(n.mul(o),s)}return}if(m(t,"Negate")){this._add(n.neg(),t.op1);return}let i=this.find(t);if(i>=0){this.terms[i].coef.push(n);return}!E(t)||t.isSame(1),this.terms.push({coef:[n],term:t})}find(n){return this.terms.findIndex(t=>t.term.isSame(n))}N(){let n=this.engine,t=this.terms;if(t.length===0)return n.Zero;let i=[],r=[];for(let{coef:s,term:a}of t)if(s.length===0)E(a)?typeof a.numericValue=="number"?r.push(n._numericValue(a.numericValue)):r.push(a.numericValue):i.push(a);else{let u=s.reduce((l,c)=>l.add(c)).N();if(u.isZero)continue;u.eq(1)?i.push(a.N()):u.eq(-1)?i.push(a.N().neg()):i.push(a.N().mul(n.box(u)))}let o=__(n,r);if(!o.isZero){if(i.length===0)return n.box(o);i.push(n.box(o))}return ut(n,i)}asExpression(){let n=this.engine,t=this.terms;return t.length===0?n.Zero:ut(n,t.map(({coef:i,term:r})=>{if(i.length===0)return r;let o=rf(n,i);if(o.length===0)return r;if(o.length>1){let a=ut(n,o.map(u=>n.box(u)));return r.isSame(1)?a:n._fn("Multiply",[a,r].sort(ze))}let s=o[0];return s.isNaN?n.NaN:s.isZero?n.Zero:s.eq(1)?r:s.eq(-1)?r.neg():r.isSame(1)?n.box(s):r.mul(n.box(s))}))}};function rf(e,n){let t=o=>e.bignum(o),i=o=>new we(o,r,t),r=e.precision>ht?o=>new _r(o,t):o=>new Nr(o,i);return we.sum(n,r,t)}function __(e,n){let t=s=>e.bignum(s),i=s=>new we(s,r,t),r=e.precision>ht?s=>new _r(s,t):s=>new Nr(s,i),o=we.sum(n,r,t);return o.length===0?i(0):o.length===1?o[0].N():o.reduce((s,a)=>s.add(a).N())}function eb(e){let n=-1;for(;m(e,"Negate");)e=e.op1,n=-n;return n===1?e:E(e)?e.neg():e.engine._fn("Negate",[e])}function Sr(e){let n=-1;for(;m(e,"Negate");)e=e.op1,n=-n;if(n===1)return e;if(E(e))return e.neg();let t=e.engine;if(m(e)){if(e.operator==="Subtract")return e.op2.sub(e.op1);if(e.operator==="Add"){let i=e.ops.map(r=>Sr(r));return t._fn("Add",[...i].sort(xr))}if(e.operator==="Multiply")return of(t,e.ops);if(e.operator==="Divide")return Sr(e.op1).div(e.op2)}return t._fn("Negate",[e])}function of(e,n){if(n.length===0)return e.NegativeOne;if(n.length===1)return Sr(n[0]);let t=[],i=!1;for(let r of n)!i&&m(r,"Negate")?(i=!0,r.op1.isSame(1)||t.push(r.op1)):t.push(r);if(!i){t=[];for(let r of n)i||!E(r)&&!r.isInteger?t.push(r):(i=!0,r.isSame(-1)||t.push(r.neg()))}if(i)return e._fn("Multiply",t.sort(ze));if(!i){t=[];for(let r of n)i||!E(r)||!r.isNumber?t.push(r):(i=!0,r.isSame(-1)||t.push(r.neg()))}return i?e._fn("Multiply",t.sort(ze)):e._fn("Negate",[e._fn("Multiply",[...n].sort(ze))])}var qn=class e{constructor(n,t,i){this.options=i;if(i=i?{...i}:{},"canonical"in i||(i.canonical=!0),this._isCanonical=i.canonical,this.engine=n,this.coefficient=n._numericValue(1),t)for(let r of t)this.mul(r)}engine;coefficient;terms=[];_isCanonical=!0;static from(n){return new e(n.engine,[n])}mul(n,t){if(n.isCanonical||n.isStructural,this.coefficient.isNaN)return;if(n.isNaN){this.coefficient=this.engine._numericValue(NaN);return}if(m(n,"Multiply")){for(let o of n.ops)this.mul(o,t);return}if(m(n,"Negate")){this.mul(n.op1,t),this.coefficient=this.coefficient.neg();return}if(this._isCanonical){if(_(n,"Nothing"))return;t??=[1,1];let o=ce(n);if(o!==void 0){if(n.isSame(1))return;if(n.isSame(0)){if(this.coefficient.isPositiveInfinity||this.coefficient.isNegativeInfinity){this.coefficient=this.engine._numericValue(NaN);return}this.coefficient=this.engine._numericValue(Pt(t)?NaN:0);return}if(n.isSame(-1)){En(t)?this.coefficient=this.coefficient.neg():this.coefficient=this.coefficient.mul(this.engine._numericValue(-1).pow(this.engine._numericValue(t)));return}if(n.isInfinity){if(this.coefficient.isZero){this.coefficient=this.engine._numericValue(NaN);return}if(En(t)){let a=this.coefficient.sgn()??1,u=n.isNegative?-1:1,l=a*u;this.coefficient=this.engine._numericValue(l<0?-1/0:1/0)}else this.terms.push({term:n,exponent:t});return}En(t)?this.coefficient=this.coefficient.mul(o):this.coefficient=this.coefficient.mul(this.engine._numericValue(o).pow(this.engine._numericValue(t)));return}let s=iu(n);if(s!==null){this.coefficient=this.coefficient.mul(this.engine._numericValue({radical:s[0]*s[1],rational:[1,Number(s[1])]}).pow(this.engine._numericValue(t)));return}if(!_(n)&&!(m(n)&&(n.operator==="Sqrt"||n.operator==="Root"||n.operator==="Power")&&E(n.op1))){let u;[u,n]=n.toNumericValue(),t&&!En(t)&&(u=u.pow(this.engine._numericValue(t))),this.coefficient=this.coefficient.mul(u)}}if(n.isSame(1)&&(!t||En(t))||n.isSame(0)===!1&&t&&Pt(t))return;if(n.isSame(0)){t&&Pt(t)?this.coefficient=this.engine._numericValue(NaN):this.coefficient=this.engine._numericValue(0);return}let i=t??[1,1];if(m(n,"Power")){let o=Ke(n.op2);if(o){let s=E(n.op1),a=o[1]===1||o[1]===-1;if(!s||a){this.mul(n.op1,Zn(i,o));return}}}if(m(n,"Sqrt")&&!E(n.op1)){this.mul(n.op1,Zn(i,[1,2]));return}if(m(n,"Root")){let o=Ke(n.op2);if(o&&!E(n.op1)){this.mul(n.op1,Zn(i,Ga(o)));return}}if(m(n,"Divide")){this.mul(n.op1,i),this.mul(n.op2,dr(i));return}let r=!1;for(let o of this.terms)if(o.term.isSame(n)){o.exponent=Di(o.exponent,i),r=!0;break}r||this.terms.push({term:n,exponent:i})}div(n){n instanceof Ee?this.coefficient=this.coefficient.div(n):this.mul(n,[-1,1])}groupedByDegrees(n){n??={},"mode"in n||(n.mode="expression");let t=n.mode;if(t==="numeric"&&(this.coefficient.isNegativeInfinity||this.coefficient.isPositiveInfinity))return[];if(this.coefficient.isZero)return[];let i=this.engine;if(this.terms.length===0)if(t==="numeric"){let o=this.coefficient.N();return[{exponent:[1,1],terms:[i.number(o)]}]}else return[{exponent:[1,1],terms:[i.number(this.coefficient)]}];let r=[];if(!this.coefficient.isOne)if(t==="rational"&&this.coefficient.type==="finite_rational"){let o=this.coefficient.numerator;o.isOne||r.push({exponent:[1,1],terms:[i.number(o)]});let s=this.coefficient.denominator;s.isOne||r.push({exponent:[-1,1],terms:[i.number(s)]})}else if(t==="numeric"){let o=this.coefficient.N();r.push({exponent:[1,1],terms:[i.number(o)]})}else r.push({exponent:[1,1],terms:[i.number(this.coefficient)]});for(let o of this.terms){let s=ao(o.exponent);if(s[0]===0)continue;let a=!1;for(let u of r)if(s[0]===u.exponent[0]&&s[1]===u.exponent[1]){u.terms.push(o.term),a=!0;break}a||r.push({exponent:s,terms:[o.term]})}return r}asExpression(n={numericApproximation:!1}){let t=this.engine,i=this.coefficient;if(i.isNaN)return t.NaN;if(i.isPositiveInfinity)return t.PositiveInfinity;if(i.isNegativeInfinity)return t.NegativeInfinity;if(i.isZero)return t.Zero;let r=i.isNegativeOne;r&&(this.coefficient=t._numericValue(1));let o=this.groupedByDegrees({mode:n.numericApproximation?"numeric":"expression"});if(o===null)return t.NaN;if(r){let s=bu(t,o).neg();return this.coefficient=t._numericValue(-1),s}return bu(t,o)}asNumeratorDenominator(){let n=this.engine,t=this.coefficient;if(t.isZero)return[n.Zero,n.One];if(t.isPositiveInfinity||t.isNegativeInfinity)return this.terms.length===0?[t.isPositiveInfinity?n.PositiveInfinity:n.NegativeInfinity,n.One]:[n.NaN,n.NaN];let i=t.isNegativeOne;i&&(this.coefficient=n._numericValue(1));let r=this.groupedByDegrees({mode:"rational"});if(this.coefficient=t,r===null)return[n.NaN,n.NaN];let o=r.filter(u=>u.exponent[0]>=0),s=r.filter(u=>u.exponent[0]<0).map(u=>({exponent:dr(u.exponent),terms:u.terms})),a=bu(n,o);return[i?a.neg():a,bu(n,s)]}asRationalExpression(){let[n,t]=this.asNumeratorDenominator();return _t(n,t)}};function nb(e,n){let t=e.engine,i=e.coefficient.gcd(n.coefficient);if(i.isOne)return[t._numericValue(1),t.One];let r=[];for(let o of e.terms){let s=n.terms.find(u=>o.term.isSame(u.term));if(!s)continue;let a=Za(o.exponent,s.exponent);if(En(a))r.push(o.term);else{let[u,l]=ch(a);l===1?r.push(o.term.pow(u)):u===1?r.push(o.term.root(l)):r.push(o.term.pow(u).root(l))}}return[i,r.length===0?t.One:ke(...r)]}function bu(e,n){let t=n.map(({terms:i,exponent:r})=>{let o=be(i,"Multiply"),s=o.length<=1?o[0]:e._fn("Multiply",[...o].sort(ze));return En(r)?s:s.pow(e.number(r))});return t=be(t,"Multiply"),t.length===0?e.One:t.length===1?t[0]:e._fn("Multiply",t.sort(ze))}function _t(e,n){let t=e.engine;if(!e.isValid||!n.isValid)return t._fn("Divide",[e,n]);if(e.isNaN||n.isNaN)return t.NaN;let i=n.unknowns.length===0&&!E(n);if(n.isSame(0))return e.isSame(0)?t.NaN:t.ComplexInfinity;if(e.isSame(0)&&n.isFinite!==!1)return i?t.function("Divide",[e,n],{form:"structural"}):t.Zero;if(n.isInfinity)return e.isInfinity?t.NaN:t.Zero;if(n.isSame(0)===!1&&n.isFinite!==!1){if(_(e)&&_(n)&&e.symbol===n.symbol&&e.isConstant)return t.One;if(e.isSame(n))return i?t.function("Divide",[e,n],{form:"structural"}):t.One}if(m(e,"Negate")&&m(n)&&n.operator==="Negate"&&(e=e.op1,n=n.op1),m(e,"Divide")&&m(n)&&n.operator==="Divide")return _t(cn(t,[e.op1,n.op2]),cn(t,[e.op2,n.op1]));if(m(e,"Divide"))return _t(e.op1,cn(t,[e.op2,n]));if(m(n,"Divide"))return _t(cn(t,[e,n.op2]),n.op1);if(n.isSame(1))return e;if(n.isSame(-1))return e.neg();if(e.isSame(1))return n.inv();if(m(e,"Sqrt")&&m(n)&&n.operator==="Sqrt"){let f=W(e.op1),p=W(n.op1);if(f!==null&&p!==null)return t.number(t._numericValue({radical:f*p,rational:[1,p]}))}else if(m(e,"Sqrt")){let f=W(e.op1),p=W(n);if(f!==null&&p!==null)return t.number(t._numericValue({radical:f,rational:[1,p]}))}else if(m(n,"Sqrt")){let f=W(e),p=W(n.op1);if(f!==null&&p!==null)return t.number(t._numericValue({radical:p,rational:[f,p]}))}let r=ce(e),o=ce(n);if(r!==void 0&&o!==void 0){if(typeof r!="number"&&r.im!==0||typeof o!="number"&&o.im!==0)return t._fn("Divide",[e,n]);if(typeof r=="number"&&Number.isInteger(r)&&typeof o=="number"&&Number.isInteger(o))return o===0?r===0?t.NaN:t.ComplexInfinity:t.number([r,o]);if(typeof r=="number"&&Number.isInteger(r)){if(r===0)return t.Zero;if(typeof o!="number"&&L(o.type,"integer")){let f=o.bignumRe;if(f!==void 0){if(f.isInteger())return t.number([Re(r),Re(f)])}else{let p=o.re;if(Number.isInteger(p))return t.number([r,p])}}}return t._fn("Divide",[e,n])}let[s,a]=e.toNumericValue();s.isZero;let[u,l]=n.toNumericValue();u.isZero;let c=s.div(u);return c.isOne?l.isSame(1)?a:t._fn("Divide",[a,l]):c.isNegativeOne?l.isSame(1)?a.neg():t._fn("Divide",[a.neg(),l]):c.isExact?a.isSame(1)&&l.isSame(1)?t.number(c):l.isSame(1)?cn(t,[t.number(c),a]):t._fn("Divide",[cn(t,[t.number(c.numerator),a]),cn(t,[t.number(c.denominator),l])]):t._fn("Divide",[e,n])}function Eo(e,n){let t=e.engine;if(e=e.canonical,typeof n!="number"&&(n=n.canonical),e.isNaN)return t.NaN;if(typeof n=="number"){if(isNaN(n))return t.NaN;if(e.isSame(0))return n===0||!isFinite(n)?t.NaN:e;if(n===1)return e;if(n===-1)return e.neg();if(n===0)return t.ComplexInfinity;if(E(e)){let r=e.numericValue;if(typeof r=="number"){if(Number.isInteger(r)&&Number.isInteger(n))return t.number(t._numericValue({rational:[r,n]}))}else if(r.isExact&&Number.isInteger(n))return t.number(r.asExact.div(n))}}else{if(n.isNaN)return t.NaN;if(e.isSame(0))return n.isSame(0)||n.isFinite===!1?t.NaN:t.Zero;if(n.isSame(1))return e;if(n.isSame(-1))return e.neg();if(n.isSame(0))return t.NaN;if(E(e)&&E(n)){let r=e.numericValue,o=n.numericValue;if(typeof r=="number"&&typeof o=="number"&&Number.isInteger(r)&&Number.isInteger(o))return t.number(t._numericValue({rational:[r,o]}));if(typeof r=="number"&&Number.isInteger(r)&&typeof o!="number"){if(o.isExact)return t.number(t._numericValue(r).div(o.asExact))}else if(typeof o=="number"&&Number.isInteger(o)&&typeof r!="number"){if(r.isExact)return t.number(r.asExact.div(o))}else if(typeof r!="number"&&typeof o!="number"&&r.isExact&&o.isExact)return t.number(r.asExact.div(o.asExact))}}let i=new qn(t,[e]);return i.div(typeof n=="number"?t._numericValue(n):n),i.asRationalExpression()}function cn(e,n){let t=1,i=[];for(let o of n){let[s,a]=N_(o);t*=a,i.push(s)}i=i.filter(o=>!o.isSame(1));{let o=[],s=[];for(let a of i){if(E(a)&&!a.isInfinity&&!a.isNaN){let u=a.numericValue;if(typeof u=="number"||u.isExact){o.push(typeof u=="number"?e._numericValue(u):u);continue}}s.push(a)}if(o.length>=2){let a=o[0];for(let u=1;u<o.length;u++)a=a.mul(o[u]);if(a.isZero)return s.some(u=>u.isInfinity||u.isNaN)?e.NaN:e.Zero;a.eq(1)||s.unshift(e.number(a)),i=s}}let r=[];for(let o=0;o<i.length;o++){let s=i[o];if(o+1>=i.length){r.push(s);continue}let a=i[o+1];if(E(s)){if(m(a,"Sqrt")&&E(a.op1)&&a.op1.type.matches("finite_integer")){let u=a.op1.numericValue;if(typeof u!="number"&&(u=u.re),u>=re){r.push(s);continue}if(s.type.matches("finite_rational")){let l=s.numericValue,[c,f]=typeof l=="number"?[l,1]:[l.numerator.re,l.denominator.re];r.push(e.number(e._numericValue({rational:[c,f],radical:u}))),o++;continue}}else if(E(a)&&a.numericValue instanceof Ee){let u=a.numericValue;if(u instanceof we&&En(u.rational)&&u.radical!==1){let l=Ke(s);if(l){r.push(e.number(e._numericValue({rational:l,radical:u.radical}))),o++;continue}}else if(u.im===1){let l=s.numericValue;if(typeof l=="number"){r.push(e.number(e.complex(0,l))),o++;continue}else if(l.im===0){if(Number.isInteger(l.re)){r.push(e.number(e.complex(0,l.re))),o++;continue}else if(!l.isExact){r.push(e.number(e.complex(0,l.re))),o++;continue}}}}}r.push(s)}return t<0?r.length===0?e.number(-1):r.length===1?r[0].neg():of(e,r):r.length===0?e.number(1):r.length===1?r[0]:e._fn("Multiply",[...r].sort(ze))}function N_(e){let n=1;for(;m(e,"Negate");)n=-n,e=e.op1;return E(e)&&e.isNegative&&(n=-n,e=e.neg()),[e,n]}function Ft(e,n){if(m(e,"Negate")&&m(n)&&n.operator==="Negate")return Ft(e.op1,n.op1);let t=e.engine;if(m(e,"Negate"))return Ft(e.op1,n).neg();if(m(n,"Negate"))return Ft(e,n.op1).neg();if(m(e,"Divide")&&m(n)&&n.operator==="Divide"){let i=e.op2.mul(n.op2);return Ft(e.op1,n.op1).div(i)}if(m(e,"Divide"))return Ft(e.op1,n).div(e.op2);if(m(n,"Divide"))return Ft(e,n.op1).div(n.op2);if(m(e,"Add")){let i=e.ops.map(r=>Ft(r,n));return fe(...i)}if(m(n,"Add")){let i=n.ops.map(r=>Ft(e,r));return fe(...i)}return new qn(t,[e,n]).asExpression()}function Ss(e,n){if(n.length===0)return null;if(n.length===1)return n[0];if(n.length===2)return Ft(n[0],n[1]);let t=Ss(e,n.slice(1));return t===null?null:Ft(n[0],t)}function ke(...e){if(e.length>0,e.length===1)return e[0];let n=e[0].engine,t=Ss(n,e);if(t){if(t.operator!=="Multiply")return t;m(t)&&(e=t.ops)}return new qn(n,e).asRationalExpression()}function tb(...e){e.length>0;let n=e[0].engine;e=e.map(i=>i.N());let t=Ss(n,e);if(t){if(t.operator!=="Multiply")return t;m(t)&&(e=t.ops)}return new qn(n,e).asExpression({numericApproximation:!0})}function ib(e){return e?._kind==="number"}function S_(e){return e?._kind==="symbol"}function Ts(e,n){return(e?._kind==="function"||e?._kind==="tensor")&&(n===void 0||e.operator===n)}function $i(e){if(Ts(e,"Interval")){let n=e.op1,t=e.op2,i=!1,r=!1;Ts(n,"Open")?(i=!0,n=n.op1):Ts(n,"Closed")&&(n=n.op1),Ts(t,"Open")?(r=!0,t=t.op1):Ts(t,"Closed")&&(t=t.op1);let o=n.N(),s=t.N();return!ib(o)||!ib(s)?void 0:{start:o.re,openStart:i,end:s.re,openEnd:r}}if(S_(e)){if(e.symbol==="EmptySet")return{start:0,openStart:!0,end:0,openEnd:!0};if(e.symbol==="RealNumbers")return{start:-1/0,openStart:!1,end:1/0,openEnd:!1};if(e.symbol==="NegativeNumbers")return{start:-1/0,openStart:!1,end:0,openEnd:!0};if(e.symbol==="NonPositiveNumbers")return{start:-1/0,openStart:!1,end:0,openEnd:!1};if(e.symbol==="PositiveNumbers")return{start:0,openStart:!0,end:1/0,openEnd:!1};if(e.symbol==="NonNegativeNumbers")return{start:0,openStart:!1,end:1/0,openEnd:!1}}}function lt(e,n,t){return n.every(i=>i.isCanonical)?n:n.map(i=>e.box(i,{scope:t}))}var Is=50,ub={List:{complexity:8200,signature:"(any*) -> list",type:(e,{engine:n})=>Q(`list<${V.widen(...e.map(t=>t.type))}>`),canonical:T_,lazy:!0,evaluate:(e,{engine:n,materialization:t})=>{if(t)return n._fn("List",af(e).map(i=>i.evaluate({materialization:t})))},eq:ob,collection:Da()},Set:{complexity:8200,signature:"(any*) -> set",type:(e,{engine:n})=>Q(`set<${V.widen(...e.map(t=>t.type))}>`),canonical:I_,eq:(e,n)=>{if(e.operator!==n.operator||!m(e)||!m(n)||e.nops!==n.nops)return!1;let t=i=>n.ops.some(r=>i.isSame(r));return e.ops.every(t)},collection:{...Da(),at:void 0,indexWhere:void 0}},Tuple:{description:"A fixed number of heterogeneous elements",complexity:8200,signature:"(any*) -> tuple",type:e=>Q(`tuple<${e.map(n=>n.type).join(", ")}>`),canonical:(e,{engine:n})=>n.tuple(...e),eq:ob,collection:{...Da(),keys:e=>["first","second","last"]}},KeyValuePair:{description:"A key/value pair",complexity:8200,signature:"(key: string, value: any) -> tuple<string, unknown>",type:([e,n])=>Q(`tuple<string, ${n.type}>`),canonical:(e,{engine:n})=>{let[t,i]=hs(n,e,["string","any"]);return!t.isValid||!i.isValid?n._fn("KeyValuePair",[t,i]):n.tuple(t,i)}},Single:{description:"A tuple with a single element",complexity:8200,signature:"(value: any) -> tuple<any>",type:([e])=>Q(`tuple<${e.type}>`),canonical:(e,{engine:n})=>n.tuple(...Fn(n,e,1))},Pair:{description:"A tuple of two elements",complexity:8200,signature:"(first: any, second: any) -> tuple<any, any>",type:([e,n])=>Q(`tuple<${e.type}, ${n.type}>`),canonical:(e,{engine:n})=>n.tuple(...Fn(n,e,2))},Triple:{description:"A tuple of three elements",complexity:8200,signature:"(first: any, second: any, third: any) -> tuple<any, any, any>",type:([e,n,t])=>Q(`tuple<${e.type}, ${n.type}, ${t.type}>`),canonical:(e,{engine:n})=>n.tuple(...Fn(n,e,3))},Range:{complexity:8200,signature:"(number, number?, step: number?) -> indexed_collection<integer>",canonical:(e,{engine:n})=>e.length===0?null:e.length===1?n._fn("Range",[n.One,e[0].canonical]):e.length===2?n._fn("Range",[e[0].canonical,e[1].canonical]):n._fn("Range",[e[0].canonical,e[1].canonical,e[2].canonical.evaluate()]),eq:(e,n)=>{if(e.operator!==n.operator)return!1;let[t,i,r]=ct(e),[o,s,a]=ct(n);return t===o&&i===s&&r===a},collection:{isLazy:e=>!0,count:e=>{let[n,t,i]=ct(e);return i===0?0:!isFinite(n)||!isFinite(t)?1/0:1+Math.max(0,Math.floor((t-n)/i))},contains:(e,n)=>{if(!n.type.matches("integer"))return!1;let t=n.re,[i,r,o]=ct(e);return o===0?!1:o>0?t>=i&&t<=r:t<=i&&t>=r},iterator:e=>{let[n,t,i]=ct(e),r=i===0?0:Math.floor((t-n)/i)+1,o=1;return{next:()=>o===r+1?{value:void 0,done:!0}:(o+=1,{value:e.engine.number(n+i*(o-1-1)),done:!1})}},at:(e,n)=>{if(typeof n!="number")return;let[t,i,r]=ct(e);if(!(n<1||n>1+(i-t)/r))return e.engine.number(t+r*(n-1))},indexWhere:void 0,subsetOf:(e,n)=>{if(n.operator==="Range"){let[i,r,o]=ct(e),[s,a,u]=ct(n);return i>=s&&r<=a&&o%u===0}if(!n.isCollection)return!1;let t=1;for(let i of n.each()){if(!e.contains(i)||!e.at(t)?.isSame(i))return!1;t++}return!0},eltsgn:e=>{let[n,t,i]=ct(e);return i===0?"zero":i>0?n<=t?"positive":"negative":n>=t?"positive":"negative"},elttype:e=>"finite_integer"}},Interval:{description:"A set of real numbers between two endpoints. The endpoints may or may not be included.",complexity:8200,lazy:!0,signature:"(number, number) -> set<real>",canonical:([e,n],{engine:t})=>{if(!e||!n)return null;let[i,r]=hs(t,[e.canonical,n.canonical],["number","number"]);return!i.isValid||!r.isValid?null:t._fn("Interval",[i,r])},eq:(e,n)=>{let t=$i(e),i=$i(n);return!t||!i?!1:t.start===i.start&&t.end===i.end&&t.openStart===i.openStart&&t.openEnd===i.openEnd},collection:{count:e=>1/0,iterator:e=>{let n=$i(e);if(!n)return{next:()=>({value:void 0,done:!0})};if(n.start>=n.end)return{next:()=>({value:void 0,done:!0})};let t=e.engine,i=0,r=0;return{next:()=>{let o=Math.pow(2,i);r>=o&&(i++,r=0);let s=(2*r+1)/Math.pow(2,i+1),a=n.start+s*(n.end-n.start);return r++,{value:t.number(a),done:!1}}}},isEmpty:e=>{let n=$i(e);return n?n.openStart&&n.start===n.end||n.openEnd&&n.start===n.end?!0:n.openStart&&n.openEnd?!1:n.start>=n.end:!1},isFinite:e=>!1,contains:(e,n)=>{let t=$i(e);return!t||t.openStart&&n.isLessEqual(t.start)||t.openEnd&&n.isGreaterEqual(t.end)?!1:n.isGreaterEqual(t.start)&&n.isLessEqual(t.end)},eltsgn:e=>{let n=$i(e);if(!n||n.start===n.end)return"unsigned";if(n.start>=0&&!n.openStart)return"non-negative";if(n.end<=0&&!n.openEnd)return"non-positive";if(n.start>0&&n.end>0)return"positive";if(n.start<0&&n.end<0)return"negative"},elttype:e=>{let n=$i(e);return n?isFinite(n.start)&&isFinite(n.end)?"finite_real":"real":"never"}}},Linspace:{complexity:8200,signature:"(start: number, end: number?, count: number?) -> indexed_collection",collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let n=e.op3.re;return isFinite(n)||(n=Is),Math.max(0,Math.floor(n))},at:(e,n)=>{if(typeof n!="number"||!m(e))return;let t=e.op1.re,i=e.op2.re,r=e.op3.re;if(isFinite(r)||(r=Is),!(!isFinite(t)||!isFinite(i))&&!(n<1||n>r))return e.engine.number(t+(i-t)*(n-1)/r)},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=e.op1.re,t=e.op2.re,i;isFinite(t)?i=Math.max(0,isFinite(e.op3.re)?e.op3.re:Is):(t=n,n=1,i=Is);let r=1;return{next:()=>r===i+1?{value:void 0,done:!0}:(r+=1,{value:e.engine.number(n+(t-n)*(r-1-1)/i),done:!1})}},contains:(e,n)=>{if(!n.type.matches("finite_real")||!m(e))return!1;let t=n.re,i=e.op1.re,r=e.op2.re;if(t<i||t>r)return!1;let o=e.op3.re;if(isFinite(o)||(o=Is),o===0)return!1;let s=(r-i)/o;return(t-i)%s===0}}},Contains:{description:"Return True if the collection contains the given element, False otherwise.",complexity:8200,signature:"(collection, element: any) -> boolean",evaluate:([e,n],{engine:t})=>e.contains(n)?t.True:t.False},Count:{description:["Return the number of elements in the collection."],complexity:8200,signature:"(collection) -> integer",evaluate:([e],{engine:n})=>e.isEmptyCollection?n.Zero:n.number(e.count),sgn:([e])=>e.isEmptyCollection?"zero":"positive"},IsEmpty:{description:["Return True if the collection is empty, False otherwise."],complexity:8200,signature:"(collection) -> boolean",evaluate:([e],{engine:n})=>e.isEmptyCollection?n.True:n.False},Map:{description:["Return the collection where each element has been transformed by the mapping function.","Equivalent to `[f(x) for x in xs]`."],complexity:8200,lazy:!0,signature:"(collection, function) -> collection",type:e=>e[0].type,canonical:(e,{engine:n})=>{let t=sn(n,e[0]?.canonical,"collection"),i=Qe(e[1]);return!t.isValid||!i?null:n._fn("Map",[t,i])},collection:{isLazy:e=>!0,count:e=>{if(m(e))return e.op1.count},isEmpty:e=>{if(m(e))return e.op1.isEmptyCollection},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=Le(e.op2);if(!n)return{next:()=>({value:void 0,done:!0})};let t=e.op1.each();return{next:()=>{for(;;){let{value:i,done:r}=t.next();return r?{value:void 0,done:!0}:{value:n([i])??e.engine.Nothing,done:!1}}}}},at:(e,n)=>{if(!m(e)||!e.isIndexedCollection||typeof n!="number"||!Number.isFinite(n)||n===0)return;let t=e.op1.at(n);if(t)return Le(e.op2)?.([t])}}},Filter:{description:["Return the elements of the collection for which the predicate function returns True.","Equivalent to `[x for x in xs if p(x)]`."],complexity:8200,lazy:!0,signature:"(collection, predicate: function) -> collection",type:e=>e[0].type,canonical:(e,{engine:n})=>{let t=sn(n,e[0]?.canonical,"collection"),i=Qe(e[1]);return!t.isValid||!i?null:n._fn("Filter",[t,i])},collection:{isLazy:e=>!0,count:e=>1/0,contains:(e,n)=>{if(!m(e)||!e.contains(n))return!1;let t=Le(e.op2);return v(t([n]))==="True"},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=Le(e.op2);if(!n)return{next:()=>({value:void 0,done:!0})};let t=e.op1.each(),i=0,r=e.engine.iterationLimit;return{next:()=>{for(;;){let{value:o,done:s}=t.next();if(i+=1,i>r)throw new vn({cause:"iteration-limit-exceeded",message:`Iteration limit of ${r} exceeded while evaluating Filter()`});if(s)return{value:void 0,done:!0};let a=n([o]);if(!a)throw new Error(`Invalid filter predicate. ${st(e.op2)}`);if(v(a)==="True")return{value:o,done:!1};if(v(a)!=="False")throw new Error(`Filter predicate must return "True" or "False". ${st(e.op2)}`)}}}},at:(e,n)=>{if(typeof n!="number"||!Number.isFinite(n)||n===0||!m(e))return;let t=Le(e.op2);if(!t)return;if(n<0){if(!e.op1.isFiniteCollection)return;let r=Array.from(e.each()),o=r.length+n+1;return o<1||o>r.length?void 0:r[o-1]}let i=0;for(let r of e.op1.each()){let o=v(t([r]));if(o==="True"){if(i+=1,i===n)return r}else if(o!=="False")throw new Error(`Filter predicate must return "True" or "False". ${st(e.op2)}`)}}}},Reduce:{complexity:8200,lazy:!0,signature:"(collection, function, initial:value?) -> value",canonical:(e,{engine:n})=>{let t=sn(n,e[0],"collection"),i=Qe(e[1]);if(!t.isValid||!i)return null;let r=e[2]?.canonical;return r?.isValid?n._fn("Reduce",[t,i,r]):n._fn("Reduce",[t,i])},type:e=>Q(jn(e[1].type.type)??"unknown"),evaluate:([e,n,t],{engine:i})=>{if(!e.isFiniteCollection)return;if(t??=i.Nothing,t.type.matches("real")&&e.type.matches(i.type("collection<real>"))){let o=i._compile(n);return o.calling!=="lambda"||!o.run?void 0:Dt((function*(){let s=t.re,a=!0;for(let u of e.each())a?s=u.re:s=o.run(s,u.re),a=!1,yield;return i.box(s)})(),i._timeRemaining)}let r=Le(n);return Dt(uf(e,(o,s)=>r([o,s])??i.Nothing,t),i._timeRemaining)}},Join:{description:["Join the elements of some collections into a flat collection."],complexity:8200,signature:"(collection*) -> collection",type:w_,collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let n=0;for(let t of e.ops){let i=t.count;if(i===void 0)return;if(!Number.isFinite(i))return 1/0;n+=i}return n},contains:(e,n)=>m(e)?e.ops.some(t=>t.contains(n)):!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=e.ops.map(i=>i.each()),t=0;return{next:()=>{for(;;){let{value:i,done:r}=n[t].next();if(!r)return{value:i,done:!1};if(t+=1,t>=n.length)return{value:void 0,done:!0}}}}}}},At:{description:["Access an element of an indexed collection.","If the index is negative, it is counted from the end.","Multiple indices can be provided to access nested collections (e.g., matrices)."],complexity:8200,signature:"(value: indexed_collection, index: (number|string)+) -> unknown",type:([e])=>e.operatorDefinition?.collection?.elttype?.(e)??Dn(e.type.type)??"any",evaluate:(e,{engine:n})=>{let t=e[0],i=1;for(;e[i];){let o=t.baseDefinition?.collection?.at;if(!o)return;let s=e[i],a=q(s)?s.string:void 0;if(a!==void 0)t=o(t,a)??n.Nothing;else{let u=e[i].re;if(!Number.isInteger(u))return;t=o(t,u)??n.Nothing}i+=1}return t}},Take:{description:["Return `n` elements from a collection."],complexity:8200,signature:"(xs: indexed_collection, count: number) -> indexed_collection",type:([e])=>`list<${Dn(e.type.type)}>`,evaluate:(e,{engine:n,materialization:t})=>{if(!t)return;let i=n._fn("Take",e),r=Array.from(i.each());return n._fn("List",r)},collection:{isLazy:e=>!0,count:ab,isEmpty:e=>{if(!m(e))return;let[n,t]=e.ops;if(n.isEmptyCollection)return!0;if(n.isFiniteCollection===!1)return!1;let i=Math.max(0,ie(t)??0),r=n.count;if(r!==void 0)return Number.isFinite(i)?Math.min(r,i)===0:!1},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},iterator:M_,at:(e,n)=>{if(typeof n!="number"||n===0||!m(e))return;let t=Math.max(0,ie(e.op2)??0);if(t===0)return;if(n>0)return n>t?void 0:e.op1.at(n);let i=ab(e);if(!(i===void 0||i===0)&&!(n<-i))return e.op1.at(i+n)}}},Drop:{description:["Return the collection without the first n elements."],complexity:8200,signature:"(xs: indexed_collection, count: number) -> indexed_collection",type:([e])=>`list<${Dn(e.type.type)}>`,collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let[n,t]=e.ops,i=n.count;if(i===void 0)return;if(!Number.isFinite(i))return 1/0;if(n.isEmptyCollection)return 0;let r=ie(t)??0;return r>=i?0:Math.max(0,i-r)},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let[n,t]=e.ops,i=ie(t)??0;if(i<=0)return n.each();let r=i+1;return{next:()=>{let o=e.op1.at(r++);return o===void 0?{value:void 0,done:!0}:{value:o,done:!1}}}},at:(e,n)=>{if(typeof n!="number"||!m(e))return;let[t,i]=e.ops,r=ie(i)??0;if(!(r<=0))return t.at(n+r)}}},First:{complexity:8200,signature:"(collection) -> any",type:([e])=>e.operatorDefinition?.collection?.elttype?.(e)??"any",evaluate:([e],{engine:n})=>e.at(1)??n.Nothing},Second:{complexity:8200,signature:"(collection) -> any",type:([e])=>e.operatorDefinition?.collection?.elttype?.(e)??"any",evaluate:([e],{engine:n})=>e.at(2)??n.Nothing},Last:{complexity:8200,signature:"(collection) -> any",type:([e])=>e.operatorDefinition?.collection?.elttype?.(e)??"any",evaluate:([e],{engine:n})=>e.at(-1)??n.Nothing},Rest:{description:["Return the collection without the first element.","If the collection has only one element, return an empty collection."],complexity:8200,signature:"(indexed_collection) -> indexed_collection",collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let n=e.op1.count;if(n!==void 0)return Math.max(0,n-1)},isEmpty:e=>{if(!m(e))return;if(e.op1.isEmptyCollection)return!0;let n=e.op1.count;if(n!==void 0)return n<=1},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},iterator:e=>m(e)?{next:()=>{let n=1,t=e.op1.at(n>0?n+1:n);return t?(n+=1,{value:t,done:!1}):{value:void 0,done:!0}}}:{next:()=>({value:void 0,done:!0})},at:(e,n)=>{if(typeof n=="number"&&m(e))return e.op1.at(n>0?n+1:n)}}},Most:{complexity:8200,description:["Return the collection without the last element.","If the collection has only one element, return an empty collection."],signature:"(indexed_collection) -> indexed_collection",collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let n=e.op1.count;if(n!==void 0)return Math.max(0,n-1)},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},isEmpty:e=>{if(!m(e))return;let n=e.op1.count;if(n!==void 0)return n<=1},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=e.op1.count;if(n===void 0||n<=1)return{next:()=>({value:void 0,done:!0})};let t=1,i=n-1;return{next:()=>t>i?{value:void 0,done:!0}:{value:e.op1.at(t++),done:!1}}},at:(e,n)=>{if(typeof n!="number"||!m(e))return;let t=e.op1.count;if(t!==void 0&&(n<1&&(n=t+1+n),!(n<1||n>t-1)))return e.op1.at(n)}}},Slice:{description:["Return a range of elements from an indexed collection.","If the index is negative, it is counted from the end."],complexity:8200,signature:"(value: indexed_collection, start: number, end: number) -> list",type:([e])=>Q(`list<${Dn(e.type.type)}>`),collection:{isLazy:e=>!0,count:e=>{if(!m(e))return;let n=ie(e.op2)??1,t=e.op1.count;if(t===void 0)return;let i=ie(e.op3)??t;return n<1?Math.max(0,i+n-1):Math.max(0,Math.min(i,t)-n+1)},isFinite:e=>!0,at:(e,n)=>{if(typeof n!="number"||!m(e))return;let t=e.op1.count;if(t===void 0)return;let i=ie(e.op2)??1;if(i<1&&(i=t+1+i),i<1&&(i=1),i>t)return;let r=ie(e.op3)??t;r<1&&(r=t+1+r),r<1&&(r=1),r>t&&(r=t)},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=ie(e.op2)??1,t=e.op1.count;if(t===void 0)return{next:()=>({value:void 0,done:!0})};if(n<1&&(n=t+1+n),n<1&&(n=1),n>t)return{next:()=>({value:void 0,done:!0})};let i=ie(e.op3)??t;i<1&&(i=t+1+i),i<1&&(i=1),i>t&&(i=t);let r=n,o=i;return{next:()=>{if(r>o)return{value:void 0,done:!0};let s=e.op1.at(r);return r+=1,{value:s,done:!1}}}}}},Reverse:{complexity:8200,signature:"(indexed_collection) -> indexed_collection",type:([e])=>e.type,collection:{isLazy:e=>!0,count:e=>{if(m(e))return e.op1.count},isEmpty:e=>{if(m(e))return e.op1.isEmptyCollection},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},contains:(e,n)=>m(e)?e.op1.contains(n)??!1:!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=-1;return{next:()=>{if(n===0)return{value:void 0,done:!0};let t=e.op1.at(n);return n-=1,{value:t,done:!1}}}},at:(e,n)=>{if(typeof n=="number"&&m(e))return e.op1.at(-n)}}},RotateLeft:{description:"Rotate the elements of the collection to the left by n positions.",complexity:8200,signature:"(indexed_collection, integer?) -> indexed_collection",collection:{isLazy:e=>!0,count:e=>{if(m(e))return e.op1.count},isEmpty:e=>{if(m(e))return e.op1.isEmptyCollection},isFinite:e=>{if(m(e))return e.op1.isFiniteCollection},contains:(e,n)=>m(e)?e.op1.contains(n)??!1:!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=e.op1.count;if(n===void 0||n<=0)return{next:()=>({value:void 0,done:!0})};let t=ie(e.op2)??1;t=(t%n+n)%n;let i=1,r=n;return{next:()=>{if(i===r+1)return{value:void 0,done:!0};i+=1;let o=e.op1.at((i-1-1+t)%n+1);return o===void 0?{value:void 0,done:!0}:{value:o,done:!1}}}},at:(e,n)=>{if(typeof n!="number"||!m(e))return;let t=e.op1.count;if(t===void 0||t<=0||(n<1&&(n=t+1+n),n<1||n>t))return;let i=ie(e.op2)??1;return i=(i%t+t)%t,e.op1.at((n-1+i)%t+1)}}},RotateRight:{description:"Rotate the elements of the collection to the right by n positions.",complexity:8200,signature:"(indexed_collection, integer?) -> indexed_collection",collection:{isLazy:e=>!0,count:e=>{if(m(e))return e.op1.count},contains:(e,n)=>m(e)?e.op1.contains(n)??!1:!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=e.op1.count;if(n===void 0||n<=0)return{next:()=>({value:void 0,done:!0})};let t=ie(e.op2)??1;t=(t%n+n)%n;let i=1;return{next:()=>{if(i===n+1)return{value:void 0,done:!0};i+=1;let r=(i-1-1+(n-t))%n+1,o=e.op1.at(r);return o===void 0?{value:void 0,done:!0}:{value:o,done:!1}}}},at:(e,n)=>{if(typeof n!="number"||!m(e))return;let t=e.op1.count;if(t===void 0||t<=0||(n<1&&(n=t+1+n),n<1||n>t))return;let i=ie(e.op2)??1;i=(i%t+t)%t;let r=(n-1+(t-i))%t+1;return e.op1.at(r)}}},IndexOf:{description:"Return the 1-based index of the first occurrence of value in collection, or 0 if not found.",complexity:8200,signature:"(collection, any) -> integer",evaluate:([e,n],{engine:t})=>{let i=e.indexWhere(r=>r.isSame(n))??void 0;return t.number(i??0)}},IndexWhere:{description:"Return the 1-based index of the first element satisfying the predicate, or 0 if not found.",complexity:8200,signature:"(collection, function) -> integer",evaluate:([e,n],{engine:t})=>{let i=Le(n);if(!i)return t.Zero;let r=e.indexWhere(o=>{let s=v(i([o]));if(s==="True")return!0;if(s==="False")return!1;throw new Error(`Filter predicate must return "True" or "False". ${st(n)}`)})??void 0;return t.number(r??0)}},Find:{description:"Return the first element of the collection satisfying the predicate, or Nothing if none found.",complexity:8200,signature:"(collection, function) -> any",type:e=>e[0].type,evaluate:([e,n],{engine:t})=>{let i=Le(n);if(!i)return t.Nothing;for(let r of e.each()){let o=v(i([r]));if(o!=="False"){if(o==="True")return r;throw new Error(`Filter predicate must return "True" or "False". ${st(n)}`)}}return t.Nothing}},CountIf:{description:"Return the number of elements in the collection satisfying the predicate.",complexity:8200,signature:"(collection, function) -> integer",evaluate:([e,n],{engine:t})=>{let i=Le(n);if(!i)return t.Zero;let r=0;for(let o of e.each()){let s=v(i([o]));if(s!=="False")if(s==="True")r++;else throw new Error(`Filter predicate must return "True" or "False". ${st(n)}`)}return t.number(r)}},Position:{description:"Return a list of indexes of elements in the collection satisfying the predicate.",complexity:8200,signature:"(collection, function) -> list<integer>",type:()=>"list<integer>",evaluate:([e,n],{engine:t})=>{let i=Le(n);if(!i)return t.function("List",[]);let r=[],o=1;for(let s of e.each()){let a=v(i([s]));if(a==="True"&&r.push(t.number(o)),a!=="False")throw new Error(`Filter predicate must return "True" or "False". ${st(n)}`);o++}return t.function("List",r)}},Ordering:{description:"Return the indexes that would sort the collection.",complexity:8200,signature:"(indexed_collection, function?) -> list<integer>",evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return t.function("List",[]);let i=sb(e,n);return i?t.function("List",i):t.function("List",[])}},Sort:{description:"Return the elements of the collection sorted according to the given comparison function.",complexity:8200,signature:"(indexed_collection, function?) -> indexed_collection",type:e=>e[0].type,evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return t.function(e.operator,[]);let i=sb(e,n);if(i)return t.function(e.operator,i.map(r=>e.at(r)))}},Shuffle:{description:"Randomize the order of the elements in the collection.",complexity:8200,signature:"(indexed_collection) -> indexed_collection",type:e=>e[0].type,evaluate:([e],{engine:n})=>{if(!e.isFiniteCollection)return;let t=Array.from(e.each());for(let i=t.length-1;i>0;i--){let r=Math.floor(Math.random()*(i+1));[t[i],t[r]]=[t[r],t[i]]}return n.function(e.operator,t)}},Tabulate:{description:"Create a collection by applying a function to each index in the specified dimensions.",complexity:8200,lazy:!0,signature:"(function, integer, integer?) -> collection",canonical:(e,{engine:n})=>{let t=Qe(e[0]);return t?e[2]?n._fn("Tabulate",[t,sn(n,e[1]?.canonical,"integer"),sn(n,e[2]?.canonical,"integer")]):n._fn("Tabulate",[t,sn(n,e[1]?.canonical,"integer")]):null},evaluate:(e,{engine:n})=>{let t=Le(e[0]);if(!t)return;if(e.length===1)return n._fn("List",[]);let i=e.slice(1).map(o=>ie(o));if(i.some(o=>o===null||o<=0))return;if(i.length===1)return n._fn("List",Array.from({length:i[0]??0},(o,s)=>t([n.number(s+1)])??n.Nothing));let r=(o,s,a=0)=>{if(a===o.length){let l=s.map(c=>n.number(c));return t(l)??n.Nothing}let u=["List"];for(let l=1;l<=o[a];l++)s[a]=l,u.push(r(o,s,a+1));return u};return n.box(r(i,Array(i.length).fill(0)))}},Tally:{description:"Return a tuple with the unique elements of the collection and their respective counts.",complexity:8200,signature:"(collection) -> tuple<list, list<integer>>",type:([e],{engine:n})=>{let t=e.type.type;return t==="string"?Q("tuple<list<string>, list<integer>>"):Q(`tuple<list<${Dn(t)}>, list<integer>>`)},evaluate:(e,{engine:n})=>{if(!e[0].isFiniteCollection)return;let[t,i]=rb(e[0]);return n.tuple(n.function("List",t),n.function("List",i))}},Unique:{description:"Return a list of the unique elements of the collection.",complexity:8200,signature:"(collection) -> list",type:([e])=>`list<${Dn(e.type.type)}>`,evaluate:(e,{engine:n})=>{if(!e[0].isFiniteCollection)return;let[t,i]=rb(e[0]);return n.function("List",t)}},Partition:{wikidata:"Q381060",complexity:8200,signature:"(collection, integer | function) -> list",type:([e])=>`list<${Dn(e.type.type)}>`,evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=ie(n);if(i!==null&&i>0){let a=Array.from(e.each()),u=[],l=Math.ceil(a.length/i);for(let c=0;c<i;c++){let f=a.slice(c*l,(c+1)*l);u.push(t.function("List",f))}return t.function("List",u)}let r=Le(n);if(!r)return;let o=[],s=[];for(let a of e.each()){let u=v(r([a]));if(u==="True")o.push(a);else if(u==="False")s.push(a);else throw new Error(`Partition predicate must return "True" or "False". ${st(n)}`)}return t.function("List",[t.function("List",o),t.function("List",s)])}},Chunk:{description:"Split the collection into `k` nearly equal-sized chunks.",complexity:8200,signature:"(collection, integer) -> list<list>",evaluate:([e,n],{engine:t})=>{let i=ie(n);if(!e.isFiniteCollection||i===null||i<=0)return;let r=Array.from(e.each()),o=[],s=Math.ceil(r.length/i);for(let a=0;a<i;a++){let u=r.slice(a*s,(a+1)*s);o.push(t.function("List",u))}return t.function("List",o)}},GroupBy:{description:["Partition the collection into a dictionary of lists based on the key returned by the function."],complexity:8200,signature:"(collection, function) -> dictionary<list>",evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=Le(n);if(!i)return;let r={};for(let o of e.each()){let s=i([o])??t.Nothing,a=(_(s)?s.symbol:void 0)??(q(s)?s.string:void 0)??s.toString();a in r||(r[a]=[]),r[a].push(o)}return t.function("Dictionary",Object.entries(r).map(([o,s])=>t._fn("Tuple",[t.string(o),t.function("List",s)])))}},Zip:{description:"Combine multiple collections element-wise into a list of tuples. The result has the length of the shortest input.",complexity:8200,signature:"(indexed_collection+) -> list",collection:{isLazy:e=>!0,count:sf,isFinite:e=>{if(m(e))return e.ops.every(n=>n.isFiniteCollection)},isEmpty:e=>{if(m(e))return e.nops===0||e.ops.every(n=>n.isEmptyCollection)},iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=sf(e);if(n===void 0||n<=0)return{next:()=>({value:void 0,done:!0})};let t=1;return{next:()=>{if(t===n+1)return{value:void 0,done:!0};t+=1;let i=e.ops.map(r=>r.at(t-1));return i.some(r=>r===void 0)?{value:void 0,done:!0}:{value:e.engine.tuple(...i),done:!1}}}},at:(e,n)=>{if(typeof n!="number"||n<1||!m(e))return;let t=sf(e);if(t===void 0||n<1||n>t)return;let i=e.ops.map(r=>r.at(n));if(!i.some(r=>r===void 0))return e.engine.tuple(...i)}}},Iterate:{description:"Produce an infinite sequence by repeatedly applying a function to the previous value, starting with an initial value.",complexity:8200,signature:"((index: integer, acc:any) -> any, initial: any?) -> list",canonical:([e,n],{engine:t})=>{let i=Qe(e);if(!i)return null;let r=n?.canonical;return r?t._fn("Iterate",[i,r]):t._fn("Iterate",[i])},collection:{isLazy:e=>!0,count:()=>1/0,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=Le(e.op1);if(!n)return{next:()=>({value:void 0,done:!0})};let t=e.op2??e.engine.Nothing,i=0;return{next:()=>(i+=1,t=n([e.engine.number(i),t])??e.engine.Nothing,{value:t,done:!1})}},at:(e,n)=>{if(typeof n!="number"||n<1||!m(e))return;let t=Le(e.op1);if(!t)return;let i=e.op2??e.engine.Nothing;for(let r=1;r<n;r++)i=t([e.engine.number(r),i])??e.engine.Nothing;return i}}},Repeat:{description:"Produce an infinite sequence by repeating a single value.",complexity:8200,signature:"(value: any) -> list",collection:{isLazy:e=>!0,count:()=>1/0,isEmpty:e=>!1,isFinite:()=>!1,contains:(e,n)=>m(e)?e.op1.isSame(n):!1,iterator:e=>m(e)?{next:()=>({value:e.op1,done:!1})}:{next:()=>({value:void 0,done:!0})},at:(e,n)=>{if(m(e))return e.op1}}},Cycle:{description:"Produce an infinite sequence by cycling through the elements of a finite collection.",complexity:8200,signature:"(list) -> list",collection:{isLazy:e=>!0,count:()=>1/0,isEmpty:e=>e.isEmptyCollection,isFinite:e=>!e.isEmptyCollection,contains:(e,n)=>m(e)?e.op1.contains(n)??!1:!1,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=1,t=e.op1.count;return t===void 0||t===0?{next:()=>({value:void 0,done:!0})}:{next:()=>{let i=(n-1-1)%t+1,r=e.op1.at(i);return r===void 0?{value:void 0,done:!0}:(n+=1,{value:r,done:!1})}}},at:(e,n)=>{if(typeof n!="number"||n<1||!m(e))return;let t=e.op1.count;if(t===void 0||t===0)return;let i=(n-1)%t+1;return e.op1.at(i)}}},Fill:{description:"Produce a 2D list (matrix) by applying a function to each pair of row and column indexes.",complexity:8200,signature:"(function, tuple) -> list",collection:{isLazy:e=>!0,count:e=>!m(e)||!m(e.op2)?void 0:e.op2.ops.map(t=>ie(t)??0)[0]??0,iterator:e=>{if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=Le(e.op1);if(!n)return{next:()=>({value:void 0,done:!0})};if(!m(e.op2))return{next:()=>({value:void 0,done:!0})};let t=e.op2.ops.map(a=>ie(a)??0),i=t[0]??0,r=t[1]??0,o=i,s=1;return{next:()=>{if(s===o+1)return{value:void 0,done:!0};s+=1;let a=[];for(let u=1;u<=r;u++)a.push(n([e.engine.number(s-1),e.engine.number(u)])??e.engine.Nothing);return{value:e.engine.function("List",a),done:!1}}}},at:(e,n)=>{if(typeof n!="number"||n<1||!m(e))return;let t=Le(e.op1);if(!t||!m(e.op2))return;let i=e.op2.ops.map(u=>ie(u)??0),r=i[0]??0,o=i[1]??0;if(n>r*o)return;let s=Math.ceil(n/o),a=(n-1)%o+1;return t([e.engine.number(s),e.engine.number(a)])??e.engine.Nothing}}},ListFrom:{description:"Create a list from the elements of a collection.",complexity:8200,signature:"(value*) -> list",type:e=>{if(e.length===0)return"list";let n="unknown";for(let t of e){if(t.isCollection&&!t.isFiniteCollection)return"list";n=Se(n,Dn(t.type.type)??n)}return Q(`list<${_e(n)}>`)},evaluate:(e,{engine:n})=>{let t=[];for(let i of e)if(!i.isCollection)t.push(i);else{if(!i.isFiniteCollection)return;t.push(...Array.from(i.each()))}return n.function("List",t)}},SetFrom:{description:"Create a set from the elements of a collection.",complexity:8200,signature:"(value*) -> set",type:e=>{if(e.length===0)return"set";let n="unknown";for(let t of e){if(t.isCollection&&!t.isFiniteCollection)return"set";n=Se(n,Dn(t.type.type)??n)}return Q(`set<${_e(n)}>`)},evaluate:(e,{engine:n})=>{let t=[];for(let i of e)if(i.isCollection)t.push(i);else{if(!i.isFiniteCollection)return;t.push(...Array.from(i.each()))}return n.function("Set",t)}},TupleFrom:{description:"Create a tuple from the elements of a collection.",complexity:8200,signature:"(value*) -> tuple",evaluate:(e,{engine:n})=>{let t=[];for(let i of e)if(i.isCollection)t.push(i);else{if(!i.isFiniteCollection)return;t.push(...Array.from(i.each()))}return n.tuple(...t)}},DictionaryFrom:{description:"Create a dictionary from the elements of a collection of (key, value) pairs.",complexity:8200,signature:"(collection) -> dictionary",evaluate:([e],{engine:n})=>{if(!e.isCollection)return;if(m(e,"Record"))return n.function("Dictionary",[...e.ops]);let t=[];for(let i of e.each()){if(!m(i)||i.nops!==2)throw new Error(`Expected a collection of pairs, got ${i.type}`);let r=i.op1,o=i.op2;if(!q(r))throw new Error(`Expected a string key, got ${r.type}`);t.push(n.tuple(r,o))}return n.function("Dictionary",t)}},RecordFrom:{description:"Create a record from the elements of a collection of (key, value) pairs.",complexity:8200,signature:"(collection) -> record",evaluate:([e],{engine:n})=>{if(!e.isCollection)return;if(m(e,"Dictionary"))return n.function("Record",[...e.ops]);let t=[];for(let i of e.each()){if(!m(i)||i.nops!==2)throw new Error(`Expected a collection of pairs, got ${i.type}`);let r=i.op1,o=i.op2;if(!q(r))throw new Error(`Expected a string key, got ${r.type}`);t.push(n.tuple(r,o))}return n.function("Record",t)}}};function ct(e){if(!m(e))return[1,0,0];if(e.nops===0)return[1,0,0];let n=e.op1.re;if(isFinite(n)?n=Math.round(n):n=1,e.nops===1)return[1,n,1];let t=e.op2.re;if(!isFinite(t)&&!t?t=1:isFinite(t)&&(t=Math.round(t)),e.nops===2)return[n,t,t>n?1:-1];let i=e.op3.re;return isFinite(i)?i=Math.abs(Math.round(i)):i=1,[n,t,n<t?i:-i]}function lb(e){let[n,t,i]=e;return Number.isFinite(t)?i>0?t-(t-n)%i:t+(n-t)%i:i>0?1/0:-1/0}function T_(e,{engine:n}){let t=e[0];if(e.length===1&&m(t,"Matrix")){let[i,r,o]=t.ops;if(!r||q(r)&&r.string==="..")return o?n._fn("Matrix",[i,n.string("[]"),o]):n._fn("Matrix",[i,r])}return e=e.map(i=>m(i,"Delimiter")?m(i.op1,"Sequence")?n._fn("List",lt(n,i.op1.ops)):n._fn("List",[i.op1?.canonical??n.Nothing]):i.canonical),n._fn("List",e)}function I_(e,{engine:n}){let t=[],i=r=>t.some(o=>o.isSame(r));for(let r of e)i(r)||t.push(r);return n._fn("Set",t)}function rb(e){let n=[],t=[],i=r=>{for(let o=0;o<n.length;o++)if(n[o].isSame(r))return o;return-1};for(let r of e.each()){let o=i(r);o>=0?t[o]++:(n.push(r),t.push(1))}return[n,t]}function*uf(e,n,t){let i=t;for(let r of e.each()){let o=n(i,r);if(o===null)return;yield i,i=o}return i}function w_(e){return e.some(n=>n.type.matches("record"))?"record":e.some(n=>n.type.matches("dictionary"))?"dictionary":e.some(n=>n.type.matches("set"))?"set":"list"}function ob(e,n){return e.operator!==n.operator||!m(e)||!m(n)||e.nops!==n.nops?!1:e.ops.every((t,i)=>t.isSame(n.ops[i]))}function lf(e,n){return Array.from({length:n-e+1},(t,i)=>e+i)}function sb(e,n=void 0){let t=n?Le(n):void 0,i=t?(s,a)=>{let u=t([s,a]);return u?.isNegative?-1:u?.isSame(0)?0:1}:(s,a)=>s.isLess(a)?-1:s.isEqual(a)?0:1,r=e.count;if(r===void 0||!Number.isFinite(r)||r<1)return;let o=Array.from({length:r},(s,a)=>a+1);return o.sort((s,a)=>{let u=e.at(s),l=e.at(a);return i(u,l)}),o}function af(e){if(e.length===0)return[];let n=[];for(let t of e)v(t)!=="Nothing"&&(m(t,"Sequence")?n.push(...af([...t.ops])):q(t)?n.push(t):t.isCollection?n.push(...af([...t.each()])):n.push(t));return n}function M_(e){if(!m(e))return{next:()=>({value:void 0,done:!0})};let n=Math.max(0,ie(e.op2)??0);if(n===0)return{next:()=>({value:void 0,done:!0})};let t=1,i=0;return{next:()=>{if(i>=Math.abs(n))return{value:void 0,done:!0};let r=e.op1.at(t);return r?(t+=1,i+=1,{value:r,done:!1}):{value:void 0,done:!0}}}}function ab(e){if(!m(e))return;let[n,t]=e.ops,i=n.count;if(i===void 0)return;let r=Math.max(0,ie(t)??0);return Number.isFinite(r)?Math.min(i,r):1/0}function sf(e){if(!m(e))return;let n=e.ops.map(t=>t.count);if(!n.some(t=>t===void 0))return n.some(t=>!Number.isFinite(t))?1/0:n.length===0?0:Math.min(...n)}function Vn(e){return m(e)?e.op1:void 0}function yu(e){return m(e)?e.op2:void 0}function Ye(e){return m(e)?e.ops:void 0}function k_(e){for(let n=0;n<e.length;n++){let t=e[n];for(let i=n+1;i<e.length;i++){let r=e[i];if(t.operator==="Not"&&Vn(t).isSame(r)||r.operator==="Not"&&Vn(r).isSame(t))return!0}}return!1}function C_(e){for(let n=0;n<e.length;n++){let t=e[n];for(let i=n+1;i<e.length;i++){let r=e[i];if(t.operator==="Not"&&Vn(t).isSame(r)||r.operator==="Not"&&Vn(r).isSame(t))return!0}}return!1}function xu(e,{engine:n}){if(e.length===0)return n.True;let t=[];for(let r of e){if(r.operator==="Or"&&C_(Ye(r))&&(r=n.True),v(r)==="False")return n.False;if(v(r)!=="True"){let o=!1;for(let s of t)if(s.isSame(r))o=!0;else if(r.operator==="Not"&&Vn(r).isSame(s)||s.operator==="Not"&&Vn(s).isSame(r))return n.False;o||t.push(r)}}if(t.length===0)return n.True;if(t.length===1)return t[0];let i=A_(t);return i.length===0?n.True:i.length===1?i[0]:n._fn("And",i)}function A_(e){let n=[];for(let t of e){let i=t.operator==="Or"?Ye(t):void 0;if(i){let r=!1;for(let o of i){for(let s of e)if(s!==t&&o.isSame(s)){r=!0;break}if(r)break}r||n.push(t)}else n.push(t)}return n}function Eu(e,{engine:n}){if(e.length===0)return n.True;let t=[];for(let r of e){if(r.operator==="And"&&k_(Ye(r))&&(r=n.False),v(r)==="True")return n.True;if(v(r)!=="False"){let o=!1;for(let s of t)if(s.isSame(r))o=!0;else if(r.operator==="Not"&&Vn(r).isSame(s)||s.operator==="Not"&&Vn(s).isSame(r))return n.True;o||t.push(r)}}if(t.length===0)return n.False;if(t.length===1)return t[0];let i=R_(t);return i.length===0?n.False:i.length===1?i[0]:n._fn("Or",i)}function R_(e){let n=[];for(let t of e){let i=t.operator==="And"?Ye(t):void 0;if(i){let r=!1;for(let o of i){for(let s of e)if(s!==t&&o.isSame(s)){r=!0;break}if(r)break}r||n.push(t)}else n.push(t)}return n}function vu(e,{engine:n}){let t=v(e[0]);if(t==="True")return n.False;if(t==="False")return n.True}function _u(e,{engine:n}){let t=v(e[0]),i=v(e[1]);if(t==="True"&&i==="True"||t==="False"&&i==="False")return n.True;if(t==="True"&&i==="False"||t==="False"&&i==="True")return n.False}function Nu(e,{engine:n}){let t=v(e[0]),i=v(e[1]);if(t==="True"&&i==="True"||t==="False"&&i==="False"||t==="False"&&i==="True")return n.True;if(t==="True"&&i==="False")return n.False}function Su(e,{engine:n}){if(e.length===0)return n.False;let t=0,i=[];for(let r of e)v(r)==="True"?t++:v(r)==="False"||i.push(r);if(i.length===0)return t%2===1?n.True:n.False;if(i.length===1&&t%2===1)return n._fn("Not",[i[0]]);if(i.length===1&&t%2===0)return i[0]}function Tu(e,{engine:n}){if(e.length===0)return n.False;for(let i of e)if(v(i)==="False")return n.True;let t=!0;for(let i of e)if(v(i)!=="True"){t=!1;break}if(t)return n.False}function Iu(e,{engine:n}){if(e.length===0)return n.True;for(let i of e)if(v(i)==="True")return n.False;let t=!0;for(let i of e)if(v(i)!=="False"){t=!1;break}if(t)return n.True}function en(e,n){let t=e.operator;if(!t||v(e)==="True"||v(e)==="False")return e;if(t==="Not"){let i=Vn(e);if(!i)return e;let r=i.operator;if(r==="Not")return en(Vn(i),n);if(r==="And"){let o=Ye(i).map(s=>en(n._fn("Not",[s]),n));return n._fn("Or",o)}if(r==="Or"){let o=Ye(i).map(s=>en(n._fn("Not",[s]),n));return n._fn("And",o)}if(v(i)==="True")return n.False;if(v(i)==="False")return n.True;if(r==="Implies"){let o=Vn(i),s=yu(i);return en(n._fn("And",[o,n._fn("Not",[s])]),n)}if(r==="Equivalent"){let o=Vn(i),s=yu(i);return en(n._fn("Or",[n._fn("And",[o,n._fn("Not",[s])]),n._fn("And",[n._fn("Not",[o]),s])]),n)}if(r==="Xor"){let o=Ye(i);if(o.length===2){let s=o[0],a=o[1];return en(n._fn("Or",[n._fn("And",[s,a]),n._fn("And",[n._fn("Not",[s]),n._fn("Not",[a])])]),n)}return en(n._fn("Not",[en(i,n)]),n)}return r==="Nand"?en(n._fn("And",Ye(i)),n):r==="Nor"?en(n._fn("Or",Ye(i)),n):e}if(t==="Implies"){let i=Vn(e),r=yu(e);return en(n._fn("Or",[n._fn("Not",[i]),r]),n)}if(t==="Equivalent"){let i=Vn(e),r=yu(e);return en(n._fn("And",[n._fn("Or",[n._fn("Not",[i]),r]),n._fn("Or",[n._fn("Not",[r]),i])]),n)}if(t==="Xor"){let i=Ye(e);if(i.length===2){let r=i[0],o=i[1];return en(n._fn("And",[n._fn("Or",[r,o]),n._fn("Or",[n._fn("Not",[r]),n._fn("Not",[o])])]),n)}if(i.length>2){let r=n._fn("Xor",[i[0],i[1]]),o=i.slice(2);return en(n._fn("Xor",[r,...o]),n)}return i.length===1?en(i[0],n):n.False}if(t==="Nand"){let i=Ye(e);return en(n._fn("Not",[n._fn("And",i)]),n)}if(t==="Nor"){let i=Ye(e);return en(n._fn("Not",[n._fn("Or",i)]),n)}if(t==="And"||t==="Or"){let i=Ye(e).map(r=>en(r,n));return n._fn(t,i)}return e}function cf(e,n){let t=e.operator;if(t!=="Or")return t==="And"?n._fn("And",Ye(e).map(l=>cf(l,n))):e;let i=[];for(let l of Ye(e))l.operator==="Or"?i.push(...Ye(l)):i.push(l);let r=i.findIndex(l=>l.operator==="And");if(r===-1)return e;let o=i[r],s=[...i.slice(0,r),...i.slice(r+1)],a=s.length===1?s[0]:n._fn("Or",s),u=n._fn("And",Ye(o).map(l=>n._fn("Or",[l,a])));return cf(u,n)}function cb(e,n){let t=en(e,n);return cf(t,n).simplify()}function ff(e,n){let t=e.operator;if(t!=="And")return t==="Or"?n._fn("Or",Ye(e).map(l=>ff(l,n))):e;let i=[];for(let l of Ye(e))l.operator==="And"?i.push(...Ye(l)):i.push(l);let r=i.findIndex(l=>l.operator==="Or");if(r===-1)return e;let o=i[r],s=[...i.slice(0,r),...i.slice(r+1)],a=s.length===1?s[0]:n._fn("And",s),u=n._fn("Or",Ye(o).map(l=>n._fn("And",[l,a])));return ff(u,n)}function fb(e,n){let t=en(e,n);return ff(t,n).simplify()}function Oi(e){let n=new Set;function t(i){if(!(v(i)==="True"||v(i)==="False")){if(_(i)&&i.operator==="Symbol"){n.add(i.symbol);return}if(m(i))for(let r of i.ops)t(r)}}return t(e),Array.from(n).sort()}function Li(e,n,t){let i={};for(let[o,s]of Object.entries(n))i[o]=s?t.True:t.False;return e.subs(i).canonical.evaluate()}function*Fi(e){let n=e.length,t=1<<n;for(let i=0;i<t;i++){let r={};for(let o=0;o<n;o++)r[e[o]]=(i>>n-1-o&1)===1;yield r}}function P_(e,n,t,i){return e.filter(r=>{let s=t.subs({[n]:r}).evaluate();return v(s)==="True"})}function Tr(e,n){if(e.operator!=="Element")return{status:"error",reason:"expected-element-expression"};if(!m(e))return{status:"error",reason:"expected-element-expression"};let t=_(e.op1)?e.op1.symbol:void 0;if(!t)return{status:"error",reason:"expected-index-variable"};let i=e.op2;if(!i)return{status:"error",reason:"expected-domain"};let r=e.op3,o=e.nops>=3&&r&&v(r)!=="Nothing"?r:null,s=u=>{if(o){let l=P_(u,t,o,n);return{status:"success",variable:t,values:l}}return{status:"success",variable:t,values:u}};if(i.operator==="Set"||i.operator==="List"){let u=m(i)?i.ops:void 0;if(u&&u.length<=1e3){if(i.operator==="List"&&u.length===2){let l=W(u[0]),c=W(u[1]);if(l!==null&&c!==null){let f=c-l+1;if(f>0&&f<=1e3){let p=[];for(let d=l;d<=c;d++)p.push(n.number(d));return s(p)}if(f>1e3)return{status:"non-enumerable",variable:t,domain:i,reason:"domain-too-large"}}}return s([...u])}return u&&u.length>1e3?{status:"non-enumerable",variable:t,domain:i,reason:"domain-too-large"}:{status:"error",reason:"empty-domain"}}if(m(i,"Range")){let u=W(i.op1),l=W(i.op2),c=i.ops.length>=3?W(i.op3):1;if(u!==null&&l!==null&&c!==null&&c!==0){let f=Math.floor((l-u)/c)+1;if(f>0&&f<=1e3){let p=[];for(let d=u;c>0?d<=l:d>=l;d+=c)p.push(n.number(d));return s(p)}if(f>1e3)return{status:"non-enumerable",variable:t,domain:i,reason:"domain-too-large"}}return{status:"non-enumerable",variable:t,domain:i,reason:"non-integer-bounds"}}if(m(i,"Interval")){let u=i.op1,l=i.op2,c=!1,f=!1;m(u,"Open")?(c=!0,u=u.op1):m(u,"Closed")&&(u=u.op1),m(l,"Open")?(f=!0,l=l.op1):m(l,"Closed")&&(l=l.op1);let p=W(u),d=W(l);if(p!==null&&d!==null){c&&(p+=1),f&&(d-=1);let g=d-p+1;if(g>0&&g<=1e3){let h=[];for(let b=p;b<=d;b++)h.push(n.number(b));return s(h)}if(g>1e3)return{status:"non-enumerable",variable:t,domain:i,reason:"domain-too-large"}}return{status:"non-enumerable",variable:t,domain:i,reason:"non-integer-bounds"}}let a=v(i);if(a){if(["Integers","NonNegativeIntegers","PositiveIntegers","NegativeIntegers","Rationals","Reals","PositiveReals","NonNegativeReals","NegativeReals","NonPositiveReals","ExtendedReals","Complexes","ImaginaryNumbers","Numbers","ExtendedComplexes","AlgebraicNumbers","TranscendentalNumbers"].includes(a))return{status:"non-enumerable",variable:t,domain:i,reason:"infinite-domain"};let l=i.value;if(l&&l.operator==="Set"&&m(l)){let c=l.ops;if(c&&c.length<=1e3)return s([...c]);if(c&&c.length>1e3)return{status:"non-enumerable",variable:t,domain:i,reason:"domain-too-large"}}return{status:"non-enumerable",variable:t,domain:i,reason:"unknown-domain"}}return{status:"non-enumerable",variable:t,domain:i,reason:"unrecognized-domain-type"}}function Mu(e,n){if(v(e)===n)return!0;if(m(e)){for(let t of e.ops)if(Mu(t,n))return!0}return!1}function ku(e,n){let t=e.canonical,i=t.operator;if(i!=="ForAll"&&i!=="Exists")return[];if(!m(t))return[];let r=t.op1,o=t.op2;if(!r||!o)return[];let s=Tr(r,n);if(s.status!=="success")return[];let a=ku(o,n);return[{variable:s.variable,values:s.values},...a]}function Cu(e){let n=e.canonical,t=n.operator;if((t==="ForAll"||t==="Exists")&&m(n)){let i=n.op2;if(i)return Cu(i)}return n}function mb(e,n,t){let i=e.map(()=>0),r=e.map(o=>o.values.length);if(r.some(o=>o===0))return t.True;for(;;){let o={};for(let l=0;l<e.length;l++)o[e[l].variable]=e[l].values[i[l]];let a=n.subs(o).canonical.evaluate();if(v(a)==="False")return t.False;if(v(a)!=="True")return;let u=e.length-1;for(;u>=0&&(i[u]++,!(i[u]<r[u]));)i[u]=0,u--;if(u<0)break}return t.True}function db(e,n,t){let i=e.map(()=>0),r=e.map(o=>o.values.length);if(r.some(o=>o===0))return t.False;for(;;){let o={};for(let l=0;l<e.length;l++)o[e[l].variable]=e[l].values[i[l]];let a=n.subs(o).canonical.evaluate();if(v(a)==="True")return t.True;let u=e.length-1;for(;u>=0&&(i[u]++,!(i[u]<r[u]));)i[u]=0,u--;if(u<0)break}return t.False}function gb(e,n){let t=Oi(e);if(t.length===0){let i=e.evaluate();return v(i)==="True"?n.True:n.False}if(t.length>20)return n._fn("IsSatisfiable",[e]);for(let i of Fi(t)){let r=Li(e,i,n);if(v(r)==="True")return n.True}return n.False}function hb(e,n){let t=Oi(e);if(t.length===0){let i=e.evaluate();return v(i)==="True"?n.True:n.False}if(t.length>20)return n._fn("IsTautology",[e]);for(let i of Fi(t)){let r=Li(e,i,n);if(v(r)!=="True")return n.False}return n.True}function bb(e,n){let t=Oi(e);if(t.length>10)return n._fn("TruthTable",[e]);let i=[],r=n._fn("List",[...t.map(o=>n.string(o)),n.string("Result")]);i.push(r);for(let o of Fi(t)){let s=Li(e,o,n),a=n._fn("List",[...t.map(u=>o[u]?n.True:n.False),s]);i.push(a)}return n._fn("List",i)}function D_(e,n){let t=[];for(let i=n-1;i>=0;i--)t.push(e>>i&1);return t}function $_(e){return e.filter(n=>n===1).length}function O_(e,n){let t=-1;for(let i=0;i<e.length;i++)if(e[i]===-1||n[i]===-1){if(e[i]!==n[i])return-1}else if(e[i]!==n[i]){if(t!==-1)return-1;t=i}return t}function L_(e,n){let t=[...e];return t[n]=-1,t}function pb(e){return e.map(n=>n===-1?"-":n.toString()).join("")}function yb(e,n){let t=Oi(e);if(t.length>12)return null;if(t.length===0){let s=e.evaluate();return v(s)==="True"?[n.True]:v(s)==="False"?[]:null}let i=[],r=0;for(let s of Fi(t)){let a=Li(e,s,n);v(a)==="True"&&i.push(r),r++}return i.length===0?[]:i.length===1<<t.length?[n.True]:Au(i,t.length).map(s=>pf(s,t,n))}function xb(e,n){let t=Oi(e);if(t.length>12)return null;if(t.length===0){let s=e.evaluate();return v(s)==="True"?[]:v(s)==="False"?[n.False]:null}let i=[],r=0;for(let s of Fi(t)){let a=Li(e,s,n);v(a)==="False"&&i.push(r),r++}return i.length===0?[]:i.length===1<<t.length?[n.False]:Au(i,t.length).map(s=>mf(s,t,n))}function Au(e,n){let t=new Map;for(let r of e){let o=D_(r,n);t.set(pb(o),{term:o,combined:!1})}let i=[];for(;t.size>0;){let r=new Map,o=new Map;for(let[a,{term:u}]of t){let l=$_(u);o.has(l)||o.set(l,[]),o.get(l).push({key:a,term:u})}let s=Array.from(o.keys()).sort((a,u)=>a-u);for(let a=0;a<s.length-1;a++){let u=o.get(s[a]),l=o.get(s[a+1]);for(let{key:c,term:f}of u)for(let{key:p,term:d}of l){let g=O_(f,d);if(g!==-1){let h=t.get(c),b=t.get(p);h.combined=!0,b.combined=!0;let y=L_(f,g),x=pb(y);r.has(x)||r.set(x,{term:y,combined:!1})}}}for(let{term:a,combined:u}of t.values())u||i.push(a);t=r}return i}function pf(e,n,t){let i=[];for(let r=0;r<e.length;r++)e[r]===1?i.push(t.symbol(n[r])):e[r]===0&&i.push(t._fn("Not",[t.symbol(n[r])]));return i.length===0?t.True:i.length===1?i[0]:t._fn("And",i)}function mf(e,n,t){let i=[];for(let r=0;r<e.length;r++)e[r]===0?i.push(t.symbol(n[r])):e[r]===1&&i.push(t._fn("Not",[t.symbol(n[r])]));return i.length===0?t.False:i.length===1?i[0]:t._fn("Or",i)}function Eb(e,n){let t=Oi(e);if(t.length>12)return null;if(t.length===0){let a=e.evaluate();return v(a)==="True"?n.True:n.False}let i=[],r=0;for(let a of Fi(t)){let u=Li(e,a,n);v(u)==="True"&&i.push(r),r++}if(i.length===0)return n.False;if(i.length===1<<t.length)return n.True;let o=Au(i,t.length),s=_b(o,i,t.length);return s.length===0?n.False:s.length===1?pf(s[0],t,n):n._fn("Or",s.map(a=>pf(a,t,n)))}function vb(e,n){let t=Oi(e);if(t.length>12)return null;if(t.length===0){let a=e.evaluate();return v(a)==="True"?n.True:n.False}let i=[],r=0;for(let a of Fi(t)){let u=Li(e,a,n);v(u)==="False"&&i.push(r),r++}if(i.length===0)return n.True;if(i.length===1<<t.length)return n.False;let o=Au(i,t.length),s=_b(o,i,t.length);return s.length===0?n.True:s.length===1?mf(s[0],t,n):n._fn("And",s.map(a=>mf(a,t,n)))}function wu(e,n){let t=[],i=[];for(let s=0;s<e.length;s++)e[s]===-1&&i.push(s);let r=i.length,o=1<<r;for(let s=0;s<o;s++){let a=0;for(let u=0;u<n;u++){let l=i.indexOf(u),c;l!==-1?c=s>>r-1-l&1:c=e[u],a=a<<1|c}t.push(a)}return t}function _b(e,n,t){let i=new Set(n),r=[],o=new Map;for(let a of n)o.set(a,[]);for(let a=0;a<e.length;a++){let u=wu(e[a],t);for(let l of u)o.has(l)&&o.get(l).push(a)}let s=new Set;for(let[a,u]of o)if(u.length===1&&i.has(a)){let l=u[0];if(!s.has(l)){s.add(l),r.push(e[l]);let c=wu(e[l],t);for(let f of c)i.delete(f)}}for(;i.size>0;){let a=-1,u=0;for(let c=0;c<e.length;c++){if(s.has(c))continue;let p=wu(e[c],t).filter(d=>i.has(d)).length;p>u&&(u=p,a=c)}if(a===-1)break;s.add(a),r.push(e[a]);let l=wu(e[a],t);for(let c of l)i.delete(c)}return r}function F_(e){switch(e){case"NonNegativeIntegers":return{lower:0,upper:rr,isFinite:!1};case"PositiveIntegers":return{lower:1,upper:1+rr,isFinite:!1};default:return}}function Ru(e){e?.operator,m(e);let n=1,t=n+rr,i,r=!0,o=e,s=o.op1;i=_(s)?s.symbol:void 0,n=Math.floor(o.op2.re),isNaN(n)&&(n=1),Number.isFinite(n)||(r=!1);let a=o.op3;return(_(a)?a.symbol:void 0)==="Nothing"||a.isInfinity?r=!1:(isNaN(a.re)||(t=Math.floor(a.re??t)),Number.isFinite(t)||(r=!1)),!r&&Number.isFinite(n)&&(t=n+rr),{index:i,lower:n,upper:t,isFinite:r}}function q_(e){return e.map(n=>Ru(n))}function V_(e){e.length>0;let{index:n,lower:t,upper:i,isFinite:r}=e[0],o=r?i:t+rr,s=lf(t,o).map(a=>[a]);if(e.length===1)return s;for(let a=1;a<e.length;a++){let{index:u,lower:l,upper:c,isFinite:f}=e[a],p=f?c:l+rr;s=B_(s.map(d=>d[0]),lf(l,p))}return s}function B_(e,n){return e.flatMap(t=>n.map(i=>[t,i]))}function Nb(e,n){let t=n.engine,i=[];for(let r=0;r<e.length;r++){let o=e[r];if(o.operator==="Range"){let s=o;i.push(qi([t.Nothing,s.op1,s.op2],n)??t.error("missing"))}else if(o.operator&&["Limits","Tuple","Triple","Pair","Single","Hold"].includes(o.operator)){let s=o;i.push(qi(s.ops,n)??t.error("missing"))}else _(o)&&(E(e[r+1])?E(e[r+2])?(i.push(qi([o,e[r+1],e[r+2]],n)??t.error("missing")),r+=2):(i.push(qi([o,e[r+1]],n)??t.error("missing")),r+=1):i.push(qi([o],n)??t.error("missing")))}return i}function qi(e,{engine:n}){if(e.length===1){let t=e[0];return _(t)?n._fn("Limits",[t,n.Nothing,n.Nothing]):m(t,"Hold")?qi(t.ops,{engine:n}):n._fn("Limits",[n.typeError("symbol",void 0,t)])}else if(e.length>1){let t=n.Nothing,i=n.Nothing,r=e[1].canonical;return e.length===2?m(e[0],"Hold")?(t=e[0].op1,r=e[1].canonical):_(e[0])?(t=e[0],r=e[1].canonical):(t=n.Nothing,i=e[0].canonical,r=e[1].canonical):e.length===3&&(t=e[0]??n.Nothing,i=e[1]?.canonical??n.Nothing,r=e[2]?.canonical??n.Nothing),m(t,"Hold")&&(t=t.op1),_(t)||(t=n.typeError("symbol",t.type,t)),n._fn("Limits",[t,i,r])}return null}function J_(e){let n=e.engine,t,i=null,r=null;if(m(e,"Element")){let o=e.op1,s=e.op2,a=e.op3;return _(o)?(o.symbol!=="Nothing"&&n.declare(o.symbol,"integer"),a?n.function("Element",[o.canonical,s.canonical,a.canonical]):n.function("Element",[o.canonical,s.canonical])):void 0}if(m(e,"Limits")){let o=e.op1;_(o)&&o.symbol!=="Nothing"&&(n.context.lexicalScope.bindings.has(o.symbol)||n.declare(o.symbol,"integer"));let s=e.op1.canonical,a=e.op2?.canonical??n.Nothing,u=e.op3?.canonical??n.Nothing;return _(s)?n.function("Limits",[s,a,u]):n.function("Limits",[n.typeError("symbol",void 0,s)])}if(e.operator==="Tuple"||e.operator==="Triple"||e.operator==="Pair"||e.operator==="Single"){if(!m(e))return;t=e.op1,r=e.ops[1]?.canonical??null,i=e.ops[2]?.canonical??null}else t=e;if(m(t,"Hold")&&(t=t.op1),!!_(t))return t.symbol!=="Nothing"&&!n.context.lexicalScope.bindings.has(t.symbol)&&n.declare(t.symbol,"integer"),i&&r?n.function("Limits",[t,r,i]):i?n.function("Limits",[t,n.One,i]):r?n.function("Limits",[t,r]):n.function("Limits",[t])}function df(e,n,t,i){let r=n.engine,o=i??{parent:r.context.lexicalScope,bindings:new Map};o.noAutoDeclare=!0,r.pushScope(o);let s;try{s=t.map(a=>J_(a)??r.error("missing")),n=n?.canonical??r.error("missing")}finally{r.popScope(),o.noAutoDeclare=!1}return n.isCollection?e==="Sum"?r.box(["Reduce",n,"Add",0]):r.box(["Reduce",n,"Multiply",1]):r._fn(e,[n,...s],{scope:o})}var vo=Symbol("non-enumerable-domain");function*ws(e,n,t,i){if(e.isCollection)return yield*uf(e.evaluate(),t,i);if(n.length===0)return t(i,e)??void 0;let r=e.engine;if(n.filter(l=>l.operator==="Element").length>0){let l=z_(e,n,t,i,!0),c=l.next();for(;!c.done;){let p=c.value;p!==void 0&&typeof p!="object"&&(yield p),c=l.next()}let f=c.value;if(f&&typeof f=="object"&&"status"in f){let p=f;return p.status==="success"?p.value:p.status==="non-enumerable"?vo:void 0}return f}let s=q_(n),a=V_(s),u=i;for(let l of a)if(s.forEach((c,f)=>r.assign(c.index,l[f])),u=t(u,e)??void 0,yield u,u===void 0)break;return u??void 0}function*z_(e,n,t,i,r=!1){let o=e.engine,s=[],a=[];for(let f of n)if(f.operator==="Element"){let p=Tr(f,o);if(p.status==="error")return r?{status:"error",reason:p.reason}:void 0;if(p.status==="non-enumerable"){if(p.reason==="infinite-domain"&&p.domain&&_(p.domain)){let d=F_(p.domain.symbol);if(d){a.push({index:p.variable,...d});continue}}return r?{status:"non-enumerable",reason:p.reason,domain:p.domain}:void 0}s.push({variable:p.variable,values:p.values})}else a.push(Ru(f));if(a.length>0)for(let f of a){let p=[];for(let d=f.lower;d<=f.upper;d++)p.push(o.number(d));s.push({variable:f.index,values:p})}let u=s.map(()=>0),l=s.map(f=>f.values.length);if(l.some(f=>f===0))return r?{status:"success",value:i}:i;let c=i;for(;;){for(let p=0;p<s.length;p++)o.assign(s[p].variable,s[p].values[u[p]]);if(c=t(c,e)??void 0,yield c,c===void 0)break;let f=s.length-1;for(;f>=0&&(u[f]++,!(u[f]<l[f]));)u[f]=0,f--;if(f<0)break}return r?{status:"success",value:c}:c??void 0}function Ue(e){return e.every(n=>n.type.matches("real"))?"finite_real":"finite_number"}var Pu={Q:1e30,R:1e27,Y:1e24,Z:1e21,E:1e18,P:1e15,T:1e12,G:1e9,M:1e6,k:1e3,h:100,da:10,d:.1,c:.01,m:.001,\u00B5:1e-6,\u03BC:1e-6,n:1e-9,p:1e-12,f:1e-15,a:1e-18,z:1e-21,y:1e-24,r:1e-27,q:1e-30},Sb=new Set(["m","g","s","A","K","mol","cd","Hz","N","Pa","J","W","C","V","F","ohm","S","Wb","T","H","lm","lx","Bq","Gy","Sv","kat","eV","L","bar"]),Du={m:{dimension:[1,0,0,0,0,0,0],scale:1},kg:{dimension:[0,1,0,0,0,0,0],scale:1},g:{dimension:[0,1,0,0,0,0,0],scale:.001},s:{dimension:[0,0,1,0,0,0,0],scale:1},A:{dimension:[0,0,0,1,0,0,0],scale:1},K:{dimension:[0,0,0,0,1,0,0],scale:1},mol:{dimension:[0,0,0,0,0,1,0],scale:1},cd:{dimension:[0,0,0,0,0,0,1],scale:1},Hz:{dimension:[0,0,-1,0,0,0,0],scale:1},N:{dimension:[1,1,-2,0,0,0,0],scale:1},Pa:{dimension:[-1,1,-2,0,0,0,0],scale:1},J:{dimension:[2,1,-2,0,0,0,0],scale:1},W:{dimension:[2,1,-3,0,0,0,0],scale:1},C:{dimension:[0,0,1,1,0,0,0],scale:1},V:{dimension:[2,1,-3,-1,0,0,0],scale:1},F:{dimension:[-2,-1,4,2,0,0,0],scale:1},ohm:{dimension:[2,1,-3,-2,0,0,0],scale:1},S:{dimension:[-2,-1,3,2,0,0,0],scale:1},Wb:{dimension:[2,1,-2,-1,0,0,0],scale:1},T:{dimension:[0,1,-2,-1,0,0,0],scale:1},H:{dimension:[2,1,-2,-2,0,0,0],scale:1},lm:{dimension:[0,0,0,0,0,0,1],scale:1},lx:{dimension:[-2,0,0,0,0,0,1],scale:1},Bq:{dimension:[0,0,-1,0,0,0,0],scale:1},Gy:{dimension:[2,0,-2,0,0,0,0],scale:1},Sv:{dimension:[2,0,-2,0,0,0,0],scale:1},kat:{dimension:[0,0,-1,0,0,1,0],scale:1},degC:{dimension:[0,0,0,0,1,0,0],scale:1,offset:273.15},degF:{dimension:[0,0,0,0,1,0,0],scale:5/9,offset:459.67},min:{dimension:[0,0,1,0,0,0,0],scale:60},h:{dimension:[0,0,1,0,0,0,0],scale:3600},d:{dimension:[0,0,1,0,0,0,0],scale:86400},ha:{dimension:[2,0,0,0,0,0,0],scale:1e4},L:{dimension:[3,0,0,0,0,0,0],scale:.001},t:{dimension:[0,1,0,0,0,0,0],scale:1e3},eV:{dimension:[2,1,-2,0,0,0,0],scale:1602176634e-28},Da:{dimension:[0,1,0,0,0,0,0],scale:16605390666e-37},au:{dimension:[1,0,0,0,0,0,0],scale:149597870700},deg:{dimension:[0,0,0,0,0,0,0],scale:Math.PI/180},rad:{dimension:[0,0,0,0,0,0,0],scale:1},grad:{dimension:[0,0,0,0,0,0,0],scale:Math.PI/200},turn:{dimension:[0,0,0,0,0,0,0],scale:2*Math.PI},arcmin:{dimension:[0,0,0,0,0,0,0],scale:Math.PI/10800},arcsec:{dimension:[0,0,0,0,0,0,0],scale:Math.PI/648e3},percent:{dimension:[0,0,0,0,0,0,0],scale:.01},ppm:{dimension:[0,0,0,0,0,0,0],scale:1e-6},dB:{dimension:[0,0,0,0,0,0,0],scale:1},Np:{dimension:[0,0,0,0,0,0,0],scale:1},in:{dimension:[1,0,0,0,0,0,0],scale:.0254},ft:{dimension:[1,0,0,0,0,0,0],scale:.3048},mi:{dimension:[1,0,0,0,0,0,0],scale:1609.344},lb:{dimension:[0,1,0,0,0,0,0],scale:.45359237},oz:{dimension:[0,1,0,0,0,0,0],scale:.028349523125},gal:{dimension:[3,0,0,0,0,0,0],scale:.003785411784},atm:{dimension:[-1,1,-2,0,0,0,0],scale:101325},bar:{dimension:[-1,1,-2,0,0,0,0],scale:1e5},cal:{dimension:[2,1,-2,0,0,0,0],scale:4.184},kWh:{dimension:[2,1,-2,0,0,0,0],scale:36e5},\u00C5:{dimension:[1,0,0,0,0,0,0],scale:1e-10}};function ci(e,n){return e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]&&e[3]===n[3]&&e[4]===n[4]&&e[5]===n[5]&&e[6]===n[6]}function gf(e){return e[0]===0&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===0&&e[6]===0}function U_(e){if(e.length>2){let n=e.slice(0,2),t=e.slice(2);if(Pu[n]!==void 0&&Sb.has(t)){let i=Du[t];if(i)return{prefixScale:Pu[n],baseEntry:i}}}if(e.length>1){let n=e.slice(0,1),t=e.slice(1);if(Pu[n]!==void 0&&Sb.has(t)){let i=Du[t];if(i)return{prefixScale:Pu[n],baseEntry:i}}}return null}function $u(e){let n=Du[e];if(n)return n;let t=U_(e);return t?{dimension:t.baseEntry.dimension,scale:t.prefixScale*t.baseEntry.scale}:null}function ks(e){let n=$u(e);return n?n.dimension:null}function Ou(e){let n=$u(e);return n?n.scale:null}var j_=new Map(["N","J","W","Pa","Hz","C","V","F","ohm","S","Wb","T","H","lm","lx","Gy","kat"].map(e=>[Du[e].dimension.join(","),e]));function Cs(e){return j_.get(e.join(","))??null}function _o(e,n,t){let i=$u(n),r=$u(t);if(!i||!r||!ci(i.dimension,r.dimension))return null;let o=i.offset??0,s=r.offset??0;return(e+o)*i.scale/r.scale-s}function un(e){if(typeof e=="string")return ks(e);if(!Array.isArray(e)||e.length<2)return null;let n=e[0];if(n==="Multiply"){let t=[0,0,0,0,0,0,0];for(let i=1;i<e.length;i++){let r=un(e[i]);if(!r)return null;for(let o=0;o<7;o++)t[o]+=r[o]}return t}if(n==="Divide"){if(e.length!==3)return null;let t=un(e[1]),i=un(e[2]);return!t||!i?null:t.map((r,o)=>r-i[o])}if(n==="Power"){if(e.length!==3)return null;let t=un(e[1]),i=e[2];return!t||typeof i!="number"?null:t.map(r=>r*i)}return null}function fn(e){if(typeof e=="string")return Ou(e);if(!Array.isArray(e)||e.length<2)return null;let n=e[0];if(n==="Multiply"){let t=1;for(let i=1;i<e.length;i++){let r=fn(e[i]);if(r===null)return null;t*=r}return t}if(n==="Divide"){if(e.length!==3)return null;let t=fn(e[1]),i=fn(e[2]);return t===null||i===null||i===0?null:t/i}if(n==="Power"){if(e.length!==3)return null;let t=fn(e[1]),i=e[2];return t===null||typeof i!="number"?null:Math.pow(t,i)}return null}function G_(e){let n=e.indexOf("^");if(n===-1)return e;let t=e.slice(0,n),i=e.slice(n+1),r=parseInt(i,10);return isNaN(r)?e:["Power",t,r]}function Ms(e){if(e=e.trim(),e.length===0)return null;if(e[0]==="("&&e[e.length-1]===")"){let r=0,o=!0;for(let s=0;s<e.length-1;s++)if(e[s]==="("?r++:e[s]===")"&&r--,r===0&&s<e.length-1){o=!1;break}if(o)return Ms(e.slice(1,-1))}let n=-1,t=[],i=0;for(let r=0;r<e.length;r++)e[r]==="("?i++:e[r]===")"?i--:i===0&&(e[r]==="/"&&n===-1?n=r:e[r]==="*"&&t.push(r));if(n!==-1){let r=e.slice(0,n).trim(),o=e.slice(n+1).trim(),s=Ms(r),a=Ms(o);return!s||!a?null:["Divide",s,a]}if(t.length>0){let r=[],o=0;for(let a of t)r.push(e.slice(o,a).trim()),o=a+1;r.push(e.slice(o).trim());let s=r.filter(a=>a.length>0).map(a=>Ms(a));return s.some(a=>a===null)?null:s.length===1?s[0]:["Multiply",...s]}return e[0]==="("?null:G_(e)}function As(e){return e=e.trim(),e.length===0?null:/[/*^()]/.test(e)?Ms(e):e}function Rs(e,n,t){if(typeof n=="string"&&typeof t=="string")return _o(e,n,t);let i=un(n),r=un(t);if(!i||!r||!ci(i,r))return null;let o=fn(n),s=fn(t);return o===null||s===null||s===0?null:e*o/s}function pn(e){if(!e)return null;if(_(e))return e.symbol;if(!m(e))return null;let n=e.operator;if(n==="Multiply"){let t=[];for(let i of e.ops){let r=pn(i);if(!r)return null;t.push(r)}return["Multiply",...t]}if(n==="Divide"){let t=pn(e.op1),i=pn(e.op2);return!t||!i?null:["Divide",t,i]}if(n==="Power"){let t=pn(e.op1),i=e.op2?.re;return!t||i===void 0?null:["Power",t,i]}return null}var Tb={__unit__:{signature:"(value) -> value",canonical:(e,{engine:n})=>e.length===1?e[0].canonical:n.error("incompatible-type")},Quantity:{description:"A value paired with a physical unit",wikidata:"Q309314",complexity:1200,lazy:!0,signature:"(value, value) -> value",canonical:(e,{engine:n})=>{if(e.length!==2)return n.error("incompatible-type");let t=e[0].canonical,i=e[1];if(q(i)&&/[/*^()]/.test(i.string)){let r=As(i.string);if(r!==null&&typeof r!="string"){let o=n.box(r);return n._fn("Quantity",[t,o])}}return n._fn("Quantity",[t,i.canonical])},evaluate:(e,{numericApproximation:n,engine:t})=>{let i=n?e[0].N():e[0].evaluate();return t._fn("Quantity",[i,e[1]])}},QuantityMagnitude:{description:"Extract the numeric value from a quantity",complexity:1200,signature:"(value) -> value",evaluate:e=>{let n=e[0];if(m(n,"Quantity"))return n.op1}},QuantityUnit:{description:"Extract the unit from a quantity",complexity:1200,signature:"(value) -> value",evaluate:e=>{let n=e[0];if(m(n,"Quantity"))return n.op2}},UnitConvert:{description:"Convert a quantity to a different compatible unit",complexity:1200,lazy:!0,signature:"(value, value) -> value",canonical:(e,{engine:n})=>e.length!==2?n.error("incompatible-type"):n._fn("UnitConvert",[e[0].canonical,e[1].canonical]),evaluate:(e,{engine:n})=>{if(!n)return;let t=e[0]?.evaluate(),i=e[1];if(!t||!m(t)||t.operator!=="Quantity")return;let r=t.op1.re;if(r===void 0)return;let o=t.op2,s=_(o)?o.symbol:null,a=_(i)?i.symbol:null;if(s&&a){let f=_o(r,s,a);return f!==null?n._fn("Quantity",[n.number(f),n.symbol(a)]):n.error("incompatible-type")}let u=pn(o),l=pn(i);if(!u||!l)return;let c=Rs(r,u,l);return c===null?n.error("incompatible-type"):n._fn("Quantity",[n.number(c),i])}},UnitSimplify:{description:"Simplify a quantity unit to a named derived unit if possible",complexity:1200,signature:"(value) -> value",evaluate:(e,{engine:n})=>{let t=e[0]?.evaluate();if(!m(t,"Quantity"))return t;let i=t.op1.re,r=t.op2,o=pn(r);if(!o)return t;let s=un(o);if(!s)return t;let a=Cs(s);if(!a)return t;let u=fn(o);return u===null?t:n._fn("Quantity",[n.number(i*u),n.symbol(a)])}},IsCompatibleUnit:{description:"Check if two units have the same dimension",complexity:1200,lazy:!0,signature:"(value, value) -> value",canonical:(e,{engine:n})=>e.length!==2?n.error("incompatible-type"):n._fn("IsCompatibleUnit",e),evaluate:(e,{engine:n})=>{let t=pn(e[0]),i=pn(e[1]);if(!t||!i)return;let r=un(t),o=un(i);if(!(!r||!o))return n.symbol(ci(r,o)?"True":"False")}},UnitDimension:{description:"Return the dimension vector of a unit",complexity:1200,lazy:!0,signature:"(value) -> value",canonical:(e,{engine:n})=>e.length!==1?n.error("incompatible-type"):n._fn("UnitDimension",e),evaluate:(e,{engine:n})=>{let t=pn(e[0]);if(!t)return;let i=un(t);if(i)return n._fn("List",i.map(r=>n.number(r)))}}};function qt(e){return m(e,"Quantity")}function Ib(e){let n=e.op2;return _(n)?n.symbol:null}function wb(e,n){if(n.length===0)return;let t=[],i=[];for(let c of n){if(!qt(c))return;let f=pn(c.op2);if(!f)return;t.push(c),i.push(f)}if(t.length===0)return;let r=0,o=0;for(let c=0;c<t.length;c++){let f=fn(i[c]);if(f===null)return;f>o&&(o=f,r=c)}let s=t[r],a=Ib(s),u=i[r],l=0;for(let c=0;c<t.length;c++){let f=t[c],p=f.op1.re;if(p===void 0)return;let d=Ib(f);if(a&&d){if(d===a)l+=p;else{let b=_o(p,d,a);if(b===null)return;l+=b}continue}let g=i[c];if(!g||!u)return;let h=Rs(p,g,u);if(h===null)return;l+=h}return e._fn("Quantity",[e.number(l),s.op2])}function Mb(e,n){let t=[],i=[];for(let u of n)qt(u)?i.push(u):t.push(u);if(i.length===0)return;let r=1;for(let u of t){let l=u.re;if(l===void 0)return;r*=l}if(i.length===1){let u=i[0],l=u.op1.re;return l===void 0?void 0:e._fn("Quantity",[e.number(r*l),u.op2])}let o=r,s=[];for(let u of i){let l=u.op1.re;if(l===void 0)return;o*=l,s.push(u.op2)}let a=s.length===1?s[0]:e._fn("Multiply",s);return Cb(e,o,a)}function kb(e,n,t){let i=qt(n)?n:null,r=qt(t)?t:null;if(i&&r){let o=i.op1.re,s=r.op1.re;if(o===void 0||s===void 0||s===0)return;let a=o/s,u=pn(i.op2),l=pn(r.op2);if(u&&l){let f=un(u),p=un(l);if(f&&p&&ci(f,p)){let d=fn(u),g=fn(l);if(d!==null&&g!==null)return e.number(o*d/(s*g))}}let c=e._fn("Divide",[i.op2,r.op2]);return Cb(e,a,c)}if(i&&!r){let o=i.op1.re,s=t.re;return o===void 0||s===void 0||s===0?void 0:e._fn("Quantity",[e.number(o/s),i.op2])}if(!i&&r){let o=n.re,s=r.op1.re;if(o===void 0||s===void 0||s===0)return;let a=e._fn("Power",[r.op2,e.number(-1)]);return e._fn("Quantity",[e.number(o/s),a])}}function Cb(e,n,t){let i=pn(t);if(i){let r=un(i);if(r){if(gf(r)){let s=fn(i);if(s!==null)return e.number(n*s)}let o=Cs(r);if(o){let s=fn(i);if(s!==null)return e._fn("Quantity",[e.number(n*s),e.symbol(o)])}}}return e._fn("Quantity",[e.number(n),t])}function Lu(e,n,t){if(!qt(n))return;let i=n.op1.re,r=t.re;if(i===void 0||r===void 0)return;let o=n.op2,s;if(m(o,"Power")){let a=o.op2?.re;if(a!==void 0){let u=a*r;s=u===1?o.op1:e._fn("Power",[o.op1,e.number(u)])}else s=e._fn("Power",[o,t])}else s=r===1?o:e._fn("Power",[o,t]);return e._fn("Quantity",[e.number(Math.pow(i,r)),s])}function hf(e){if(e!==void 0)return isNaN(e)?"unsigned":e>0?"positive":e<0?"negative":"zero"}function bf(e){return e==="positive"?"negative":e==="non-negative"?"non-positive":e==="negative"?"positive":e==="non-positive"?"non-negative":e}function Vi(e){if(e.isGreater(1))return"positive";if(e.isGreaterEqual(1))return"non-negative";if(e.isLessEqual(1)&&e.isGreaterEqual(0))return"non-positive";if(e.isLess(1)&&e.isGreaterEqual(0))return"negative";if(e.isSame(1))return"zero";if(e.isNegative||e.isReal===!1)return"unsigned"}var Rb=[{Abs:{description:"Absolute value (magnitude) of a number.",wikidata:"Q3317982",broadcastable:!0,idempotent:!0,complexity:1200,signature:"(number) -> number",type:([e])=>e.type,sgn:([e])=>e.isSame(0)?"zero":E(e)?"positive":"non-negative",evaluate:([e])=>Z_(e)},Add:{description:"Sum of two or more values.",wikidata:"Q32043",associative:!0,commutative:!0,commutativeOrder:xr,broadcastable:!0,idempotent:!0,complexity:1300,lazy:!0,signature:"(value+) -> value",type:Qh,sgn:e=>{if(e.some(n=>n.isNaN))return"unsigned";if(e.every(n=>n.isSame(0)))return"zero";if(e.every(n=>n.isNonNegative))return e.some(n=>n.isPositive)?"positive":"non-negative";if(e.every(n=>n.isNonPositive))return e.some(n=>n.isNegative)?"negative":"non-positive"},evaluate:(e,{numericApproximation:n,engine:t})=>{let i=e.map(r=>r.evaluate());return i.some(r=>r.operator==="Quantity")?wb(t,i):n?Xh(...e):fe(...i)}},Ceil:{description:"Rounds a number up to the next largest integer",complexity:1250,broadcastable:!0,signature:"(number) -> integer",type:([e])=>e.isFinite!==!1?"finite_integer":"integer",sgn:([e])=>{if(e.isLessEqual(-1))return"negative";if(e.isPositive)return"positive";if(e.isNonNegative)return"non-negative";if(e.isNonPositive&&e.isGreater(-1))return"zero";if(e.isNonPositive)return"non-positive";if(e.isReal==!1&&E(e))return e.im>0||e.im<=-1?"unsigned":hf(e.re)},evaluate:([e])=>ve(e,Math.ceil,n=>n.ceil(),n=>n.ceil(0))},Chop:{description:"Replace tiny numeric values with zero.",associative:!0,broadcastable:!0,idempotent:!0,complexity:1200,signature:"(number) -> number",type:([e])=>e.type,evaluate:e=>{let n=e[0],t=n.engine;return ve(n,i=>t.chop(i),i=>t.chop(i),i=>t.complex(t.chop(i.re),t.chop(i.im)))}},Divide:{description:"Quotient of a numerator and one or more denominators.",wikidata:"Q1226939",complexity:2500,broadcastable:!0,signature:"(number, number+) -> number",type:([e,n])=>n.isSame(1)?e.type:n.isNaN||e.isNaN?"number":n.isFinite===!1||e.isFinite===!1?"non_finite_number":n.isInteger&&e.isInteger?"finite_rational":n.isReal&&e.isReal?"finite_real":"finite_number",sgn:e=>{let[n,t]=[e[0],e[1]];if(t.isSame(0))return"unsigned";if(t.isPositive)return n.sgn;if(t.isNegative)return bf(n.sgn);let i=t.sgn;if(n.isSame(0)&&i==="not-zero"||n.isFinite&&t.isInfinity)return"zero";if(n.sgn==="not-zero"&&i==="not-zero")return"not-zero"},canonical:(e,{engine:n})=>{let t=n;e=In(t,e);let i=e[0];if(i===void 0)return t.error("missing");if(e.length<2)return i;let r=e.slice(1);for(let o of r)i=_t(i,o);return i},evaluate:([e,n],{numericApproximation:t,engine:i})=>{let r=e.evaluate(),o=n.evaluate();if(r.operator==="Quantity"||o.operator==="Quantity")return kb(i,r,o);let s=e.div(n);return t&&s.operator!=="Divide"?s.N():s}},Exp:{description:"Natural exponential function: e^x.",wikidata:"Q168698",broadcastable:!0,complexity:3500,signature:"(number) -> number",canonical:(e,{engine:n})=>(e=In(n,e,1),n.function("Power",[n.E,...e]))},Exp2:{description:"Base-2 exponential: 2^x",complexity:3500,broadcastable:!0,signature:"(number) -> number",canonical:(e,{engine:n})=>(e=In(n,e,1),n.function("Power",[n.number(2),...e]))},Factorial:{description:"Factorial function: the product of all positive integers less than or equal to n",wikidata:"Q120976",broadcastable:!0,complexity:9e3,signature:"(integer) -> integer",type:()=>"finite_integer",sgn:([e])=>e.isNonNegative?"positive":e.isNegative||e.isReal===!1?"unsigned":void 0,canonical:(e,{engine:n})=>{let t=e[0];return E(t)&&t.isNegative?n._fn("Factorial",[t.neg()]).neg():n._fn("Factorial",[t])},evaluate:([e])=>{let n=e.engine;if(E(e)){if(e.im!==0&&e.im!==void 0)return n.number(n.complex(e.re,e.im).add(1));if(e.isFinite){if(e.isNegative)return n.number(De(1+e.re));try{return n.number(Dt(ja(BigInt((e.bignumRe??e.re).toFixed())),n._timeRemaining))}catch(t){if(t instanceof vn)throw t;return}}}},evaluateAsync:async([e],{signal:n})=>{let t=e.engine;if(E(e)){if(e.im!==0&&e.im!==void 0)return t.number(t.complex(e.re,e.im).add(1));if(e.isFinite){if(e.isNegative)return t.number(De(1+e.re));try{return t.number(await co(ja(BigInt((e.bignumRe??e.re).toFixed())),(t._deadline??1/0)-Date.now(),n))}catch(i){if(i instanceof vn)throw i;return}}}}},Factorial2:{description:"Double Factorial Function",complexity:9e3,broadcastable:!0,signature:"(integer) -> integer",type:()=>"finite_integer",sgn:([e])=>e.isNonNegative?"positive":e.isNegative||e.isReal===!1?"unsigned":void 0,evaluate:e=>{let n=e[0],t=ie(n);if(t===null)return;let i=n.engine;return Je(i)?i.number(Dt(qh(i,i.bignum(t)),i._timeRemaining)):i.number(or(t))}},Floor:{description:"Rounds a number down to the nearest integer.",wikidata:"Q56860783",complexity:1250,broadcastable:!0,signature:"(number) -> integer",type:([e])=>e.isFinite!==!1?"finite_integer":"integer",sgn:([e])=>{if(e.isNegative)return"negative";if(e.isGreaterEqual(1))return"positive";if(e.isNonNegative&&e.isLess(1))return"zero";if(e.isNonNegative)return"non-negative";if(e.isReal==!1&&E(e))return e.im<0||e.im>=1?"unsigned":hf(e.re)},evaluate:([e])=>ve(e,Math.floor,n=>n.floor(),n=>n.floor(0))},Fract:{description:"Fractional part of a number: x - floor(x)",complexity:1250,broadcastable:!0,signature:"(number) -> number",type:([e])=>Ue([e]),sgn:([e])=>{if(e.isNonNegative)return"non-negative"},evaluate:([e])=>ve(e,n=>n-Math.floor(n),n=>n.sub(n.floor()),n=>n.sub(n.floor(0)))},Gamma:{description:"Gamma function, extending factorial to complex numbers.",wikidata:"Q190573",complexity:8e3,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),sgn:([e])=>e.isPositive?"positive":e.isSame(0)?"zero":void 0,evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,i=>De(i),i=>vr(t,i),i=>i):void 0},GammaLn:{description:"Natural logarithm of the gamma function.",complexity:8e3,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:(e,{numericApproximation:n,engine:t})=>n?ve(e[0],i=>Wn(i),i=>nf(t,i),i=>i):void 0},Digamma:{description:"Digamma function, the logarithmic derivative of the gamma function",wikidata:"Q1142755",complexity:8200,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,bo,i=>uu(t,i)):void 0},Trigamma:{description:"Trigamma function, the derivative of the digamma function",wikidata:"Q2371722",complexity:8400,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,yo,i=>lu(t,i)):void 0},PolyGamma:{description:"Polygamma function, the n-th derivative of the digamma function",wikidata:"Q1817679",complexity:8500,broadcastable:!0,signature:"(order: integer, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t,engine:i})=>t?gn(e,n,(r,o)=>Es(r,o),(r,o)=>Bh(i,r,o)):void 0},Zeta:{description:"Riemann zeta function",wikidata:"Q187235",complexity:8500,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,vs,i=>tf(t,i)):void 0},Beta:{description:"Euler beta function",wikidata:"Q189062",complexity:8200,broadcastable:!0,signature:"(number, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t,engine:i})=>t?gn(e,n,cu,(r,o)=>Jh(i,r,o)):void 0},LambertW:{description:"Lambert W function (product logarithm)",wikidata:"Q429963",complexity:8300,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,fu,i=>zh(t,i)):void 0},BesselJ:{description:"Bessel function of the first kind",wikidata:"Q627488",complexity:8500,broadcastable:!0,signature:"(order: number, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t})=>t?gn(e,n,Lt):void 0},BesselY:{description:"Bessel function of the second kind (Neumann function)",wikidata:"Q627488",complexity:8500,broadcastable:!0,signature:"(order: number, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t})=>t?gn(e,n,ho):void 0},BesselI:{description:"Modified Bessel function of the first kind",wikidata:"Q627488",complexity:8500,broadcastable:!0,signature:"(order: number, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t})=>t?gn(e,n,si):void 0},BesselK:{description:"Modified Bessel function of the second kind (Macdonald function)",wikidata:"Q627488",complexity:8500,broadcastable:!0,signature:"(order: number, number) -> number",type:e=>Ue(e),evaluate:([e,n],{numericApproximation:t})=>t?gn(e,n,pu):void 0},AiryAi:{description:"Airy function of the first kind",wikidata:"Q403629",complexity:8400,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n})=>n?ve(e,mu):void 0},AiryBi:{description:"Airy function of the second kind",wikidata:"Q403629",complexity:8400,broadcastable:!0,signature:"(number) -> number",type:e=>Ue(e),evaluate:([e],{numericApproximation:n})=>n?ve(e,du):void 0},Ln:{description:"Natural Logarithm",wikidata:"Q204037",complexity:4e3,broadcastable:!0,signature:"(number, base: number?) -> number",type:([e])=>Ue([e]),sgn:([e])=>Vi(e),evaluate:([e],{numericApproximation:n,engine:t})=>n?ve(e,i=>i===0?-1/0:i>=0?Math.log(i):t.complex(i).log(),i=>i.isZero()?-1/0:i.isNeg()?t.complex(i.toNumber()).log():i.ln(),i=>i.isZero()?NaN:i.log()):e.ln()},Log:{description:"Log(z, b = 10) = Logarithm of base b",wikidata:"Q11197",complexity:4100,broadcastable:!0,signature:"(number, base: number?) -> number",type:([e])=>Ue([e]),sgn:([e,n])=>{if(!n)return Vi(e);if(n.isSame(1)||n.isReal==!1)return"unsigned";if(n.isGreater(1))return Vi(e);if(n.isLess(1))return bf(Vi(e))},evaluate:(e,{numericApproximation:n,engine:t})=>{if(!n)return e[0]?.ln(e[1]??10)??void 0;let i=t;return e[1]===void 0?ve(e[0],r=>r===0?-1/0:r>=0?Math.log10(r):i.complex(r).log().div(Math.LN10),r=>r.isZero()?-1/0:r.isNeg()?i.complex(r.toNumber()).log().div(Math.LN10):K.log10(r),r=>r.isZero()?NaN:r.log().div(Math.LN10)):gn(e[0],e[1],(r,o)=>Math.log(r)/Math.log(o),(r,o)=>r.log(o),(r,o)=>r.log().div(typeof o=="number"?Math.log(o):o.log()))}},Lb:{description:"Base-2 Logarithm",wikidata:"Q581168",complexity:4100,broadcastable:!0,signature:"(number) -> number",sgn:([e])=>Vi(e),canonical:([e],{engine:n})=>n._fn("Log",[e,n.number(2)])},Lg:{description:"Base-10 Logarithm",wikidata:"Q966582",complexity:4100,broadcastable:!0,signature:"(number) -> number",sgn:([e])=>Vi(e),canonical:([e],{engine:n})=>n._fn("Log",[e])},Log10:{description:"Base-10 Logarithm",complexity:4100,broadcastable:!0,signature:"(number) -> number",sgn:([e])=>Vi(e),canonical:([e],{engine:n})=>n._fn("Log",[e])},Log2:{description:"Base-2 Logarithm",complexity:4100,broadcastable:!0,signature:"(number) -> number",sgn:([e])=>Vi(e),canonical:([e],{engine:n})=>n._fn("Log",[e,n.number(2)])},Mod:{description:"Modulo",wikidata:"Q1799665",complexity:2500,broadcastable:!0,signature:"(number, number) -> number",type:([e,n])=>Se(e.type.type,n.type.type),sgn:e=>{let n=e[1];if(!(n===void 0||n.isReal==!1)){if(n.isSame(0))return"unsigned";if(E(e[0])&&E(n))return gn(e[0],n,(i,r)=>(i%r+r)%r,(i,r)=>i.modulo(r))?.sgn??void 0}},evaluate:([e,n])=>gn(e,n,(t,i)=>(t%i+i)%i,(t,i)=>t.modulo(i))},Multiply:{description:"Product of two or more values.",wikidata:"Q40276",associative:!0,commutative:!0,idempotent:!0,complexity:2100,broadcastable:!0,lazy:!0,signature:"(number*) -> number",type:e=>e.length===0?"finite_integer":e.length===1?e[0].type:e.some(n=>n.isNaN)?"number":e.some(n=>n.isFinite===!1)?"non_finite_number":e.every(n=>n.isInteger)?"finite_integer":e.every(n=>n.isReal)?"finite_real":e.every(n=>n.isRational)?"finite_rational":"finite_number",sgn:e=>{if(!e.some(n=>n.sgn===void 0||n.isReal===!1)){if(e.some(n=>n.isSame(0)))return e.every(n=>n.isFinite)?"zero":e.some(n=>n.isFinite===!1)?"unsigned":void 0;if(!(e.some(n=>n.isFinite===!1||n.isFinite===void 0)&&e.some(n=>{let t=n.sgn;return t!=="positive"&&t!=="negative"&&t!=="not-zero"}))){if(e.every(n=>n.isPositive||n.isNegative)){let n=0;return e.forEach(t=>{t.isNegative&&n++}),n%2===0?"positive":"negative"}if(e.every(n=>n.isNonPositive||n.isNonNegative)){let n=0;return e.forEach(t=>{t.isNonPositive&&n++}),n%2===0?"non-positive":"non-negative"}if(e.every(n=>n.sgn==="not-zero"||n.sgn==="positive"||n.sgn==="negative"))return"not-zero"}}},evaluate:(e,{numericApproximation:n,engine:t})=>{let i=e.map(r=>r.evaluate());return i.some(r=>r.operator==="Quantity")?Mb(t,i):n?tb(...e):ke(...i)}},Negate:{description:"Additive Inverse",wikidata:"Q715358",complexity:2e3,broadcastable:!0,signature:"(value) -> value",type:([e])=>e.type,sgn:([e])=>bf(e.sgn),canonical:(e,{engine:n})=>(e=In(n,e),e.length===0?n.error("missing"):e[0].neg()),evaluate:([e],{engine:n})=>{let t=e.evaluate();if(qt(t)){let i=t.op1.re;if(i!==void 0)return n._fn("Quantity",[n.number(-i),t.op2])}return e.neg()}},PlusMinus:{description:"Plus or Minus",wikidata:"Q120812",complexity:1200,signature:"(value, value) -> tuple",canonical:(e,{engine:n})=>(e=In(n,e,2),e.length===0?n.error("missing"):n._fn("PlusMinus",[e[0],e[1].abs()])),type:([e,n])=>Q(`tuple<${e.type}, ${n.type}>`),evaluate:([e,n],{engine:t})=>t.tuple(e.add(n.neg()),e.add(n))},Power:{description:"Exponentiation: raise a base to a power.",wikidata:"Q33456",broadcastable:!0,complexity:3500,signature:"(number, number) -> number",type:([e,n])=>e.isNaN||n.isNaN?"number":n.isFinite?e.isInteger&&n.isInteger?"finite_integer":e.isRational&&n.isInteger?"finite_rational":e.isReal&&n.isReal?"finite_real":"finite_number":"non_finite_number",canonical:(e,{engine:n})=>{if(e=In(n,e,2),e.length!==2)return n._fn("Power",e);let[t,i]=e;return oi(t,i)},sgn:([e,n])=>{let t=e.sgn,i=n.sgn;if(!(e.isReal===!1||n.isReal===!1||e.isNaN||n.isNaN||t===void 0||i===void 0)){if(e.isSame(0))return n.isNonPositive?"unsigned":n.isPositive?"zero":void 0;if(e.isSame(0)&&n.isSame(0))return"unsigned";if(e.isNonNegative||n.numerator.isOdd&&n.denominator.isOdd)return e.sgn;if(n.numerator.isEven&&n.denominator.isOdd){if(e.isReal){let r=e.sgn;return r==="positive"||r==="not-zero"||r==="negative"?"positive":"non-negative"}return e.type.matches("complex")?"negative":e.isSame(0)?void 0:"not-zero"}if(n.isRational===!1||n.numerator.isOdd&&n.denominator.isEven&&e.isNonPositive)return"unsigned"}},evaluate:([e,n],{numericApproximation:t,engine:i})=>{let r=e.evaluate();return r.operator==="Quantity"?Lu(i,r,n.evaluate()):We(e,n,{numericApproximation:t??!1})}},Rational:{description:"Construct a rational number from a numerator and denominator.",complexity:2400,signature:"(number, integer?) -> rational",sgn:([e])=>e.sgn,canonical:(e,{engine:n})=>{let t=n;return e=be(e),e.length===0?t._fn("Rational",[t.error("missing")]):e.length===1?t._fn("Rational",[sn(t,e[0],"real")]):(e=hs(t,e,["integer","integer"]),e.length!==2||!e[0].isValid||!e[1].isValid?t._fn("Rational",e):e[0].div(e[1]))},evaluate:(e,{numericApproximation:n,engine:t})=>{let i=t;if(e.length===1){let s=e[0].N();return!E(s)||s.im!==0?void 0:i.number(fh(s.re))}if(n)return gn(e[0],e[1],(s,a)=>s/a,(s,a)=>s.div(a),(s,a)=>s.div(a));let[r,o]=[W(e[0]),W(e[1])];if(r!==null&&o!==null)return i.number([r,o])}},Root:{description:"n-th root of a value.",complexity:3200,broadcastable:!0,signature:"(number, number) -> number",type:([e,n])=>e.isNaN||n.isNaN?"number":e.isFinite===!1||n.isFinite===!1?"non_finite_number":n.isSame(0)?"finite_integer":n.isSame(1)?e.type:e.isReal&&n.isReal&&e.isPositive===!0?"finite_real":"finite_number",sgn:([e,n])=>{if(e.isReal===!1||n.isReal===!1)return"unsigned";if(e.isSame(0)){if(n.isNonPositive)return"unsigned";if(n.isPositive)return"zero"}if(e.isPositive===!0)return"positive";if(e.isNonNegative===!0)return"non-negative";if(n.isOdd===!0||n.numerator.isOdd&&n.denominator.isOdd)return e.sgn;if(e.isNegative&&n.isOdd===!1)return"unsigned"},canonical:(e,{engine:n})=>{e=In(n,e,2);let[t,i]=e;return yr(t,i)},evaluate:([e,n],{numericApproximation:t,engine:i})=>{let r=e.evaluate();if(r.operator==="Quantity"){let o=n.re;if(o!==void 0&&o!==0)return Lu(i,r,i.number(1/o))}return ru(e,n,{numericApproximation:t})}},Remainder:{description:"IEEE remainder: the signed remainder after dividing x by y, with the quotient rounded to the nearest integer",complexity:2500,broadcastable:!0,signature:"(number, number) -> number",type:([e,n])=>Se(e.type.type,n.type.type),evaluate:([e,n])=>gn(e,n,(t,i)=>t-i*Math.round(t/i),(t,i)=>t.sub(i.mul(t.div(i).round())))},Round:{description:"Rounds a number to the nearest integer.",complexity:1250,broadcastable:!0,signature:"(number) -> integer",type:([e])=>e.isNaN?"number":e.isFinite===!1||e.isReal===!1?"non_finite_number":"finite_integer",sgn:([e])=>{if(e.isNaN)return"unsigned";if(E(e))return e.im>=.5||e.im<=-.5?"unsigned":hf(Math.round(e.re));if(e.isGreaterEqual(.5))return"positive";if(e.isLessEqual(-.5))return"negative";if(e.isLess(.5)&&e.isGreater(-.5))return"zero";if(e.isNonNegative)return"non-negative";if(e.isNonPositive)return"non-positive"},evaluate:([e])=>ve(e,Math.round,n=>n.round(),n=>n.round(0))},Heaviside:{description:"Heaviside step function.",complexity:1200,broadcastable:!0,signature:"(number) -> real",type:()=>"finite_real",sgn:()=>"non-negative",evaluate:([e],{engine:n})=>{if(e.isSame(0))return n.Half;if(e.isPositive)return n.One;if(e.isNegative)return n.Zero}},Sign:{description:"Sign of a number: -1, 0, or 1.",complexity:1200,broadcastable:!0,signature:"(number) -> integer",type:()=>"finite_integer",sgn:([e])=>e.sgn,evaluate:([e],{engine:n})=>{if(e.isSame(0))return n.Zero;if(e.isPositive)return n.One;if(e.isNegative)return n.NegativeOne}},Sqrt:{description:"Square Root",wikidata:"Q134237",complexity:3e3,broadcastable:!0,signature:"(number) -> number",type:([e])=>e.isNaN?"number":e.isFinite===!1?"non_finite_number":e.isReal?e.isNegative?"complex":"finite_real":"finite_number",sgn:([e])=>{if(e.isPositive)return"positive";if(e.isNegative)return"unsigned";if(e.isNonNegative)return"non-negative";if(e.sgn==="not-zero")return"not-zero"},evaluate:([e],{numericApproximation:n,engine:t})=>{let i=e.evaluate();if(i.operator==="Quantity")return Lu(t,i,t.number(.5));if(!n)return e.sqrt();let[r,o]=e.toNumericValue();return o.isSame(1)?t.number(r.sqrt().N()):t.number(r.sqrt().N()).mul(o)}},Square:{description:"Square of a number: x^2.",wikidata:"Q3075175",complexity:3100,broadcastable:!0,signature:"(number) -> number",sgn:([e])=>{if(e.isSame(0))return"zero";if(e.isReal){let n=e.sgn;return n==="not-zero"||n==="positive"||n==="negative"?"positive":"non-negative"}if(e.type.matches("complex"))return"negative";if(e.isReal==!1||e.isNaN)return"unsigned"},canonical:(e,{engine:n})=>{let t=n;return e=be(e),e.length!==1?t._fn("Square",e):t._fn("Power",[e[0],t.number(2)]).canonical}},Subtract:{description:"Difference between two or more values.",wikidata:"Q40754",complexity:1350,broadcastable:!0,signature:"(number+) -> number",canonical:(e,{engine:n})=>{if(e=In(n,e),e.length===0)return n.error("missing");let t=e[0],i=e.slice(1);return ut(n,[t,...i.map(r=>r.neg())])}},Truncate:{description:"Rounds a number towards zero (removes the fractional part)",complexity:1250,broadcastable:!0,signature:"(number) -> integer",type:([e])=>e.isFinite!==!1?"finite_integer":"integer",sgn:([e])=>e.sgn,evaluate:([e])=>ve(e,Math.trunc,n=>n.trunc(),n=>n.trunc(0))}},{ImaginaryUnit:{type:"imaginary",isConstant:!0,holdUntil:"never",wikidata:"Q193796",value:e=>e.I},i:{type:"imaginary",isConstant:!0,holdUntil:"never",value:e=>e.I},ExponentialE:{type:"finite_real",wikidata:"Q82435",isConstant:!0,holdUntil:"N",value:e=>e.number(Je(e)?e._BIGNUM_ONE.exp():Math.exp(1))},e:{type:"finite_real",isConstant:!0,holdUntil:"never",value:"ExponentialE"},ComplexInfinity:{type:"complex",isConstant:!0,holdUntil:"never",value:e=>e.ComplexInfinity},PositiveInfinity:{type:"non_finite_number",isConstant:!0,holdUntil:"never",value:1/0},NegativeInfinity:{type:"non_finite_number",isConstant:!0,holdUntil:"never",value:-1/0},NaN:{type:"number",isConstant:!0,holdUntil:"never",value:e=>e.NaN},ContinuationPlaceholder:{description:"This symbol indicates that some elements in a collection have been omitted, for example in a long list of numbers, or in an infinite set",type:"unknown",isConstant:!0},MachineEpsilon:{type:"finite_real",holdUntil:"N",isConstant:!0,value:{num:Number.EPSILON.toString()}},Half:{type:"finite_rational",isConstant:!0,holdUntil:"never",value:["Rational",1,2]},GoldenRatio:{type:"finite_real",wikidata:"Q41690",isConstant:!0,holdUntil:"N",value:["Divide",["Add",1,["Sqrt",5]],2]},CatalanConstant:{type:"finite_real",wikidata:"Q855282",isConstant:!0,holdUntil:"N",value:{num:`0.91596559417721901505460351493238411077414937428167
|
|
18
|
+
21342664981196217630197762547694793565129261151062
|
|
19
|
+
48574422619196199579035898803325859059431594737481
|
|
20
|
+
15840699533202877331946051903872747816408786590902
|
|
21
|
+
47064841521630002287276409423882599577415088163974
|
|
22
|
+
70252482011560707644883807873370489900864775113225
|
|
23
|
+
99713434074854075532307685653357680958352602193823
|
|
24
|
+
23950800720680355761048235733942319149829836189977
|
|
25
|
+
06903640418086217941101917532743149978233976105512
|
|
26
|
+
24779530324875371878665828082360570225594194818097
|
|
27
|
+
53509711315712615804242723636439850017382875977976
|
|
28
|
+
53068370092980873887495610893659771940968726844441
|
|
29
|
+
66804621624339864838916280448281506273022742073884
|
|
30
|
+
31172218272190472255870531908685735423498539498309
|
|
31
|
+
91911596738846450861515249962423704374517773723517
|
|
32
|
+
75440708538464401321748392999947572446199754961975
|
|
33
|
+
87064007474870701490937678873045869979860644874974
|
|
34
|
+
64387206238513712392736304998503539223928787979063
|
|
35
|
+
36440323547845358519277777872709060830319943013323
|
|
36
|
+
16712476158709792455479119092126201854803963934243
|
|
37
|
+
`}},EulerGamma:{type:"finite_real",wikidata:"Q273023",holdUntil:"N",isConstant:!0,value:{num:`0.57721566490153286060651209008240243104215933593992359880576723488486772677766
|
|
38
|
+
467093694706329174674951463144724980708248096050401448654283622417399764492353
|
|
39
|
+
625350033374293733773767394279259525824709491600873520394816567085323315177661
|
|
40
|
+
152862119950150798479374508570574002992135478614669402960432542151905877553526
|
|
41
|
+
733139925401296742051375413954911168510280798423487758720503843109399736137255
|
|
42
|
+
306088933126760017247953783675927135157722610273492913940798430103417771778088
|
|
43
|
+
154957066107501016191663340152278935867965497252036212879226555953669628176388
|
|
44
|
+
792726801324310104765059637039473949576389065729679296010090151251959509222435
|
|
45
|
+
014093498712282479497471956469763185066761290638110518241974448678363808617494
|
|
46
|
+
551698927923018773910729457815543160050021828440960537724342032854783670151773
|
|
47
|
+
943987003023703395183286900015581939880427074115422278197165230110735658339673`}}},{PreIncrement:{description:"Increment a number by one.",signature:"(number) -> number"},PreDecrement:{description:"Decrement a number by one.",signature:"(number) -> number"}},{IsPrime:{description:"`IsPrime(n)` returns `True` if `n` is a prime number",wikidata:"Q49008",complexity:1200,broadcastable:!0,signature:"(number) -> boolean",evaluate:([e],{engine:n})=>{let t=_s(e);if(t!==void 0)return n.symbol(t?"True":"False")}},IsComposite:{description:"`IsComposite(n)` returns `True` if `n` is not a prime number",complexity:1200,broadcastable:!0,signature:"(number) -> boolean",canonical:(e,{engine:n})=>n.box(["Not",["IsPrime",...e]])},IsOdd:{description:"`IsOdd(n)` returns `True` if `n` is an odd number",complexity:1200,broadcastable:!0,signature:"(number) -> boolean",evaluate:(e,{engine:n})=>{let t=!1,i=e.every(r=>{if(r.im!==0)return!1;let o=Ot(r);if(o!==null)return o%BigInt(2)!==BigInt(0);let s=r.re;return Number.isInteger(s)?s%2!==0:(t=!0,!1)});if(!t)return n.symbol(i?"True":"False")}},IsEven:{description:"Even Number",complexity:1200,broadcastable:!0,signature:"(number) -> boolean",canonical:(e,{engine:n})=>n.box(["Not",["IsOdd",...e]])}},{GCD:{description:"Greatest Common Divisor",complexity:1200,broadcastable:!1,signature:"(any*) -> integer",type:()=>"finite_integer",sgn:()=>"positive",evaluate:e=>Ab(e,"GCD")},LCM:{description:"Least Common Multiple",complexity:1200,broadcastable:!1,signature:"(any*) -> integer",type:()=>"finite_integer",sgn:()=>"positive",evaluate:e=>Ab(e,"LCM")},Numerator:{description:"Numerator of an expression",complexity:1200,broadcastable:!0,lazy:!0,signature:"(number) -> number | nothing",canonical:(e,{engine:n})=>{if(e.length===0)return n.Nothing;let t=e[0];return(t.operator==="Rational"||t.operator==="Divide")&&m(t)?t.op1:n._fn("Numerator",lt(n,e))},sgn:([e])=>e.sgn,evaluate:(e,{engine:n})=>{let t=n;if(e.length===0)return t.Nothing;let i=e[0];return(i.operator==="Rational"||i.operator==="Divide")&&m(i)?i.op1.evaluate():i.numerator}},Denominator:{description:"Denominator of an expression",complexity:1200,broadcastable:!0,lazy:!0,signature:"(number) -> number | nothing",canonical:(e,{engine:n})=>{if(e.length===0)return n.Nothing;let t=e[0];if((t.operator==="Rational"||t.operator==="Divide")&&m(t))return t.op2;let i=Ke(t);return i!==void 0?n.number(i[1]):n._fn("Denominator",lt(n,e))},sgn:()=>"positive",evaluate:(e,{engine:n})=>{let t=n;if(e.length===0)return t.Nothing;let i=e[0];return(i.operator==="Rational"||i.operator==="Divide")&&m(i)?i.op2.evaluate():i.denominator}},NumeratorDenominator:{description:"Sequence of Numerator and Denominator of an expression",complexity:1200,broadcastable:!0,lazy:!0,signature:"(number) -> tuple<number, number> | nothing",canonical:(e,{engine:n})=>{if(e.length===0)return n.Nothing;let t=e[0];if((t.operator==="Rational"||t.operator==="Divide")&&m(t))return n.tuple(...t.ops);let i=Ke(t.evaluate());return i!==void 0?n.tuple(n.number(i[0]),n.number(i[1])):n._fn("NumeratorDenominator",e.map(r=>r.evaluate()))},evaluate:(e,{engine:n})=>{let t=n;if(e.length===0)return t.Nothing;let i=e[0];return(i.operator==="Rational"||i.operator==="Divide")&&m(i)?t.tuple(...i.ops):t.tuple(...i.numeratorDenominator)}}},{Max:{description:"Maximum of two or more numbers",complexity:1200,broadcastable:!1,signature:"(value*) -> number | list",sgn:e=>{if(e.some(n=>n.isReal==!1||n.isNaN))return"unsigned";if(!e.some(n=>n.isReal==!1||n.isNaN!==!1)){if(e.some(n=>n.isPositive))return"positive";if(e.every(n=>n.isNonPositive))return e.some(n=>n.isSame(0))?"zero":"non-positive";if(e.some(n=>n.isNonNegative))return"non-negative";if(e.every(n=>n.isNegative))return"negative";if(e.some(n=>!n.isSame(0)))return"not-zero"}},evaluate:(e,{engine:n})=>Fu(n,e,"Max")},Min:{description:"Minimum of two or more numbers",complexity:1200,broadcastable:!1,signature:"(value+) -> number | list",sgn:e=>{if(e.some(n=>n.isReal==!1||n.isNaN))return"unsigned";if(!e.some(n=>n.isReal==!1||n.isNaN!==!1)){if(e.some(n=>n.isNegative))return"negative";if(e.every(n=>n.isNonNegative))return e.some(n=>n.isSame(0))?"zero":"non-negative";if(e.some(n=>n.isNonPositive))return"non-positive";if(e.every(n=>n.isPositive))return"positive"}},evaluate:(e,{engine:n})=>Fu(n,e,"Min")},Supremum:{description:"Like Max, but defined for open sets",complexity:1200,broadcastable:!1,signature:"(value*) -> number | list",evaluate:(e,{engine:n})=>Fu(n,e,"Supremum")},Infimum:{description:"Like Min, but defined for open sets",complexity:1200,broadcastable:!1,signature:"(value*) -> number | list",evaluate:(e,{engine:n})=>Fu(n,e,"Infimum")},Product:{description:"`Product(f, a, b)` computes the product of `f` from `a` to `b`",wikidata:"Q901718",complexity:1e3,broadcastable:!1,scoped:!0,lazy:!0,signature:"((number+) -> number, (tuple<integer>|tuple<integer, integer>)+) -> number",canonical:([e,...n],{scope:t})=>df("Product",e,n,t),evaluate:(e,n)=>{let t=n.engine,i=n.numericApproximation,r=Dt(ws(e[0],e.slice(1),(o,s)=>o.mul(s.evaluate({numericApproximation:i})),t.One),t._timeRemaining);if(r!==vo)return r?.evaluate({numericApproximation:i})??t.NaN},evaluateAsync:async(e,n)=>{let t=n.engine,i=n.numericApproximation,r=await co(ws(e[0],e.slice(1),(o,s)=>o.mul(s.evaluate({numericApproximation:i})),t.One),t._timeRemaining,n.signal);if(r!==vo)return r?.evaluate({numericApproximation:i})??t.NaN}},Sum:{description:"`Sum(f, [a, b])` computes the sum of `f` from `a` to `b`",wikidata:"Q218005",complexity:1e3,broadcastable:!1,scoped:!0,lazy:!0,signature:"((number) -> number, bounds:tuple+) -> number",canonical:([e,...n],{scope:t})=>df("Sum",e,n,t),evaluate:([e,...n],{engine:t,numericApproximation:i})=>{let r=Dt(ws(e,n,(o,s)=>o.add(s.evaluate({numericApproximation:i})),t.Zero),t._timeRemaining);if(r!==vo)return r?.evaluate({numericApproximation:i})??t.NaN},evaluateAsync:async(e,{engine:n,signal:t,numericApproximation:i})=>{let r=await co(ws(e[0],e.slice(1),(o,s)=>o.add(s.evaluate({numericApproximation:i})),n.Zero),n._timeRemaining,t);if(r!==vo)return r?.evaluate({numericApproximation:i})??n.NaN}}}];function Z_(e){let n=e.engine;if(E(e)){let t=e.numericValue;return typeof t=="number"?n.number(Math.abs(t)):n.number(t.abs())}if(e.isNonNegative)return e;if(e.isNegative)return e.neg()}function Pb(e,n){let t=e.engine,i=n==="Max"||n==="Supremum";if(m(e,"Interval")){let r=i?e.op2:e.op1;return!r.isNumber||!E(r)?[void 0,[e]]:[r,[]]}if(e.operator==="Range")if(i){let r=ct(e),o=lb(r);return[t.number(Math.max(r[0],o)),[]]}else return[t.number(ct(e)[0]),[]];if(m(e,"Linspace"))return e.nops===1?e=i?e.op1:t.One:i?e=e.op2:e=e.op1,[e,[]];if(e.isCollection){let r,o=[];for(let s of e.each()){let[a,u]=Pb(s,n);a&&(r?(i&&a.isGreater(r)||!i&&a.isLess(r))&&(r=a):r=a),o.push(...u)}return[r,o]}return!e.isNumber||!E(e)?[void 0,[e]]:[e,[]]}function Fu(e,n,t){let i=t==="Max"||t==="Supremum";if(n=be(n),n.length===0)return i?e.NegativeInfinity:e.PositiveInfinity;let r,o=[];for(let s of n){let[a,u]=Pb(s,t);a&&(r?(i&&a.isGreater(r)||!i&&a.isLess(r))&&(r=a):r=a),o.push(...u)}return o.length>0?e.box(r?[t,r,...o]:[t,...o]):r??(i?e.NegativeInfinity:e.PositiveInfinity)}function Ab(e,n){let t=e[0].engine,i=n==="LCM"?bt:Pe,r=n==="LCM"?Fh:ef,o=[];if(Je(t)){let a=null;for(let u of e)if(a===null)a=Yc(u),(a===null||!a.isInteger())&&o.push(u);else{let l=Yc(u);l&&l.isInteger()?a=r(a,l):o.push(u)}return o.length===0?a===null?t.One:t.number(a):a===null?t._fn(n,o):t._fn(n,[t.number(a),...o])}let s=null;for(let a of e)s===null?a.isInteger&&o.push(a):a.isInteger?s=i(s,a.re):o.push(a);return o.length===0?s===null?t.One:t.number(s):s===null?t._fn(n,o):t._fn(n,[t.number(s),...o])}function H_(e,n){if(n===0)return{estimate:e,error:n};let t=Math.abs(n),i=Math.floor(Math.log10(t)),r=2,o=Math.pow(10,i-(r-1)),s=Math.round(n/o)*o,a=Math.max(0,-(i-(r-1)));return{estimate:Number(e.toFixed(a)),error:s}}function Ps(e,n,t,i=1e5){let r=0,o=0;if(n===-1/0&&t===1/0)for(let d=0;d<i;d++){let g=Math.random(),h=Math.tan(Math.PI*(g-.5)),b=e(h)*Math.PI*(1+h*h);r+=b,o+=b*b}else if(n===-1/0)for(let d=0;d<i;d++){let g=Math.random(),h=t+Math.log(g),b=e(h)/g;r+=b,o+=b*b}else if(t===1/0)for(let d=0;d<i;d++){let g=Math.random(),h=n-Math.log(g),b=e(h)/g;r+=b,o+=b*b}else for(let d=0;d<i;d++){let g=e(n+Math.random()*(t-n));r+=g,o+=g*g}let s=r/i,a=(o-i*s*s)/(i-1),u=Math.sqrt(a/i),l=isFinite(n)&&isFinite(t)?t-n:1,c=s*l,f=u*l;return H_(c,f)}var Db=100;var W_={Sin:["Cos","_"],Cos:["Negate",["Sin","_"]],Tan:["Power",["Sec","_"],2],Sec:["Multiply",["Tan","_"],["Sec","_"]],Csc:["Multiply",["Negate",["Cot","_"]],["Csc","_"]],Cot:["Negate",["Power",["Csc","_"],2]],Arcsin:["Power",["Subtract",1,["Power","_",2]],["Negate","Half"]],Arccos:["Negate",["Power",["Subtract",1,["Power","_",2]],["Negate","Half"]]],Arctan:["Power",["Add",1,["Power","_",2]],-1],Arcsec:["Multiply",["Power",["Subtract",1,["Power","_",2]],["Negate","Half"]],["Negate",["Power","_",2]]],Arccsc:["Multiply",["Power",["Subtract",1,["Power","_",2]],["Negate","Half"]],["Negate",["Power","_",2]]],Arccot:["Negate",["Power",["Add",1,["Power","_",2]],-1]],Sinh:["Cosh","_"],Cosh:["Sinh","_"],Tanh:["Power",["Sech","_"],2],Sech:["Negate",["Multiply",["Tanh","_"],["Sech","_"]]],Csch:["Negate",["Multiply",["Coth","_"],["Csch","_"]]],Coth:["Negate",["Power",["Csch","_"],2]],Arsinh:["Power",["Add",["Power","_",2],1],["Negate","Half"]],Arcosh:["Power",["Subtract",["Power","_",2],1],["Negate","Half"]],Artanh:["Power",["Subtract",1,["Power","_",2]],-1],Arsech:["Negate",["Divide",1,["Multiply","_",["Sqrt",["Subtract",1,["Power","_",2]]]]]],Arcsch:["Negate",["Divide",1,["Multiply",["Abs","_"],["Sqrt",["Add",1,["Power","_",2]]]]]],Arcoth:["Negate",["Power",["Subtract",1,["Power","_",2]],-1]],Ln:["Divide",1,"_"],Log:["Power",["Multiply","_",["Ln","10"]],-1],Sqrt:["Multiply",["Power","_",["Negate","Half"]],"Half"],Abs:["Sign","_"],Floor:0,Ceil:0,Round:0,Erf:["Multiply",["Divide","2",["Sqrt","Pi"]],["Exp",["Negate",["Square","_"]]]],Gamma:["Multiply",["Gamma","_"],["Digamma","_"]],Erfc:["Negate",["Multiply",["Divide",2,["Sqrt","Pi"]],["Exp",["Negate",["Square","_"]]]]],GammaLn:["Digamma","_"],Digamma:["Trigamma","_"],LambertW:["Divide",["LambertW","_"],["Multiply","_",["Add",1,["LambertW","_"]]]],FresnelS:["Sin",["Multiply",["Divide","Pi",2],["Square","_"]]],FresnelC:["Cos",["Multiply",["Divide","Pi",2],["Square","_"]]],Erfi:["Multiply",["Divide",2,["Sqrt","Pi"]],["Exp",["Square","_"]]]};function $b(e,n){if(n===0)return e;let t=e.engine,i="_";_(e)&&e.operatorDefinition&&(e=ei(t.symbol(e.symbol),[t.symbol("_")])),m(e,"Function")&&(i=v(e.ops[1])??"_",e=e.ops[0]);let r=e;for(;n-- >0&&r;)r=Ce(r,i);return r}function Ce(e,n,t=0){if(t>Db){`${Db}`;return}let i=e.engine;if(q(e))return;if(E(e))return e.engine.Zero;if(_(e)){if(e.symbol===n)return e.engine.One;if(e.operatorDefinition){let u=e.engine,l=u.symbol("_"),c=u.function(e.symbol,[l]).evaluate();if(c.operator!==e.symbol){let f=c.subs({_:u.symbol(n)});return Ce(f,n,t+1)}}return e.engine.Zero}if(!e.operator||!m(e))return;if(e.operator==="Negate"){let u=Ce(e.op1,n,t+1);return u?u.neg():i._fn("D",[e.op1,i.symbol(n)]).neg()}if(e.operator==="Block")return Ce(e.op1,n,t+1);if(e.operator==="D"){let u=e.evaluate();return u.operator==="D"?void 0:Ce(u,n,t+1)}if(e.operator==="Add"){let u=e.ops.map(l=>Ce(l,n,t+1));return u.some(l=>l===void 0)?void 0:fe(...u)}if(e.operator==="Multiply"){let u=e.ops.map((l,c)=>{let f=e.ops.slice();f.splice(c,1);let p=ke(...f);return(Ce(l,n,t+1)??i._fn("D",[l,i.symbol(n)])).mul(p)});return u.some(l=>l===void 0)?void 0:fe(...u)}if(e.operator==="Root"){let[u,l]=e.ops;if(!u.has(n))return i.Zero;let c=i.One.div(l),f=Ce(u,n,t+1)??i._fn("D",[u,i.symbol(n)]),p=c.sub(i.One),d=i.function("Power",[u,p],{form:"structural"});return c.mul(d).mul(f)}if(e.operator==="Power"){let[u,l]=e.ops,c=u.has(n),f=l.has(n);if(!c&&!f)return i.Zero;if(c&&!f){let N=Ce(u,n,t+1)??i._fn("D",[u,i.symbol(n)]);return l.mul(u.pow(l.add(i.NegativeOne))).mul(N)}if(!c&&f){let N=Ce(l,n,t+1)??i._fn("D",[l,i.symbol(n)]),T=i._fn("Ln",[u]);return e.mul(T).mul(N)}let p=u,d=l,g=Ce(p,n,t+1)??i._fn("D",[p,i.symbol(n)]),h=Ce(d,n,t+1)??i._fn("D",[d,i.symbol(n)]),b=i._fn("Ln",[p]),y=h.mul(b),x=d.mul(g).div(p);return e.mul(y.add(x))}if(e.operator==="Divide"){let[u,l]=e.ops,c=Ce(u,n,t+1)??i._fn("D",[u,i.symbol(n)]),f=Ce(l,n,t+1)??i._fn("D",[l,i.symbol(n)]);return c.mul(l).sub(f.mul(u)).div(l.pow(2))}if(e.operator==="Log"&&e.nops===2){let[u,l]=e.ops,c=u.has(n),f=l.has(n);if(!c&&!f)return i.Zero;if(c&&!f){let g=Ce(u,n,t+1)??i._fn("D",[u,i.symbol(n)]),h=i._fn("Ln",[l]);return g.div(u.mul(h))}let p=i._fn("Ln",[u]),d=i._fn("Ln",[l]);return Ce(p.div(d),n,t+1)}if(["Mod","GCD","LCM"].includes(e.operator))return i.Zero;if(["BesselJ","BesselY","BesselI","BesselK"].includes(e.operator)&&e.nops===2){let[u,l]=e.ops,c=l.has(n),f=u.has(n);if(!c&&!f)return i.Zero;if(f)return;let p=Ce(l,n,t+1)??i._fn("D",[l,i.symbol(n)]),d=e.operator,g=u.sub(i.One),h=u.add(i.One),b;if(d==="BesselJ"||d==="BesselY"){let y=i._fn(d,[g,l]),x=i._fn(d,[h,l]);b=y.sub(x).div(2)}else if(d==="BesselI"){let y=i._fn(d,[g,l]),x=i._fn(d,[h,l]);b=y.add(x).div(2)}else{let y=i._fn(d,[g,l]),x=i._fn(d,[h,l]);b=y.add(x).div(2).neg()}return b.mul(p)}let r=W_[e.operator];if(r===void 0){if(i.symbol(e.operator).operatorDefinition){let p=e.ops,d=p.length===1?[i.symbol("_")]:p.map((h,b)=>i.symbol(`_${b+1}`)),g=i.function(e.operator,d).evaluate();if(g.operator!==e.operator){let h={};d.forEach((y,x)=>{h[v(y)]=p[x]});let b=g.subs(h);return Ce(b,n,t+1)}}if(e.nops>1)return;let l=i._fn("Derivative",[i.symbol(e.operator),i.One]);if(!l.isValid)return;let c=e.ops[0],f=Ce(c,n,t+1)??i._fn("D",[c,i.symbol(n)]);return f.isValid?i._fn("Apply",[l,c]).mul(f):void 0}if(e.nops>1)return i._fn("D",[e,i.symbol(n)]);let o=e.ops[0],s=Ce(o,n,t+1)??i._fn("D",[o,i.symbol(n)]),a=i.box(r).subs({_:o});return a.mul(s)}var qb={boolean:e=>e.type.matches("boolean"),string:e=>q(e),number:e=>E(e),symbol:e=>_(e),expression:e=>!0,numeric:e=>{let[n,t]=e.toNumericValue();return t.isSame(1)},integer:e=>e.isInteger,rational:e=>e.isRational,irrational:e=>e.isRational===!1,real:e=>e.isReal,notreal:e=>!e.isReal,complex:e=>e.type.matches("complex"),imaginary:e=>e.type.matches("imaginary"),positive:e=>e.isPositive,negative:e=>e.isNegative,nonnegative:e=>e.isNonNegative,nonpositive:e=>e.isNonPositive,even:e=>e.isEven,odd:e=>e.isOdd,prime:e=>_s(e)===!0,composite:e=>_s(e)===!1,notzero:e=>e.isSame(0)===!1,notone:e=>e.isSame(1)===!1,finite:e=>e.isFinite,infinite:e=>e.isFinite===!1,constant:e=>e.valueDefinition?.isConstant??!1,variable:e=>!(e.valueDefinition?.isConstant??!0),function:e=>e.operatorDefinition!==void 0,relation:e=>Gn(e.operator),equation:e=>e.operator==="Equal",inequality:e=>Ct(e.operator),collection:e=>e.isCollection,list:e=>e.operator==="List",set:e=>e.operator==="Set",tuple:e=>e.operator==="Tuple"||e.operator==="Single"||e.operator==="Pair"||e.operator==="Triple",single:e=>e.operator==="Single",pair:e=>e.operator==="Pair",triple:e=>e.operator==="Triple",scalar:e=>e.rank===0,tensor:e=>e.rank>0,vector:e=>e.rank===1,matrix:e=>e.rank===2,unit:e=>e.operator==="Unit",dimension:e=>e.operator==="Dimension",angle:e=>e.operator==="Angle",polynomial:e=>e.unknowns.length===1};function Vb(e,n){for(let t of n)if(qb[t](e)!==!0)return!1;return!0}function Y_(e){let n=/\\[a-zA-Z]+|[{}]|[\d]+|[+\-*/^_=()><,.;]|[a-zA-Z]/g,t=e.match(n);return t?t.filter(i=>!/^[ \f\n\r\t\v\xA0\u2028\u2029]+$/.test(i)):[]}function Q_(e){let n=e.peek,t=null;if(n==="\\mathrm")e.nextToken(),t=e.parseStringGroup();else if(/^[a-z]$/.test(n))for(t=e.nextToken();/^[a-z]$/.test(e.peek);)t+=e.nextToken();else{let i={">0":"positive","\\gt0":"positive","<0":"negative","\\lt0":"negative",">=0":"nonnegative","\\geq0":"nonnegative","<=0":"nonpositive","\\leq0":"nonpositive","!=0":"notzero","\\neq0":"notzero","\\neq1":"notone","!=1":"notone","\\in\\R":"real","\\in\\mathbb{R}":"real","\\in\\C":"complex","\\in\\mathbb{C}":"complex","\\in\\Q":"rational","\\in\\mathbb{Q}":"rational","\\in\\Z^+":"integer,positive","\\in\\Z^-":"intger,negative","\\in\\Z^*":"nonzero","\\in\\R^+":"positive","\\in\\R^-":"negative","\\in\\R^*":"real,nonzero","\\in\\Z":"integer","\\in\\mathbb{Z}":"integer","\\in\\N":"integer,nonnegative","\\in\\mathbb{N}":"integer,nonnegative","\\in\\N^*":"integer,positive","\\in\\N_0":"integer,nonnegative","\\in\\R\\backslash\\Q":"irrational"};for(let r in i)if(e.matchAll(Y_(r))){t=i[r];break}}if(!t)return null;if(!Object.keys(qb).includes(t))throw new Error(`Unexpected condition "${t}" in a rule`);return t}function Ob(e){let n=[];do{let t=Q_(e);if(!t)break;n.push(t)}while(e.match(","));return n.join(",")}function yf(e){let n=null;if(e.match(":"))n=Ob(e);else if(e.matchAll(["_","<{>"])&&(n=Ob(e),!e.match("<}>")))return null;return n}function Lb(e,n,t){if(n===void 0||typeof n=="function")return;if(typeof n=="string"){let r=e.parse(n,{form:t?.canonical?"canonical":"raw"});return t?.autoWildcard&&(r=r.map(o=>_(o)&&o.symbol.length===1?e.symbol("_"+o.symbol):o,{canonical:!1})),r}let i=t?.canonical??(n instanceof de?n.isCanonical:!1);return e.box(n,{form:i?"canonical":"raw"})}function X_(e,n,t){let i=c=>({kind:"symbol",latexTrigger:c,parse:(f,p)=>{o[c]||(o[c]=`_${c}`);let d=yf(f);return d!==null&&(s[c]?s[c]+=","+d:s[c]=d),o[c]}}),r=e.latexDictionary,o={},s={};e.latexDictionary=[...r,{kind:"prefix",precedence:100,latexTrigger:"...",parse:(c,f)=>{let p=c.nextToken();if(!"abcfghjklmnopqrstuvwxyz".includes(p))return null;let d="__";if(c.match("?")&&(d="___"),o[p]&&o[p]!==`${d}${p}`)throw new Error(`Duplicate wildcard "${p}"`);o[p]||(o[p]=`${d}${p}`);let g=yf(c);return g===null?`${d}${p}`:(s[p]?s[p]+=","+g:s[p]=g,`${d}${p}`)}},..."abcfghjklmnopqrstuvwxyz".split("").map(i),{kind:"infix",precedence:100,latexTrigger:"->",parse:(c,f,p)=>{let d=c.parseExpression({...p,minPrec:20});if(d===null)return null;let g=null;if(c.match(";")){let y=!1,x=c.index;do{c.skipSpace();let N=c.nextToken();if(o[N]){let T=yf(c);if(T===null||!T){y=!0,c.index=x;break}s[N]?s[N]+=","+T:s[N]=T}}while(!y&&!c.atEnd);g=c.parseExpression(p)}let h=[];for(let y in s){let x=s[y].split(",");x.length!==0&&(x.length===1?h.push(["Condition",o[y],x[0]]):h.push(["Condition",o[y],["And",...x]]))}let b;return g&&h.length>0?b=["And",g,...h]:g?b=g:h.length===1?b=h[0]:h.length>1&&(b=["And",...h]),b?["Rule",f,d,b]:["Rule",f,d]}}];let a=t?.canonical??!1,u=e.contextStack[0]?.lexicalScope;u&&e.pushScope({parent:u,bindings:new Map});let l;try{if(l=e.parse(n),e.latexDictionary=r,!l.isValid||l.operator!=="Rule")throw new Error(`Invalid rule "${n}"
|
|
48
|
+
| ${Jb(l).toString()}
|
|
49
|
+
| A rule should be of the form:
|
|
50
|
+
| <match> -> <replace>; <condition>`);if(!m(l))throw new Error(`Invalid rule "${n}"`);let[c,f,p]=l.ops,d=c,g=f;if(a&&(d=d.canonical,g=g.canonical),!Fb(g,d))throw new Error(`Invalid rule "${n}"
|
|
51
|
+
| The replace expression contains wildcards not present in the match expression`);if(d.isSame(g))throw new Error(`Invalid rule "${n}"
|
|
52
|
+
| The match and replace expressions are the same.
|
|
53
|
+
| This may be because the rule is not necessary due to canonical simplification`);let h;if(p!==void 0){if(!Fb(p,d))throw new Error(`Invalid rule "${n}"
|
|
54
|
+
| The condition expression contains wildcards not present in the match expression`);h=b=>{let y=p.subs(b).canonical.evaluate();return _(y,"True")}}return Bb(e,{match:d,replace:g,condition:h,id:n},t)}finally{u&&e.popScope()}}function Bb(e,n,t){if(n==null)throw new Error("Expected a rule, not "+n);if(eN(n))return n;if(typeof n=="string")return X_(e,n,t);if(typeof n=="function")return{_tag:"boxed-rule",match:void 0,replace:n,condition:void 0,id:n.toString().replace(/\n/g," ")};let{match:i,replace:r,condition:o,id:s,onMatch:a,onBeforeMatch:u}=n;if(r===void 0)throw new Error(`Invalid rule "${s??JSON.stringify(n,void 0,4)}"
|
|
55
|
+
| A rule must include at least a replace property`);let l;if(typeof o=="string"){let d=ti(o);if(d){let g=e.parse(d,{form:t?.canonical?"canonical":"raw"});l=(h,b)=>{let y=g.subs(h).evaluate();return _(y,"True")}}}else{if(o!==void 0&&typeof o!="function")throw new Error(`Invalid rule ${s??JSON.stringify(n,void 0,4)}
|
|
56
|
+
| condition is not a valid function`);l=o}if(typeof i=="function")throw new Error(`Invalid rule ${s??JSON.stringify(n,void 0,4)}
|
|
57
|
+
| match is not a valid expression.
|
|
58
|
+
| Use a replace function instead to validate and replace the expression`);let c=e.contextStack[0]?.lexicalScope;c?e.pushScope({parent:c,bindings:new Map}):e.pushScope();let f,p;try{f=Lb(e,i,{canonical:!1,autoWildcard:!1}),p=typeof r=="function"?r:Lb(e,r,t)}finally{e.popScope()}if(s||(typeof i=="string"?s=i:s=JSON.stringify(i,void 0,4),r&&(s+=" -> ",typeof r=="string"?s+=r:typeof r=="function"?s+=r?.toString().replace(/\n/g," "):s=JSON.stringify(r,void 0,4)),typeof o=="string"?s+=`; ${o}`:typeof o=="function"&&(s+=`; ${o.toString().replace(/\n/g," ")}`)),f&&!f.isValid)throw new Error(`Invalid rule ${s}
|
|
59
|
+
| the match expression is not valid: ${f.toString()}`);if(p&&typeof p!="function"&&!p.isValid)throw new Error(`Invalid rule ${s??JSON.stringify(n,void 0,4)}
|
|
60
|
+
| The replace expression is not valid: ${p?.toString()}`);if(!p&&typeof r!="function")throw new Error(`Invalid rule ${s??JSON.stringify(n,void 0,4)}
|
|
61
|
+
| The replace expression could not be parsed`);return{_tag:"boxed-rule",match:f,replace:p??r,condition:l,useVariations:n.useVariations,id:s,onMatch:a,onBeforeMatch:u}}function $s(e,n,t){if(!n)return{rules:[]};if(typeof n=="object"&&"rules"in n)return n;Array.isArray(n)||(n=[n]);let i=[];for(let r of n)try{i.push(Bb(e,r,t))}catch(o){throw new Error(`
|
|
62
|
+
${o.message}
|
|
63
|
+
| Skipping rule ${JSON.stringify(r,void 0,4)}
|
|
64
|
+
|
|
65
|
+
`)}return{rules:i}}function xf(e,n,t,i){if(!e)return null;let r=i?.canonical??(n.isCanonical||n.isStructural),o=!1;if(m(n)&&i?.recursive){let y=n.ops.map(x=>{let N=xf(e,x,{},i);return N?(o=!0,N.value):x});o&&(!r&&i?.canonical===void 0&&y.every(x=>x.isCanonical)&&(r=!0),n=n.engine.function(n.operator,y,{form:r?"canonical":"raw"}))}let{match:s,replace:a,condition:u,id:l,onMatch:c,onBeforeMatch:f}=e,p=l??"";if(r&&s){let y=Ds(s),x=s.canonical,N=Ds(x);if(!y.every(T=>N.includes(T)))return o?{value:n,because:p}:null}let d=e.useVariations??i?.useVariations??!1,g=i?.matchPermutations??!0;f?.(e,n);let h=s?n.match(s,{substitution:t,useVariations:d,recursive:!1,matchPermutations:g}):{};if(h===null)return o?{value:n,because:p}:null;if(typeof u=="function"){let y={...Object.fromEntries(Object.entries(h).map(([x,N])=>[x.slice(1),N])),...h};try{if(!u(y,n.engine))return o?{value:n,because:p}:null}catch(x){return console.error(`
|
|
66
|
+
| Rule "${e.id}"
|
|
67
|
+
| Error while checking condition
|
|
68
|
+
| ${x.message}`),null}}!r&&i?.canonical===void 0&&a instanceof de&&a.isCanonical&&(r=!0);let b=typeof a=="function"?a(n,h):a.subs(h,{canonical:r});if(!b)return null;if(c?.(e,n,b),K_(b))return r?{...b,value:b.value.canonical}:b;if(!Ub(b))throw new Error("Invalid rule replacement result: expected a Expression or RuleStep");return{value:r?b.canonical:b,because:p}}function fi(e,n,t){if(!n)throw new Error("replace(): Expected one or more rules");let i=t?.iterationLimit??1,r=0,o=t?.once??!1,s;typeof n=="object"&&"rules"in n?s=n.rules:s=e.engine.rules(Array.isArray(n)?n:[n]).rules;let a=!1,u=[];for(;!a&&r<i;){a=!0;for(let l of s)try{let c=xf(l,e,{},t);if(c!==null&&c.value!==e&&!c.value.isSame(e)){if(o)return[c];if(u.some(f=>f.value.isSame(c.value)))return u;u.push(c),a=!1,e=c.value}}catch{return u}r+=1}return u}function Ir(e,n,t,i){let r=[];for(let o of n.rules){let s=xf(o,e,t,i);s!==null&&!r.some(a=>a.isSame(s.value))&&r.push(s.value)}return r}function Jb(e){if(_(e)&&e.symbol.startsWith("_"))return e.engine.symbol(e.symbol.slice(1));if(m(e)){let n=e.ops.map(t=>Jb(t));return e.engine.function(e.operator,n,{form:"raw"})}return e}function Ds(e){let n=[];return _(e)&&e.symbol.startsWith("_")&&n.push(e.symbol),m(e)&&e.ops.forEach(t=>n.push(...Ds(t))),n}function Fb(e,n){let t=Ds(e),i=Ds(n);return t.every(r=>i.includes(r))}function zb(e){return typeof e=="object"&&e!==null}function K_(e){return zb(e)&&"because"in e&&Ub(e.value)}function eN(e){return zb(e)&&e._tag==="boxed-rule"}function Ub(e){return e instanceof de}var Os=[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],[1,5,10,10,5,1],[1,6,15,20,15,6,1],[1,7,21,35,35,21,7,1],[1,8,28,56,70,56,28,8,1]];function Vt(e,n){for(;e>=Os.length;){let t=Os.length,i=[1],r=Os[t-1];for(let o=1;o<t;o++)i[o]=r[o-1]+r[o];i[t]=1,Os.push(i)}return Os[e][n]}function nN(e){let n=e.reduce((i,r)=>i+r,0),t=1;for(let i=0;i<e.length;i+=1)t*=Vt(n,e[i]),n-=e[i];return t}function*jb(e,n){if(e===1){yield[n];return}for(let t=0;t<=n;t+=1)for(let i of jb(e-1,n-t))yield[t,...i]}function qu(e,n){let t=e.engine;if(n<0){let s=qu(e,-n);return s?s.inv():null}if(n===0)return t.One;if(n===1)return Ne(e);if(m(e,"Negate")&&Number.isInteger(n)){let s=n%2===0?1:-1,a=qu(e.op1,n);return a===null?null:s>0?a:a.neg()}if(e.operator,!m(e,"Add"))return null;let i=e.ops,r=jb(i.length,n),o=[];for(let s of r){let a=[t.number(nN(s))];for(let u=0;u<s.length;u+=1)s[u]!==0&&(s[u]===1?a.push(i[u]):a.push(i[u].pow(s[u])));o.push(ke(...a))}return fe(...o)}function tN(e,n,t){let i=null;if(n==="Divide"){let r=Ne(t[0]);return m(r,"Add")?fe(...r.ops.map(o=>o.div(t[1]))):e._fn("Divide",[r,t[1]])}if(n==="Multiply"){let r=t.map(o=>{if(m(o,"Power")&&m(o.op1)&&o.op1.operator==="Add"){let s=W(o.op2);if(s!==null&&s>=2)return qu(o.op1,s)??o}return o});return Ss(e,r)}if(n==="Negate")return Ne(t[0]).neg();if(n==="Add")return fe(...t.map(r=>Ne(r)));if(n==="Power"){let r=W(t[1]);i=r!==null?qu(t[0],r):null}return i}function Ne(e){if(e=e.canonical,typeof e.operator!="string")return e;if(Gn(e.operator)){let n=m(e)?e.ops:[];return e.engine._fn(e.operator,n.map(t=>Ne(t)))}return tN(e.engine,e.operator,m(e)?e.ops:[])??e}function wr(e){if(!e.operator||!m(e))return e;let n=e.ops.map(i=>wr(i)),t=e.engine.function(e.operator,n);return Ne(t)}function ae(e,n){if(E(e))return 0;if(_(e))return e.symbol===n?1:0;if(!m(e))return e.has(n)?-1:0;let t=e.operator;if(t==="Negate")return ae(e.op1,n);if(t==="Add"||t==="Subtract"){let i=0;for(let r of e.ops){let o=ae(r,n);if(o<0)return-1;i=Math.max(i,o)}return i}if(t==="Multiply"){let i=0;for(let r of e.ops){let o=ae(r,n);if(o<0)return-1;i+=o}return i}if(t==="Power"){let i=ae(e.op1,n);if(i<0)return-1;if(i===0)return e.op2.has(n)?-1:0;let r=W(e.op2);return r===null||r<0?-1:i*r}return e.has(n)?-1:0}function $e(e,n){let t=e.engine,i=ae(e,n);if(i<0)return null;let r=new Array(i+1).fill(t.Zero),o=Ne(e),s=(u,l)=>l>i?!1:(r[l]=r[l].add(u),!0),a=u=>{let l=ae(u,n);if(l<0)return!1;if(l===0)return s(u,0);if(_(u,n))return s(t.One,1);if(m(u,"Negate")){if(ae(u.op1,n)===0)return s(u,0);let f=$e(u.op1,n);if(!f)return!1;for(let p=0;p<f.length;p++)f[p].isSame(0)||s(f[p].neg(),p);return!0}if(m(u,"Power")){if(_(u.op1,n)){let c=W(u.op2);if(c!==null&&c>=0)return s(t.One,c)}return u.op1.has(n)?!1:s(u,0)}if(m(u,"Multiply")){let c=u.ops,f=t.One,p=0;for(let d of c)if(!d.has(n))f=f.mul(d);else if(_(d,n))p+=1;else if(m(d,"Power")&&_(d.op1,n)){let g=W(d.op2);if(g!==null&&g>=0)p+=g;else return!1}else return!1;return s(f,p)}return!1};if(m(o,"Add")){for(let u of o.ops)if(!a(u))return null}else if(!a(o))return null;return r}function Mr(e,n){if(e.length===0)return e[0]?.engine.Zero??null;let t=e[0].engine,i=t.symbol(n),r=[];for(let o=0;o<e.length;o++){let s=e[o];if(!s.isSame(0))if(o===0)r.push(s);else if(o===1)s.isSame(1)?r.push(i):s.isSame(-1)?r.push(i.neg()):r.push(s.mul(i));else{let a=t.box(["Power",n,o]);s.isSame(1)?r.push(a):s.isSame(-1)?r.push(a.neg()):r.push(s.mul(a))}}return r.length===0?t.Zero:r.length===1?r[0]:fe(...r)}function Yn(e,n,t){let i=e.engine,r=$e(e,t),o=$e(n,t);if(!r||!o||o.every(g=>g.isSame(0)))return null;let s=g=>{for(let h=g.length-1;h>=0;h--)if(!g[h].isSame(0))return h;return-1},a=s(r),u=s(o);if(u<0)return null;if(a<0)return[i.Zero,i.Zero];if(a<u)return[i.Zero,e];let l=r.map(g=>g),c=new Array(a-u+1).fill(i.Zero),f=o[u];for(let g=a;g>=u;g--){if(l[g].isSame(0))continue;let h=l[g].div(f);c[g-u]=h;for(let b=0;b<=u;b++){let y=h.mul(o[b]);l[g-u+b]=l[g-u+b].sub(y)}}let p=Mr(c,t),d=Mr(l,t);return[p,d]}function vf(e,n,t){let i=e.engine,r=ae(e,t),o=ae(n,t);if(r<0||o<0)return i.One;let s=$e(e,t),a=$e(n,t);if(!s||s.every(c=>c.isSame(0)))return Ef(n,t);if(!a||a.every(c=>c.isSame(0)))return Ef(e,t);let u=e,l=n;for(;;){let c=$e(l,t);if(!c||c.every(d=>d.isSame(0)))break;let f=Yn(u,l,t);if(!f)return i.One;let[,p]=f;u=l,l=p}return Ef(u,t)}function Ef(e,n){let t=$e(e,n);if(!t)return e;let i=null;for(let o=t.length-1;o>=0;o--)if(!t[o].isSame(0)){i=t[o];break}if(!i||i.isSame(1))return e;let r=t.map(o=>o.div(i));return Mr(r,n)}function No(e,n){if(!m(e,"Divide"))return e;let t=e.op1,i=e.op2,r=ae(t,n),o=ae(i,n);if(r<0||o<0)return e;let s=vf(t,i,n);if(ae(s,n)<=0)return e;let u=Yn(t,s,n),l=Yn(i,s,n);if(!u||!l)return e;let[c]=u,[f]=l,p=$e(f,n);return p&&p.length===1&&p[0].isSame(1)?c:c.div(f)}function Wb(e){if(typeof e=="number")return e;if(!(e==null||typeof e!="object")){if("decimal"in e&&e.decimal!==null&&e.decimal!==void 0&&typeof e.decimal=="object"&&"toNumber"in e.decimal&&typeof e.decimal.toNumber=="function")return e.decimal.toNumber();if("re"in e&&typeof e.re=="number")return e.re}}function pe(e){for(let[n,t]of Object.entries(e))if(n!=="x"&&n!=="_x"&&t.has("_x"))return!1;return!0}var Yb=[{match:["Multiply","_x","__a"],replace:0,id:"ax",condition:pe},{match:["Add",["Divide","_a","_x"],"__b"],replace:1/0,useVariations:!0,condition:pe},{match:["Add",["Multiply","_x","__a"],"__b"],replace:["Divide",["Negate","__b"],"__a"],useVariations:!0,condition:pe},{match:["Add",["Negate",["Multiply","_x","__a"]],"__b"],replace:["Divide","__b","__a"],useVariations:!0,condition:pe},{match:["Add",["Multiply","_a",["Power","_x","_n"]],"__b"],replace:["Power",["Divide",["Negate","__b"],"_a"],["Divide",1,"_n"]],useVariations:!0,condition:e=>pe(e)&&!e._n.isSame(0)},{match:["Add",["Multiply","_a",["Power","_x","_n"]],"__b"],replace:["Negate",["Power",["Divide",["Negate","__b"],"_a"],["Divide",1,"_n"]]],useVariations:!0,condition:e=>pe(e)&&!e._n.isSame(0)&&(e._n.isEven??!1)},{match:["Add",["Multiply","__a",["Power","_x",2]],["Multiply","__b","_x"]],replace:0,useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Power","_x",2]],["Multiply","__b","_x"]],replace:["Divide",["Negate","__b"],"__a"],useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Power","_x",2]],["Multiply","__b","_x"],"__c"],replace:["Divide",["Add",["Negate","__b"],["Sqrt",["Subtract",["Square","__b"],["Multiply",4,"__a","__c"]]]],["Multiply",2,"__a"]],useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Power","_x",2]],["Multiply","__b","_x"],"__c"],replace:["Divide",["Subtract",["Negate","__b"],["Sqrt",["Subtract",["Square","__b"],["Multiply",4,"__a","__c"]]]],["Multiply",2,"__a"]],useVariations:!0,condition:pe},{id:"a^x + b = 0",match:["Add",["Power","_a","_x"],"__b"],replace:["Ln",["Negate","__b"],"_a"],useVariations:!0,onBeforeMatch:()=>{},condition:e=>pe(e)&&(e._a.isPositive??!1)&&(e.__b.isNegative??!1)},{match:["Add",["Multiply","__a",["Exp",["Multiply","__b","_x"]]],"__c"],replace:["Divide",["Ln",["Negate",["Divide","__c","__a"]]],"__b"],useVariations:!0,condition:e=>pe(e)&&((!e.__a.isSame(0)&&e.__c.div(e.__a).isNegative)??!1)},{match:["Add",["Multiply","__a",["Exp","_x"]],"__c"],replace:["Ln",["Negate",["Divide","__c","__a"]]],useVariations:!0,condition:e=>pe(e)&&((!e.__a.isSame(0)&&e.__c.div(e.__a).isNegative)??!1)&&!e.__a.has("_x")&&!e.__c.has("_x")},{match:["Add",["Exp","_x"],"__c"],replace:["Ln",["Negate","__c"]],useVariations:!0,condition:e=>pe(e)&&(e.__c.isNegative??!1)},{match:["Add",["Exp",["Multiply","__b","_x"]],"__c"],replace:["Divide",["Ln",["Negate","__c"]],"__b"],useVariations:!0,condition:e=>pe(e)&&(e.__c.isNegative??!1)},{match:["Add",["Multiply","__a",["Log","_x","__b"]],"__c"],replace:["Power","__b",["Negate",["Divide","__c","__a"]]],useVariations:!0,condition:e=>(pe(e)&&!e.__a.isSame(0)&&e.__b.isPositive)??!1},{match:["Multiply","__a",["Log","_x","__b"]],replace:["Power","__b",["Negate",["Divide","__c","__a"]]],useVariations:!0,condition:e=>(pe(e)&&!e.__a.isSame(0)&&e.__b.isPositive)??!1},{match:["Add",["Abs",["Add",["Multiply","__a","_x"],"__b"]],"__c"],replace:["Divide",["Subtract","__b","__c"],"__a"],condition:pe},{match:["Add",["Abs",["Add",["Multiply","__a","_x"],"__b"]],"__c"],replace:["Divide",["Negate",["Add","__b","__c"],"__a"]],condition:pe},{match:["Add",["Multiply","_x","__a"],["Multiply","__b",["Sqrt","_x"]],"___c"],replace:["Power",["Divide",["Add",["Negate","__b"],["Sqrt",["Subtract",["Square","__b"],["Multiply",4,"__a","___c"]]]],["Multiply",2,"__a"]],2],useVariations:!0,condition:pe},{match:["Add",["Multiply","_x","__a"],["Multiply","__b",["Sqrt","_x"]],"___c"],replace:["Power",["Divide",["Subtract",["Negate","__b"],["Sqrt",["Subtract",["Square","__b"],["Multiply",4,"__a","___c"]]]],["Multiply",2,"__a"]],2],useVariations:!0,condition:pe},{match:["Add",["Multiply","_x","__a"],["Negate",["Multiply","__b",["Sqrt","_x"]]],"___c"],replace:["Power",["Divide",["Add","__b",["Sqrt",["Add",["Square","__b"],["Multiply",4,"__a","___c"]]]],["Multiply",2,"__a"]],2],useVariations:!0,condition:pe},{match:["Add",["Multiply","_x","__a"],["Negate",["Multiply","__b",["Sqrt","_x"]]],"___c"],replace:["Power",["Divide",["Subtract","__b",["Sqrt",["Add",["Square","__b"],["Multiply",4,"__a","___c"]]]],["Multiply",2,"__a"]],2],useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Sqrt","_x"]],"__b"],replace:["Square",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__a,t=e.__b;return!n||!t?!1:t.div(n).isNonPositive??!0}},{match:["Add",["Multiply","__a",["Ln","_x"]],"__b"],replace:["Exp",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:pe},{match:["Add",["Ln","_x"],"__b"],replace:["Exp",["Negate","__b"]],useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Sin","_x"]],"__b"],replace:["Arcsin",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__a,t=e.__b;if(!n||n.isSame(0))return!1;let i=t.div(n).neg(),r=ce(i);return r===void 0?!0:typeof r=="number"?Math.abs(r)<=1:!0}},{match:["Add",["Multiply","__a",["Sin","_x"]],"__b"],replace:["Subtract","Pi",["Arcsin",["Divide",["Negate","__b"],"__a"]]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__a,t=e.__b;if(!n||n.isSame(0))return!1;let i=t.div(n).neg(),r=ce(i);return r===void 0?!0:typeof r=="number"?Math.abs(r)<=1:!0}},{match:["Add",["Sin","_x"],"__b"],replace:["Arcsin",["Negate","__b"]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__b,t=ce(n);return t===void 0?!0:typeof t=="number"?Math.abs(t)<=1:!0}},{match:["Add",["Sin","_x"],"__b"],replace:["Subtract","Pi",["Arcsin",["Negate","__b"]]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__b,t=ce(n);return t===void 0?!0:typeof t=="number"?Math.abs(t)<=1:!0}},{match:["Add",["Multiply","__a",["Cos","_x"]],"__b"],replace:["Arccos",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__a,t=e.__b;if(!n||n.isSame(0))return!1;let i=t.div(n).neg(),r=ce(i);return r===void 0?!0:typeof r=="number"?Math.abs(r)<=1:!0}},{match:["Add",["Multiply","__a",["Cos","_x"]],"__b"],replace:["Negate",["Arccos",["Divide",["Negate","__b"],"__a"]]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__a,t=e.__b;if(!n||n.isSame(0))return!1;let i=t.div(n).neg(),r=ce(i);return r===void 0?!0:typeof r=="number"?Math.abs(r)<=1:!0}},{match:["Add",["Cos","_x"],"__b"],replace:["Arccos",["Negate","__b"]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__b,t=ce(n);return t===void 0?!0:typeof t=="number"?Math.abs(t)<=1:!0}},{match:["Add",["Cos","_x"],"__b"],replace:["Negate",["Arccos",["Negate","__b"]]],useVariations:!0,condition:e=>{if(!pe(e))return!1;let n=e.__b,t=ce(n);return t===void 0?!0:typeof t=="number"?Math.abs(t)<=1:!0}},{match:["Add",["Multiply","__a",["Tan","_x"]],"__b"],replace:["Arctan",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:e=>pe(e)?!e.__a.isSame(0):!1},{match:["Add",["Tan","_x"],"__b"],replace:["Arctan",["Negate","__b"]],useVariations:!0,condition:pe},{match:["Add",["Multiply","__a",["Cot","_x"]],"__b"],replace:["Arccot",["Divide",["Negate","__b"],"__a"]],useVariations:!0,condition:e=>pe(e)?!e.__a.isSame(0):!1},{match:["Add",["Cot","_x"],"__b"],replace:["Arccot",["Negate","__b"]],useVariations:!0,condition:pe}];function iN(e,n){if(!m(e,"Add"))return e;let t=e.ops;if(t.length===0)return e;let i=t.map(s=>s.denominator).filter(s=>!s.isSame(1));if(i.length===0)return e;let r=[];for(let s of i){let a=!1;for(let u of r){if(s.isSame(u)){a=!0;break}if(_(s)&&_(u)&&s.symbol===u.symbol){a=!0;break}}a||r.push(s)}let o=r[0];for(let s=1;s<r.length;s++)o=o.mul(r[s]);return e.mul(o).simplify()}function rN(e,n){if(!m(e,"Add"))return e;let t=e.engine,i=e.ops;if(i.length===0)return e;let r=null,o=-1;for(let f=0;f<i.length;f++){let p=i[f];if(p.operator==="Sqrt"){r=p,o=f;break}if(m(p,"Multiply")){for(let d of p.ops)if(d.operator==="Sqrt")break}}if(!r||o<0||!m(r))return e;let s=r.op1;if(!s||!s.has(n))return e;let a=i.filter((f,p)=>p!==o);if(a.length===0)return e;let u;if(a.length===1?u=a[0].neg():u=t.function("Add",a).neg(),u.has("Sqrt"))return e;let l=u.mul(u);return s.sub(l).simplify()}function oN(e,n){if(!m(e,"Add"))return null;let t=e.engine,i=e.ops;if(i.length<2)return null;let r=[];for(let p=0;p<i.length;p++){let d=i[p];if(m(d,"Sqrt")&&d.op1){r.push({term:d,arg:d.op1,index:p});continue}if(m(d,"Negate")&&m(d.op1)&&d.op1.operator==="Sqrt"&&m(d.op1)&&d.op1.op1){r.push({term:d,arg:d.op1.op1,index:p});continue}if(m(d,"Multiply")){for(let g of d.ops)if(m(g,"Sqrt")&&g.op1){r.push({term:d,arg:g.op1,index:p});break}}}if(r.length!==2||!r[0].arg.has(n)||!r[1].arg.has(n))return null;let o=new Set(r.map(p=>p.index)),s=i.filter((p,d)=>!o.has(d)),a;if(s.length===0||(s.length===1?a=s[0].neg():a=t.function("Add",s).neg(),a.has(n)))return null;let u=r[0].arg,l=r[1].arg,c=1,f=1;if(r[0].term.operator==="Negate"&&(c=-1),m(r[0].term,"Multiply")){let p=r[0].term.ops.find(h=>h.operator!=="Sqrt");p?.isNegative&&(c=-1);let d=p?.abs().N(),g=E(d)?d.numericValue:void 0;if(g!==1&&g!==void 0)return null}if(r[1].term.operator==="Negate"&&(f=-1),m(r[1].term,"Multiply")){let p=r[1].term.ops.find(h=>h.operator!=="Sqrt");p?.isNegative&&(f=-1);let d=p?.abs().N(),g=E(d)?d.numericValue:void 0;if(g!==1&&g!==void 0)return null}return c!==1?f===1?Gb(t,l,u,a,c,n):null:Gb(t,u,l,a,f,n)}function Gb(e,n,t,i,r,o){let s=i.mul(i),a=n.sub(s).sub(t).simplify(),l=e.number(4).mul(s).mul(t).simplify(),f=a.mul(a).simplify().sub(l).simplify(),p=Bn(f,o);if(p.length===0)return null;let d=[];for(let g of p){let h=n.subs({[o]:g}).N(),b=t.subs({[o]:g}).N();if(h.isNegative||b.isNegative)continue;let y=h.sqrt(),x=b.sqrt(),N=r===1?y.add(x):y.sub(x),T=i.N(),I=N.sub(T).abs().N(),M=ce(I);(Wb(M)??0)<1e-9&&d.push(g)}return d.length>0?d:null}function sN(e,n){if(!m(e,"Add"))return null;let t=e.engine,i=e.ops;if(i.length===0)return null;let r=null,o=-1;for(let x=0;x<i.length;x++)if(i[x].operator==="Sqrt"){r=i[x],o=x;break}if(!r||o<0||!m(r))return null;let s=r.op1;if(!s)return null;let a=!1;if(m(s,"Add"))for(let x of s.ops){if(m(x,"Sqrt")&&_(x.op1,n)){a=!0;break}if(m(x,"Negate")&&m(x.op1,"Sqrt")&&_(x.op1.op1,n)){a=!0;break}if(m(x,"Multiply")&&x.ops.some(N=>m(N,"Sqrt")&&_(N.op1,n))){a=!0;break}}if(!a)return null;let u=i.filter((x,N)=>N!==o);if(u.length===0)return null;let l;if(u.length===1?l=u[0].neg():l=t.function("Add",u).neg(),l.has(n))return null;let c="__internalU",f=t.symbol(c),d=s.replace({match:["Sqrt",n],replace:f},{recursive:!0})?.subs({[n]:t.box(["Power",c,2])});if(!d)return null;let g=l.mul(l),h=d.sub(g).simplify();t.pushScope(),t.declare(c,{type:"real"});let b;try{b=Bn(h,c)}finally{t.popScope()}if(b.length===0)return null;let y=[];for(let x of b){let N=x.N();if(N.isNegative)continue;let T=ce(N);if(T!==void 0){let M=Wb(T);if(M!==void 0&&M<-1e-10)continue}let I=x.mul(x).simplify();y.push(I)}return y.length>0?y:null}function Bn(e,n){let t=e.engine;if(m(e,"Equal")){let c=Ne(e.op1),f=Ne(e.op2);e=c.sub(f).simplify()}else e=Ne(e).simplify();let i=e;e=iN(e);let r=oN(e,n);if(r!==null)return r;let o=sN(e,n);if(o!==null)return Hb(i,n,o);e=rN(e,n);let s=t.getRuleSet("solve-univariate"),a=[e.subs({[n]:"_x"},{canonical:!1})];t.pushScope();let u=[];try{let c=t.symbol(n).type.type;if(t.declare("_x",typeof c=="string"?c:"number"),u=a.flatMap(f=>Ir(f,s,{_x:t.symbol("_x")},{useVariations:!0,canonical:!0})),u.length===0&&(a=a.flatMap(f=>Zb(f)),u=a.flatMap(f=>Ir(f,s,{_x:t.symbol(n)},{useVariations:!0,canonical:!0}))),u.length===0&&(a=a.flatMap(f=>Ne(f.canonical)).filter(f=>f!==null),a=a.flatMap(f=>Zb(f)),u=a.flatMap(f=>Ir(f,s,{_x:t.symbol(n)},{useVariations:!0,canonical:!0}))),u.length===0&&ae(i,n)>=3){let p=uN(i,n,t);p.length>0&&(u=p)}}finally{t.popScope()}let l=Hb(i,n,u.map(c=>c.evaluate().simplify()));return aN(t,n,l)}var Qb=[{match:["Add",["Abs",["Add",["Multiply","__a","_x"],"__b"]],"__c"],replace:["Add",["Multiply","__a","_x"],"__b","__c"]},{match:["Add",["Abs",["Add",["Multiply","__a","_x"],"__b"]],"__c"],replace:["Add",["Negate",["Multiply","__a","_x"]],["Negate","__b"],"__c"]},{match:["Multiply","__a",["Power","_b","_n"]],replace:"_b",condition:({__a:e,_b:n,_n:t})=>!e.has("_x")&&n.has("_x")&&!t.isSame(0)&&!t.has("_x")},{match:["Multiply","__a",["Sqrt","_b"]],replace:["Multiply",["Square","_a"],"__b"],condition:({_b:e})=>e.has("_x")},{match:["Divide","_a","_b"],replace:"_a",condition:({_a:e,_b:n})=>e.has("_x")&&!n.isSame(0)},{match:["Multiply","__a","_b"],replace:"_b",condition:({__a:e,_b:n})=>!e.has("_x")&&n.has("_x")},{match:["Add",["Ln","_a"],["Ln","_b"],"__c"],replace:["Add",["Ln",["Multiply","_a","_b"]],"__c"]},{match:["Multiply",["Exp","__a"],["Exp","__b"],"__c"],replace:["Multiply",["Exp",["Add","_a","_b"]],"__c"]},{match:["Ln","_a"],replace:["Subtract","_a",1],condition:({_a:e})=>e.has("_x")},{match:["Sin","_a"],replace:"_a",condition:({_a:e})=>e.has("_x")},{match:["Cos","_a"],replace:["Subtract","_a",["Divide","Pi",2]],condition:({_a:e})=>e.has("_x")},{match:["Tan","_a"],replace:"_a",condition:({_a:e})=>e.has("_x")},{match:["Add",["Sin","_a"],["Cos","_a"]],replace:1,condition:({_a:e})=>e.has("_x")},{match:["Subtract",["Square",["Sin","_a"]],["Square",["Cos","_a"]]],replace:["PlusMinus",["Sin","_a"],["Divide",["Sqrt",2],2]],condition:({_a:e})=>e.has("_x")}];function Zb(e){let n=e.engine,t=n.getRuleSet("harmonization");return Ir(e,t,{_x:n.symbol("_x")})}function Hb(e,n,t){let i=t.filter(o=>{let s=e.subs({[n]:o}).canonical.evaluate();return s===null||!s.isValid||s.isNaN||s.has(n)?!1:s.isEqual(0)}),r=[];for(let o of i)r.some(a=>a.isSame(o)||a.isEqual(o))||r.push(o);return r}function aN(e,n,t){let i=e.symbol(n).type,r=i.type;return typeof r!="string"||r==="number"||r==="unknown"?t:t.filter(o=>{let s=o.evaluate();return i.matches("integer")||i.matches("finite_integer")?s.isInteger===!0:i.matches("rational")||i.matches("finite_rational")?s.isRational===!0:i.matches("real")||i.matches("finite_real")?s.isReal===!0:!0})}function uN(e,n,t){let i=$e(e,n);if(!i)return[];let r=i.length-1;if(r<1)return[];let o=W(i[0]),s=W(i[r]);if(s===null||o===null)return[];if(s===0||o===0)return[];let a=d=>{d=Math.abs(d);let g=[];for(let h=1;h*h<=d;h++)d%h===0&&(g.push(h),h!==d/h&&g.push(d/h));return g},u=a(o),l=a(s),c=[],f=new Set;for(let d of u)for(let g of l)for(let h of[1,-1]){let b=h*d/g;f.has(b)||(f.add(b),c.push(b))}if(c.length>100)return[];let p=[];for(let d of c){let g=t.number(d);e.subs({[n]:g}).N().isSame(0)&&p.push(g)}return p}function Xb(e,n){if(!e.has(n))return 0;let t=e.operator;return t==="Ln"||t==="Log"||t==="Log2"||t==="Log10"?5:t==="Arcsin"||t==="Arccos"||t==="Arctan"||t==="Arcsec"||t==="Arccsc"||t==="Arccot"?4:v(e)===n||t==="Power"&&m(e)&&v(e.op1)===n&&!e.op2.has(n)||t==="Sqrt"&&m(e)&&e.op1.has(n)?3:t==="Sin"||t==="Cos"||t==="Tan"||t==="Sec"||t==="Csc"||t==="Cot"?2:t==="Exp"||t==="Power"&&m(e)&&!e.op1.has(n)&&e.op2.has(n)?1:3}function t0(e,n,t=0){if(e.length<2||t>2)return null;let i=[...e].sort((p,d)=>Xb(d,n)-Xb(p,n)),r=i[0],o=i.slice(1),s=o.length===1?o[0]:ke(...o),a=Ce(r,n);if(!a)return null;let u=Vu(s,n);if(!u||u.operator==="Integrate")return null;let l=r.mul(u),c=u.mul(a),f=lN(c,n,t+1);return!f||f.operator==="Integrate"?null:l.sub(f).simplify()}function Vu(e,n){let t=e.engine;if(v(e)===n)return t.box(["Divide",["Power",e,2],2]).simplify();if(!e.has(n))return t.box(["Multiply",e,t.symbol(n)]).simplify();if(m(e,"Sin")&&v(e.op1)===n)return t.box(["Negate",["Cos",n]]);if(m(e,"Cos")&&v(e.op1)===n)return t.box(["Sin",n]);if(m(e,"Exp")&&v(e.op1)===n||m(e,"Power")&&v(e.op1)==="ExponentialE"&&v(e.op2)===n)return e;if(m(e,"Power")&&v(e.op1)===n){let i=e.op2;if(!i.has(n)&&!i.isSame(-1))return t.box(["Divide",["Power",n,["Add",i,1]],["Add",i,1]]).simplify()}return null}function lN(e,n,t){let i=Vu(e,n);if(i)return i;if(m(e,"Multiply")){let r=e.ops.filter(o=>o.has(n));if(r.length>=2){let o=t0(r,n,t);if(o){let s=e.ops.filter(a=>!a.has(n));return s.length>0?ke(...s).mul(o):o}}}return wn(e,n)}function Kb(e,n){if(!m(e,"Multiply"))return null;let t=e.engine,i=e.ops;for(let r=0;r<i.length;r++){let o=i[r],s=i0(o,n);if(!s)continue;let{outer:a,inner:u}=s,l=Ce(u,n);if(!l)continue;let c=i.filter((y,x)=>x!==r),f=c.length===1?c[0]:ke(...c),p=fN(f,l,n);if(p===null)continue;let d=t.symbol("_u_"),g=r0(a,d,t),h=Vu(g,"_u_");if(!h)continue;let b=h.subs({_u_:u});return p.isSame(1)?b.simplify():p.mul(b).simplify()}return null}function i0(e,n){let t=e.operator;if(!t)return null;if(["Sin","Cos","Tan","Sec","Csc","Cot","Exp","Ln","Sinh","Cosh","Tanh","Sqrt"].includes(t)&&m(e)&&e.nops===1){let r=e.op1;if(v(r)===n)return null;if(r.has(n))return{outer:t,inner:r}}if(t==="Power"&&m(e)&&v(e.op1)==="ExponentialE"){let r=e.op2;if(v(r)===n)return null;if(r.has(n))return{outer:"Exp",inner:r}}return null}function r0(e,n,t){return e==="Exp"?t.box(["Power","ExponentialE",n]):t.box([e,n])}function cN(e,n){let t=e.engine,i=i0(e,n);if(!i)return null;let{outer:r,inner:o}=i,s=null;if(m(o,"Multiply")){let f=o.ops,p=f.find(d=>v(d)===n);if(p){let d=f.filter(g=>g!==p);d.every(g=>!g.has(n))&&(s=d.length===1?d[0]:t.box(["Multiply",...d]))}}else if(m(o,"Add")){let f=o.ops,p=null,d=[];for(let g of f)if(!g.has(n))d.push(g);else if(v(g)===n)p=t.One;else if(m(g,"Multiply")){let h=g.ops,b=h.find(y=>v(y)===n);if(b){let y=h.filter(x=>x!==b);y.every(x=>!x.has(n))&&(p=y.length===1?y[0]:t.box(["Multiply",...y]))}}else return null;p&&(s=p)}if(!s)return null;let a=t.symbol("_u_"),u=r0(r,a,t),l=Vu(u,"_u_");return l?l.subs({_u_:o}).div(s).simplify():null}function fN(e,n,t){let i=e.engine;if(e.isSame(n))return i.One;let r=e.div(n).simplify();return r.has(t)?null:r}function e0(e,n){if(e.length!==2)return null;let t=e[0].engine,i=null,r=null;for(let u of e)m(u,"Exp")&&v(u.op1)===n||m(u,"Power")&&v(u.op1)==="ExponentialE"&&v(u.op2)===n?i=u:(u.operator==="Sin"||u.operator==="Cos")&&(r=u);if(!i||!m(r))return null;let o=r.operator,s=r.op1;if(v(s)===n)return o==="Sin"?t.box(["Multiply",["Rational",1,2],["Exp",n],["Subtract",["Sin",n],["Cos",n]]]).simplify():t.box(["Multiply",["Rational",1,2],["Exp",n],["Add",["Sin",n],["Cos",n]]]).simplify();if(m(s,"Multiply")){let u=null,l=!1;for(let c of s.ops)v(c)===n?l=!0:c.has(n)||(u=u?u.mul(c):c);if(l&&u){let c=u,f=t.box(["Exp",n]),p=t.box(["Add",["Power",c.json,2],1]),d=f.div(p);if(o==="Sin"){let g=r,h=t.box(["Cos",s.json]);return d.mul(g.sub(c.mul(h))).simplify()}else{let g=t.box(["Sin",s.json]),h=r;return d.mul(c.mul(g).add(h)).simplify()}}}let a=Ls(s,n);if(a){let{a:u}=a,l=t.box(["Exp",n]),c=t.box(["Add",["Power",u.json,2],1]),f=l.div(c);if(o==="Sin"){let p=r,d=t.box(["Cos",s.json]);return f.mul(p.sub(u.mul(d))).simplify()}else{let p=t.box(["Sin",s.json]),d=r;return f.mul(u.mul(p).add(d)).simplify()}}return null}function Z(e){for(let[n,t]of Object.entries(e))if(n!=="x"&&n!=="_x"&&t.has("_x"))return!1;return!0}var pN=[{match:["Power",["Add",["Multiply","_a","_x"],"__b"],"_n"],replace:["Divide",["Power",["Add",["Multiply","_a","_x"],"__b"],["Add","_n",1]],["Multiply","_a",["Add","_n",1]]],condition:e=>Z(e)&&!e._n.isSame(-1)},{match:["Power",["Add",["Multiply","_a","_x"],"__b"],1/2],replace:["Divide",["Multiply",2,["Power",["Add",["Multiply","_a","_x"],"__b"],3]],["Multiply",3,"_a"]],condition:e=>Z(e)&&E(e._a)},{match:["Power",["Add",["Multiply","_a","_x"],"__b"],1/3],replace:["Divide",["Multiply",3,["Power",["Add",["Multiply","_a","_x"],"__b"],4]],["Multiply",4,"_a"]],condition:e=>Z(e)&&E(e._a)},{match:["Power","_a","_x"],replace:["Divide",["Power","_a","_x"],["Ln","_a"]],condition:e=>Z(e)&&!e._a.has("_x")},{match:["Power",["Add",["Multiply","_a","_x"],"__b"],-1],replace:["Divide",["Ln",["Abs",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Power",["Add","_x","__b"],-1],replace:["Ln",["Abs",["Add","_x","__b"]]],condition:e=>Z(e)&&_(e._x)},{match:["Divide",1,["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Divide",1,["Add","_x","__b"]],replace:["Ln",["Abs",["Add","_x","__b"]]],condition:e=>Z(e)&&_(e._x)},{match:["Ln",["Add",["Multiply","_a","_x"],"__b"]],replace:["Subtract",["Multiply",["Add",["Multiply","_a","_x"],"__b"],["Ln","_x"]],["Subtract",["Multiply","_a","_x"],"__b"]],condition:Z},{match:["Exp",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Exp",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Power",["Sech",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Tanh",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Power",["Sin",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Add","_x",["Divide",["Sin",["Multiply",2,"_a","_x"]],2]],2],condition:Z},{match:["Power",["Cos",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Add","_x",["Divide",["Sin",["Multiply",2,"_a","_x"]],2]],2],condition:Z},{match:["Sin",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Cos",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Cos",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Sin",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Tan",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Sec",["Add",["Multiply","_a","_x"],"__b"]]]],"_a"],condition:Z},{match:["Sec",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Add",["Sec",["Add",["Multiply","_a","_x"],"__b"]],["Tan",["Add",["Multiply","_a","_x"],"__b"]]]]],"_a"],condition:Z},{match:["Csc",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Abs",["Add",["Csc",["Add",["Multiply","_a","_x"],"__b"]],["Cot",["Add",["Multiply","_a","_x"],"__b"]]]]]],"_a"],condition:Z},{match:["Cot",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Abs",["Sin",["Add",["Multiply","_a","_x"],"__b"]]]]],"_a"],condition:Z},{match:["Power",["Sec",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Tan",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Power",["Csc",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Negate",["Cot",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Multiply",["Sec",["Add",["Multiply","_a","_x"],"__b"]],["Tan",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Divide",["Sec",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Multiply",["Csc",["Add",["Multiply","_a","_x"],"__b"]],["Cot",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Divide",["Negate",["Csc",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Sinh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Cosh",["Add",["Multiply","_a","_x"],"__b"]]]],"_a"],condition:Z},{match:["Cosh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Sinh",["Add",["Multiply","_a","_x"],"__b"]]]],"_a"],condition:Z},{match:["Tanh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Sech",["Add",["Multiply","_a","_x"],"__b"]]]],"_a"],condition:Z},{match:["Sech",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Abs",["Tanh",["Add",["Multiply","_a","_x"],"__b"]]]],"_a"],condition:Z},{match:["Csch",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Abs",["Coth",["Add",["Multiply","_a","_x"],"__b"]]]]],"_a"],condition:Z},{match:["Coth",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Abs",["Csch",["Add",["Multiply","_a","_x"],"__b"]]]]],"_a"],condition:Z},{match:["Arsinh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Add",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]],"_a"],condition:Z},{match:["Arcosh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Subtract",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]],"_a"],condition:Z},{match:["Artanh",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Divide",["Add",1,["Add",["Multiply","_a","_x"],"__b"]],["Subtract",1,["Add",["Multiply","_a","_x"],"__b"]]]],["Multiply",2,"_a"]],condition:Z},{match:["Arsech",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Subtract",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]]],"_a"],condition:Z},{match:["Arcsch",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Add",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]]],"_a"],condition:Z},{match:["Arcoth",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Ln",["Divide",["Add",["Add",["Multiply","_a","_x"],"__b"],1],["Subtract",["Add",["Multiply","_a","_x"],"__b"],1]]],["Multiply",2,"_a"]],condition:Z},{match:["Arcsch",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Add",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]]],"_a"],condition:Z},{match:["Arcoth",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Negate",["Ln",["Add",["Add",["Multiply","_a","_x"],"__b"],["Sqrt",["Subtract",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]]]]],"_a"],condition:Z},{match:["Arctan",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Subtract",["Multiply",["Add",["Multiply","_a","_x"],"__b"],["Arctan",["Add",["Multiply","_a","_x"],"__b"]]],["Multiply",["Rational",1,2],["Ln",["Add",1,["Power",["Add",["Multiply","_a","_x"],"__b"],2]]]]],"_a"],condition:Z},{match:["Arccos",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Subtract",["Multiply",["Add",["Multiply","_a","_x"],"__b"],["Arccos",["Add",["Multiply","_a","_x"],"__b"]]],["Sqrt",["Subtract",1,["Power",["Add",["Multiply","_a","_x"],"__b"],2]]]],"_a"],condition:Z},{match:["Arcsin",["Add",["Multiply","_a","_x"],"__b"]],replace:["Divide",["Add",["Multiply",["Add",["Multiply","_a","_x"],"__b"],["Arcsin",["Add",["Multiply","_a","_x"],"__b"]]],["Sqrt",["Subtract",1,["Power",["Add",["Multiply","_a","_x"],"__b"],2]]]],"_a"],condition:Z},{match:["Divide",1,["Add",["Power",["Add",["Multiply","_a","_x"],"__b"],2],1]],replace:["Divide",["Arctan",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Divide",1,["Add",1,["Power",["Add",["Multiply","_a","_x"],"__b"],2]]],replace:["Divide",["Arctan",["Add",["Multiply","_a","_x"],"__b"]],"_a"],condition:Z},{match:["Power",["Csch",["Add",["Multiply","_a","_x"],"__b"]],2],replace:["Divide",["Negate",["Coth",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Multiply",["Sech",["Add",["Multiply","_a","_x"],"__b"]],["Tanh",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Divide",["Negate",["Sech",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Multiply",["Csch",["Add",["Multiply","_a","_x"],"__b"]],["Coth",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Divide",["Negate",["Csch",["Add",["Multiply","_a","_x"],"__b"]]],"_a"],condition:Z},{match:["Multiply",["Exp","_x"],["Sin","_x"]],replace:["Multiply",["Rational",1,2],["Exp","_x"],["Subtract",["Sin","_x"],["Cos","_x"]]],condition:e=>Z(e)&&_(e._x)},{match:["Multiply",["Exp","_x"],["Cos","_x"]],replace:["Multiply",["Rational",1,2],["Exp","_x"],["Add",["Sin","_x"],["Cos","_x"]]],condition:e=>Z(e)&&_(e._x)},{match:["Multiply",["Sin","_x"],["Exp","_x"]],replace:["Multiply",["Rational",1,2],["Exp","_x"],["Subtract",["Sin","_x"],["Cos","_x"]]],condition:e=>Z(e)&&_(e._x)},{match:["Multiply",["Cos","_x"],["Exp","_x"]],replace:["Multiply",["Rational",1,2],["Exp","_x"],["Add",["Sin","_x"],["Cos","_x"]]],condition:e=>Z(e)&&_(e._x)},{match:["Multiply",["Exp","_x"],["Sin",["Multiply","_a","_x"]]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Subtract",["Sin",["Multiply","_a","_x"]],["Multiply","_a",["Cos",["Multiply","_a","_x"]]]]],condition:Z},{match:["Multiply",["Exp","_x"],["Cos",["Multiply","_a","_x"]]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Add",["Multiply","_a",["Sin",["Multiply","_a","_x"]]],["Cos",["Multiply","_a","_x"]]]],condition:Z},{match:["Multiply",["Sin",["Multiply","_a","_x"]],["Exp","_x"]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Subtract",["Sin",["Multiply","_a","_x"]],["Multiply","_a",["Cos",["Multiply","_a","_x"]]]]],condition:Z},{match:["Multiply",["Cos",["Multiply","_a","_x"]],["Exp","_x"]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Add",["Multiply","_a",["Sin",["Multiply","_a","_x"]]],["Cos",["Multiply","_a","_x"]]]],condition:Z},{match:["Multiply",["Exp","_x"],["Sin",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Subtract",["Sin",["Add",["Multiply","_a","_x"],"__b"]],["Multiply","_a",["Cos",["Add",["Multiply","_a","_x"],"__b"]]]]],condition:Z},{match:["Multiply",["Exp","_x"],["Cos",["Add",["Multiply","_a","_x"],"__b"]]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Add",["Multiply","_a",["Sin",["Add",["Multiply","_a","_x"],"__b"]]],["Cos",["Add",["Multiply","_a","_x"],"__b"]]]],condition:Z},{match:["Multiply",["Sin",["Add",["Multiply","_a","_x"],"__b"]],["Exp","_x"]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Subtract",["Sin",["Add",["Multiply","_a","_x"],"__b"]],["Multiply","_a",["Cos",["Add",["Multiply","_a","_x"],"__b"]]]]],condition:Z},{match:["Multiply",["Cos",["Add",["Multiply","_a","_x"],"__b"]],["Exp","_x"]],replace:["Multiply",["Divide",["Exp","_x"],["Add",["Power","_a",2],1]],["Add",["Multiply","_a",["Sin",["Add",["Multiply","_a","_x"],"__b"]]],["Cos",["Add",["Multiply","_a","_x"],"__b"]]]],condition:Z}];function Ls(e,n){let t=e.engine;if(v(e)===n)return{a:t.One,b:t.Zero};if(!m(e,"Add"))return null;let i=e.ops,r=null,o=t.Zero;for(let s of i)if(!s.has(n))o=o.add(s);else if(v(s)===n)r=r?r.add(t.One):t.One;else if(m(s,"Multiply")){let a=s.ops;if(a.find(l=>v(l)===n)){let l=a.filter(c=>v(c)!==n);if(l.every(c=>!c.has(n))){let c=l.length===1?l[0]:ke(...l);r=r?r.add(c):c}else return null}else return null}else return null;return r===null?null:{a:r,b:o}}function So(e,n){let t=e.engine;if(e.operator!=="Add"){if(m(e,"Power")&&v(e.op1)===n&&e.op2.isSame(2))return{a:t.One,b:t.Zero,c:t.Zero};if(m(e,"Multiply")){let a=e.ops,u=a.find(l=>m(l,"Power")&&v(l.op1)===n&&l.op2.isSame(2));if(u){let l=a.filter(f=>f!==u),c=l.length===0?t.One:l.length===1?l[0]:t.box(["Multiply",...l]);if(!c.has(n))return{a:c,b:t.Zero,c:t.Zero}}}return null}if(!m(e))return null;let i=e.ops,r=t.Zero,o=t.Zero,s=t.Zero;for(let a of i)if(!a.has(n))s=s.add(a);else if(v(a)===n)o=o.add(t.One);else if(m(a,"Power")&&v(a.op1)===n&&a.op2.isSame(2))r=r.add(t.One);else if(m(a,"Multiply")){let u=a.ops,l=u.find(f=>m(f,"Power")&&v(f.op1)===n&&f.op2.isSame(2));if(l){let f=u.filter(p=>p!==l);if(f.every(p=>!p.has(n))){let p=f.length===0?t.One:f.length===1?f[0]:t.box(["Multiply",...f]);r=r.add(p);continue}}if(u.find(f=>v(f)===n)){let f=u.filter(p=>v(p)!==n);if(f.every(p=>!p.has(n))){let p=f.length===0?t.One:f.length===1?f[0]:t.box(["Multiply",...f]);o=o.add(p);continue}}return null}else return null;return r.isSame(0)?null:{a:r.simplify(),b:o.simplify(),c:s.simplify()}}function wn(e,n){if(m(e,"Function")||m(e,"Block")||m(e,"Delimiter"))return wn(e.op1,n);let t=e.engine;if(v(e)===n)return t.box(["Divide",["Power",e,2],2]);if(!e.has(n))return t.box(["Multiply",e,t.symbol(n)]);if(m(e,"Add")){let a=e.ops.map(u=>wn(u,n));return fe(...a).evaluate()}if(m(e,"Negate"))return wn(e.op1,n).neg();if(m(e,"Multiply")){let a=[],u=[];for(let f of e.ops)f.has(n)?u.push(f):a.push(f);if(a.length>0){let f=ke(...a);if(u.length===0)return f.mul(t.symbol(n));let p=u.length===1?u[0]:ke(...u);if(u.length>1){let g=Kb(p,n);if(g)return f.mul(g).evaluate()}if(u.length===2){let g=e0(u,n);if(g)return f.mul(g).evaluate()}let d=wn(p,n);return f.mul(d).evaluate()}let l=Kb(e,n);if(l)return l;let c=e0(e.ops,n);if(c)return c;if(e.ops.length>=2){let f=t0(e.ops,n,0);if(f)return f}}if(m(e,"Divide")){let a=No(e,n);if(!a.isSame(e))return wn(a,n);let u=ae(e.op1,n),l=ae(e.op2,n);if(u>=0&&l>=0&&u>=l){let c=Yn(e.op1,e.op2,n);if(c){let[f,p]=c,d=wn(f,n);if(!p.isSame(0)){let g=p.div(e.op2),h=wn(g,n);return fe(d,h)}return d}}if(!e.op2.has(n)){let c=wn(e.op1,n);return e.engine.box(["Divide",c,e.op2])}if(e.op1.isSame(1)&&v(e.op2)===n)return t.box(["Ln",["Abs",n]]);if(!e.op1.has(n)&&v(e.op2)===n)return t.box(["Multiply",e.op1,["Ln",["Abs",n]]]);if(!e.op1.has(n)&&e.op2.operator==="Add"&&m(e.op2)&&e.op2.nops===2){let c=e.op2.ops,f=c.find(d=>m(d,"Power")&&v(d.op1)===n&&d.op2.isSame(2)),p=c.find(d=>d.isSame(1));if(f&&p){let d=t.box(["Arctan",n]);return e.op1.isSame(1)?d:e.op1.mul(d)}}if(e.op1.isSame(1)&&e.op2.operator==="Multiply"&&m(e.op2)&&e.op2.nops===2){let c=e.op2.ops,f=c.find(d=>v(d)===n),p=c.find(d=>d.operator==="Sqrt");if(f&&m(p)){let d=p.op1;if(m(d,"Add")&&d.nops===2){let g=d.ops,h=g.find(y=>m(y,"Power")&&v(y.op1)===n&&y.op2.isSame(2)),b=g.find(y=>y.isSame(-1));if(h&&b)return t.box(["Arcsec",n])}}}if(e.op1.has(n)){let c=Ce(e.op2,n);if(c&&!c.isSame(0)){let f=e.op1.div(c).simplify();if(!f.has(n)){let p=t.box(["Ln",["Abs",e.op2]]);return f.isSame(1)?p:f.mul(p)}}}if((e.op1.isSame(1)||!e.op1.has(n))&&e.op2.operator==="Multiply"&&m(e.op2)){let c=e.op2.ops;for(let f=0;f<c.length;f++){let p=c[f],d=Ce(p,n);if(!d||d.isSame(0))continue;let g=c.filter((y,x)=>x!==f),h=g.length===1?g[0]:ke(...g),b=e.op1.div(h.mul(d)).simplify();if(!b.has(n)){let y=t.box(["Ln",["Abs",p]]);return b.isSame(1)?y:b.mul(y)}}}if(e.op1.isSame(1)||!e.op1.has(n)){let c=Ls(e.op2,n);if(c){let{a:f,b:p}=c,d=t.box(["Ln",["Abs",e.op2]]);if(f.isSame(1))return e.op1.isSame(1)?d:e.op1.mul(d);let g=d.div(f);return e.op1.isSame(1)?g:e.op1.mul(g)}}if(e.op1.isSame(1)||!e.op1.has(n)){let c=e.op2;if(m(c,"Power")){let f=c.op1,d=c.op2.re;if(d!==null&&Number.isInteger(d)&&d>1){let g=Ls(f,n);if(g){let{a:h}=g,b=t.number(-(d-1)),x=t.One.div(h.mul(t.number(d-1))).neg().mul(t.box(["Power",f,b]));return e.op1.isSame(1)||(x=e.op1.mul(x)),x.simplify()}}}}if(e.op1.isSame(1)||!e.op1.has(n)){let c=So(e.op2,n);if(c){let{a:f,b:p,c:d}=c,h=p.mul(p).sub(t.number(4).mul(f).mul(d)).simplify().N().re;if(h!==null&&h<0){let b=t.number(4).mul(f).mul(d).sub(p.mul(p)).simplify(),y=t.box(["Sqrt",b]).simplify(),N=t.number(2).mul(f).mul(t.symbol(n)).add(p).simplify().div(y).simplify(),T=t.box(["Arctan",N]),I=t.number(2).div(y).mul(T).simplify();return e.op1.isSame(1)||(I=e.op1.mul(I)),I}}}if(e.op1.isSame(1)||!e.op1.has(n)){let c=e.op2;if(m(c,"Power")){let f=c.op1,d=c.op2.re;if(d!==null&&Number.isInteger(d)&&d>1){let g=So(f,n);if(g&&g.b.isSame(0)&&g.a.isSame(1)){let h=g.c,b=t.symbol(n),y=t.box(["Power",f,t.number(d-1)]),N=t.One.div(t.number(2).mul(h).mul(t.number(d-1))).mul(b).div(y),T=t.number(2*d-3).div(t.number(2).mul(h).mul(t.number(d-1))),I=d===2?t.One.div(f):t.One.div(t.box(["Power",f,t.number(d-1)])),M=wn(I,n),w=fe(N,T.mul(M)).simplify();return e.op1.isSame(1)||(w=e.op1.mul(w)),w}}}}if(e.op1.isSame(1)||!e.op1.has(n)){let c=e.op1,f=e.op2;if(m(f,"Multiply")&&f.nops===2){let d=f.ops,g=null,h=null,b=null;for(let y of d){let x=Ls(y,n);if(x&&x.a.isSame(1)){g=y,b=x.b.neg();continue}let N=So(y,n);if(N&&N.a.isSame(1)){let I=N.b.mul(N.b).sub(t.number(4).mul(N.c)).simplify().N().re;I!==null&&I<0&&(h=y)}}if(g&&h&&b){let y=So(h,n),{b:x,c:N}=y,T=b,I=T.mul(T).add(x.mul(T)).add(N).simplify(),M=t.One.div(I),w=M.neg(),k=x.add(T).simplify(),P=M.neg().mul(k),F=M.mul(t.box(["Ln",["Abs",g]])),U=w.div(t.number(2)).mul(t.box(["Ln",["Abs",h]])),ge=P.sub(w.mul(x).div(t.number(2))).simplify(),he=t.number(4).mul(N).sub(x.mul(x)).simplify(),le=t.box(["Sqrt",he]).simplify(),Un=t.number(2).mul(t.symbol(n)).add(x).simplify().div(le).simplify(),mn=t.number(2).div(le).simplify(),It=ge.mul(mn).mul(t.box(["Arctan",Un])),Ht=fe(F,U,It).simplify();return c.isSame(1)||(Ht=c.mul(Ht)),Ht}}let p=Bn(f,n);if(p.length>=2){let d=p.map(h=>h.N().re);if(d.every((h,b)=>h!==null&&isFinite(h)&&d.every((y,x)=>b===x||Math.abs(h-y)>1e-10))){let h=[];for(let y=0;y<p.length;y++){let x=t.One;for(let I=0;I<p.length;I++)y!==I&&(x=x.mul(p[y].sub(p[I])));let N=t.One.div(x),T=t.box(["Ln",["Abs",["Add",t.symbol(n),p[y].neg()]]]);h.push(N.mul(T))}let b=fe(...h);return c.isSame(1)||(b=c.mul(b)),b.simplify()}}if(p.length===1){let d=p[0],g=t.symbol(n).sub(d),h=Yn(f,g,n);if(h){let[b,y]=h;if(y.isSame(0)){let x=So(b,n);if(x){let{a:N,b:T,c:I}=x,w=T.mul(T).sub(t.number(4).mul(N).mul(I)).simplify().N().re;if(w!==null&&w<0&&N.isSame(1)){let k=d,P=k.mul(k).add(T.mul(k)).add(I).simplify(),F=t.One.div(P),G=F.neg(),U=T.add(k).simplify(),ge=F.neg().mul(U),he=F.mul(t.box(["Ln",["Abs",g]])),ee=G.div(t.number(2)).mul(t.box(["Ln",["Abs",b]])),Un=ge.sub(G.mul(T).div(t.number(2))).simplify(),mn=t.number(4).mul(I).sub(T.mul(T)).simplify(),It=t.box(["Sqrt",mn]).simplify(),Br=t.number(2).mul(t.symbol(n)).add(T).simplify().div(It).simplify(),bd=t.number(2).div(It).simplify(),Gl=Un.mul(bd).mul(t.box(["Arctan",Br])),Zl=fe(he,ee,Gl).simplify();return c.isSame(1)||(Zl=c.mul(Zl)),Zl}}}}}}return n0(e,n)}if(m(e,"Sqrt")){let a=e.op1;if(m(a,"Divide")&&a.op1.isSame(1)){let u=a.op2;if(m(u,"Add")&&u.nops===2){let l=u.ops,c=l.find(g=>g.isSame(1)),f=l.find(g=>m(g,"Negate")&&g.op1.operator==="Power"&&m(g.op1)&&v(g.op1.op1)===n&&g.op1.op2.isSame(2));if(c&&f)return t.box(["Arcsin",n]);let p=l.find(g=>m(g,"Power")&&v(g.op1)===n&&g.op2.isSame(2));if(c&&p)return t.box(["Arsinh",n]);if(l.find(g=>g.isSame(-1))&&p)return t.box(["Arcosh",n])}}if(m(a,"Add")&&a.nops===2){let u=a.ops,l=u.find(f=>m(f,"Power")&&v(f.op1)===n&&f.op2.isSame(2)),c=u.find(f=>m(f,"Negate")&&f.op1.operator==="Power"&&m(f.op1)&&v(f.op1.op1)===n&&f.op1.op2.isSame(2));if(l||c){let f=u.find(p=>p!==l&&p!==c);if(f&&!f.has(n)){let p=f.N().re;if(c&&p!==null&&p>0){let d=f,g=t.box(["Sqrt",d]).simplify(),h=e,b=t.box(["Multiply",n,h]),y=g.isSame(1)?t.box(["Arcsin",n]):t.box(["Arcsin",["Divide",n,g]]),x=d.mul(y);return t.box(["Multiply",["Rational",1,2],["Add",b,x]])}else if(l&&p!==null&&p>0){let d=f,g=t.box(["Sqrt",d]).simplify(),h=e,b=t.box(["Multiply",n,h]),y=g.isSame(1)?t.box(["Arsinh",n]):t.box(["Arsinh",["Divide",n,g]]),x=d.mul(y);return t.box(["Multiply",["Rational",1,2],["Add",b,x]])}else if(l&&p!==null&&p<0){let d=f.neg(),g=t.box(["Sqrt",d]).simplify(),h=e,b=t.box(["Multiply",n,h]),y=g.isSame(1)?t.box(["Arcosh",n]):t.box(["Arcosh",["Divide",n,g]]),x=d.mul(y);return t.box(["Multiply",["Rational",1,2],["Subtract",b,x]])}}}}}if(m(e,"Exp")&&v(e.op1)===n)return e;if(m(e,"Sin")&&v(e.op1)===n)return t.box(["Negate",["Cos",n]]);if(m(e,"Cos")&&v(e.op1)===n)return t.box(["Sin",n]);if(m(e,"Ln")&&v(e.op1)===n)return t.box(["Subtract",["Multiply",n,["Ln",n]],n]);if(m(e,"Power")){if(v(e.op1)==="ExponentialE"&&v(e.op2)===n)return e;if(v(e.op1)===n){let l=e.op2;if(E(l))return l.isSame(-1)?t.box(["Ln",["Abs",n]]):t.box(["Divide",["Power",n,["Add",l,1]],["Add",l,1]])}let u=e.op2.re;if(u!==null&&Number.isInteger(u)&&u<-1){let l=e.op1,c=Ls(l,n);if(c){let{a:p}=c,d=t.number(u+1);return t.One.div(p.mul(d)).mul(t.box(["Power",l,d])).simplify()}let f=So(l,n);if(f&&f.b.isSame(0)&&f.a.isSame(1)){let p=f.c,d=-u,g=t.symbol(n),h=t.box(["Power",l,t.number(u+1)]),y=t.One.div(t.number(2).mul(p).mul(t.number(d-1))).mul(g).mul(h),x=t.number(2*d-3).div(t.number(2).mul(p).mul(t.number(d-1))),N=t.box(["Power",l,t.number(u+1)]),T=wn(N,n);return fe(y,x.mul(T)).simplify()}}}let i=cN(e,n);if(i)return i;let r=t.rules(pN),o=wr(e).subs({[n]:"_x"},{canonical:!0}),s=Ir(o,r,{_x:t.symbol("_x")},{useVariations:!0,canonical:!0});return s&&s[0]?s[0].subs({_x:n}):n0(e,n)}function n0(e,n){let t=e.engine;return t.function("Integrate",[e,t.symbol(n,{canonical:!1})])}var o0=[{Derivative:{description:"Derivative operator that returns a derivative function.",broadcastable:!1,lazy:!0,signature:"(function, order:number?) -> function",canonical:(e,{engine:n})=>{let t=Qe(e[0].canonical);if(!t)return null;if(!e[1])return n._fn("Derivative",[t]);let i=sn(n,e[1]?.canonical,"number");return n._fn("Derivative",[t,i])},evaluate:e=>{let n=e[0].evaluate(),t=Math.floor(e[1]?.N().re);return $b(n,isNaN(t)?1:t)}},D:{description:"Symbolic partial derivative with respect to one or more variables.",broadcastable:!1,scoped:!0,lazy:!0,signature:"(expression, variable:symbol, variables:symbol+) -> expression",canonical:(e,{engine:n,scope:t})=>{if(_(e[0])&&e[0].canonical.operatorDefinition){let o=e.slice(1),s=n.function(e[0].symbol,o);return n._fn("D",[s,...o],{scope:t})}let i=e[0].canonical;if(m(i)&&i.operator)return n._fn("D",[i,...e.slice(1)],{scope:t});let r=Wr(n,e);return r?n._fn("D",[r,...e.slice(1)],{scope:t}):null},evaluate:(e,{engine:n})=>{let t=e[0].canonical;m(t,"Function")&&(t=t.op1);let i=e.slice(1);i.length===0&&(t=void 0);for(let r of i){let o=v(r);if(!o){t=void 0;break}if(t=Ce(t,o),t===void 0)break}return t=t?.canonical,t?.operator==="D"||t?.operator==="Apply"&&m(t)&&t.op1?.operator==="Derivative"||t&&Ya(t)?t:t?.evaluate()}},ND:{description:"Numerical derivative evaluated at a point.",broadcastable:!1,lazy:!0,signature:"(function, at:number) -> number",canonical:(e,{engine:n})=>{let t=Qe(e[0]);if(!t)return null;let i=sn(n,e[1]?.canonical,"number");return n._fn("ND",[t,i])},evaluate:([e,n],{engine:t})=>{let i=n.N().re;if(isNaN(i))return;let o=t._compile(e).run??ki(e);return t.number(eg(o,i))}},Integrate:{description:"Symbolic integral with optional bounds.",wikidata:"Q80091",broadcastable:!1,lazy:!0,signature:"(function, limits+) -> number",canonical:(e,{engine:n})=>{if(!e[0])return null;let t=Qe(e[0]);if(!t)return null;let i=Nb(e.slice(1),{engine:n});return n._fn("Integrate",[t,...i])},evaluate:(e,{engine:n,numericApproximation:t})=>{if(t){let a=e[0],u=e[1];if(!m(u))return;let[l,c]=[u.op2.N().re,u.op3.N().re];if(isNaN(l)||isNaN(c))return;let f=v(u.op1)??"x",p=a.operator==="Function"?a:n.box(["Function",a,f]),d=n._compile(p),g=d.run??ki(p),h=Ps(g,l,c,d.success?1e7:1e4);return n.box(["PlusMinus",n.number(h.estimate),n.number(h.error)])}let i=e[0],r=m(i)?i.ops.slice(1).map(a=>v(a)):[],o=e.slice(1);if(o.length===0)return;let s=!0;for(let a=o.length-1;a>=0;a--){if(!m(o[a]))continue;let u=o[a],[l,c,f]=u.ops,p=v(l);(!p||p==="Nothing")&&a<r.length&&(p=r[a]),p||(p="x");let d=wn(i,p);if(d.operator!=="Integrate"){let g=d;if(v(c)==="Nothing"&&v(f)==="Nothing")i=g;else{s=!1;let h=n.box(["Function",d,p]);i=n.box(["EvaluateAt",h,c,f])}}else if(v(c)==="Nothing"&&v(f)==="Nothing")i=d;else{s=!1;let g=n.box(["Function",d,p]);i=n.box(["EvaluateAt",g,c,f])}}return i.operator!=="Integrate"?s?Ya(i)?i:i.simplify():i.evaluate({numericApproximation:t}):i}},NIntegrate:{description:"Numerical approximation of a definite integral.",broadcastable:!1,lazy:!0,signature:"(function, limits:(tuple|symbol)?) -> number",canonical:(e,{engine:n})=>{let[t,i,r]=e,o=Qe(t);return!o||!i||!r?null:n._fn("NIntegrate",[o,i.canonical,r.canonical])},evaluate:([e,n,t],{engine:i})=>{let[r,o]=[n.N().re,t.N().re];if(isNaN(r)||isNaN(o))return;let s=i._compile(e),a=s.run??ki(e);return i.number(Ps(a,r,o,s.success?1e7:1e4).estimate)}},Limits:{description:"Limits of a function",complexity:5e3,broadcastable:!1,lazy:!0,signature:"(index:symbol, lower:value, upper:value) -> tuple",canonical:(e,{engine:n})=>qi(e,{engine:n})??null}},{Limit:{description:"Limit of a function",complexity:5e3,broadcastable:!1,lazy:!0,signature:"(function, point:number, direction:number?) -> number",canonical:([e,n,t],{engine:i})=>{let r=Qe(e);return!r||!n?null:t===void 0?i._fn("Limit",[r,n.canonical]):i._fn("Limit",[r,n.canonical,t.canonical])},evaluate:([e,n,t],{engine:i,numericApproximation:r})=>{if(r){let o=n.N().re;if(Number.isNaN(o))return;let a=i._compile(e).run??ki(e);return i.number(ir(a,o,t?t.re:1))}}},NLimit:{description:"Numerical approximation of the limit of a function",complexity:5e3,broadcastable:!1,lazy:!0,signature:"(function, point:number, direction:number?) -> number",canonical:([e,n,t],{engine:i})=>{let r=Qe(e);return!r||!n?null:t===void 0?i._fn("NLimit",[r,n.canonical]):i._fn("NLimit",[r,n.canonical,t.canonical])},evaluate:([e,n,t],{engine:i})=>{let r=n.N().re;if(Number.isNaN(r))return;let s=i._compile(e).run??ki(e);return i.number(ir(s,r,t?t.re:1))}}}];function _f(e){let n=Math.abs(e);return n<=.0031308?12.92*e:(Math.sign(e)||1)*(1.055*Math.pow(n,1/2.4)-.055)}function Nf(e){let n=Math.abs(e);return n<=.04045?e/12.92:(Math.sign(e)||1)*Math.pow((n+.055)/1.055,2.4)}function Fs(e,n,t){e=e/360;let i,r,o;if(n===0)i=r=o=t;else{let s=(l,c,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<.16666666666666666?l+(c-l)*6*f:f<.5?c:f<.6666666666666666?l+(c-l)*(.6666666666666666-f)*6:l),a=t<.5?t*(1+n):t+n-t*n,u=2*t-a;i=s(u,a,e+1/3),r=s(u,a,e),o=s(u,a,e-1/3)}return{r:Math.round(i*255),g:Math.round(r*255),b:Math.round(o*255)}}function ko(e,n,t){e/=255,n/=255,t/=255;let i=Math.max(e,n,t),r=Math.min(e,n,t),o=(i+r)/2;if(i===r)return{h:0,s:0,l:o};let s=i-r,a=o>.5?s/(2-i-r):s/(i+r),u;return i===e?u=((n-t)/s+(n<t?6:0))/6:i===n?u=((t-e)/s+2)/6:u=((e-n)/s+4)/6,{h:u*360,s:a,l:o}}function Mf(e){let n=e.startsWith("#")?e.substring(1):e,t,i,r,o;if(n.length===3)t=parseInt(n[0]+n[0],16),i=parseInt(n[1]+n[1],16),r=parseInt(n[2]+n[2],16);else if(n.length===6)t=parseInt(n.substring(0,2),16),i=parseInt(n.substring(2,4),16),r=parseInt(n.substring(4,6),16);else if(n.length===8)t=parseInt(n.substring(0,2),16),i=parseInt(n.substring(2,4),16),r=parseInt(n.substring(4,6),16),o=parseInt(n.substring(6,8),16)/255;else return{r:0,g:0,b:0};let s={r:t,g:i,b:r};return o!==void 0&&(s.alpha=o),s}function zu(e){return typeof e=="number"?{r:e>>>24&255,g:e>>>16&255,b:e>>>8&255,alpha:(e&255)/255}:typeof e=="string"?Mf(e):"C"in e?Jt(e):"a"in e&&"b"in e?kr(e):e}function s0(e){let n=zu(e),t=n.alpha!==void 0?Bt(n.alpha*255):255;return(Bt(n.r)<<24|Bt(n.g)<<16|Bt(n.b)<<8|t)>>>0}function Bt(e){return e<0?0:e>255?255:Math.round(e)}function kf(e){let[n,t,i]=[e.L,e.C,e.H],r=i*Math.PI/180,o={L:n,a:t*Math.cos(r),b:t*Math.sin(r)};return e.alpha!==void 0&&(o.alpha=e.alpha),o}function N0(e){let[n,t,i]=[e.L,e.a,e.b],r=Math.sqrt(t*t+i*i),s=Math.atan2(i,t)*180/Math.PI,a={L:n,C:r,H:s};return e.alpha!==void 0&&(a.alpha=e.alpha),a}function Ju(e){let[n,t,i]=[e.L,e.a,e.b],r=Math.pow(.9999999984505198*n+.39633779217376786*t+.2158037580607588*i,3),o=Math.pow(1.00000000888176*n-.10556134232365635*t-.0638541747717059*i,3),s=Math.pow(n*1.000000054672411-.0894841820949657*t-1.2914855378640917*i,3),a=4.076741661347994*r-3.307711590408193*o+.230969928729428*s,u=-1.2684380040921763*r+2.6097574006633715*o-.3413193963102197*s,l=-.004196086541837188*r-.7034186144594493*o+1.7076147009309444*s;return[_f(a),_f(u),_f(l)]}function Sf(e){let[n,t,i]=e;return n>=0&&n<=1&&t>=0&&t<=1&&i>=0&&i<=1}function Tf(e,n){let[t,i,r]=e;return t=Bt(t*255),i=Bt(i*255),r=Bt(r*255),n!==void 0?{r:t,g:i,b:r,alpha:n}:{r:t,g:i,b:r}}function kr(e){let[n,t,i]=Ju(e);if(Sf([n,t,i]))return Tf([n,t,i],e.alpha);let r=N0(e);if(r.C=0,[n,t,i]=Ju(kf(r)),!Sf([n,t,i]))return Tf([n,t,i],e.alpha);let o=0,s=e.L,a=(o+s)/2;r.C=a;let u=.36/Math.pow(2,12);for(;s-o>u;)a=(o+s)/2,r.C=a,[n,t,i]=Ju(kf(r)),Sf([n,t,i])?o=a:s=a;return Tf([n,t,i],e.alpha)}function Jt(e){return kr(kf(e))}function qs(e){let[n,t,i]=[e.r,e.g,e.b],r=Nf(n/255),o=Nf(t/255),s=Nf(i/255),a=.41222147079999993*r+.5363325363*o+.0514459929*s,u=.2119034981999999*r+.6806995450999999*o+.1073969566*s,l=.08830246189999998*r+.2817188376*o+.6299787005000002*s,c=Math.cbrt(a),f=Math.cbrt(u),p=Math.cbrt(l),d={L:.2104542553*c+.793617785*f-.0040720468*p,a:1.9779984951*c-2.428592205*f+.4505937099*p,b:.0259040371*c+.7827717662*f-.808675766*p};return e.alpha!==void 0&&(d.alpha=e.alpha),d}function Mn(e){return N0(qs(e))}function If(e,n){let t=n*Math.PI/180,i=0,r=1.5;for(let o=0;o<32;o++){let s=(i+r)/2,[a,u,l]=Ju({L:e,a:s*Math.cos(t),b:s*Math.sin(t)});a>=0&&a<=1&&u>=0&&u<=1&&l>=0&&l<=1?i=s:r=s}return i}function wo(e,n,t){let i=e/100;if(i<=0)return 255;let r=Jt({L:i,C:n,H:t});return(Bt(r.r)<<24|Bt(r.g)<<16|Bt(r.b)<<8|255)>>>0}function mN(e){let{l:n,c:t,h:i}=Uu(e);return wo(n+2.8,t+.002,i+.46)}function Uu(e){let n=e>>>24&255,t=e>>>16&255,i=e>>>8&255,r=Mn({r:n,g:t,b:i});return{l:r.L*100,c:r.C,h:r.H<0?r.H+360:r.H}}function wf(e,n,t){let{l:i,c:r,h:o}=Uu(e),{l:s,c:a,h:u}=Uu(n),l=i+(s-i)*t,c=r+(a-r)*t,f=u-o;f>180&&(f-=360),f<-180&&(f+=360);let p=o+f*t,d=e&255,g=n&255,h=Math.round(d+(g-d)*t);return wo(l,c,p<0?p+360:p>360?p-360:p)&4294967040|h}function dN(e,n=.1){let a=.45,u=0;for(let g=.45;g>=.35;g-=.01){let h=If(g,e);if(h>=.15){a=g,u=.15;break}else h>u&&(a=g,u=h)}if(u<.15*.8)for(let g=.45+.01;g<=.5;g+=.01){let h=If(g,e);if(h>=.15||h>u*1.2){a=g,u=Math.min(.15,h);break}}let l=.96,c=.02,f=If(.96,e);f<.02&&(c=f*(1-n)),c=Math.max(.015,Math.min(.02,c));let p=wo(a*100,u,e),d=wo(l*100,c,e);return{darkest:p,lightest:d}}function gN(e,n){let t=Math.max(0,Math.min(1e3,n)),i,r,o;if(typeof e=="object")i=e.darkest,o=e.lightest,r=e.mid??0;else{r=e;let{h:u}=Uu(r),l=r&255,{darkest:c,lightest:f}=dN(u);i=c&4294967040|l,o=f&4294967040|l}if(!r&&typeof e=="object"&&!e.mid&&(r=wf(i,o,.5)),t<=500){let u=t/500,l=u*u*(3-2*u);return wf(o,r,l)}let s=(t-500)/500,a=s*s*(3-2*s);return wf(r,i,a)}var hN=[{id:"pink",name:"Pink",colors:{mid:{lightness:69,chroma:.202,hue:7.4}}},{id:"red",name:"Red",colors:{lightest:{lightness:95,chroma:.2,hue:30},mid:{lightness:62,chroma:.25,hue:30},darkest:{lightness:36,chroma:.16,hue:25}}},{id:"brown",name:"Brown",colors:{lightest:{lightness:94.5,chroma:.021,hue:72.1},mid:{lightness:59,chroma:.2,hue:73},darkest:{lightness:20,chroma:.061,hue:72.7}}},{id:"orange",name:"Orange",colors:{lightest:{lightness:95,chroma:.06,hue:82},mid:{lightness:73,chroma:.21,hue:56},darkest:{lightness:46,chroma:.2,hue:35}}},{id:"yellow",name:"Yellow",colors:{lightest:{lightness:97,chroma:.02,hue:106},mid:{lightness:89,chroma:.21,hue:99},darkest:{lightness:67,chroma:.43,hue:59}}},{id:"lime",name:"Lime",colors:{mid:{lightness:65,chroma:.192,hue:134.3}}},{id:"green",name:"Green",colors:{mid:{lightness:64,chroma:.21,hue:144}}},{id:"teal",name:"Teal",colors:{mid:{lightness:65,chroma:.116,hue:192.6}}},{id:"cyan",name:"Cyan",colors:{lightest:{lightness:97,chroma:.11,hue:195},mid:{lightness:61,chroma:.11,hue:210},darkest:{lightness:42,chroma:.11,hue:210}}},{id:"blue",name:"Blue",colors:{lightest:{lightness:91,chroma:.22,hue:240},mid:{lightness:63,chroma:.22,hue:255},darkest:{lightness:38,chroma:.22,hue:252}}},{id:"indigo",name:"Indigo",colors:{lightest:{lightness:92.7,chroma:.036,hue:291},mid:{lightness:67,chroma:.285,hue:296},darkest:{lightness:28,chroma:.23,hue:278}}},{id:"purple",name:"Purple",colors:{mid:{lightness:67,chroma:.21,hue:299}}}];function To({lightness:e,chroma:n,hue:t}){return wo(e,n,t)}function bN(e){let{mid:n,lightest:t,darkest:i}=e.colors;if(t&&i&&n)return{lightest:To(t),mid:To(n),darkest:To(i)};if(t&&i)return{lightest:To(t),darkest:To(i)};if(n)return To(n);throw new Error(`Color scale preset "${e.id}" is missing required anchors.`)}var Bu=null;function yN(){if(!Bu){Bu=Object.create(null);for(let e of hN)Bu[e.id]=bN(e)}return Bu}var a0={red:"#d7170b",orange:"#fe8a2b",yellow:"#ffc02b",lime:"#63b215",green:"#21ba3a",teal:"#17cfcf",cyan:"#13a7ec",blue:"#0d80f2",indigo:"#63c",purple:"#a219e6",magenta:"#eb4799",brown:"#8c564b",olive:"#8a8f2a",midnight:"#2c4670",sky:"#d2dce9",black:"#000",white:"#ffffff",carbon:"#111111",charcoal:"#333333",slate:"#555555","dark-grey":"#666",graphite:"#777777",stone:"#999999",grey:"#A6A6A6","light-grey":"#d4d5d2",ash:"#E6E6E6",mist:"#F3F3F3",snow:"#FFFFFF"};function ft(e,n){let t=e.trim().toLowerCase();if(t.startsWith("#")){let u=t.substring(1),l,c,f,p=255;if(u.length===3)l=parseInt(u[0]+u[0],16),c=parseInt(u[1]+u[1],16),f=parseInt(u[2]+u[2],16);else if(u.length===6)l=parseInt(u.substring(0,2),16),c=parseInt(u.substring(2,4),16),f=parseInt(u.substring(4,6),16);else if(u.length===8)l=parseInt(u.substring(0,2),16),c=parseInt(u.substring(2,4),16),f=parseInt(u.substring(4,6),16),p=parseInt(u.substring(6,8),16);else return 0;return(l<<24|c<<16|f<<8|p)>>>0}let i=t.match(/^rgba?\s*\(\s*([^)]+)\s*\)$/);if(i){let u=i[1].replace(/[,/]/g," ").trim().split(/\s+/),l=parseFloat(u[0])||0,c=parseFloat(u[1])||0,f=parseFloat(u[2])||0;u[0].includes("%")||u[1].includes("%")||u[2].includes("%")?(u[0].includes("%")&&(l=l/100*255),u[1].includes("%")&&(c=c/100*255),u[2].includes("%")&&(f=f/100*255)):l<=1&&c<=1&&f<=1&&(l=l*255,c=c*255,f=f*255),l=Math.round(Math.max(0,Math.min(255,l))),c=Math.round(Math.max(0,Math.min(255,c))),f=Math.round(Math.max(0,Math.min(255,f)));let p=255;if(u.length>=4){let d=parseFloat(u[3]);u[3].includes("%")?d=d/100:d>1&&(d=d/255),p=Math.round(Math.max(0,Math.min(255,d*255)))}return(l<<24|c<<16|f<<8|p)>>>0}let r=t.match(/^oklch\s*\(\s*([^)]+)\s*\)$/);if(r){let u=r[1].replace(/[,/]/g," ").trim().split(/\s+/),l=parseFloat(u[0]);u[0].includes("%")?l=l/100:l<=1||(l=l/100);let c=parseFloat(u[1])||0,f=parseFloat(u[2])||0,p=1;u.length>=4&&(p=parseFloat(u[3]),u[3].includes("%")?p=p/100:p>1&&(p=p/255));let d=wo(l*100,c,f),g=Math.round(p*255);return d&4294967040|g}let o=t.match(/^oklab\s*\(\s*([^)]+)\s*\)$/);if(o){let u=o[1].replace(/[,/]/g," ").trim().split(/\s+/),l=parseFloat(u[0]);(u[0].includes("%")||l>1)&&(l=l/100);let c=parseFloat(u[1])||0,f=parseFloat(u[2])||0,p=1;u.length>=4&&(p=parseFloat(u[3]),u[3].includes("%")?p=p/100:p>1&&(p=p/255));let d=kr({L:l,a:c,b:f}),g=d.r,h=d.g,b=d.b,y=Math.round(p*255);return(g<<24|h<<16|b<<8|y)>>>0}let s=t.match(/^hsl\s*\(\s*([^)]+)\s*\)$/);if(s){let u=s[1].replace(/[,/]/g," ").trim().split(/\s+/),l=parseFloat(u[0])||0,c=parseFloat(u[1])||0;u[1].includes("%")?c=c/100:c<=1||(c=c/100);let f=parseFloat(u[2])||0;u[2].includes("%")?f=f/100:f<=1||(f=f/100);let p=1;u.length>=4&&(p=parseFloat(u[3]),u[3].includes("%")?p=p/100:p>1&&(p=p/255));let{r:d,g,b:h}=Fs(l,c,f),b=Math.round(p*255);return(d<<24|g<<16|h<<8|b)>>>0}if(t==="transparent")return 0;let a=t.match(/^([a-z]+)-(\d+)$/);if(a){let u=yN()[a[1]];if(u){let l=gN(u,parseInt(a[2],10));return n?mN(l):l}}return t in a0?ft(a0[t]):(console.warn(`parseColor: unrecognized color "${e}"`),0)}function S0(e,n){let t=ft(e,n);return[(t>>>24&255)/255,(t>>>16&255)/255,(t>>>8&255)/255]}function Mo(e,n){let t=zu(e),i=zu(n),r=.56,o=.57,s=.62,a=.65,u=.022,l=1.414,c=.1,f=5e-4,p=1.14,d=.027,g=1.14,h=.027;function b(M){return M>=u?M:M+(u-M)**l}function y(M){return(M<0?-1:1)*Math.pow(Math.abs(M),2.4)}let x=b(y(i.r/255)*.2126729+y(i.g/255)*.7151522+y(i.b/255)*.072175),N=b(y(t.r/255)*.2126729+y(t.g/255)*.7151522+y(t.b/255)*.072175),T,I;return Math.abs(N-x)<f?I=0:N>x?(T=N**r-x**o,I=T*p):(T=N**a-x**s,I=T*g),Math.abs(I)<c?0:I>0?I-h:I+d}function Co(e){let n,t,i;typeof e!="object"||!("bg"in e)?(n=zu(e),t="#ffffff",i="#000000"):(n=e.bg,t=e.fg1,i=e.fg2);let r=Math.abs(Mo(t,n)),o=Math.abs(Mo(i,n));return r>=o?s0(t):s0(i)}function Cf(e,n,t){let i=e.L+(n.L-e.L)*t,r=e.C+(n.C-e.C)*t,o=n.H-e.H;o>180&&(o-=360),o<-180&&(o+=360);let s=e.H+o*t;return s<0&&(s+=360),s>=360&&(s-=360),{L:i,C:r,H:s}}function T0(e,n,t){let i=Mn(Mf(e)),r=Mn(Mf(n));return Jt(Cf(i,r,t))}var xN=["#4e79a7","#f28e2b","#59a14f","#e15759","#b07aa1","#9c755f","#ff9da7","#edc948","#76b7b2","#6b8fd6","#c07bc4"],EN=["#78a6d9","#ffae54","#7ddc7a","#ff7a7a","#d29be0","#c49a84","#ffb3bf","#ffe066","#7fd6d0","#8fb4ff","#e199eb"],vN=["#4e79a7","#f28e2b","#2ca58d","#d13a3c","#b07aa1","#9c755f","#ff9da7","#e3c13b","#5fb8b2","#6b8fd6","#c07bc4"],_N=["#8fb1d4","#f6b878","#8ecf86","#f08a8b","#d3a9cc","#c3a492","#ffc6cc","#f3e08a","#a8d8d4","#a9c0ea","#e0b4e4"],NN=["#78a6d9","#ffae54","#7ddc7a","#ff7a7a","#d29be0","#c49a84","#ffb3bf","#ffe066","#7fd6d0","#8fb4ff","#e199eb"],SN=["#2f6fb0","#ff7a00","#2fa23a","#e02f2f","#9b4db5","#7f4f38","#ff6f86","#f2c200","#2daaa3","#4c79e0","#b84ac6"],TN=["#4f93ff","#ff8c1a","#33c94a","#ff4f4f","#b86bff","#a86a4a","#ff7f9e","#ffd400","#2ec9c1","#6f9bff","#cc5bd9"],IN=["#5E81B5","#E19C24","#8FB131","#EB6235","#8778B3","#C56E1A","#5E9EC9","#B23A3A","#4C9F70","#C979B7"],wN=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],MN=["#007AFF","#FF9500","#34C759","#FF3B30","#AF52DE","#FF2D55","#30B0C7","#5856D6","#A2845E","#32ADE6","#00C7BE"],kN=["#0A84FF","#FF9F0A","#30D158","#FF453A","#BF5AF2","#FF375F","#40C8E0","#5E5CE6","#AC8E68","#64D2FF","#00D1C1"],CN=["#fdfdfd","#1d1d1d","#ebce2b","#702c8c","#db6917","#96cde6","#ba1c30","#c0bd7f","#7f7e80","#5fa641","#d485b2","#4277b6","#df8461","#463397","#e1a11a","#91218c","#e8e948","#7e1510","#92ae31","#6f340d","#d32b1e","#2b3514"],AN=["#4148cc","#db3c80","#12b5b0","#ff8c14","#848aff","#78e16e","#1e78f0","#ebcd00","#beeb3c","#7828d2","#cd5f00","#00915f"],ju={tycho11:xN,"tycho-dark11":EN,"tycho-robust11":vN,"tycho-soft11":_N,"tycho-soft-dark11":NN,"tycho-bold11":SN,"tycho-bold-dark11":TN,tableau10:wN,kelly22:CN,mathematica10:IN,cupertino10:MN,"cupertino-dark10":kN,spectrum12:AN},u0=["#033198","#053399","#07359a","#09379b","#0b399c","#0c3b9c","#0e3d9d","#0f3f9e","#11409f","#1242a0","#1344a0","#1446a1","#1548a2","#164aa3","#174ca4","#184da4","#194fa5","#1951a6","#1a53a7","#1b54a8","#1b56a8","#1c58a9","#1d5aaa","#1d5bab","#1e5dab","#1e5fac","#1f60ad","#2062ae","#2064ae","#2166af","#2167b0","#2269b0","#226ab1","#236cb2","#236eb3","#246fb3","#2471b4","#2573b5","#2574b5","#2676b6","#2677b7","#2779b7","#287ab8","#287cb9","#297eb9","#297fba","#2a81bb","#2b82bb","#2b84bc","#2c85bd","#2d87bd","#2d88be","#2e8abf","#2f8cbf","#308dc0","#308fc1","#3190c1","#3292c2","#3394c3","#3495c3","#3597c4","#3698c5","#379ac5","#389cc6","#399dc7","#3a9fc7","#3ca1c8","#3da2c9","#3ea4c9","#40a6ca","#41a7cb","#43a9cb","#44abcc","#46accc","#47aecd","#49b0ce","#4bb2ce","#4db3cf","#4fb5d0","#51b7d0","#53b8d1","#55bad1","#57bcd2","#59bdd2","#5bbfd3","#5dc1d3","#60c3d4","#62c4d4","#64c6d5","#67c7d5","#69c9d5","#6ccbd6","#6eccd6","#71ced6","#74cfd6","#76d1d7","#79d2d7","#7bd4d7","#7ed5d7","#81d7d7","#83d8d7","#86d9d7","#89dad7","#8bdcd7","#8eddd7","#90ded7","#93dfd6","#95e0d6","#98e1d6","#9be2d5","#9de3d5","#9fe4d4","#a2e5d4","#a4e5d3","#a6e6d2","#a9e7d2","#abe7d1","#ade8d0","#afe8cf","#b1e9ce","#b3e9cd","#b5eacc","#b7eaca","#b9eac9","#bbeac8","#bdeac6","#beeac5","#c0eac3","#c1eac2","#c3eac0","#c4eabe","#c6eabc","#c7e9ba","#c8e9b8","#c9e9b6","#cbe8b4","#cce7b2","#cce7b0","#cde6ad","#cee5ab","#cfe5a8","#d0e4a6","#d0e3a3","#d1e2a1","#d1e19e","#d1df9b","#d2de98","#d2dd96","#d2dc93","#d2da90","#d2d98d","#d2d78a","#d2d687","#d2d484","#d2d381","#d2d17e","#d1cf7b","#d1cd78","#d0cc75","#d0ca72","#cfc86f","#cfc66d","#cec46a","#cec267","#cdc064","#ccbe62","#cbbc5f","#cbba5d","#cab85a","#c9b658","#c8b455","#c7b253","#c7b051","#c6ae4f","#c5ac4c","#c4aa4a","#c3a848","#c2a647","#c1a545","#c1a343","#c0a141","#bf9f40","#be9d3e","#bd9b3c","#bc993b","#bb9739","#ba9538","#ba9437","#b99235","#b89034","#b78e33","#b68c32","#b58b31","#b58930","#b4872f","#b3862e","#b2842d","#b1822c","#b0802b","#b07f2a","#af7d29","#ae7c28","#ad7a27","#ad7826","#ac7726","#ab7525","#aa7324","#a97223","#a97023","#a86f22","#a76d21","#a66c20","#a66a20","#a5681f","#a4671e","#a3651e","#a2641d","#a2621c","#a1611c","#a05f1b","#9f5d1a","#9e5c19","#9e5a19","#9d5818","#9c5717","#9b5517","#9a5316","#995215","#995014","#984e14","#974d13","#964b12","#954912","#944711","#934610","#92440f","#91420f","#90400e","#903e0d","#8f3c0c","#8e3a0b","#8d380b","#8c360a","#8b3409","#8a3208","#883008","#872e07","#862c06","#852a06","#842705","#832504","#822204","#812003","#801d02","#7f1a01","#7e1700"],l0=["#0b3c78","#2366a8","#4f97cf","#9bc7e4","#f7f7f7","#e88fa0","#c23c6f","#8e1d4d","#5a0c2e"],c0=["#2c557f","#4a7fa8","#7aa8c9","#b5cfe3","#f7f7f7","#e4b0b0","#c96c72","#9b3d4f","#6b1a2b"],f0=["#053061","#11458c","#1f5fa5","#337ab7","#4f94c6","#6baed6","#8bbdd9","#a6cce3","#c1dbec","#dceaf4","#f7f7f7","#fbe3d6","#f9c8b2","#f5a993","#ee8a75","#e36b58","#d64b41","#c72c33","#af212d","#971628","#7f0b23","#67001f"],p0=["#3b4cc0","#465ecf","#5070de","#5c82ea","#6f96f5","#86aafc","#9dbdff","#b6d0f3","#cfe1e8","#e6efe1","#f1f1f1","#f7f7f7","#f6e1d3","#f4cbb3","#f1b594","#ee9f76","#ea8960","#e06b53","#d24f49","#c1363f","#ae2036","#b40426"],m0=["#00441b","#006d5b","#1a8c7d","#2fa394","#4fb3a3","#6fc1b3","#8dcfc3","#a6dbd1","#bfe6de","#d7f0ea","#f7f7f7","#eeeeee","#ddd8e6","#c7bcda","#b3a0d0","#9f86c7","#8d6dbd","#7b56b1","#6a42a3","#5a3093","#4a1f82","#3b0f70"],Io=e=>e.slice().reverse(),Gu={roma:u0,"roma-reversed":Io(u0),vik:l0,"vik-reversed":Io(l0),broc:c0,"broc-reversed":Io(c0),rdbu:f0,"rdbu-reversed":Io(f0),coolwarm:p0,"coolwarm-reversed":Io(p0),"ocean-balance":m0,"ocean-balance-reversed":Io(m0)},d0=["#30123b","#321543","#33184a","#341b51","#351e58","#36215f","#372466","#38276d","#392a73","#3a2d79","#3b2f80","#3c3286","#3d358b","#3e3891","#3f3b97","#3f3e9c","#4040a2","#4143a7","#4146ac","#4249b1","#424bb5","#434eba","#4451bf","#4454c3","#4456c7","#4559cb","#455ccf","#455ed3","#4661d6","#4664da","#4666dd","#4669e0","#466be3","#476ee6","#4771e9","#4773eb","#4776ee","#4778f0","#477bf2","#467df4","#4680f6","#4682f8","#4685fa","#4687fb","#458afc","#458cfd","#448ffe","#4391fe","#4294ff","#4196ff","#4099ff","#3e9bfe","#3d9efe","#3ba0fd","#3aa3fc","#38a5fb","#37a8fa","#35abf8","#33adf7","#31aff5","#2fb2f4","#2eb4f2","#2cb7f0","#2ab9ee","#28bceb","#27bee9","#25c0e7","#23c3e4","#22c5e2","#20c7df","#1fc9dd","#1ecbda","#1ccdd8","#1bd0d5","#1ad2d2","#1ad4d0","#19d5cd","#18d7ca","#18d9c8","#18dbc5","#18ddc2","#18dec0","#18e0bd","#19e2bb","#19e3b9","#1ae4b6","#1ce6b4","#1de7b2","#1fe9af","#20eaac","#22ebaa","#25eca7","#27eea4","#2aefa1","#2cf09e","#2ff19b","#32f298","#35f394","#38f491","#3cf58e","#3ff68a","#43f787","#46f884","#4af880","#4ef97d","#52fa7a","#55fa76","#59fb73","#5dfc6f","#61fc6c","#65fd69","#69fd66","#6dfe62","#71fe5f","#75fe5c","#79fe59","#7dff56","#80ff53","#84ff51","#88ff4e","#8bff4b","#8fff49","#92ff47","#96fe44","#99fe42","#9cfe40","#9ffd3f","#a1fd3d","#a4fc3c","#a7fc3a","#a9fb39","#acfb38","#affa37","#b1f936","#b4f836","#b7f735","#b9f635","#bcf534","#bef434","#c1f334","#c3f134","#c6f034","#c8ef34","#cbed34","#cdec34","#d0ea34","#d2e935","#d4e735","#d7e535","#d9e436","#dbe236","#dde037","#dfdf37","#e1dd37","#e3db38","#e5d938","#e7d739","#e9d539","#ebd339","#ecd13a","#eecf3a","#efcd3a","#f1cb3a","#f2c93a","#f4c73a","#f5c53a","#f6c33a","#f7c13a","#f8be39","#f9bc39","#faba39","#fbb838","#fbb637","#fcb336","#fcb136","#fdae35","#fdac34","#fea933","#fea732","#fea431","#fea130","#fe9e2f","#fe9b2d","#fe992c","#fe962b","#fe932a","#fe9029","#fd8d27","#fd8a26","#fc8725","#fc8423","#fb8122","#fb7e21","#fa7b1f","#f9781e","#f9751d","#f8721c","#f76f1a","#f66c19","#f56918","#f46617","#f36315","#f26014","#f15d13","#f05b12","#ef5811","#ed5510","#ec530f","#eb500e","#ea4e0d","#e84b0c","#e7490c","#e5470b","#e4450a","#e2430a","#e14109","#df3f08","#dd3d08","#dc3b07","#da3907","#d83706","#d63506","#d43305","#d23105","#d02f05","#ce2d04","#cc2b04","#ca2a04","#c82803","#c52603","#c32503","#c12302","#be2102","#bc2002","#b91e02","#b71d02","#b41b01","#b21a01","#af1801","#ac1701","#a91601","#a71401","#a41301","#a11201","#9e1001","#9b0f01","#980e01","#950d01","#920b01","#8e0a01","#8b0902","#880802","#850702","#810602","#7e0502","#7a0403"],g0=["#000004","#010005","#010106","#010108","#020109","#02020b","#02020d","#03030f","#030312","#040414","#050416","#060518","#06051a","#07061c","#08071e","#090720","#0a0822","#0b0924","#0c0926","#0d0a29","#0e0b2b","#100b2d","#110c2f","#120d31","#130d34","#140e36","#150e38","#160f3b","#180f3d","#19103f","#1a1042","#1c1044","#1d1147","#1e1149","#20114b","#21114e","#221150","#241253","#251255","#271258","#29115a","#2a115c","#2c115f","#2d1161","#2f1163","#311165","#331067","#341069","#36106b","#38106c","#390f6e","#3b0f70","#3d0f71","#3f0f72","#400f74","#420f75","#440f76","#451077","#471078","#491078","#4a1079","#4c117a","#4e117b","#4f127b","#51127c","#52137c","#54137d","#56147d","#57157e","#59157e","#5a167e","#5c167f","#5d177f","#5f187f","#601880","#621980","#641a80","#651a80","#671b80","#681c81","#6a1c81","#6b1d81","#6d1d81","#6e1e81","#701f81","#721f81","#732081","#752181","#762181","#782281","#792282","#7b2382","#7c2382","#7e2482","#802582","#812581","#832681","#842681","#862781","#882781","#892881","#8b2981","#8c2981","#8e2a81","#902a81","#912b81","#932b80","#942c80","#962c80","#982d80","#992d80","#9b2e7f","#9c2e7f","#9e2f7f","#a02f7f","#a1307e","#a3307e","#a5317e","#a6317d","#a8327d","#aa337d","#ab337c","#ad347c","#ae347b","#b0357b","#b2357b","#b3367a","#b5367a","#b73779","#b83779","#ba3878","#bc3978","#bd3977","#bf3a77","#c03a76","#c23b75","#c43c75","#c53c74","#c73d73","#c83e73","#ca3e72","#cc3f71","#cd4071","#cf4070","#d0416f","#d2426f","#d3436e","#d5446d","#d6456c","#d8456c","#d9466b","#db476a","#dc4869","#de4968","#df4a68","#e04c67","#e24d66","#e34e65","#e44f64","#e55064","#e75263","#e85362","#e95462","#ea5661","#eb5760","#ec5860","#ed5a5f","#ee5b5e","#ef5d5e","#f05f5e","#f1605d","#f2625d","#f2645c","#f3655c","#f4675c","#f4695c","#f56b5c","#f66c5c","#f66e5c","#f7705c","#f7725c","#f8745c","#f8765c","#f9785d","#f9795d","#f97b5d","#fa7d5e","#fa7f5e","#fa815f","#fb835f","#fb8560","#fb8761","#fc8961","#fc8a62","#fc8c63","#fc8e64","#fc9065","#fd9266","#fd9467","#fd9668","#fd9869","#fd9a6a","#fd9b6b","#fe9d6c","#fe9f6d","#fea16e","#fea36f","#fea571","#fea772","#fea973","#feaa74","#feac76","#feae77","#feb078","#feb27a","#feb47b","#feb67c","#feb77e","#feb97f","#febb81","#febd82","#febf84","#fec185","#fec287","#fec488","#fec68a","#fec88c","#feca8d","#fecc8f","#fecd90","#fecf92","#fed194","#fed395","#fed597","#fed799","#fed89a","#fdda9c","#fddc9e","#fddea0","#fde0a1","#fde2a3","#fde3a5","#fde5a7","#fde7a9","#fde9aa","#fdebac","#fcecae","#fceeb0","#fcf0b2","#fcf2b4","#fcf4b6","#fcf6b8","#fcf7b9","#fcf9bb","#fcfbbd","#fcfdbf"],h0=["#000004","#010005","#010106","#010108","#02010a","#02020c","#02020e","#030210","#040312","#040314","#050417","#060419","#07051b","#08051d","#09061f","#0a0722","#0b0724","#0c0826","#0d0829","#0e092b","#10092d","#110a30","#120a32","#140b34","#150b37","#160b39","#180c3c","#190c3e","#1b0c41","#1c0c43","#1e0c45","#1f0c48","#210c4a","#230c4c","#240c4f","#260c51","#280b53","#290b55","#2b0b57","#2d0b59","#2f0a5b","#310a5c","#320a5e","#340a5f","#360961","#380962","#390963","#3b0964","#3d0965","#3e0966","#400a67","#420a68","#440a68","#450a69","#470b6a","#490b6a","#4a0c6b","#4c0c6b","#4d0d6c","#4f0d6c","#510e6c","#520e6d","#540f6d","#550f6d","#57106e","#59106e","#5a116e","#5c126e","#5d126e","#5f136e","#61136e","#62146e","#64156e","#65156e","#67166e","#69166e","#6a176e","#6c186e","#6d186e","#6f196e","#71196e","#721a6e","#741a6e","#751b6e","#771c6d","#781c6d","#7a1d6d","#7c1d6d","#7d1e6d","#7f1e6c","#801f6c","#82206c","#84206b","#85216b","#87216b","#88226a","#8a226a","#8c2369","#8d2369","#8f2469","#902568","#922568","#932667","#952667","#972766","#982766","#9a2865","#9b2964","#9d2964","#9f2a63","#a02a63","#a22b62","#a32c61","#a52c60","#a62d60","#a82e5f","#a92e5e","#ab2f5e","#ad305d","#ae305c","#b0315b","#b1325a","#b3325a","#b43359","#b63458","#b73557","#b93556","#ba3655","#bc3754","#bd3853","#bf3952","#c03a51","#c13a50","#c33b4f","#c43c4e","#c63d4d","#c73e4c","#c83f4b","#ca404a","#cb4149","#cc4248","#ce4347","#cf4446","#d04545","#d24644","#d34743","#d44842","#d54a41","#d74b3f","#d84c3e","#d94d3d","#da4e3c","#db503b","#dd513a","#de5238","#df5337","#e05536","#e15635","#e25734","#e35933","#e45a31","#e55c30","#e65d2f","#e75e2e","#e8602d","#e9612b","#ea632a","#eb6429","#eb6628","#ec6726","#ed6925","#ee6a24","#ef6c23","#ef6e21","#f06f20","#f1711f","#f1731d","#f2741c","#f3761b","#f37819","#f47918","#f57b17","#f57d15","#f67e14","#f68013","#f78212","#f78410","#f8850f","#f8870e","#f8890c","#f98b0b","#f98c0a","#f98e09","#fa9008","#fa9207","#fa9407","#fb9606","#fb9706","#fb9906","#fb9b06","#fb9d07","#fc9f07","#fca108","#fca309","#fca50a","#fca60c","#fca80d","#fcaa0f","#fcac11","#fcae12","#fcb014","#fcb216","#fcb418","#fbb61a","#fbb81d","#fbba1f","#fbbc21","#fbbe23","#fac026","#fac228","#fac42a","#fac62d","#f9c72f","#f9c932","#f9cb35","#f8cd37","#f8cf3a","#f7d13d","#f7d340","#f6d543","#f6d746","#f5d949","#f5db4c","#f4dd4f","#f4df53","#f4e156","#f3e35a","#f3e55d","#f2e661","#f2e865","#f2ea69","#f1ec6d","#f1ed71","#f1ef75","#f1f179","#f2f27d","#f2f482","#f3f586","#f3f68a","#f4f88e","#f5f992","#f6fa96","#f8fb9a","#f9fc9d","#fafda1","#fcffa4"],b0=["#0d0887","#100788","#130789","#16078a","#19068c","#1b068d","#1d068e","#20068f","#220690","#240691","#260591","#280592","#2a0593","#2c0594","#2e0595","#2f0596","#310597","#330597","#350498","#370499","#38049a","#3a049a","#3c049b","#3e049c","#3f049c","#41049d","#43039e","#44039e","#46039f","#48039f","#4903a0","#4b03a1","#4c02a1","#4e02a2","#5002a2","#5102a3","#5302a3","#5502a4","#5601a4","#5801a4","#5901a5","#5b01a5","#5c01a6","#5e01a6","#6001a6","#6100a7","#6300a7","#6400a7","#6600a7","#6700a8","#6900a8","#6a00a8","#6c00a8","#6e00a8","#6f00a8","#7100a8","#7201a8","#7401a8","#7501a8","#7701a8","#7801a8","#7a02a8","#7b02a8","#7d03a8","#7e03a8","#8004a8","#8104a7","#8305a7","#8405a7","#8606a6","#8707a6","#8808a6","#8a09a5","#8b0aa5","#8d0ba5","#8e0ca4","#8f0da4","#910ea3","#920fa3","#9410a2","#9511a1","#9613a1","#9814a0","#99159f","#9a169f","#9c179e","#9d189d","#9e199d","#a01a9c","#a11b9b","#a21d9a","#a31e9a","#a51f99","#a62098","#a72197","#a82296","#aa2395","#ab2494","#ac2694","#ad2793","#ae2892","#b02991","#b12a90","#b22b8f","#b32c8e","#b42e8d","#b52f8c","#b6308b","#b7318a","#b83289","#ba3388","#bb3488","#bc3587","#bd3786","#be3885","#bf3984","#c03a83","#c13b82","#c23c81","#c33d80","#c43e7f","#c5407e","#c6417d","#c7427c","#c8437b","#c9447a","#ca457a","#cb4679","#cc4778","#cc4977","#cd4a76","#ce4b75","#cf4c74","#d04d73","#d14e72","#d24f71","#d35171","#d45270","#d5536f","#d5546e","#d6556d","#d7566c","#d8576b","#d9586a","#da5a6a","#da5b69","#db5c68","#dc5d67","#dd5e66","#de5f65","#de6164","#df6263","#e06363","#e16462","#e26561","#e26660","#e3685f","#e4695e","#e56a5d","#e56b5d","#e66c5c","#e76e5b","#e76f5a","#e87059","#e97158","#e97257","#ea7457","#eb7556","#eb7655","#ec7754","#ed7953","#ed7a52","#ee7b51","#ef7c51","#ef7e50","#f07f4f","#f0804e","#f1814d","#f1834c","#f2844b","#f3854b","#f3874a","#f48849","#f48948","#f58b47","#f58c46","#f68d45","#f68f44","#f79044","#f79143","#f79342","#f89441","#f89540","#f9973f","#f9983e","#f99a3e","#fa9b3d","#fa9c3c","#fa9e3b","#fb9f3a","#fba139","#fba238","#fca338","#fca537","#fca636","#fca835","#fca934","#fdab33","#fdac33","#fdae32","#fdaf31","#fdb130","#fdb22f","#fdb42f","#fdb52e","#feb72d","#feb82c","#feba2c","#febb2b","#febd2a","#febe2a","#fec029","#fdc229","#fdc328","#fdc527","#fdc627","#fdc827","#fdca26","#fdcb26","#fccd25","#fcce25","#fcd025","#fcd225","#fbd324","#fbd524","#fbd724","#fad824","#fada24","#f9dc24","#f9dd25","#f8df25","#f8e125","#f7e225","#f7e425","#f6e626","#f6e826","#f5e926","#f5eb27","#f4ed27","#f3ee27","#f3f027","#f2f227","#f1f426","#f1f525","#f0f724","#f0f921"],y0=["#440154","#440256","#450457","#450559","#46075a","#46085c","#460a5d","#460b5e","#470d60","#470e61","#471063","#471164","#471365","#481467","#481668","#481769","#48186a","#481a6c","#481b6d","#481c6e","#481d6f","#481f70","#482071","#482173","#482374","#482475","#482576","#482677","#482878","#482979","#472a7a","#472c7a","#472d7b","#472e7c","#472f7d","#46307e","#46327e","#46337f","#463480","#453581","#453781","#453882","#443983","#443a83","#443b84","#433d84","#433e85","#423f85","#424086","#424186","#414287","#414487","#404588","#404688","#3f4788","#3f4889","#3e4989","#3e4a89","#3e4c8a","#3d4d8a","#3d4e8a","#3c4f8a","#3c508b","#3b518b","#3b528b","#3a538b","#3a548c","#39558c","#39568c","#38588c","#38598c","#375a8c","#375b8d","#365c8d","#365d8d","#355e8d","#355f8d","#34608d","#34618d","#33628d","#33638d","#32648e","#32658e","#31668e","#31678e","#31688e","#30698e","#306a8e","#2f6b8e","#2f6c8e","#2e6d8e","#2e6e8e","#2e6f8e","#2d708e","#2d718e","#2c718e","#2c728e","#2c738e","#2b748e","#2b758e","#2a768e","#2a778e","#2a788e","#29798e","#297a8e","#297b8e","#287c8e","#287d8e","#277e8e","#277f8e","#27808e","#26818e","#26828e","#26828e","#25838e","#25848e","#25858e","#24868e","#24878e","#23888e","#23898e","#238a8d","#228b8d","#228c8d","#228d8d","#218e8d","#218f8d","#21908d","#21918c","#20928c","#20928c","#20938c","#1f948c","#1f958b","#1f968b","#1f978b","#1f988b","#1f998a","#1f9a8a","#1e9b8a","#1e9c89","#1e9d89","#1f9e89","#1f9f88","#1fa088","#1fa188","#1fa187","#1fa287","#20a386","#20a486","#21a585","#21a685","#22a785","#22a884","#23a983","#24aa83","#25ab82","#25ac82","#26ad81","#27ad81","#28ae80","#29af7f","#2ab07f","#2cb17e","#2db27d","#2eb37c","#2fb47c","#31b57b","#32b67a","#34b679","#35b779","#37b878","#38b977","#3aba76","#3bbb75","#3dbc74","#3fbc73","#40bd72","#42be71","#44bf70","#46c06f","#48c16e","#4ac16d","#4cc26c","#4ec36b","#50c46a","#52c569","#54c568","#56c667","#58c765","#5ac864","#5cc863","#5ec962","#60ca60","#63cb5f","#65cb5e","#67cc5c","#69cd5b","#6ccd5a","#6ece58","#70cf57","#73d056","#75d054","#77d153","#7ad151","#7cd250","#7fd34e","#81d34d","#84d44b","#86d549","#89d548","#8bd646","#8ed645","#90d743","#93d741","#95d840","#98d83e","#9bd93c","#9dd93b","#a0da39","#a2da37","#a5db36","#a8db34","#aadc32","#addc30","#b0dd2f","#b2dd2d","#b5de2b","#b8de29","#bade28","#bddf26","#c0df25","#c2df23","#c5e021","#c8e020","#cae11f","#cde11d","#d0e11c","#d2e21b","#d5e21a","#d8e219","#dae319","#dde318","#dfe318","#e2e418","#e5e419","#e7e419","#eae51a","#ece51b","#efe51c","#f1e51d","#f4e61e","#f6e620","#f8e621","#fbe723","#fde725"],x0=["#00204d","#00214e","#002250","#002252","#002353","#002455","#002557","#002558","#00265a","#00275c","#00275e","#002860","#002961","#002a63","#002a65","#002b67","#002c69","#002c6a","#002d6c","#002e6e","#002e6f","#002f6f","#002f6f","#00306f","#00306f","#00316f","#00326f","#00336f","#00336f","#00346f","#00356e","#01366e","#06366e","#0b376e","#0f386e","#12386d","#15396d","#183a6d","#1a3b6d","#1d3b6d","#1f3c6d","#213d6d","#233e6c","#243e6c","#263f6c","#28406c","#2a406c","#2b416c","#2d426c","#2e436c","#30436c","#31446b","#32456b","#34456b","#35466b","#36476b","#38486b","#39486b","#3a496b","#3b4a6b","#3d4a6b","#3e4b6b","#3f4c6b","#404d6b","#414d6b","#424e6b","#434f6b","#444f6b","#46506b","#47516b","#48526b","#49526b","#4a536b","#4b546c","#4c546c","#4d556c","#4e566c","#4f576c","#50576c","#51586c","#52596c","#53596c","#545a6c","#555b6d","#565c6d","#575c6d","#585d6d","#595e6d","#595f6d","#5a5f6d","#5b606e","#5c616e","#5d616e","#5e626e","#5f636e","#60646f","#61646f","#62656f","#63666f","#64666f","#646770","#656870","#666970","#676970","#686a71","#696b71","#6a6c71","#6b6c71","#6c6d72","#6c6e72","#6d6e72","#6e6f73","#6f7073","#707173","#717174","#727274","#727374","#737475","#747475","#757575","#767676","#777776","#787777","#787877","#797977","#7a7a78","#7b7a78","#7c7b78","#7d7c78","#7e7d78","#7f7d78","#807e79","#817f79","#828079","#838079","#848179","#848279","#858379","#868379","#878479","#888579","#898679","#8a8779","#8b8779","#8c8879","#8d8979","#8e8a79","#8f8a79","#908b79","#918c78","#928d78","#938e78","#948e78","#958f78","#969078","#979178","#989278","#999278","#9a9377","#9b9477","#9c9577","#9d9677","#9e9677","#9f9777","#a09877","#a19976","#a29a76","#a39a76","#a49b76","#a59c76","#a69d75","#a89e75","#a99f75","#aa9f75","#aba074","#aca174","#ada274","#aea374","#afa473","#b0a473","#b1a573","#b2a672","#b3a772","#b4a872","#b5a971","#b6a971","#b7aa71","#b8ab70","#b9ac70","#baad70","#bbae6f","#bcaf6f","#beaf6f","#bfb06e","#c0b16e","#c1b26d","#c2b36d","#c3b46d","#c4b56c","#c5b56c","#c6b66b","#c7b76b","#c8b86a","#c9b96a","#cbba69","#ccbb69","#cdbc68","#cebc68","#cfbd67","#d0be67","#d1bf66","#d2c066","#d3c165","#d4c264","#d6c364","#d7c463","#d8c563","#d9c562","#dac661","#dbc761","#dcc860","#ddc95f","#deca5f","#e0cb5e","#e1cc5d","#e2cd5c","#e3ce5c","#e4cf5b","#e5d05a","#e6d159","#e8d259","#e9d358","#ead357","#ebd456","#ecd555","#edd654","#efd753","#f0d852","#f1d951","#f2da50","#f3db4f","#f4dc4e","#f6dd4d","#f7de4c","#f8df4b","#f9e04a","#fae149","#fbe248","#fde346","#fee445","#ffe544","#ffe642","#ffe742","#ffe843","#ffe944","#ffea46"],E0=["#03051a","#04051a","#05061b","#06071c","#07071d","#08081e","#0a091f","#0b0920","#0d0a21","#0e0b22","#100b23","#110c24","#130d25","#140e26","#160e27","#170f28","#180f29","#1a102a","#1b112b","#1d112c","#1e122d","#20122e","#211330","#221331","#241432","#251433","#271534","#281535","#2a1636","#2b1637","#2d1738","#2e1739","#30173a","#31183b","#33183c","#34193d","#35193e","#37193f","#381a40","#3a1a41","#3c1a42","#3d1a42","#3f1b43","#401b44","#421b45","#431c46","#451c47","#461c48","#481c48","#491d49","#4b1d4a","#4c1d4b","#4e1d4b","#501d4c","#511e4d","#531e4d","#541e4e","#561e4f","#581e4f","#591e50","#5b1e51","#5c1e51","#5e1f52","#601f52","#611f53","#631f53","#641f54","#661f54","#681f55","#691f55","#6b1f56","#6d1f56","#6e1f57","#701f57","#711f57","#731f58","#751f58","#761f58","#781f59","#7a1f59","#7b1f59","#7d1f5a","#7f1e5a","#811e5a","#821e5a","#841e5a","#861e5b","#871e5b","#891e5b","#8b1d5b","#8c1d5b","#8e1d5b","#901d5b","#921c5b","#931c5b","#951c5b","#971c5b","#981b5b","#9a1b5b","#9c1b5b","#9e1a5b","#9f1a5b","#a11a5b","#a3195b","#a4195b","#a6195a","#a8185a","#aa185a","#ab185a","#ad1759","#af1759","#b01759","#b21758","#b41658","#b51657","#b71657","#b91657","#ba1656","#bc1656","#bd1655","#bf1654","#c11754","#c21753","#c41753","#c51852","#c71951","#c81951","#ca1a50","#cb1b4f","#cd1c4e","#ce1d4e","#cf1e4d","#d11f4c","#d2204c","#d3214b","#d5224a","#d62449","#d72549","#d82748","#d92847","#db2946","#dc2b46","#dd2c45","#de2e44","#df2f44","#e03143","#e13342","#e23442","#e33641","#e43841","#e53940","#e63b40","#e73d3f","#e83f3f","#e8403e","#e9423e","#ea443e","#eb463e","#eb483e","#ec4a3e","#ec4c3e","#ed4e3e","#ed503e","#ee523f","#ee543f","#ef5640","#ef5840","#ef5a41","#f05c42","#f05e42","#f06043","#f16244","#f16445","#f16646","#f26747","#f26948","#f26b49","#f26d4b","#f26f4c","#f3714d","#f3734e","#f37450","#f37651","#f37852","#f47a54","#f47c55","#f47d57","#f47f58","#f4815a","#f4835b","#f4845d","#f4865e","#f58860","#f58a61","#f58b63","#f58d64","#f58f66","#f59067","#f59269","#f5946b","#f5966c","#f5976e","#f59970","#f69b71","#f69c73","#f69e75","#f6a077","#f6a178","#f6a37a","#f6a47c","#f6a67e","#f6a880","#f6a981","#f6ab83","#f6ad85","#f6ae87","#f6b089","#f6b18b","#f6b38d","#f6b48f","#f6b691","#f6b893","#f6b995","#f6bb97","#f6bc99","#f6be9b","#f6bf9d","#f6c19f","#f7c2a2","#f7c4a4","#f7c6a6","#f7c7a8","#f7c9aa","#f7caac","#f7ccaf","#f7cdb1","#f7cfb3","#f7d0b5","#f8d1b8","#f8d3ba","#f8d4bc","#f8d6be","#f8d7c0","#f8d9c3","#f8dac5","#f8dcc7","#f9ddc9","#f9dfcb","#f9e0cd","#f9e2d0","#f9e3d2","#f9e5d4","#fae6d6","#fae8d8","#fae9da","#faebdd"],v0=["#0b0405","#0d0406","#0e0508","#0f0609","#10060a","#11070c","#12080d","#13090f","#140910","#150a12","#160b13","#170c15","#180d16","#190e18","#1a0e19","#1b0f1a","#1c101c","#1d111d","#1e111f","#1f1220","#201322","#211423","#221425","#231526","#241628","#251729","#26172b","#27182d","#28192e","#291930","#291a31","#2a1b33","#2b1c35","#2c1c36","#2d1d38","#2e1e39","#2e1e3b","#2f1f3d","#30203e","#312140","#312142","#322243","#332345","#342447","#342548","#35254a","#35264c","#36274d","#37284f","#372851","#382953","#382a54","#392b56","#3a2c58","#3a2c59","#3b2d5b","#3b2e5d","#3b2f5f","#3c3060","#3c3162","#3d3164","#3d3266","#3e3367","#3e3469","#3e356b","#3f366d","#3f366f","#3f3770","#403872","#403974","#403a76","#403b78","#403c79","#413d7b","#413e7d","#413e7f","#413f80","#414082","#414184","#414285","#414387","#414488","#40468a","#40478b","#40488d","#40498e","#3f4a8f","#3f4b90","#3f4c92","#3e4d93","#3e4f94","#3e5095","#3d5195","#3d5296","#3c5397","#3c5598","#3b5698","#3b5799","#3b589a","#3a599a","#3a5b9b","#3a5c9b","#395d9c","#395e9c","#385f9c","#38619d","#38629d","#38639d","#37649e","#37659e","#37669e","#37689f","#36699f","#366a9f","#366b9f","#366ca0","#366da0","#366fa0","#3670a0","#3671a0","#3572a1","#3573a1","#3574a1","#3575a1","#3576a2","#3578a2","#3579a2","#357aa2","#357ba3","#357ca3","#357da3","#357ea4","#347fa4","#3480a4","#3482a4","#3483a5","#3484a5","#3485a5","#3486a5","#3487a6","#3488a6","#3489a6","#348ba6","#348ca7","#348da7","#348ea7","#348fa7","#3490a8","#3491a8","#3492a8","#3493a8","#3495a9","#3496a9","#3497a9","#3498a9","#3499aa","#349aaa","#359baa","#359caa","#359eaa","#359fab","#35a0ab","#35a1ab","#36a2ab","#36a3ab","#36a4ab","#37a5ac","#37a6ac","#37a8ac","#38a9ac","#38aaac","#39abac","#39acac","#3aadac","#3aaead","#3bafad","#3cb1ad","#3cb2ad","#3db3ad","#3eb4ad","#3fb5ad","#3fb6ad","#40b7ad","#41b8ad","#42b9ad","#43baad","#44bcad","#45bdad","#46bead","#47bfad","#48c0ad","#49c1ad","#4bc2ad","#4cc3ad","#4dc4ad","#4fc5ad","#50c6ad","#52c7ad","#53c9ad","#55caad","#57cbad","#59ccad","#5bcdad","#5ecdad","#60ceac","#62cfac","#65d0ad","#68d1ad","#6ad2ad","#6dd3ad","#70d4ad","#73d4ad","#76d5ae","#79d6ae","#7cd6af","#7fd7af","#82d8b0","#85d9b1","#88d9b1","#8bdab2","#8edbb3","#91dbb4","#94dcb5","#96ddb5","#99ddb6","#9cdeb7","#9edfb8","#a1dfb9","#a4e0bb","#a6e1bc","#a9e1bd","#abe2be","#aee3c0","#b0e4c1","#b2e4c2","#b5e5c4","#b7e6c5","#b9e6c7","#bbe7c8","#bee8ca","#c0e9cc","#c2e9cd","#c4eacf","#c6ebd1","#c8ecd2","#caedd4","#ccedd6","#ceeed7","#d0efd9","#d2f0db","#d4f1dc","#d6f1de","#d8f2e0","#daf3e1","#dcf4e3","#def5e5"],_0=["#000000","#111111","#222222","#333333","#444444","#555555","#666666","#777777","#888888","#999999","#aaaaaa","#bbbbbb","#cccccc","#dddddd","#eeeeee","#ffffff"],pi=e=>e.slice().reverse(),Zu={turbo:d0,"turbo-reversed":pi(d0),grey:_0,"grey-reversed":pi(_0),magma:g0,"magma-reversed":pi(g0),inferno:h0,"inferno-reversed":pi(h0),plasma:b0,"plasma-reversed":pi(b0),viridis:y0,"viridis-reversed":pi(y0),cividis:x0,"cividis-reversed":pi(x0),rocket:E0,"rocket-reversed":pi(E0),mako:v0,"mako-reversed":pi(v0)};function Cr(e,n){let t=(n>>>24&255)/255,i=(n>>>16&255)/255,r=(n>>>8&255)/255,o=(n&255)/255;return Math.abs(o-1)<1e-4?e.tuple(e.number(t),e.number(i),e.number(r)):e.tuple(e.number(t),e.number(i),e.number(r),e.number(o))}var RN={...Zu,...ju,...Gu};function I0(e,n,t){t=Math.max(0,Math.min(1,t));let i=n.length;if(i===0)return e.error("expected-value");if(i===1)return Cr(e,ft(n[0]));let r=t*(i-1),o=Math.floor(r),s=r-o;if(o>=i-1)return Cr(e,ft(n[i-1]));if(s<1e-9)return Cr(e,ft(n[o]));let a=T0(n[o],n[o+1],s),u=a.r/255,l=a.g/255,c=a.b/255;return e.tuple(e.number(u),e.number(l),e.number(c))}function mi(e,n){if(q(n)){let t=n.string;if(!t)return;let i=ft(t);return{r:i>>>24&255,g:i>>>16&255,b:i>>>8&255,alpha:(i&255)/255}}if(n.operator==="Tuple"&&n.ops&&n.ops.length>=3){let t={r:n.ops[0].re*255,g:n.ops[1].re*255,b:n.ops[2].re*255};return n.ops.length>=4&&(t.alpha=n.ops[3].re),t}}function Bi(e,n,t){let i=n.map(r=>e.number(r));return t!==void 0&&Math.abs(t-1)>1e-4&&i.push(e.number(t)),e.tuple(...i)}function PN(e){let n=Math.round(Math.max(0,Math.min(255,e.r))),t=Math.round(Math.max(0,Math.min(255,e.g))),i=Math.round(Math.max(0,Math.min(255,e.b))),r=`#${n.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}`;if(e.alpha!==void 0&&Math.abs(e.alpha-1)>1e-4){let o=Math.round(Math.max(0,Math.min(255,e.alpha*255)));return r+o.toString(16).padStart(2,"0")}return r}var w0={Color:{description:"Convert a color string to a canonical sRGB tuple",complexity:8e3,signature:"(string) -> tuple",evaluate:(e,{engine:n})=>{let t=q(e[0])?e[0].string:void 0;if(!t)return n.error("incompatible-type");let i=ft(t);return i===0&&t.trim().toLowerCase()!=="transparent"?n.error("incompatible-type"):Cr(n,i)}},ColorToString:{description:"Convert a color to a string in the specified format",complexity:8e3,signature:"(any, string?) -> string",evaluate:(e,{engine:n})=>{let t=mi(n,e[0]);if(!t)return n.error("incompatible-type");switch(e.length>=2&&q(e[1])?e[1].string?.toLowerCase():"hex"){case"hex":return n.string(PN(t));case"rgb":{let r=Math.round(t.r),o=Math.round(t.g),s=Math.round(t.b);return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?n.string(`rgb(${r} ${o} ${s} / ${t.alpha})`):n.string(`rgb(${r} ${o} ${s})`)}case"hsl":{let r=ko(t.r,t.g,t.b),o=Math.round(r.h*10)/10,s=Math.round(r.s*1e3)/10,a=Math.round(r.l*1e3)/10;return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?n.string(`hsl(${o} ${s}% ${a}% / ${t.alpha})`):n.string(`hsl(${o} ${s}% ${a}%)`)}case"oklch":{let r=Mn(t),o=Math.round(r.L*1e3)/1e3,s=Math.round(r.C*1e3)/1e3,a=Math.round(r.H*10)/10;return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?n.string(`oklch(${o} ${s} ${a} / ${t.alpha})`):n.string(`oklch(${o} ${s} ${a})`)}default:return n.error("expected-value")}}},ColorMix:{description:"Mix two colors in OKLCh space",complexity:8e3,signature:"(any, any, number?) -> tuple",evaluate:(e,{engine:n})=>{let t=mi(n,e[0]),i=mi(n,e[1]);if(!t||!i)return n.error("incompatible-type");let r=.5;if(e.length>=3&&e[2]!==void 0){if(r=e[2].re,!Number.isFinite(r))return n.error("expected-value");r=Math.max(0,Math.min(1,r))}let o=Mn(t),s=Mn(i),a=Jt(Cf(o,s,r)),u=a.r/255,l=a.g/255,c=a.b/255,f=t.alpha??1,p=i.alpha??1,d=f+(p-f)*r;return Math.abs(d-1)>1e-4?n.tuple(n.number(u),n.number(l),n.number(c),n.number(d)):n.tuple(n.number(u),n.number(l),n.number(c))}},Colormap:{description:"Sample colors from a named palette",complexity:8e3,signature:"(string, number?) -> any",evaluate:(e,{engine:n})=>{let t=q(e[0])?e[0].string:void 0;if(!t)return n.error("incompatible-type");let i=RN[t];if(!i)return n.error("expected-value",t);if(e.length<2||e[1]===void 0){let o=i.map(s=>Cr(n,ft(s)));return n.function("List",o)}let r=e[1].re;if(!Number.isFinite(r))return n.error("expected-value");if(Number.isInteger(r)&&r>=2){let o=r,s=[];for(let a=0;a<o;a++)s.push(I0(n,i,a/(o-1)));return n.function("List",s)}return I0(n,i,r)}},ColorToColorspace:{description:"Convert a color to components in a target color space",complexity:8e3,signature:"(any, string) -> tuple",evaluate:(e,{engine:n})=>{let t=mi(n,e[0]);if(!t)return n.error("incompatible-type");let i=q(e[1])?e[1].string?.toLowerCase():void 0;if(!i)return n.error("incompatible-type");let r=t.alpha;switch(i){case"rgb":return Bi(n,[t.r/255,t.g/255,t.b/255],r);case"hsl":{let o=ko(t.r,t.g,t.b);return Bi(n,[o.h,o.s,o.l],r)}case"oklch":{let o=Mn(t);return Bi(n,[o.L,o.C,o.H],r)}case"oklab":case"lab":{let o=qs(t);return Bi(n,[o.L,o.a,o.b],r)}default:return n.error("expected-value")}}},ColorFromColorspace:{description:"Convert color space components to a canonical sRGB tuple",complexity:8e3,signature:"(tuple, string) -> tuple",evaluate:(e,{engine:n})=>{let t=e[0];if(!m(t)||t.operator!=="Tuple"||t.ops.length<3)return n.error("incompatible-type");let i=t.ops[0].re,r=t.ops[1].re,o=t.ops[2].re,s=t.ops.length>=4?t.ops[3].re:void 0,a=q(e[1])?e[1].string?.toLowerCase():void 0;if(!a)return n.error("incompatible-type");let u;switch(a){case"rgb":return Bi(n,[i,r,o],s);case"hsl":{let l=Fs(i,r,o);return Bi(n,[l.r/255,l.g/255,l.b/255],s)}case"oklch":return u=Jt({L:i,C:r,H:o}),Bi(n,[u.r/255,u.g/255,u.b/255],s);case"oklab":case"lab":return u=kr({L:i,a:r,b:o}),Bi(n,[u.r/255,u.g/255,u.b/255],s);default:return n.error("expected-value")}}},ColorContrast:{description:"APCA contrast ratio between two colors",complexity:8e3,signature:"(any, any) -> number",evaluate:(e,{engine:n})=>{let t=mi(n,e[0]),i=mi(n,e[1]);return!t||!i?n.error("incompatible-type"):n.number(Mo(t,i))}},ContrastingColor:{description:"Choose the foreground color with better APCA contrast against a background",complexity:8e3,signature:"(any, any?, any?) -> tuple",evaluate:(e,{engine:n})=>{let t=mi(n,e[0]);if(!t)return n.error("incompatible-type");if(e.length>=3&&e[1]!==void 0&&e[2]!==void 0){let r=mi(n,e[1]),o=mi(n,e[2]);if(!r||!o)return n.error("incompatible-type");let s=Co({bg:t,fg1:r,fg2:o});return Cr(n,s)}let i=Co(t);return Cr(n,i)}}};var k0=[{Block:{description:"Evaluate a sequence of expressions in a local scope.",lazy:!0,scoped:!0,signature:"(unknown*) -> unknown",type:e=>e.length===0?"nothing":e[e.length-1].type,canonical:ON,evaluate:$N},Condition:{description:"Test whether a value satisfies one or more conditions.",lazy:!0,signature:"(value, symbol) -> boolean",evaluate:([e,n],{engine:t})=>{let i=[];return _(n)?i=[n.symbol]:m(n,"And")&&(i=n.ops.map(r=>v(r)??"")),Vb(e,i)?t.True:t.False}},If:{description:"Conditional branch: evaluate one of two expressions.",lazy:!0,signature:"(expression, expression, expression) -> any",type:([e,n,t])=>Se(n.type.type,t.type.type),canonical:([e,n,t],{engine:i})=>i._fn("If",[e.canonical,n.canonical,t.canonical]),evaluate:([e,n,t],{engine:i})=>{let r=v(e.evaluate());if(r==="True")return n?.evaluate()??i.Nothing;if(r==="False")return t?.evaluate()??i.Nothing;throw new Error(`Condition must evaluate to "True" or "False". ${st(e)}`)}},Loop:{description:"Evaluate a body expression over elements of a collection.",lazy:!0,signature:"(body:expression, collection:expression) -> any",type:([e])=>e.type,evaluate:([e,n],{engine:t})=>Dt(M0(e,n,t),t._timeRemaining),evaluateAsync:async([e,n],{engine:t,signal:i})=>co(M0(e,n,t),t._timeRemaining,i)},Which:{description:"Return the value for the first condition that is true.",lazy:!0,signature:"(expression+) -> unknown",type:e=>e.length%2!==0?"nothing":Se(...e.filter((n,t)=>t%2===1).map(n=>n.type.type)),canonical:(e,n)=>e.length%2!==0?n.engine.Nothing:n.engine._fn("Which",e.map(t=>t.canonical)),evaluate:(e,n)=>DN(e,n)},FixedPoint:{description:"Iterate a function until a fixed point is reached.",lazy:!0,signature:"(any) -> unknown"}}];function DN(e,n){let t=0;for(;t<e.length-1;){let i=v(e[t].evaluate());if(i==="True")return e[t+1]?e[t+1].evaluate(n):n.engine.symbol("Undefined");if(i!=="False")throw new Error(`Condition must evaluate to "True" or "False". ${st(e[t])}`);t+=2}return n.engine.symbol("Undefined")}function $N(e,{engine:n}){return e.length===0?n.Nothing:La(n,e)}function ON(e,n){let{engine:t,scope:i}=n;return e.length===0?null:t._fn("Block",t._inScope(i,()=>e.map(o=>o.canonical)),{scope:i})}function*M0(e,n,t){if(e??=t.Nothing,v(e)==="Nothing")return e;if(n?.isCollection){let r,o=Le(e),s=0;for(let a of n.each()){if(r=o([a])??t.Nothing,m(r,"Break"))return r.op1;if(r.operator==="Return")return r;if(s+=1,yield r,s>t.iterationLimit)throw new vn({cause:"iteration-limit-exceeded"})}return r}let i=0;for(;;){let r=e.evaluate();if(m(r,"Break"))return r.op1;if(r.operator==="Return")return r;if(i+=1,yield r,i>t.iterationLimit)throw new vn({cause:"iteration-limit-exceeded"})}}var C0=[{Choose:{description:"Binomial coefficient: number of ways to choose k items from n.",complexity:1200,signature:"(n:number, m:number) -> number",type:()=>"finite_integer",evaluate:(e,{engine:n})=>{let t=e[0].re,i=e[1].re;if(!(!Number.isFinite(t)||!Number.isFinite(i)))return t<0||i<0||i>t?n.NaN:n.number(Vt(t,i))}}},{Fibonacci:{description:"Compute the nth Fibonacci number.",wikidata:"Q47577",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null)return;if(t<0n)return n.function("Negate",["Fibonacci",n.number(-t)]);if(t===0n)return n.Zero;if(t===1n)return n.One;let i=0n,r=1n;for(let o=2n;o<=t;o++){let s=i+r;i=r,r=s}return n.number(r)}},Binomial:{description:"Compute the binomial coefficient C(n, k) = n! / (k! (n-k)!).",wikidata:"Q209875",signature:"(integer, integer) -> integer",type:()=>"finite_integer",evaluate:([e,n],{engine:t})=>{let i=He(e),r=He(n);if(i===null||r===null)return;if(r<0n||r>i)return t.number(0);if(r===0n||r===i)return t.number(1);let o=1n;for(let s=1n;s<=r;s++)o*=i-(r-s),o/=s;return t.number(o)}},CartesianProduct:{description:"Return the Cartesian product of input sets.",wikidata:"Q173740",signature:"(set+) -> set",collection:{contains:(e,n)=>{if(!m(e))return!1;let t=e.ops;if(!n.isCollection||!m(n)||n.ops.length!==t.length)return!1;let i=n.ops;return t.every((r,o)=>r.contains(i[o])??!1)},count:e=>{if(!m(e))return 0;let n=e.ops.map(t=>t.count);return n.includes(1/0)?1/0:n.reduce((t,i)=>t*i,1)},iterator:LN}},PowerSet:{description:"Return the power set of a set (set of all subsets).",wikidata:"Q205170",signature:"(set) -> set",collection:{contains:(e,n)=>{if(!m(e))return!1;let t=e.ops[0];return!n.isCollection||!m(n)?!1:n.ops.every(i=>t.contains(i)??!1)},count:e=>{if(!m(e))return 0;let n=e.ops[0];return n.isEmptyCollection?1:n.isFiniteCollection===!1?1/0:2**n.count},iterator:FN}},Permutations:{description:"Return all permutations of length k (default full length) of a collection.",signature:"(collection, integer?) -> list<list>",evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=Array.from(e.each()),r=n?ie(n):i.length;if(r===null||r<0||r>i.length)return;function*o(s,a){if(s.length===r){yield s;return}for(let u=0;u<a.length;u++){let l=a.slice(),[c]=l.splice(u,1);yield*o([...s,c],l)}}return t.function("List",[...o([],i)].map(s=>t.function("List",s)))}},Combinations:{description:"Return all k-element combinations of a collection.",wikidata:"Q193606",signature:"(collection, integer) -> list<list>",evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=Array.from(e.each()),r=ie(n);if(r===null||r<0||r>i.length)return;function*o(s,a){if(a.length===r){yield a;return}for(let u=s;u<i.length;u++)yield*o(u+1,[...a,i[u]])}return t.function("List",[...o(0,[])].map(s=>t.function("List",s)))}},Multinomial:{description:"Compute the multinomial coefficient for multiple integers.",wikidata:"Q20820114",signature:"(integer+) -> integer",type:()=>"finite_integer",evaluate:(e,{engine:n})=>{let t=e.map(ie);if(t.some(o=>o===null||o<0))return;let i=t.reduce((o,s)=>o+(s??0),0),r=1;for(let o=1;o<=i;o++)r*=o;for(let o of t)for(let s=1;s<=o;s++)r/=s;return n.number(r)}},Subfactorial:{description:"Compute the number of derangements (subfactorial) of n items.",wikidata:"Q2361661",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=ie(e);if(t===null||t<0)return;let i=1;for(let r=1;r<=t;r++)i=Math.round(i*r*(1-1/r));return n.number(i)}},BellNumber:{description:"Compute the Bell number B(n), the number of partitions of a set of n elements.",wikidata:"Q816063",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=ie(e);if(t===null||t<0)return;let i=[1];for(let r=1;r<=t;r++){let o=0;for(let s=0;s<r;s++)o+=qN(r-1,s)*i[s];i[r]=o}return n.number(i[t])}}}];function*LN(e){if(!m(e))return;let n=e.ops,t=n.map(o=>[...o.each()]),i=t.map(o=>o.length);if(i.some(o=>o===0))return;let r=Array(n.length).fill(0);for(;;){let o=r.map((a,u)=>t[u][a]);yield e.engine._fn("Tuple",o);let s=r.length-1;for(;s>=0&&(r[s]++,!(r[s]<i[s]));)r[s]=0,s--;if(s<0)break}}function*FN(e){if(!m(e))return;let n=[...e.ops[0].each()],t=n.length,i=e.engine,r=1<<t;for(let o=0;o<r;o++){let s=[];for(let a=0;a<t;a++)(o&1<<a)!==0&&s.push(n[a]);yield s.length===0?i.symbol("EmptySet"):i._fn("Set",s)}}function qN(e,n){if(n<0||n>e)return 0;if(n===0||n===e)return 1;let t=1;for(let i=1;i<=n;i++)t*=e-(n-i),t/=i;return t}var A0=[{Real:{description:"Real part of a complex number.",broadcastable:!0,complexity:1200,signature:"(number) -> real",type:()=>"finite_real",sgn:([e])=>{let n=e.re;if(!isNaN(n))return n===0?"zero":n>0?"positive":"negative"},evaluate:(e,{engine:n})=>{if(!E(e[0]))return;let t=e[0].numericValue;return typeof t=="number"?e[0]:n.number(t.bignumRe??t.re)}},Imaginary:{description:"Imaginary part of a complex number.",broadcastable:!0,complexity:1200,signature:"(number) -> real",type:()=>"finite_real",sgn:([e])=>{let n=e.im;if(!isNaN(n))return n===0?"zero":n>0?"positive":"negative"},evaluate:(e,{engine:n})=>{if(!E(e[0]))return;let t=e[0].numericValue;return typeof t=="number"?n.Zero:n.number(t.im)}},Argument:{description:"Complex argument (phase angle) of a number.",broadcastable:!0,complexity:1200,signature:"(number) -> real",type:()=>"finite_real",evaluate:(e,{engine:n})=>{if(!E(e[0]))return;let t=e[0].numericValue;return typeof t=="number"?t>=0?n.Zero:n.Pi:t.im===0?t.re>=0?n.Zero:n.Pi:n.function("ArcTan2",[t.im,t.re]).evaluate()}},AbsArg:{description:"Tuple of magnitude and argument of a complex number.",broadcastable:!0,complexity:1200,signature:"(number) -> tuple<real, real>",evaluate:(e,{engine:n})=>{if(E(e[0]))return n.tuple(n.function("Abs",e).evaluate(),n.function("Argument",e).evaluate())}},Conjugate:{description:"Complex conjugate of a number.",broadcastable:!0,complexity:1200,signature:"(number) -> number",type:([e])=>e.type,sgn:([e])=>e.sgn,evaluate:(e,{engine:n})=>{if(!E(e[0]))return;let t=e[0].numericValue;return typeof t=="number"||t.im===0?e[0]:n.number(n.complex(t.re,-t.im))}},ComplexRoots:{description:"All n-th complex roots of a number.",broadcastable:!0,complexity:1200,signature:"(number, number) -> list<number>",evaluate:(e,{engine:n})=>{let t=e[0].re;if(isNaN(t))return;let i=e[1].re;if(!Number.isInteger(i)||i<=0)return;let r=[],o=e[0].im??0,s=Math.atan2(o,t),a=Math.sqrt(t*t+o*o);for(let u=0;u<i;u++){let l=(s+2*Math.PI*u)/i,c=Math.pow(a,1/i);r.push([c*Math.cos(l),c*Math.sin(l)])}return n.function("List",r.map(u=>n.number(u[1]!==0?n.complex(u[0],u[1]):u[0])))}}}];function Hu(e,{engine:n}){if(e.length===0)return null;let t=e[0];if(e.length===1)return t.canonical;if(e.length===2){let i=P0(t);if(!Number.isNaN(i)){let s=e[1];if((s.operator==="Divide"||s.operator==="Rational")&&m(s)){let[a,u]=[s.op1.canonical.re,s.op2.canonical.re];if(a>0&&a<=1e3&&u>1&&u<=1e3&&Number.isInteger(a)&&Number.isInteger(u)){let l=s.canonical;return i<0&&(l=l.neg()),n._fn("Add",[t.canonical,l])}}}let r=e[1];if(!Number.isNaN(i)&&fs(r))return n.number(n.complex(0,i));let o=t.canonical;if(_(o)&&m(r,"Delimiter")){if(r.nops===0){let u=n.lookupDefinition(o.symbol);return u?xe(u)?n.box([o.symbol]):u.value.type.isUnknown?(o.infer("function"),n.box([o.symbol])):u.value.type.matches("function")?n.box([o.symbol]):n.typeError("function",u.value.type,o):(n.declare(o.symbol,"function"),n.box([o.symbol]))}let s=m(r.op1,"Sequence")?r.op1.ops:[r.op1];s=be(s);let a=n.lookupDefinition(o.symbol);if(!a)return n.declare(o.symbol,"function"),n.function(o.symbol,s);if(xe(a)||a.value?.type?.matches("function"))return n.function(o.symbol,s);if(a.value?.type?.isUnknown)return o.infer("function"),n.function(o.symbol,s)}if(_(o)&&r.operator==="Delimiter"&&m(r)&&q(r.op2)&&(r.op2.string==="[,]"||r.op2.string==="[;]")){let s=m(r.op1,"Sequence")?r.op1.ops:[r.op1];return n.function("At",[o,...s])}}e=R0(e);{let i=e.filter(r=>r.operator!=="HorizontalSpacing");if(i.length===2){let[r,o]=i;if(E(r)&&m(o,"__unit__"))return n._fn("Quantity",[r.canonical,o.op1.canonical]);if(E(o)&&m(r,"__unit__"))return n._fn("Quantity",[o.canonical,r.op1.canonical])}}return e=be(e),e.every(i=>i.isValid&&(i.type.isUnknown||i.type.matches("number")||i.isIndexedCollection&&!q(i)))?n._fn("Multiply",e):n._fn("Tuple",e)}function R0(e){let n=[];for(let t of e)m(t,"InvisibleOperator")?n.push(...R0(t.ops)):n.push(t);return n}function P0(e){if(E(e)){let n=e.re;if(Number.isInteger(n))return n}if(m(e,"Negate")){let n=P0(e.op1);if(!Number.isNaN(n))return-n}return Number.NaN}function Ar(e,n,t){if(n===!1)return e;if(n===!0)return e.engine._inScope(t,()=>e.canonical);typeof n=="string"&&(n=[n]),e=L0(e);for(let i of n)switch(i){case"InvisibleOperator":e=Af(e);break;case"Number":e=D0(e);break;case"Multiply":e=$0(e);break;case"Add":e=O0(e);break;case"Power":e=Yu(e);break;case"Divide":e=F0(e);break;case"Flatten":e=Wu(e);break;case"Order":e=Kc(e,{recursive:!0});break;default:throw Error("Invalid canonical form")}return m(e)&&e.isCanonical&&(e=e.engine.function(e.operator,[...e.ops],{form:"structural"})),e}function Wu(e){if(!e.operator||!m(e)||e.nops===0)return e;if(e.operator==="Delimiter")return Wu(e.op1);let n=e.engine,t=e.operator==="Add"||e.operator==="Multiply";if(!t){let r=n.lookupDefinition(e.operator);xe(r)&&r.operator.associative&&(t=!0)}if(t)return n._fn(e.operator,be(e.ops.map(Wu),e.operator,!1),{canonical:!1});let i=e.ops.map(Wu);return i.every((r,o)=>r===e.ops[o])?e:n._fn(e.operator,i,{canonical:!1})}function Af(e){return m(e)?e.operator==="InvisibleOperator"?Hu(e.ops.map(Af),{engine:e.engine})??e:e.engine._fn(e.operator,[...e.ops].map(Af)):e}function D0(e){if(E(e))return e.canonical;if(fs(e))return e.engine.I;if(!m(e))return e;let{engine:n}=e,t=e.ops.map(D0),{operator:i}=e;if((i==="Divide"||i==="Rational")&&t.length===2){let r=Ot(t[0]);if(r!==null){let o=Ot(t[1]);if(o!==null)return n.number([r,o])}return i="Divide",n._fn("Divide",t,{canonical:!1})}if(i==="Complex"){if(t.length===1){let r=t[0];return E(r)?n.number(n.complex(0,r.re)):n._fn("Multiply",[r,n.I],{canonical:!1})}if(t.length===2){let r=t[0].re,o=t[1].re;return o!==null&&r!==null&&!isNaN(o)&&!isNaN(r)?o===0&&r===0?n.Zero:o!==0?n.number(n._numericValue({re:r,im:o})):t[0]:n._fn("Add",[t[0],n._fn("Multiply",[t[1],n.I],{canonical:!1})],{canonical:!1})}throw new Error("Expected one or two arguments with `Complex` expression")}if(i==="Negate"&&t.length===1){let r=t[0];if(E(r)){let{numericValue:o}=r;if(o!==void 0)return n.number(typeof o=="number"?-o:o.neg())}if(fs(r))return n.number(n.complex(0,-1))}return t.every((r,o)=>r===e.ops[o])?e:n._fn(i,t,{canonical:!1})}function $0(e){if(!m(e))return e;let n=e.ops.map($0);return e.operator==="Multiply"?cn(e.engine,n):e.operator==="Negate"?cn(e.engine,[n[0],e.engine.NegativeOne]):e}function O0(e){if(!m(e))return e;let n=e.ops.map(O0);return e.operator==="Add"?ut(e.engine,n):e.operator==="Subtract"?ut(e.engine,[n[0],n[1].neg()]):e.engine._fn(e.operator,n)}function Yu(e){if(!m(e))return e;let n=e.ops.map(t=>Yu(t));return e.operator==="Power"?oi(n[0],n[1]):e.engine._fn(e.operator,n,{canonical:!1})}function L0(e){return _(e)?e.canonical:m(e)?e.engine._fn(e.operator,e.ops.map(L0),{canonical:!1}):e}function F0(e){return m(e,"Divide")?_t(Yu(e.op1),Yu(e.op2)):m(e)?e.engine._fn(e.operator,e.ops.map(F0)):e}var di=new WeakMap;function VN(e){return di.has(e)||di.set(e,new Map),di.get(e)}function BN(e,n){VN(e).set(n.name,n)}function JN(e){if(typeof e=="number")return{type:"exact",values:[e]};let t=e.split(",").map(r=>r.trim()).map(r=>{let o=Number(r);return isNaN(o)?r:o});return{type:t.some(r=>typeof r=="string")?"pattern":"exact",values:t}}function zN(e,n){if(e.values.length!==n.length)return!1;let t=new Map;for(let i=0;i<e.values.length;i++){let r=e.values[i],o=n[i];if(typeof r=="number"){if(r!==o)return!1}else if(t.has(r)){if(t.get(r)!==o)return!1}else t.set(r,o)}return!0}function UN(e){let n=[];for(let[t,i]of e){let r=JN(t),o=r.values.filter(s=>typeof s=="string").length;n.push({pattern:r,value:i,variableCount:o})}return n.sort((t,i)=>t.pattern.type!==i.pattern.type?t.pattern.type==="exact"?-1:1:t.variableCount-i.variableCount),n}function jN(e,n){for(let{pattern:t,value:i}of e)if(zN(t,n))return i}function GN(e,n,t){for(let i=0;i<n.length;i++){let r=n[i],o=e[i],s=t[r];if(s&&(s.min!==void 0&&o<s.min||s.max!==void 0&&o>s.max))return!1}return!0}function ZN(e,n,t,i){let r={};for(let a=0;a<t.length;a++)r[t[a]]=e.number(i[a]);let s=n.subs(r).evaluate();if(_(s)){if(s.symbol==="True")return!0;if(s.symbol==="False")return!1}return E(s)?s.re!==0:!1}function Rf(e,n,t){let i=t.variables!==void 0&&t.variables.length>1,r=t.variables??[t.variable??"n"],o=r[0],s=t.memoize??!0,a=s?new Map:null,u=t.domain??{},l=t.recurrence,c=null,f=null;t.constraints&&(f=typeof t.constraints=="string"?e.parse(t.constraints):t.constraints);let p=new Map;for(let[g,h]of Object.entries(t.base)){let b=i?String(g):Number(g);p.set(b,typeof h=="number"?e.number(h):h)}let d=i?UN(p):null;return BN(e,{name:n,variable:i?void 0:o,variables:i?r:void 0,isMultiIndex:i,base:p,memoize:s,memo:a,domain:u,constraints:f??void 0}),(g,{engine:h,numericApproximation:b})=>{c===null&&(c=typeof l=="string"?h.parse(l):l);let y;if(m(g,"Sequence")?y=g.ops.map(M=>M.evaluate().re):m(g,"Tuple")?y=g.ops.map(M=>M.evaluate().re):m(g,"Delimiter")?y=g.ops.map(M=>M.evaluate().re):y=[g.evaluate().re],!y.every(M=>Number.isInteger(M)))return;if(i){let M=u;if(Object.keys(M).length>0&&!GN(y,r,M))return}else{let M=u,w=y[0];if(M.min!==void 0&&w<M.min||M.max!==void 0&&w>M.max)return}if(f&&!ZN(h,f,r,y))return;let x=i?y.join(","):y[0];if(a?.has(x))return a.get(x);if(i){let M=jN(d,y);if(M!==void 0)return a&&a.set(x,M),M}else{let M=y[0];if(p.has(M))return p.get(M)}let N={};for(let M=0;M<r.length;M++)N[r[M]]=h.number(y[M]);let T=c.subs(N),I=b?T.N():T.evaluate();return a&&E(I)&&a.set(x,I),E(I)?I:void 0}}function Pf(e,n,t){return!t.base||Object.keys(t.base).length===0?{valid:!1,error:`Sequence "${n}" requires at least one base case`}:t.recurrence?(typeof t.recurrence=="string"?e.parse(t.recurrence):t.recurrence).isValid?{valid:!0}:{valid:!1,error:`Invalid recurrence for "${n}": expression contains errors`}:{valid:!1,error:`Sequence "${n}" requires a recurrence relation`}}var Vs=new WeakMap;function Bs(e,n){Vs.has(e)||Vs.set(e,new Map);let t=Vs.get(e);return t.has(n)||t.set(n,{base:new Map,isMultiIndex:!1}),t.get(n)}function q0(e,n,t,i){Bs(e,n).base.set(t,i),Qu(e,n)}function Df(e,n,t,i){let r=Bs(e,n);r.base.set(t,i),r.isMultiIndex=!0,Qu(e,n)}function $f(e,n,t,i){let r=Bs(e,n);r.recurrence={variable:t,latex:i.latex},Qu(e,n)}function V0(e,n,t,i){let r=Bs(e,n);r.recurrence={variables:t,latex:i.latex},r.isMultiIndex=!0,Qu(e,n)}function Qu(e,n){let t=Bs(e,n);if(t.base.size===0||!t.recurrence)return;let i={};for(let[l,c]of t.base)i[l]=c;let r={base:i,recurrence:t.recurrence.latex};t.isMultiIndex||t.recurrence.variables?r.variables=t.recurrence.variables:r.variable=t.recurrence.variable;let o=Pf(e,n,r);if(!o.valid)throw new Error(o.error);let s=Rf(e,n,r),u=e.context.lexicalScope.bindings.get(n);u?ot(e,n,u,{subscriptEvaluate:s}):e.declare(n,{subscriptEvaluate:s}),Vs.get(e).delete(n)}function Js(e,n){if(m(e)){if(e.operator==="Subscript"){let t=e.op1;if(_(t,n))return!0}return e.ops.some(t=>Js(t,n))}return!1}function Of(e){if(_(e))return e.symbol;let n=e.symbols;if(n.length===1)return n[0];let t=["n","k","i","j","m"];for(let i of t)if(n.includes(i))return i}function B0(e,n){let i=Vs.get(e)?.get(n);if(i){let o=Array.from(i.base.keys());return i.isMultiIndex||o.sort((s,a)=>s-a),{status:"pending",hasBase:i.base.size>0,hasRecurrence:!!i.recurrence,baseIndices:o,variable:i.recurrence?.variable,variables:i.recurrence?.variables}}let r=e.lookupDefinition(n);if(r&&se(r)&&r.value.subscriptEvaluate){let s=di.get(e)?.get(n);if(s){let a=Array.from(s.base.keys());return s.isMultiIndex||a.sort((u,l)=>u-l),{status:"complete",hasBase:!0,hasRecurrence:!0,baseIndices:a,variable:s.variable,variables:s.variables}}return{status:"complete",hasBase:!0,hasRecurrence:!0,baseIndices:[]}}return{status:"not-a-sequence",hasBase:!1,hasRecurrence:!1,baseIndices:[]}}function J0(e,n){let i=di.get(e)?.get(n);if(!i)return;let r=Array.from(i.base.keys());return i.isMultiIndex||r.sort((o,s)=>o-s),{name:i.name,variable:i.variable,variables:i.variables,baseIndices:r,memoize:i.memoize,domain:i.domain,cacheSize:i.memo?.size??0,isMultiIndex:i.isMultiIndex}}function z0(e){let n=di.get(e);return n?Array.from(n.keys()):[]}function Lf(e,n){return di.get(e)?.has(n)??!1}function U0(e,n){let t=di.get(e);if(t)if(n!==void 0){let i=t.get(n);i?.memo&&i.memo.clear()}else for(let i of t.values())i.memo&&i.memo.clear()}function j0(e,n){let i=di.get(e)?.get(n);if(i?.memo)return new Map(i.memo)}function G0(e,n,t,i,r=1){if(!Number.isInteger(t)||!Number.isInteger(i)||r<=0||!Number.isInteger(r)||!Lf(e,n))return;let o=[];for(let s=t;r>0?s<=i:s>=i;s+=r){let u=e.parse(`${n}_{${s}}`).evaluate();if(E(u))o.push(u);else return}return o}function zs(e){return e[Math.floor(Math.random()*e.length)]}function Z0(e,n){if(e==="Add"||e==="Multiply"){let t=[],i=1+Math.floor(Math.random()*12);for(;i>0;)t.push(zt(n+1)),i-=1;return[e,...t]}return e==="Divide"||e==="Power"?[e,zt(n+1),zt(n+1)]:e==="Root"?[e,zt(n+1),zt(10)]:e==="trig"?HN():[e,zt(n+1)]}function HN(){return[zs(["Cos","Sin","Tan","Sinh","Arccos","Arsinh"]),zs(["Pi","-1","0","1",["Divide","Pi",-5],["Multiply",-2,["Divide","Pi",11]],["Multiply","Half","Pi"],["Multiply",5,"Pi"],["Multiply",12,"Pi"],["Divide","Pi",5],["Divide","Pi",9],["Multiply",5,["Divide","Pi",9]],["Multiply",2,["Divide","Pi",11]],["Multiply",2,["Divide","Pi",3]]])]}function zt(e){if(e??=1,e===1){let n=zs([["Sqrt",["Multiply",6,["Sum",["Divide",1,["Power","n",2]],["Triple",["Hold","n"],1,"PositiveInfinity"]]]],"Add","Add","Add","Add","Add","Multiply","Multiply","Multiply","Multiply","Divide","Divide","Divide","Root","Sqrt","Subtract","Negate","trig"]);return typeof n=="string"?Z0(n,1):n}if(e===2){let n=Math.random();if(n>.75)return zt(1);if(n>.5)return zt(3);let t=zs(["Multiply","Multiply","Add","Power","trig","Ln","Exp"]);return Z0(t,2)}return zs([-12345e-9,-2,-2,-2,-3,-5,-6,-12,-1654e-60,0,0,12345e-8,1654e-60,1,2,2,2,2,3,3,5,5,6,6,1234.5678,5678.1234,10,15,18,30,60,1234e54,"123456789.12345678912345e200","987654321.12345678912345",["Rational",-6,10],["Rational",-12,15],["Rational",-15,12],["Rational",3,5],["Rational",12,15],["Rational",15,12],"ExponentialE",["Sqrt",3],["Sqrt",5],["Sqrt",15],["Sqrt",25],["Complex",-1.1,1.1],["Complex",4,5],"x","x","x","x",["Add","x",1],["Divide","x",3],["Square","x"],["Power","x",3],["Power","x",4],["Subtract","x",1],["Add","x",1],"Pi"])}var H0=[{Nothing:{type:"nothing"}},{InvisibleOperator:{description:"Implicit operator used for juxtapositions such as function application or multiplication.",complexity:9e3,lazy:!0,signature:"function",canonical:(e,{engine:n})=>{let t=Hu(e,{engine:n});return t?m(t,"Multiply")?cn(n,t.ops):t:n.Nothing}},Sequence:{description:"Ordered sequence of expressions.",lazy:!0,signature:"function",type:e=>e.length===0?"nothing":e.length===1?e[0].type:Q(`tuple<${e.map(n=>n.type).join(", ")}>`),canonical:(e,{engine:n})=>{let t=be(e);return t.length===0?n.Nothing:t.length===1?t[0]:n._fn("Sequence",t)}},Delimiter:{description:"Group expressions with explicit delimiters.",complexity:9e3,lazy:!0,signature:"(any, string?) -> any",type:e=>e.length===0?"nothing":e[0].type,canonical:(e,{engine:n})=>{if(e.length===0)return n._fn("Tuple",[]);if(e.length>2)return n._fn("Delimiter",Fn(n,e,2));let t=e[0];if(m(t,"Sequence"))return n._fn("Tuple",lt(n,t.ops));t=t.canonical;let i=q(e[1])?e[1].string:void 0;return!i||i.startsWith("(")&&i.endsWith(")")?t:(i?.length??0)>3?n._fn("Delimiter",[t,n.error("invalid-delimiter",e[1].toString())]):n._fn("Delimiter",[e[0],sn(n,e[1],"string")])},evaluate:(e,n)=>{let t=n.engine;if(e.length===0)return t.Nothing;let i=e[0];return(i.operator==="Sequence"||i.operator==="Delimiter")&&m(e[0])&&(e=pc(e[0].ops)),e.length===1?e[0].evaluate(n):t._fn("Tuple",e.map(r=>r.evaluate(n)))}},Error:{description:"Represent an error expression.",lazy:!0,complexity:500,signature:"((string|expression<ErrorCode>), expression?) -> nothing",canonical:(e,{engine:n})=>n._fn("Error",e)},ErrorCode:{description:"Structured error code with optional arguments.",complexity:500,lazy:!0,signature:"(string, any*) -> error",canonical:(e,{engine:n})=>{let t=sn(n,e[0],"string"),i=q(t)?t.string:void 0;return i==="incompatible-type"?n._fn("ErrorCode",[n.string(i),e[1],e[2]]):n._fn("ErrorCode",e)}},Unevaluated:{description:"Prevent an expression from being evaluated",lazy:!0,signature:"(any) -> unknown",type:([e])=>e.type,canonical:(e,{engine:n,scope:t})=>n._fn("Unevaluated",lt(n,e,t)),evaluate:([e],n)=>e.evaluate(n)},Hold:{description:"Hold an expression, preventing it from being canonicalized or evaluated until `ReleaseHold` is applied to it",lazy:!0,signature:"(any) -> unknown",type:([e])=>_(e)?"symbol":q(e)?"string":E(e)?e.type:m(e)?jn(e.type.type)??"unknown":"unknown",eq:(e,n)=>(m(n,"Hold")&&(n=n.ops[0]),m(e)?e.ops[0].isSame(n):!1),evaluate:([e],{engine:n})=>n.hold(e)},ReleaseHold:{description:"Release an expression held by `Hold`",lazy:!0,signature:"(any) -> unknown",type:([e])=>m(e,"Hold")?e.op1.type:e.type,evaluate:([e],n)=>(m(e,"Hold")&&(e=e.op1),e.canonical.evaluate(n))},HorizontalSpacing:{description:"Horizontal spacing annotation.",signature:"(number) -> nothing",canonical:(e,{engine:n})=>e.length===2?e[0].canonical:n.Nothing},Annotated:{description:"Attach metadata or style annotations to an expression.",signature:"(expression, dictionary) -> expression",type:([e])=>e.type,complexity:9e3,lazy:!0,canonical:([e,n],{engine:t})=>(e=e.canonical,n=n.canonical,!wh(n)||n.keys.length===0?e:t._fn("Annotated",[e,n])),evaluate:([e,n],t)=>e.evaluate(t)},Text:{description:"A sequence of strings, annotated expressions and other Text expressions",signature:"(any*) -> expression"}},{About:{description:"Return information about an expression",lazy:!0,signature:"(any) -> string",evaluate:([e],{engine:n})=>{let t=[e.toString()];if(t.push(""),q(e))t.push("string");else if(_(e))if(e.valueDefinition){let i=e.valueDefinition;i.isConstant&&t.push("constant"),typeof i.description=="string"?t.push(i.description):Array.isArray(i.description)&&t.push(i.description.join(`
|
|
69
|
+
`)),i.wikidata&&t.push(`WikiData: ${i.wikidata}`),i.url&&t.push(`Read More: ${i.url}`)}else t.push("symbol"),t.push(`value: ${e.evaluate().toString()}`);else E(e)?t.push(e.type.toString()):m(e)?(t.push(e.type.toString()),t.push(e.isCanonical?"canonical":"non-canonical")):t.push("Unknown expression's type");return n.string(t.join(`
|
|
70
|
+
`))}},Head:{description:"Return the head of an expression, the name of the operator",lazy:!0,signature:"(any) -> symbol",canonical:(e,{engine:n})=>{if(e.length!==1)return null;let t=e[0];return n.box(t.operator)},evaluate:(e,{engine:n})=>n.symbol(e[0]?.operator??"Undefined")},Tail:{description:"Return the tail of an expression, the operands of the expression",lazy:!0,signature:"(any) -> collection",canonical:(e,{engine:n})=>{if(e.length!==1)return null;let t=e[0];return m(t)?n._fn("Sequence",t.ops):n._fn("Tail",lt(n,e))},evaluate:([e],{engine:n})=>m(e)?n._fn("Sequence",e.ops):n.Nothing},Identity:{description:"Return the argument unchanged",signature:"(any) -> unknown",type:([e])=>e.type,evaluate:([e])=>e}},{Apply:{description:"Apply a function to a list of arguments",signature:"(name:symbol, arguments:expression*) -> unknown",type:([e])=>jn(e.type.type)??"unknown",canonical:(e,{engine:n})=>{let t=v(e[0]);return t?n.function(t,e.slice(1)):n._fn("Apply",e)},evaluate:e=>ei(e[0],e.slice(1))},Assign:{description:"Assign a value to a symbol or define a sequence",lazy:!0,pure:!1,signature:"(symbol | expression, any) -> any",type:([e,n])=>n.type,canonical:(e,{engine:n})=>{if(e.length!==2)return null;let t=e[0];if(m(t,"Subscript"))return n._fn("Assign",[t,e[1]]);let i=t;return _(i)||(i=sn(n,t,"symbol")),n._fn("Assign",[i,e[1].canonical])},evaluate:([e,n],{engine:t})=>{if(m(e,"Subscript")&&v(e.op1)){let s=v(e.op1),a=e.op2,u=a;if(m(u,"Delimiter")&&(u=u.op1),m(u,"Sequence")){let c=u.ops;if(c.every(g=>E(g)&&Number.isInteger(g.re))){let g=c.map(h=>h.re).join(",");return Df(t,s,g,n.evaluate()),t.Nothing}let f=[],p=!1,d=!0;for(let g of c)if(_(g))f.push(g.symbol),p=!0;else if(E(g)&&Number.isInteger(g.re))f.push(String(g.re));else{let h=Of(g);if(h)f.push(h),p=!0;else{d=!1;break}}if(d&&f.length===c.length){if(Js(n,s)){let g=c.map(h=>v(h)).filter(h=>h!==void 0);if(g.length>0)return V0(t,s,g,n),t.Nothing}else if(p){let g=f.join(",");return Df(t,s,g,n.evaluate()),t.Nothing}}}if(E(a)&&Number.isInteger(a.re)){let l=a.re,c=n.evaluate();return q0(t,s,l,c),t.Nothing}if(_(a)){let l=a.symbol;if(Js(n,s))return $f(t,s,l,n),t.Nothing;{let c=t.function("Function",[n,t.symbol(l)]);return t.assign(s,c),t.Nothing}}if(Js(n,s)){let l=Of(a);if(l)return $f(t,s,l,n),t.Nothing}}let i=e.evaluate(),r=v(i);if(!r)return;let o=n.evaluate();return t.assign(r,o),o}},Assume:{description:"Assume a type for a symbol",lazy:!0,pure:!1,signature:"(any) -> symbol",evaluate:(e,{engine:n})=>n.symbol(n.assume(e[0]))},Declare:{description:"Declare a symbol and optionally assign a type.",lazy:!0,pure:!1,signature:"(symbol, type: string | symbol) -> nothing",canonical:(e,{engine:n})=>{let t=e[0];return _(t)||(t=sn(n,e[0],"symbol")),e.length===1?n._fn("Declare",[t]):e.length!==2?null:n._fn("Declare",[t,e[1]])},evaluate:(e,{engine:n})=>{let t=v(e[0].evaluate());if(!t)return;if(!e[1])return n.declare(t,{inferred:!0,type:"unknown"}),n.Nothing;let i=e[1].canonical.evaluate(),r=Q((q(i)?i.string:void 0)??v(i)??void 0);if(Qt(r))return n.declare(t,r),n.Nothing}},Type:{description:"Return the type of an expression as a string.",lazy:!0,signature:"(any) -> string",evaluate:([e],{engine:n})=>n.string(e.type.toString()??"unknown")},Evaluate:{description:"Evaluate an expression.",lazy:!0,signature:"(any) -> unknown",type:([e])=>e.type,canonical:(e,{engine:n})=>n._fn("Evaluate",Fn(n,e,1)),evaluate:([e],n)=>e.evaluate(n)},EvaluateAt:{description:"Evaluate a function at one point or between two bounds.",lazy:!0,signature:"(function, lower:number, upper:number) -> number",type:([e])=>jn(e.type.type)??"number",canonical:(e,{engine:n})=>{if(e.length===0)return null;let t=Qe(e[0]);return t?n._fn("EvaluateAt",[t,...e.slice(1).map(i=>sn(n,i,"value"))]):null},evaluate:([e,n,t],{engine:i})=>{if(t===void 0){let s=ei(e,[n]);return E(s)?s:i._fn("EvaluateAt",[e,n])}let r=ei(e,[n]),o=ei(e,[t]);return r&&o&&E(r.N())&&E(o.N())?o.sub(r):i._fn("EvaluateAt",[e,n,t])}},BuiltinFunction:{description:"Return a built-in function symbol by name.",complexity:9876,lazy:!0,signature:"(symbol | string) -> symbol",canonical:([e],{engine:n})=>n.symbol(v(e)??(q(e)?e.string:void 0)??"Undefined")},Function:{description:"A function literal",complexity:9876,lazy:!0,signature:"(expression, symbol*) -> function",type:([e,...n])=>`(${n.map(t=>t.type.type)}) -> ${e.type.type}`,canonical:(e,{engine:n})=>Wr(n,e)??null,evaluate:e=>{}},Rule:{description:"Pattern replacement rule.",lazy:!0,signature:"(match: expression, replace: expression, predicate: function?) -> expression",evaluate:([e,n,t],{engine:i})=>{}},Simplify:{description:"Simplify an expression.",lazy:!0,signature:"(any) -> expression",canonical:(e,{engine:n})=>n._fn("Simplify",Fn(n,e,1)),evaluate:([e])=>e.simplify()??void 0},CanonicalForm:{description:["Return the canonical form of an expression","Can be used to sort arguments of an expression.",'Sorting arguments of commutative functions is a weak form of canonicalization that can be useful in some cases, for example to accept "x+1" and "1+x" while rejecting "x+1" and "2x-x+1"'],complexity:8200,lazy:!0,signature:"(any, symbol*) -> any",canonical:e=>{if(e.length===1)return e[0].canonical;let n=e.slice(1).map(t=>v(t)??(q(t)?t.string:void 0)).filter(t=>t!==void 0);return Ar(e[0],n)}},N:{description:"Numerically evaluate an expression",lazy:!0,signature:"(any) -> unknown",type:([e])=>e.type,canonical:(e,{engine:n})=>{if(e.length!==1)return n._fn("N",Fn(n,e,1));let t=e[0].operator;return t==="N"||t==="Evaluate"?e[0].canonical:n._fn("N",e)},evaluate:([e])=>e.N()},Random:{description:["Random(): Return a random number between 0 and 1","Random(n): Return a random integer between 0 and n-1","Random(m, n): Return a random integer between m and n-1"],pure:!1,signature:"(lower:integer?, upper:integer?) -> finite_number",type:([e,n])=>e===void 0&&n===void 0?"finite_number":"finite_integer",sgn:()=>"non-negative",evaluate:(e,{engine:n})=>{if(e.length===0)return n.number(Math.random());let[t,i]=e,r,o;return i===void 0?(r=0,o=Math.floor(t.re-1),isNaN(o)&&(o=0)):(r=Math.floor(t.re),o=Math.floor(i.re),isNaN(r)&&(r=0),isNaN(o)&&(o=0)),n.number(r+Math.floor(Math.random()*(o-r)))}},Signature:{description:"Return the signature string of an operator.",lazy:!0,signature:"(symbol) -> string | nothing",evaluate:([e],{engine:n})=>e.operatorDefinition?n.string(e.operatorDefinition.signature.toString()):n.Nothing},Subscript:{description:"Subscript notation for indexing or compound symbols.",lazy:!0,signature:"(collection, any) -> any",type:([e,n],{engine:t})=>{if(q(e)&&W(n)!==null)return"integer";if(e.isIndexedCollection)return Dn(e.type.type)??"any";let i=v(e);if(i){let r=Dn(e.type.type);if(r)return r}if(i){let r=t.lookupDefinition(i);return se(r)&&r.value.subscriptEvaluate?"number":((q(n)?n.string:void 0)??v(n)??W(n)?.toString())||m(n,"InvisibleOperator")&&n.ops.map(a=>v(a)??W(a)?.toString()).every(a=>a!=null)?"symbol":"unknown"}return"expression"},canonical:([e,n],{engine:t})=>{let i=v(e);if(e=e.canonical,q(e)){let s=W(n.canonical);if(s!==null&&s>1&&s<=36){let[a,u]=bs(e.string,s);return u?t.error(["unexpected-digit",u[0]],e.toString()):t.number(a)}return t._fn("Baseform",[e,t.error(["invalid-base",n.toString()])])}if(e.isIndexedCollection)return t._fn("At",[e,n.canonical]);let r=v(e);if(r&&Dn(e.type.type))return(n.operator==="Sequence"||n.operator==="Tuple")&&m(n)?t._fn("At",[e,...n.ops.map(s=>s.canonical)]):t._fn("At",[e,n.canonical]);if(r){let s=t.lookupDefinition(r);if(se(s)&&s.value.subscriptEvaluate)return t._fn("Subscript",[e,n.canonical])}if(i){let s=(q(n)?n.string:void 0)??v(n)??W(n)?.toString();if(s)return t.symbol(i+"_"+s);if(m(n,"InvisibleOperator")){let a=n.ops.map(u=>v(u)??W(u)?.toString());if(a.every(u=>u!=null))return t.symbol(i+"_"+a.join(""))}}m(n,"Sequence")&&t._fn("Subscript",[e,t._fn("List",n.ops)]);let o=n;return m(n,"Delimiter")&&(o=n.op1.canonical),t._fn("Subscript",[e,o])},evaluate:(e,{engine:n,numericApproximation:t})=>{let[i,r]=e;if(_(i)){let o=i.valueDefinition;if(o?.subscriptEvaluate){let s=r.evaluate({numericApproximation:t}),a=o.subscriptEvaluate(s,{engine:n,numericApproximation:t});if(a!==void 0)return a}}}},Symbol:{complexity:500,description:"Construct a new symbol with a name formed by concatenating the arguments",broadcastable:!0,lazy:!0,signature:"function",type:e=>e.length===0?"nothing":"symbol",canonical:(e,{engine:n})=>e.length===0?n.Nothing:n._fn("Symbol",e.map(t=>_(t)?t:t.canonical)),evaluate:(e,{engine:n})=>{e.length>0;let t=e.map(i=>v(i)??(q(i)?i.string:void 0)??W(i)?.toString()??"").join("");return n.symbol(t)}},Timing:{description:"`Timing(expr)` evaluates `expr` and return a `Pair` of the number of second elapsed for the evaluation, and the value of the evaluation",signature:"(value, repeat: integer?) -> tuple<result:value, time:number>",evaluate:(e,{engine:n})=>{if(v(e[1])==="Nothing"){let u=globalThis.performance.now(),l=e[0].evaluate(),c=1e3*(globalThis.performance.now()-u);return n.tuple(n.number(c),l)}let t=Math.max(3,ie(e[1])??3),i=[],r;for(;t>0;){let u=globalThis.performance.now();r=e[0].evaluate(),i.push(1e3*(globalThis.performance.now()-u)),t-=1}let o=Math.max(...i),s=Math.min(...i);i=i.filter(u=>u>s&&u<o);let a=i.reduce((u,l)=>u+l,0);return a===0?n.tuple(n.number(o),r):n.tuple(n.number(a/i.length),r)}}},{Wildcard:{description:"Single-expression pattern wildcard.",signature:"(symbol) -> symbol",canonical:(e,{engine:n})=>e.length!==1?n.symbol("_"):n.symbol("_"+(v(e[0])??""))},WildcardSequence:{description:"Pattern wildcard matching one or more expressions.",signature:"(symbol) -> symbol",canonical:(e,{engine:n})=>e.length!==1?n.symbol("__"):n.symbol("__"+(v(e[0])??""))},WildcardOptionalSequence:{description:"Pattern wildcard matching zero or more expressions.",signature:"(symbol) -> symbol",canonical:(e,{engine:n})=>e.length!==1?n.symbol("___"):n.symbol("___"+(v(e[0])??""))}},{LatexString:{description:"Value preserving type conversion/tag indicating the string is a LaTeX string",signature:"(string) -> string",evaluate:([e])=>e},Latex:{description:"Serialize an expression to LaTeX",signature:"(any+) -> string",evaluate:(e,{engine:n})=>n.box(["LatexString",n.string($(e.map(t=>t.latex)))])},Parse:{description:"Parse a LaTeX string and evaluate to a corresponding expression",signature:"(string) -> any",evaluate:([e],{engine:n})=>n.parse(q(e)?e.string:"")??n.Nothing}},{String:{description:"A string created by joining its arguments. The arguments are converted to their default string representation.",broadcastable:!0,signature:"(any*) -> string",evaluate:(e,{engine:n})=>e.length===0?n.string(""):n.string(e.map(t=>t.toString()).join(""))},StringFrom:{description:"Create a string by converting its arguments to a string and joining them.",broadcastable:!0,signature:"(any, format:string?) -> string",evaluate:([e,n],{engine:t})=>{if(e===void 0)return t.string("");let i=(q(n)?n.string:void 0)??"default";if(i==="default")return t.string(e.toString());if(i==="utf-8")return e.isIndexedCollection?t.string(new TextDecoder("utf-8").decode(new Uint8Array([...e.each()].map(r=>ie(r)??65533)))):t.typeError(Q("indexed_collection<integer>"),e.type);if(i==="utf-16")return e.isIndexedCollection?t.string(new TextDecoder("utf-16").decode(new Uint16Array([...e.each()].map(r=>ie(r)??65533)))):t.typeError(Q("indexed_collection<integer>"),e.type);if(i==="unicode-scalars"){let r=ie(e);return r!==null?t.string(String.fromCodePoint(r)):e.isIndexedCollection?t.string(String.fromCodePoint(...[...e.each()].map(o=>ie(o)??65533))):t.typeError(Q("indexed_collection<integer>|integer"),e.type)}return t.string(e.toString())}},Utf8:{description:"A collection of UTF-8 code units from a string.",signature:"(string) -> list<integer>",evaluate:([e],{engine:n})=>{if(!q(e))return;let t=e.buffer;return n.function("List",Array.from(t,i=>n.number(i)))}},Utf16:{description:"A collection of UTF-16 code units from a string.",signature:"(string) -> list<integer>",evaluate:([e],{engine:n})=>{if(!q(e))return;let t=[];for(let i=0;i<e.string.length;i++){let r=e.string.charCodeAt(i);t.push(r)}return n.function("List",t.map(i=>n.number(i)))}},UnicodeScalars:{description:"A collection of Unicode scalars from a string, same as UTF-32",signature:"(string) -> list<integer>",evaluate:([e],{engine:n})=>{if(!q(e))return;let t=e.unicodeScalars;return n.function("List",t.map(i=>n.number(i)))}},GraphemeClusters:{description:"A collection of grapheme clusters from a string.",signature:"(string) -> list<string>",evaluate:([e],{engine:n})=>{if(!q(e))return;let t=new Intl.Segmenter("en",{granularity:"grapheme"}),i=Array.from(t.segment(e.string),r=>n.string(r.segment));return n.function("List",i)}},BaseForm:{description:"`BaseForm(expr, base=10)`",complexity:9e3,signature:"(number, (string|integer)?) -> string | nothing",type:([e])=>e===void 0?"nothing":e.type,evaluate:([e])=>e},DigitsFrom:{description:"Return an integer representation of the string `s` in base `base`.",signature:"(string, (string|integer)?) -> integer",evaluate:(e,{engine:n})=>{let t=q(e[0])?e[0].string:void 0,i=n;if(!t)return i.typeError("string",e[0]?.type,e[0]);if(t=t.trim(),t.startsWith("0x"))return i.number(parseInt(t.slice(2),16));if(t.startsWith("0b"))return i.number(parseInt(t.slice(2),2));let r=e[1]??i.Nothing;if(v(r)==="Nothing")return i.number(Number.parseInt(t,10));let o=r.re;if(!r.isInteger||!Number.isFinite(o)||o<2||o>36)return i.error(["unexpected-base",o.toString()],r.toString());let[s,a]=bs(t,(q(r)?r.string:void 0)??v(r)??10);return a?i.error(["unexpected-digit",a[0]],a):i.number(s)}},IntegerString:{description:"`IntegerString(n, base=10)` return a string representation of the integer `n` in base `base`.",broadcastable:!0,signature:"(integer, integer?) -> string",evaluate:(e,{engine:n})=>{let t=n,i=e[0];if(!i.isInteger)return t.typeError("integer",i.type,i);let r=i.re;if(!Number.isFinite(r))return t.typeError("integer",i.type,i);let o=e[1]??t.Nothing;if(v(o)==="Nothing")return i.bignumRe!==void 0?t.string(i.bignumRe.abs().toString()):t.string(Math.abs(r).toString());let s=W(o);return s===null?t.typeError("integer",o.type,o):s<2||s>36?t.error(["out-of-range","2","36",s.toString()],o.toString()):t.string(Math.abs(r).toString(s))}}},{RandomExpression:{description:"Generate a random expression.",signature:"() -> expression",evaluate:(e,{engine:n})=>n.box(zt())}}];var Y0=[{Matrix:{description:"Matrix constructor and canonicalizer.",complexity:9e3,lazy:!0,signature:"(matrix, string?, string?) -> matrix",type:([e])=>e.type,canonical:uS,evaluate:(e,n)=>e[0].evaluate(n)},Vector:{description:"Construct a column vector.",complexity:9e3,lazy:!0,signature:"(number+) -> vector",type:e=>Q(`vector<${e.length}>`,e[0].engine._typeResolver),canonical:(e,{engine:n})=>n._fn("Matrix",[n.function("List",e.map(t=>n.function("List",[t])))])}},{Shape:{description:"Return the shape tuple of an expression.",complexity:8200,signature:"(value) -> tuple",evaluate:([e],{engine:n})=>n.tuple(...e.shape)},Rank:{description:"The length of the shape of the expression. Note this is not the matrix rank (the number of linearly independent rows or columns in the matrix)",complexity:8200,signature:"(value) -> number",sgn:()=>"positive",evaluate:([e],{engine:n})=>n.number(e.rank)},Reshape:{description:"Reshape a tensor or collection to a target shape.",complexity:8200,signature:"(value, tuple) -> value",type:([e,n])=>{let t=m(n)?n.ops:void 0;if(e.isNumber)return Q(`list<number^${t?.map(r=>r.toString()).join("x")??""}>`);if(!e.type.matches("list"))return"nothing";let i=e.type.type;return L(i.elements,"number")?Q(`list<number^${t?.map(r=>r.toString()).join("x")??""}>`):"nothing"},evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=m(e[1])?e[1].ops.map(r=>r.re):[];if(i.length===0){if(t.isNumber)return t;if(ne(t)){let r=t.tensor.flatten();return r.length>0?n.box(r[0]):n.Zero}return}if(t.isNumber)return W0(n,[t],i);if(!ne(t)&&Ve(t)&&(t=n.function("List",[...t.each()])),ne(t)){if(i.join("x")===t.shape.join("x"))return t;let o=t.tensor.flatten().map(s=>n.box(s));return W0(n,o,i)}}},Flatten:{description:"Flatten a tensor or collection into a list.",complexity:8200,signature:"(value) -> list",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return n.box(["List",t]);if(ne(t))return n.box(["List",...t.tensor.flatten().map(i=>n.box(i))]);if(Ve(t))return n.function("List",[...t.each()])}},Transpose:{description:"Transpose a matrix or swap two tensor axes.",complexity:8200,signature:"(value, axis1: integer?, axis2: integer?) -> value",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return t;if(!ne(t)&&Ve(t)&&(t=n.function("List",[...t.each()])),ne(t)){let i=t.shape.length;if(i===1)return t;let r=i-1,o=i;return e.length===3&&(r=e[1].re??r,o=e[2].re??o,r>0&&o>0),r===o?t:r<=0||r>i||o<=0||o>i?void 0:t.tensor.transpose(r,o)?.expression}}},ConjugateTranspose:{description:"Conjugate transpose (Hermitian adjoint) of a matrix or tensor.",complexity:8200,signature:"(value, axis1: integer?, axis2: integer?) -> value",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return n.box(["Conjugate",t]).evaluate();if(ne(t)){let i=t.shape.length;if(i===1){let s=[...t.each()].map(a=>n.box(["Conjugate",a]).evaluate());return n.box(["List",...s])}let r=i-1,o=i;return e.length===3&&(r=e[1].re??r,o=e[2].re??o,r>0&&o>0),r===o?t:r<=0||r>i||o<=0||o>i?void 0:t.tensor.conjugateTranspose(r,o)?.expression}}},Determinant:{description:"Determinant of a square matrix.",complexity:8200,signature:"(matrix) -> number",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return t;if(ne(t)){let i=t.shape;return i.length===1||i.length>2||i.length===2&&i[0]!==i[1]?n.error("expected-square-matrix",t.toString()):t.tensor.determinant()}}},Inverse:{description:"Multiplicative inverse of a square matrix.",complexity:8200,signature:"(matrix) -> matrix",type:([e])=>e.type,evaluate:([e],{engine:n})=>{let t=e.evaluate();if(t.isNumber)return n.box(["Divide",1,t]).evaluate();if(ne(t)){let i=t.shape;return i.length===1||i.length>2||i.length===2&&i[0]!==i[1]?n.error("expected-square-matrix",t.toString()):t.tensor.inverse()?.expression}}},PseudoInverse:{description:"Moore-Penrose pseudoinverse of a matrix.",complexity:8200,signature:"(matrix) -> matrix",evaluate:([e],{engine:n})=>{let t=e.evaluate();if(t.isNumber)return t.isSame(0)?n.Zero:n.box(["Divide",1,t]).evaluate();if(ne(t))return t.tensor.pseudoInverse()?.expression}},AdjugateMatrix:{description:"Adjugate (classical adjoint) of a square matrix.",complexity:8200,signature:"(matrix) -> matrix",evaluate:e=>{let n=e[0].evaluate();if(ne(n))return n.tensor.adjugateMatrix()?.expression}},Trace:{description:"Trace of a matrix or pair of tensor axes.",complexity:8200,signature:"(value, axis1: integer?, axis2: integer?) -> value",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return t;if(ne(t)){let i=t.shape;if(i.length===1)return n.error("expected-matrix-or-tensor",t.toString());let r=i.length-1,o=i.length;if(e.length>=3&&(r=e[1].re??r,o=e[2].re??o),r<=0||r>i.length)return n.error("invalid-axis",r.toString());if(o<=0||o>i.length)return n.error("invalid-axis",o.toString());if(r===o)return n.error("invalid-axis","axes must be different");if(i[r-1]!==i[o-1])return n.error("expected-square-matrix",t.toString());let s=t.tensor.trace(r,o);return s===void 0?void 0:typeof s=="number"?n.box(s):typeof s=="boolean"?s?n.True:n.False:"expression"in s?s.expression:n.box(s)}}},Kernel:{description:"Kernel (null space) of a linear map",complexity:8200,signature:"(value) -> list",evaluate:([e],{engine:n})=>{let t=e.evaluate();if(t.isNumber)return t.isSame(0)?n.box(["List",["List",1]]):n.box(["List"]);if(!ne(t))return;let i=t.shape;if(i.length>2)return n.error("expected-matrix",t.toString());let r=i.length===1?1:i[0],o=i.length===1?i[0]:i[1],s=oS(t,r,o);if(!s)return;let a=e1(s);return n.box(["List",...a.map(u=>n.box(["List",...u.map(l=>n.number(n.chop(l)))]))])}},Dimension:{description:"Dimension of an object",complexity:8200,signature:"(value) -> integer",sgn:()=>"non-negative",evaluate:([e],{engine:n})=>{let t=e.evaluate();if(m(e,"Kernel")){let r=aS(t);if(r!==void 0)return n.number(r)}if(m(e,"Hom")&&e.ops.length>=2){let r=Vf(e.ops[0].evaluate()),o=Vf(e.ops[1].evaluate());if(r!==void 0&&o!==void 0)return n.number(r*o)}let i=Vf(t);if(i!==void 0)return n.number(i)}},Degree:{description:"Degree of an object",complexity:8200,signature:"(value) -> integer",sgn:()=>"non-negative",evaluate:([e],{engine:n})=>{let t=e.evaluate();if(t.unknowns.length===0)return n.Zero;if(!(_(t)&&!t.isConstant)&&Us(t))return n.number(ln(t))}},Hom:{description:"Hom-set of morphisms between objects",complexity:8200,signature:"(value*) -> value",evaluate:(e,{engine:n})=>n._fn("Hom",e.map(t=>t.evaluate()))},MatrixMultiply:{description:"Matrix and vector multiplication.",complexity:8300,signature:"(matrix|vector, matrix|vector) -> matrix|vector",evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=e[1].evaluate();if(!ne(t)||!ne(i))return;let r=t.shape,o=i.shape;if(r.length===1&&o.length===1){if(r[0]!==o[0])return n.error("incompatible-dimensions",`${r[0]} vs ${o[0]}`);let s=r[0],a=n.Zero;for(let u=0;u<s;u++){let l=t.tensor.at(u+1)??n.Zero,c=i.tensor.at(u+1)??n.Zero;a=a.add(n.box(l).mul(n.box(c)))}return a.evaluate()}if(r.length===2&&o.length===1){let[s,a]=r;if(a!==o[0])return n.error("incompatible-dimensions",`${a} vs ${o[0]}`);let u=[];for(let l=0;l<s;l++){let c=n.Zero;for(let f=0;f<a;f++){let p=t.tensor.at(l+1,f+1)??n.Zero,d=i.tensor.at(f+1)??n.Zero;c=c.add(n.box(p).mul(n.box(d)))}u.push(c.evaluate())}return n.box(["List",...u])}if(r.length===1&&o.length===2){let[s,a]=o;if(r[0]!==s)return n.error("incompatible-dimensions",`${r[0]} vs ${s}`);let u=[];for(let l=0;l<a;l++){let c=n.Zero;for(let f=0;f<s;f++){let p=t.tensor.at(f+1)??n.Zero,d=i.tensor.at(f+1,l+1)??n.Zero;c=c.add(n.box(p).mul(n.box(d)))}u.push(c.evaluate())}return n.box(["List",...u])}if(r.length===2&&o.length===2){let[s,a]=r,[u,l]=o;if(a!==u)return n.error("incompatible-dimensions",`${a} vs ${u}`);let c=a,f=[];for(let p=0;p<s;p++){let d=[];for(let g=0;g<l;g++){let h=n.Zero;for(let b=0;b<c;b++){let y=t.tensor.at(p+1,b+1)??n.Zero,x=i.tensor.at(b+1,g+1)??n.Zero;h=h.add(n.box(y).mul(n.box(x)))}d.push(h.evaluate())}f.push(n.box(["List",...d]))}return n.box(["List",...f])}}},Diagonal:{description:"Extract a matrix diagonal or build a diagonal matrix.",complexity:8200,signature:"(value) -> value",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(t.isNumber)return t;if(ne(t)){let i=t.shape;if(i.length===1){let r=i[0],o=[],s=[...t.each()];for(let a=0;a<r;a++){let u=[];for(let l=0;l<r;l++)u.push(a===l?s[a]:n.Zero);o.push(n.box(["List",...u]))}return n.box(["List",...o])}if(i.length===2){let[r,o]=i,s=Math.min(r,o),a=[];for(let u=0;u<s;u++)a.push(t.tensor.at(u+1,u+1)??n.Zero);return n.box(["List",...a])}return n.error("expected-square-matrix",t.toString())}}},IdentityMatrix:{description:"n-by-n identity matrix.",complexity:8100,signature:"(integer) -> matrix",evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=t.re;if(i===void 0||!Number.isInteger(i)||i<1)return n.error("expected-positive-integer",t.toString());let r=[];for(let o=0;o<i;o++){let s=[];for(let a=0;a<i;a++)s.push(o===a?n.One:n.Zero);r.push(n.box(["List",...s]))}return n.box(["List",...r])}},ZeroMatrix:{description:"Matrix filled with zeros.",complexity:8100,signature:"(integer, integer?) -> matrix",evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=t.re;if(i===void 0||!Number.isInteger(i)||i<1)return n.error("expected-positive-integer",t.toString());let r=i;if(e.length>1){let s=e[1].evaluate();if(r=s.re??i,!Number.isInteger(r)||r<1)return n.error("expected-positive-integer",s.toString())}let o=[];for(let s=0;s<i;s++){let a=[];for(let u=0;u<r;u++)a.push(n.Zero);o.push(n.box(["List",...a]))}return n.box(["List",...o])}},OnesMatrix:{description:"Matrix filled with ones.",complexity:8100,signature:"(integer, integer?) -> matrix",evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=t.re;if(i===void 0||!Number.isInteger(i)||i<1)return n.error("expected-positive-integer",t.toString());let r=i;if(e.length>1){let s=e[1].evaluate();if(r=s.re??i,!Number.isInteger(r)||r<1)return n.error("expected-positive-integer",s.toString())}let o=[];for(let s=0;s<i;s++){let a=[];for(let u=0;u<r;u++)a.push(n.One);o.push(n.box(["List",...a]))}return n.box(["List",...o])}},Norm:{description:"Vector or matrix norm.",complexity:8200,signature:"(value, number|string?) -> number",evaluate:(e,{engine:n})=>{let t=e[0].evaluate(),i=e.length>1?e[1].evaluate():void 0;if(t.isNumber)return n.box(["Abs",t]).evaluate();if(!ne(t))return;let r=t.shape,o=2;if(i){let s=q(i)?i.string:void 0,a=_(i)?i.symbol:void 0;s==="Infinity"||a==="Infinity"||i.re===1/0?o="infinity":s==="Frobenius"?o="frobenius":i.re!==void 0&&(o=i.re)}if(r.length===1){let s=[],a=r[0];for(let u=0;u<a;u++){let l=t.tensor.at(u+1);s.push(l!==void 0?n.box(l):n.Zero)}if(o===1){let u=n.Zero;for(let l of s)u=u.add(n.box(["Abs",l]).evaluate());return u.evaluate()}if(o===2){let u=n.Zero;for(let l of s){let c=n.box(["Abs",l]).evaluate();u=u.add(c.mul(c))}return n.box(["Sqrt",u]).evaluate()}if(o==="infinity"){let u=n.Zero;for(let l of s){let c=n.box(["Abs",l]).evaluate(),f=c.re??0,p=u.re??0;f>p&&(u=c)}return u}if(typeof o=="number"&&o>0){let u=o,l=n.Zero;for(let c of s){let f=n.box(["Abs",c]).evaluate();l=l.add(n.box(["Power",f,u]).evaluate())}return Number.isInteger(u)?n.box(["Root",l,u]).N():n.box(["Power",l,n.box(["Divide",1,u])]).N()}return}if(r.length===2){let[s,a]=r;if(o===2||o==="frobenius"){let u=n.Zero;for(let l=0;l<s;l++)for(let c=0;c<a;c++){let f=t.tensor.at(l+1,c+1),p=f!==void 0?n.box(f):n.Zero,d=n.box(["Abs",p]).evaluate();u=u.add(d.mul(d))}return n.box(["Sqrt",u]).evaluate()}if(o===1){let u=0;for(let l=0;l<a;l++){let c=0;for(let f=0;f<s;f++){let p=t.tensor.at(f+1,l+1),d=p!==void 0?n.box(p):n.Zero,g=n.box(["Abs",d]).evaluate();c+=g.re??0}c>u&&(u=c)}return n.number(u)}if(o==="infinity"){let u=0;for(let l=0;l<s;l++){let c=0;for(let f=0;f<a;f++){let p=t.tensor.at(l+1,f+1),d=p!==void 0?n.box(p):n.Zero,g=n.box(["Abs",d]).evaluate();c+=g.re??0}c>u&&(u=c)}return n.number(u)}return}}},Eigenvalues:{description:"Eigenvalues of a square matrix.",complexity:8500,signature:"(matrix) -> list",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2||i[0]!==i[1])return n.error("expected-square-matrix",t.toString());let r=i[0];if(r===1){let s=t.tensor.at(1,1);return n.box(["List",s!==void 0?n.box(s):n.Zero])}if(KN(t,r)){let s=[];for(let a=0;a<r;a++){let u=t.tensor.at(a+1,a+1);s.push(u!==void 0?n.box(u):n.Zero)}return n.box(["List",...s])}if(r===2){let s=hn(t,1,1,n),a=hn(t,1,2,n),u=hn(t,2,1,n),l=hn(t,2,2,n),c=s.add(l),f=s.mul(l).sub(a.mul(u)),p=c.mul(c).sub(f.mul(n.number(4))),d=n.box(["Sqrt",p]).evaluate(),g=c.add(d).div(n.number(2)).evaluate(),h=c.sub(d).div(n.number(2)).evaluate();return n.box(["List",g,h])}return r===3?eS(t,n):Q0(t,r,n)}},Eigenvectors:{description:"Eigenvectors of a square matrix.",complexity:8600,signature:"(matrix) -> list",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2||i[0]!==i[1])return n.error("expected-square-matrix",t.toString());let r=i[0],o=n.box(["Eigenvalues",t]).evaluate();if(o.operator!=="List"||!m(o)||o.ops.length===0)return;let s=o.ops,a=[];for(let u of s){let l=tS(t,u,r,n);if(l)a.push(l);else return}return n.box(["List",...a])}},Eigen:{description:"Eigenvalue-eigenvector decomposition of a square matrix.",complexity:8700,signature:"(matrix) -> tuple",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2||i[0]!==i[1])return n.error("expected-square-matrix",t.toString());let r=n.box(["Eigenvalues",t]).evaluate(),o=n.box(["Eigenvectors",t]).evaluate();return r.operator==="Error"?r:o.operator==="Error"?o:n.box(["Tuple",r,o])}},LUDecomposition:{description:"LU decomposition of a square matrix.",complexity:8600,signature:"(matrix) -> tuple",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2||i[0]!==i[1])return n.error("expected-square-matrix",t.toString());let r=i[0],o=WN(t,r,n);if(!o)return;let{P:s,L:a,U:u}=o;return n.box(["Tuple",s,a,u])}},QRDecomposition:{description:"QR decomposition of a matrix.",complexity:8600,signature:"(matrix) -> tuple",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2)return n.error("expected-matrix",t.toString());let[r,o]=i,s=YN(t,r,o,n);if(!s)return;let{Q:a,R:u}=s;return n.box(["Tuple",a,u])}},CholeskyDecomposition:{description:"Cholesky decomposition of a positive-definite matrix.",complexity:8600,signature:"(matrix) -> matrix",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2||i[0]!==i[1])return n.error("expected-square-matrix",t.toString());let r=i[0];return QN(t,r,n)}},SVD:{description:"Singular value decomposition of a matrix.",complexity:8700,signature:"(matrix) -> tuple",evaluate:(e,{engine:n})=>{let t=e[0].evaluate();if(!ne(t))return;let i=t.shape;if(i.length!==2)return n.error("expected-matrix",t.toString());let[r,o]=i,s=XN(t,r,o,n);if(!s)return;let{U:a,S:u,V:l}=s;return n.box(["Tuple",a,u,l])}}}];function WN(e,n,t){if(!ne(e))return;let i=[];for(let p=0;p<n;p++){i[p]=[];for(let d=0;d<n;d++){let g=e.tensor.at(p+1,d+1),h=typeof g=="number"?g:typeof g=="object"&&"re"in g?g.re??0:0;if(isNaN(h))return;i[p][d]=h}}let r=Array(n).fill(null).map((p,d)=>Array(n).fill(0).map((g,h)=>d===h?1:0)),o=i.map(p=>[...p]),s=Array(n).fill(0).map((p,d)=>d),a=1e-10;for(let p=0;p<n-1;p++){let d=Math.abs(o[p][p]),g=p;for(let h=p+1;h<n;h++)Math.abs(o[h][p])>d&&(d=Math.abs(o[h][p]),g=h);if(!(d<a)){if(g!==p){[o[p],o[g]]=[o[g],o[p]],[s[p],s[g]]=[s[g],s[p]];for(let h=0;h<p;h++)[r[p][h],r[g][h]]=[r[g][h],r[p][h]]}for(let h=p+1;h<n;h++){let b=o[h][p]/o[p][p];r[h][p]=b;for(let y=p;y<n;y++)o[h][y]-=b*o[p][y]}}}let u=[];for(let p=0;p<n;p++){u[p]=[];for(let d=0;d<n;d++)u[p][d]=s[p]===d?t.One:t.Zero}let l=t.box(["List",...u.map(p=>t.box(["List",...p]))]),c=t.box(["List",...r.map(p=>t.box(["List",...p.map(d=>t.number(d))]))]),f=t.box(["List",...o.map(p=>t.box(["List",...p.map(d=>t.number(d))]))]);return{P:l,L:c,U:f}}function YN(e,n,t,i){if(!ne(e))return;let r=[];for(let c=0;c<n;c++){r[c]=[];for(let f=0;f<t;f++){let p=e.tensor.at(c+1,f+1),d=typeof p=="number"?p:typeof p=="object"&&"re"in p?p.re??0:0;if(isNaN(d))return;r[c][f]=d}}let o=Array(n).fill(null).map((c,f)=>Array(n).fill(0).map((p,d)=>f===d?1:0)),s=r.map(c=>[...c]),a=Math.min(n,t);for(let c=0;c<a;c++){let f=0;for(let y=c;y<n;y++)f+=s[y][c]*s[y][c];if(f=Math.sqrt(f),f<1e-10)continue;let p=s[c][c]>=0?1:-1,d=s[c][c]+p*f,g=Array(n).fill(0);g[c]=1;for(let y=c+1;y<n;y++)g[y]=s[y][c]/d;let h=1;for(let y=c+1;y<n;y++)h+=g[y]*g[y];let b=2/h;for(let y=c;y<t;y++){let x=0;for(let N=c;N<n;N++)x+=g[N]*s[N][y];for(let N=c;N<n;N++)s[N][y]-=b*g[N]*x}for(let y=0;y<n;y++){let x=0;for(let N=c;N<n;N++)x+=o[y][N]*g[N];for(let N=c;N<n;N++)o[y][N]-=b*x*g[N]}}for(let c=0;c<n;c++)for(let f=0;f<Math.min(c,t);f++)Math.abs(s[c][f])<1e-10&&(s[c][f]=0);let u=i.box(["List",...o.map(c=>i.box(["List",...c.map(f=>i.number(f))]))]),l=i.box(["List",...s.map(c=>i.box(["List",...c.map(f=>i.number(f))]))]);return{Q:u,R:l}}function QN(e,n,t){if(!ne(e))return;let i=[];for(let o=0;o<n;o++){i[o]=[];for(let s=0;s<n;s++){let a=e.tensor.at(o+1,s+1),u=typeof a=="number"?a:typeof a=="object"&&"re"in a?a.re??0:0;if(isNaN(u))return;i[o][s]=u}}let r=Array(n).fill(null).map(()=>Array(n).fill(0));for(let o=0;o<n;o++)for(let s=0;s<=o;s++){let a=0;if(s===o){for(let l=0;l<s;l++)a+=r[s][l]*r[s][l];let u=i[s][s]-a;if(u<0)return t.error("expected-positive-definite-matrix",e.toString());r[s][s]=Math.sqrt(u)}else{for(let u=0;u<s;u++)a+=r[o][u]*r[s][u];if(Math.abs(r[s][s])<1e-10)return t.error("expected-positive-definite-matrix",e.toString());r[o][s]=(i[o][s]-a)/r[s][s]}}return t.box(["List",...r.map(o=>t.box(["List",...o.map(s=>t.number(s))]))])}function XN(e,n,t,i){if(!ne(e))return;let r=[];for(let y=0;y<n;y++){r[y]=[];for(let x=0;x<t;x++){let N=e.tensor.at(y+1,x+1),T=typeof N=="number"?N:typeof N=="object"&&"re"in N?N.re??0:0;if(isNaN(T))return;r[y][x]=T}}let o=Array(t).fill(null).map(()=>Array(t).fill(0));for(let y=0;y<t;y++)for(let x=0;x<t;x++)for(let N=0;N<n;N++)o[y][x]+=r[N][y]*r[N][x];let s=Array(n).fill(null).map(()=>Array(n).fill(0));for(let y=0;y<n;y++)for(let x=0;x<n;x++)for(let N=0;N<t;N++)s[y][x]+=r[y][N]*r[x][N];let a=100,u=1e-10,l=Array(t).fill(null).map((y,x)=>Array(t).fill(0).map((N,T)=>x===T?1:0)),c=o.map(y=>[...y]);for(let y=0;y<a;y++){let{Q:x,R:N}=X0(c,t),T=Array(t).fill(null).map(()=>Array(t).fill(0));for(let w=0;w<t;w++)for(let k=0;k<t;k++)for(let P=0;P<t;P++)T[w][k]+=N[w][P]*x[P][k];let I=Array(t).fill(null).map(()=>Array(t).fill(0));for(let w=0;w<t;w++)for(let k=0;k<t;k++)for(let P=0;P<t;P++)I[w][k]+=l[w][P]*x[P][k];let M=0;for(let w=1;w<t;w++)for(let k=0;k<w;k++)M=Math.max(M,Math.abs(T[w][k]));if(c=T,l=I,M<u)break}let f=[];for(let y=0;y<t;y++)f.push(Math.sqrt(Math.max(0,c[y][y])));let p=Array(n).fill(null).map(()=>Array(n).fill(0));for(let y=0;y<Math.min(n,t);y++)if(f[y]>u)for(let x=0;x<n;x++){let N=0;for(let T=0;T<t;T++)N+=r[x][T]*l[T][y];p[x][y]=N/f[y]}if(n>t)for(let y=t;y<n;y++){let x=Array(n).fill(0);x[y]=1;for(let T=0;T<y;T++){let I=0;for(let M=0;M<n;M++)I+=x[M]*p[M][T];for(let M=0;M<n;M++)x[M]-=I*p[M][T]}let N=0;for(let T=0;T<n;T++)N+=x[T]*x[T];if(N=Math.sqrt(N),N>u)for(let T=0;T<n;T++)p[T][y]=x[T]/N}let d=Array(n).fill(null).map(()=>Array(t).fill(0));for(let y=0;y<Math.min(n,t);y++)d[y][y]=f[y];let g=i.box(["List",...p.map(y=>i.box(["List",...y.map(x=>i.number(x))]))]),h=i.box(["List",...d.map(y=>i.box(["List",...y.map(x=>i.number(x))]))]),b=i.box(["List",...l.map(y=>i.box(["List",...y.map(x=>i.number(x))]))]);return{U:g,S:h,V:b}}function hn(e,n,t,i){if(!ne(e))return i.Zero;let r=e.tensor.at(n,t);return r!==void 0?i.box(r):i.Zero}function KN(e,n){if(!ne(e))return!1;let t=!0,i=!0;for(let r=0;r<n&&(t||i);r++)for(let o=0;o<n;o++){let s=e.tensor.at(r+1,o+1),a=s===void 0||s===0||typeof s=="object"&&"re"in s&&s.re===0;r>o&&!a&&(t=!1),r<o&&!a&&(i=!1)}return t||i}function eS(e,n){if(!ne(e))return;let t=hn(e,1,1,n).re??0,i=hn(e,1,2,n).re??0,r=hn(e,1,3,n).re??0,o=hn(e,2,1,n).re??0,s=hn(e,2,2,n).re??0,a=hn(e,2,3,n).re??0,u=hn(e,3,1,n).re??0,l=hn(e,3,2,n).re??0,c=hn(e,3,3,n).re??0;if([t,i,r,o,s,a,u,l,c].some(T=>T===void 0||isNaN(T)))return Q0(e,3,n);let f=t+s+c,p=t*s-i*o,d=t*c-r*u,g=s*c-a*l,h=p+d+g,b=t*(s*c-a*l)-i*(o*c-a*u)+r*(o*l-s*u),y=h-f*f/3,x=2*f*f*f/27-f*h/3+b,N=nS(y,x,f/3);return n.box(["List",n.number(N[0]),n.number(N[1]),n.number(N[2])])}function nS(e,n,t){if(Math.abs(e)<1e-10&&Math.abs(n)<1e-10)return[t,t,t];let r=n*n/4+e*e*e/27;if(r>1e-10){let o=Math.sqrt(r),s=Math.cbrt(-n/2+o),a=Math.cbrt(-n/2-o),u=s+a+t,l=-(s+a)/2+t;return[u,l,l]}else if(r<-1e-10){let o=Math.sqrt(-e*e*e/27),s=Math.acos(-n/2/o),a=Math.cbrt(o),u=2*a*Math.cos(s/3),l=2*a*Math.cos((s+2*Math.PI)/3),c=2*a*Math.cos((s+4*Math.PI)/3);return[u+t,l+t,c+t]}else{let o=Math.cbrt(-n/2);return[2*o+t,-o+t,-o+t]}}function Q0(e,n,t){if(!ne(e))return;let i=[];for(let a=0;a<n;a++){i[a]=[];for(let u=0;u<n;u++){let l=e.tensor.at(a+1,u+1),c=typeof l=="number"?l:typeof l=="object"&&"re"in l?l.re??0:0;if(isNaN(c))return;i[a][u]=c}}let r=100,o=1e-10;for(let a=0;a<r;a++){let u=0;for(let f=1;f<n;f++)for(let p=0;p<f;p++)u=Math.max(u,Math.abs(i[f][p]));if(u<o)break;let{Q:l,R:c}=X0(i,n);for(let f=0;f<n;f++)for(let p=0;p<n;p++){i[f][p]=0;for(let d=0;d<n;d++)i[f][p]+=c[f][d]*l[d][p]}}let s=[];for(let a=0;a<n;a++)s.push(t.number(i[a][a]));return t.box(["List",...s])}function X0(e,n){let t=Array(n).fill(null).map(()=>Array(n).fill(0)),i=Array(n).fill(null).map(()=>Array(n).fill(0)),r=[];for(let s=0;s<n;s++){r[s]=[];for(let a=0;a<n;a++)r[s][a]=e[a][s]}let o=[];for(let s=0;s<n;s++){o[s]=[...r[s]];for(let u=0;u<s;u++){let l=Ff(o[u],o[u]);if(Math.abs(l)>1e-10){let c=Ff(r[s],o[u])/l;i[u][s]=c*Math.sqrt(l);for(let f=0;f<n;f++)o[s][f]-=c*o[u][f]}}let a=Math.sqrt(Ff(o[s],o[s]));if(i[s][s]=a,a>1e-10)for(let u=0;u<n;u++)t[u][s]=o[s][u]/a}return{Q:t,R:i}}function Ff(e,n){let t=0;for(let i=0;i<e.length;i++)t+=e[i]*n[i];return t}function tS(e,n,t,i){if(!ne(e))return;let r=n.re;if(r===void 0||isNaN(r))return t===2?iS(e,n,i):void 0;let o=[];for(let a=0;a<t;a++){o[a]=[];for(let u=0;u<t;u++){let l=K0(e.tensor.at(a+1,u+1))??0;o[a][u]=l-(a===u?r:0)}}let s=rS(o,t);if(s)return i.box(["List",...s.map(a=>i.number(a))])}function iS(e,n,t){if(!ne(e))return;let i=hn(e,1,1,t),r=hn(e,1,2,t),o=hn(e,2,1,t),s=r.re;if(s!==void 0&&Math.abs(s)>1e-10){let c=n.sub(i).evaluate();return t.box(["List",r,c])}let a=o.re;if(a!==void 0&&Math.abs(a)>1e-10){let c=hn(e,2,2,t),f=n.sub(c).evaluate();return t.box(["List",f,o])}let u=i.re,l=n.re;if(u!==void 0&&l!==void 0)return Math.abs(u-l)<1e-10?t.box(["List",t.One,t.Zero]):t.box(["List",t.Zero,t.One])}function rS(e,n){let t=e1(e);if(t.length===0){let o=Array(n).fill(0);return o[0]=1,o}let i=t[0],r=0;for(let o=0;o<i.length;o++)r+=i[o]*i[o];if(r=Math.sqrt(r),r>1e-10)for(let o=0;o<i.length;o++)i[o]/=r;return i}function qf(e){if(typeof e=="number")return e;if(typeof e=="boolean")return e?1:0;if(typeof e=="object"&&e!==null&&"toNumber"in e&&typeof e.toNumber=="function"){let n=e.toNumber();return typeof n=="number"?n:void 0}}function K0(e){if(typeof e=="object"&&e!==null&&"re"in e){let n=qf(e.re);return("im"in e?qf(e.im)??0:0)!==0?void 0:n}return qf(e)}function oS(e,n,t){if(!ne(e))return;let i=[];for(let r=0;r<n;r++){i[r]=[];for(let o=0;o<t;o++){let s=e.rank===1?e.tensor.at(o+1):e.tensor.at(r+1,o+1),a=K0(s);if(a===void 0||isNaN(a))return;i[r][o]=a}}return i}function sS(e,n=1e-10){let t=e.length,i=e[0]?.length??0,r=e.map(a=>[...a]),o=[],s=0;for(let a=0;a<i&&s<t;a++){let u=s,l=Math.abs(r[s][a]??0);for(let f=s+1;f<t;f++){let p=Math.abs(r[f][a]??0);p>l&&(l=p,u=f)}if(l<=n)continue;u!==s&&([r[s],r[u]]=[r[u],r[s]]);let c=r[s][a];for(let f=a;f<i;f++)r[s][f]/=c;for(let f=0;f<t;f++){if(f===s)continue;let p=r[f][a];if(Math.abs(p)<=n){r[f][a]=0;continue}for(let d=a;d<i;d++)r[f][d]-=p*r[s][d]}o.push(a),s++}for(let a=0;a<t;a++)for(let u=0;u<i;u++)Math.abs(r[a][u])<=n&&(r[a][u]=0);return{matrix:r,pivotCols:o}}function e1(e){let n=e[0]?.length??0;if(n===0)return[];let{matrix:t,pivotCols:i}=sS(e),r=new Set(i),o=[];for(let a=0;a<n;a++)r.has(a)||o.push(a);if(o.length===0)return[];let s=[];for(let a of o){let u=Array(n).fill(0);u[a]=1;for(let l=0;l<i.length;l++){let c=i[l];u[c]=-t[l][a]}s.push(u)}return s}function Vf(e){if(e.isNumber)return 1;let n=e.type.type;if(typeof n=="object"&&n!==null&&"kind"in n&&n.kind==="list"){let t=n.dimensions;if(t!==void 0&&t.length>0&&t.every(i=>Number.isInteger(i)&&i>=0))return t.reduce((i,r)=>i*r,1)}if(ne(e))return e.shape.length===0?1:e.shape.reduce((t,i)=>t*i,1);if(Ve(e)){let t=0;for(let i of e.each())t+=1;return t}}function aS(e){if(m(e,"List")){if(e.ops.length===0)return 0;if(e.ops.every(n=>m(n,"List")))return e.ops.length}if(ne(e)&&(e.rank===1||e.rank===2))return e.shape[0]}function Us(e){if(e.isNumber)return!0;if(_(e))return!e.isConstant;if(!m(e))return!1;if(e.unknowns.length===0)return!0;if(e.operator==="Add"||e.operator==="Subtract"||e.operator==="Multiply")return e.ops.every(n=>Us(n));if(e.operator==="Negate")return Us(e.op1);if(e.operator==="Divide")return Us(e.op1)&&e.op2.unknowns.length===0;if(e.operator==="Power"){let n=e.op2.re;return Us(e.op1)&&e.op2.unknowns.length===0&&n!==void 0&&Number.isInteger(n)&&n>=0}return!1}function W0(e,n,t){let i=t.reduce((o,s)=>o*s,1),r=[];for(let o=0;o<i;o++)r.push(n[o%n.length]);return n1(e,r,t,0)}function n1(e,n,t,i){if(t.length===1)return e.box(["List",...n.slice(i,i+t[0])]);let r=t[0],o=t.slice(1),s=o.reduce((u,l)=>u*l,1),a=[];for(let u=0;u<r;u++)a.push(n1(e,n,o,i+u*s));return e.box(["List",...a])}function uS(e,{engine:n}){let t="Matrix";if(e.length===0)return n._fn(t,[]);let i=e[0].canonical,r=e[0].operator==="Vector"&&m(i)?i.ops[0]:i,o=e[1]?.canonical,s=e[2]?.canonical;return e.length>3?n._fn(t,Fn(n,e,3)):s?n._fn(t,[r,o,s]):o?n._fn(t,[r,o]):n._fn(t,[r])}var r1={True:{wikidata:"Q16751793",type:"boolean",isConstant:!0},False:{wikidata:"Q5432619",type:"boolean",isConstant:!0},And:{wikidata:"Q191081",broadcastable:!0,associative:!0,commutative:!0,idempotent:!0,complexity:1e4,signature:"(boolean+) -> boolean",evaluate:xu},Or:{wikidata:"Q1651704",broadcastable:!0,associative:!0,commutative:!0,idempotent:!0,complexity:1e4,signature:"(boolean+) -> boolean",evaluate:Eu},Not:{wikidata:"Q190558",broadcastable:!0,involution:!0,complexity:10100,signature:"(boolean) -> boolean",evaluate:vu},Equivalent:{wikidata:"Q220433",broadcastable:!0,complexity:10200,signature:"(boolean, boolean) -> boolean",canonical:(e,{engine:n})=>{let t=v(e[0]),i=v(e[1]);return t==="True"&&i==="True"||t==="False"&&i==="False"?n.True:t==="True"&&i==="False"||t==="False"&&i==="True"?n.False:n._fn("Equivalent",e)},evaluate:_u},Implies:{wikidata:"Q7881229",broadcastable:!0,complexity:10200,signature:"(boolean, boolean) -> boolean",evaluate:Nu},Xor:{description:"Exclusive or: true when an odd number of operands are true",wikidata:"Q498186",broadcastable:!0,associative:!0,commutative:!0,complexity:10200,signature:"(boolean+) -> boolean",evaluate:Su},Nand:{description:"Not-and: negation of conjunction",wikidata:"Q189550",broadcastable:!0,commutative:!0,complexity:10200,signature:"(boolean+) -> boolean",evaluate:Tu},Nor:{description:"Not-or: negation of disjunction",wikidata:"Q189561",broadcastable:!0,commutative:!0,complexity:10200,signature:"(boolean+) -> boolean",evaluate:Iu},Exists:{signature:"(value, boolean) -> boolean",lazy:!0,scoped:!0,evaluate:i1},NotExists:{signature:"(value, boolean) -> boolean",lazy:!0,scoped:!0,evaluate:(e,n)=>{let t=i1(e,n);if(v(t)==="True")return n.engine.False;if(v(t)==="False")return n.engine.True}},ExistsUnique:{signature:"(value, boolean) -> boolean",lazy:!0,scoped:!0,evaluate:lS},ForAll:{signature:"(value, boolean) -> boolean",lazy:!0,scoped:!0,evaluate:t1},NotForAll:{signature:"(value, boolean) -> boolean",lazy:!0,scoped:!0,evaluate:(e,n)=>{let t=t1(e,n);if(v(t)==="True")return n.engine.False;if(v(t)==="False")return n.engine.True}},Predicate:{description:"Apply a predicate to arguments, returning a boolean",signature:"(symbol, value+) -> boolean",lazy:!0,evaluate:(e,{engine:n})=>{if(e.length===0)return;let t=e[0];_(t)}},KroneckerDelta:{description:"Return 1 if the arguments are equal, 0 otherwise",signature:"(value+) -> integer",evaluate:(e,{engine:n})=>{if(e.length===1)return v(e[0])==="True"?n.One:n.Zero;if(e.length===2)return e[0].isEqual(e[1])?n.One:n.Zero;for(let t=1;t<e.length;t++)if(!e[t].isEqual(e[0]))return n.Zero;return n.One}},Boole:{description:"Return 1 if the argument is true, 0 otherwise. Also known as the Iverson bracket",signature:"(boolean) -> integer",evaluate:(e,{engine:n})=>v(e[0])==="True"?n.One:n.Zero}};function t1(e,{engine:n}){if(e.length<2)return;let t=e[0],i=e[1],r=i.canonical;if(v(r)==="True")return n.True;if(v(r)==="False")return n.False;let o=m(t)?t.op1:void 0,s=v(t)??(o?v(o):void 0);if(s&&!Mu(r,s))return r.evaluate();let a=Tr(t,n);if(a.status==="success"){let l=ku(i,n);if(l.length>0)return mb([{variable:a.variable,values:a.values},...l],Cu(i),n);for(let c of a.values){let p=i.subs({[a.variable]:c}).canonical.evaluate();if(v(p)==="False")return n.False;if(v(p)!=="True")return}return n.True}let u=r.evaluate();if(v(u)==="True")return n.True;if(v(u)==="False")return n.False}function i1(e,{engine:n}){if(e.length<2)return;let t=e[0],i=e[1],r=i.canonical;if(v(r)==="True")return n.True;if(v(r)==="False")return n.False;let o=m(t)?t.op1:void 0,s=v(t)??(o?v(o):void 0);if(s&&!Mu(r,s))return r.evaluate();let a=Tr(t,n);if(a.status==="success"){let l=ku(i,n);if(l.length>0)return db([{variable:a.variable,values:a.values},...l],Cu(i),n);for(let c of a.values){let p=i.subs({[a.variable]:c}).canonical.evaluate();if(v(p)==="True")return n.True}return n.False}let u=r.evaluate();if(v(u)==="True")return n.True;if(v(u)==="False")return n.False}function lS(e,{engine:n}){if(e.length<2)return;let t=e[0],i=e[1],r=Tr(t,n);if(r.status==="success"){let o=0;for(let s of r.values){let u=i.subs({[r.variable]:s}).canonical.evaluate();if(v(u)==="True"){if(o++,o>1)return n.False}else if(v(u)!=="False")return}return o===1?n.True:n.False}}var o1={ToCNF:{signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(e)return cb(e.evaluate(),n)}},ToDNF:{signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(e)return fb(e.evaluate(),n)}},IsSatisfiable:{description:"Check satisfiability using brute-force enumeration. O(2^n) complexity, max 20 variables.",signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(e)return gb(e,n)}},IsTautology:{description:"Check if expression is a tautology using brute-force enumeration. O(2^n) complexity, max 20 variables.",signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(e)return hb(e,n)}},TruthTable:{description:"Generate truth table for expression. O(2^n) complexity, max 10 variables.",signature:"(boolean) -> list",evaluate:([e],{engine:n})=>{if(e)return bb(e,n)}},PrimeImplicants:{description:"Find all prime implicants using Quine-McCluskey. Max 12 variables.",signature:"(boolean) -> list",evaluate:([e],{engine:n})=>{if(!e)return;let t=yb(e,n);return t===null?n._fn("PrimeImplicants",[e]):n._fn("List",t)}},PrimeImplicates:{description:"Find all prime implicates using Quine-McCluskey. Max 12 variables.",signature:"(boolean) -> list",evaluate:([e],{engine:n})=>{if(!e)return;let t=xb(e,n);return t===null?n._fn("PrimeImplicates",[e]):n._fn("List",t)}},MinimalDNF:{description:"Convert to minimal DNF using Quine-McCluskey. Max 12 variables.",signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(!e)return;let t=Eb(e,n);return t===null?n._fn("MinimalDNF",[e]):t}},MinimalCNF:{description:"Convert to minimal CNF using Quine-McCluskey. Max 12 variables.",signature:"(boolean) -> boolean",evaluate:([e],{engine:n})=>{if(!e)return;let t=vb(e,n);return t===null?n._fn("MinimalCNF",[e]):t}}};var s1=[{Totient:{wikidata:"Q190026",description:"Euler's totient function \u03C6(n): count of positive integers \u2264 n that are coprime to n.",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1)return;let i=1n;for(let r=2n;r<t;r++)pr(r,t)===1n&&i++;return n.number(i)}},Sigma0:{description:"Number of positive divisors of n.",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1)return;let i=0;for(let r=1n;r<=t;r++)t%r===0n&&i++;return n.number(i)}},Sigma1:{description:"Sum of positive divisors of n.",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1)return;let i=n.bignum(0);for(let r=1n;r<=t;r++)t%r===0n&&(i=i.add(n.bignum(r)));return n.number(i)}},SigmaMinus1:{description:"Sum of reciprocals of positive divisors of n.",signature:"(integer) -> number",type:()=>"finite_rational",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1)return;let i=n.bignum(0);for(let r=1n;r<=t;r++)t%r===0n&&(i=i.add(n.bignum(1).div(n.bignum(r))));return n.number(i)}},IsPerfect:{wikidata:"Q170043",description:'Returns "True" if n is a perfect number, a positive integer which equals the sum of all its divisors.',signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1)return;let i=0n;for(let r=1n;r<t;r++)t%r===0n&&(i+=r);return n.symbol(i===t?"True":"False")}},Eulerian:{description:"Eulerian number A(n, m): number of permutations of {1..n} with exactly m ascents.",signature:"(integer, integer) -> integer",type:()=>"finite_integer",evaluate:([e,n],{engine:t})=>{let i=He(e),r=He(n);if(i===null||r===null||i<0n||r<0n||r>=i)return;let o=(s,a)=>a===0n?1n:a>=s?0n:(a+1n)*o(s-1n,a)+(s-a)*o(s-1n,a-1n);return t.number(o(i,r))}},Stirling:{description:"Stirling number of the second kind S(n, m): ways to partition n elements into m non-empty subsets.",signature:"(integer, integer) -> integer",type:()=>"finite_integer",evaluate:([e,n],{engine:t})=>{let i=He(e),r=He(n);if(i===null||r===null||i<0n||r<0n||r>i)return;let o=(s,a)=>s===0n&&a===0n?1n:s===0n||a===0n?0n:o(s-1n,a-1n)+a*o(s-1n,a);return t.number(o(i,r))}},NPartition:{description:"Number of integer partitions of n.",signature:"(integer) -> integer",type:()=>"finite_integer",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<0n)return;let i=new Map,r=o=>{if(o===0n)return 1n;if(o<0n)return 0n;if(i.has(o))return i.get(o);let s=0n;for(let a=1n;;a++){let u=a*(3n*a-1n)/2n,l=a*(3n*a+1n)/2n;if(u>o&&l>o)break;let c=a%2n===0n?-1n:1n;s+=c*(r(o-u)+r(o-l))}return i.set(o,s),s};return n.number(r(t))}},IsTriangular:{description:"True if n is a triangular number.",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1n)return n.False;let i=8n*t+1n,r=BigInt(K.sqrt(n.bignum(i)).toFixed(0));return n.symbol(r*r===i&&(r-1n)%2n===0n?"True":"False")}},IsSquare:{description:"True if n is a perfect square.",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<0n)return n.False;let i=BigInt(K.sqrt(n.bignum(t)).toFixed(0));return n.symbol(i*i===t?"True":"False")}},IsOctahedral:{description:"True if n is an octahedral number.",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1n)return n.False;let i=3n*t+1n,r=BigInt(K.sqrt(n.bignum(i)).toFixed(0));return n.symbol(r*r===i?"True":"False")}},IsCenteredSquare:{description:"True if n is a centered square number.",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1n||(t-1n)%4n!==0n)return n.False;let i=(t-1n)/4n,r=BigInt(K.sqrt(n.bignum(i)).toFixed(0));return n.symbol(r*r*4n+1n===t?"True":"False")}},IsHappy:{wikidata:"Q44535",description:"True if n is a happy number, a number which eventually reaches 1 when the number is replaced by the sum of the square of each digit",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=new Set,i=He(e);if(i===null)return n.False;for(;!t.has(i);){if(i===1n)return n.True;t.add(i),i=cS(i)}return n.False}},IsAbundant:{description:"True if n is an abundant number (sum of divisors > 2n).",signature:"(integer) -> boolean",evaluate:([e],{engine:n})=>{let t=He(e);if(t===null||t<1n)return n.False;let i=1n;for(let r=2n;r*r<=t;r++)if(t%r===0n){i+=r;let o=t/r;o!==r&&(i+=o)}return n.symbol(i>t?"True":"False")}}}];function cS(e){return e.toString().split("").map(n=>BigInt(n)).reduce((n,t)=>n+t*t,0n)}function Bf(e){return e!==null&&typeof e=="object"&&"radical"in e&&typeof e.radical=="number"&&e.radical!==1}function js(e){let n=e.engine,t=e.operator;if(m(e)){if(Gn(t))return n.function(t,e.ops.map(js));if(t==="Divide")return e.ops[0].div(e.ops[1]);if(t==="Negate")return js(e.ops[0]).neg();if(t==="Add"){let[i,r]=e.ops.reduce((o,s)=>(m(s,"Divide")?(o[0].push(s.ops[0]),o[1].push(s.ops[1])):o[0].push(s),o),[[],[]]);return fe(...i).div(fe(...r))}}return e}function Xu(e){let n=e.engine;if(!m(e,"Add"))return null;let t=e.ops;if(t.length!==3)return null;for(let i=0;i<3;i++)for(let r=0;r<3;r++){if(i===r)continue;let o=3-i-r,s=t[i],a=t[r],u=t[o],l=Jf(s,n),c=Jf(a,n);if(l===null||c===null)continue;let f=n.number(2).mul(l).mul(c),p=f.neg();if(u.isSame(f))return n.box(["Square",l.add(c).json]);if(u.isSame(p))return n.box(["Square",l.sub(c).json])}return null}function Jf(e,n){let t=e.sqrt().simplify();if(t.operator==="Sqrt"||E(t)&&Bf(t.numericValue))return null;if(m(t,"Abs"))return t.op1;if(m(t,"Multiply")&&t.ops.filter(r=>r.operator==="Abs").length>0){let r=t.ops.map(o=>m(o,"Abs")?o.op1:o);return n.box(["Multiply",...r.map(o=>o.json)])}return t}function Ku(e){let n=e.engine;if(!m(e,"Add"))return null;let t=e.ops;if(t.length!==2)return null;let i=[];for(let u of t){let l=m(u,"Negate"),c=l&&m(u)?u.op1:u;if(!l&&E(u)&&u.isNegative===!0&&(l=!0,c=u.neg()),!l&&m(u,"Multiply")){let p=u.ops;if(E(p[0])&&p[0].isNegative===!0){l=!0;let d=[p[0].neg(),...p.slice(1)];c=n.box(["Multiply",...d.map(g=>g.json)])}}let f=Jf(c,n);if(f===null)return null;i.push({sqrt:f,isNegative:l})}let r=i.filter(u=>!u.isNegative),o=i.filter(u=>u.isNegative);if(r.length!==1||o.length!==1)return null;let s=r[0].sqrt,a=o[0].sqrt;return n.box(["Multiply",s.sub(a).json,s.add(a).json])}function zf(e,n){let t=e.engine;if(ae(e,n)!==2)return null;let r=$e(e,n);if(!r||r.length<3)return null;let o=r[0],s=r[1],a=r[2];if(a.isSame(0))return null;let u=s.pow(2).sub(t.number(4).mul(a).mul(o));if(u.isNegative===!0)return null;let l=u.sqrt();if(l.operator==="Sqrt"||E(l)&&Bf(l.numericValue))return null;let c=t.number(2).mul(a),f=s.neg().add(l).div(c),p=s.neg().sub(l).div(c),d=y=>{if(y.operator==="Sqrt"||E(y)&&Bf(y.numericValue))return!0;if(m(y)){for(let x of y.ops)if(d(x))return!0}return!1};if(d(f)||d(p))return null;let g=t.symbol(n),h=g.sub(f),b=g.sub(p);return a.isSame(1)?t.box(["Multiply",h.json,b.json]):t.box(["Multiply",a.json,h.json,b.json])}function fS(e,n){let t=e.engine,i=$e(e,n);if(!i)return null;let r=i.length-1;if(r<2)return null;let o=W(i[r]),s=W(i[0]);if(o===null||s===null||o===0||s===0)return null;let a=b=>{b=Math.abs(b);let y=[];for(let x=1;x*x<=b;x++)b%x===0&&(y.push(x),x!==b/x&&y.push(b/x));return y},u=a(s),l=a(o),c=[],f=new Set;for(let b of u)for(let y of l){let x=b/y,N=-b/y;f.has(x)||(f.add(x),c.push([b,y])),f.has(N)||(f.add(N),c.push([-b,y]))}if(c.length>100)return null;let p=t.symbol(n),d=[],g=e;for(let[b,y]of c){if(ae(g,n)<=0)break;let N=y===1?t.number(b):t.number(b).div(t.number(y));if(!g.subs({[n]:N}).N().isSame(0))continue;let I=y===1?p.sub(t.number(b)):t.number(y).mul(p).sub(t.number(b)),M=Yn(g,I,n);M&&(d.push(I),g=M[0])}if(d.length===0)return null;if(ae(g,n)===2){let b=zf(g,n);b!==null&&(g=b)}return d.push(g),d.length===1?d[0]:t.box(["Multiply",...d.map(b=>b.json)])}function pS(e,n){let t=e.engine,i=$e(e,n);if(!i)return null;let r=[];for(let c of i){let f=W(c);if(f===null)return null;r.push(f)}let o=(c,f)=>{for(c=Math.abs(c),f=Math.abs(f);f;)[c,f]=[f,c%f];return c},s=0;for(let c of r)c!==0&&(s=o(s,c));if(s<=1)return null;let a=i.map(c=>{let f=W(c);return t.number(f/s)}),u=Mr(a,n),l=Ao(u,n);return t.number(s).mul(l)}function Ao(e,n){if(n!==void 0){let r=pS(e,n);if(r!==null)return r}let t=Xu(e);if(t!==null)return t;let i=Ku(e);if(i!==null)return i;if(n!==void 0){let r=zf(e,n);if(r!==null)return r;let o=fS(e,n);if(o!==null)return o}return gi(e)}function gi(e){let n=e.operator;if(m(e)&&Gn(n)){let t=qn.from(e.op1),i=qn.from(e.op2),[r,o]=nb(t,i),s=r.sgn()===-1;return r.isOne||(t.div(r),i.div(r)),o.isSame(1)||(o.isPositive?(t.div(o),i.div(o)):o.isNegative&&(t.div(o.neg()),i.div(o.neg()),s=!s)),s&&([t,i]=[i,t]),e.engine.function(n,[t.asExpression(),i.asExpression()])}if(m(e)&&n==="Negate")return gi(e.ops[0]).neg();if(m(e)&&n==="Add"){let t=e.engine,i,r=[];for(let s of e.ops){let[a,u]=s.toNumericValue();i=i?i.gcd(a):a,a.isZero||r.push({coeff:a,term:u})}if(!i||i.isOne)return e;let o=r.map(({coeff:s,term:a})=>ke(a,t.box(s.div(i))));return ke(t.number(i),fe(...o))}return qn.from(js(e)).asExpression()}function mS(e,n){let t=[];a1(e,n,t);let i=[];for(let r of t){let o=!1;for(let s of i)if(s.factor.isSame(r.factor)){s.multiplicity+=r.multiplicity,o=!0;break}o||i.push({...r})}return i}function a1(e,n,t){if(m(e,"Multiply")){for(let r of e.ops)a1(r,n,t);return}if(m(e,"Power")){let r=e.op1,o=W(e.op2);if(o!==null&&o>0&&r.has(n)){let a=ae(r,n);t.push({factor:r,multiplicity:o,degree:a});return}if(!e.has(n))return;let s=ae(e,n);t.push({factor:e,multiplicity:1,degree:s});return}if(!e.has(n)||E(e))return;let i=ae(e,n);t.push({factor:e,multiplicity:1,degree:i})}function dS(e,n){let t=e.length,i=n+1,r=e.map(u=>[...u]),o=new Array(n).fill(-1),s=0;for(let u=0;u<n&&s<t;u++){let l=0,c=-1;for(let f=s;f<t;f++){let p=Math.abs(r[f][u]);p>l&&(l=p,c=f)}if(l!==0){c!==s&&([r[s],r[c]]=[r[c],r[s]]),o[u]=s;for(let f=0;f<t;f++){if(f===s||r[f][u]===0)continue;let p=r[f][u],d=r[s][u];for(let g=0;g<i;g++)r[f][g]=r[f][g]*d-p*r[s][g]}s++}}let a=new Array(n);for(let u=0;u<n;u++){let l=o[u];if(l===-1){a[u]=[0,1];continue}let c=r[l][i-1],f=r[l][u];if(f===0)return null;let p=gS(Math.abs(c),Math.abs(f)),d=f<0?-1:1;a[u]=[d*c/p,d*f/p]}return a}function gS(e,n){for(e=Math.abs(e),n=Math.abs(n);n;)[e,n]=[n,e%n];return e||1}function Gs(e,n){let t=e.engine;if(!m(e,"Divide"))return e;let i=e.op1,r=e.op2,o=ae(i,n),s=ae(r,n);if(o<0||s<0||s===0)return e;let a=null,u;if(o>=s){let w=Yn(i,r,n);if(!w)return e;a=w[0],u=w[1];let k=$e(u,n);if(k&&k.every(P=>P.isSame(0)))return a}else u=i;let l=Ao(r,n),c=mS(l,n);if(c.length===0)return e;if(c.length===1&&c[0].multiplicity===1)return a?a.add(u.div(r)):e;for(let w of c)if(w.degree>2||w.degree<0)return e;let f=0;for(let w of c)f+=w.degree*w.multiplicity;if(f!==s)return e;let p=[],d=0;for(let w of c)for(let k=1;k<=w.multiplicity;k++)w.degree===1?(p.push({isLinear:!0,factor:w.factor,power:k,unknownIndex:d}),d++):(p.push({isLinear:!1,factor:w.factor,power:k,unknownIndex:d}),d+=2);if(d!==s)return e;let g=Ne(r);if(!$e(g,n))return e;let b=Ne(u),y=$e(b,n);if(!y)return e;let x=s,N=[];for(let w=0;w<x;w++)N.push(new Array(d+1).fill(0));for(let w=0;w<x;w++){let k=w<y.length?W(y[w]):0;if(k===null)return e;N[w][d]=k}for(let w of p){let k;w.power===1?k=w.factor:k=t.box(["Power",w.factor.json,w.power]);let P=Yn(g,k,n);if(!P)return e;let F=P[0],G=P[1],U=$e(G,n);if(!U||!U.every(ee=>ee.isSame(0)))return e;let ge=Ne(F),he=$e(ge,n);if(!he)return e;let le=[];for(let ee=0;ee<x;ee++){let Un=ee<he.length?W(he[ee]):0;if(Un===null)return e;le.push(Un)}if(w.isLinear)for(let ee=0;ee<x;ee++)N[ee][w.unknownIndex]+=le[ee];else{let ee=w.unknownIndex,Un=w.unknownIndex+1;for(let mn=0;mn<x;mn++)N[mn][Un]+=le[mn],mn>0&&(N[mn][ee]+=le[mn-1])}}let T=dS(N,d);if(!T)return e;let I=t.symbol(n),M=[];a&&M.push(a);for(let w of p){let k;w.power===1?k=w.factor:k=t.box(["Power",w.factor.json,w.power]);let P;if(w.isLinear){let[F,G]=T[w.unknownIndex];if(F===0)continue;P=G===1?t.number(F):t.number(F).div(t.number(G))}else{let[F,G]=T[w.unknownIndex],[U,ge]=T[w.unknownIndex+1];if(F===0&&U===0)continue;let he=[];if(F!==0){let le=G===1?t.number(F):t.number(F).div(t.number(G));he.push(le.mul(I))}if(U!==0){let le=ge===1?t.number(U):t.number(U).div(t.number(ge));he.push(le)}P=he.length===1?he[0]:fe(...he)}M.push(P.div(k))}return M.length===0?t.Zero:M.length===1?M[0]:fe(...M)}function Uf(e,n,t,i){let r=e.engine;return m(e,t)?r.box([i,...e.ops.map(o=>Uf(o,n,t,i))]):m(n,t)?r.box([i,...n.ops.map(o=>Uf(e,o,t,i))]):r.box([i,e,n])}function u1(e,n="Add",t="Multiply"){if(e.operator!==t||!m(e))return e;let i=e.ops;return i.length<2?e:e.engine.box([n,i.slice(1).reduce((r,o)=>Uf(r,o,n,t),i[0])])}var l1=[{Expand:{description:"Expand out products and positive integer powers",lazy:!0,signature:"(value)-> value",evaluate:([e])=>Ne(e.canonical)},ExpandAll:{description:"Recursively expand out products and positive integer powers",lazy:!0,signature:"(value)-> value",evaluate:([e])=>wr(e.canonical)},Factor:{description:"Factor a polynomial expression into a product of irreducible factors. Supports perfect square trinomials, difference of squares, and quadratic factoring with rational roots. Example: Factor(x\xB2 + 5x + 6) \u2192 (x+2)(x+3), Factor(x\xB2 + 2x + 1) \u2192 (x+1)\xB2",lazy:!0,signature:"(value, symbol?) -> value",evaluate:([e,n])=>{if(!e)return e;if(n){let t=v(n.canonical);return t?Ao(e.canonical,t):e.canonical}return Ao(e.canonical)}},Together:{description:"Combine rational expressions into a single fraction",lazy:!0,signature:"(value)-> value",evaluate:([e])=>js(e.canonical)},Distribute:{description:"Distribute multiplication over addition",lazy:!0,signature:"(value)-> value",evaluate:([e])=>e&&u1(e.canonical)},PolynomialDegree:{description:"Return the degree of a polynomial with respect to a variable. Example: PolynomialDegree(x\xB3 + 2x + 1, x) \u2192 3",lazy:!0,signature:"(value, symbol) -> integer",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(!t)return;let i=ae(e.canonical,t);return i>=0?e.engine.number(i):void 0}},CoefficientList:{description:"Return the list of coefficients of a polynomial, from highest to lowest degree. Example: CoefficientList(x\xB3 + 2x + 1, x) \u2192 [1, 0, 2, 1]",lazy:!0,signature:"(value, symbol) -> list<value>",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(!t)return;let i=$e(e.canonical,t);if(i)return e.engine.box(["List",...i.reverse()])}},PolynomialQuotient:{description:"Return the quotient of polynomial division of dividend by divisor. Example: PolynomialQuotient(x\xB3 - 1, x - 1, x) \u2192 x\xB2 + x + 1",lazy:!0,signature:"(dividend: value, divisor: value, variable: symbol) -> value",evaluate:([e,n,t])=>{if(!e||!n||!t)return;let i=v(t.canonical);return i?Yn(e.canonical,n.canonical,i)?.[0]:void 0}},PolynomialRemainder:{description:"Return the remainder of polynomial division of dividend by divisor. Example: PolynomialRemainder(x\xB3 + 2x + 1, x + 1, x) \u2192 -2",lazy:!0,signature:"(dividend: value, divisor: value, variable: symbol) -> value",evaluate:([e,n,t])=>{if(!e||!n||!t)return;let i=v(t.canonical);return i?Yn(e.canonical,n.canonical,i)?.[1]:void 0}},PolynomialGCD:{description:"Return the greatest common divisor of two polynomials. Example: PolynomialGCD(x\xB2 - 1, x - 1, x) \u2192 x - 1",lazy:!0,signature:"(a: value, b: value, variable: symbol) -> value",evaluate:([e,n,t])=>{if(!e||!n||!t)return;let i=v(t.canonical);if(i)return vf(e.canonical,n.canonical,i)}},Cancel:{description:"Cancel common polynomial factors in the numerator and denominator of a rational expression. Example: Cancel((x\xB2 - 1)/(x - 1), x) \u2192 x + 1",lazy:!0,signature:"(value, symbol) -> value",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(t)return No(e.canonical,t)}},PartialFraction:{description:"Decompose a rational expression into partial fractions. Example: PartialFraction(1/((x+1)(x+2)), x) \u2192 1/(x+1) - 1/(x+2)",lazy:!0,signature:"(value, symbol) -> value",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(t)return Gs(e.canonical,t)}},Apart:{description:"Alias for PartialFraction. Decompose a rational expression into partial fractions.",lazy:!0,signature:"(value, symbol) -> value",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(t)return Gs(e.canonical,t)}},PolynomialRoots:{description:"Return the roots of a polynomial expression. Example: PolynomialRoots(x\xB2 - 5x + 6, x) \u2192 {2, 3}",lazy:!0,signature:"(value, symbol) -> set<value>",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(!t)return;let i=e.canonical.polynomialRoots(t);if(!(!i||i.length===0))return e.engine.box(["Set",...i.map(r=>r.json)])}},Discriminant:{description:"Return the discriminant of a polynomial. Example: Discriminant(x\xB2 - 5x + 6, x) \u2192 1",lazy:!0,signature:"(value, symbol) -> value",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(!t)return;let i=$e(e.canonical,t);if(!i)return;let r=[...i].reverse(),o=r.length-1,s=e.engine;if(o===2){let[a,u,l]=r;return u.mul(u).sub(s.number(4).mul(a).mul(l))}if(o===3){let[a,u,l,c]=r;return u.mul(u).mul(l).mul(l).sub(s.number(4).mul(a).mul(l).mul(l).mul(l)).sub(s.number(4).mul(u).mul(u).mul(u).mul(c)).add(s.number(18).mul(a).mul(u).mul(l).mul(c)).sub(s.number(27).mul(a).mul(a).mul(c).mul(c))}if(o===4){let[a,u,l,c,f]=r;return s.number(256).mul(a).mul(a).mul(a).mul(f).mul(f).mul(f).sub(s.number(192).mul(a).mul(a).mul(u).mul(c).mul(f).mul(f)).sub(s.number(128).mul(a).mul(a).mul(l).mul(l).mul(f).mul(f)).add(s.number(144).mul(a).mul(a).mul(l).mul(c).mul(c).mul(f)).sub(s.number(27).mul(a).mul(a).mul(c).mul(c).mul(c).mul(c)).add(s.number(144).mul(a).mul(u).mul(u).mul(l).mul(f).mul(f)).sub(s.number(6).mul(a).mul(u).mul(u).mul(c).mul(c).mul(f)).sub(s.number(80).mul(a).mul(u).mul(l).mul(l).mul(c).mul(f)).add(s.number(18).mul(a).mul(u).mul(l).mul(c).mul(c).mul(c)).add(s.number(16).mul(a).mul(l).mul(l).mul(l).mul(l).mul(f)).sub(s.number(4).mul(a).mul(l).mul(l).mul(l).mul(c).mul(c)).sub(s.number(27).mul(u).mul(u).mul(u).mul(u).mul(f).mul(f)).add(s.number(18).mul(u).mul(u).mul(u).mul(l).mul(c).mul(f)).sub(s.number(4).mul(u).mul(u).mul(u).mul(c).mul(c).mul(c)).sub(s.number(4).mul(u).mul(u).mul(l).mul(l).mul(l).mul(f)).add(u.mul(u).mul(l).mul(l).mul(c).mul(c))}}},Polynomial:{description:"Construct a polynomial from a list of coefficients (highest to lowest degree) and a variable. Example: Polynomial([1, 0, 2, 1], x) \u2192 x\xB3 + 2x + 1",lazy:!0,signature:"(list<value>, symbol) -> value",evaluate:([e,n])=>{if(!e||!n)return;let t=v(n.canonical);if(!t)return;let i=e.canonical;if(!m(i,"List"))return;let r=i.ops;if(r.length===0)return;let o=[...r].reverse();return Mr(o,t)}}}];function Zs(e,n){if(!qt(e)||!qt(n))return null;let t=e.op1.re,i=n.op1.re;if(t===void 0||i===void 0)return null;let r=pn(e.op2),o=pn(n.op2);if(!r||!o)return null;let s=un(r),a=un(o);if(!s||!a||!ci(s,a))return null;let u=fn(r),l=fn(o);return u===null||l===null?null:t*u-i*l}var f1={Congruent:{description:"Indicate that two expressions are congruent modulo a number",complexity:11e3,signature:"(number, number, modulo: integer) -> boolean",evaluate:(e,{engine:n})=>{if(e.length<3)return;let[t,i,r]=e,o=t.value,s=i.value,a=r.value;if(typeof o=="number"&&typeof s=="number"&&typeof a=="number")return o%a===s%a?n.True:n.False}},IsSame:{description:"Compare two expressions for structural equality",lazy:!0,signature:"(any, any) -> boolean",evaluate:(e,{engine:n})=>{if(e.length!==2)return;let[t,i]=e;return t.isSame(i)?n.True:n.False}},Equal:{complexity:11e3,signature:"(any, any) -> boolean",lazy:!0,canonical:(e,{engine:n})=>Fe(n,"Equal",e),eq:(e,n)=>{if(e.operator!==n.operator||!m(e)||!m(n))return;let t=e.engine,i=e.op1.sub(e.op2),r=n.op1.sub(n.op2),o=i.simplify(),s=r.simplify(),a=o.isSame(0)||E(o)&&o.re===0,u=s.isSame(0)||E(s)&&s.re===0;if(a&&u)return!0;if(a||u)return!1;let l=[...new Set([...i.unknowns,...r.unknowns])];if(l.length===0){let d=i.N().re,g=r.N().re;return!Number.isFinite(d)||!Number.isFinite(g)?void 0:Math.abs(g)<t.tolerance?!1:Math.abs(d)>t.tolerance&&Math.abs(g)>t.tolerance&&Number.isFinite(d/g)}let c=[.5,1.5,2,-1,3,-.5,.7,2.3],f,p=t.tolerance;for(let d of c){let g={};for(let T of l)g[T]=d;let h=i.subs(g).N(),b=r.subs(g).N(),y=h.re,x=b.re;if(!Number.isFinite(y)||!Number.isFinite(x)||Math.abs(x)<p)continue;let N=y/x;if(Number.isFinite(N)){if(f===void 0)f=N;else if(Math.abs(N-f)>p)return!1}}if(f!==void 0&&Math.abs(f)>p)return!0},evaluate:(e,{engine:n})=>{if(e.length<2)return n.True;let t;for(let i of e)if(!t)t=i;else{let r=Zs(t,i);if(r!==null){if(Math.abs(r)>n.tolerance)return n.False;t=i;continue}let o=Oa(t,i);if(o===!1)return n.False;if(o===void 0&&n.isVerifying)return;if(o===void 0)return n.False}return n.True}},NotEqual:{wikidata:"Q28113351",complexity:11e3,signature:"(any, any) -> boolean",canonical:(e,{engine:n})=>Fe(n,"NotEqual",e),eq:(e,n)=>e.operator!==n.operator||!m(e)||!m(n)?!1:!!(e.op1.isEqual(n.op1)&&e.op2.isEqual(n.op2)||e.op1.isEqual(n.op2)&&e.op2.isEqual(n.op1)),evaluate:(e,{engine:n})=>{if(e.length<2)return n.False;let t;for(let i of e)if(!t)t=i;else{let r=t.isEqual(i);if(r===!0)return n.False;if(r===void 0&&n.isVerifying)return}return n.True}},Less:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"Less",e),eq:(e,n)=>c1(e,n,"Greater"),evaluate:(e,{engine:n})=>{if(e.length===2){let[i,r]=e,o=Zs(i,r);if(o!==null)return o<0?n.True:n.False;let s=i.isLess(r);return s===void 0?void 0:s?n.True:n.False}if(e.length<2)return n.True;let t;for(let i of e)if(!t)t=i;else{let r=Zs(t,i);if(r!==null){if(r>=0)return n.False}else{let o=t.isLess(i);if(o===void 0)return;if(o===!1)return n.False}t=i}return n.True}},NotLess:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"Less",e)])},Greater:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"Less",[...e].reverse())},NotGreater:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[n._fn("Greater",e)])},LessEqual:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"LessEqual",e),eq:(e,n)=>c1(e,n,"LessGreater"),evaluate:(e,{engine:n})=>{if(e.length===2){let[i,r]=e,o=Zs(i,r);if(o!==null)return o<=0?n.True:n.False;let s=i.isLessEqual(r);return s===void 0?void 0:s?n.True:n.False}if(e.length<2)return n.True;let t;for(let i of e)if(!t)t=i;else{let r=Zs(t,i);if(r!==null){if(r>0)return n.False}else{let o=t.isLessEqual(i);if(o===void 0)return;if(o===!1)return n.False}t=i}return n.True}},NotLessNotEqual:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"LessEqual",e)])},GreaterEqual:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"LessEqual",[...e].reverse())},NotGreaterNotEqual:{complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"GreaterEqual",e)])},TildeFullEqual:{description:"Indicate isomorphism, congruence and homotopic equivalence",signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"TildeFullEqual",e),evaluate:(e,{engine:n})=>Hs(e,n)},NotTildeFullEqual:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"TildeFullEqual",e)])},TildeEqual:{description:"Approximately or asymptotically equal",complexity:11e3,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"TildeEqual",e),evaluate:(e,{engine:n})=>Hs(e,n)},NotTildeEqual:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"TildeEqual",e)])},Approx:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"Approx",e),evaluate:(e,{engine:n})=>Hs(e,n)},NotApprox:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"Approx",e)])},ApproxEqual:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"ApproxEqual",e),evaluate:(e,{engine:n})=>Hs(e,n)},NotApproxEqual:{complexity:11100,canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"ApproxEqual",e)])},ApproxNotEqual:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"ApproxNotEqual",e),evaluate:(e,{engine:n})=>{let t=Hs(e,n);if(t!==void 0)return t===n.True?n.False:n.True}},NotApproxNotEqual:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"ApproxNotEqual",e)])},Precedes:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"Precedes",e),evaluate:(e,{engine:n})=>{if(e.length<2)return n.True;let t=e[0];for(let i=1;i<e.length;i++){let r=t.isLess(e[i]);if(r===void 0)return;if(r===!1)return n.False;t=e[i]}return n.True}},NotPrecedes:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"Precedes",e)])},Succeeds:{signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>Fe(n,"Succeeds",e),evaluate:(e,{engine:n})=>{if(e.length<2)return n.True;let t=e[0];for(let i=1;i<e.length;i++){let r=e[i].isLess(t);if(r===void 0)return;if(r===!1)return n.False;t=e[i]}return n.True}},NotSucceeds:{complexity:11100,signature:"(any, any+) -> boolean",canonical:(e,{engine:n})=>n._fn("Not",[Fe(n,"Succeeds",e)])}};function hS(e,n){let t=e.engine,i=e.N(),r=n.N();if(!E(i)||!E(r))return;let o=i.sub(r);if(!E(o))return;let s=o.numericValue;return typeof s=="number"?t.chop(s)===0:s.isZeroWithTolerance(t.tolerance)}function Hs(e,n){if(e.length<2)return n.True;let t=e[0];for(let i=1;i<e.length;i++){let r=hS(t,e[i]);if(r===!1)return n.False;if(r===void 0)return;t=e[i]}return n.True}function Fe(e,n,t){t=be(t,n);let i=[],r=[];for(let o of t)Gn(o.operator)&&m(o)?(i.push(o),r.push(o.ops[o.ops.length-1])):r.push(o);return i.length===0?e._fn(n,r):e._fn("And",[e._fn(n,r),...i])}function c1(e,n,t){return!m(e)||!m(n)?!1:e.operator===n.operator?e.nops!==n.nops?!1:e.ops.every((i,r)=>i.isEqual(n.ops[r])):n.operator===t?e.nops!==n.nops?!1:e.ops.every((i,r)=>i.isEqual(n.ops[n.nops-1-r])):!1}function kn(e){if(typeof e=="string")return Rd(e)?e:"error";switch(e.kind){case"union":return yS(e);case"intersection":return xS(e);case"negation":return bS(e);case"collection":case"indexed_collection":return ES(e.kind,e);case"list":return vS(e);case"set":return _S(e);case"tuple":return NS(e);case"record":return SS(e);case"dictionary":return TS(e);case"signature":return IS(e);case"value":return e;case"reference":return e;default:throw new Error(`Unknown type kind: ${e}`)}}function Cn(e){return typeof e!="object"||Object.defineProperty(e,"toString",{value:()=>_e(e)}),e}function bS(e){let n=kn(e.type);return n==="nothing"?"any":n==="any"?"nothing":Cn({kind:"negation",type:n})}function yS(e){let n=new Set(e.types.map(i=>_e(kn(i)))),t=Array.from(n).map(i=>Q(i));return t.length===0?"never":t.some(i=>i==="error")?"error":t.length===1?Cn(t[0]):Cn(t.reduce((i,r)=>(i.some(o=>L(r,o)||L(o,r))||i.push(r),i),[]).reduce((i,r,o,s)=>s.length===1?r:{kind:"union",types:s}))}function xS(e){let n=new Set(e.types.map(o=>_e(kn(o)))),t=Array.from(n).map(o=>Q(o));if(t.some(o=>t.some(s=>o!==s&&!L(o,s)&&!L(s,o))))return"nothing";let r=t.reduce((o,s)=>(o=o.filter(a=>L(a,s)),o.some(a=>L(a,s))||o.push(s),o),[]);return r.some(o=>o==="error")?"error":r.length===0?"nothing":r.length===1?Cn(r[0]):Cn({kind:"intersection",types:r})}function ES(e,n){let t=kn(n.elements);return t==="error"?"error":t==="nothing"?Cn({kind:e,elements:"nothing"}):t==="any"?e:Cn({...n,elements:t})}function vS(e){let n=kn(e.elements);if(n==="error")return"error";if(n==="nothing")return Cn({kind:"list",elements:"nothing"});if(n==="any")return"list";let t=e.dimensions;return t&&(t=t.filter(i=>i>=1),t.length===0)?"nothing":Cn({...e,dimensions:t,elements:n})}function _S(e){let n=kn(e.elements);return n==="error"?"error":n==="nothing"?Cn({kind:"set",elements:"nothing"}):n==="any"?"set":Cn({...e,elements:n})}function NS(e){let n=e.elements.map(t=>({...t,type:kn(t.type)}));return n.length===0?"nothing":n.some(t=>t.type==="error")?"error":(n=n.filter(t=>t.type!=="nothing"),Cn({...e,elements:n}))}function SS(e){let n={};for(let[t,i]of Object.entries(e.elements))n[t]=kn(i);return Object.values(n).some(t=>t==="error")?"error":(n=Object.fromEntries(Object.entries(n).filter(([t,i])=>i!=="nothing")),Object.keys(n).length===0?"record":Cn({...e,elements:n}))}function TS(e){let n=kn(e.values);return n==="error"||n==="nothing"?"error":n==="any"||n==="unknown"?"any":Cn({kind:"dictionary",values:n})}function IS(e){let n=e.args?.map(o=>({...o,type:kn(o.type)})),t=e.optArgs?.map(o=>({...o,type:kn(o.type)})),i=e.variadicArg?{...e.variadicArg,type:kn(e.variadicArg.type)}:void 0,r=kn(e.result);return n?.some(o=>o.type==="error")||t?.some(o=>o.type==="error")||i?.type==="error"||r==="error"?"error":(t=t?.filter(o=>o.type!=="nothing"),n?.length===0&&(t=void 0),t?.length===0&&(t=void 0),i?.type==="nothing"&&(i=void 0),Cn({...e,args:n,optArgs:t,variadicArg:i,variadicMin:i?e.variadicMin:void 0,result:r}))}function p1(e,n){return kn({kind:"intersection",types:[e,n]})}function Nt(e,n){return m(n,"List")&&n.nops===2?e.function("Interval",[n.op1.canonical,n.op2.canonical]):m(n,"Tuple")&&n.nops===2?e.function("Interval",[e.function("Open",[n.op1.canonical]),e.function("Open",[n.op2.canonical])]):n.canonical}var d1={EmptySet:{type:"set",isConstant:!0,wikidata:"Q226183",description:"The empty set, a set containing no elements.",eq:e=>e.type.matches("set")&&e.isEmptyCollection,collection:{iterator:()=>({next:()=>({value:void 0,done:!0})}),count:()=>0,isEmpty:()=>!0,isFinite:()=>!0,contains:()=>!1,subsetOf:()=>!0,eltsgn:()=>{},elttype:()=>"never"}},Numbers:{type:"set<number>",isConstant:!0,description:"The set of all numbers.",collection:{iterator:jf,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,contains:(e,n)=>n.type.matches("number"),subsetOf:(e,n,t)=>n.operator==="Range"||n.operator==="Linspace"?!0:n.type.matches(V.setNumber)&&(!t||v(n)!=="Numbers"),eltsgn:()=>"unsigned",elttype:()=>"number"}},ComplexNumbers:{type:"set<finite_complex>",isConstant:!0,description:"The set of all finite complex numbers.",collection:{iterator:jf,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,contains:(e,n)=>n.type.matches("finite_complex"),subsetOf:(e,n,t)=>n.operator==="Range"||n.operator==="Linspace"?!0:n.type.matches(V.setComplex)&&(!t||v(n)!=="ComplexNumbers"),eltsgn:()=>"unsigned",elttype:()=>"finite_complex"}},ExtendedComplexNumbers:{type:"set<complex>",isConstant:!0,description:"The set of all complex numbers, including infinities.",collection:{iterator:jf,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,contains:(e,n)=>n.type.matches("complex"),subsetOf:(e,n,t)=>n.operator==="Range"||n.operator==="Linspace"?!0:n.type.matches(V.setComplex)&&(!t||v(n)!=="ComplexNumbers"),eltsgn:()=>"unsigned",elttype:()=>"complex"}},ImaginaryNumbers:{type:"set<imaginary>",isConstant:!0,description:"The set of all imaginary numbers.",collection:{iterator:CS,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,contains:(e,n)=>n.type.matches(V.setImaginary),subsetOf:(e,n,t)=>n.type.matches(V.setImaginary)&&(!t||v(n)!=="ImaginaryNumbers"),eltsgn:()=>"unsigned",elttype:()=>"imaginary"}},RealNumbers:{type:"set<finite_real>",isConstant:!0,description:"The set of all finite real numbers.",collection:{iterator:e=>Ji(e),contains:(e,n)=>n.type.matches("finite_real"),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>n.type.matches(V.setReal)&&(!t||v(n)!=="RealNumbers"),eltsgn:()=>{},elttype:()=>"finite_real"}},ExtendedRealNumbers:{type:"set<real>",isConstant:!0,description:"The set of all real numbers, including infinities.",collection:{iterator:e=>Ji(e),contains:(e,n)=>n.type.matches("real"),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>n.type.matches(V.setReal)&&(!t||v(n)!=="ExtendedRealNumbers"),eltsgn:()=>{},elttype:()=>"real"}},Integers:{type:"set<finite_integer>",isConstant:!0,description:"The set of all finite integers.",collection:{iterator:m1,contains:(e,n)=>n.type.matches("finite_integer"),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>n.operator==="Range"?!0:n.type.matches(V.setFiniteInteger)&&(!t||v(n)!=="Integers"),eltsgn:()=>{},elttype:()=>"finite_integer"}},ExtendedIntegers:{type:"set<integer>",isConstant:!0,description:"The set of all integers, including infinities.",collection:{iterator:m1,contains:(e,n)=>n.type.matches("integer"),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>n.operator==="Range"?!0:n.type.matches(V.setInteger)&&(!t||v(n)!=="ExtendedIntegers"),eltsgn:()=>{},elttype:()=>"integer"}},RationalNumbers:{type:"set<finite_rational>",isConstant:!0,description:"The set of all finite rational numbers.",collection:{iterator:e=>Ji(e),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,contains:(e,n)=>n.type.matches("finite_rational"),subsetOf:(e,n,t)=>n.type.matches(V.setRational)&&(!t||v(n)!=="RationalNumbers"),eltsgn:()=>{},elttype:()=>"finite_rational"}},ExtendedRationalNumbers:{type:"set<rational>",isConstant:!0,description:"The set of all rational numbers, including infinities.",collection:{iterator:e=>Ji(e),contains:(e,n)=>n.type.matches("rational"),count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>n.type.matches(V.setRational)&&(!t||v(n)!=="ExtendedRationalNumbers"),eltsgn:()=>{},elttype:()=>"rational"}},NegativeNumbers:{type:"set<real>",isConstant:!0,description:"The set of all negative real numbers.",collection:{iterator:e=>Ji(e,{sign:"-",includeZero:!1}),count:()=>1/0,contains:(e,n)=>n.type.matches("real")&&n.isNegative===!0,subsetOf:(e,n,t)=>{if((n.operator==="Range"||n.operator==="Linspace")&&m(n)){let i=n.ops[0].re,r=n.ops[1].re;return i<0&&r<0}return n.type.matches(V.setReal)&&n.baseDefinition?.collection?.eltsgn?.(n)==="negative"&&(!t||v(n)!=="NegativeNumbers")},eltsgn:()=>"negative",elttype:()=>"real"}},NonPositiveNumbers:{type:"set<real>",isConstant:!0,description:"The set of all non-positive real numbers.",collection:{iterator:e=>Ji(e,{sign:"-",includeZero:!0}),contains:(e,n)=>n.type.matches("real")&&n.isNonPositive===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if((n.operator==="Range"||n.operator==="Linspace")&&m(n)){let i=n.ops[0].re,r=n.ops[1].re;return i>=0&&r>=0}return n.type.matches(V.setReal)&&n.baseDefinition?.collection?.eltsgn?.(n)==="non-positive"&&(!t||v(n)!=="NonPositiveNumbers")},eltsgn:()=>"non-positive",elttype:()=>"real"}},NonNegativeNumbers:{type:"set<real>",isConstant:!0,description:"The set of all non-negative real numbers.",collection:{iterator:e=>Ji(e,{sign:"+",includeZero:!0}),contains:(e,n)=>n.type.matches("real")&&n.isNonNegative===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if((n.operator==="Range"||n.operator==="Linspace")&&m(n)){let i=n.ops[0].re,r=n.ops[1].re;return i<=0&&r<=0}return n.type.matches(V.setReal)&&n.baseDefinition?.collection?.eltsgn?.(n)==="non-negative"&&(!t||v(n)!=="NonNegativeNumbers")},eltsgn:()=>"non-negative",elttype:()=>"real"}},PositiveNumbers:{type:"set<real>",isConstant:!0,description:"The set of all positive real numbers.",collection:{iterator:e=>Ji(e,{sign:"+",includeZero:!1}),contains:(e,n)=>n.type.matches("real")&&n.isPositive===!0,count:()=>1/0,subsetOf:(e,n,t)=>{if((n.operator==="Range"||n.operator==="Linspace")&&m(n)){let i=n.ops[0].re,r=n.ops[1].re;return i>0&&r>0}return n.type.matches(V.setReal)&&n.baseDefinition?.collection?.eltsgn?.(n)==="positive"&&(!t||v(n)!=="PositiveNumbers")},eltsgn:()=>"positive",elttype:()=>"real"}},NegativeIntegers:{type:"set<integer>",isConstant:!0,description:"The set of all negative integers.",collection:{iterator:e=>el(e.engine,-1,-1),contains:(e,n)=>n.type.matches("integer")&&n.isNegative===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if(m(n,"Range")){let i=n.ops[0].re,r=n.ops[1].re;return i<0&&r<0}return n.type.matches(V.setInteger)&&n.baseDefinition?.collection?.eltsgn?.(n)==="negative"&&(!t||v(n)!=="NegativeIntegers")},eltsgn:()=>"negative",elttype:()=>"integer"}},NonPositiveIntegers:{type:"set<integer>",isConstant:!0,description:"The set of all non-positive integers.",collection:{iterator:e=>el(e.engine,0,-1),contains:(e,n)=>n.type.matches("integer")&&n.isNonPositive===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if(m(n,"Range")){let i=n.ops[0].re,r=n.ops[1].re;return i<=0&&r<=0}return n.type.matches(V.setInteger)&&n.baseDefinition?.collection?.eltsgn?.(n)==="non-positive"&&(!t||v(n)!=="NonPositiveIntegers")},eltsgn:()=>"non-positive",elttype:()=>"integer"}},NonNegativeIntegers:{type:"set<integer>",isConstant:!0,description:"The set of all non-negative integers.",collection:{iterator:e=>el(e.engine,0,1),contains:(e,n)=>n.type.matches("integer")&&n.isNonNegative===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if(m(n,"Range")){let i=n.ops[0].re,r=n.ops[1].re;return i>0&&r>0}return n.type.matches(V.setInteger)&&n.baseDefinition?.collection?.eltsgn?.(n)==="non-negative"&&(!t||v(n)!=="NonNegativeIntegers")},eltsgn:()=>"non-negative",elttype:()=>"integer"}},PositiveIntegers:{type:"set<integer>",isConstant:!0,description:"The set of all positive integers.",collection:{iterator:e=>el(e.engine,1,1),contains:(e,n)=>n.type.matches("integer")&&n.isPositive===!0,count:()=>1/0,isEmpty:()=>!1,isFinite:()=>!1,subsetOf:(e,n,t)=>{if(m(n,"Range")){let i=n.ops[0].re,r=n.ops[1].re;return i>0&&r>0}return n.type.matches(V.setInteger)&&n.baseDefinition?.collection?.eltsgn?.(n)==="positive"&&(!t||v(n)!=="PositiveIntegers")},eltsgn:()=>"positive",elttype:()=>"integer"}},Element:{complexity:11200,signature:"(value, collection, boolean?) -> boolean",description:`Test whether a value is an element of a collection. Optional third argument is a boolean expression (condition) for filtered iteration in Sum/Product.
|
|
71
|
+
|
|
72
|
+
Element supports two modes of operation:
|
|
73
|
+
1. Set membership: Element(3, [List, 1, 2, 3]) checks if 3 is in the list
|
|
74
|
+
2. Type-style membership: Element(x, integer) checks if x has type integer
|
|
75
|
+
|
|
76
|
+
Type-style membership works with:
|
|
77
|
+
- Mathematical sets: Integers, RealNumbers, ComplexNumbers, etc.
|
|
78
|
+
- Type names: integer, real, number, finite_real, positive_integer, etc.
|
|
79
|
+
- Invalid type names remain unevaluated (e.g., Element(2, "Booleans"))`,canonical:(e,{engine:n})=>{if(e.length===0)return n._fn("Element",[n.error("missing"),n.error("missing")]);if(e.length===1)return n._fn("Element",[e[0].canonical,n.error("missing")]);let[t,i,r]=e,o=Nt(n,i);return!o.type.matches("collection")&&!v(o)&&!o.isValid?n._fn("Element",[t.canonical,n.error(["incompatible-type","'collection'",o.type.toString()]),...r?[r.canonical]:[]]):r&&v(r)!=="Nothing"?r.type.matches("boolean")?n._fn("Element",[t.canonical,o,r.canonical]):n._fn("Element",[t.canonical,o,n.error(["incompatible-type","'boolean'",i.type.toString()])]):n._fn("Element",[t.canonical,o])},evaluate:([e,n,t],{engine:i})=>{if(n&&typeof n.contains=="function"){let o=n.contains(e);if(o===!0)return i.True;if(o===!1)return i.False}let r=v(n);if(r)try{let o=i.type(r);if(!o.isUnknown){let s=e.type;if(s.matches(o))return i.True;if(p1(s.type,o.type)==="nothing")return i.False}}catch{}}},NotElement:{complexity:11200,signature:"(value, collection) -> boolean",description:"Test whether a value is not an element of a collection.",evaluate:([e,n],{engine:t})=>{let i=n.contains(e);if(i===!0)return t.False;if(i===!1)return t.True;let r=v(n);if(r){let o=t.type(r);if(!o.isUnknown){let s=e.type;if(s.matches(o))return t.False;if(p1(s.type,o.type)==="nothing")return t.True}}}},Subset:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is a strict subset of the second.",canonical:(e,{engine:n})=>e.length!==2?n._fn("Subset",e):n._fn("Subset",[Nt(n,e[0]),Nt(n,e[1])]),evaluate:([e,n],{engine:t})=>{let i=Rr(e,n);if(i===!0)return t.True;if(i===!1)return t.False}},SubsetEqual:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is a subset (possibly equal) of the second.",canonical:(e,{engine:n})=>e.length!==2?n._fn("SubsetEqual",e):n._fn("SubsetEqual",[Nt(n,e[0]),Nt(n,e[1])]),evaluate:([e,n],{engine:t})=>{let i=Rr(e,n,!1);if(i===!0)return t.True;if(i===!1)return t.False}},NotSubset:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is not a strict subset of the second.",evaluate:([e,n],{engine:t})=>{let i=Rr(e,n);if(i===!0)return t.False;if(i===!1)return t.True}},Superset:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is a strict superset of the second.",canonical:(e,{engine:n})=>e.length!==2?n._fn("Superset",e):n._fn("Superset",[Nt(n,e[0]),Nt(n,e[1])]),evaluate:([e,n],{engine:t})=>{let i=Rr(n,e);if(i===!0)return t.True;if(i===!1)return t.False}},SupersetEqual:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is a superset (possibly equal) of the second.",canonical:(e,{engine:n})=>e.length!==2?n._fn("SupersetEqual",e):n._fn("SupersetEqual",[Nt(n,e[0]),Nt(n,e[1])]),evaluate:([e,n],{engine:t})=>{let i=Rr(n,e,!0);if(i===!0)return t.True;if(i===!1)return t.False}},NotSuperset:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is not a strict superset of the second.",evaluate:([e,n],{engine:t})=>{let i=Rr(n,e);if(i===!0)return t.False;if(i===!1)return t.True}},NotSupersetEqual:{complexity:11200,signature:"(lhs:collection, rhs: collection) -> boolean",description:"Test whether the first collection is not a superset (possibly equal) of the second.",evaluate:([e,n],{engine:t})=>{let i=Rr(n,e,!0);if(i===!0)return t.False;if(i===!1)return t.True}},Complement:{wikidata:"Q242767",signature:"(set+) -> set",description:"Return the elements of the first set that are not in any of the subsequent sets.",collection:{contains:(e,n)=>{if(!m(e))return!1;let[t,...i]=e.ops;return(t.contains(n)??!1)&&i.every(r=>!r.contains(n))},count:e=>m(e)?nl(e,n=>e.ops.slice(1).every(t=>!t.contains(n))):0,iterator:PS}},Intersection:{wikidata:"Q185837",signature:"(set+) -> set",description:"Return the intersection of two or more sets.",canonical:(e,{engine:n})=>{if(e.length===0||e.length===1)return n.symbol("EmptySet");let t=e.map(r=>Nt(n,r)),i=po(n,be(t,"Intersection"),Q("(set+) -> set"))??t;return n._fn("Intersection",i)},evaluate:MS,collection:{contains:LS,count:e=>m(e)?nl(e,n=>e.ops.slice(1).every(t=>t.contains(n))):0,iterator:DS}},Union:{wikidata:"Q185359",signature:"(collection+) -> set",description:"Return the union of two or more collections as a set.",canonical:(e,{engine:n})=>{if(e.length===0)return n.symbol("EmptySet");let t=e.map(r=>Nt(n,r)),i=po(n,be(t,"Union"),Q("(collection+) -> set"))??t;return n._fn("Union",i)},evaluate:wS,collection:{contains:(e,n)=>m(e)&&e.ops.some(t=>t.contains(n)),count:e=>OS(e,(n,t)=>t.every(i=>!i.contains(n))),isEmpty:e=>m(e)&&e.ops.every(n=>n.isEmptyCollection),isFinite:e=>m(e)&&e.ops.every(n=>n.isFiniteCollection),iterator:AS}},SetMinus:{wikidata:"Q18192442",signature:"(set, value*) -> set",description:"Return the set difference between the first set and subsequent values.",evaluate:kS,collection:{contains:(e,n)=>{if(!m(e))return!1;let[t,...i]=e.ops;return(t.contains(n)??!1)&&!i.some(r=>r.isSame(n))},count:e=>m(e)?nl(e,n=>{let[t,...i]=e.ops;return!i.some(r=>r.isSame(n))}):0,iterator:RS}},SymmetricDifference:{wikidata:"Q1147242",signature:"(set, set) -> set",description:"Return the symmetric difference of two sets (elements in either set but not both).",collection:{contains:(e,n)=>{if(!m(e))return!1;let[t,i]=e.ops,r=t.contains(n)??!1,o=i.contains(n)??!1;return r&&!o||!r&&o},count:e=>m(e)?nl(e,n=>{let[t,i]=e.ops,r=t.contains(n)??!1,o=i.contains(n)??!1;return r&&!o||!r&&o}):0,iterator:$S}}};function Rr(e,n,t=!0){return!e.isCollection||!n.isCollection?!1:!!e.baseDefinition?.collection?.subsetOf?.(e,n,t)}function wS(e,{engine:n}){let t=e.map(o=>o.isCollection?o:n.function("Set",[o]));if(t.reduce((o,s)=>o+(s.count??0),0)>dg)return n._fn("Union",t);let r=[];for(let o of t)for(let s of o.each())r.every(a=>!a.isSame(s))&&r.push(s);return r.length===0?n.symbol("EmptySet"):n._fn("Set",r)}function MS(e,{engine:n}){let i=[...m(e[0])?e[0].ops:[]];for(let r of e.slice(1))Ve(r)?i=i.filter(o=>[...r.each()].some(s=>o.isSame(s))):i=i.filter(o=>o.isSame(r));return i.length===0?n.symbol("EmptySet"):n._fn("Set",i)}function kS(e,{engine:n}){return n.symbol("EmptySet")}function CS(e){let n=cc();return{next:()=>{let{value:t,done:i}=n.next();if(i)return{value:void 0,done:!0};let[r,o]=t;return{value:e.engine.number({re:0,im:r/o}),done:!1}}}}function jf(e){let n=tg();return{next:()=>{let{value:t,done:i}=n.next();if(i)return{value:void 0,done:!0};let[r,o]=t;return{value:e.engine.number({re:r,im:o}),done:!1}}}}function*Ji(e,n){let t=n?.sign??"+-",i=n?.includeZero??!0,r=t==="+-"?cc():ng();i||r.next();for(let o of r)if(t==="+-")yield e.engine.number(o);else{let s=t==="-"?-1:1,[a,u]=o;yield e.engine.number([s*a,u])}}function*m1(e){for(let n of ig())yield e.engine.number(n)}function*el(e,n,t){let i=n;for(;;)yield e.number(i),i+=t}function*AS(e){if(!m(e))return;let n=[];for(let t of e.ops){for(let i of t.each())n.every(r=>!r.contains(i))&&(yield i);n.push(t)}}function*RS(e){if(!m(e))return;let[n,...t]=e.ops;for(let i of n.each())t.some(r=>r.isSame(i))||(yield i)}function*PS(e){if(!m(e))return;let[n,...t]=e.ops;for(let i of n.each())t.every(r=>!r.contains(i))&&(yield i)}function*DS(e){if(m(e))for(let n of e.ops[0].each())e.ops.slice(1).every(t=>t.contains(n))&&(yield n)}function*$S(e){if(!m(e))return;let[n,t]=e.ops;for(let i of n.each())(t.contains(i)??!1)||(yield i);for(let i of t.each())(n.contains(i)??!1)||(yield i)}function nl(e,n){if(!m(e))return 0;if(e.ops.some(i=>i.count===1/0))return 1/0;let t=0;for(let i of e.ops[0].each())n(i)&&(t+=1);return t}function OS(e,n){if(!m(e))return 0;if(e.ops.some(r=>r.count===1/0))return 1/0;let t=[],i=0;for(let r of e.ops){for(let o of r.each())n(o,t)&&(i+=1);t.push(r)}return i}function LS(e,n){return m(e)?e.ops.every(t=>t.contains(n)??!1):!1}function tl(e){let n=0,t=0;for(let i of e)n+=i,t++;return t===0?NaN:n/t}function g1(e,n){let t=e(0),i=0;for(let r of n)t=t.add(r),i++;return i===0?e(NaN):t.div(i)}function hi(e){let n=[...e].sort((i,r)=>i-r),t=Math.floor(n.length/2);return n.length%2===0?(n[t-1]+n[t])/2:n[t]}function Pr(e){let n=[...e].sort((i,r)=>i.cmp(r)),t=Math.floor(n.length/2);return n.length%2===0?n[t-1].add(n[t]).div(2):n[t]}function Ro(e){let n=0,t=0,i=0;for(let r of e)n+=r,t+=r*r,i++;return i===0?NaN:(t-n*n/i)/(i-1)}function Gf(e,n){let t=e(0),i=e(0),r=0;for(let o of n)t=t.add(o),i=i.add(o.mul(o)),r++;return r===0?e(NaN):i.sub(t.mul(t).div(r)).div(r-1)}function Po(e){let n=0,t=0,i=0;for(let r of e)n+=r,t+=r*r,i++;return i===0?NaN:(t-n*n/i)/i}function Zf(e,n){let t=e(0),i=e(0),r=0;for(let o of n)t=t.add(o),i=i.add(o.mul(o)),r++;return r===0?e(NaN):i.sub(t.mul(t).div(r)).div(r)}function h1(e){return Math.sqrt(Ro(e))}function b1(e){return Math.sqrt(Po(e))}function il(e){let n=0,t=0,i=0,r=0;for(let s of e){let a=s;if(!Number.isFinite(a))return NaN;n+=a,t+=a*a,i+=a*a*a*a,r++}if(r===0)return NaN;let o=(t-n*n/r)/(r-1);return(i-4*n*t/r+6*n*n*n/r/r-3*n*n*n*n/r/r/r)/(o*o)}function y1(e,n){let t=e(0),i=e(0),r=e(0),o=0;for(let a of n){let u=a;if(!u.isFinite())return e(NaN);t=t.add(u),i=i.add(u.mul(u)),r=r.add(u.mul(u).mul(u).mul(u)),o++}if(o===0)return e(NaN);let s=i.sub(t.mul(t).div(o)).div(o-1);return r.sub(t.mul(i).mul(4).div(o)).add(t.mul(t).mul(t).mul(6).div(o).div(o)).sub(t.mul(t).mul(t).mul(t).div(o).div(o).div(o)).div(s.mul(s))}function rl(e){let n=0,t=0,i=0,r=0;for(let a of e){let u=a;if(!Number.isFinite(u))return NaN;n+=u,t+=u*u,i+=u*u*u,r++}if(r===0)return NaN;let o=(t-n*n/r)/(r-1);return(i-t*n/r)/(r-1)/Math.pow(o,3/2)*Math.sqrt(r*1)}function x1(e,n){let t=e(0),i=e(0),r=e(0),o=0;for(let u of n){let l=u;if(!l.isFinite())return e(NaN);t=t.add(l),i=i.add(l.mul(l)),r=r.add(l.mul(l).mul(l)),o++}if(o===0)return e(NaN);let s=i.sub(t.mul(t).div(o)).div(o-1);return r.sub(i.mul(t).div(o)).div(o-1).div(s.pow(3/2)).mul(o).sqrt()}function ol(e){let n={};for(let r of e)n[r]=(n[r]??0)+1;let t=0,i=NaN;for(let r in n){let o=n[r];o>t&&(t=o,i=+r)}return i}function E1(e,n){let t={};for(let o of n)t[o.toString()]=(t[o.toString()]??0)+1;let i=0,r=e(NaN);for(let o in t){let s=t[o];s>i&&(i=s,r=e(o))}return r}function sl(e){let n=[...e].sort((s,a)=>s-a),t=Math.floor(n.length/2),i=hi(n.slice(0,t)),r=hi(n),o=hi(n.slice(t));return[i,r,o]}function v1(e){let n=[...e].sort((s,a)=>s.cmp(a)),t=Math.floor(n.length/2),i=Pr(n.slice(0,t)),r=Pr(n),o=Pr(n.slice(t));return[i,r,o]}function al(e){let n=[...e].sort((o,s)=>o-s),t=Math.floor(n.length/2),i=n.slice(0,t),r=n.slice(t+1);return hi(r)-hi(i)}function _1(e){let n=[...e].sort((o,s)=>o.cmp(s)),t=Math.floor(n.length/2),i=n.slice(0,t),r=n.slice(t+1);return Pr(r).sub(Pr(i))}var N1=[{Erf:{description:"Gauss error function",complexity:7500,signature:"(number) -> number",type:()=>"finite_real",evaluate:(e,{engine:n})=>{let t=e[0].re;if(Number.isFinite(t))return n.number(ai(t))}},Erfc:{description:"Complementary error function: 1 - Erf(x)",complexity:7500,signature:"(number) -> number",type:()=>"finite_real",evaluate:(e,{engine:n})=>{let t=e[0].re;if(Number.isFinite(t))return n.number(1-ai(t))}},ErfInv:{description:"Inverse of the error function",complexity:7500,signature:"(number) -> number",type:()=>"finite_real",evaluate:(e,{engine:n})=>{let t=e[0].re;if(Number.isFinite(t))return n.number(su(t))}}},{Mean:{complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",description:"Arithmetic mean of a collection of numbers.",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?g1(n.bignum.bind(n),Tt(i)):tl(St(i)))}},Median:{complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",description:"Median of a collection of numbers.",examples:["Mode([1, 2, 2, 3]) // Returns 2"],evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?Pr(Tt(i)):hi(St(i)))}},Variance:{description:"Sample variance of a collection of numbers.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?Gf(n.bignum.bind(n),Tt(i)):Ro(St(i)))}},PopulationVariance:{description:"Population variance of a collection of numbers.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?Zf(n.bignum.bind(n),Tt(i)):Po(St(i)))}},StandardDeviation:{complexity:1200,broadcastable:!1,description:"Sample Standard Deviation of a collection of numbers.",signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?Gf(n.bignum.bind(n),Tt(i)).sqrt():Math.sqrt(Ro(St(i))))}},PopulationStandardDeviation:{complexity:1200,broadcastable:!1,description:"Population Standard Deviation of a collection of numbers.",signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?Zf(n.bignum.bind(n),Tt(i)).sqrt():Math.sqrt(Po(St(i))))}},Kurtosis:{description:"Kurtosis of a collection of numbers.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?y1(n.bignum.bind(n),Tt(i)):il(St(i)))}},Skewness:{description:"Skewness of a collection of numbers.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?x1(n.bignum.bind(n),Tt(i)):rl(St(i)))}},Mode:{description:"Most frequently occurring value in a collection.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?E1(n.bignum.bind(n),Tt(i)):ol(St(i)))}},Quartiles:{description:"Lower quartile, median, and upper quartile of a collection.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> tuple<mid:number, lower:number, upper:number>",examples:["Quartiles([1, 2, 3, 4, 5]) // Returns (3, 2, 4)"],evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(a=>a.evaluate({numericApproximation:t})),[r,o,s]=(Je(n)?v1(Tt(i)):sl(St(i))).map(a=>n.number(a));return n.tuple(r,o,s)}},InterquartileRange:{description:"Interquartile range (Q3 - Q1) of a collection.",complexity:1200,broadcastable:!1,signature:"((collection|number)+) -> number",type:()=>"finite_real",evaluate:(e,{engine:n,numericApproximation:t})=>{let i=e.map(r=>r.evaluate({numericApproximation:t}));return n.number(Je(n)?_1(Tt(i)):al(St(i)))}},Histogram:{description:"Compute a histogram of the values in a collection. Returns a list of (bin start, count) tuples.",complexity:8200,signature:"(collection, integer | list<number>) -> list<tuple<number, integer>>",examples:["Histogram([1, 2, 2, 3], 3) // Returns [(1,1), (1.6667,2), (2.3333,1)]"],evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=Array.from(e.each()).map(u=>u.re).filter(Number.isFinite);if(i.length===0)return;let r=Math.min(...i),o=Math.max(...i),s;if(m(n,"List"))s=n.ops.map(u=>u.re);else{let u=ie(n);if(u===null||u<=0)return;let l=(o-r)/u;s=Array.from({length:u+1},(c,f)=>r+f*l)}let a=Array(s.length-1).fill(0);for(let u of i)for(let l=0;l<s.length-1;l++)if(u>=s[l]&&u<s[l+1]){a[l]++;break}return t.function("List",a.map((u,l)=>t._fn("Tuple",[t.number(s[l]),t.number(u)])))}},BinCounts:{description:"Count the number of elements falling into each bin.",complexity:8200,signature:"(collection, integer | list<number>) -> list<number>",examples:["BinCounts([1, 2, 2, 3], 3) // Returns [1, 2, 1]"],evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=Array.from(e.each()).map(u=>u.re).filter(Number.isFinite);if(i.length===0)return;let r=Math.min(...i),o=Math.max(...i),s;if(n.isCollection)s=[...n.each()].map(u=>u.re);else{let u=ie(n);if(u===null||u<=0)return;let l=(o-r)/u;s=Array.from({length:u+1},(c,f)=>r+f*l)}let a=Array(s.length-1).fill(0);for(let u of i)for(let l=0;l<s.length-1;l++)if(u>=s[l]&&u<s[l+1]){a[l]++;break}return t.function("List",a.map(u=>t.number(u)))}},SlidingWindow:{description:"Return overlapping sliding windows of fixed size over the collection.",complexity:8200,signature:"(collection, integer, integer?) -> list<list>",examples:["SlidingWindow([1, 2, 3, 4], 2) // Returns [[1,2], [2,3], [3,4]]"],evaluate:([e,n,t],{engine:i})=>{if(!e.isFiniteCollection)return;let r=ie(n),o=t?ie(t):1;if(r===null||r<=0||o===null||o<=0)return;let s=Array.from(e.each()),a=[];for(let u=0;u<=s.length-r;u+=o)a.push(i.function("List",s.slice(u,u+r)));return i.function("List",a)}}},{Sample:{description:"Return a random sample of k elements from the collection, without replacement.",complexity:8200,signature:"(collection, integer) -> list",evaluate:([e,n],{engine:t})=>{if(!e.isFiniteCollection)return;let i=ie(n);if(i===null||i<0)return;let r=Array.from(e.each());if(i>r.length)return;for(let s=r.length-1;s>0;s--){let a=Math.floor(Math.random()*(s+1));[r[s],r[a]]=[r[a],r[s]]}let o=r.slice(0,i);return t.function("List",o)}}}];function*S1(e){for(let n of e)n.isFiniteCollection?yield*n.each():yield n}function*St(e){for(let n of S1(e))yield n.re}function*Tt(e){for(let n of S1(e))yield n.bignumRe??n.engine.bignum(n.re)}var FS={Sin:[[1,"Sin"],[1,"Cos"],[-1,"Sin"],[-1,"Cos"]],Cos:[[1,"Cos"],[-1,"Sin"],[-1,"Cos"],[1,"Sin"]],Sec:[[1,"Sec"],[-1,"Csc"],[-1,"Sec"],[1,"Csc"]],Csc:[[1,"Csc"],[1,"Sec"],[-1,"Csc"],[-1,"Sec"]],Tan:[[1,"Tan"],[-1,"Cot"],[1,"Tan"],[-1,"Cot"]],Cot:[[1,"Cot"],[-1,"Tan"],[1,"Cot"],[-1,"Tan"]]},zi=["Sqrt",2],Do=["Sqrt",3],$o=["Sqrt",5],ul=["Sqrt",6],qS=[[[0,1],{Sin:0,Cos:1,Tan:0,Cot:"ComplexInfinity",Sec:1,Csc:"ComplexInfinity"}],[[1,12],{Sin:["Divide",["Subtract",ul,zi],4],Cos:["Divide",["Add",ul,zi],4],Tan:["Subtract",2,Do],Cot:["Add",2,Do],Sec:["Subtract",ul,zi],Csc:["Add",ul,zi]}],[[1,10],{Sin:["Divide",["Subtract",$o,1],4],Cos:["Divide",["Sqrt",["Add",10,["Multiply",2,$o]]],4],Tan:["Divide",["Sqrt",["Subtract",25,["Multiply",10,$o]]],5],Cot:["Sqrt",["Add",5,["Multiply",2,$o]]],Sec:["Divide",["Sqrt",["Subtract",50,["Multiply",10,$o]]],5],Csc:["Add",1,$o]}],[[1,8],{Sin:"$\\frac{\\sqrt{2-\\sqrt2}}{2}$",Cos:"$\\frac{\\sqrt {2+{\\sqrt {2}}}}{2}$",Tan:"$\\sqrt{2} - 1$",Cot:"$\\sqrt{2} + 1$",Sec:"$\\sqrt{ 4 - 2\\sqrt{2}}$",Csc:"$\\sqrt{ 4 + 2\\sqrt{2}}$"}],[[1,6],{Sin:"$\\frac{1}{2}$",Cos:"$\\frac{\\sqrt{3}}{2}$",Tan:"$\\frac{\\sqrt{3}}{3}$",Cot:"$\\sqrt{3}$",Sec:"$\\frac{2\\sqrt{3}}{3}$",Csc:2}],[[1,5],{Sin:"$\\frac{\\sqrt{10- 2\\sqrt{5}}} {4}$",Cos:"$\\frac{1+ \\sqrt{5}} {4}$",Tan:"$\\sqrt{5-2\\sqrt5}$",Cot:"$\\frac{\\sqrt{25+10\\sqrt5}} {5}$",Sec:"$\\sqrt{5} - 1$",Csc:"$\\frac{\\sqrt{50+10\\sqrt{5}}} {5}$"}],[[1,4],{Sin:["Divide",zi,2],Cos:["Divide",zi,2],Tan:1,Cot:1,Sec:zi,Csc:zi}],[[3,10],{Sin:"$\\frac{1+ \\sqrt5} {4}$",Cos:"$\\frac{\\sqrt{10- 2\\sqrt5}} {4}$",Tan:"$\\frac{\\sqrt{25+10\\sqrt5}} {5}$",Cot:"$\\sqrt{5-2\\sqrt5}$",Sec:"$\\frac{\\sqrt{50+10\\sqrt5}} {5}$",Csc:"$\\sqrt5-1$"}],[[1,3],{Sin:["Divide",Do,2],Cos:"Half",Tan:Do,Cot:["Divide",Do,3],Sec:2,Csc:["Divide",["Multiply",2,Do],3]}],[[3,8],{Sin:"$\\frac{ \\sqrt{2 + \\sqrt{2}} } {2}$",Cos:"$\\frac{ \\sqrt{2 - \\sqrt{2}} } {2}$",Tan:"$\\sqrt{2} + 1$",Cot:"$\\sqrt{2} - 1$",Sec:"$\\sqrt{ 4 + 2 \\sqrt{2} }$",Csc:"$\\sqrt{ 4 - 2 \\sqrt{2} }$"}],[[2,5],{Sin:"$\\frac{\\sqrt{10+ 2\\sqrt{5}}} {4}$",Cos:"$\\frac{\\sqrt{5}-1} {4}$",Tan:"$\\sqrt{5+2\\sqrt{5}}$",Cot:"$\\frac{\\sqrt{25-10\\sqrt{5}}} {5}$",Sec:"$1 + \\sqrt{5}$",Csc:"$\\frac{\\sqrt{50-10\\sqrt{5}}} {5}$"}],[[5,12],{Sin:"$\\frac{\\sqrt{6} + \\sqrt{2}} {4}$",Cos:"$\\frac{ \\sqrt{6} - \\sqrt{2}} {4}$",Tan:"$2+\\sqrt{3}$",Cot:"$2-\\sqrt{3}$",Sec:"$\\sqrt{6}+\\sqrt{2}$",Csc:"$\\sqrt{6} - \\sqrt{2}$"}],[[1,2],{Sin:1,Cos:0,Tan:"ComplexInfinity",Cot:0,Sec:"ComplexInfinity",Csc:1}]];function pt(e,n,t,i){let r=Xa(e)?.N();if(r!==void 0)return ve(r,n,t,i)}function mt(e){if(!e)return e;let n=e.engine,t=n.angularUnit;if(t==="rad")return e;let i=e.N().re;return Number.isNaN(i)?e:t==="deg"?n.number(i*(180/Math.PI)):t==="grad"?n.number(i*(200/Math.PI)):t==="turn"?n.number(i/(2*Math.PI)):e}function Ws(e,n){if(!n)return;let t=n.engine;switch(e){case"Arccos":return mt(ve(n,Math.acos,i=>i.acos(),i=>i.acos()));case"Arccot":return mt(ve(n,i=>Math.atan2(1,i),i=>K.atan2(t._BIGNUM_ONE,i),i=>i.inverse().atan()));case"Arccsc":return mt(ve(n,i=>Math.asin(1/i),i=>t._BIGNUM_ONE.div(i).asin(),i=>i.inverse().asin()));case"Arcosh":return mt(ve(n,Math.acosh,i=>i.acosh(),i=>i.acosh()));case"Arcoth":return mt(ve(n,i=>Math.log((1+i)/(i-1))/2,i=>t._BIGNUM_ONE.add(i).div(i.sub(t._BIGNUM_ONE)).log().div(2),i=>t.complex(1).add(i).div(i.sub(1)).log().div(2)));case"Arcsch":return mt(ve(n,i=>Math.log(1/i+Math.sqrt(1/(i*i)+1)),i=>t._BIGNUM_ONE.div(i.mul(i)).add(t._BIGNUM_ONE).sqrt().add(t._BIGNUM_ONE.div(i)).log(),i=>i.mul(i).inverse().add(1).sqrt().add(i.inverse()).log()));case"Arcsec":return mt(ve(n,i=>Math.acos(1/i),i=>t._BIGNUM_ONE.div(i).acos(),i=>i.inverse().acos()));case"Arcsin":return mt(ve(n,Math.asin,i=>i.asin(),i=>i.asin()));case"Arsech":return mt(ve(n,i=>Math.log((1+Math.sqrt(1-i*i))/i),i=>t._BIGNUM_ONE.sub(i.mul(i).add(t._BIGNUM_ONE).div(i)).log(),i=>t.complex(1).sub(i.mul(i)).add(1).div(i).log()));case"Arsinh":return mt(ve(n,Math.asinh,i=>i.asinh(),i=>i.asinh()));case"Arctan":return mt(ve(n,Math.atan,i=>i.atan(),i=>i.atan()));case"Artanh":return mt(ve(n,Math.atanh,i=>i.atanh(),i=>i.atanh()));case"Cos":return pt(n,Math.cos,i=>t.chop(i.cos()),i=>i.cos());case"Cosh":return pt(n,Math.cosh,i=>i.cosh(),i=>i.cosh());case"Cot":return pt(n,i=>1/Math.tan(i),i=>t._BIGNUM_ONE.div(i.tan()),i=>i.tan().inverse());case"Coth":return pt(n,i=>1/Math.tanh(i),i=>t._BIGNUM_ONE.div(i.tanh()),i=>i.tanh().inverse());case"Csc":return pt(n,i=>1/Math.sin(i),i=>t._BIGNUM_ONE.div(i.sin()),i=>i.sin().inverse());case"Csch":return pt(n,i=>1/Math.sinh(i),i=>t._BIGNUM_ONE.div(i.sinh()),i=>i.sinh().inverse());case"Sec":return pt(n,i=>1/Math.cos(i),i=>t._BIGNUM_ONE.div(i.cos()),i=>i.cos().inverse());case"Sech":return pt(n,i=>1/Math.cosh(i),i=>t._BIGNUM_ONE.div(i.cosh()),i=>i.cosh().inverse());case"Sin":return pt(n,Math.sin,i=>t.chop(i.sin()),i=>i.sin());case"Sinh":return pt(n,Math.sinh,i=>i.sinh(),i=>i.sinh());case"Tan":return pt(n,r=>{let o=Math.tan(r);return o>1e6||o<-1e6?t.ComplexInfinity:o},r=>{let o=r.tan();return o.greaterThan(1e6)||o.lessThan(-1e6)?t.ComplexInfinity:o},r=>r.tan());case"Tanh":return pt(n,Math.tanh,i=>i.tanh(),i=>i.tanh())}}function VS(e){return!!(e.startsWith("Ar")&&Hf(e))}function Hf(e){return{Sin:"Arcsin",Cos:"Arccos",Tan:"Arctan",Sec:"Arcsec",Csc:" Arccsc",Sinh:"Arsinh",Cosh:"Arcosh",Tanh:"Artanh",Sech:"Arsech",Csch:"Arcsch",Arcosh:"Cosh",Arccos:"Cos",Arccsc:"Csc",Arcsch:"Csch",Arcsec:"Sec",Arcsin:"Sin",Arsinh:"Sinh",Arctan:"Tan",Artanh:"Tanh"}[e]}function Ys(e,n){if(n.length!==1||!n[0].isValid)return;let t=n[0];if(m(t,"InverseFunction"))return t.op1.canonical;if(!_(t))return;let i=t.symbol,r=Hf(i);return r?e.symbol(r):void 0}function T1(e){return e!=="Cos"&&e!=="Sec"?-1:1}function BS(e,n,t,i){if(!t)return;let r=t.N().re;if(Number.isNaN(r))return;let o=Hf(n),s=e._cache("constructible-inverse-trigonometric-values-"+n,()=>{let u=[];for(let[[l,c],f]of i){let p=f[o];if(p===void 0)continue;let d=p.N().re;Number.isNaN(d)||u.push([[p,d],[l,c]])}return u},u=>{for(let[[l,c],[f,p]]of u)l.reset();return u}),a=0;r<0&&(a=T1(o)==-1?-1:1,r=-r,t=t.neg());for(let[[u,l],[c,f]]of s)if(e.chop(r-l)===0){let p=e.Pi.mul(c).div(f);return a==-1?p=p.neg():a==1&&(p=e.Pi.sub(p)),p.evaluate()}}function Wf(e,n){let[t,i]=JS(n);if(t!==void 0)return i!==void 0&&((e==="Sin"||e==="Tan")&&(i===0||i===2)||(e==="Cos"||e==="Cot")&&(i===1||i===3))?"zero":{Sin:["positive","positive","negative","negative"],Cos:["positive","negative","negative","positive"],Sec:["positive","negative","negative","positive"],Csc:["positive","positive","negative","negative"],Tan:["positive","negative","positive","negative"],Cot:["positive","negative","positive","negative"]}[e]?.[t]}function Yf(e){return["Sin","Cos","Tan","Csc","Sec","Cot"].includes(typeof e=="string"?e:e.operator)}function Qs(e,n){if(!n||!Yf(e))return;let t=n.engine;if(n=n.N(),n.im!==0)return;let i=n.re;if(Number.isNaN(i))return;let r=t._cache("constructible-trigonometric-values",()=>qS.map(([l,c])=>[l,Object.fromEntries(Object.entries(c).map(([f,p])=>[f,(t.parse(ti(p))??t.box(p)).simplify()]))]),l=>{for(let[c,f]of l)for(let p of Object.values(f))p.reset();return l});if(VS(e))return BS(t,e,n,r);let o=t.angularUnit;o!=="rad"&&(o==="deg"&&(i*=Math.PI/180),o==="grad"&&(i*=Math.PI/200),o==="turn"&&(i*=2*Math.PI));let s=T1(e)==-1?Math.sign(i):1;i=Math.abs(i%(2*Math.PI));let a=Math.floor(i*2/Math.PI);i=i%(Math.PI/2);let u;[u,e]=FS[e]?.[a]??[1,e];for(let[[l,c],f]of r){let p=f[e];if(p&&Math.abs(i-Math.PI*l/c)<=1e-12)return _(p,"ComplexInfinity")?p:s*u<0?p.neg():p}}function JS(e){if(!e.isValid||!E(e))return[void 0,void 0];if(e.im!==0)return[void 0,void 0];let n=e.re;if(isNaN(n))return[void 0,void 0];let t=(n%(2*Math.PI)+2*Math.PI)%(2*Math.PI);return Math.abs(t)<1e-12?[1,0]:Math.abs(t-Math.PI/2)<1e-12?[2,1]:Math.abs(t-Math.PI)<1e-12?[3,2]:Math.abs(t-3*Math.PI/2)<1e-12?[4,3]:[Math.floor(t/(Math.PI/2))+1,void 0]}var I1=[{Pi:{type:"finite_real",isConstant:!0,holdUntil:"N",wikidata:"Q167",value:e=>e.number(Je(e)?e._BIGNUM_PI:Math.PI)}},{Degrees:{description:"Convert an angle in degrees.",signature:"(real) -> real",type:()=>"finite_real",canonical:(e,{engine:n})=>{let t=n;if(t.angularUnit==="deg")return e[0];if(e.length!==1)return t._fn("Degrees",e);let i=e[0];if(!E(i)||!i.isValid)return t._fn("Degrees",e);let r=i.re;if(Number.isNaN(r))return i.mul(t.Pi).div(180);if(r=r%360,r<0&&(r+=360),Number.isInteger(r)){let o=ao([r,180]);return o[0]===0?t.Zero:o[0]===1&&o[1]===1?t.Pi:o[0]===1?t.Pi.div(o[1]):t.number(o).mul(t.Pi)}return t.number(r).div(180).mul(t.Pi)},evaluate:(e,n)=>n.engine.angularUnit==="deg"?e[0]:e[0].mul(n.engine.Pi.div(180)).evaluate(n)},DMS:{description:"Construct an angle from degrees, minutes, and seconds.",signature:"(real, real?, real?) -> real",type:()=>"finite_real",canonical:(e,{engine:n})=>{let t=e[0]?.re??NaN,i=e[1]?.re??0,r=e[2]?.re??0;if(Number.isNaN(t))return n._fn("DMS",e);let o=t+i/60+r/3600;return n.function("Degrees",[n.number(o)])},evaluate:(e,n)=>{let t=n.engine,i=e[0]?.re??NaN,r=e[1]?.re??0,o=e[2]?.re??0;if(Number.isNaN(i))return t._fn("DMS",e);let s=i+r/60+o/3600;return t.angularUnit==="deg"?t.number(s):t.number(s).div(180).mul(t.Pi).evaluate(n)}},Hypot:{description:"Hypotenuse length: sqrt(x^2 + y^2).",broadcastable:!0,signature:"(real, real) -> real",type:()=>"finite_real",sgn:()=>"non-negative",evaluate:([e,n],{engine:t})=>t.box(["Sqrt",["Add",["Square",e],["Square",n]]])},Sin:qe("Sin",5e3)},{Arctan:{description:"Inverse tangent.",wikidata:"Q2257242",complexity:5200,broadcastable:!0,signature:"(number) -> finite_real",type:e=>Ue(e),sgn:([e])=>Wf("Arctan",e),evaluate:([e],{numericApproximation:n})=>n?Ws("Arctan",e):Qs("Arctan",e)??Ws("Arctan",e)},Arctan2:{description:"Two-argument arctangent giving the angle of a vector.",wikidata:"Q776598",complexity:5200,broadcastable:!0,signature:"(y:number, x: number) -> real",type:e=>Ue(e),evaluate:([e,n],{engine:t,numericApproximation:i})=>i?gn(e,n,Math.atan2,(r,o)=>K.atan2(r,o)):e.isFinite===!1&&n.isFinite===!1?t.NaN:e.isSame(0)&&n.isSame(0)?t.Zero:n.isFinite===!1?n.isPositive?t.Zero:t.Pi:e.isFinite===!1?e.isPositive?t.Pi.div(2):t.Pi.div(-2):e.isSame(0)?n.isPositive?t.Zero:t.Pi:t.function("Arctan",[e.div(n)]).evaluate()},Cos:qe("Cos",5050),Tan:qe("Tan",5100)},{Arcosh:qe("Arcosh",6200),Arcsin:qe("Arcsin",5500),Arsinh:qe("Arsinh",6100),Artanh:qe("Artanh",6300),Cosh:qe("Cosh",6050),Cot:qe("Cot",5600),Csc:qe("Csc",5600,"Cosecant"),Sec:qe("Sec",5600,"Secant, inverse of cosine"),Sinh:qe("Sinh",6e3),Haversine:{description:"Haversine function.",wikidata:"Q2528380",broadcastable:!0,signature:"(real) -> number",type:()=>"finite_real",evaluate:([e],{engine:n})=>n.box(["Divide",["Subtract",1,["Cos",e]],2])},InverseHaversine:{description:"Inverse haversine function.",broadcastable:!0,signature:"(real) -> real",type:()=>"finite_real",evaluate:([e],{engine:n})=>n.box(["Multiply",2,["Arcsin",["Sqrt",e]]])}},{Csch:qe("Csch",6200,"Hyperbolic cosecant"),Sech:qe("Sech",6200,"Hyperbolic secant"),Tanh:qe("Tanh",6200,"Hyperbolic tangent")},{Arccos:qe("Arccos",5550),Arccot:qe("Arccot",5650),Arcoth:qe("Arcoth",6350),Arcsch:qe("Arcsch",6250),Arcsec:qe("Arcsec",5650),Arsech:qe("Arsech",6250),Arccsc:qe("Arccsc",5650),Coth:qe("Coth",6300),Sinc:{description:"Unnormalized sinc function: sin(x)/x with sinc(0)=1.",complexity:5100,broadcastable:!0,signature:"(number) -> real",type:()=>"finite_real",evaluate:([e],{engine:n})=>{if(E(e))return n.number(gu(e.re))}},FresnelS:{description:"Fresnel sine integral.",complexity:5200,broadcastable:!0,signature:"(number) -> real",type:()=>"finite_real",evaluate:([e],{engine:n})=>{if(E(e))return n.number(ui(e.re))}},FresnelC:{description:"Fresnel cosine integral.",complexity:5200,broadcastable:!0,signature:"(number) -> real",type:()=>"finite_real",evaluate:([e],{engine:n})=>{if(E(e))return n.number(li(e.re))}},InverseFunction:{description:"Inverse of a function.",lazy:!0,signature:"(function) -> function",canonical:(e,{engine:n})=>(e=Fn(n,e,1),Ys(n,e)??n._fn("InverseFunction",e)),evaluate:(e,{engine:n})=>Ys(n,e)}}],zS=new Set(["deg","rad","grad","turn","arcmin","arcsec"]);function US(e){if(!m(e,"Quantity"))return null;let n=e.op2;if(!_(n))return null;let t=n.symbol;if(!zS.has(t))return null;let i=Ou(t);if(i===null)return null;let r=e.op1.re;return Number.isFinite(r)?e.engine.number(r*i):null}function qe(e,n,t){return{complexity:n,description:t,broadcastable:!0,signature:"(number) -> number",type:i=>Ue(i),sgn:([i])=>Wf(e,i),canonical:(i,{engine:r})=>{if(i.length===1){let o=US(i[0]);if(o)return r._fn(e,[o])}return i=Fn(r,i,1),r._fn(e,i)},evaluate:([i],{numericApproximation:r})=>r?Ws(e,i):Qs(e,i)??Ws(e,i)}}function w1(e,n,t,i,r){for(let o=0;o<r;o++){let s=e*e-n*n+t;n=2*e*n+i,e=s;let a=e*e+n*n;if(a>4){let u=(o-Math.log2(Math.log2(a))+4)/r;return Math.max(0,Math.min(1,u))}}return 1}function Qf(e){if(!E(e))return;let n=e.re,t=e.im;if(!(!isFinite(n)||!isFinite(t)))return{cx:n,cy:t}}function M1(e){if(!E(e))return;let n=e.re;if(!(!isFinite(n)||n<=0))return Math.round(n)}var k1=[{Mandelbrot:{description:"Smooth escape-time value for the Mandelbrot set. Returns 1 for points inside the set, values in [0,1) for escaping points.",complexity:1200,signature:"(number, integer) -> real",evaluate:([e,n],{engine:t})=>{let i=Qf(e),r=M1(n);if(!(i===void 0||r===void 0))return t.number(w1(0,0,i.cx,i.cy,r))}},Julia:{description:"Smooth escape-time value for a Julia set with parameter c. Returns 1 for points inside the set, values in [0,1) for escaping points.",complexity:1200,signature:"(number, number, integer) -> real",evaluate:([e,n,t],{engine:i})=>{let r=Qf(e),o=Qf(n),s=M1(t);if(!(r===void 0||o===void 0||s===void 0))return i.number(w1(r.cx,r.cy,o.cx,o.cy,s))}}}];var C1=[{name:"To",latexTrigger:["\\to"],kind:"infix",precedence:270},{latexTrigger:["-",">"],kind:"infix",precedence:270,parse:(e,n,t)=>{if(e.options.strict!==!1)return null;let i=e.parseExpression({...t,minPrec:270});return i===null?null:["To",n,i]}}];function ll(e,n){if(n==="none")return e;if(n==="0...360"){let t=e%360;return(t<0?t+360:t)||0}if(n==="-180...180"){let t=e%360;return t>180&&(t-=360),t<-180&&(t+=360),t||0}return e}function jS(e){let n=e<0?-1:1,t=Math.abs(e),i=Math.floor(t),r=(t-i)*60,o=Math.floor(r),s=(r-o)*60,a=Math.round(s*1e3)/1e3,u=o,l=i;return a>=60&&(a=0,u++),u>=60&&(u=0,l++),{deg:n*l||0,min:n*u||0,sec:a===0?0:n*a}}function cl(e){let{deg:n,min:t,sec:i}=jS(e),r=`${n}\xB0`;if(Math.abs(i)>.001){let o=i%1===0?i.toString():i.toFixed(2);r+=`${Math.abs(t)}'${Math.abs(Number(o))}"`}else Math.abs(t)>0?r+=`${Math.abs(t)}'`:r+=`0'0"`;return r}function D1(e){if(!e.match("<{>"))return null;let n="",t=0;for(;!e.atEnd;){let i=e.peek;if(i==="<}>"&&t===0)return e.nextToken(),n;if(i==="<}>"){t--,e.nextToken();continue}if(i==="<{>"){t++,e.nextToken();continue}if(i==="<space>"){e.nextToken();continue}if(i==="\\cdot"){n+="*",e.nextToken();continue}if(i==="^"){n+="^",e.nextToken();continue}n+=i,e.nextToken()}return null}var GS=new Set(["d"]);function $1(e){if(!e||e.length===0||GS.has(e))return null;if(ks(e)!==null)return e;if(/[/*^]/.test(e))try{let n=As(e);if(n!==null&&Xf(n))return n}catch{return null}return null}function Xf(e){if(typeof e=="string")return ks(e)!==null;if(!Array.isArray(e))return!1;let n=e[0];return n==="Multiply"||n==="Divide"?e.slice(1).every(t=>Xf(t)):n==="Power"?Xf(e[1]):!1}var A1=e=>{let n=e.index,t=D1(e);if(t===null)return e.index=n,null;let i=$1(t);return i===null?(e.index=n,null):["__unit__",i]};function Dr(e){let n=J(e);if(n!==null)return n;if(typeof e=="number")return String(e);let t=A(e);if(!t)return"";if(t==="Divide"){let i=S(e,1),r=S(e,2);return`${Dr(i)}/${Dr(r)}`}if(t==="Multiply"){let i=[];if(Array.isArray(e))for(let r=1;r<e.length;r++)i.push(Dr(e[r]));return i.join("\\cdot ")}if(t==="Power"){let i=S(e,1),r=S(e,2),o=typeof r=="number"?String(r):J(r)??String(r);return`${Dr(i)}^{${o}}`}if(t==="Square"){let i=S(e,1);return`${Dr(i)}^{2}`}return""}function R1(e){let n=e.parseGroup();if(n===null)return null;let t=O1(e);return t===null?null:["Quantity",n,t]}function P1(e){return O1(e)}function O1(e){let n=e.index,t=D1(e);if(t===null)return e.index=n,null;let i=$1(t);return i===null?(e.index=n,null):i}var L1=[{latexTrigger:"\\mathrm",kind:"expression",parse:A1},{latexTrigger:"\\text",kind:"expression",parse:A1},{latexTrigger:"\\qty",parse:R1},{latexTrigger:"\\SI",parse:R1},{latexTrigger:"\\unit",parse:P1},{latexTrigger:"\\si",parse:P1},{name:"Quantity",serialize:(e,n)=>{let t=S(n,1),i=S(n,2);if(t===null||i===null)return"";let r=J(i),o=r==="deg"||r==="rad"||r==="arcmin"||r==="arcsec",s=e.options;if(o&&(s.dmsFormat||s.angleNormalization&&s.angleNormalization!=="none")){let l=Y(t);if(l===null){let f=e.serialize(t),p=Dr(i);return $([f,"\\,",`\\mathrm{${p}}`])}let c=l;return r==="rad"?c=c*180/Math.PI:r==="arcmin"?c=c/60:r==="arcsec"&&(c=c/3600),s.angleNormalization&&s.angleNormalization!=="none"&&(c=ll(c,s.angleNormalization)),s.dmsFormat?cl(c):`${c}\xB0`}let a=e.serialize(t),u=Dr(i);return $([a,"\\,",`\\mathrm{${u}}`])}}];function ZS(e){if(A(e)!=="Multiply")return[[],[]];let n=[],t=[];for(let i of O(e))if(A(i)==="Power"){let r=S(i,1),o=S(i,2);if(A(o)==="Negate"){let s=S(o,1);r&&s&&t.push(["Power",r,s])}else{let s=Y(o)??NaN;s===-1?r&&t.push(r):s<0?r&&t.push(["Power",r,-s]):n.push(i)}}else if(A(i)==="Rational"&&Ie(i)===2||A(i)==="Divide"){let r=S(i,1),o=S(i,2);Y(r)!==1&&n.push(r),Y(o)!==1&&t.push(o)}else{let r=eo(i);r!==null?(r[0]!==1&&n.push(r[0]),t.push(r[1])):n.push(i)}return[n,t]}function HS(e){let n=e.parseOptionalGroup(),t=e.parseGroup()??e.parseToken();return Te(t)?n!==null?["Root",Qr,me(n)]:["Sqrt",Qr]:n!==null?["Root",t,n]:["Sqrt",t]}function WS(e){if(typeof e=="number")return-e;if(typeof e=="string")return e.startsWith("-")?e.slice(1):e.startsWith("+")?"-"+e.slice(1):"-"+e;let n=e.num;return n.startsWith("-")?{num:n.slice(1)}:n.startsWith("+")?{num:"-"+n.slice(1)}:{num:"-"+n}}function Ks(e,n,t,i){return t==null?"\\sqrt{}":(i=i??2,n==="solidus"?e.wrapShort(t)+"^{1/"+e.serialize(i)+"}":n==="quotient"?e.wrapShort(t)+"^{\\frac{1}{"+e.serialize(i)+"}}":Y(i)===2?"\\sqrt{"+e.serialize(t)+"}":"\\sqrt["+e.serialize(i)+"]{"+e.serialize(t)+"}")}function YS(e,n){e.level-=1;let t=A(n),i="",r=S(n,1);if(t==="Negate")i="-"+e.wrap(r,Be+1);else if(t==="Subtract"){i=e.wrap(r,Be);let o=S(n,2);if(o!==null){let s=e.wrap(o,Be);s[0]==="-"?i+="+"+s.slice(1):s[0]==="+"?i+="-"+s.slice(1):i=i+"-"+s}}else if(t==="Add"){if(e.options.prettify&&Ie(n)===2&&e.options.invisiblePlus!=="+"){let[a,u]=[S(n,1),S(n,2)],[l,c]=[a,u],f=Y(l),p=eo(c);if((f===null||p===null)&&([l,c]=[u,a],f=Y(l),p=eo(c)),f!==null&&p!==null&&isFinite(f)&&Number.isInteger(f)&&f>=0&&f<=1e3&&isFinite(p[0])&&isFinite(p[1])&&p[0]>0&&p[0]<=100&&p[1]<=100)return i=no(e.options.invisiblePlus,e.serialize(l),e.serialize(c)),e.level+=1,i}if(e.options.prettify&&Ie(n)===2){let[a,u]=ea(r),[l,c]=ea(S(n,2));if(u<0&&c>0)return i=e.wrap(l,Be)+"-"+e.wrap(a,Be),e.level+=1,i}i=e.serialize(r);let o=Ie(n)+1,s=O(n);for(let a=2;a<o;a++)if(r=s[a-1],e.options.prettify){let[u,l]=ea(r),c=e.wrap(u,Be);l>0?c.startsWith("+")||c.startsWith("-")?i+=c:i+="+"+c:c.startsWith("+")?i+="-"+c.slice(1):c.startsWith("-")?i+="+"+c.slice(1):i+="-"+c}else{let u=e.wrap(r,Be);u[0]==="-"||u[0]==="+"?i+=u:i+="+"+u}}return e.level+=1,i}function U1(e,n){if(n===null)return"";e.level-=1;let t="";if(e.options.prettify===!0){let[u,l]=ZS(n);l.length>0&&(l.length===1&&l[0]===1?u.length===0?t="1":u.length===1?t=e.serialize(u[0]):t=U1(e,["Multiply",...u]):t=e.serialize(["Divide",u.length===1?u[0]:["Multiply",...u],l.length===1?l[0]:["Multiply",...l]]))}if(t)return e.level+=1,t;let i=!1,r=null,o=Ie(n)+1,s=O(n);e.options.prettify===!0&&s.length===2&&kt(s[1])&&!kt(s[0])&&(s=[s[1],s[0]]);let a=!1;for(let u=1;u<o;u++){if(r=s[u-1],r===null)continue;let l;if(kt(r)){l=e.serialize(r),l==="-1"&&!t?(t="",i=!i):(l[0]==="-"&&(l=l.slice(1),i=!i),t?t=no(e.options.multiply,t,l):t=l),a=!0;continue}if(A(r)==="Power"){let c=eo(S(r,2));if(c!=null){let[f,p]=c;if(f===1&&p!==null){t+=Ks(e,e.rootStyle(r,e.level),S(r,1),p),a=!1;continue}}}if(A(r)==="Power"&&!isNaN(Y(S(r,1))??NaN)){l=e.serialize(r),t?t=no(e.options.multiply,t,l):t=l,a=!0;continue}if(A(r)==="Negate"&&(r=S(r,1),i=!i),l=e.wrap(r,On),!t)t=l;else{let c=A(r);a&&(c==="Divide"||c==="Rational")?t=no(e.options.multiply,t,l):e.options.invisibleMultiply?t=no(e.options.invisibleMultiply,t,l):t=$([t,l])}a=!1}return e.level+=1,i?"-"+t:t}function fl(e){let n=e.parseGroup(),t=null;if(n===null?(n=e.parseToken(),t=e.parseToken()):t=e.parseGroup(),n=me(n),t=me(t),A(n)==="PartialDerivative"&&(A(t)==="PartialDerivative"||A(t)==="Multiply"&&A(S(t,1))==="PartialDerivative")){let o=S(n,3)??null,s=S(n,1);s==null&&(s=me(e.parseExpression()));let a=[];if(A(t)==="Multiply"){for(let u of O(t))if(A(u)==="PartialDerivative"){let l=S(u,2);l&&a.push(l)}}else{let u=S(t,2);u&&a.push(u)}return a.length>1&&(a=["List",...a]),["PartialDerivative",s,...a,o===null?1:o]}let i=J(n);if(i==="d"||i==="d_upright"||i==="differentialD"){let o=[],s=a=>{if(!a)return;let u=J(a);if(u&&u!=="d"&&u!=="d_upright"&&u!=="differentialD"){o.push(a);return}let l=A(a);if(l==="Sequence"||l==="Multiply"||l==="InvisibleOperator")for(let c of O(a))s(c)};if(s(t),o.length===0){let a=J(t);a&&a.length>1&&a[0]==="d"&&o.push(a.slice(1))}if(o.length>0)return["D",me(e.parseExpression()),...o]}return["Divide",n,t]}function F1(e,n){if(n===null)return"";let t=me(S(n,1)),i=me(S(n,2)),r=e.options.prettify?e.fractionStyle(n,e.level):"quotient";if(r==="inline-solidus"||r==="nice-solidus"){let u=e.wrapShort(t),l=e.wrapShort(i);return r==="inline-solidus"?`${u}/${l}`:`{}^{${u}}\\!\\!/\\!{}_{${l}}`}else{if(r==="reciprocal")return Y(t)===1?e.wrap(i)+"^{-1}":e.wrap(t)+e.wrap(i)+"^{-1}";if(r==="factor")return Y(i)===1?e.wrap(t):"\\frac{1}{"+e.serialize(i)+"}"+e.wrapString(e.serialize(t),e.groupStyle(n,1))}let o="\\frac";r==="block-quotient"?o="\\dfrac":r==="inline-quotient"&&(o="\\tfrac");let s=e.serialize(t),a=e.serialize(i);return`${o}{${s}}{${a}}`}function Kf(e,n){if(!n)return"";let t=A(n),i=me(S(n,1));if(t==="Sqrt")return Ks(e,e.rootStyle(n,e.level-1),i,2);let r=me(S(n,2));if(t==="Root")return Ks(e,e.rootStyle(n,e.level-1),i,r);if(e.options.prettify){let s=Y(r)??1;if(s===-1)return e.serialize(["Divide","1",i]);if(s<0)return e.serialize(["Divide","1",["Power",i,-s]]);if(A(r)==="Divide"||A(r)==="Rational"){let a=Y(S(r,1)),u=Y(S(r,2));if(a===1){let l=e.rootStyle(n,e.level);return Ks(e,l,i,S(r,2))}if(a===-1)return u===2?e.serialize(["Divide","1",["Sqrt",i]]):e.serialize(["Divide","1",["Root",i,S(r,2)??Qr]]);if(u===2)return`${e.serialize(["Sqrt",i])}^{${e.serialize(S(r,1))}}`}else if(A(r)==="Power"&&Y(S(r,2))===-1){let a=e.rootStyle(n,e.level);return Ks(e,a,i,S(r,1))}}let o=s=>s.startsWith("-")?e.wrapString(s,"normal"):s;if(A(i)==="Power"){let s=S(i,1),a=S(i,2),u=o(e.wrapShort(s)),l=e.wrapShort(a);return`
|
|
80
|
+
${u}^{${Pi("^",l,e.serialize(r))}}`}return Pi("^",o(e.wrapShort(i)),e.serialize(r))}function Xs(e,n){e.skipSpace();let t=e.index,i=e.parseNumber(),r=null,o=null;if(i!==null&&(e.match("'")||e.match("\\prime"))){r=Y(i),e.skipSpace();let u=e.index,l=e.parseNumber();l!==null&&(e.match('"')||e.match("\\doubleprime"))?o=Y(l):e.index=u}else return e.index=t,["Degrees",n];let s=Y(n);if(s!==null&&r!==null){let u=s+r/60;return o!==null&&(u+=o/3600),["Degrees",u]}let a=[["Quantity",n,"deg"]];return a.push(["Quantity",i,"arcmin"]),o!==null&&a.push(["Quantity",o,"arcsec"]),["Add",...a]}var j1=[{name:"CatalanConstant",symbolTrigger:"G"},{name:"GoldenRatio",latexTrigger:"\\varphi"},{name:"EulerGamma",latexTrigger:"\\gamma"},{name:"Degrees",latexTrigger:["\\degree"],kind:"postfix",precedence:880,parse:(e,n)=>Xs(e,n),serialize:(e,n)=>{let t=e.options,i=S(n,1);if(t.dmsFormat||t.angleNormalization&&t.angleNormalization!=="none"){let r=Y(i);if(r!==null){let o=r;return t.angleNormalization&&t.angleNormalization!=="none"&&(o=ll(o,t.angleNormalization)),t.dmsFormat?cl(o):`${o}\xB0`}}return $([e.serialize(i),"\\degree"])}},{latexTrigger:["\\degree"],kind:"postfix",precedence:880,parse:(e,n)=>Xs(e,n)},{latexTrigger:["^","<{>","\\circ","<}>"],kind:"postfix",parse:(e,n)=>Xs(e,n)},{latexTrigger:["^","\\circ"],kind:"postfix",parse:(e,n)=>Xs(e,n)},{latexTrigger:["\xB0"],kind:"postfix",precedence:880,parse:(e,n)=>Xs(e,n)},{latexTrigger:["\\ang"],parse:e=>{let n=e.parseGroup();return n===null?["Degrees"]:["Degrees",n]}},{name:"DMS",serialize:(e,n)=>{let t=Y(S(n,1)),i=Y(S(n,2)),r=Y(S(n,3));if(t!==null){let s=i??0,a=r??0,u=`${t}\xB0`;return(s!==0||a!==0)&&(u+=`${s}'`),a!==0&&(u+=`${a}"`),u}let o=[];for(let s of[1,2,3]){let a=S(n,s);a!==null&&o.push(e.serialize(a))}return`\\operatorname{DMS}(${o.join(", ")})`}},{latexTrigger:["\\infty"],parse:"PositiveInfinity"},{latexTrigger:["\\infin"],parse:"PositiveInfinity"},{name:"PositiveInfinity",serialize:e=>e.options.positiveInfinity},{name:"NegativeInfinity",serialize:e=>e.options.negativeInfinity},{name:"ComplexInfinity",latexTrigger:["\\tilde","\\infty"],serialize:"\\tilde\\infty"},{latexTrigger:["\\tilde","<{>","\\infty","<}>"],parse:"ComplexInfinity"},{name:"Pi",kind:"symbol",latexTrigger:["\\pi"]},{latexTrigger:["\u03C0"],parse:"Pi"},{name:"ExponentialE",latexTrigger:["\\exponentialE"],parse:"ExponentialE",serialize:"\\exponentialE"},{latexTrigger:"\\operatorname{e}",parse:"ExponentialE"},{latexTrigger:"\\mathrm{e}",parse:"ExponentialE"},{kind:"function",symbolTrigger:"exp",parse:e=>{let n=e.parseArguments("implicit");return n===null?"Exp":["Exp",...n]}},{latexTrigger:"\\exp",parse:e=>{let n=e.parseArguments("implicit");return n===null?"Exp":["Exp",...n]}},{name:"ImaginaryUnit",latexTrigger:["\\imaginaryI"]},{latexTrigger:"\\operatorname{i}",parse:"ImaginaryUnit"},{latexTrigger:"\\mathrm{i}",parse:"ImaginaryUnit"},{name:"Abs",kind:"matchfix",openTrigger:"|",closeTrigger:"|",parse:(e,n)=>Te(n)?null:["Abs",n]},{kind:"matchfix",openTrigger:["\\vert"],closeTrigger:["\\vert"],parse:(e,n)=>Te(n)?null:["Abs",n]},{symbolTrigger:"abs",kind:"function",parse:"Abs"},{name:"Add",latexTrigger:["+"],kind:"infix",associativity:"any",precedence:Be,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:Be});if(i===null)return null;if(A(i)==="Negate"){let r=S(i,1);if(kt(r))return ur("Add",n,WS(r))}return ur("Add",n,i)},serialize:YS},{kind:"prefix",latexTrigger:["+"],precedence:Be,parse:(e,n)=>e.parseExpression({...n,minPrec:400})},{name:"Ceil",kind:"matchfix",openTrigger:"\\lceil",closeTrigger:"\\rceil",parse:(e,n)=>Te(n)?null:["Ceil",n]},{kind:"matchfix",openTrigger:["\u2308"],closeTrigger:["\u2309"],parse:(e,n)=>Te(n)?null:["Ceil",n]},{symbolTrigger:"ceil",kind:"function",parse:"Ceil"},{name:"Chop",symbolTrigger:"chop",kind:"function",parse:"Chop"},{name:"Complex",precedence:Be-1,serialize:(e,n)=>{let t=e.serialize(S(n,1)),i=Y(S(n,2));if(i===0)return t;let r=i===1?"\\imaginaryI":i===-1?"-\\imaginaryI":$([e.serialize(S(n,2)),"\\imaginaryI"]);return Y(S(n,1))===0?r:i!==null&&i<0?$([t,r]):$([t,"+",r])}},{name:"Divide",latexTrigger:"\\frac",precedence:tt,parse:fl,serialize:F1},{latexTrigger:"\\dfrac",precedence:tt,parse:fl},{latexTrigger:"\\tfrac",precedence:tt,parse:fl},{latexTrigger:"\\cfrac",precedence:tt,parse:fl},{kind:"infix",latexTrigger:"\\over",associativity:"none",precedence:tt,parse:"Divide"},{latexTrigger:["\\/"],kind:"infix",associativity:"left",precedence:tt,parse:"Divide"},{latexTrigger:["/"],kind:"infix",associativity:"left",precedence:tt,parse:"Divide"},{latexTrigger:["\\div"],kind:"infix",associativity:"left",precedence:tt,parse:"Divide"},{name:"Exp",serialize:(e,n)=>{let t=S(n,1);return J(t)||Y(t)!==null?$(["\\exponentialE^{",e.serialize(t),"}"]):$(["\\exp",e.wrap(me(t))])}},{name:"Factorial",latexTrigger:["!"],kind:"postfix",precedence:Tc},{name:"Factorial2",latexTrigger:["!","!"],kind:"postfix",precedence:Tc},{name:"Floor",kind:"matchfix",openTrigger:"\\lfloor",closeTrigger:"\\rfloor",parse:(e,n)=>Te(n)?null:["Floor",n]},{kind:"matchfix",openTrigger:["\u230A"],closeTrigger:["\u230B"],parse:(e,n)=>Te(n)?null:["Floor",n]},{symbolTrigger:"floor",kind:"function",parse:"Floor"},{latexTrigger:["\\Gamma"],parse:"Gamma"},{latexTrigger:["\\zeta"],kind:"function",parse:"Zeta"},{latexTrigger:["\\Beta"],kind:"function",parse:"Beta"},{name:"LambertW",latexTrigger:["\\operatorname{W}"],kind:"function",serialize:(e,n)=>"\\operatorname{W}"+e.wrapArguments(n)},{name:"BesselJ",latexTrigger:["\\operatorname{J}"],kind:"function",serialize:(e,n)=>{let t=S(n,1),i=S(n,2);return t!==null&&i!==null?"\\operatorname{J}_{"+e.serialize(t)+"}"+e.wrapArguments(["BesselJ",i]):"\\operatorname{J}"+e.wrapArguments(n)}},{name:"BesselY",latexTrigger:["\\operatorname{Y}"],kind:"function",serialize:(e,n)=>{let t=S(n,1),i=S(n,2);return t!==null&&i!==null?"\\operatorname{Y}_{"+e.serialize(t)+"}"+e.wrapArguments(["BesselY",i]):"\\operatorname{Y}"+e.wrapArguments(n)}},{name:"BesselI",latexTrigger:["\\operatorname{I}"],kind:"function",serialize:(e,n)=>{let t=S(n,1),i=S(n,2);return t!==null&&i!==null?"\\operatorname{I}_{"+e.serialize(t)+"}"+e.wrapArguments(["BesselI",i]):"\\operatorname{I}"+e.wrapArguments(n)}},{name:"BesselK",latexTrigger:["\\operatorname{K}"],kind:"function",serialize:(e,n)=>{let t=S(n,1),i=S(n,2);return t!==null&&i!==null?"\\operatorname{K}_{"+e.serialize(t)+"}"+e.wrapArguments(["BesselK",i]):"\\operatorname{K}"+e.wrapArguments(n)}},{name:"AiryAi",latexTrigger:["\\operatorname{Ai}"],kind:"function",serialize:(e,n)=>"\\operatorname{Ai}"+e.wrapArguments(n)},{name:"AiryBi",latexTrigger:["\\operatorname{Bi}"],kind:"function",serialize:(e,n)=>"\\operatorname{Bi}"+e.wrapArguments(n)},{name:"GCD",latexTrigger:["\\gcd"],kind:"function"},{symbolTrigger:"gcd",kind:"function",parse:"GCD"},{symbolTrigger:"GCD",kind:"function",parse:"GCD"},{name:"Half",serialize:"\\frac12"},{name:"Lg",latexTrigger:["\\lg"],serialize:(e,n)=>"\\log_{10}"+e.wrapArguments(n),parse:e=>{let n=e.parseArguments("implicit");return n===null?"Lg":["Log",...n,10]}},{name:"Lb",latexTrigger:"\\lb",parse:e=>{let n=e.parseArguments("implicit");return n===null?"Log":["Log",n[0],2]}},{name:"Ln",latexTrigger:["\\ln"],parse:e=>z1("Ln",e),serialize:(e,n)=>"\\ln"+e.wrapArguments(n)},{name:"Log",latexTrigger:["\\log"],parse:e=>z1("Log",e),serialize:(e,n)=>{let[t,i]=O(n);return i?$(["\\log_{",e.serialize(i),"}",e.wrap(t)]):"\\log"+e.wrapArguments(n)}},{name:"LCM",latexTrigger:["\\lcm"],kind:"function"},{symbolTrigger:"lcm",kind:"function",parse:"LCM"},{symbolTrigger:"LCM",kind:"function",parse:"LCM"},{symbolTrigger:"max",kind:"function",parse:"Max",arguments:"implicit"},{symbolTrigger:"min",kind:"function",parse:"Min",arguments:"implicit"},{name:"Max",latexTrigger:"\\max",kind:"function",arguments:"implicit"},{name:"Min",latexTrigger:"\\min",kind:"function",arguments:"implicit"},{name:"Supremum",latexTrigger:"\\sup",kind:"function",arguments:"implicit"},{name:"Infimum",latexTrigger:"\\inf",kind:"function",arguments:"implicit"},{name:"Limit",latexTrigger:"\\lim",kind:"expression",parse:e=>{if(!e.match("_"))return null;let n=e.parseGroup();if(A(n)!=="To")return null;let t=e.parseArguments("implicit");return t?["Limit",["Function",t[0],S(n,1)],S(n,2)]:null},serialize:(e,n)=>{let t=S(n,1),i=S(t,2),r=S(n,2);return $(["\\lim_{",e.serialize(i),"\\to",e.serialize(r),"}",e.serialize(S(t,1))])}},{name:"MinusPlus",latexTrigger:["\\mp"],kind:"infix",associativity:"any",precedence:ni},{name:"Multiply",latexTrigger:["\\times"],kind:"infix",associativity:"any",precedence:On,serialize:U1},{latexTrigger:["\\cdot"],kind:"infix",associativity:"any",precedence:On,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:On+2});return i===null?null:ur("Multiply",n,i)}},{latexTrigger:["*"],kind:"infix",associativity:"any",precedence:On,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:On+2});return i===null?["Multiply",n,Qr]:ur("Multiply",n,i)}},{name:"Mod",latexTrigger:"\\bmod",kind:"infix",precedence:tt,serialize:(e,n)=>{if(Ie(n)!==2)return"";let t=e.serialize(S(n,1)),i=e.serialize(S(n,2));return $([t,"\\bmod",i])}},{latexTrigger:"\\mod",kind:"infix",precedence:tt,parse:"Mod"},{latexTrigger:"\\pmod",kind:"prefix",precedence:oe,parse:e=>{let n=e.parseGroup()??e.parseToken();return["Mod",me(n)]}},{name:"Congruent",serialize:(e,n)=>{let t=e.serialize(S(n,1)),i=e.serialize(S(n,2));if(S(n,3)===null)return $([t,"\\equiv",i]);let r=e.serialize(S(n,3));return $([t,"\\equiv",i,"\\pmod{",r,"}"])}},{name:"Negate",latexTrigger:["-"],kind:"prefix",precedence:os+1,parse:(e,n)=>{e.skipSpace();let t=e.parseExpression({...n,minPrec:os+3});return t===null?null:["Negate",t]}},{kind:"matchfix",openTrigger:"||",closeTrigger:"||",parse:(e,n)=>Te(n)?null:["Norm",n]},{name:"Norm",kind:"matchfix",openTrigger:["\\left","\\Vert"],closeTrigger:["\\right","\\Vert"],parse:(e,n)=>Te(n)?null:["Norm",n],serialize:(e,n)=>{let t=S(n,1);if(A(t)==="Matrix"){let i=S(t,1),r=S(t,2),o=r?["Matrix",i,{str:"\u2016\u2016"},r]:["Matrix",i,{str:"\u2016\u2016"}];return e.serialize(o)}return`\\left\\Vert ${e.serialize(t)}\\right\\Vert`}},{name:"PlusMinus",latexTrigger:["\\pm"],kind:"infix",associativity:"any",precedence:ni,serialize:(e,n)=>{let t=S(n,1);if(t===null)return"\\pm";if(Ie(n)===1)return $(["\\pm",e.serialize(t)]);let i=S(n,2);return $([e.serialize(t),"\\pm",e.serialize(i)])}},{latexTrigger:["\\pm"],kind:"prefix",precedence:ni,parse:(e,n)=>{let t=e.parseExpression({...n,minPrec:400});return["PlusMinus",0,me(t)]}},{latexTrigger:["\\plusmn"],kind:"infix",associativity:"any",precedence:ni,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:400});return["PlusMinus",n,me(i)]}},{latexTrigger:["\\plusmn"],kind:"prefix",precedence:ni,parse:(e,n)=>{let t=e.parseExpression({...n,minPrec:400});return["PlusMinus",me(t)]}},{name:"Power",latexTrigger:["^"],kind:"infix",serialize:Kf},{latexTrigger:"\\prod",precedence:On,name:"Product",parse:V1("Product","Multiply",On),serialize:J1("\\prod")},{latexTrigger:["*","*"],kind:"infix",associativity:"right",precedence:os,parse:(e,n,t)=>{if(e.options.strict!==!1)return null;let i=e.parseExpression({...t,minPrec:os});return i===null?null:["Power",n,i]}},{name:"Rational",precedence:tt,serialize:(e,n)=>n&&Ie(n)===1?"\\operatorname{Rational}"+e.wrapArguments(n):F1(e,n)},{name:"Reduce",serialize:(e,n)=>{let t=S(n,1);if(!t)return"";let i=S(n,2);return J(i)==="Add"?`\\sum ${e.serialize(t)}`:J(i)==="Multiply"?`\\prod ${e.serialize(t)}`:`\\operatorname{Reduce}\\left(${e.serialize(t)}, ${e.serialize(S(n,2))}\\right)`}},{name:"Root",serialize:Kf},{name:"Round",symbolTrigger:"round",kind:"function"},{name:"Square",precedence:720,serialize:(e,n)=>{let t=e.wrapShort(S(n,1));return(t.startsWith("-")?e.wrapString(t,"normal"):t)+"^2"}},{latexTrigger:["\\sum"],precedence:Be,name:"Sum",parse:V1("Sum","Add",On),serialize:J1("\\sum")},{name:"Heaviside",symbolTrigger:"Heaviside",kind:"function"},{name:"Sign",symbolTrigger:"sgn",kind:"function"},{name:"Sqrt",latexTrigger:["\\sqrt"],parse:HS,serialize:Kf},{name:"Subtract",latexTrigger:["-"],kind:"infix",associativity:"left",precedence:Be+2,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:Be+3});return i===null?null:["Subtract",n,i]},serialize:(e,n)=>{let t=e.wrap(S(n,1),Be+2),i=e.wrap(S(n,2),Be+3);return $([t,"-",i])}}];function QS(e,n){if(e!==null){if(J(e))return{index:J(e)??"Nothing",upper:n};if(A(e)==="GreaterEqual"){let t=J(S(e,1))??"Nothing",i=S(e,2)??1;return{index:t,lower:i,upper:n}}if(A(e)==="Equal"){let t=J(S(e,1))??"Nothing",i=S(e,2);if(A(i)==="Range"){let o=S(i,1)??1,s=S(i,2)??void 0;return{index:t,lower:o,upper:s}}return{index:t,lower:i??1,upper:n}}if(A(e)==="Element")return{index:J(S(e,1))??"Nothing",element:e}}}function XS(e){let n=A(e);return n?new Set(["Less","LessEqual","Greater","GreaterEqual","NotEqual","And","Or","Not"]).has(n):!1}function q1(e){if(e===null)return[];let n=Ri(e);if(n)return[...n];if(A(e)==="Tuple"){let t=O(e);return t?[...t]:[e]}return[e]}function KS(e,n){Te(e)&&(e=null),Te(n)&&(n=null);let t=q1(e),i=q1(n),r=[],o=0;for(;o<t.length;){let s=t[o],a=QS(s,i[o]);if(a){if(a.element&&o+1<t.length){let u=t[o+1];if(XS(u)&&A(u)!=="Element"&&A(u)!=="Equal"){let l=a.element;if(Array.isArray(l)&&l.length>=3){let c=[l[0],...l.slice(1),u];a.element=c}o++}}r.push(a)}o++}return r}function V1(e,n,t){return i=>{i.skipSpace(),i.pushSymbolTable();let r=null,o=null;for(;!(o&&r)&&(i.peek==="_"||i.peek==="^");)i.match("_")?o=i.parseGroup()??i.parseToken():i.match("^")&&(r=i.parseGroup()??i.parseToken()),i.skipSpace();if(!r&&!o){let l=i.parseExpression({minPrec:t});return i.popSymbolTable(),l?["Reduce",l,n]:null}let s=KS(o,r),a=i.parseExpression({minPrec:t});if(i.popSymbolTable(),a===null)return[e];let u=[];for(let l of s){if(l.element){u.push(l.element);continue}let c=l.lower,f=l.upper,p=l.index??"Nothing";f!=null?u.push(["Tuple",p,c??1,f]):c!=null?u.push(["Tuple",p,c]):u.push(["Tuple",p])}return[e,a,...u]}}var eT=new Set(["Tuple","Triple","Pair","Single","Limits","Element"]);function B1(e){return e==null||J(e)==="Nothing"?null:e}function nT(e){let n=[],t=O(e);if(t.length<=1)return n;for(let i of t.slice(1)){let r=A(i);if(r&&eT.has(r)){n.push(i);continue}break}return n}function tT(e,n){if(A(n)==="Element"){let l=e.serialize(S(n,1)),c=e.serialize(S(n,2));return{sub:`${l}\\in ${c}`}}let t=S(n,1);t!==null&&A(t)==="Hold"&&(t=S(t,1));let i=B1(S(n,2)),r=B1(S(n,3)),o={},s=t?J(t):null,a=s!==null&&s!=="Nothing",u=a&&t?e.serialize(t):void 0;return a&&i!==null&&u?o.sub=`${u}=${e.serialize(i)}`:a&&u?o.sub=u:i!==null&&(o.sub=e.serialize(i)),r!==null&&(o.sup=e.serialize(r)),o}function J1(e){return(n,t)=>{let i=S(t,1);if(!i)return e;let r=nT(t),o=e;if(r.length>0){let s=[],a=[];for(let u of r){let l=tT(n,u);l.sub&&s.push(l.sub),l.sup&&a.push(l.sup)}s.length>0&&(o=Pi("_",o,s.join(", "))),a.length>0&&(o=Pi("^",o,a.join(", ")))}return $([o,n.serialize(i)])}}function z1(e,n){let t=null;n.match("_")&&(t=n.parseGroup()??n.parseToken());let i=n.parseArguments("implicit");return i===null&&t===null?[e]:i===null?[e,t]:t===null?[e,...i]:t===10?["Log",i[0]]:t===2?["Lb",...i]:["Log",i[0],t]}function ea(e){let n=1,t=e;do{e=t;let i=A(e);if(i==="Negate")n*=-1,t=S(e,1);else if(i==="Multiply"){let[r,o]=ea(S(e,1));o<0&&(n*=-1,r===1?t=["Multiply",...O(e).slice(1)]:t=["Multiply",r,...O(e).slice(1)])}else if(i==="Divide"||i==="Rational"){let[r,o]=ea(S(e,1));o<0&&(n*=-1,t=[i,r,S(e,2)])}else{let r=Y(e);r!==null&&r<0&&(n*=-1,t=-r)}}while(t!==e);return[e,n]}function Oo(e){return n=>{let t=!1,i=[],r=[];for(;!t;){n.skipVisualSpace(),n.match("\\limits"),n.skipSpace();let a=null,u=null;for(;!(u!==null&&a!==null)&&(n.peek==="_"||n.peek==="^");)n.match("_")?u=n.parseGroup()??n.parseToken():n.match("^")&&(a=n.parseGroup()??n.parseToken()),n.skipSpace();Te(u)&&(u=null),Te(a)&&(a=null),i.push(u??"Nothing"),r.push(a??"Nothing"),n.skipVisualSpace(),t=!n.match(e)}let[o,s]=iT(n);if(o&&s.length===0){if(A(o)==="Add"||A(o)==="Subtract"){let a=[],u=[];for(let l of O(o))if(s)u.push(l);else{let c;[c,s]=bi(l),a.push(c??l)}if(s!==null&&u.length>0)return["Add",G1(e,["Add",...a],{indexes:s,subs:i,sups:r})??"Nothing",...u]}else if(A(o)==="Divide"){let a;[a,s]=bi(S(o,1)),a!==null&&s!==null&&(o=["Divide",a,S(o,2)])}}return G1(e,o,{indexes:s,subs:i,sups:r})}}function G1(e,n,t){if(!n)return null;if(t.sups.length===0&&t.subs.length===0)return[e,n,...t.indexes];let i=t.indexes.length===0?A(n)==="Function"?O(n).slice(1):[]:t.indexes,r=Math.max(t.sups.length,t.subs.length,i.length);if(i.length===0)for(let s=0;s<r;s++)i.push("Nothing");else if(i.length!==r)for(let s=i.length;s<r;s++)i.push(["Error","'missing'"]);if(t.subs.length!==r)for(let s=t.subs.length;s<r;s++)t.subs.push("Nothing");if(t.sups.length!==r)for(let s=t.sups.length;s<r;s++)t.sups.push("Nothing");let o=i.map((s,a)=>{let u=t.sups[a],l=t.subs[a];return l==="Nothing"&&u==="Nothing"?s:["Tuple",s,l,u]});return[e,n,...o]}function iT(e){let n=!1,t=e.parseExpression({minPrec:266,condition:()=>{let i=e.index;return n=W1(e),e.index=i,n}});return t!==null&&!n?bi(t):[t,rT(e)]}function rT(e){let n=[];for(;W1(e);){e.skipVisualSpace();let t=J(e.parseSymbol());if(t===null)return n;n.push(t)}return n}function bi(e){let n=A(e),t=S(e,1);if(!t)return[e,[]];if(n==="Sequence"&&Ie(e)===1)return bi(t);if(n==="Multiply"||n==="InvisibleOperator"){let i=O(e);if(i){let[r,o]=oT(i);return r.length>0?[[n,...r],o]:[null,o]}}else if(n==="Delimiter"){let[i,r]=bi(t);if(r)return i?[["Delimiter",["Sequence",i],...O(e).slice(1)],r]:[null,r]}else if(n==="Add"){let i=O(e);if(i.length>0){let[r,o]=bi(i[i.length-1]);if(o.length>0){if(r)return[["Add",...i.slice(0,-1),r],o];if(i.length>2)return[["Add",...i.slice(0,-1)],o];if(i.length>2)return[i[0],o]}}}else if(n==="Negate"){let[i,r]=bi(t);if(r.length>0)return[i?["Negate",i]:null,r]}else if(n==="Divide"){let[i,r]=bi(t);if(r.length>0)return[["Divide",i??1,S(e,2)],r]}else{let i=O(e);if(i.length===1){let[r,o]=bi(i[0]);if(o.length>0)return[[A(e),r],o]}}return[e,[]]}function Z1(e){return(n,t)=>{if(!S(t,1))return e;let i=S(t,1),r=[];A(i)==="BuiltInFunction"?(r=["x"],i=[S(i,1),"x"]):A(i)==="Function"?(r=O(i).slice(1),i=S(i,1)):J(i)?r=[]:r=[];let o=O(t).slice(1),s=[],a=o.map((l,c)=>{if(J(l)==="Nothing")return s.push(J(r[c])??"Nothing"),"";if(J(l))return s.push(J(l)??"Nothing"),"";let f=A(l);if(f==="Tuple"||f==="Pair"||f==="Limits"||f==="Range"){if(Ie(l)===3){let p=S(l,1);s.push(J(p)??"Nothing");let d=S(l,2),g=S(l,3);return J(d)==="Nothing"&&(d=null),J(g)==="Nothing"&&(g=null),d!==null&&g!==null?`_{${n.serialize(d)}}^{${n.serialize(g)}}`:d!==null?`_{${n.serialize(d)}}`:g!==null?`^{${n.serialize(g)}}`:""}return`_{${n.serialize(l)}}`}if(Ie(l)===2){if(J(S(l,1))){s.push(J(S(l,1))??"Nothing");let g=S(l,2);return J(g)==="Nothing"?"":`_{${n.serialize(g)}}`}s.push(J(r[c])??"Nothing");let p=S(l,1),d=S(l,2);if(J(p)==="Nothing"&&(p=null),J(d)==="Nothing"&&(d=null),p!==null&&d!==null)return`_{${n.serialize(p)}}^{${n.serialize(d)}}`;if(p!==null)return`_{${n.serialize(p)}}`;if(d!==null)return`^{${n.serialize(d)}}`}else s.push(J(r[c])??"Nothing")}),u=s.filter(l=>J(l)!=="Nothing").map(l=>`\\mathrm{d}${n.serialize(J(l)??"x")}`);return u.length>0&&(u=["\\,",...u]),a.length===0?`${e}\\,${n.serialize(i)}\\!${u.join(" ")}`:a.reverse().map(l=>`${e}${l}`).join("")+"\\!"+n.serialize(i)+u.join(" ")}}var H1=[{kind:"expression",name:"Integrate",latexTrigger:["\\int"],parse:Oo("Integrate"),serialize:Z1("\\int")},{kind:"expression",latexTrigger:["\\iint"],parse:Oo("Integrate")},{kind:"expression",latexTrigger:["\\iiint"],parse:Oo("Integrate")},{kind:"expression",name:"CircularIntegrate",latexTrigger:["\\oint"],parse:Oo("CircularIntegrate"),serialize:Z1("\\oint")},{kind:"expression",latexTrigger:["\\oiint"],parse:Oo("CircularIntegrate")},{kind:"expression",latexTrigger:["\\oiiint"],parse:Oo("CircularIntegrate")}];function W1(e){let n=e.index;for(;e.match("\\cdot")||e.skipVisualSpace(););return e.matchAll(["\\mathrm","<{>","d","<}>"])||e.matchAll(["\\operatorname","<{>","d","<}>"])||e.match("d")||e.match("\\differentialD")?!0:(e.index=n,!1)}function oT(e){let n=[...e],t=[];for(;n.length>0;){let i;if([n,i]=sT(n),!i)break;t.push(i)}return[n,t]}function sT(e){if(e.length<2)return[e,""];let n=e[e.length-2];if(n==="d"||n==="d_upright"){let t=J(e[e.length-1]);if(t)return[e.slice(0,-2),t]}return[e,""]}var Y1=[{name:"Real",kind:"function",latexTrigger:["\\Re"],arguments:"implicit"},{name:"Imaginary",kind:"function",latexTrigger:["\\Im"],arguments:"implicit"},{name:"Argument",kind:"function",latexTrigger:["\\arg"],arguments:"implicit"},{name:"Conjugate",latexTrigger:["^","\\star"],kind:"postfix"}];var Q1=[{name:"Matrix",serialize:(e,n)=>{let t=O(S(n,1));return ep(e,t,ye(S(n,2)),ye(S(n,3)))}},{name:"Vector",serialize:(e,n)=>{let t=O(n);return ep(e,t.map(i=>["List",i]),ye(S(n,2)),ye(S(n,3)))}},{kind:"environment",symbolTrigger:"pmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:"()"},{str:n}]:[t,i]}},{kind:"environment",symbolTrigger:"bmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:"[]"},{str:n}]:[t,i,{str:"[]"}]}},{kind:"environment",symbolTrigger:"Bmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:"{}"},{str:n}]:[t,i,{str:"{}"}]}},{kind:"environment",symbolTrigger:"vmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?["Determinant",[t,i,{str:n}]]:["Determinant",[t,i]]}},{kind:"environment",symbolTrigger:"Vmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?["Norm",[t,i,{str:n}]]:["Norm",[t,i]]}},{kind:"environment",symbolTrigger:"smallmatrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:"()"},{str:n}]:[t,i]}},{kind:"environment",symbolTrigger:"array",parse:e=>{let n=xi(e,!1),[t,i]=yi(e);return n?[t,i,{str:".."},{str:n}]:[t,i,{str:".."}]}},{kind:"environment",symbolTrigger:"matrix",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:".."},{str:n}]:[t,i,{str:".."}]}},{kind:"environment",symbolTrigger:"matrix*",parse:e=>{let n=xi(e),[t,i]=yi(e);return n?[t,i,{str:".."},{str:n}]:[t,i,{str:".."}]}},{name:"ConjugateTranspose",kind:"postfix",latexTrigger:["^","\\star"]},{kind:"postfix",latexTrigger:["^","\\H"],parse:"ConjugateTranspose"},{kind:"postfix",latexTrigger:["^","\\dagger"],parse:(e,n)=>["ConjugateTranspose",n]},{kind:"postfix",latexTrigger:["^","\\ast"],parse:(e,n)=>["ConjugateTranspose",n]},{kind:"postfix",latexTrigger:["^","\\top"],parse:(e,n)=>["Transpose",n]},{kind:"postfix",latexTrigger:["^","\\intercal"],parse:(e,n)=>["Transpose",n]},{name:"Transpose",kind:"postfix",latexTrigger:["^","T"]},{name:"PseudoInverse",kind:"postfix",latexTrigger:["^","+"]},{name:"Inverse",serialize:(e,n)=>e.serialize(S(n,1))+"^{-1}"},{name:"Trace",kind:"function",latexTrigger:"\\tr",arguments:"implicit",serialize:(e,n)=>Lo(e,n,"\\tr")},{symbolTrigger:"tr",kind:"function",parse:"Trace",arguments:"implicit"},{name:"Kernel",kind:"function",latexTrigger:"\\ker",arguments:"implicit",serialize:(e,n)=>Lo(e,n,"\\ker")},{symbolTrigger:"ker",kind:"function",parse:"Kernel",arguments:"implicit"},{name:"Dimension",kind:"function",latexTrigger:"\\dim",arguments:"implicit",serialize:(e,n)=>Lo(e,n,"\\dim")},{symbolTrigger:"dim",kind:"function",parse:"Dimension",arguments:"implicit"},{name:"Degree",kind:"function",latexTrigger:"\\deg",arguments:"implicit",serialize:(e,n)=>Lo(e,n,"\\deg")},{symbolTrigger:"deg",kind:"function",parse:"Degree",arguments:"implicit"},{name:"Hom",kind:"function",latexTrigger:"\\hom",arguments:"implicit",serialize:(e,n)=>Lo(e,n,"\\hom")},{symbolTrigger:"hom",kind:"function",parse:"Hom",arguments:"implicit"},{name:"Determinant",kind:"function",latexTrigger:"\\det",arguments:"implicit",serialize:(e,n)=>{let t=S(n,1);if(A(t)==="Matrix"){let i=O(S(t,1));return ep(e,i,"||",ye(S(t,2)))}return Lo(e,n,"\\det")}},{symbolTrigger:"det",kind:"function",parse:"Determinant",arguments:"implicit"},{name:"MatrixMultiply",serialize:(e,n)=>{let t=e.serialize(S(n,1)),i=e.serialize(S(n,2));return`${t} \\cdot ${i}`}}];function yi(e){let n=e.parseTabular();return n?["Matrix",["List",...n.map(t=>["List",...t])]]:["",null]}function xi(e,n=!0){let t=e.parseStringGroup(n)?.trim();if(!t)return"";let i="";for(let r of t)r==="c"&&(i+="="),r==="l"&&(i+="<"),r==="r"&&(i+=">"),r==="|"&&(i+="|"),r===":"&&(i+=":");return i}function Lo(e,n,t){if(O(n).length!==1)return`${t}${e.wrapArguments(n)}`;let r=S(n,1),o=e.serialize(r);return typeof r=="string"||typeof r=="number"?`${t} ${o}`:`${t}\\left(${o}\\right)`}function ep(e,n,t,i){t??="()";let[r,o]=["",""];typeof t=="string"&&t.length===2&&([r,o]=t);let s="";if(i)for(let c of i)c==="<"?s+="l":c===">"?s+="r":c==="="?s+="c":c==="|"?s+="|":c===":"&&(s+=":");let a=[];for(let c of n??[]){let f=[];for(let p of O(c))f.push(e.serialize(p));a.push(f.join(" & "))}let u=a.join(`\\\\
|
|
81
|
+
`),l=s.length>0?`[${s}]`:"";return r==="("&&o===")"?$(["\\begin{pmatrix}",l,u,"\\end{pmatrix}"]):r==="["&&o==="]"?$(["\\begin{bmatrix}",l,u,"\\end{bmatrix}"]):r==="{"&&o==="}"?$(["\\begin{Bmatrix}",l,u,"\\end{Bmatrix}"]):r==="|"&&o==="|"?$(["\\begin{vmatrix}",l,u,"\\end{vmatrix}"]):r==="\u2016"&&o==="\u2016"?$(["\\begin{Vmatrix}",l,u,"\\end{Vmatrix}"]):r==="{"&&o==="."?$(["\\begin{dcases}",l,u,"\\end{dcases}"]):r==="."&&o==="}"?$(["\\begin{rcases}",l,u,"\\end{rcases}"]):s||r!=="."||o!=="."?$(["\\left",oo[r]??r,"\\begin{array}",`{${s}}`,u,"\\end{array}","\\right",oo[o]??o]):$(["\\begin{matrix}",u,"\\end{matrix}"])}var K1=[{name:"True",kind:"symbol",latexTrigger:["\\top"]},{kind:"symbol",latexTrigger:"\\mathrm{True}",parse:"True"},{kind:"symbol",latexTrigger:"\\operatorname{True}",parse:"True"},{kind:"symbol",latexTrigger:"\\mathsf{T}",parse:"True"},{name:"False",kind:"symbol",latexTrigger:["\\bot"]},{kind:"symbol",latexTrigger:"\\operatorname{False}",parse:"False"},{kind:"symbol",latexTrigger:"\\mathsf{F}",parse:"False"},{name:"And",kind:"infix",latexTrigger:["\\land"],precedence:235},{kind:"infix",latexTrigger:["\\wedge"],parse:"And",precedence:235},{kind:"infix",latexTrigger:"\\&",parse:"And",precedence:235},{kind:"infix",latexTrigger:"\\operatorname{and}",parse:"And",precedence:235},{name:"Or",kind:"infix",latexTrigger:["\\lor"],precedence:230},{kind:"infix",latexTrigger:["\\vee"],parse:"Or",precedence:230},{kind:"infix",latexTrigger:"\\parallel",parse:"Or",precedence:230},{kind:"infix",latexTrigger:"\\operatorname{or}",parse:"Or",precedence:230},{name:"Xor",kind:"infix",latexTrigger:["\\veebar"],precedence:232},{name:"Not",kind:"prefix",latexTrigger:["\\lnot"],precedence:880},{kind:"prefix",latexTrigger:["\\neg"],parse:"Not",precedence:880},{name:"Nand",kind:"infix",latexTrigger:["\\barwedge"],precedence:232},{name:"Nor",kind:"infix",latexTrigger:["\u22BD"],precedence:232},{kind:"function",symbolTrigger:"and",parse:"And"},{kind:"function",symbolTrigger:"or",parse:"Or"},{kind:"function",symbolTrigger:"not",parse:"Not"},{name:"Implies",kind:"infix",precedence:220,associativity:"right",latexTrigger:["\\implies"],serialize:"\\implies"},{latexTrigger:["\\Rightarrow"],kind:"infix",precedence:220,associativity:"right",parse:"Implies"},{latexTrigger:["\\rightarrow"],kind:"infix",precedence:220,associativity:"right",parse:"Implies"},{latexTrigger:["\\Longrightarrow"],kind:"infix",precedence:220,associativity:"right",parse:"Implies"},{latexTrigger:["\\longrightarrow"],kind:"infix",precedence:220,associativity:"right",parse:"Implies"},{latexTrigger:["=",">"],kind:"infix",precedence:220,associativity:"right",parse:(e,n,t)=>{if(e.options.strict!==!1)return null;let i=e.parseExpression({...t,minPrec:220});return i===null?null:["Implies",n,i]}},{name:"Equivalent",latexTrigger:["\\iff"],kind:"infix",associativity:"right",precedence:219},{latexTrigger:["\\Leftrightarrow"],kind:"infix",associativity:"right",precedence:219,parse:"Equivalent"},{latexTrigger:["\\leftrightarrow"],kind:"infix",associativity:"right",precedence:219,parse:"Equivalent"},{latexTrigger:["\\Longleftrightarrow"],kind:"infix",associativity:"right",precedence:219,parse:"Equivalent"},{latexTrigger:["\\longleftrightarrow"],kind:"infix",associativity:"right",precedence:219,parse:"Equivalent"},{latexTrigger:["<","=",">"],kind:"infix",precedence:219,associativity:"right",parse:(e,n,t)=>{if(e.options.strict!==!1)return null;let i=e.parseExpression({...t,minPrec:219});return i===null?null:["Equivalent",n,i]}},{latexTrigger:["\\equiv"],kind:"infix",associativity:"right",precedence:219,parse:(e,n,t)=>{let i=e.parseExpression({...t,minPrec:219}),r=e.index,o=e.parseExpression({...t,minPrec:219});return o!==null&&A(o)==="Mod"?["Congruent",n,i,me(S(o,1))]:(e.index=r,["Equivalent",n,me(i)])}},{name:"Proves",kind:"infix",latexTrigger:["\\vdash"],precedence:220,associativity:"right",serialize:"\\vdash"},{name:"Entails",kind:"infix",latexTrigger:["\\vDash"],precedence:220,associativity:"right",serialize:"\\vDash"},{name:"Satisfies",kind:"infix",latexTrigger:["\\models"],precedence:220,associativity:"right",serialize:"\\models"},{name:"ForAll",kind:"prefix",latexTrigger:["\\forall"],precedence:200,serialize:na("\\forall"),parse:ta("ForAll")},{name:"Exists",kind:"prefix",latexTrigger:["\\exists"],precedence:200,serialize:na("\\exists"),parse:ta("Exists")},{name:"ExistsUnique",kind:"prefix",latexTrigger:["\\exists","!"],precedence:200,serialize:na("\\exists!"),parse:ta("ExistsUnique")},{name:"NotForAll",kind:"prefix",latexTrigger:["\\lnot","\\forall"],precedence:200,serialize:na("\\lnot\\forall"),parse:ta("NotForAll")},{name:"NotExists",kind:"prefix",latexTrigger:["\\lnot","\\exists"],precedence:200,serialize:na("\\lnot\\exists"),parse:ta("NotExists")},{name:"KroneckerDelta",kind:"prefix",latexTrigger:["\\delta","_"],precedence:200,serialize:(e,n)=>{let t=O(n);return t.length===0?"\\delta":t.every(i=>J(i))?`\\delta_{${t.map(i=>e.serialize(i)).join("")}}`:`\\delta_{${t.map(i=>e.serialize(i)).join(", ")}}`},parse:e=>{let n=e.parseGroup();if(n===null){let i=e.parseToken();return i?["KroneckerDelta",i]:null}let t=Ri(n);return t&&t.length<=2?["KroneckerDelta",...t]:A(n)==="InvisibleOperator"?["KroneckerDelta",...O(n)]:n!==null?["KroneckerDelta",n]:null}},{name:"Boole",kind:"matchfix",openTrigger:"[",closeTrigger:"]",parse:(e,n)=>{let t=A(n);return!t||!lr.some(i=>i.name===t)?null:["Boole",n]}},{kind:"matchfix",openTrigger:"\\llbracket",closeTrigger:"\\rrbracket",parse:(e,n)=>{let t=A(n);return!t||!lr.some(i=>i.name===t)?null:["Boole",n]}},{name:"Predicate",serialize:(e,n)=>{let t=O(n);if(t.length===0)return"";let i=t[0],r=typeof i=="string"?i:e.serialize(i);if(t.length===1)return r;let o=t.slice(1).map(s=>e.serialize(s));return`${r}(${o.join(", ")})`}}];function na(e){return(n,t)=>{let i=O(t);if(i.length===0)return e;if(i.length===1)return`${e} ${n.serialize(i[0])}`;let r=n.serialize(i[0]),o=n.serialize(i[1]);return`${e} ${r}, ${o}`}}function X1(e,n){return e.peek==="\\to"||e.peek==="\\rightarrow"||e.peek==="\\implies"||e.peek==="\\Rightarrow"||e.peek==="\\iff"||e.peek==="\\Leftrightarrow"||e.peek==="\\land"||e.peek==="\\wedge"||e.peek==="\\lor"||e.peek==="\\vee"||(n.condition?.(e)??!1)}function ta(e){return(n,t)=>{let i=n.index,r=n.options.quantifierScope!=="loose",o=n.parseSymbol(t);if(o){if(n.skipSpace(),n.match(",")||n.match("\\mid")||n.match(".")||n.match(":")||n.match("\\colon")){let l=r?{...t,condition:f=>X1(f,t)}:t;n.enterQuantifierScope();let c=n.parseExpression(l);return n.exitQuantifierScope(),[e,o,me(c)]}n.enterQuantifierScope();let u=n.parseEnclosure();if(n.exitQuantifierScope(),u)return[e,o,me(u)]}n.index=i;let s={...t,condition:u=>u.peek===":"||u.peek==="\\colon"||(t.condition?.(u)??!1)},a=n.parseExpression(s);if(a===null)return null;if(n.skipSpace(),n.matchAny([",","\\mid",":","\\colon"])){let u=r?{...t,condition:c=>X1(c,t)}:t;n.enterQuantifierScope();let l=n.parseExpression(u);return n.exitQuantifierScope(),[e,a,me(l)]}if(n.match("(")){n.enterQuantifierScope();let u=n.parseExpression(t);return n.exitQuantifierScope(),n.match(")")?[e,a,me(u)]:null}return null}}function Jn(e){return n=>{let t=n.parseGroup();return t===null?[e]:[e,t]}}var ey=[{name:"Overscript",latexTrigger:["\\overset"],kind:"infix",precedence:700},{name:"Underscript",latexTrigger:["\\underset"],kind:"infix",precedence:700},{name:"Increment",latexTrigger:["+","+"],kind:"postfix",precedence:880,parse:(e,n)=>J(n)===null?null:["Increment",n]},{name:"Decrement",latexTrigger:["-","-"],kind:"postfix",precedence:880,parse:(e,n)=>J(n)===null?null:["Decrement",n]},{name:"PreIncrement",latexTrigger:["+","+"],kind:"prefix",precedence:880,parse:(e,n)=>{let t=e.parseExpression(n);return J(t)===null?null:["PreIncrement",t]}},{name:"PreDecrement",latexTrigger:["-","-"],kind:"prefix",precedence:880,parse:(e,n)=>{let t=e.parseExpression(n);return J(t)===null?null:["PreDecrement",t]}},{name:"Ring",latexTrigger:["\\circ"],kind:"infix",precedence:265},{name:"StringJoin",latexTrigger:["\\lt","\\gt"],kind:"infix",precedence:780},{name:"Starstar",latexTrigger:["\\star","\\star"],kind:"infix",precedence:780},{name:"PartialDerivative",latexTrigger:["\\partial"],kind:"prefix",parse:e=>{let n=!1,t="Nothing",i="Nothing";for(;!n;)e.skipSpace(),e.match("_")?i=e.parseGroup()??e.parseToken():e.match("^")?t=e.parseGroup()??e.parseToken():n=!0;let r=Ri(i);if(r&&(i=["List",...r]),i===null||t===null)return null;let o=e.parseGroup()??"Nothing";if(!Te(o)){let s=e.parseArguments()??["Nothing"];o=[o,...s]}return["PartialDerivative",o,i,t]},serialize:(e,n)=>{let t="\\partial",i=S(n,1),r=S(n,2),o=S(n,3);return r!==null&&r!=="Nothing"&&(A(r)==="List"?t+="_{"+e.serialize(["Sequence",...O(r)])+"}":t+="_{"+e.serialize(r)+"}"),o!==null&&o!=="Nothing"&&(t+="^{"+e.serialize(o)+"}"),i!==null&&i!=="Nothing"&&(t+=e.serialize(i)),t},precedence:740},{name:"OverBar",latexTrigger:["\\overline"],parse:Jn("OverBar")},{name:"UnderBar",latexTrigger:["\\underline"],parse:Jn("UnderBar")},{name:"OverVector",latexTrigger:["\\vec"],parse:Jn("OverVector")},{name:"OverTilde",latexTrigger:["\\tilde"],parse:Jn("OverTilde")},{name:"OverHat",latexTrigger:["\\hat"],parse:Jn("OverHat")},{name:"OverRightArrow",latexTrigger:["\\overrightarrow"],parse:Jn("OverRightArrow")},{name:"OverLeftArrow",latexTrigger:["\\overleftarrow"],parse:Jn("OverLeftArrow")},{name:"OverRightDoubleArrow",latexTrigger:["\\Overrightarrow"],parse:Jn("OverRightDoubleArrow")},{name:"OverLeftHarpoon",latexTrigger:["\\overleftharpoon"],parse:Jn("OverLeftHarpoon")},{name:"OverRightHarpoon",latexTrigger:["\\overrightharpoon"],parse:Jn("OverRightHarpoon")},{name:"OverLeftRightArrow",latexTrigger:["\\overleftrightarrow"],parse:Jn("OverLeftRightArrow")},{name:"OverBrace",latexTrigger:["\\overbrace"],parse:Jn("OverBrace")},{name:"OverLineSegment",latexTrigger:["\\overlinesegment"],parse:Jn("OverLineSegment")},{name:"OverGroup",latexTrigger:["\\overgroup"],parse:Jn("OverGroup")},{latexTrigger:["\\textcolor"],parse:e=>{let n=e.index,t=e.parseStringGroup(),i=e.parseGroup();return t!==null?i!==null?["Annotated",i,{dict:{color:t}}]:"Nothing":(e.index=n,"Nothing")}},{latexTrigger:["\\colorbox"],parse:e=>{let n=e.index,t=e.parseStringGroup(),i=e.parseGroup();return t!==null?i!==null?["Annotated",i,{dict:{backgroundColor:t}}]:"Nothing":(e.index=n,"Nothing")}},{latexTrigger:["\\boxed"],parse:e=>{let n=e.parseGroup();return n!==null?["Annotated",n,{dict:{border:!0}}]:"Nothing"}},{latexTrigger:["\\displaystyle"],parse:()=>"Nothing"},{latexTrigger:["\\textstyle"],parse:()=>"Nothing"},{latexTrigger:["\\scriptstyle"],parse:()=>"Nothing"},{latexTrigger:["\\scriptscriptstyle"],parse:()=>"Nothing"},{latexTrigger:["\\color"],parse:e=>(e.parseGroup(),"Nothing")},{latexTrigger:["\\tiny"],parse:()=>"Nothing"},{latexTrigger:["\\scriptsize"],parse:()=>"Nothing"},{latexTrigger:["\\footnotesize"],parse:()=>"Nothing"},{latexTrigger:["\\small"],parse:()=>"Nothing"},{latexTrigger:["\\normalsize"],parse:()=>"Nothing"},{latexTrigger:["\\large"],parse:()=>"Nothing"},{latexTrigger:["\\Large"],parse:()=>"Nothing"},{latexTrigger:["\\LARGE"],parse:()=>"Nothing"},{latexTrigger:["\\huge"],parse:()=>"Nothing"},{latexTrigger:["\\Huge"],parse:()=>"Nothing"},{name:"Annotated",serialize:(e,n)=>{let t=e.serialize(S(n,1)),i=vc(S(n,2));if(i==null)return t;i.dict.mathStyle==="normal"?t=$(["{\\displaystyle",t,"}"]):i.dict.mathStyle==="compact"&&(t=$(["{\\textstyle",t,"}"]));let r=i.dict.size;return r!==null&&r>=1&&r<=10&&(t=$(["{",{1:"\\tiny",2:"\\scriptsize",3:"\\footnotesize",4:"\\small",5:"\\normalsize",6:"\\large",7:"\\Large",8:"\\LARGE",9:"\\huge",10:"\\Huge"}[r],t,"}"])),i.dict.fontFamily==="monospace"?t=$(["\\texttt{",t,"}"]):i.dict.fontFamily==="sans-serif"&&(t=$(["\\textsf{",t,"}"])),i.dict.fontWeight==="bold"&&(t=$(["\\textbf{",t,"}"])),i.dict.fontStyle==="italic"?t=$(["\\textit{",t,"}"]):i.dict.fontStyle==="normal"&&(t=$(["\\textup{",t,"}"])),i.dict.color&&(t=$(["\\textcolor{",i.dict.color,"}{",t,"}"])),i.dict.backgroundColor&&(t=$(["\\colorbox{",i.dict.backgroundColor,"}{",t,"}"])),i.dict.border===!0&&(t=$(["\\boxed{",t,"}"])),t}},{latexTrigger:["\\!"],parse:()=>["HorizontalSpacing",-3]},{latexTrigger:["\\ "],parse:()=>["HorizontalSpacing",6]},{latexTrigger:["\\:"],parse:()=>["HorizontalSpacing",4]},{latexTrigger:["\\enskip"],parse:()=>["HorizontalSpacing",9]},{latexTrigger:["\\quad"],parse:()=>["HorizontalSpacing",18]},{latexTrigger:["\\qquad"],parse:()=>["HorizontalSpacing",36]},{latexTrigger:["\\,"],parse:()=>["HorizontalSpacing",3]},{latexTrigger:["\\;"],parse:()=>["HorizontalSpacing",5]},{latexTrigger:["\\enspace"],parse:()=>["HorizontalSpacing",9]},{latexTrigger:["\\phantom"],parse:e=>(e.parseGroup(),"Nothing")},{latexTrigger:["\\vphantom"],parse:e=>(e.parseGroup(),"Nothing")},{latexTrigger:["\\hphantom"],parse:e=>(e.parseGroup(),"Nothing")},{latexTrigger:["\\placeholder"],parse:e=>(e.parseOptionalGroup(),e.parseGroup()??"Nothing")},{latexTrigger:["\\smash"],parse:e=>(e.parseGroup(),"Nothing")},{latexTrigger:["\\strut"],parse:e=>"Nothing"},{latexTrigger:["\\mathstrut"],parse:e=>"Nothing"},{name:"HorizontalSpacing",serialize:(e,n)=>{if(S(n,2)!==null)return e.serialize(S(n,1));let t=Y(S(n,1));return t===null?"":{"-3":"\\!",6:"\\ ",3:"\\,",4:"\\:",5:"\\;",9:"\\enspace",18:"\\quad",36:"\\qquad"}[t]??""}}];function Ut(e,n,t){if(Te(e))return null;let i,r=A(e);if(r==="Delimiter"){let l=ye(S(e,2));if(l!==","&&l!=="(,)"&&l!=="[,]")return null;let c=S(e,1);A(c)==="Sequence"?i=[...O(c)]:i=c?[c]:[]}else if(r==="Sequence")i=[...O(e)];else return null;if(i.length!==2)return null;let[o,s]=i;return["Interval",n?["Open",o]:o,t?["Open",s]:s]}var ty=[{name:"AlgebraicNumbers",latexTrigger:"\\overline\\Q"},{latexTrigger:"\\bar\\Q",parse:"AlgebraicNumbers"},{name:"ComplexNumbers",latexTrigger:["\\C"]},{latexTrigger:"\\mathbb{C}",parse:"ComplexNumbers"},{name:"ImaginaryNumbers",latexTrigger:["\\imaginaryI","\\R"]},{name:"EmptySet",latexTrigger:["\\emptyset"]},{latexTrigger:["\\varnothing"],parse:"EmptySet"},{name:"Integers",latexTrigger:["\\Z"]},{latexTrigger:"\\mathbb{Z}",parse:"Integers"},{name:"RationalNumbers",latexTrigger:["\\Q"]},{latexTrigger:"\\mathbb{Q}",parse:"RationalNumbers"},{name:"RealNumbers",latexTrigger:["\\R"]},{latexTrigger:"\\mathbb{R}",parse:"RealNumbers"},{name:"TranscendentalNumbers",latexTrigger:"\\R-\\bar\\Q"},{latexTrigger:"\\R\\backslash\\bar\\Q",parse:"TranscendentalNumbers"},{name:"NegativeNumbers",latexTrigger:"\\R_{<0}"},{latexTrigger:"\\R^-",parse:"NegativeNumbers"},{latexTrigger:"\\R^{-}",parse:"NegativeNumbers"},{latexTrigger:"\\R^-",parse:"NegativeNumbers"},{latexTrigger:"\\R_-",parse:"NegativeNumbers"},{latexTrigger:"\\R_{-}",parse:"NegativeNumbers"},{latexTrigger:"\\R^{\\lt}",parse:"NegativeNumbers"},{latexTrigger:"\\R^{<}",parse:"NegativeNumbers"},{latexTrigger:"\\R^{\\lt0}",parse:"NegativeNumbers"},{latexTrigger:"\\R^{<0}",parse:"NegativeNumbers"},{name:"NonPositiveNumbers",latexTrigger:"\\R_{\\le0}"},{latexTrigger:"\\R^{\\leq0}",parse:"NonPositiveNumbers"},{latexTrigger:"\\R^{-0}",parse:"NonPositiveNumbers"},{latexTrigger:"\\R^{\\leq}",parse:"NonPositiveNumbers"},{latexTrigger:"\\R^{0-}",parse:"NonPositiveNumbers"},{name:"PositiveNumbers",latexTrigger:"\\R_{>0}"},{latexTrigger:"\\R^+",parse:"PositiveNumbers"},{latexTrigger:"\\R^{+}",parse:"PositiveNumbers"},{latexTrigger:"\\R_+",parse:"PositiveNumbers"},{latexTrigger:"\\R_{+}",parse:"PositiveNumbers"},{latexTrigger:"\\R^{\\gt}",parse:"PositiveNumbers"},{latexTrigger:"\\R^{\\gt 0}",parse:"PositiveNumbers"},{latexTrigger:"\\R^{>}",parse:"PositiveNumbers"},{latexTrigger:"\\R^{>0}",parse:"PositiveNumbers"},{name:"NonNegativeNumbers",latexTrigger:"\\R_{\\geq0}"},{latexTrigger:"\\R^{0+}",parse:"NonNegativeNumbers"},{latexTrigger:"\\R^{\\geq}",parse:"NonNegativeNumbers"},{name:"ExtendedRealNumbers",latexTrigger:"\\overline\\R"},{latexTrigger:"\\bar\\R",parse:"ExtendedRealNumbers"},{name:"NegativeIntegers",latexTrigger:"\\Z_{<0}"},{latexTrigger:"\\Z_{\\lt0}",parse:"NegativeIntegers"},{latexTrigger:"\\Z^-",parse:"NegativeIntegers"},{latexTrigger:"\\Z^{-}",parse:"NegativeIntegers"},{latexTrigger:"\\Z_-",parse:"NegativeIntegers"},{latexTrigger:"\\Z_{-}",parse:"NegativeIntegers"},{latexTrigger:"\\Z^{\\lt}",parse:"NegativeIntegers"},{name:"NonPositiveIntegers",latexTrigger:"\\Z_{\\le0}"},{latexTrigger:"\\Z_{\\leq0}",parse:"NonPositiveIntegers"},{latexTrigger:"\\Z_{<0}",parse:"NonPositiveIntegers"},{name:"PositiveIntegers",latexTrigger:"\\N^*"},{latexTrigger:"\\Z_{>0}",parse:"PositiveIntegers"},{latexTrigger:"\\Z_{\\gt0}",parse:"PositiveIntegers"},{latexTrigger:"\\Z^{+}",parse:"PositiveIntegers"},{latexTrigger:"\\Z_+",parse:"PositiveIntegers"},{latexTrigger:"\\Z_{+}",parse:"PositiveIntegers"},{latexTrigger:"\\Z^{\\gt}",parse:"PositiveIntegers"},{latexTrigger:"\\Z^{\\gt0}",parse:"PositiveIntegers"},{latexTrigger:"\\N^+",parse:"PositiveIntegers"},{latexTrigger:"\\N^{+}",parse:"PositiveIntegers"},{latexTrigger:"\\N^*",parse:"PositiveIntegers"},{latexTrigger:"\\N^{*}",parse:"PositiveIntegers"},{latexTrigger:"\\N^\\star",parse:"PositiveIntegers"},{latexTrigger:"\\N^{\\star}",parse:"PositiveIntegers"},{latexTrigger:"\\N_1",parse:"PositiveIntegers"},{latexTrigger:"\\N_{1}",parse:"PositiveIntegers"},{name:"NonNegativeIntegers",latexTrigger:["\\N"]},{latexTrigger:"\\Z^{+0}",parse:"NonNegativeIntegers"},{latexTrigger:"\\Z^{\\geq}",parse:"NonNegativeIntegers"},{latexTrigger:"\\Z^{\\geq0}",parse:"NonNegativeIntegers"},{latexTrigger:"\\Z^{0+}",parse:"NonNegativeIntegers"},{latexTrigger:"\\mathbb{N}",parse:"NonNegativeIntegers"},{latexTrigger:"\\N_0",parse:"NonNegativeIntegers"},{latexTrigger:"\\N_{0}",parse:"NonNegativeIntegers"},{name:"ExtendedIntegers",latexTrigger:"\\overline\\Z"},{latexTrigger:"\\bar\\Z",parse:"ExtendedIntegers"},{name:"ExtendedRationalNumbers",latexTrigger:"\\overline\\Q"},{latexTrigger:"\\bar\\Q",parse:"ExtendedRationalNumbers"},{name:"ExtendedComplexNumbers",latexTrigger:"\\overline\\C"},{latexTrigger:"\\bar\\C",parse:"ExtendedComplexNumbers"},{latexTrigger:["^","\\complement"],kind:"postfix",parse:(e,n)=>["Complement",n]},{name:"Complement",latexTrigger:["^","<{>","\\complement","<}>"],kind:"postfix"},{name:"Intersection",latexTrigger:["\\cap"],kind:"infix",precedence:350},{name:"Interval",serialize:ny},{kind:"matchfix",openTrigger:["["],closeTrigger:[")"],parse:(e,n)=>Ut(n,!1,!0)},{kind:"matchfix",openTrigger:["\\lbrack"],closeTrigger:["\\rparen"],parse:(e,n)=>Ut(n,!1,!0)},{kind:"matchfix",openTrigger:["\\lbrack"],closeTrigger:[")"],parse:(e,n)=>Ut(n,!1,!0)},{kind:"matchfix",openTrigger:["["],closeTrigger:["\\rparen"],parse:(e,n)=>Ut(n,!1,!0)},{kind:"matchfix",openTrigger:["("],closeTrigger:["]"],parse:(e,n)=>Ut(n,!0,!1)},{kind:"matchfix",openTrigger:["\\lparen"],closeTrigger:["\\rbrack"],parse:(e,n)=>Ut(n,!0,!1)},{kind:"matchfix",openTrigger:["\\lparen"],closeTrigger:["]"],parse:(e,n)=>Ut(n,!0,!1)},{kind:"matchfix",openTrigger:["("],closeTrigger:["\\rbrack"],parse:(e,n)=>Ut(n,!0,!1)},{kind:"matchfix",openTrigger:["]"],closeTrigger:["["],parse:(e,n)=>Ut(n,!0,!0)},{kind:"matchfix",openTrigger:["\\rbrack"],closeTrigger:["\\lbrack"],parse:(e,n)=>Ut(n,!0,!0)},{name:"Multiple",serialize:ny},{name:"Union",latexTrigger:["\\cup"],kind:"infix",precedence:350},{name:"Set",kind:"matchfix",openTrigger:"{",closeTrigger:"}",parse:(e,n)=>Te(n)?"EmptySet":(A(n)=="Delimiter"&&ye(S(n,2))===","&&(n=S(n,1)),A(n)!=="Sequence"?["Set",n]:["Set",...O(n)]),serialize:(e,n)=>$(["\\lbrace",O(n).map(t=>e.serialize(t)).join(", "),"\\rbrace"])},{name:"SetMinus",latexTrigger:["\\setminus"],kind:"infix",precedence:650},{name:"SymmetricDifference",latexTrigger:["\\triangle"],kind:"infix",precedence:oe},{latexTrigger:["\\ni"],kind:"infix",associativity:"none",precedence:160,parse:(e,n,t)=>{let i=e.parseExpression(t);return i===null?null:["Element",i,n]}},{name:"Element",latexTrigger:["\\in"],kind:"infix",precedence:240},{name:"NotElement",latexTrigger:["\\notin"],kind:"infix",precedence:240},{name:"NotSubset",latexTrigger:["\\nsubset"],kind:"infix",associativity:"none",precedence:240},{name:"NotSuperset",latexTrigger:["\\nsupset"],kind:"infix",associativity:"none",precedence:240},{name:"NotSubsetNotEqual",latexTrigger:["\\nsubseteq"],kind:"infix",associativity:"none",precedence:240},{name:"NotSupersetNotEqual",latexTrigger:["\\nsupseteq"],kind:"infix",associativity:"none",precedence:240},{name:"SquareSubset",latexTrigger:["\\sqsubset"],kind:"infix",associativity:"none",precedence:265},{name:"SquareSubsetEqual",latexTrigger:["\\sqsubseteq"],kind:"infix",associativity:"none",precedence:265},{name:"SquareSuperset",latexTrigger:["\\sqsupset"],kind:"infix",associativity:"none",precedence:265},{name:"SquareSupersetEqual",latexTrigger:["\\sqsupseteq"],kind:"infix",associativity:"none",precedence:265},{name:"Subset",latexTrigger:["\\subset"],kind:"infix",associativity:"none",precedence:240},{latexTrigger:["\\subsetneq"],kind:"infix",associativity:"none",precedence:240,parse:"Subset"},{latexTrigger:["\\varsubsetneqq"],kind:"infix",associativity:"none",precedence:240,parse:"Subset"},{name:"SubsetEqual",latexTrigger:["\\subseteq"],kind:"infix",associativity:"none",precedence:240},{name:"Superset",latexTrigger:["\\supset"],kind:"infix",associativity:"none",precedence:240},{latexTrigger:["\\supsetneq"],kind:"infix",associativity:"none",precedence:240,parse:"Superset"},{latexTrigger:["\\varsupsetneq"],kind:"infix",associativity:"none",precedence:240,parse:"Superset"},{name:"SupersetEqual",latexTrigger:["\\supseteq"],kind:"infix",associativity:"none",precedence:240}];function ny(e,n){if(n===null)return"";let t=A(n);if(!t)return"";if(t==="Set")return Ie(n)===0?"\\emptyset":Ie(n)===2&&A(S(n,2))==="Condition"?$(["\\left\\lbrace",e.serialize(S(n,1)),"\\middle\\mid",e.serialize(S(n,2)),"\\right\\rbrace"]):$(["\\left\\lbrace",...O(n).map(r=>e.serialize(r)+" ,"),"\\right\\rbrace"]);if(t==="Range")return $(["\\mathopen\\lbrack",e.serialize(S(n,1)),", ",e.serialize(S(n,2)),"\\mathclose\\rbrack"]);if(t==="Interval"){let r=S(n,1),o=S(n,2),s=!1,a=!1;return A(r)==="Open"&&(r=S(r,1),s=!0),A(o)==="Open"&&(o=S(o,1),a=!0),$([s?"\\lparen":"\\lbrack",e.serialize(r),", ",e.serialize(o),a?"\\rparen":"\\rbrack"])}let i=e.numericSetStyle(n,e.level);return""}var iy=[{name:"Mean",kind:"function",symbolTrigger:"mean"},{name:"Median",kind:"function",symbolTrigger:"median"},{name:"StandarDeviation",kind:"function",symbolTrigger:"stddev"},{latexTrigger:["\\bar"],kind:"expression",parse:(e,n)=>{let t=e.parseGroup()??e.parseToken();return!t||!J(t)?null:["Mean",t]}}];function j(e){return(n,t)=>{let i={"\\arcsin":"Arcsin","\\arccos":"Arccos","\\arctan":"Arctan","\\arctg":"Arctan","\\arcctg":"Arccot","\\arcsec":"Arcsec","\\arccsc":"Arccsc","\\arsinh":"Arsinh","\\arcsinh":"Arsinh","\\arcosh":"Arcosh","\\arccosh":"Arcosh","\\artanh":"Artanh","\\arctanh":"Artanh","\\arsech":"Arsech","\\arcsech":"Arsech","\\arcsch":"Arcsch","\\arccsch":"Arcsch","\\arcoth":"Arcoth","\\arccoth":"Arcoth","\\ch":"Cosh","\\cos":"Cos","\\cosh":"Cosh","\\cosec":"Csc","\\cot":"Cot","\\cotg":"Cot","\\ctg":"Cot","\\csc":"Csc","\\csch":"Csch","\\coth":"Coth","\\cth":"Coth","\\sec":"Sec","\\sech":"Sech","\\sin":"Sin","\\sinh":"Sinh","\\sh":"Sinh","\\tan":"Tan","\\tg":"Tan","\\tanh":"Tanh","\\th":"Tanh"},r=i[e??""]??e??"";if(n.atTerminator(t))return r;let o=r;do{let l=n.parsePostfixOperator(o,t);if(l===null)break;o=l}while(!0);n.skipSpace();let s=null;n.match("^")&&(s=n.parseGroup()??n.parseToken()),n.skipSpace();let a=n.parseArguments("implicit",{minPrec:On,condition:l=>i[l.peek]||(t?.condition?.(l)??!1)}),u=a===null?o:typeof o=="string"?[o,...a]:["Apply",o,...a];return s===null?u:["Power",u,s]}}var ry=[{name:"Arcsin",latexTrigger:["\\arcsin"],parse:j("Arcsin")},{name:"Arccos",latexTrigger:["\\arccos"],parse:j("Arccos")},{name:"Arctan",latexTrigger:["\\arctan"],parse:j("Arctan")},{latexTrigger:["\\arctg"],parse:j("Arctan")},{symbolTrigger:"arctg",parse:j("Arctan")},{name:"Arccot",symbolTrigger:"arcctg",parse:j("Arccot")},{latexTrigger:["\\arcctg"],parse:j("Arccot")},{name:"Arcoth",symbolTrigger:"arcoth",parse:j("Arcoth")},{symbolTrigger:"arccoth",parse:j("Arcoth")},{latexTrigger:["\\arcoth"],parse:j("Arcoth")},{latexTrigger:["\\arccoth"],parse:j("Arcoth")},{name:"Arcsec",symbolTrigger:"arcsec",parse:j("Arcsec")},{latexTrigger:["\\arcsec"],parse:j("Arcsec")},{name:"Arccsc",symbolTrigger:"arccsc",parse:j("Arccsc")},{latexTrigger:["\\arccsc"],parse:j("Arccsc")},{name:"Arsinh",symbolTrigger:"arsinh",parse:j("Arsinh")},{symbolTrigger:"arcsinh",parse:j("Arsinh")},{latexTrigger:["\\arsinh"],parse:j("Arsinh")},{latexTrigger:["\\arcsinh"],parse:j("Arsinh")},{name:"Arcosh",symbolTrigger:"arcosh",parse:j("Arcosh")},{symbolTrigger:"arccosh",parse:j("Arcosh")},{latexTrigger:"\\arcosh",parse:j("Arcosh")},{latexTrigger:"\\arccosh",parse:j("Arcosh")},{name:"Artanh",symbolTrigger:"artanh",parse:j("Artanh")},{symbolTrigger:"arctanh",parse:j("Artanh")},{latexTrigger:"\\artanh",parse:j("Artanh")},{latexTrigger:["\\arctanh"],parse:j("Artanh")},{name:"Arsech",symbolTrigger:"arsech",parse:j("Arsech")},{symbolTrigger:"arcsech",parse:j("Arsech")},{latexTrigger:["\\arsech"],parse:j("Arsech")},{latexTrigger:["\\arcsech"],parse:j("Arsech")},{name:"Arcsch",symbolTrigger:"arcsch",parse:j("Arcsch")},{symbolTrigger:"arccsch",parse:j("Arcsch")},{latexTrigger:["\\arcsch"],parse:j("Arcsch")},{latexTrigger:["\\arccsch"],parse:j("Arcsch")},{name:"Cosec",symbolTrigger:"cosec",parse:j("Cosec")},{latexTrigger:["\\cosec"],parse:j("Cosec")},{name:"Cosh",latexTrigger:["\\cosh"],parse:j("Cosh")},{latexTrigger:["\\ch"],parse:j("Cosh")},{name:"Cot",latexTrigger:["\\cot"],parse:j("Cot")},{latexTrigger:["\\cotg"],parse:j("Cot")},{latexTrigger:["\\ctg"],parse:j("Cot")},{name:"Csc",latexTrigger:["\\csc"],parse:j("Csc")},{name:"Csch",latexTrigger:["\\csch"],parse:j("Csch")},{name:"Coth",latexTrigger:["\\coth"],parse:j("Coth")},{latexTrigger:["\\cth"],parse:j("Coth")},{symbolTrigger:"cth",parse:j("Coth")},{latexTrigger:["\\coth"],parse:j("Coth")},{name:"Sec",latexTrigger:["\\sec"],parse:j("Sec")},{name:"Sech",symbolTrigger:"sech",parse:j("Sech")},{latexTrigger:["\\sech"],parse:j("Sech")},{name:"Sinh",latexTrigger:["\\sinh"],parse:j("Sinh")},{latexTrigger:["\\sh"],parse:j("Sinh")},{name:"Tan",latexTrigger:["\\tan"],parse:j("Tan")},{latexTrigger:["\\tg"],parse:j("Tan")},{name:"Tanh",latexTrigger:["\\tanh"],parse:j("Tanh")},{latexTrigger:["\\th"],parse:j("Tanh")},{name:"Cos",latexTrigger:["\\cos"],parse:j("Cos")},{name:"Sin",latexTrigger:["\\sin"],parse:j("Sin")},{name:"Sinc",symbolTrigger:"sinc",kind:"function"},{name:"FresnelS",symbolTrigger:"FresnelS",kind:"function"},{name:"FresnelC",symbolTrigger:"FresnelC",kind:"function"}];var Fo=[{name:"core",definitions:H0,latexDictionary:[...Qg,...Zg,...C1]},{name:"control-structures",requires:["core"],definitions:k0},{name:"logic",requires:["core"],definitions:[r1,o1],latexDictionary:K1},{name:"collections",requires:["core"],definitions:[d1,ub],latexDictionary:ty},{name:"colors",requires:["core"],definitions:w0},{name:"fractals",requires:["arithmetic"],definitions:k1},{name:"relop",requires:["core"],definitions:f1,latexDictionary:lr},{name:"arithmetic",requires:["core"],definitions:[...Rb,...A0],latexDictionary:[...j1,...Y1]},{name:"trigonometry",requires:["arithmetic"],definitions:I1,latexDictionary:ry},{name:"calculus",requires:["arithmetic"],definitions:o0,latexDictionary:H1},{name:"polynomials",requires:["arithmetic"],definitions:l1},{name:"combinatorics",requires:["arithmetic"],definitions:C0},{name:"number-theory",requires:["arithmetic"],definitions:s1},{name:"linear-algebra",requires:["arithmetic"],definitions:Y0,latexDictionary:Q1},{name:"statistics",requires:["arithmetic"],definitions:N1,latexDictionary:iy},{name:"units",requires:["arithmetic"],definitions:Tb,latexDictionary:L1},{name:"physics",requires:["arithmetic","units"],definitions:{SpeedOfLight:{description:"Speed of light in vacuum",isConstant:!0,wikidata:"Q2111",type:"value",value:e=>e._fn("Quantity",[e.number(299792458),e._fn("Divide",[e.symbol("m"),e.symbol("s")])])},PlanckConstant:{description:"Planck constant",isConstant:!0,wikidata:"Q524",type:"value",value:e=>e._fn("Quantity",[e.number(662607015e-42),e._fn("Multiply",[e.symbol("J"),e.symbol("s")])])},Mu0:{description:"Vacuum permeability",isConstant:!0,wikidata:"Q1515261",type:"value",value:e=>e._fn("Quantity",[e.number(125663706212e-17),e._fn("Divide",[e.symbol("N"),e._fn("Power",[e.symbol("A"),e.number(2)])])])},StandardGravity:{description:"Standard acceleration due to gravity",isConstant:!0,wikidata:"Q30006",type:"value",value:e=>e._fn("Quantity",[e.number(9.80665),e._fn("Divide",[e.symbol("m"),e._fn("Power",[e.symbol("s"),e.number(2)])])])},ElementaryCharge:{description:"Elementary electric charge",isConstant:!0,wikidata:"Q2101",type:"value",value:e=>e._fn("Quantity",[e.number(1602176634e-28),e.symbol("C")])},BoltzmannConstant:{description:"Boltzmann constant",isConstant:!0,wikidata:"Q131536",type:"value",value:e=>e._fn("Quantity",[e.number(1380649e-29),e._fn("Divide",[e.symbol("J"),e.symbol("K")])])},AvogadroConstant:{description:"Avogadro constant",isConstant:!0,wikidata:"Q47574",type:"value",value:e=>e._fn("Quantity",[e.number(602214076e15),e._fn("Power",[e.symbol("mol"),e.number(-1)])])},VacuumPermittivity:{description:"Vacuum permittivity (electric constant)",isConstant:!0,wikidata:"Q176908",type:"value",value:e=>e._fn("Quantity",[e.number(88541878128e-22),e._fn("Divide",[e.symbol("F"),e.symbol("m")])])},GravitationalConstant:{description:"Newtonian constant of gravitation",isConstant:!0,wikidata:"Q30022",type:"value",value:e=>e._fn("Quantity",[e.number(66743e-15),e._fn("Divide",[e._fn("Power",[e.symbol("m"),e.number(3)]),e._fn("Multiply",[e.symbol("kg"),e._fn("Power",[e.symbol("s"),e.number(2)])])])])},StefanBoltzmannConstant:{description:"Stefan-Boltzmann constant",isConstant:!0,wikidata:"Q196898",type:"value",value:e=>e._fn("Quantity",[e.number(5670374419e-17),e._fn("Divide",[e.symbol("W"),e._fn("Multiply",[e._fn("Power",[e.symbol("m"),e.number(2)]),e._fn("Power",[e.symbol("K"),e.number(4)])])])])},GasConstant:{description:"Molar gas constant",isConstant:!0,wikidata:"Q39600",type:"value",value:e=>e._fn("Quantity",[e.number(8.314462618),e._fn("Divide",[e.symbol("J"),e._fn("Multiply",[e.symbol("mol"),e.symbol("K")])])])}},latexDictionary:[{name:"Mu0",kind:"symbol",latexTrigger:"\\mu_0"},{name:"VacuumPermittivity",kind:"symbol",latexTrigger:"\\varepsilon_0"}]},{name:"other",requires:["core"],latexDictionary:ey}];function pl(e){let n=new Map;for(let s of e){if(n.has(s.name))throw new Error(`Duplicate library name: "${s.name}"`);n.set(s.name,s)}let t=new Map,i=new Map;for(let s of e){t.has(s.name)||t.set(s.name,0);for(let a of s.requires??[]){if(!n.has(a))throw new Error(`Library "${s.name}" requires "${a}", which is not available`);t.set(s.name,(t.get(s.name)??0)+1);let u=i.get(a);u?u.push(s.name):i.set(a,[s.name])}}let r=[];for(let[s,a]of t)a===0&&r.push(s);let o=[];for(;r.length>0;){let s=r.shift();o.push(n.get(s));for(let a of i.get(s)??[]){let u=t.get(a)-1;t.set(a,u),u===0&&r.push(a)}}if(o.length!==e.length){let s=e.filter(a=>!o.some(u=>u.name===a.name)).map(a=>a.name);throw new Error(`Circular dependency detected among libraries: ${s.join(", ")}`)}return o}function ml(e){if(!e||e==="all")return Object.freeze(pl([...Fo]));typeof e=="string"&&(e=[e]);let n=e.map(t=>{let i=Fo.find(r=>r.name===t);if(!i)throw new Error(`Unknown library category "${t}"`);return i});return Object.freeze(pl(n))}function aT(e){if(e=e.normalize(),rn(e))return e;throw new Error(`Invalid definition name "${e}": ${it(e)}`)}function oy(e,n){let t=e.context.lexicalScope.bindings;e.strict;for(let[i,r]of Object.entries(n))try{if(i=aT(i),ps(r))try{if(t.has(i))throw new Error(`Duplicate operator definition: "${i}"
|
|
82
|
+
${JSON.stringify(t.get(i),void 0,4)}
|
|
83
|
+
`);t.set(i,{operator:new ar(e,i,r)})}catch(o){console.error([`
|
|
84
|
+
Error in operator definition`,JSON.stringify(r,void 0,4),"",o.message].join(`
|
|
85
|
+
| `)+`
|
|
86
|
+
`)}else if(ms(r))try{if(t.has(i))throw new Error(`The symbol "${i}" is already defined`);t.set(i,{value:new Et(e,i,r)})}catch(o){console.error([`
|
|
87
|
+
Error in value definition of "${i}"`,"",JSON.stringify(r,void 0,4),"",o.message].join(`
|
|
88
|
+
| `))}else{let o=new Et(e,i,{value:e.box(r)});t.set(i,{value:o})}}catch(o){console.error([`
|
|
89
|
+
Error in definition of "${i}"`,"",JSON.stringify(r,void 0,4),"",o.message].join(`
|
|
90
|
+
| `)+`
|
|
91
|
+
`)}}function dl(e){return typeof e=="number"?e===0?1:Number.isInteger(e)?Math.floor(Math.log2(Math.abs(e))/Math.log2(10))+(e>0?1:2):2:e.isZero?1:e.im!==0?dl(e.re)+dl(e.im)+1:dl(e.re)}function Qn(e){let n=(()=>{if(!m(e,"Multiply")||e.ops.length!==2)return null;let o=(l,c)=>{if(!m(c,"Power")||!_(c.op1,"ExponentialE")||!m(l,"Power"))return null;let f=l.op2;if(!m(f,"Divide")||f.op1?.isSame(1)!==!0)return null;let p=f.op2;return!m(p,"Ln")||p.op1?.isSame(10)!==!0?null:{xBase:l.op1,eExp:c.op2}},[s,a]=e.ops,u=o(s,a)??o(a,s);return u?12+Qn(u.xBase)+Qn(u.eExp):null})();if(n!==null)return n;if(_(e))return 1;if(E(e))return dl(e.numericValue);let t=e.operator,i=2;if(["Add"].includes(t))i=3;else if(t==="Subtract")i=4;else if(t==="Negate"){let o=m(e)?e:void 0;if(o?.op1?.operator==="Power"){let s=m(o.op1)?o.op1:void 0;if(s)return 3+Qn(s.ops[1])}i=4}else if(t==="Sqrt"){let s=(m(e)?e:void 0)?.ops[0];if(m(s,"Multiply")){for(let a of s.ops)if(m(a,"Power")&&a.op2?.isEven===!0)return 5+Qn(s)+6}if(m(s,"Power")&&s.op2?.isEven===!0)return 5+Qn(s)+6;if(m(s,"Power")&&s.op2?.isOdd===!0&&s.op2?.isInteger===!0){let a=s.op2,u=ce(a);if(typeof u=="number"&&u>1)return 5+Qn(s)+10}i=5}else if(["Square","Abs"].includes(t))i=5;else if(t==="Power"){let o=m(e)?e:void 0;if(o){let s=o.ops[0],a=o.ops[1],u=Qn(a);return s.operator==="Negate"?u+4:m(s,"Multiply")?s.ops.some(c=>E(c)&&c.isNegative===!0)&&a.isRational===!0&&!a.isInteger?u+Qn(s)+15:u+Qn(s):u}}else if(t==="Root")i=5;else if(["Multiply"].includes(t)){let s=(m(e)?e:void 0)?.ops??[];if(s.length===2&&E(s[0])){let a=s[0].numericValue,u=!1;if(typeof a=="number")u=Number.isInteger(a)&&Math.abs(a)<=10;else if(a){let l=a.type;(l==="finite_integer"&&Math.abs(a.re)<=10||l==="finite_rational")&&(u=!0)}if(u){let l=s[1].operator;return["Ln","Log","Lb"].includes(l)?2+Qn(s[1]):3+Qn(s[1])}}i=7}else["Divide"].includes(t)?i=8:["Ln","Exp","Log","Lb"].includes(t)?i=9:["Cos","Sin","Tan"].includes(t)?i=10:i=11;let r=m(e)?e:void 0;return i+(r?.ops.reduce((o,s)=>o+Qn(s),0)??0)}var np=Qn;function ia(e){if(typeof e=="number")return e;if(e!==null&&typeof e=="object"&&"re"in e&&typeof e.re=="number")return e.re}function ip(e,n){let t=r=>{let o=0;for(let s of n){if(_(r,s))return 1;r.has(s)&&o++}return o},i=r=>{let o=t(r);if(o===0||_(r)&&n.includes(r.symbol))return!0;if(m(r,"Multiply")){let s=0;for(let a of r.ops)if(t(a)>0){if(s++,t(a)>1)return!1;if(!_(a)&&a.has(n[0])){for(let u of n)if(a.has(u)&&ae(a,u)>1)return!1}}return s<=1}return m(r,"Add")?r.ops.every(s=>i(s)):m(r,"Negate")?i(r.op1):m(r,"Subtract")?i(r.op1)&&i(r.op2):o<=1};return i(e)}function rp(e,n){if(e.length===0||n.length===0)return null;let t=e[0].engine,i=n.length,r=e.length,o=lT(e,n);if(!o)return null;let{A:s,b:a}=o;if(r<i)return fT(s,a,n,t);let u=cT(s,a,i,t);if(!u)return null;let l={};for(let c=0;c<i;c++)l[n[c]]=u[c].simplify();return l}function uT(e,n){let t=e.engine,i;if(m(e,"Equal")){let s=e.op1,a=e.op2;i=Ne(s.sub(a))}else i=Ne(e);for(let s of n){let a=ae(i,s);if(a<0||a>1)return null}if(!ip(i,n))return null;let r=[];for(let s of n){let a=jt(i,s,t);if(a===null)return null;r.push(a)}let o=qo(i,n,t).neg();return{coefficients:r,constant:o}}function jt(e,n,t){if(!e.has(n))return t.Zero;if(_(e,n))return t.One;if(m(e,"Negate"))return jt(e.op1,n,t)?.neg()??null;if(m(e,"Multiply")){let i=e.ops,r=t.One,o=!1;for(let s of i)if(_(s,n)){if(o)return null;o=!0}else{if(s.has(n))return null;r=r.mul(s)}return o?r:t.Zero}if(m(e,"Add")){let i=t.Zero;for(let r of e.ops){let o=jt(r,n,t);if(o===null)return null;i=i.add(o)}return i}if(m(e,"Subtract")){let i=jt(e.op1,n,t),r=jt(e.op2,n,t);return i===null||r===null?null:i.sub(r)}return e.has(n)?null:t.Zero}function qo(e,n,t){if(!n.some(r=>e.has(r)))return e;if(m(e,"Add")){let r=t.Zero;for(let o of e.ops)n.some(a=>o.has(a))||(r=r.add(o));return r}if(m(e,"Negate"))return qo(e.op1,n,t).neg();if(m(e,"Subtract")){let r=qo(e.op1,n,t),o=qo(e.op2,n,t);return r.sub(o)}return t.Zero}function lT(e,n){let t=e.length,i=[],r=[];for(let o=0;o<t;o++){let s=uT(e[o],n);if(!s)return null;i.push(s.coefficients),r.push(s.constant)}return{A:i,b:r}}function cT(e,n,t,i){let r=e.length,o=[];for(let a=0;a<r;a++)o.push([...e[a],n[a]]);for(let a=0;a<t;a++){let u=a;for(let c=a+1;c<r;c++)uy(o[c]?.[a],o[u]?.[a])===1&&(u=c);if(Ui(o[u]?.[a]))return null;u!==a&&([o[a],o[u]]=[o[u],o[a]]);let l=o[a][a];for(let c=a+1;c<r;c++){let f=o[c][a].div(l);o[c][a]=i.Zero;for(let p=a+1;p<=t;p++)o[c][p]=o[c][p].sub(f.mul(o[a][p]))}}for(let a=t;a<r;a++){let u=o[a][t];if(!Ui(u)){let l=!0;for(let c=0;c<t;c++)if(!Ui(o[a][c])){l=!1;break}if(l)return null}}let s=new Array(t);for(let a=t-1;a>=0;a--){let u=o[a][t];for(let l=a+1;l<t;l++)u=u.sub(o[a][l].mul(s[l]));s[a]=u.div(o[a][a])}return s}function fT(e,n,t,i){let r=e.length,o=t.length,s=[];for(let g=0;g<r;g++)s.push([...e[g],n[g]]);let a=[],u=new Array(o).fill(!1),l=0;for(let g=0;g<o&&l<r;g++){let h=l;for(let y=l+1;y<r;y++)uy(s[y]?.[g],s[h]?.[g])===1&&(h=y);if(Ui(s[h]?.[g]))continue;h!==l&&([s[l],s[h]]=[s[h],s[l]]),a[l]=g,u[g]=!0;let b=s[l][g];for(let y=l+1;y<r;y++)if(!Ui(s[y][g])){let x=s[y][g].div(b);s[y][g]=i.Zero;for(let N=g+1;N<=o;N++)s[y][N]=s[y][N].sub(x.mul(s[l][N]))}l++}let c=l;for(let g=0;g<r;g++){let h=!0;for(let b=0;b<o;b++)if(!Ui(s[g][b])){h=!1;break}if(h&&!Ui(s[g][o]))return null}let f=[];for(let g=0;g<o;g++)u[g]||f.push(g);let p=new Array(o);for(let g=0;g<o;g++)u[g]||(p[g]=i.symbol(t[g]));for(let g=c-1;g>=0;g--){let h=a[g];if(h===void 0)continue;let b=s[g][o];for(let y=h+1;y<o;y++)Ui(s[g][y])||(b=b.sub(s[g][y].mul(p[y])));p[h]=b.div(s[g][h]).simplify()}let d={};for(let g=0;g<o;g++){let h=p[g];_(h,t[g])||(d[t[g]]=h)}return d}function uy(e,n){if(!e||!n)return;let t=e.abs(),i=n.abs(),r=ce(t),o=ce(i);if(r!==void 0&&o!==void 0){let p=ia(r),d=ia(o);if(p!==void 0&&d!==void 0)return p===d?0:p>d?1:-1}let s=t.N(),a=i.N(),u=ce(s),l=ce(a);if(u===void 0||l===void 0)return;let c=ia(u),f=ia(l);if(!(typeof c!="number"||typeof f!="number")&&!(isNaN(c)||isNaN(f)))return c===f?0:c>f?1:-1}function Ui(e){if(!e||e.isSame(0)||e.simplify().isSame(0))return!0;let t=e.N(),i=ce(t);if(i===void 0)return!1;let r=ia(i);return typeof r=="number"&&Math.abs(r)<1e-14}function op(e,n){if(e.length!==2||n.length!==2)return null;let t=e[0].engine,[i,r]=n,o=e.map(u=>{if(m(u,"Equal")){let l=u.op1.sub(u.op2);return Ne(l).simplify()}return Ne(u).simplify()}),s=pT(o,i,r,t);if(s)return s;let a=hT(o,i,r,t);return a||null}function pT(e,n,t,i){let r=null,o=null,s=null,a=null;for(let d of e){let g=mT(d,n,t,i);if(g){r=d,s=g.product;continue}let h=gT(d,n,t,i);if(h){o=d,a=h.sum;continue}}if(!r||!o||!s||!a)return null;let u="_t",l=i.box(["Add",["Square",u],["Negate",["Multiply",a,u]],s]).simplify(),c=Bn(l,u);if(c.length===0)return null;let f=tp(c);if(f.length===0)return null;let p=[];if(f.length===1){let d=f[0].simplify();p.push({[n]:d,[t]:d})}else if(f.length>=2){let d=f[0].simplify(),g=f[1].simplify();p.push({[n]:d,[t]:g}),d.isSame(g)||p.push({[n]:g,[t]:d})}return p.length>0?p:null}function mT(e,n,t,i){if(!e.has(n)||!e.has(t))return null;let r=ae(e,n),o=ae(e,t);if(r!==1||o!==1)return null;let s=dT(e,n,t,i);return!s||s.coef.isSame(0)?null:{product:s.constant.neg().div(s.coef).simplify()}}function dT(e,n,t,i){let r=i.Zero,o=i.Zero;if(m(e,"Add")){for(let a of e.ops){let u=sy(a,n,t,i);if(u===null)return null;r=r.add(u.coef),o=o.add(u.constant)}return{coef:r,constant:o}}let s=sy(e,n,t,i);return s===null?null:s}function sy(e,n,t,i){let r=e.has(n),o=e.has(t);if(!r&&!o)return{coef:i.Zero,constant:e};if(r!==o)return null;if(m(e,"Multiply")){let s=i.One,a=!1,u=!1;for(let l of e.ops)if(_(l,n)){if(a)return null;a=!0}else if(_(l,t)){if(u)return null;u=!0}else{if(l.has(n)||l.has(t))return null;s=s.mul(l)}return a&&u?{coef:s,constant:i.Zero}:null}return _(e)&&(e.symbol===n||e.symbol===t),null}function gT(e,n,t,i){if(!e.has(n)||!e.has(t))return null;let r=ae(e,n),o=ae(e,t);if(r!==1||o!==1||!ip(e,[n,t]))return null;let s=jt(e,n,i),a=jt(e,t,i),u=qo(e,[n,t],i);if(s===null||a===null)return null;let l=s.div(a).simplify();return!l.isSame(1)&&!l.isSame(-1)?null:l.isSame(1)?{sum:u.neg().div(s).simplify()}:null}function ra(e){let n=e.simplify();if(n.operator==="Complex")return!1;let t=n.im;return!(t!==void 0&&t!==0)}function tp(e){return e.filter(n=>ra(n))}function hT(e,n,t,i){for(let r=0;r<e.length;r++){let o=e[r],s=e[1-r],a=ay(o,n,t,i);if(a){let l=s.subs({[n]:a},{canonical:!0}).simplify(),c=tp(Bn(l,t));if(c.length>0){let f=[];for(let p of c){let d=p.simplify(),g=a.subs({[t]:d},{canonical:!0}).simplify();ra(g)&&ra(d)&&f.push({[n]:g,[t]:d})}if(f.length>0)return f}}let u=ay(o,t,n,i);if(u){let l=s.subs({[t]:u},{canonical:!0}).simplify(),c=tp(Bn(l,n));if(c.length>0){let f=[];for(let p of c){let d=p.simplify(),g=u.subs({[n]:d},{canonical:!0}).simplify();ra(d)&&ra(g)&&f.push({[n]:d,[t]:g})}if(f.length>0)return f}}}return null}function ay(e,n,t,i){if(ae(e,n)!==1)return null;let o=jt(e,n,i);return o===null||o.isSame(0)?null:e.sub(o.mul(i.symbol(n))).simplify().neg().div(o).simplify()}var bT=["Less","LessEqual","Greater","GreaterEqual"];function yT(e){return e!==void 0&&bT.includes(e)}function ly(e,n){if(n.length!==2||e.length<2)return null;let t=e[0].engine,[i,r]=n,o=[];for(let c of e){let f=xT(c,i,r,t);if(!f)return null;o.push(f)}let s=[];for(let c=0;c<o.length;c++)for(let f=c+1;f<o.length;f++){let p=ET(o[c],o[f]);p&&s.push(p)}let a=s.filter(c=>o.every(f=>vT(c,f)));if(a.length===0)return null;let u=_T(a);return u.length===0?null:NT(u).map(c=>({[i]:t.number(c.x).simplify(),[r]:t.number(c.y).simplify()}))}function xT(e,n,t,i){let r=e.operator;if(!yT(r)||!m(e))return null;let o=e.op1,s=e.op2;if(!o||!s)return null;let a,u;if(r==="Less"||r==="LessEqual"){let k=o.sub(s);a=Ne(k).simplify(),u=r==="Less"}else{let k=s.sub(o);a=Ne(k).simplify(),u=r==="Greater"}let l=ae(a,n),c=ae(a,t);if(l>1||c>1||!ip(a,[n,t]))return null;let f=jt(a,n,i),p=jt(a,t,i),d=qo(a,[n,t],i);if(f===null||p===null)return null;let g=f.N(),h=p.N(),b=d.N(),y=ce(g),x=ce(h),N=ce(b),T=k=>{if(typeof k=="number")return k;if(k&&typeof k=="object"&&"re"in k){let P=k.re;if(typeof P=="number")return P}return null},I=T(y),M=T(x),w=T(N);return I===null||M===null||w===null||!Number.isFinite(I)||!Number.isFinite(M)||!Number.isFinite(w)?null:{a:I,b:M,c:w,strict:u}}function ET(e,n){let t=e.a*n.b-n.a*e.b;if(Math.abs(t)<1e-14)return null;let i=(e.b*n.c-n.b*e.c)/t,r=(n.a*e.c-e.a*n.c)/t;return!Number.isFinite(i)||!Number.isFinite(r)?null:{x:i,y:r}}function vT(e,n){let t=n.a*e.x+n.b*e.y+n.c;return n.strict?t<1e-10:t<=1e-10}function _T(e){let t=[];for(let i of e)t.some(o=>Math.abs(o.x-i.x)<1e-10&&Math.abs(o.y-i.y)<1e-10)||t.push(i);return t}function NT(e){if(e.length<=2)return e;let n=e.reduce((i,r)=>i+r.x,0)/e.length,t=e.reduce((i,r)=>i+r.y,0)/e.length;return[...e].sort((i,r)=>{let o=Math.atan2(i.y-t,i.x-n),s=Math.atan2(r.y-t,r.x-n);return o-s})}function gl(e,n){if(!m(e))return[];let t=e.ops,i=e.operatorDefinition;if(!i||t.length===0||(i?.associative&&(t=be(t,e.operator,!1)),i.lazy))return t;let r=[];for(let o of t){let s=o.operator;if(s==="Hold")r.push(o);else{let a=s==="ReleaseHold"&&m(o)?o.op1:o;if(a){let u=n(a);u!==null&&r.push(u)}}}return i?.associative?be(r,e.operator,!1):r}async function cy(e,n){if(!m(e))return[];let t=e.ops,i=e.operatorDefinition;if(!i||t.length===0||(i?.associative&&(t=be(t,e.operator,!1)),i.lazy))return t;let r=[];for(let o of t){let s=o.operator;if(s==="Hold")r.push(o);else{let a=s==="ReleaseHold"&&m(o)?o.op1:o;if(a){let u=await n(a);u!==null&&r.push(u)}}}return i?.associative?be(r,e.operator,!1):r}var fy=["Add","Subtract","Multiply","Divide","Negate","Power","Rational"],ST=["Sin","Cos","Tan","Csc","Sec","Cot"];function py(e){return ST.includes(e.operator)?!0:m(e)?e.ops.some(n=>py(n)):!1}function sp(e){if(E(e)||!m(e)||e.operator==="Power"&&(_(e.op1,"ExponentialE")||e.op2?.isRational===!0&&e.op2?.isInteger===!1))return e;if(e.unknowns.length===0&&fy.includes(e.operator)){let i=e.evaluate();if(E(i))return i}let n=e.ops.map(i=>sp(i));return n.some((i,r)=>i!==e.ops[r])?e.engine._fn(e.operator,n):e}function zn(e,n,t){if((a=>t&&t.some(u=>u.value.isSame(a)))(e))return t;let r=1e3;if(t&&t.length>=r)return console.warn(`Simplification exceeded ${r} steps, stopping to prevent infinite recursion`),t;if(t||(t=[{value:e,because:"initial"}]),!e.isValid)return t;if(!(e.isCanonical||e.isStructural)){let a=e.canonical;return a.isCanonical||a.isStructural?zn(a,n):t}let o=e.engine;if(n?.strategy==="fu"){let a=b=>o.costFunction(b),u=o._fuAlgorithm(e),l=u?.value??e;if(u){let b=l.simplify();b.isSame(l)||(l=b)}let c=e.simplify(),f=o._fuAlgorithm(c),p=f?.value??c;if(f){let b=p.simplify();b.isSame(p)||(p=b)}let d=a(l),g=a(p),h=d<=g?l:p;return h.isSame(e)||t.push({value:h,because:"fu"}),t}let s=n?.rules?o.rules(n.rules,{canonical:!0}):o.getRuleSet("standard-simplification");n={...n,rules:s};do{let a=IT(e,s,n,t);if(a.length<=t.length)break;e=a.at(-1).value,t=a}while(!t.slice(0,-1).some(a=>a.value.isSame(e)));return t}function TT(e,n,t){if(n==null||e===n||e.isSame(n))return!1;let i=e.engine;t??=s=>i.costFunction(s);let r=t(e);return t(n)<=1.3*r}function my(e,n){if(!m(e))return e;let t=e.operatorDefinition;if(t?.scoped===!0){let o=[...e.ops].map((s,a)=>a===0?s:zn(s,n).at(-1).value);return e.engine._fn(e.operator,o)}let i=gl(e,o=>o);if(t?.lazy){let o=i.map(s=>s.operator==="Sum"||s.operator==="Product"||py(s)||s.operator==="Ln"||s.operator==="Abs"||m(s,"Negate")&&s.op1?.operator==="Abs"||m(s,"Power")&&s.op2?.isRational===!0&&!s.op2.isInteger?zn(s,n).at(-1).value:sp(s));return e.engine.function(e.operator,o)}if(e.operator==="Divide"){let o=i.map(a=>sp(a));return o.some((a,u)=>a!==i[u])?e.engine._fn(e.operator,o):e}let r=i.map(o=>{if(!E(o)&&m(o)&&o.unknowns.length===0&&fy.includes(o.operator)){if(o.operator==="Power"&&(_(o.op1,"ExponentialE")||o.op2?.isRational===!0&&o.op2?.isInteger===!1))return o;let s=o.evaluate();if(E(s))return s}return m(o)?zn(o,n).at(-1).value:o});return e.engine._fn(e.operator,r)}function IT(e,n,t,i){if(E(e)||q(e))return i;if(_(e)){let s=fi(e,n,{recursive:!1,canonical:!0,useVariations:!1});return s.length>0?[...i,...s]:i}let r=my(e,t);r.isSame(e)||(i=[...i,{value:r,because:"simplified operands"}],e=r);let o=wT(e,n,t,i);return o.length>i.length?o:i}function wT(e,n,t,i){let r=fi(e,n,{recursive:!1,canonical:!0,useVariations:t.useVariations??!1});if(r.length===0)return i;let o=r.at(-1).value;if(o.isSame(e))return i;o=my(o);let s=r.at(-1).because,a=s==="combined powers"||s==="combined powers with same base",u=s==="ln"||s?.startsWith("ln(")||s?.startsWith("log_"),l=s?.startsWith("root(-"),c=s?.startsWith("|"),f=s==="a / (b/c)^d -> a * (c/b)^d",p=s==="factor common factorial",d=s==="expand"&&(()=>{if(!m(o)||!m(e))return!1;if(e.operator==="Add"&&o.operator==="Add"&&o.nops<e.nops)return!0;if(e.operator==="Add"&&o.operator==="Add"&&o.nops<=e.nops){let g=h=>m(h,"Power")&&h.op1?.operator==="Add"?!0:m(h)?h.ops.some(g):!1;return g(e)&&!g(o)}return!1})();return!TT(e,o,t?.costFunction)&&!a&&!u&&!l&&!c&&!f&&!p&&!d?i:(r.at(-1).value=o,[...i,...r])}function oa(e){return typeof e=="string"?e.startsWith("_"):Ze(e)?!0:m(e)?oa(e.operator)||e.ops.some(oa):!1}function Xn(e,n,t){return e.startsWith("_"),e==="_"||e==="__"||e==="___"?t:e in t?n.isSame(t[e])?t:null:oa(n)?null:{...t,[e]:n}}function Gt(e,n,t,i){if(Ze(n))return Xn(on(n),e,t);let r=i.acceptVariants??!0;if(i={...i,acceptVariants:!0},E(n))return E(e)?n.isEqual(e)?t:r?ap(e,n,t,i):null:null;if(q(n)){let o=n.string;return q(e)&&e.string===o?t:null}if(_(n)){let o=n.symbol;return _(e)&&o===e.symbol?t:r?ap(e,n,t,i):null}if(m(n)){let o=i.useVariations??!1,s=e.engine,a=null,u=n.operator;if(u==="Divide"&&E(e)&&!e.denominator.isSame(1)){let l=s.function("Divide",[e.numerator,e.denominator],{form:"structural"});return $r(l,n.ops,t,i)}if(u==="Divide"&&m(e)&&e.operator==="Multiply"){let l=e.ops;for(let c=0;c<l.length;c++){let f=l[c];if(E(f)&&f.numerator.isSame(1)&&!f.denominator.isSame(1)){let p=l.filter((b,y)=>y!==c),d=p.length===1?p[0]:s.function("Multiply",[...p],{form:"raw"}),g=s.function("Divide",[d,f.denominator],{form:"structural"}),h=$r(g,n.ops,t,i);if(h!==null)return h}}}if(u==="Power"&&m(e)&&e.operator==="Divide"&&e.op1.isSame(1)){let l=s.function("Power",[e.op2,s.number(-1)],{form:"structural"}),c=$r(l,n.ops,t,i);if(c!==null)return c}if(u==="Power"&&m(e,"Root")){let l=s.function("Power",[e.op1,s.box(["Divide",1,e.op2],{form:"raw"})],{form:"structural"}),c=$r(l,n.ops,t,i);if(c!==null)return c}if(u.startsWith("_"))a=Xn(u,s.box(e.operator),t),a!==null&&(a=$r(e,n.ops,a,i));else if(u===e.operator){let l=i.matchPermutations??!0;a=n.operatorDefinition.commutative&&l?hy(e,n,t,i):$r(e,n.ops,t,i),a===null&&i.matchMissingTerms&&m(e)&&m(n)&&e.nops<n.nops&&(a=CT(e,n,t,i,s))}if(a===null&&o){if(!r)return null;a=ap(e,n,t,i)}return a!==null&&(t=a),i.recursive&&m(e)&&(a=MT(e,n,t,{...i,acceptVariants:r})??a),a}return null}function MT(e,n,t,i){if(m(e),!m(e))return null;let r=null;for(let o of e.ops){let s=Gt(o,n,t,i);s!==null&&(r=s,t=s)}return r}function ap(e,n,t,i){if(!i.useVariations)return null;let r=e.engine,o={...i,acceptVariants:!1},s=(u,l)=>Gt(r.function(u,l,{form:"raw"}),n,t,o),a=n.operator;if(a==="Negate"&&e.isSame(0)&&m(n))return Gt(r.Zero,n.op1,t,o);if(a==="Add"){let u=s("Add",[0,e]);if(u!==null||(m(e,"Subtract")&&(u=s("Add",[e.op1,["Negate",e.op2]])),u!==null))return u}if(a==="Subtract"){let u=s("Subtract",[e,0]);if(u!==null||(m(e,"Negate")&&(u=s("Subtract",[0,e.op1])),u!==null))return u}if(a==="Multiply"){let u=s("Multiply",[1,e]);if(u!==null||m(e,"Negate")&&(u=s("Multiply",[-1,e.op1]),u!==null)||m(e,"Divide")&&(u=s("Multiply",[e.op1,["Divide",1,e.op2]]),u!==null))return u}if(a==="Divide"){let u=s("Divide",[e,1]);if(u!==null)return u}if(a==="Square"){let u=s("Power",[e,2]);if(u!==null)return u}if(a==="Exp"){let u=s("Power",[r.E,e]);if(u!==null)return u}if(a==="Power"&&m(n)){if(n.op2.re===2&&n.op2.im===0){let u=s("Square",[e]);if(u!==null)return u}if(_(n.op1,"ExponentialE")){let u=s("Exp",[e]);if(u!==null)return u}{let u=s("Power",[e,1]);if(u!==null)return u}}return null}function hy(e,n,t,i){if(e.operator,n.operator,m(e)&&m(n),!m(e)||!m(n))return null;let r=n.ops,o=e.ops,s=0,a=0,u=0,l=0;for(let d of r){let g=vt(d);g===null?l++:g==="Wildcard"?s++:g==="Sequence"?a++:u++}if(a===0&&u===0){if(o.length!==r.length)return null}else{let d=l+s+a;if(o.length<d)return null}if(l>0)if(l>=4&&o.length>=6){let d=new Map;for(let h=0;h<o.length;h++){let b=o[h].hash,y=d.get(b);y?y.push(h):d.set(b,[h])}let g=new Set;for(let h of r)if(!oa(h)){let b=h.hash,y=d.get(b);if(!y)return null;let x=!1;for(let N of y)if(!g.has(N)&&o[N].isSame(h)){g.add(N),x=!0;break}if(!x)return null}}else{let d=[...o];for(let g of r)if(!oa(g)){let h=d.findIndex(b=>b.isSame(g));if(h===-1)return null;d.splice(h,1)}}if(l>0){let d=kT(e,n,t,i);if(d!==null)return d}let p=Zd(r,d=>!d.some((g,h)=>{if(!Ze(g))return!1;let b=vt(g);if(b!=="Sequence"&&b!=="OptionalSequence")return!1;let y=d[h+1];if(!y||!Ze(y))return!1;let x=vt(y);return x==="Sequence"||x==="OptionalSequence"}));for(let d of p){let g=$r(e,d,t,i);if(g!==null)return g}return null}var dy=1e3;function gy(e){if(E(e))return 100;if(_(e))return 80;if(q(e))return 90;if(m(e)){let n=e.nops,t=0;for(let i of e.ops)vt(i)===null&&t++;return 50+n+t*5}return 0}function kT(e,n,t,i){let r=e.engine;if(!m(e)||!m(n))return null;let o=n.ops,s=[...e.ops],a=[],u=[],l=[],c=[];for(let T of o){let I=vt(T);I===null?a.push(T):I==="Wildcard"?u.push(T):I==="Sequence"?l.push(T):c.push(T)}let f=a.length+u.length+l.length,p=a.length+u.length+(l.length+c.length>0?1/0:0);if(s.length<f||l.length===0&&c.length===0&&s.length>p)return null;let d=[...a].sort((T,I)=>gy(I)-gy(T));return g(0,s,t);function g(T,I,M){if(T>=d.length)return h(I,M);let w=d.length-T,k=u.length+l.length;if(I.length<w+k)return null;let P=d[T];for(let F=0;F<I.length;F++){let G=Gt(I[F],P,M,i);if(G!==null){let U=[...I];U.splice(F,1);let ge=g(T+1,U,G);if(ge!==null)return ge}}return null}function h(T,I){let M=I,w=u.length,k=l.length,P=w+k;return T.length<P?null:b([...u,...l,...c],T,M)}function b(T,I,M){if(T.length===0)return I.length===0?M:null;let[w,...k]=T,P=vt(w),F=on(w);if(P==="Wildcard"){for(let U=0;U<I.length;U++){let ge=Xn(F,I[U],M);if(ge!==null){let he=[...I];he.splice(U,1);let le=b(k,he,ge);if(le!==null)return le}}return null}if(P==="Sequence"){let ge=I.length-y(k);for(let he=ge;he>=1;he--){let le=N(I.length,he);for(let ee of le){let Un=ee.map(Ht=>I[Ht]),mn=x(Un),It=Xn(F,mn,M);if(It!==null){let Ht=I.filter((bd,Gl)=>!ee.includes(Gl)),Br=b(k,Ht,It);if(Br!==null)return Br}}}return null}let G=I.length-y(k);for(let U=G;U>=0;U--)if(U===0){let ge=e.operator==="Add"?r.Zero:e.operator==="Multiply"?r.One:r.Nothing,he=Xn(F,ge,M);if(he!==null){let le=b(k,I,he);if(le!==null)return le}}else{let ge=N(I.length,U);for(let he of ge){let le=he.map(mn=>I[mn]),ee=x(le),Un=Xn(F,ee,M);if(Un!==null){let mn=I.filter((Ht,Br)=>!he.includes(Br)),It=b(k,mn,Un);if(It!==null)return It}}}return null}function y(T){return T.reduce((I,M)=>{let w=vt(M);return w==="Wildcard"||w==="Sequence"?I+1:I},0)}function x(T){if(T.length===1)return T[0];let I=r.lookupDefinition(e.operator);return I&&xe(I)&&I.operator.associative?r.function(e.operator,T,{form:"raw"}):r.function("Sequence",T,{form:"raw"})}function N(T,I){if(T>20&&I>2&&I<T-2){let P=1;for(let F=0;F<Math.min(I,T-I);F++)if(P=P*(T-F)/(F+1),P>dy)return[]}let M=[],w=[];function k(P){if(!(M.length>=dy)){if(w.length===I){M.push([...w]);return}for(let F=P;F<T;F++)w.push(F),k(F+1),w.pop()}}return k(0),M}}function $r(e,n,t,i){if(n.length===0)return m(e)&&e.ops.length===0?t:null;let r=n[0].engine;if(!m(e))return null;let o=[...e.ops];return s(n,t);function s(a,u){let l={...u},c=0;for(;c<a.length;){let p=a[c],d=on(p);if(d!==null)if(d.startsWith("__")){let g=a[c+1],h=d.startsWith("___");if(g===void 0){if(o.length===0&&!h)return null;l=Xn(d,f(o.length),l)}else{let b=h?0:1;Ze(g)&&vt(g);let y=g,x=c+1;for(;Ze(y)&&vt(y)==="OptionalSequence"&&a[x+1];)y=a[++x];let N=!1;for(;!N&&b<o.length;)N=Gt(o[b],y,l,i)!==null,N||(b+=1);if(N){if(y!==g){let I=c+1;for(;I<x&&l!==null;)l=Xn(on(a[I++]),f(0),l);if(l===null)return null}let T=l;for(;b<=o.length;){let I=o.slice(0,b);if(l=s(a.slice(x),Xn(d,f(b),T)??T),l||(o.unshift(...I),b++,b>=o.length)||!Gt(o[b-1],y,T,i))break}return l}else{if(!h)return null;l=Xn(d,f(0),l)}}}else if(d.startsWith("_")){if(o.length===0)return null;l=Xn(d,o.shift(),l)}else l=Gt(o.shift(),p,l,i);else{let g=o.shift();if(!g)return null;l=Gt(g,p,l,i)}if(l===null)return null;c+=1}if(o.length>0)return null;return l;function f(p){let d;if(p<1)e.operator==="Add"?d=r.Zero:e.operator==="Multiply"?d=r.One:d=r.Nothing;else if(p===1)d=o.shift();else{let g=r.lookupDefinition(e.operator),h=o.splice(0,p);g&&xe(g)&&g.operator.associative?d=r.function(e.operator,h,{form:"raw"}):d=r.function("Sequence",h,{form:"raw"})}return d}}}function CT(e,n,t,i,r){if(!m(e)||!m(n))return null;let o=e.operator,s=o==="Add"?r.Zero:o==="Multiply"?r.One:null;if(!s)return null;let a=n.ops,u=a.length-e.nops;if(u<=0)return null;let l=RT(a.length,u);l.sort((c,f)=>{let p=c.reduce((g,h)=>g+up(a[h]),0),d=f.reduce((g,h)=>g+up(a[h]),0);return p-d});for(let c of l){let f=a.filter((b,y)=>!c.includes(y)),p=c.map(b=>a[b]),d=r.function(o,f,{form:"raw"}),g=hy(e,d,t,i);if(g===null)continue;let h=!1;for(let b of p){let y=AT(b,s,g,i,r);if(y===null){h=!0;break}g=y}if(!h)return g}return null}function AT(e,n,t,i,r){let o=Gt(n,e,t,i);if(o!==null)return o;if(n.isSame(0)&&m(e,"Multiply"))for(let s of e.ops){let a=on(s);if(a&&!(a in t))return Xn(a,n,t)}if(n.isSame(1)&&m(e,"Power")){let s=e.ops[1];if(s){let a=on(s);if(a&&!(a in t))return Xn(a,r.Zero,t)}}return null}function up(e){return Ze(e)?0:E(e)||_(e)||q(e)?1:m(e)?1+e.ops.reduce((n,t)=>n+up(t),0):1}function RT(e,n){let t=[],i=[];function r(o){if(i.length===n){t.push([...i]);return}for(let s=o;s<e;s++)i.push(s),r(s+1),i.pop()}return r(0),t}function Vo(e,n,t){let i=e.engine,r=!1,o;typeof n=="string"?(r=!0,o=i.parse(n).map(c=>_(c)&&c.symbol.length===1?i.symbol("_"+c.symbol):c,{canonical:!1})):"engine"in n?o=n:o=i.box(n),o=o.structural;let s=t?.useVariations??r,a={recursive:t?.recursive??!1,useVariations:s,acceptVariants:s,matchPermutations:t?.matchPermutations??!0,matchMissingTerms:t?.matchMissingTerms??r},u=t?.substitution??{};if(r&&Object.keys(u).length>0){let c={};for(let[f,p]of Object.entries(u))f.startsWith("_")||`_${f}`in u||(c[`_${f}`]=p),c[f]=p;u=c}let l=Gt(e.structural,o.structural,u,a);if(!l)return null;if(r){let c={};for(let[f,p]of Object.entries(l)){if(!f.startsWith("_"))continue;let d=f.slice(1);_(p)&&p.symbol===d||(c[d]=p)}return c}return l}function by(e){let n=e.engine;if(e.operator==="Hold")return;let t;if(m(e)){let i=e.operatorDefinition;return i?.sgn&&(t=i.sgn(e.ops,{engine:n})),t}return _(e)||E(e)?e.sgn:"unsigned"}function Bo(e){if(e!==void 0){if(e==="positive")return!0;if(["non-positive","zero","negative"].includes(e))return!1}}function Jo(e){if(e!==void 0){if(["positive","positive-infinity","non-negative","zero"].includes(e))return!0;if(e==="negative")return!1}}function zo(e){if(e!==void 0){if(e==="negative")return!0;if(["non-negative","zero","positive"].includes(e))return!1}}function Uo(e){if(e!==void 0){if(["negative","non-positive","zero"].includes(e))return!0;if(["positive","positive-infinity"].includes(e))return!1}}function lp(e,n,t){return e.generation=n,e.value=t(),e.value}var PT=[5,5],je=class extends de{_kind="function";_operator;_ops;_def;_localScope;_isPure;_isStructural;_hash;_value={value:null,generation:-1};_valueN={value:null,generation:-1};_sgn={value:null,generation:-1};_type={value:null,generation:-1};constructor(n,t,i,r){super(n,r?.metadata),this._operator=t,this._ops=i,this._localScope=r?.scope,this._isStructural=r?.structural??!1,(r?.canonical||this._isStructural)&&this.bind()}get hash(){if(this._hash!==void 0)return this._hash;let n=0;for(let t of this._ops)n=n<<1^t.hash|0;return n=n^rt(this._operator)|0,this._hash=n,n}infer(n,t){let i=this.operatorDefinition;if(!i||!i.inferredSignature)return!1;if(i.signature.is("function"))i.signature=new V({kind:"signature",result:n},this.engine._typeResolver);else if(Ra(i.signature.type)){let r=i.signature.type;i.signature=new V({kind:"signature",args:r.args,optArgs:r.optArgs,variadicArg:r.variadicArg,variadicMin:r.variadicMin,result:t==="narrow"?wi(r.result,n):Se(r.result,n)},this.engine._typeResolver)}return this.engine._generation+=1,!0}bind(){this._def=Yr(this._operator,this._localScope??this.engine.context.lexicalScope)}reset(){}get value(){}get isCanonical(){return this._def!==void 0&&this._def!==null&&!this._isStructural}get isPure(){if(this._isPure!==void 0)return this._isPure;let n=this.operatorDefinition?.pure??!1;return n&&(n=this._ops.every(t=>t.isPure)),this._isPure=n,n}get isConstant(){return this.isPure&&this._ops.every(n=>n.isConstant)}get constantValue(){return this.isConstant?this.value:void 0}get json(){let n=this.structural,t=m(n)?n.ops:this._ops;return[this._operator,...t.map(i=>i.json)]}get operator(){return this._operator}get ops(){return this._ops}get nops(){return this._ops.length}get op1(){return this._ops[0]??this.engine.Nothing}get op2(){return this._ops[1]??this.engine.Nothing}get op3(){return this._ops[2]??this.engine.Nothing}get isScoped(){return this._localScope!==void 0}get localScope(){return this._localScope}get isValid(){return this._operator==="Error"?!1:this._ops.every(n=>n?.isValid)}get canonical(){return this.isCanonical||!this.isValid?this:this.engine.function(this._operator,this._ops)}get structural(){if(this.isStructural)return this;let n=this.operatorDefinition;if(n?.associative||n?.commutative){let t=this.ops.map(r=>r.structural),i=[];if(!n.associative)i=t;else for(let r of t)m(r,this.operator)?i.push(...r.ops):i.push(r);return this.engine.function(this._operator,this.isValid?ys(this._operator,i):i,{form:"structural"})}return this.engine.function(this._operator,this.ops.map(t=>t.structural),{form:"structural"})}get isStructural(){return this._isStructural}toNumericValue(){this.isCanonical||this.isStructural;let n=this.engine;if(this.operator==="Complex")return[n._numericValue({re:this.op1.re,im:this.op2.re}),n.One];let t=this;if(t.operator==="Add"&&(t=gi(this),E(t))){if(typeof t.numericValue=="number"){if(Number.isInteger(t.numericValue))return[n._numericValue(t.numericValue),n.One]}else if(t.numericValue.isExact)return[t.numericValue,n.One]}if(m(t,"Negate")){let[i,r]=t.op1.toNumericValue();return[i.neg(),r]}if(m(t,"Multiply")){let i=[],r=n._numericValue(1);for(let o of t.ops){let[s,a]=o.toNumericValue();r=r.mul(s),a.isSame(1)||i.push(a)}return i.length===0?[r,n.One]:i.length===1?[r,i[0]]:[r,cn(this.engine,i)]}if(m(t,"Divide")){let[i,r]=t.op1.toNumericValue(),[o,s]=t.op2.toNumericValue(),a=i.div(o);return s.isSame(1)?[a,r]:[a,n.function("Divide",[r,s])]}if(m(t,"Power")){if(!E(t.op2))return[n._numericValue(1),this];let[i,r]=t.op1.toNumericValue();if(i.isOne)return[i,this];let o=W(t.op2);return o!==null?[i.pow(o),n.function("Power",[r,t.op2])]:t.op2.isSame(.5)?[i.sqrt(),n.function("Sqrt",[r])]:[n._numericValue(1),this]}if(m(t,"Sqrt")){let[i,r]=t.op1.toNumericValue();return r.isSame(1)||r.isSame(0)?i.isOne||i.isZero?[i,r]:[i.sqrt(),r]:[i.sqrt(),n.function("Sqrt",[r])]}if(m(t,"Root")){let i=t.op2.re;if(isNaN(i)||t.op2.im!==0)return[n._numericValue(1),this];let[r,o]=t.op1.toNumericValue();return i===2?[r.sqrt(),n.function("Sqrt",[o])]:[r.root(i),n.function("Root",[o,t.op2])]}if(m(t,"Abs")){let[i,r]=t.op1.toNumericValue();return[i.abs(),n.function("Abs",[r])]}return t.operator,t.operator==="Exp"||t.operator==="Log"||t.operator==="Ln"?[n._numericValue(1),this]:[n._numericValue(1),t]}subs(n,t){t??={canonical:void 0},t.canonical===void 0&&(t={canonical:this.isCanonical||this.isStructural});let i=this._ops.map(o=>o.subs(n,t)),r=t.canonical===!0?"canonical":t.canonical===!1?"raw":t.canonical;return i.every(o=>o.isValid)?this.engine.function(this._operator,i,{form:r}):this.engine.function(this._operator,i,{form:"raw"})}replace(n,t){return fi(this,n,t).at(-1)?.value??null}match(n,t){return Vo(this,n,t)}has(n){if(typeof n=="string"){if(this._operator===n)return!0}else if(n.includes(this._operator))return!0;return this._ops.some(t=>t.has(n))}get sgn(){let n=this.isPure&&this._ops.every(t=>t.isConstant)?void 0:this.engine._generation;return lp(this._sgn,n,()=>{if(!(!this.isValid||this.isNumber!==!0))return by(this)})}get isNaN(){if(!this.isNumber)return!1}get isInfinity(){if(!this.isNumber)return!1}get isFinite(){if(this.isNumber!==!0||this.isNaN||this.isInfinity)return!1;if(!(this.isNaN===void 0||this.isInfinity===void 0))return!0}get isOne(){if(this.isNonPositive===!0||this.isReal===!1)return!1}get isNegativeOne(){if(this.isNonNegative===!0||this.isReal===!1)return!1}get isPositive(){return Bo(this.sgn)}get isNonNegative(){return Jo(this.sgn)}get isNegative(){return zo(this.sgn)}get isNonPositive(){return Uo(this.sgn)}get numerator(){return this.numeratorDenominator[0]}get denominator(){return this.numeratorDenominator[1]}get numeratorDenominator(){if(!(this.isCanonical||this.isStructural))return[this,this.engine.One];if(this.isNumber!==!0)return[this.engine.Nothing,this.engine.Nothing];let n=this.operator;if(n==="Divide")return[this.op1,this.op2];if(n==="Negate"){let[t,i]=this.op1.numeratorDenominator;return[t.neg(),i]}if(n==="Power"){let[t,i]=this.op1.numeratorDenominator;return[t.pow(this.op2),i.pow(this.op2)]}if(n==="Root"){let[t,i]=this.op1.numeratorDenominator;return[t.root(this.op2),i.root(this.op2)]}if(n==="Sqrt"){let[t,i]=this.op1.numeratorDenominator;return[t.sqrt(),i.sqrt()]}if(n==="Abs"){let[t,i]=this.op1.numeratorDenominator;return[t.abs(),i.abs()]}return n==="Multiply"?new qn(this.engine,this.ops).asNumeratorDenominator():[this,this.engine.One]}factors(){let n=this.operator;if(n==="Multiply"){let t=[];for(let i of this.ops)t.push(...i.factors());return t}return n==="Negate"?[this.engine.number(-1),...this.op1.factors()]:[this]}toRational(){let n=this.operator;if(n==="Divide"||n==="Rational"){let t=this.op1.re,i=this.op2.re;if(Number.isInteger(t)&&Number.isInteger(i)&&i!==0){let r=Pe(Math.abs(t),Math.abs(i)),o=i<0?-1:1;return[o*t/r,o*i/r]}return null}if(n==="Negate"){let t=this.op1.toRational();return t?[-t[0],t[1]]:null}return null}neg(){if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");return Sr(this)}inv(){if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");if(this.isOne)return this;if(this.isNegativeOne)return this;if(this.operator==="Sqrt")return this.op1.inv().sqrt();if(this.operator==="Divide")return this.op2.div(this.op1);if(this.operator==="Power"){let n=this.op2.neg();return n.operator!=="Negate"?this.op1.pow(n):this.engine.function("Power",[this.op1,n])}if(this.operator==="Root"){let n=this.op2.neg();return n.operator!=="Negate"?this.op1.root(n):this.engine.function("Root",[this.op1,n])}return this.operator==="Exp"?this.engine.E.pow(this.op1.neg()):this.operator==="Rational"?this.op2.div(this.op1):this.operator==="Negate"?this.op1.inv().neg():this.engine._fn("Divide",[this.engine.One,this])}abs(){if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");return this.operator==="Abs"||this.operator==="Negate"?this:this.isNonNegative?this:this.isNonPositive?this.neg():this.engine._fn("Abs",[this])}add(n){if(n===0)return this;if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");return fe(this,this.engine.box(n))}mul(n){if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");if(n===0)return this.engine.Zero;if(n===1)return this;if(n===-1)return this.neg();if(n instanceof Ee){if(n.isZero)return this.engine.Zero;if(n.isOne)return this;if(n.isNegativeOne)return this.neg()}return ke(this,this.engine.box(n))}div(n){if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");return Eo(this,n)}pow(n){return We(this,n,{numericApproximation:!1})}root(n){if(!(this.isCanonical||this.isStructural)||typeof n!="number"&&!(n.isCanonical||n.isStructural))throw new Error("Not canonical");let t=typeof n=="number"?n:n.im===0?n.re:void 0;if(t===0)return this.engine.NaN;if(t===1)return this;if(t===-1)return this.inv();if(t===2)return this.engine.function("Sqrt",[this]);if(this.operator==="Power"&&t!==void 0){let[i,r]=this.ops;return i.pow(r.div(t))}if(this.operator==="Divide"){let[i,r]=this.ops;return i.root(n).div(r.root(n))}if(this.operator==="Negate"&&t!==void 0)return t%2===0?this.op1.root(n):this.op1.root(n).neg();if(this.operator==="Sqrt"){if(t!==void 0)return this.op1.root(t*2);if(typeof n!="number")return this.op1.root(n.mul(2))}if(this.operator==="Root"){let[i,r]=this.ops;return i.root(r.mul(n))}if(this.operator==="Multiply"){let i=this.ops.map(r=>r.root(n));return ke(...i)}if(this.isNumberLiteral){let i=this.numericValue;if(typeof i=="number"){if(i<0)return this.engine.NaN;if(i===0)return this.engine.Zero;if(i===1)return this.engine.One;if(t!==void 0){let r=this.engine.number(Math.pow(i,1/t));if(!r.isFinite||r.isInteger)return r}}else{if(i.isOne)return this.engine.One;if(i.isZero)return this.engine.Zero;if(t!==void 0){let r=i.root(t);if(r.isExact)return this.engine.number(r)}}}return this.engine._fn("Root",[this,this.engine.box(n)])}sqrt(){return this.root(2)}ln(n){let t=n?this.engine.box(n):void 0;if(!(this.isCanonical||this.isStructural))throw new Error("Not canonical");if(this.isSame(0))return this.engine.NegativeInfinity;if(this.operator==="Exp")return t?this.op1.div(t.ln()):this.op1;if(t&&this.isSame(t))return this.engine.One;if(this.isSame(this.engine.E))return t?this.engine.One.div(t.ln()):this.engine.One;if(this.operator==="Power"){let[i,r]=this.ops;return i.isSame(this.engine.E)?t?r.div(t.ln()):r:r.mul(i.ln(t))}if(this.operator==="Root"){let[i,r]=this.ops;return r.div(i.ln(t))}return this.operator==="Sqrt"?this.op1.ln(t).div(2):this.operator==="Divide"?this.op1.ln(t).sub(this.op2.ln(t)):t&&t.type.matches("finite_integer")?t.re===10?this.engine._fn("Log",[this]):this.engine._fn("Log",[this,t]):this.engine._fn("Ln",[this])}get complexity(){if(this.isCanonical||this.isStructural)return this.operatorDefinition?.complexity??1e5}get baseDefinition(){if(this._def)return xe(this._def)?this._def.operator:this._def.value}get operatorDefinition(){if(this._def)return xe(this._def)?this._def.operator:void 0}get valueDefinition(){if(this._def)return se(this._def)?this._def.value:void 0}get isNumber(){if(!this.type.isUnknown)return L(this.type.type,"number")}get isInteger(){if(!this.type.isUnknown)return L(this.type.type,"integer")}get isRational(){if(!this.type.isUnknown)return L(this.type.type,"rational")}get isReal(){if(!this.type.isUnknown)return L(this.type.type,"real")}get isFunctionExpression(){return!0}get type(){let n=this.isPure&&this._ops.every(t=>t.isConstant)?void 0:this.engine._generation;return lp(this._type,n,()=>new V(OT(this),this.engine._typeResolver))??V.unknown}get shape(){let n=this.type.type;return typeof n=="object"&&n.kind==="list"&&n.dimensions?n.dimensions:[]}get rank(){return this.shape.length}simplify(n){return zn(this,n).at(-1)?.value??this}evaluate(n){return LT(this.engine,this._computeValue(n))()}evaluateAsync(n){return FT(this.engine,this._computeValueAsync(n))()}N(){return this.evaluate({numericApproximation:!0})}solve(n){let t=cs(n??this.unknowns);if(this.operator==="List"||this.operator==="And"){let i=DT(this.engine,this.ops,t);if(i!==null)return i}return this.operator==="Or"?$T(this.ops,t):t.length!==1?null:Bn(this,t[0])}get isCollection(){if(!this.isValid)return!1;let n=this.baseDefinition?.collection;return!n||n.count!==void 0&&n.iterator,n!==void 0}get isIndexedCollection(){return!this.isValid||!this.baseDefinition?.collection?.at?!1:this.type.matches("indexed_collection")}get isLazyCollection(){if(!this.isValid)return!1;let n=this.baseDefinition?.collection;return n?n?.isLazy?.(this)??!1:!1}contains(n){return this.baseDefinition?.collection?.contains?.(this,n)}get count(){return this.operatorDefinition?.collection?.count?.(this)}get isEmptyCollection(){if(this.isCollection)return this.operatorDefinition?.collection?.isEmpty?.(this)}get isFiniteCollection(){if(this.isCollection)return this.operatorDefinition?.collection?.isFinite?.(this)}each(){let n=this.operatorDefinition?.collection?.iterator?.(this);return n?(function*(){let t=n.next();for(;!t.done;)yield t.value,t=n.next()})():(function*(){})()}at(n){return this.operatorDefinition?.collection?.at?.(this,n)}get(n){if(typeof n=="string")return this.operatorDefinition?.collection?.at?.(this,n);if(q(n))return this.operatorDefinition?.collection?.at?.(this,n.string)}indexWhere(n){if(this.operatorDefinition?.collection?.indexWhere)return this.operatorDefinition.collection.indexWhere(this,n);if(!this.isIndexedCollection||!this.isFiniteCollection)return;let t=0;for(let i of this.each()){if(n(i))return t;t+=1}}subsetOf(n,t){return this.operatorDefinition?.collection?.subsetOf?.(this,n,t)??!1}_computeValue(n){return()=>{if(!this.isValid||!this._def)return this;let t=n?.numericApproximation??!1,i=n?.materialization??!1;if(se(this._def))return xy(this,this._def.value,n);let r=this._def.operator,s=this.ops.some(c=>ne(c))&&(this.operator==="Add"||this.operator==="Multiply");if(r.broadcastable&&this.ops.some(c=>Ve(c))&&!s){let c=fc(this._ops);if(!c)return this.engine.Nothing;let f=[];for(;;){let{done:p,value:d}=c.next();if(p)break;f.push(this.engine._fn(this.operator,d).evaluate(n))}return f.length===0?this.engine.Nothing:f.length===1?f[0]:this.engine._fn("List",f)}if(i!==!1&&!r.evaluate&&this.isLazyCollection)return qT(this,r,n);let a=gl(this,c=>c.evaluate(n)),u=this._localScope!==void 0;u&&this.engine._pushEvalContext(this._localScope);let l;try{l=r.evaluate?.(a,{numericApproximation:t,engine:this.engine,materialization:i})}finally{u&&this.engine._popEvalContext()}return l??this.engine.function(this._operator,a)}}_computeValueAsync(n){return async()=>{if(!this.isValid||!this._def)return this;let t=n?.numericApproximation??!1;if(se(this._def))return xy(this,this._def.value,n);let i=this._def.operator,o=this.ops.some(c=>ne(c))&&(this.operator==="Add"||this.operator==="Multiply");if(i?.broadcastable&&this.ops.some(c=>Ve(c))&&!o){let c=fc(this._ops);if(!c)return this.engine.Nothing;let f=[];for(;;){let{done:p,value:d}=c.next();if(p)break;f.push(this.engine._fn(this.operator,d).evaluateAsync(n))}return f.length===0?this.engine.Nothing:f.length===1?f[0]:Promise.all(f).then(p=>this.engine._fn("List",p))}let s=await cy(this,async c=>await c.evaluateAsync(n)),a=this._localScope!==void 0;a&&this.engine._pushEvalContext(this._localScope);let u=this.engine,l;try{let c={numericApproximation:t,engine:u,signal:n?.signal,materialization:n?.materialization};l=i.evaluateAsync?.(s,c)??i.evaluate?.(s,c)}finally{a&&this.engine._popEvalContext()}return Promise.resolve(l).then(c=>c??u.function(this._operator,s))}}};function DT(e,n,t){if(n&&n.every(r=>r.operator==="Equal")){let r=rp([...n],t);if(r&&sa(e,t,r))return r;let o=op([...n],t);if(o){let s=o.filter(a=>sa(e,t,a));if(s.length>0)return s}}let i=["Less","LessEqual","Greater","GreaterEqual"];if(n&&n.every(r=>i.includes(r.operator??""))){let r=ly([...n],t);if(r){let o=r.filter(s=>sa(e,t,s));if(o.length>0)return o}}if(n){let r=n.filter(s=>s.operator==="Equal"),o=n.filter(s=>i.includes(s.operator??""));if(r.length>0&&o.length>0&&r.length+o.length===n.length){let s=rp([...r],t);if(s&&yy(s,o))return sa(e,t,s)?s:null;let a=op([...r],t);if(a){let u=a.filter(l=>yy(l,o)&&sa(e,t,l));if(u.length>0)return u}}}return null}function yy(e,n){return n.every(t=>{let i=t.subs(e,{canonical:!0}).evaluate();return _(i,"True")})}function $T(e,n){if(n.length===1){let r=new Set,o=[];for(let s of e){let a=s.solve(n);if(!(!a||!Array.isArray(a)))for(let u of a){let l=JSON.stringify(u.json);r.has(l)||(r.add(l),o.push(u))}}return o.length>0?o:null}let t=new Set,i=[];for(let r of e){let o=r.solve(n);if(o){if(!Array.isArray(o)){let s=o,a=JSON.stringify(Object.fromEntries(Object.entries(s).map(([u,l])=>[u,l.json])));t.has(a)||(t.add(a),i.push(s));continue}for(let s of o){let a=JSON.stringify(Object.fromEntries(Object.entries(s).map(([u,l])=>[u,l.json])));t.has(a)||(t.add(a),i.push(s))}}}return i.length>0?i:null}function sa(e,n,t){for(let i of n){let r=e.symbol(i).type,o=r.type;if(typeof o!="string"||o==="number"||o==="unknown")continue;let s=t[i]?.evaluate();if(s&&(r.matches("integer")&&s.isInteger===!1||r.matches("rational")&&s.isRational===!1||r.matches("real")&&s.isReal===!1))return!1}return!0}function OT(e){if(!e.isValid)return"error";if(e.operator==="Function"){let i=e.ops[0].type,r=e.ops.slice(1);return Q(`(${r.map(o=>"unknown").join(", ")}) -> ${i}`,e.engine._typeResolver)}let n=e.operatorDefinition;if(n){let t=n.signature instanceof V?n.signature.type:typeof n.signature=="string"?Q(n.signature,e.engine._typeResolver):n.signature,i=jn(t)??"unknown";if(typeof n.type=="function"){let r=n.type(e.ops,{engine:e.engine});r&&(r instanceof V?i=r.type:i=Q(r,e.engine._typeResolver)??i)}else if(e.ops.length>0&&(i==="number"||i==="finite_number")){let r=e.ops.map(o=>o.type.type);if(r.every(o=>typeof o=="string"&&Ii.includes(o))){let o=Se(...r);typeof o=="string"&&L(o,i)&&(i=o)}}return i}return e.valueDefinition?jn(e.valueDefinition.type.type)??"unknown":"unknown"}function LT(e,n){return()=>{if(e._deadline===void 0){e._deadline=Date.now()+e.timeLimit;try{return n()}finally{e._deadline=void 0}}return n()}}function FT(e,n){return async()=>{if(e._deadline===void 0){e._deadline=Date.now()+e.timeLimit;try{return await n()}finally{e._deadline=void 0}}return n()}}function xy(e,n,t){let i=n.isConstant?n.value:e.engine._getSymbolValue(e.operator);if(i&&!i.type.matches("function"))return i.isValid?e.engine.typeError("function",i.type,i.toString()):e;let r=e.ops.map(o=>o.evaluate(t));return!i||i.type.isUnknown?e.engine.function(e.operator,r):ei(i,r)}function qT(e,n,t){if(!e.isValid||t?.materialization===!1)return e;let i=t?.materialization??!1;typeof i=="boolean"&&(i=PT);let r=e.isIndexedCollection,o=e.isFiniteCollection,s=[];if(!e.isEmptyCollection)if(!r||!o){let u=typeof i=="number"?i:i[0],l=e.each();for(let c of l){if(s.length===u){l.next().done||s.push(e.engine.symbol("ContinuationPlaceholder"));break}s.push(c.evaluate(t))}}else{let[u,l]=typeof i=="number"?[Math.ceil(i/2),i-Math.ceil(i/2)]:i,c=1,f=e.each();for(let d of f)if(s.push(d.evaluate(t)),c+=1,c>u)break;let p=e.count;if(p===void 0||p<=u)(p===void 0||s.length<p)&&s.push(e.engine.symbol("ContinuationPlaceholder"));else{let d=Math.max(u+1,p-l+1);for(p>u+l&&s.push(e.engine.symbol("ContinuationPlaceholder")),c=d;c<=p;){let g=e.at(c);if(!g)break;s.push(g.evaluate(t)),c+=1}}}let a=n.collection?.elttype?.(e);return a&&L(a,"tuple<string, any>")?e.engine.function("Dictionary",s):r?e.engine._fn("List",s):e.engine.function("Set",[...s])}var ji=class e extends de{_kind="string";[Symbol.toStringTag]="[BoxedString]";_string;_utf8Buffer;_unicodeScalarValues;constructor(n,t,i){super(n,i),this._string=t.normalize()}get json(){return $n(this._string)&&!nt(this._string)?this._string:`'${this._string}'`}get hash(){return rt("String"+this._string)}get operator(){return"String"}get isPure(){return!0}get isCanonical(){return!0}set isCanonical(n){}get value(){return this}get type(){return V.string}get complexity(){return 19}get string(){return this._string}get buffer(){if(this._utf8Buffer===void 0){let n=new TextEncoder;this._utf8Buffer=n.encode(this._string)}return this._utf8Buffer}get unicodeScalars(){return this._unicodeScalarValues===void 0&&(this._unicodeScalarValues=VT(this._string)),this._unicodeScalarValues}match(n,t){return $t(n)||(n=this.engine.box(n,{form:"raw"})),Ze(n)?{[on(n)]:this}:n instanceof e&&this._string===n._string?{}:null}};function VT(e){let n=[];for(let t=0;t<e.length;t++){let i=e.codePointAt(t);n.push(i),i>65535&&t++}return n}var jo=class e extends de{_kind="dictionary";[Symbol.toStringTag]="[BoxedDictionary]";_keyValues={};_type;constructor(n,t,i){super(n,i?.metadata),t instanceof de?this._initFromExpression(t):this._initFromRecord(t,i)}_initFromRecord(n,t){for(let i in n){if(typeof i!="string")throw new Error(`Dictionary keys must be strings, but got ${typeof i}`);if(i.length===0)throw new Error("Dictionary keys must not be empty strings");this._keyValues[i]=vy(this.engine,n[i],t)}}_initFromExpression(n){if(n instanceof e){Object.assign(this._keyValues,n._keyValues);return}if(n.operator==="Tuple"||n.operator==="Pair"||n.operator==="KeyValuePair"){if(!m(n))return;if(n.nops!==2)throw new Error(`Expected a key/value pair, got ${n.nops} elements`);let[t,i]=n.ops,r;if(q(t))r=t.string;else if(_(t))r=t.symbol;else throw new Error(`Expected a string key, got ${t.type}`);this._keyValues[r]=i.canonical;return}if(n.operator==="Dictionary"){if(!m(n))return;for(let t of n.ops)if(t.operator==="KeyValuePair"||t.operator==="Pair"||t.operator==="Tuple"){if(!m(t))continue;let[i,r]=t.ops,o;if(q(i))o=i.string;else if(_(i))o=i.symbol;else return;this._keyValues[o]=r.canonical}else throw new Error(`Expected a key/value pair, got ${t.type}`);return}}get json(){return{dict:Object.fromEntries(Object.entries(this._keyValues).map(([n,t])=>[n,Ey(t)]))}}toMathJson(n){if(n.shorthands.includes("dictionary"))return this.json;if(this.isEmptyCollection)return{dict:{}};let t={};for(let[i,r]of this.entries)t[i]=r.toMathJson(n);return{dict:t}}get hash(){return rt("Dictionary"+JSON.stringify(this._keyValues))}get operator(){return"Dictionary"}get type(){if(this._type)return this._type;let n=Se(...Object.values(this._keyValues).map(t=>t.type.type));return this._type=this.engine.type(`dictionary<${n}>`),this._type}get isPure(){return!0}get isCanonical(){return!0}set isCanonical(n){}get value(){}get complexity(){return 1e3}get isCollection(){return!0}get isIndexedCollection(){return!1}get isLazyCollection(){return!1}contains(n){}get count(){return Object.keys(this._keyValues).length}get isEmptyCollection(){return Object.keys(this._keyValues).length===0}get isFiniteCollection(){return!0}each(){let n=this.engine;return(function*(t){for(let[i,r]of Object.entries(t._keyValues))yield n.tuple(n.string(i),r)})(this)}get(n){return this._keyValues[n]}has(n){return this._keyValues.hasOwnProperty(n)}get keys(){return Object.keys(this._keyValues)}get entries(){return Object.entries(this._keyValues)}get values(){return Object.values(this._keyValues)}match(n,t){if(Ze(n))return{[on(n)]:this};if(!(n instanceof e))return null;let i=null,r=Object.keys(n._keyValues);for(let o of r){if(!this._keyValues.hasOwnProperty(o))return null;let s=this._keyValues[o],a=n._keyValues[o];if(!s.match(a))return null;if(Ze(n._keyValues[o])){let u=on(n._keyValues[o]);u&&(i={...i??{},[u]:s})}}return i}};function Ey(e){return q(e)?e.string:_(e)?e.symbol==="True"?!0:e.symbol==="False"?!1:{sym:e.symbol}:E(e)&&e.type.matches("real")?e.re:m(e,"List")?e.ops.map(Ey):e.toMathJson({shorthands:[]})}function vy(e,n,t){if(n==null)return e.Nothing;if(n instanceof de)return n;if(typeof n=="string")return e.string(n);if(typeof n=="number")return e.number(n,t);if(typeof n=="boolean")return n?e.True:e.False;let i=t?.canonical===!1?"raw":"canonical";if(Array.isArray(n))return e.function("List",n.map(r=>vy(e,r,t)));if(typeof n=="object"){if("num"in n)return e.number(n.num,t);if("str"in n)return e.string(n.str);if("sym"in n)return e.symbol(n.sym,t);if("fn"in n)return e.box(n,{form:i});if("dict"in n)return new jo(e,n.dict,t)}return e.Nothing}function aa(e){return e===void 0||e==="canonical"?{canonical:!0,structural:!1}:e==="raw"?{canonical:!1,structural:!1}:e==="structural"?{canonical:!1,structural:!0}:{canonical:e,structural:!1}}function cp(e,n,t){if(n instanceof de)return n;if(n=me(n),typeof n=="string")return Kn(e,n,t);if(Array.isArray(n)){let[i,...r]=n;return new je(e,i,r.map(o=>cp(e,o,t)),{canonical:!1})}if(typeof n=="object"){if("fn"in n)return cp(e,n.fn,t);if("str"in n)return new ji(e,n.str);if("sym"in n)return Kn(e,n.sym,t);if("num"in n)return Kn(e,n.num,t)}return Kn(e,n,t)}function hl(e,n,t,i){if(i=i?{...i}:{},"canonical"in i||(i.canonical=!0),!rn(n))throw new Error(`Unexpected operator: "${n}" is not a valid symbol: ${it(n)}`);let r=i.structural??!1;if(n==="Hold")return new je(e,"Hold",[cp(e,t[0],i)],{...i,canonical:!0,structural:r});if(n==="Error"||n==="ErrorCode")return new je(e,n,t.map(s=>e.box(s,{form:"raw"})),{metadata:i?.metadata,canonical:!0});if(n==="Number"&&t.length===1)return Kn(e,t[0],i);if(r===!1&&i.canonical===!0){if((n==="Divide"||n==="Rational")&&t.length===2){let s=Ot(t[0]);if(s!==null){let a=Ot(t[1]);if(a!==null)return a===0n?s===0n?e.NaN:e.ComplexInfinity:e.number([s,a],i)}n="Divide"}if(n==="Complex"){if(t.length===1){let s=t[0];if(s instanceof de&&s.isNumberLiteral)return e.number(e.complex(0,s.re),i);let a=Y(t[0]);return a!==null&&a!==0?e.number(e.complex(0,a),i):e.box(s).mul(e.I)}if(t.length===2){let s=t[0]instanceof de?t[0].re:Y(t[0]),a=t[1]instanceof de?t[1].re:Y(t[1]);return a!==null&&s!==null&&!isNaN(a)&&!isNaN(s)?a===0&&s===0?e.Zero:a!==0?e.number(e._numericValue({re:s,im:a}),i):Kn(e,t[0],i):Kn(e,t[0],i).add(Kn(e,t[1],i).mul(e.I))}throw new Error("Expected one or two arguments with Complex expression")}if(n==="Negate"&&t.length===1){let s=t[0];if(typeof s=="number")return e.number(-s,i);if(s instanceof K)return e.number(s.neg(),i);let a=e.box(s,i);if(E(a)){let u=a.numericValue;return e.number(typeof u=="number"?-u:u.neg(),i)}t=[a]}}return i.canonical===!0?BT(e,n,t,i.metadata,i.scope):Ar(new je(e,n,t.map(s=>Kn(e,s,{canonical:i.canonical,structural:r,scope:i.scope})),{metadata:i.metadata,canonical:!1,structural:r,scope:i.scope}),i.canonical??!1,i.scope)}function Kn(e,n,t){if(n==null)return e.error("missing");if(n instanceof Ee)return zT(e,n);if(n instanceof de)return Ar(n,t?.canonical??!0,t?.scope);t=t?{...t}:{},"canonical"in t||(t.canonical=!0);let i=t.canonical===!0,r=t.structural??!1;if(Array.isArray(n)){if(typeof n[0]!="string")throw new Error(`The first element of an array should be a string (the function name): ${JSON.stringify(n,void 0,4)}`);return Ar(hl(e,n[0],n.slice(1),{canonical:i,structural:r,scope:t?.scope}),t?.canonical??!0,t?.scope)}if(typeof n=="number"||n instanceof K||n instanceof z)return e.number(n);if(typeof n=="string"){if($n(n)){let o=J(n);if(!o||!rn(o))return e.error("invalid-symbol",n);let s=i||t.canonical!==!1;return e.symbol(o,{canonical:s})}return nt(n)?e.number(n):(qa(n),new ji(e,ye(n)))}if(typeof n=="object"){let o=wg(n)?{latex:n.latex,wikidata:n.wikidata}:void 0;if("fn"in n){let[s,...a]=n.fn;return Ar(hl(e,s,a,{canonical:i,structural:r,metadata:o}),t.canonical,t.scope)}if("str"in n)return new ji(e,n.str,o);if("sym"in n)return e.symbol(n.sym,{canonical:i,metadata:o});if("num"in n)return e.number(n,{canonical:i,metadata:o});if("dict"in n)return new jo(e,n.dict,{canonical:i});throw new Error(`Unexpected MathJSON object: ${JSON.stringify(n,void 0,4)}`)}return e.symbol("Undefined")}function BT(e,n,t,i,r){let o=JT(e,n,t,i,r);if(o)return o;if(n==="List"){let f=t.map(d=>e.box(d,{form:"raw"})),p=Ch("List",f);return p&&p.dtype?new gs(e,{ops:lt(e,f,r),shape:p.shape,dtype:p.dtype},{metadata:i}):new je(e,"List",lt(e,f,r),{canonical:!0})}if(n==="Dictionary"){let f=t.map(p=>e.box(p,{form:"raw"}));return new jo(e,e._fn("Dictionary",f),{canonical:!0})}let s=e.lookupDefinition(n);if(!s)return e.declare(n,{type:"function",inferred:!0}),new je(e,n,be(Or(e,t)),{metadata:i,canonical:!0});if(se(s))return new je(e,n,be(Or(e,t)),{metadata:i,canonical:!0});let a=s.operator;if(r??=a.scoped?{parent:e.context.lexicalScope,bindings:new Map}:void 0,a.lazy){let f=t.map(p=>e.box(p,{form:"raw"}));if(a.canonical){try{if(o=a.canonical(f,{engine:e,scope:r}),o)return o}catch(p){console.error(p.message)}return o=new je(e,n,f,{metadata:i,canonical:!1}),o}return o=new je(e,n,a.inferredSignature?f:po(e,f,a.signature.type,a.lazy,a.broadcastable)??f,{metadata:i,canonical:!0,scope:r}),o}let u=t.map(f=>e.box(f));if(a.canonical){try{let p=a.canonical(u,{engine:e,scope:r});if(p)return p}catch(p){console.error(p.message)}return new je(e,n,u,{metadata:i,canonical:!1})}let l=be(u,a.associative?n:void 0),c=a.inferredSignature?null:po(e,l,a.signature.type,a.lazy,a.broadcastable);if(c)return new je(e,n,c,{metadata:i,canonical:!0,scope:r});if(l.length===1&&l[0].operator===n){if(a.involution&&m(l[0]))return l[0].op1;if(a.idempotent&&m(u[0]))return new je(e,n,u[0].ops,{metadata:i,canonical:!0,scope:r})}return new je(e,n,ys(n,l),{metadata:i,canonical:!0,scope:r})}function JT(e,n,t,i,r){let o=[];if(n==="Add"||n==="Multiply")o=In(e,Or(e,t,r),{flatten:n});else if(n==="Negate"||n==="Square"||n==="Sqrt"||n==="Exp")o=In(e,Or(e,t,r),1);else if(n==="Ln"||n==="Log")o=In(e,Or(e,t,r)),o.length===0&&(o=[e.error("missing")]);else if(n==="Power"||n==="Root")o=In(e,Or(e,t,r),2);else if(n==="Divide")o=In(e,Or(e,t,r)),o.length===0&&(o=[e.error("missing"),e.error("missing")]),o.length===1&&(o=[o[0],e.error("missing")]);else return null;if(!o.every(s=>s.isValid))return new je(e,n,o,{metadata:i,canonical:!0});if(n==="Add")return ut(e,o);if(n==="Negate")return eb(o[0]);if(n==="Multiply")return cn(e,o);if(n==="Divide")return o.length===2?_t(...o):o.slice(1).reduce((s,a)=>_t(s,a),o[0]);if(n==="Exp")return oi(e.E,o[0]);if(n==="Square")return oi(o[0],e.number(2));if(n==="Power")return oi(o[0],o[1]);if(n==="Root")return yr(o[0],o[1]);if(n==="Sqrt")return yr(o[0],2);if(n==="Ln"||n==="Log"){if(o.length>0){if(o[0].isSame(1))return e.Zero;if(o.length===1)return new je(e,n,o,{metadata:i,canonical:!0})}return new je(e,"Log",o,{metadata:i,canonical:!0})}return null}function zT(e,n){if(n.isZero)return e.Zero;if(n.isOne)return e.One;if(n.isNegativeOne)return e.NegativeOne;if(n.isNaN)return e.NaN;if(n.isNegativeInfinity)return e.NegativeInfinity;if(n.isPositiveInfinity)return e.PositiveInfinity;if(n=n.asExact??n,!n.isExact){let o=n.im;return o===0?e.number(n.bignumRe??n.re):n.re===0?e.number(e.complex(0,o)):n.bignumRe!==void 0&&!Er(n.bignumRe)?ut(e,[e.number(n.bignumRe),e.number(e.complex(0,o))]):e.number(e.complex(n.re,n.im))}let t=[],i=n;if(i.sign!==0)if(i.radical===1)t.push(e.number(i.rational));else{let o=i.rational,s=e.function("Sqrt",[e.number(i.radical)]);if(En(o))t.push(s);else{let[a,u]=o;u===1?a===1?t.push(s):t.push(e.function("Multiply",[e.number(a),s])):a===1?t.push(e.function("Divide",[s,e.number(u)])):t.push(e.function("Divide",[e.function("Multiply",[e.number(a),s]),e.number(u)]))}}let r;return n.im===0?t.length===0?e.Zero:(r=t.length===1?t[0]:cn(e,t),r):t.length===0?e.number(e.complex(0,n.im)):(r=t.length===1?t[0]:cn(e,t),ut(e,[r,e.number(e.complex(0,n.im))]))}function Or(e,n,t){return n.every(i=>i instanceof de&&i.isCanonical)?n:n.map(i=>e.box(i,{scope:t}))}var Sy;function Ty(e){Sy=e}function _y(e,n,t,i,r){if(E(n)&&n.isNegative){let o=n.numericValue;if(typeof o=="number")return ue(e,"Subtract",[t,e.number(-o)],i,r);if(n.type.matches("rational"))return ue(e,"Subtract",[t,e.number(o.neg())],i,r)}return n.operator==="Negate"&&t.operator!=="Negate"&&m(n)?ue(e,"Subtract",[t,n.op1],i,r):null}function UT(e,n,t,i,r){let o=i.exclude;if(n==="Add"&&t.length===2&&!o.includes("Subtract")){let s=_y(e,t[0],t[1],i,r)??_y(e,t[1],t[0],i,r);if(s)return s}if(n==="Divide"&&t.length===2&&o.includes("Divide"))return ue(e,"Multiply",[t[0],e._fn("Power",[t[1],e.NegativeOne])],i,r);if(n==="Multiply"&&!o.includes("Negate")&&t[0].im===0&&t[0].re===-1)return t.length===2?ue(e,"Negate",[t[1]],i):ue(e,"Negate",[e._fn("Multiply",[...t.slice(1)].sort(ze))],i,r);if(n==="Multiply"&&!o.includes("Divide")){let s=new Sy(e,t,{canonical:!1}).asRationalExpression();if(s.operator==="Divide"){let a=s.ops;return ue(e,s.operator,a,i,r)}}if(n==="Power"){if(!o.includes("Exp")&&_(t[0],"ExponentialE"))return ue(e,"Exp",[t[1]],i,r);if(E(t[1])){let s=W(t[1]);if(s===2&&!o.includes("Square"))return ue(e,"Square",[t[0]],i,r);if(s!==null&&s<0&&!o.includes("Divide"))return ue(e,"Divide",[e.One,s===-1?t[0]:t[0].pow(-s)],i,r);let a=t[1].re;if(!o.includes("Sqrt")&&a===.5)return ue(e,"Sqrt",[t[0]],i,r);if(!o.includes("Sqrt")&&a===-.5)return ue(e,"Divide",[e.One,e._fn("Sqrt",[t[0]])],i,r);if(Rt(a)){let u=ah(a),l=uh(a);if(u===1){if(!o.includes("Sqrt")&&l===2)return ue(e,"Sqrt",[t[0]],i,r);if(!o.includes("Root"))return ue(e,"Root",[t[0],e.number(a[1])],i,r)}if(u===-1){if(!o.includes("Sqrt")&&l===2)return ue(e,"Divide",[e.One,e._fn("Sqrt",[t[0]])],i,r);if(!o.includes("Root"))return ue(e,"Divide",[e.One,e._fn("Root",[t[0],e.number(a[1])])],i,r)}}}}if(n==="Add"&&t.length===2&&!o.includes("Subtract")){if(E(t[1])){let s=W(t[1]);if(s!==null&&s<0)return ue(e,"Subtract",[t[0],e.number(-s)],i,r)}if(m(t[1],"Negate"))return ue(e,"Subtract",[t[0],t[1].op1],i,r)}if(n==="Tuple"){if(t.length===1&&!o.includes("Single"))return ue(e,"Single",t,i,r);if(t.length===2&&!o.includes("Pair"))return ue(e,"Pair",t,i,r);if(t.length===3&&!o.includes("Triple"))return ue(e,"Triple",t,i,r)}if(n==="Function"&&t.length>0&&m(t[0],"Block")){let s=t[0];if(s.nops===1){let a=t.slice(1);return a.every(u=>_(u)&&/_\d?/.test(u.symbol))?m(s.op1)&&s.op1.ops?.every((u,l)=>_(u)&&_(a[l])&&u.symbol===a[l].symbol)?ue(e,"Function",[e.symbol(s.op1.operator,{canonical:!1})],i,r):ue(e,"Function",[s.op1],i,r):ue(e,"Function",[s.op1,...t.slice(1)],i,r)}}return ue(e,n,t,i,r)}function ue(e,n,t,i,r){let o=i.exclude;if(n==="Negate"&&t.length===1&&E(t[0])){let l=t[0].numericValue;if(l!==void 0){if(typeof l=="number")return dt(e,-l,i);if(l instanceof K||l instanceof z)return dt(e,l.neg(),i);if(Rt(l))return dt(e,dr(l),i)}}if(typeof n=="string"&&o.includes(n)){if(n==="Rational"&&t.length===2)return ue(e,"Divide",t,i,r);if(n==="Complex"&&t.length===2)return ue(e,"Add",[t[0],e._fn("Multiply",[t[1]??e.symbol("Undefined"),e.I])],i,r);if(n==="Sqrt"&&t.length===1)return ue(e,"Power",[t[0],o.includes("Half")?e.number([1,2]):e.Half],i,r);if(n==="Root"&&t.length===2&&E(t[1])){let l=W(t[1]);if(l===2)return ue(e,"Sqrt",[t[0]],i);if(l!==null)return l<0?ue(e,"Divide",[e.One,e._fn("Power",[t[0]??e.symbol("Undefined"),e.number([1,-l])])],i,r):ue(e,"Power",[t[0],e.number([1,-l])],i,r)}if(n==="Square"&&t.length===1)return ue(e,"Power",[t[0],e.number(2)],i,r);if(n==="Exp"&&t.length===1)return ue(e,"Power",[e.E,t[0]],i,r);if(n==="Pair"||n=="Single"||n==="Triple")return ue(e,"Tuple",t,i,r);if(n==="Subtract"&&t.length===2)return ue(e,"Add",[t[0],e._fn("Negate",[t[1]??e.symbol("Undefined")])],i,r);if(n==="Subtract"&&t.length===1)return ue(e,"Negate",t,i,r)}let a=[n,...t.map(l=>l?fp(e,l,i):"Undefined")],u={...r??{}};return i.metadata.includes("latex")?u.latex=u.latex??e.box({fn:a}).latex:u.latex="",i.metadata.includes("wikidata")||(u.wikidata=""),!u.latex&&!u.wikidata&&i.shorthands.includes("function")?a:u.latex&&u.wikidata?{fn:a,latex:u.latex,wikidata:u.wikidata}:u.latex?{fn:a,latex:u.latex}:u.wikidata?{fn:a,wikidata:u.wikidata}:{fn:a}}function jT(e,n){return e=e,n.shorthands.includes("string")?nt(e)||$n(e)?`'${e}'`:e:{str:e}}function Gi(e,n,t,i){if(n==="Half"&&t.exclude.includes("Half"))return dt(e,[1,2],t,i);if(i={...i},t.metadata.includes("latex")?(i.latex=i.latex??e.box({sym:n}).latex,i.latex!==void 0&&(i.latex=i.latex)):i.latex=void 0,t.metadata.includes("wikidata")){if(i.wikidata===void 0){let r=e.lookupDefinition(n);if(r){let o=xe(r)?r.operator.wikidata:r.value.wikidata;o!==void 0&&(i.wikidata=o)}}}else i.wikidata=void 0;return n=n,i.latex===void 0&&i.wikidata===void 0&&t.shorthands.includes("symbol")?$n(n)?n:`\`${n}\``:i.latex!==void 0&&i.wikidata!==void 0?{sym:n,latex:i.latex,wikidata:i.wikidata}:i.latex!==void 0?{sym:n,latex:i.latex}:i.wikidata!==void 0?{sym:n,wikidata:i.wikidata}:{sym:n}}function Ny(e,n){if(!n.repeatingDecimal)return e;let[t,i,r,o]=e.match(/^(.*)\.([0-9]+)([e|E][-+]?[0-9]+)?$/)??[];if(!r)return e.toLowerCase();let s=r[r.length-1];r=r.slice(0,-1);let a=16,u="";for(let l=0;l<r.length-a;l++){u=r.substring(0,l);for(let c=0;c<=a;c++){let f=r.substring(l,l+c+1),p=Math.floor((r.length-u.length)/f.length);if(p<3)break;if((u+f.repeat(p+1)).startsWith(r))return f==="0"?s==="0"?i+"."+u+(o??""):e:i+"."+u+"("+f+")"+(o??"")}}for(r+=s;r.endsWith("0");)r=r.slice(0,-1);return typeof n.fractionalDigits=="number"&&(r=r.slice(0,n.fractionalDigits)),o?`${i}.${r}${o.toLowerCase()}`:`${i}.${r}`}function dt(e,n,t,i){i={...i},t.metadata.includes("latex")||(i.latex=void 0);let r=i.latex===void 0&&i.wikidata===void 0&&!t.metadata.includes("latex")&&t.shorthands.includes("number"),o=t.exclude;if(n instanceof Ee){if(n.isNaN)return Gi(e,"NaN",t,i);if(n.isPositiveInfinity)return Gi(e,"PositiveInfinity",t,i);if(n.isNegativeInfinity)return Gi(e,"NegativeInfinity",t,i);if(n.isComplexInfinity)return Gi(e,"ComplexInfinity",t,i);if(r){if(n.isZero)return 0;if(n.isOne)return 1;if(n.isNegativeOne)return-1}if(n instanceof we){n.im;let u=l=>mr(l)?dt(e,n.rational[0],t):["Rational",dt(e,n.rational[0],t),dt(e,n.rational[1],t)];return n.radical===1?u(n.rational):En(n.rational)?["Sqrt",n.radical]:us(n.rational)?["Negate",["Sqrt",n.radical]]:n.rational[0]==1?["Divide",["Sqrt",n.radical],dt(e,n.rational[1],t)]:n.rational[0]==-1?["Negate",["Divide",["Sqrt",n.radical],dt(e,n.rational[1],t)]]:["Multiply",u(n.rational),["Sqrt",n.radical]]}if(n.im===0){let u=n.bignumRe??n.re;return dt(e,u,t,i)}return Number.isFinite(n.im)?ue(e,"Complex",[e.number(n.bignumRe??n.re),e.number(n.im)],t,{...i,wikidata:"Q11567"}):Gi(e,"ComplexInfinity",t,i)}let s="";if(n instanceof K){let u;if(n.isNaN())u="NaN";else if(!n.isFinite())u=n.isPositive()?"PositiveInfinity":"NegativeInfinity";else{if(r&&Er(n))return n.toNumber();if(n.isInteger()&&n.e<n.precision()+4)s=n.toFixed(0);else{let l=t.fractionalDigits,c;if(l==="max"?c=n.toString():l==="auto"?c=n.toPrecision(e.precision):c=n.toDecimalPlaces(l).toString(),s=Ny(c,t),r){let f=n.toNumber();if(f.toString()===s)return f}}}return t.metadata.includes("latex")&&(i.latex=i.latex??e.box(u??{num:s}).latex),u?i.latex!==void 0?{sym:u,latex:i.latex}:r?u:{sym:u}:i.latex!==void 0?{num:s,latex:i.latex}:r?s:{num:s}}if(n instanceof z)return n.isInfinite()?Gi(e,"ComplexInfinity",t,i):n.isNaN()?(s="NaN",t.metadata.includes("latex")&&(i.latex=i.latex??e.box({num:s}).latex),i.latex!==void 0?{num:s,latex:i.latex}:{num:s}):ue(e,"Complex",[e.number(n.re),e.number(n.im)],t,{...i,wikidata:"Q11567"});if(Rt(n)){let u=!o.includes("Rational");return r&&t.shorthands.includes("function")&&xn(n)?n[0]===1&&n[1]===2&&!o.includes("Half")?Gi(e,"Half",t,i):[u?"Rational":"Divide",n[0],n[1]]:ue(e,u?"Rational":"Divide",[e.number(n[0]),e.number(n[1])],t,{...i})}if(typeof n=="bigint")if(n>=Number.MIN_SAFE_INTEGER&&n<=Number.MAX_SAFE_INTEGER)n=Number(n);else return t.metadata.includes("latex")&&(i.latex=i.latex??e.box({num:n.toString()}).latex),i.latex!==void 0?{num:n.toString(),latex:i.latex}:r?_n(n,t.fractionalDigits):{num:an(n,t.fractionalDigits)};let a;return Number.isNaN(n)?a="NaN":Number.isFinite(n)?s=Ny(n.toString(),t):a=n>0?"PositiveInfinity":"NegativeInfinity",t.metadata.includes("latex")&&(i.latex=i.latex??e.box({num:s}).latex),a?i.latex!==void 0?{sym:a,latex:i.latex}:r?a:{sym:a}:i.latex!==void 0?{num:s,latex:i.latex}:r&&s===n.toString()?n:{num:s}}function fp(e,n,t){let i=n.wikidata;if(E(n))return dt(e,n.numericValue,t,{latex:n.verbatimLatex});if(n.rank>0)return n.json;if(n.type.matches("dictionary"))return n.toMathJson(t);if(q(n))return jT(n.string,t);if(_(n))return Gi(e,n.symbol,t,{latex:n.verbatimLatex,wikidata:i});if(m(n)){let r=n.structural,o=m(r)?r.ops:[];return n.isValid&&(n.isCanonical||n.isStructural)&&t.prettify?UT(e,n.operator,o,t,{latex:n.verbatimLatex,wikidata:i}):ue(e,n.operator,o,t,{latex:n.verbatimLatex,wikidata:i})}return n.json}var C=class e{static compile(n,t,i=0){if(n===void 0)return"";if(!n.isValid)throw new Error(`Cannot compile invalid expression: "${n.toString()}"`);if(_(n)){let r=n.symbol,o=t.operators?.(r);return o!==void 0?`(a,b) => a ${o[0]} b`:t.var?.(r)??r}if(E(n)){if(n.im!==0){if(!t.complex)throw new Error("Complex numbers are not supported by this target");return t.complex(n.re,n.im)}return t.number(n.re)}if(q(n))return t.string(n.string);if(!m(n))throw new Error(`Cannot compile expression: "${n.toString()}"`);return e.compileExpr(n.engine,n.operator,n.ops,i,t)}static compileExpr(n,t,i,r,o){if(t==="Error")throw new Error("Error");if(t==="Sequence")return i.length===0?"":`(${i.map(u=>e.compile(u,o,r)).join(", ")})`;if(t==="Sum"||t==="Product"){let u=o.functions?.(t);return typeof u=="function"?u(i,l=>e.compile(l,o),o):typeof u=="string"?`${u}(${i.map(l=>e.compile(l,o)).join(", ")})`:e.compileLoop(t,i,o)}let s=o.operators?.(t);if(s!==void 0&&!i.some(l=>e.isComplexValued(l))){if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s[0]))return`${s[0]}(${i.map(c=>e.compile(c,o)).join(", ")})`;if(i.every(c=>!c.isCollection)){if(Gn(t)&&i.length>2){let f=[];for(let p=0;p<i.length-1;p++)f.push(e.compileExpr(n,t,[i[p],i[p+1]],s[1],o));return`(${f.join(") && (")})`}let c;return i.length===1?c=`${s[0]}${e.compile(i[0],o,s[1])}`:c=i.map(f=>e.compile(f,o,s[1])).join(` ${s[0]} `),s[1]<r?`(${c})`:c}}if(t==="Function"){let u=o.functions?.(t);if(typeof u=="function")return u(i,c=>e.compile(c,o),o);let l=i.slice(1).map(c=>_(c)?c.symbol:"_");return`((${l.join(", ")}) => ${e.compile(i[0].canonical,{...o,var:c=>l.includes(c)?c:o.var(c)})})`}if(t==="Declare"){let u=_(i[0])?i[0].symbol:"_";return o.declare?o.declare(u):`let ${u}`}if(t==="Assign")return`${_(i[0])?i[0].symbol:"_"} = ${e.compile(i[1],o)}`;if(t==="Return")return`return ${e.compile(i[0],o)}`;if(t==="Break")return"break";if(t==="Continue")return"continue";if(t==="Loop"){let u=o.functions?.(t);return typeof u=="function"?u(i,l=>e.compile(l,o),o):e.compileForLoop(i,o)}if(t==="If"){if(i.length!==3)throw new Error("If: wrong number of arguments");let u=o.functions?.(t);return u?typeof u=="function"?u(i,l=>e.compile(l,o),o):`${u}(${i.map(l=>e.compile(l,o)).join(", ")})`:`((${e.compile(i[0],o)}) ? (${e.compile(i[1],o)}) : (${e.compile(i[2],o)}))`}if(t==="Which"){if(i.length<2||i.length%2!==0)throw new Error("Which: expected even number of arguments (condition/value pairs)");let u=o.functions?.(t);if(u)return typeof u=="function"?u(i,c=>e.compile(c,o),o):`${u}(${i.map(c=>e.compile(c,o)).join(", ")})`;let l=c=>{if(c>=i.length)return"NaN";let f=i[c],p=i[c+1];return _(f,"True")?`(${e.compile(p,o)})`:`((${e.compile(f,o)}) ? (${e.compile(p,o)}) : ${l(c+2)})`};return l(0)}if(t==="Block")return e.compileBlock(i,o);let a=o.functions?.(t);if(!a)throw new Error(`Unknown operator \`${t}\``);if(typeof a=="function"){let u=n.lookupDefinition(t);if(xe(u)&&u.operator.broadcastable&&i.length===1&&Ve(i[0])){let l=e.tempVar();return`(${e.compile(i[0],o)}).map((${l}) => ${a([i[0].engine.box(l)],c=>e.compile(c,o),o)})`}return a(i,l=>e.compile(l,o),o)}return`${a}(${i.map(u=>e.compile(u,o)).join(", ")})`}static compileBlock(n,t){let i=[];for(let a of n)if(m(a,"Declare")){let u=a.ops[0];_(u)&&i.push(u.symbol)}if(n.length===1&&i.length===0)return e.compile(n[0],t);let r={};if(t.declare&&t.language){let a=t.language==="wgsl";for(let u of i)for(let l of n)if(m(l,"Assign")&&_(l.ops[0],u)){e.isComplexValued(l.ops[1])&&(r[u]=a?"vec2f":"vec2");break}}let o={...t,var:a=>i.includes(a)?a:t.var(a)},s=n.filter(a=>!_(a,"Nothing")).map(a=>m(a,"Declare")&&_(a.ops[0])&&t.declare?t.declare(a.ops[0].symbol,r[a.ops[0].symbol]):e.compile(a,o)).filter(a=>a!=="");return s.length===0?"":t.block?t.block(s):(s[s.length-1]=`return ${s[s.length-1]}`,`(() => {${t.ws(`
|
|
92
|
+
`)}${s.join(`;${t.ws(`
|
|
93
|
+
`)}`)}${t.ws(`
|
|
94
|
+
`)}})()`)}static compileForLoop(n,t){if(!n[0])throw new Error("Loop: no body");if(!n[1])throw new Error("Loop: no indexing set");let i=n[1];if(!m(i,"Element"))throw new Error("Loop: expected Element(index, Range(lo, hi))");let r=i.ops[0],o=i.ops[1];if(!_(r))throw new Error("Loop: index must be a symbol");if(!m(o,"Range"))throw new Error("Loop: expected Range(lo, hi)");let s=r.symbol,a=Math.floor(o.ops[0].re),u=Math.floor(o.ops[1].re);if(!Number.isFinite(a)||!Number.isFinite(u))throw new Error("Loop: bounds must be finite numbers");let l=t.number(0)!=="0",c={...t,var:p=>p===s?l?t.number(0).replace("0",s):s:t.var(p)},f=e.compileLoopBody(n[0],c);return`(() => {${t.ws(`
|
|
95
|
+
`)}for (let ${s} = ${a}; ${s} <= ${u}; ${s}++) {${t.ws(`
|
|
96
|
+
`)}${f}${t.ws(`
|
|
97
|
+
`)}}${t.ws(`
|
|
98
|
+
`)}})()`}static compileLoopBody(n,t){if(_(n,"Nothing"))return"";if(!m(n))return e.compile(n,t);let i=n.operator;if(i==="Break")return"break";if(i==="Continue")return"continue";if(i==="Return")return`return ${e.compile(n.ops[0],t)}`;if(i==="If"){let r=e.scalarConditionTarget(t),o=e.compile(n.ops[0],r),s=e.compileLoopBody(n.ops[1],t);if(n.ops.length>2){let a=e.compileLoopBody(n.ops[2],t);if(a)return`if (${o}) { ${s} } else { ${a} }`}return`if (${o}) { ${s} }`}return i==="Block"?n.ops.map(r=>e.compileLoopBody(r,t)).join("; "):e.compile(n,t)}static scalarConditionTarget(n){let t={Less:["<",20],Greater:[">",20],LessEqual:["<=",20],GreaterEqual:[">=",20],Equal:["===",20],NotEqual:["!==",20],And:["&&",6],Or:["||",5],Not:["!",16]};return n.number(0)==="0"?n:{...n,number:i=>String(i),var:i=>{let r=n.var(i);if(!r)return;let o=r.match(/^_IA\.point\((.+)\)$/);return o?o[1]:r},operators:i=>t[i]??n.operators?.(i),functions:i=>{if(!(i in t))return n.functions?.(i)}}}static compileLoop(n,t,i){if(!t[0])throw new Error("Sum/Product: no body");let{index:r,lower:o,upper:s,isFinite:a}=Ru(t[1]),u=n==="Sum",l=u?"+":"*",c=e.isComplexValued(t[0]);if(!r){let d=e.tempVar(),g=e.tempVar(),h=e.compile(t[0],i);return c?u?`${h}.reduce((${g}, ${d}) => ({ re: ${g}.re + ${d}.re, im: ${g}.im + ${d}.im }), { re: 0, im: 0 })`:`${h}.reduce((${g}, ${d}) => ({ re: ${g}.re * ${d}.re - ${g}.im * ${d}.im, im: ${g}.re * ${d}.im + ${g}.im * ${d}.re }), { re: 1, im: 0 })`:`${h}.reduce((${g}, ${d}) => ${g} ${l} ${d}, ${u?"0":"1"})`}let f=e.compile(t[0],{...i,var:d=>d===r?r:i.var(d)}),p=e.tempVar();if(c){let d=e.tempVar();return u?`(() => {
|
|
99
|
+
let ${p} = { re: 0, im: 0 };
|
|
100
|
+
let ${r} = ${o};
|
|
101
|
+
while (${r} <= ${s}) {
|
|
102
|
+
const ${d} = ${f};
|
|
103
|
+
${p} = { re: ${p}.re + ${d}.re, im: ${p}.im + ${d}.im };
|
|
104
|
+
${r}++;
|
|
105
|
+
}
|
|
106
|
+
return ${p};
|
|
107
|
+
})()`:`(() => {
|
|
108
|
+
let ${p} = { re: 1, im: 0 };
|
|
109
|
+
let ${r} = ${o};
|
|
110
|
+
while (${r} <= ${s}) {
|
|
111
|
+
const ${d} = ${f};
|
|
112
|
+
${p} = { re: ${p}.re * ${d}.re - ${p}.im * ${d}.im, im: ${p}.re * ${d}.im + ${p}.im * ${d}.re };
|
|
113
|
+
${r}++;
|
|
114
|
+
}
|
|
115
|
+
return ${p};
|
|
116
|
+
})()`}return`(() => {
|
|
117
|
+
let ${p} = ${u?"0":"1"};
|
|
118
|
+
let ${r} = ${o};
|
|
119
|
+
while (${r} <= ${s}) {
|
|
120
|
+
${p} ${l}= ${f};
|
|
121
|
+
${r}++;
|
|
122
|
+
}
|
|
123
|
+
return ${p};
|
|
124
|
+
})()`}static isComplexValued(n){if(E(n))return n.im!==0;if(_(n)){if(n.symbol==="ImaginaryUnit")return!0;let t=n.type;return t?t.matches("complex")&&!t.matches("real"):!1}if(m(n)){let t=n.operator;return t==="Abs"||t==="Arg"||t==="Re"||t==="Im"?!1:n.ops.some(i=>e.isComplexValued(i))}return!1}static tempVar(){return`_${Math.random().toString(36).substring(4)}`}static inlineExpression(n,t){if(/^[\p{L}_][\p{L}\p{N}_]*$/u.test(t)||/^[0-9]+$/.test(t))return new Function("x",`return \`${n}\`;`)(t);{let r=e.tempVar();return new Function("x",`return \`(() => { const ${r} = \${x}; return ${n.replace(/\\\${x}/g,r)}; })()\`;`)(t)}}};function Zi(e){return typeof e=="object"&&e!==null}function Iy(e){return typeof e=="number"&&Number.isFinite(e)}function wy(e,n){if(typeof e!="string")throw new Error(`${n.kind} name must be a string`);if(e.length===0)throw new Error(`${n.kind} name must not be empty`);if(e.trim()!==e)throw new Error(`${n.kind} name must not include leading or trailing whitespace`);if(/\s/u.test(e))throw new Error(`${n.kind} name must not include whitespace`);return e}function My(e){return wy(e,{kind:"compilation target"})}function ky(e){return wy(e,{kind:"library"})}var GT=["getOperators","getFunctions","createTarget","compile"];function Cy(e){if(!Zi(e))throw new Error("Invalid compilation target: expected an object implementing LanguageTarget");for(let n of GT)if(typeof e[n]!="function")throw new Error(`Invalid compilation target: missing required method "${n}()"`)}function ZT(e,n){if(e===void 0)return;if(!Array.isArray(e))throw new Error(`Invalid library "${n}": "requires" must be an array of library names`);let t=new Set;for(let i of e){let r;try{r=ky(i)}catch(o){throw new Error(`Invalid library "${n}": ${o.message}`)}if(t.has(r))throw new Error(`Invalid library "${n}": duplicate dependency "${r}"`);t.add(r)}}function HT(e,n){if(e===void 0)return;let t=Array.isArray(e)?e:[e];for(let i of t)if(!Zi(i)||Array.isArray(i))throw new Error(`Invalid library "${n}": "definitions" must be an object or an array of objects`)}function WT(e,n){if(e!==void 0&&!Array.isArray(e))throw new Error(`Invalid library "${n}": "latexDictionary" must be an array`)}function Ay(e){if(!Zi(e)||Array.isArray(e))throw new Error('Invalid library definition: expected an object with at least a "name" field');let n=ky(e.name);ZT(e.requires,n),HT(e.definitions,n),WT(e.latexDictionary,n)}function YT(e){if(!Zi(e))throw new Error("Invalid compile target: expected an object");if(typeof e.var!="function")throw new Error('Invalid compile target: missing required method "var()"');if(typeof e.string!="function")throw new Error('Invalid compile target: missing required method "string()"');if(typeof e.number!="function")throw new Error('Invalid compile target: missing required method "number()"');if(typeof e.ws!="function")throw new Error('Invalid compile target: missing required method "ws()"');if(typeof e.preamble!="string")throw new Error('Invalid compile target: "preamble" must be a string');if(!Iy(e.indent))throw new Error('Invalid compile target: "indent" must be a finite number');if(e.operators!==void 0&&typeof e.operators!="function")throw new Error('Invalid compile target: "operators" must be a function');if(e.functions!==void 0&&typeof e.functions!="function")throw new Error('Invalid compile target: "functions" must be a function');if(e.language!==void 0&&typeof e.language!="string")throw new Error('Invalid compile target: "language" must be a string')}function QT(e,n){if(n!==void 0&&(!Array.isArray(n)||n.length!==2||typeof n[0]!="string"||!Iy(n[1])))throw new Error(`Invalid compilation option "operators.${e}": expected [string, number]`)}function XT(e){if(e!==void 0&&typeof e!="function"){if(!Zi(e)||Array.isArray(e))throw new Error('Invalid compilation option "operators": expected a function or a record');for(let[n,t]of Object.entries(e))QT(n,t)}}function KT(e){if(e!==void 0){if(!Zi(e)||Array.isArray(e))throw new Error('Invalid compilation option "functions": expected a record');for(let[n,t]of Object.entries(e))if(typeof t!="string"&&typeof t!="function")throw new Error(`Invalid compilation option "functions.${n}": expected a string or function`)}}function e3(e){if(e!==void 0){if(!Zi(e)||Array.isArray(e))throw new Error('Invalid compilation option "vars": expected a record');for(let[n,t]of Object.entries(e))if(typeof t!="string")throw new Error(`Invalid compilation option "vars.${n}": expected a string`)}}function n3(e){if(e!==void 0&&!Array.isArray(e))throw new Error('Invalid compilation option "imports": expected an array')}function Ry(e){if(e!==void 0){if(!Zi(e)||Array.isArray(e))throw new Error("Invalid compilation options: expected an object");if(e.to!==void 0&&typeof e.to!="string")throw new Error('Invalid compilation option "to": expected a string');if(e.target!==void 0&&YT(e.target),XT(e.operators),KT(e.functions),e3(e.vars),n3(e.imports),e.preamble!==void 0&&typeof e.preamble!="string")throw new Error('Invalid compilation option "preamble": expected a string');if(e.fallback!==void 0&&typeof e.fallback!="boolean")throw new Error('Invalid compilation option "fallback": expected a boolean')}}function Go(e,n){Ry(n);try{if(n?.target){let r=C.compile(e,n.target);return{target:n.target.language??"custom",success:!0,code:r}}let t=n?.to??"javascript",i=e.engine.getCompilationTarget(t);if(!i)throw new Error(`Compilation target "${t}" is not registered. Available targets: ${e.engine.listCompilationTargets().join(", ")}`);return i.compile(e,{operators:n?.operators,functions:n?.functions,vars:n?.vars,imports:n?.imports,preamble:n?.preamble,realOnly:n?.realOnly})}catch(t){if(n?.fallback??!0)return console.warn(`Compilation fallback for "${e.operator}": ${t.message}`),{target:n?.to??"javascript",success:!1,code:"",calling:"expression",run:ki(e)};throw t}}vg(Ne);yh(Ne);bh(fp);Ty(qn);yg(Go);Eh($e);vh(ae);Nh(Bn);function Py(e){let n={And:xu,Or:Eu,Not:vu,Equivalent:_u,Implies:Nu,Xor:Su,Nand:Tu,Nor:Iu}[e.operator];if(!n||!m(e))return;let t=n(e.ops,{engine:e.engine});if(t)return{value:t,because:"logic"}}function Dy(e){if(!m(e,"Sum"))return;let n=e.op1,t=e.op2;if(!n||!m(t,"Limits"))return;let i=v(t.op1),r=t.op2,o=t.op3;if(!i||!r||!o)return;let s=e.engine;if(n.operator==="Sum"||n.operator==="Product"){let u=n.simplify();if(!u.isSame(n))return{value:s.function("Sum",[u,t]),because:"simplified nested sum/product"}}if(E(r)&&E(o)){let u=r.numericValue,l=o.numericValue;if(typeof u=="number"&&typeof l=="number"&&Number.isInteger(u)&&Number.isInteger(l)){if(l<u)return{value:s.Zero,because:"empty sum"};if(l===u)return{value:n.subs({[i]:r}).simplify(),because:"single term sum"}}}if(!new Set(n.unknowns).has(i)){let u=o.sub(r).add(s.One).simplify();return E(u)&&u.numericValue!==void 0&&(typeof u.numericValue=="number"?u.numericValue:u.numericValue.re)<=0?{value:s.Zero,because:"empty sum"}:{value:u.mul(n.simplify()),because:"sum of constant"}}if(v(n)===i){let u=r,l=o;return{value:l.mul(l.add(s.One)).sub(u.mul(u.sub(s.One))).div(2).simplify(),because:"triangular number"}}if(m(n,"Power")&&v(n.op1)===i&&n.op2.isSame(2)&&r.isSame(1)){let u=o;return{value:u.mul(u.add(s.One)).mul(u.mul(2).add(s.One)).div(6),because:"sum of squares"}}if(m(n,"Power")&&v(n.op1)===i&&n.op2.isSame(3)&&r.isSame(1)){let u=o;return{value:u.mul(u.add(s.One)).div(2).pow(2),because:"sum of cubes"}}if(m(n,"Power")&&n.op1.isSame(-1)&&v(n.op2)===i&&r.isSame(0)){let u=o;return{value:s.One.add(s.number(-1).pow(u)).div(2),because:"alternating unit series"}}if(m(n,"Multiply")&&r.isSame(0)){let u=!1,l=!1;for(let c of n.ops)m(c,"Power")&&c.op1.isSame(-1)&&v(c.op2)===i?u=!0:v(c)===i&&(l=!0);if(u&&l&&n.ops.length===2){let c=o;return{value:s.function("Multiply",[s.function("Power",[s.number(-1),c]),s.function("Floor",[s.function("Divide",[s.function("Add",[c,s.One]),s.number(2)])])]),because:"alternating linear series"}}}if(m(n,"Add")){let u=null,l=null;for(let c of n.ops)if(!new Set(c.unknowns).has(i))u=u?u.add(c):c;else if(v(c)===i)l=l?l.add(s.One):s.One;else if(m(c,"Multiply")&&c.ops.some(p=>v(p)===i)){let p=c.ops.filter(d=>v(d)!==i);if(p.length===c.ops.length-1){let d=p.length===1?p[0]:s.function("Multiply",p);l=l?l.add(d):d}}else{u=null,l=null;break}if(u!==null&&l!==null){let c=r,f=o;if(r.isSame(0)){let p=s.function("Add",[f,s.One]),d=s.function("Add",[u,s.function("Divide",[s.function("Multiply",[l,f]),s.number(2)])]);return{value:s.function("Multiply",[p,d]),because:"arithmetic progression"}}else{let p=s.function("Add",[s.function("Subtract",[f,c]),s.One]),d=s.function("Divide",[s.function("Add",[c,f]),s.number(2)]),g=s.function("Add",[u,s.function("Multiply",[l,d])]);return{value:s.function("Multiply",[p,g]),because:"arithmetic progression"}}}}if(m(n,"Power")&&v(n.op2)===i&&!new Set(n.op1.unknowns).has(i)){let u=n.op1,l=o;if(r.isSame(0)){let c=s.One.sub(u.pow(l.add(s.One))),f=s.One.sub(u);return{value:c.div(f),because:"geometric series"}}else if(r.isSame(1)){let c=u.sub(u.pow(l.add(s.One))),f=s.One.sub(u);return{value:c.div(f),because:"geometric series"}}}if(m(n,"Binomial")&&r.isSame(0)&&v(n.op2)===i){let u=n.op1;if(u&&o.isSame(u))return{value:s.function("Power",[s.number(2),u]),because:"sum of binomial coefficients"}}if(m(n,"Multiply")&&r.isSame(0)){let u=!1,l=!1,c=null;for(let b of n.ops)m(b,"Binomial")&&v(b.op2)===i?(u=!0,c=b.op1??null):m(b,"Power")&&b.op1.isSame(-1)&&v(b.op2)===i&&(l=!0);if(u&&l&&c&&o.isSame(c))return{value:s.Zero,because:"alternating binomial sum"};let f=!1;c=null,u=!1;for(let b of n.ops)v(b)===i?f=!0:m(b,"Binomial")&&v(b.op2)===i&&(u=!0,c=b.op1??null);if(f&&u&&c&&o.isSame(c)&&n.ops.length===2){let b=c;return{value:s.function("Multiply",[b,s.function("Power",[s.number(2),b.sub(s.One)])]),because:"weighted binomial sum"}}let p=!1;c=null,u=!1;for(let b of n.ops)m(b,"Power")&&v(b.op1)===i&&b.op2.isSame(2)?p=!0:m(b,"Binomial")&&v(b.op2)===i&&(u=!0,c=b.op1??null);if(p&&u&&c&&o.isSame(c)&&n.ops.length===2){let b=c;return{value:s.function("Multiply",[b,b.add(s.One),s.function("Power",[s.number(2),b.sub(s.number(2))])]),because:"weighted squared binomial sum"}}let d=!1;c=null,u=!1;for(let b of n.ops)m(b,"Power")&&v(b.op1)===i&&b.op2.isSame(3)?d=!0:m(b,"Binomial")&&v(b.op2)===i&&(u=!0,c=b.op1??null);if(d&&u&&c&&o.isSame(c)&&n.ops.length===2){let b=c;return{value:s.function("Multiply",[s.function("Power",[b,s.number(2)]),b.add(s.number(3)),s.function("Power",[s.number(2),b.sub(s.number(3))])]),because:"weighted cubed binomial sum"}}let g=!1,h=!1;c=null,u=!1;for(let b of n.ops)m(b,"Power")&&b.op1.isSame(-1)&&v(b.op2)===i?g=!0:v(b)===i?h=!0:m(b,"Binomial")&&v(b.op2)===i&&(u=!0,c=b.op1??null);if(g&&h&&u&&c&&o.isSame(c)&&n.ops.length===3)return{value:s.Zero,because:"alternating weighted binomial sum"}}if(m(n,"Power")&&n.op1.operator==="Binomial"&&m(n.op1)&&n.op2.isSame(2)&&r.isSame(0)){let u=n.op1,l=u.op1,c=u.op2;if(l&&v(c)===i&&o.isSame(l))return{value:s.function("Binomial",[s.function("Multiply",[s.number(2),l]),l]),because:"sum of binomial squares"}}if(m(n,"Multiply")&&n.ops.length===2&&r.isSame(1)){let[u,l]=n.ops;if(v(u)===i&&l.operator==="Add"&&m(l)&&l.ops.length===2&&l.ops.some(f=>v(f)===i)&&l.ops.some(f=>f.isSame(1))||v(l)===i&&u.operator==="Add"&&m(u)&&u.ops.length===2&&u.ops.some(f=>v(f)===i)&&u.ops.some(f=>f.isSame(1))){let f=o;return{value:s.function("Divide",[s.function("Multiply",[f,s.function("Add",[f,s.One]),s.function("Add",[f,s.number(2)])]),s.number(3)]),because:"sum of k*(k+1)"}}}if(m(n,"Divide")&&n.op1.isSame(1)&&n.op2.operator==="Multiply"&&m(n.op2)){let u=n.op2;if(u.ops.length===2){let[l,c]=u.ops;if(r.isSame(1)&&(v(l)===i&&c.operator==="Add"&&m(c)&&c.ops.length===2&&c.ops.some(p=>v(p)===i)&&c.ops.some(p=>p.isSame(1))||v(c)===i&&l.operator==="Add"&&m(l)&&l.ops.length===2&&l.ops.some(p=>v(p)===i)&&l.ops.some(p=>p.isSame(1)))){let p=o;return{value:p.div(p.add(s.One)),because:"partial fractions (telescoping)"}}if(r.isSame(2)&&(v(l)===i&&c.operator==="Add"&&m(c)&&c.ops.length===2&&c.ops.some(p=>v(p)===i)&&c.ops.some(p=>p.isSame(-1))||v(c)===i&&l.operator==="Add"&&m(l)&&l.ops.length===2&&l.ops.some(p=>v(p)===i)&&l.ops.some(p=>p.isSame(-1)))){let p=o;return{value:p.sub(s.One).div(p),because:"partial fractions (telescoping k*(k-1))"}}}}if(m(n,"Multiply")){let u=[],l=[];for(let c of n.ops)new Set(c.unknowns).has(i)?l.push(c):u.push(c);if(u.length>0&&l.length>0){let c=u.length===1?u[0]:s.function("Multiply",u),f=l.length===1?l[0]:s.function("Multiply",l),p=s.function("Sum",[f,t]);return{value:c.mul(p),because:"factor out constant from sum"}}}}function $y(e){if(!m(e,"Product"))return;let n=e.op1,t=e.op2;if(!n||!m(t,"Limits"))return;let i=v(t.op1),r=t.op2,o=t.op3;if(!i||!r||!o)return;let s=e.engine;if(n.operator==="Sum"||n.operator==="Product"){let u=n.simplify();if(!u.isSame(n))return{value:s.function("Product",[u,t]),because:"simplified nested sum/product"}}if(E(r)&&E(o)){let u=r.numericValue,l=o.numericValue;if(typeof u=="number"&&typeof l=="number"&&Number.isInteger(u)&&Number.isInteger(l)){if(l<u)return{value:s.One,because:"empty product"};if(l===u)return{value:n.subs({[i]:r}).simplify(),because:"single term product"}}}if(!new Set(n.unknowns).has(i)){let u=o.sub(r).add(s.One).simplify();return E(u)&&u.numericValue!==void 0&&(typeof u.numericValue=="number"?u.numericValue:u.numericValue.re)<=0?{value:s.One,because:"empty product"}:{value:n.simplify().pow(u),because:"product of constant"}}if(v(n)===i&&r.isSame(1))return{value:s.function("Factorial",[o]),because:"factorial"};if(m(n,"Add")&&n.ops.length===2&&r.isSame(1)){let[u,l]=n.ops,c=null,f=null;if(v(u)===i&&!new Set(l.unknowns).has(i)?(c=u,f=l):v(l)===i&&!new Set(u.unknowns).has(i)&&(c=l,f=u),c&&f){let p=o,d=f;return{value:s.function("Divide",[s.function("Factorial",[s.function("Add",[p,d])]),s.function("Factorial",[d])]),because:"shifted factorial"}}}if(m(n,"Divide")&&r.isSame(1)){let u=n.op1,l=n.op2;if(v(l)===i&&u.operator==="Add"&&m(u)&&u.ops.length===2&&u.ops.some(c=>v(c)===i)&&u.ops.some(c=>c.isSame(1)))return{value:o.add(s.One),because:"telescoping product"}}if(m(n,"Add")&&n.ops.length===2&&r.isSame(2)){let u=!1,l=!1;for(let c of n.ops)c.isSame(1)?u=!0:m(c,"Negate")&&c.op1.operator==="Power"&&m(c.op1)&&v(c.op1.op1)===i&&c.op1.op2.isSame(-2)?l=!0:m(c,"Power")&&v(c.op1)===i&&c.op2.isSame(-2)||m(c,"Multiply")&&c.ops.some(f=>f.isSame(-1))&&c.ops.some(f=>m(f,"Power")&&v(f.op1)===i&&f.op2.isSame(-2))&&(l=!0);if(u&&l){let c=o;return{value:s.function("Divide",[s.function("Add",[c,s.One]),s.function("Multiply",[s.number(2),c])]),because:"Wallis-like product"}}}if(m(n,"Add")&&n.ops.length===2&&r.isSame(1)){let u=!1,l=0,c=0;for(let f of n.ops)if(E(f)&&typeof f.numericValue=="number")c=f.numericValue;else if(m(f,"Multiply")&&f.ops.length===2){let[p,d]=f.ops;E(p)&&typeof p.numericValue=="number"&&v(d)===i?(l=p.numericValue,u=!0):E(d)&&typeof d.numericValue=="number"&&v(p)===i&&(l=d.numericValue,u=!0)}if(u&&l===2&&c===-1){let f=o;return{value:s.function("Factorial2",[s.function("Subtract",[s.function("Multiply",[s.number(2),f]),s.One])]),because:"odd double factorial"}}}if(m(n,"Multiply")&&n.ops.length===2&&r.isSame(1)){let[u,l]=n.ops;if(u.isSame(2)&&v(l)===i||l.isSame(2)&&v(u)===i){let c=o;return{value:s.function("Multiply",[s.function("Power",[s.number(2),c]),s.function("Factorial",[c])]),because:"even double factorial"}}}if(m(n,"Add")&&n.ops.length===2&&r.isSame(0)){let u=null,l=!1;for(let c of n.ops)v(c)===i?l=!0:new Set(c.unknowns).has(i)||(u=c);if(l&&u){let c=o.add(s.One).simplify();return{value:s.function("Pochhammer",[u,c]),because:"rising factorial (Pochhammer)"}}}if(r.isSame(0)){let u=null,l=!1;if(m(n,"Subtract")&&n.ops.length===2){let[c,f]=n.ops;v(f)===i&&!new Set(c.unknowns).has(i)&&(u=c,l=!0)}else if(m(n,"Add")&&n.ops.length===2)for(let c of n.ops)m(c,"Negate")&&v(c.op1)===i?l=!0:new Set(c.unknowns).has(i)||(u=c);if(l&&u){let c=o.add(s.One).simplify();return{value:s.function("Divide",[s.function("Factorial",[u]),s.function("Factorial",[u.sub(c)])]),because:"falling factorial"}}}if(m(n,"Multiply")){let u=[],l=[];for(let c of n.ops)new Set(c.unknowns).has(i)?l.push(c):u.push(c);if(u.length>0&&l.length>0){let c=u.length===1?u[0]:s.function("Multiply",u),f=l.length===1?l[0]:s.function("Multiply",l),p=o.sub(r).add(s.One).simplify(),d=s.function("Product",[f,t]);return{value:c.pow(p).mul(d),because:"factor out constant from product"}}}}var t3=new Set(["Sin","Tan","Cot","Csc","Arcsin","Arctan","Arccot","Arccsc"]),i3=new Set(["Sinh","Tanh","Coth","Csch","Arsinh","Artanh","Arcoth","Arcsch"]),r3=new Set(["Cos","Sec","Cosh","Sech"]);function Oy(e){if(!m(e,"Abs"))return;let n=e.op1;if(!n)return;let t=e.engine;if(n.isNonNegative===!0)return{value:n,because:"|x| -> x"};if(n.isNonPositive===!0)return{value:n.neg(),because:"|x| -> -x"};let i=n.operator;if(i==="Negate"&&m(n))return{value:t._fn("Abs",[n.op1]),because:"|-x| -> |x|"};if(i==="Multiply"&&m(n)){let r=n.ops;for(let o=0;o<r.length;o++){let s=r[o];if(s.isNonNegative===!0){let a=r.filter((l,c)=>c!==o),u=a.length===1?a[0]:t._fn("Multiply",a);return{value:s.mul(t._fn("Abs",[u])),because:"|xy| -> x|y| when x >= 0"}}if(s.isNonPositive===!0){let a=r.filter((l,c)=>c!==o),u=a.length===1?a[0]:t._fn("Multiply",a);return{value:s.neg().mul(t._fn("Abs",[u])),because:"|xy| -> -x|y| when x <= 0"}}}if(r.length===2)return{value:t._fn("Abs",[r[0]]).mul(t._fn("Abs",[r[1]])),because:"|xy| -> |x||y|"}}if(i==="Divide"&&m(n)){let r=n.op1,o=n.op2;if(r&&o)return r.isNonNegative===!0?{value:r.div(t._fn("Abs",[o])),because:"|x/y| -> x/|y| when x >= 0"}:r.isNonPositive===!0?{value:r.neg().div(t._fn("Abs",[o])),because:"|x/y| -> -x/|y| when x <= 0"}:o.isNonNegative===!0?{value:t._fn("Abs",[r]).div(o),because:"|x/y| -> |x|/y when y >= 0"}:o.isNonPositive===!0?{value:t._fn("Abs",[r]).neg().div(o),because:"|x/y| -> -|x|/y when y <= 0"}:{value:t._fn("Abs",[r]).div(t._fn("Abs",[o])),because:"|x/y| -> |x|/|y|"}}if(i==="Power"&&m(n)){let r=n.op1,o=n.op2;if(r&&o){if(o.isEven===!0)return{value:r.pow(o),because:"|x^n| -> x^n when n is even"};if(o.isOdd===!0)return{value:t._fn("Abs",[r]).pow(o),because:"|x^n| -> |x|^n when n is odd"};if(o.isRational===!1)return{value:t._fn("Abs",[r]).pow(o),because:"|x^n| -> |x|^n when n is irrational"};if(o.isRational===!0&&o.isInteger===!1){let s=o.numerator;if(s){if(s.isEven===!0)return{value:r.pow(o),because:"|x^(p/q)| -> x^(p/q) when p is even"};if(s.isOdd===!0)return{value:t._fn("Abs",[r]).pow(o),because:"|x^(p/q)| -> |x|^(p/q) when p is odd"}}}}}if((t3.has(i)||i3.has(i))&&m(n)){let r=n.op1;if(r)return{value:t._fn(i,[t._fn("Abs",[r])]),because:`|${i}(x)| -> ${i}(|x|) (odd function)`}}}function Ly(e){if(!m(e,"Power"))return;let n=e.op1,t=e.op2;if(!t||!m(n,"Abs"))return;let i=n.op1;if(i){if(t.isEven===!0)return{value:i.pow(t),because:"|x|^n -> x^n when n is even"};if(m(t,"Divide")){let r=t.op1,o=t.op2;if(r&&o&&r.isEven===!0&&o.isOdd===!0)return{value:i.pow(t),because:"|x|^(n/m) -> x^(n/m) when n even, m odd"}}if(t.isRational===!0&&t.isInteger===!1){let r=t.numerator;if(r&&r.isEven===!0)return{value:i.pow(t),because:"|x|^(p/q) -> x^(p/q) when p is even"}}}}function Fy(e){let n=e.operator;if(!r3.has(n)||!m(e))return;let t=e.op1;if(!m(t,"Abs"))return;let i=t.op1;if(i)return{value:e.engine._fn(n,[i]),because:`${n}(|x|) -> ${n}(x) (even function)`}}function qy(e){let n=e.operator,t=e.engine;if(n==="Multiply"&&m(e)&&e.ops.length===2){let[i,r]=e.ops,o=i.isInfinity===!0,s=r.isInfinity===!0,a=o&&i.isPositive===!0,u=o&&i.isNegative===!0,l=s&&r.isPositive===!0,c=s&&r.isNegative===!0;if(i.isSame(0)&&s)return{value:t.NaN,because:"0 * infinity -> NaN"};if(r.isSame(0)&&o)return{value:t.NaN,because:"infinity * 0 -> NaN"};if(i.isSame(0)&&r.isFinite===!0)return{value:t.Zero,because:"0 * finite -> 0"};if(r.isSame(0)&&i.isFinite===!0)return{value:t.Zero,because:"finite * 0 -> 0"};if(a){if(r.isPositive===!0)return{value:t.PositiveInfinity,because:"+inf * positive -> +inf"};if(r.isNegative===!0)return{value:t.NegativeInfinity,because:"+inf * negative -> -inf"}}if(c){if(i.isPositive===!0)return{value:t.NegativeInfinity,because:"positive * -inf -> -inf"};if(i.isNegative===!0)return{value:t.PositiveInfinity,because:"negative * -inf -> +inf"}}if(u){if(r.isPositive===!0)return{value:t.NegativeInfinity,because:"-inf * positive -> -inf"};if(r.isNegative===!0)return{value:t.PositiveInfinity,because:"-inf * negative -> +inf"}}if(l){if(i.isPositive===!0)return{value:t.PositiveInfinity,because:"positive * +inf -> +inf"};if(i.isNegative===!0)return{value:t.NegativeInfinity,because:"negative * +inf -> -inf"}}}if(n==="Divide"&&m(e)){let i=e.op1,r=e.op2;if(i&&r){let o=i.isInfinity===!0,s=r.isInfinity===!0,a=o&&i.isPositive===!0,u=o&&i.isNegative===!0;if(o&&s)return{value:t.NaN,because:"inf / inf -> NaN"};if(a){if(r.isPositive===!0&&r.isFinite===!0)return{value:t.PositiveInfinity,because:"+inf / positive -> +inf"};if(r.isNegative===!0&&r.isFinite===!0)return{value:t.NegativeInfinity,because:"+inf / negative -> -inf"}}if(u){if(r.isPositive===!0&&r.isFinite===!0)return{value:t.NegativeInfinity,because:"-inf / positive -> -inf"};if(r.isNegative===!0&&r.isFinite===!0)return{value:t.PositiveInfinity,because:"-inf / negative -> +inf"}}}}if(n==="Exp"&&m(e)){let i=e.op1;if(i){if(_(i,"PositiveInfinity"))return{value:t.PositiveInfinity,because:"exp(+inf) -> +inf"};if(_(i,"NegativeInfinity"))return{value:t.Zero,because:"exp(-inf) -> 0"}}}if(n==="Power"&&m(e)){let i=e.op1,r=e.op2;if(i&&r){let o=i.isInfinity===!0,s=r.isInfinity===!0,a=o&&i.isPositive===!0,u=o&&i.isNegative===!0,l=s&&r.isPositive===!0,c=s&&r.isNegative===!0;if(_(i,"ExponentialE")&&l)return{value:t.PositiveInfinity,because:"e^(+inf) -> +inf"};if(_(i,"ExponentialE")&&c)return{value:t.Zero,because:"e^(-inf) -> 0"};if(i.isSame(1)&&r.isFinite===!0)return{value:t.One,because:"1^finite -> 1"};if(r.isSame(0)&&o)return{value:t.NaN,because:"inf^0 -> NaN"};if(r.isSame(0)&&i.isSame(0)===!1&&i.isFinite===!0)return{value:t.One,because:"x^0 -> 1"};if(l){if(i.isGreater(1)===!0)return{value:t.PositiveInfinity,because:"a^+inf -> +inf when a > 1"};if(i.isPositive===!0&&i.isLess(1)===!0)return{value:t.Zero,because:"a^+inf -> 0 when 0 < a < 1"}}if(c){if(i.isGreater(1)===!0)return{value:t.Zero,because:"a^-inf -> 0 when a > 1"};if(i.isPositive===!0&&i.isLess(1)===!0)return{value:t.PositiveInfinity,because:"a^-inf -> +inf when 0 < a < 1"}}if(a&&r.isNegative===!0)return{value:t.Zero,because:"+inf^negative -> 0"};if(u){if(r.isNegative===!0)return{value:t.Zero,because:"-inf^negative -> 0"};if(r.isInteger===!0&&r.isEven===!0)return{value:t.PositiveInfinity,because:"(-inf)^(even integer) -> +inf"};if(r.isInteger===!0&&r.isOdd===!0)return{value:t.NegativeInfinity,because:"(-inf)^(odd integer) -> -inf"};if(r.isRational===!0){let[f,p]=r.numeratorDenominator,d=f.re,g=p.re;if(typeof d=="number"&&typeof g=="number"&&Number.isInteger(d)&&Number.isInteger(g)){let h=d%2===0,b=d%2!==0,y=g%2!==0;if(h&&y)return{value:t.PositiveInfinity,because:"(-inf)^(even/odd) -> +inf"};if(b&&y)return{value:t.NegativeInfinity,because:"(-inf)^(odd/odd) -> -inf (real)"}}}}}}}function Vy(e){let n=e.operator,t=e.engine;if(m(e)){if(n==="Ln"){let i=e.op1;if(!i)return;if(i.isSame(0))return{value:t.NaN,because:"ln(0) -> NaN"};if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.PositiveInfinity,because:"ln(+inf) -> +inf"};if(i.operator==="Rational"&&i.isRational===!0&&i.isInteger===!1){let r=i.json;if(Array.isArray(r)&&r[0]==="Rational"){let o=r[1],s=r[2];if(o>0&&s>0)return o===1?{value:t._fn("Ln",[t.number(s)]).neg(),because:"ln(1/q) -> -ln(q)"}:{value:t._fn("Ln",[t.number(o)]).sub(t._fn("Ln",[t.number(s)])),because:"ln(p/q) -> ln(p) - ln(q)"}}}if(m(i,"Power")){let r=i.op1,o=i.op2;if(r&&o){if(r.isNonNegative===!0||o.isOdd===!0||o.isRational===!1)return{value:o.mul(t._fn("Ln",[r])),because:"ln(x^n) -> n*ln(x)"};if(o.isEven===!0)return{value:o.mul(t._fn("Ln",[t._fn("Abs",[r])])),because:"ln(x^n) -> n*ln(|x|) when n even"}}}if(m(i,"Power")&&v(i.op1)==="ExponentialE")return{value:i.op2,because:"ln(e^x) -> x"};if(m(i,"Multiply"))for(let r=0;r<i.ops.length;r++){let o=i.ops[r];if(m(o,"Power")&&v(o.op1)==="ExponentialE"){let s=o.op2,a=i.ops.filter((l,c)=>c!==r),u=a.length===1?a[0]:t._fn("Multiply",[...a]);return{value:s.add(t._fn("Ln",[u])),because:"ln(e^x * y) -> x + ln(y)"}}}if(m(i,"Divide")&&i.op1?.operator==="Power"&&m(i.op1)&&v(i.op1.op1)==="ExponentialE")return{value:i.op1.op2.sub(t._fn("Ln",[i.op2])),because:"ln(e^x / y) -> x - ln(y)"};if(m(i,"Divide")){let r=i.op1,o=i.op2;if(r.isPositive===!0&&o.isPositive===!0)return{value:t._fn("Ln",[r]).sub(t._fn("Ln",[o])),because:"ln(x/y) -> ln(x) - ln(y)"}}if(m(i,"Divide")&&i.op2?.operator==="Power"&&m(i.op2)&&v(i.op2.op1)==="ExponentialE")return{value:t._fn("Ln",[i.op1]).sub(i.op2.op2),because:"ln(y / e^x) -> ln(y) - x"}}if(n==="Log"){let i=e.op1,r=e.op2;if(!i)return;let o=!r||v(r)==="Nothing"?t.number(10):r;if(o.isSame(0)||o.isSame(1))return{value:t.NaN,because:"log base 0 or 1 -> NaN"};if(i.isSame(0))return o.isGreater(1)===!0?{value:t.NegativeInfinity,because:"log_c(0) -> -inf when c > 1"}:o.isPositive===!0&&o.isLess(1)===!0?{value:t.PositiveInfinity,because:"log_c(0) -> +inf when 0 < c < 1"}:{value:t.NaN,because:"log_c(0) -> NaN"};if(i.isSame(o)&&o.isInfinity!==!0)return{value:t.One,because:"log_c(c) -> 1"};if(v(i)==="ExponentialE"&&v(o)!=="ExponentialE")return{value:t.One.div(t._fn("Ln",[o])),because:"log_c(e) -> 1/ln(c)"};if(o.isInfinity===!0&&o.isPositive===!0&&i.isInfinity===!0)return{value:t.NaN,because:"log_inf(inf) -> NaN"};if(o.isInfinity===!0&&o.isPositive===!0&&i.isPositive===!0&&i.isSame(1)===!1&&i.isFinite===!0)return{value:t.Zero,because:"log_inf(x) -> 0"};if(i.isInfinity===!0&&i.isPositive===!0&&o.isFinite===!0){if(o.isGreater(1)===!0)return{value:t.PositiveInfinity,because:"log_c(+inf) -> +inf when c > 1"};if(o.isLess(1)===!0&&o.isPositive===!0)return{value:t.NegativeInfinity,because:"log_c(+inf) -> -inf when 0 < c < 1"}}if(m(i,"Power")&&i.op1?.isSame(o))return{value:i.op2,because:"log_c(c^x) -> x"};if(m(i,"Power")&&v(i.op1)==="ExponentialE"&&!v(o)?.match(/ExponentialE/))return{value:i.op2.div(t._fn("Ln",[o])),because:"log_c(e^x) -> x/ln(c)"};if(m(i,"Exp")&&i.op1&&!v(o)?.match(/ExponentialE/))return{value:i.op1.div(t._fn("Ln",[o])),because:"log_c(exp(x)) -> x/ln(c)"};if(m(i,"Power")){let s=i.op1,a=i.op2;if(s&&a){if(s.isNonNegative===!0||a.isOdd===!0||a.isRational===!1)return{value:a.mul(t._fn("Log",[s,o])),because:"log_c(x^n) -> n*log_c(x)"};if(a.isEven===!0)return{value:a.mul(t._fn("Log",[t._fn("Abs",[s]),o])),because:"log_c(x^n) -> n*log_c(|x|) when n even"};if(a.isRational===!0&&a.isInteger===!1){let u=a.json;if(Array.isArray(u)&&u[0]==="Rational"){let l=u[1];return u[2]%2===0||l%2!==0?{value:a.mul(t._fn("Log",[s,o])),because:"log_c(x^{p/q}) -> (p/q)*log_c(x)"}:{value:a.mul(t._fn("Log",[t._fn("Abs",[s]),o])),because:"log_c(x^{p/q}) -> (p/q)*log_c(|x|) when p even"}}}}}if(m(i,"Multiply"))for(let s=0;s<i.ops.length;s++){let a=i.ops[s];if(m(a,"Power")&&a.op1?.isSame(o)){let u=a.op2,l=i.ops.filter((f,p)=>p!==s),c=l.length===1?l[0]:t._fn("Multiply",[...l]);return{value:u.add(t._fn("Log",[c,o])),because:"log_c(c^x * y) -> x + log_c(y)"}}}if(m(i,"Divide")&&i.op1?.operator==="Power"&&m(i.op1)&&i.op1.op1?.isSame(o))return{value:i.op1.op2.sub(t._fn("Log",[i.op2,o])),because:"log_c(c^x / y) -> x - log_c(y)"};if(m(i,"Divide")&&i.op2?.operator==="Power"&&m(i.op2)&&i.op2.op1?.isSame(o))return{value:t._fn("Log",[i.op1,o]).sub(i.op2.op2),because:"log_c(y / c^x) -> log_c(y) - x"};if(m(i,"Divide")){let s=i.op1,a=i.op2;if(s.isPositive===!0&&a.isPositive===!0){let u=v(o)==="Nothing",l=u?t._fn("Log",[s]):t._fn("Log",[s,o]),c=u?t._fn("Log",[a]):t._fn("Log",[a,o]);return{value:l.sub(c),because:"log_c(x/y) -> log_c(x) - log_c(y)"}}}if(m(o,"Divide")&&o.op1?.isSame(1))return{value:t._fn("Log",[i,o.op2]).neg(),because:"log_{1/c}(a) -> -log_c(a)"};if(o.operator==="Rational"){let s=o.json;if(Array.isArray(s)&&s[0]==="Rational"&&s[1]===1)return{value:t._fn("Log",[i,t.number(s[2])]).neg(),because:"log_{1/c}(a) -> -log_c(a)"}}}if(n==="Power"){let i=e.op1,r=e.op2;if(!i||!r)return;if(v(i)==="ExponentialE"&&r.operator==="Ln"&&m(r))return{value:r.op1,because:"e^ln(x) -> x"};if(v(i)==="ExponentialE"&&r.operator==="Log"&&m(r)&&r.op1){let o=r.op2;if(!o||v(o)==="Nothing"||o.isSame(10))return{value:r.op1.pow(t.One.div(t._fn("Ln",[t.number(10)]))),because:"e^log(x) -> x^{1/ln(10)}"};if(o&&v(o)!=="ExponentialE")return{value:r.op1.pow(t.One.div(t._fn("Ln",[o]))),because:"e^log_c(x) -> x^{1/ln(c)}"}}if(v(i)==="ExponentialE"&&r.operator==="Add"&&m(r)){for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(m(s,"Ln")){let a=r.ops.filter((l,c)=>c!==o),u=a.length===0?t.Zero:a.length===1?a[0]:t._fn("Add",[...a]);return{value:s.op1.mul(t._fn("Exp",[u])),because:"e^(ln(x) + y) -> x * e^y"}}}for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(!m(s,"Log")||!s.op1)continue;let a=r.ops.filter((p,d)=>d!==o),u=a.length===0?t.Zero:a.length===1?a[0]:t._fn("Add",[...a]),l=s.op2;return{value:(!l||v(l)==="Nothing"||l.isSame(10)?s.op1.pow(t.One.div(t._fn("Ln",[t.number(10)]))):v(l)==="ExponentialE"?s.op1:s.op1.pow(t.One.div(t._fn("Ln",[l])))).mul(i.pow(u)),because:"e^(log_c(x) + y) -> x^{1/ln(c)} * e^y"}}}if(v(i)==="ExponentialE"&&r.operator==="Multiply"&&m(r))for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(m(s,"Ln")){let a=r.ops.filter((l,c)=>c!==o),u=a.length===1?a[0]:t._fn("Multiply",[...a]);return{value:s.op1.pow(u),because:"e^(ln(x) * y) -> x^y"}}}if(v(i)==="ExponentialE"&&r.operator==="Divide"&&m(r)&&r.op1?.operator==="Ln"&&m(r.op1))return{value:r.op1.op1.pow(t.One.div(r.op2)),because:"e^(ln(x) / y) -> x^(1/y)"};if(m(r,"Log")&&r.op2?.isSame(i))return{value:r.op1,because:"c^log_c(x) -> x"};if(m(r,"Add"))for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(m(s,"Log")&&s.op2?.isSame(i)){let a=r.ops.filter((l,c)=>c!==o),u=a.length===0?t.Zero:a.length===1?a[0]:t._fn("Add",[...a]);return{value:s.op1.mul(i.pow(u)),because:"c^(log_c(x) + y) -> x * c^y"}}}if(m(r,"Multiply"))for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(m(s,"Log")&&s.op2?.isSame(i)){let a=r.ops.filter((l,c)=>c!==o),u=a.length===1?a[0]:t._fn("Multiply",[...a]);return{value:s.op1.pow(u),because:"c^(log_c(x) * y) -> x^y"}}}if(m(r,"Divide")&&r.op1?.operator==="Log"&&m(r.op1)&&r.op1.op2?.isSame(i))return{value:r.op1.op1.pow(t.One.div(r.op2)),because:"c^(log_c(x) / y) -> x^(1/y)"}}if(n==="Add"&&e.ops.length>=2){let i=[],r=new Map;for(let o=0;o<e.ops.length;o++){let s=e.ops[o];if(m(s,"Ln"))i.push({index:o,arg:s.op1,positive:!0});else if(m(s,"Negate")){let a=s.op1;if(m(a,"Ln")&&a.op1)i.push({index:o,arg:a.op1,positive:!1});else if(m(a,"Log")&&a.op1&&a.op2){let u=JSON.stringify(a.op2.json);r.has(u)||r.set(u,[]),r.get(u).push({index:o,arg:a.op1,base:a.op2,positive:!1})}}else if(m(s,"Log")&&s.op1&&s.op2){let a=JSON.stringify(s.op2.json);r.has(a)||r.set(a,[]),r.get(a).push({index:o,arg:s.op1,base:s.op2,positive:!0})}}if(i.length>=2){let o=t.One,s=t.One;for(let c of i)c.positive?o=o.mul(c.arg):s=s.mul(c.arg);let a=o.div(s),u=new Set(i.map(c=>c.index)),l=[...e.ops].filter((c,f)=>!u.has(f));return l.length===0?{value:t._fn("Ln",[a]),because:"combine ln terms"}:{value:t._fn("Add",[t._fn("Ln",[a]),...l]),because:"combine ln terms"}}for(let[,o]of r)if(o.length>=2){let s=t.One,a=t.One;for(let g of o)g.positive?s=s.mul(g.arg):a=a.mul(g.arg);let u=s.div(a),l=new Set(o.map(g=>g.index)),c=[...e.ops].filter((g,h)=>!l.has(h)),f=o[0].base,d=v(f)==="Nothing"?t._fn("Log",[u]):t._fn("Log",[u,f]);return c.length===0?{value:d,because:"combine log terms"}:{value:t._fn("Add",[d,...c]),because:"combine log terms"}}}if(n==="Divide"){let i=e.op1,r=e.op2;if(i&&r){if(m(i,"Log")&&r.operator==="Log"&&m(r)&&i.op2?.isSame(r.op2))return{value:t._fn("Ln",[i.op1]).div(t._fn("Ln",[r.op1])),because:"log_c(a) / log_c(b) -> ln(a) / ln(b)"};if(m(i,"Log")&&r.operator==="Ln"&&m(r)&&i.op1?.isSame(r.op1))return{value:t.One.div(t._fn("Ln",[i.op2])),because:"log_c(a) / ln(a) -> 1/ln(c)"};if(m(i,"Ln")&&r.operator==="Log"&&m(r)&&i.op1?.isSame(r.op1))return{value:t._fn("Ln",[r.op2]),because:"ln(a) / log_c(a) -> ln(c)"};if(m(i,"Ln")&&r.operator==="Ln"&&m(r)){let o=i.op1,s=r.op1;if(o&&s&&o.isInteger===!0&&s.isInteger===!0&&o.isPositive===!0&&s.isPositive===!0){let a=o.re,u=s.re;if(Number.isFinite(a)&&Number.isFinite(u)&&u>1&&a>0){let l=Math.log(a)/Math.log(u),c=Math.round(l);if(Math.abs(l-c)<1e-10&&Math.pow(u,c)===a)return{value:t.number(c),because:"ln(a)/ln(b) -> k when a = b^k"}}}}}}}}function pp(e){let n=e.operator,t=e.engine;if(n==="Root"&&m(e)){let i=e.op1,r=e.op2;if(!i||!r)return;if(r.isSame(0))return{value:t.NaN,because:"root(x, 0) -> NaN"};if(i.isSame(0))return r.isPositive===!0?{value:t.Zero,because:"root(0, n) -> 0 when n > 0"}:{value:t.NaN,because:"root(0, n) -> NaN when n <= 0"};if(i.isSame(1))return{value:t.One,because:"root(1, n) -> 1"};if(i.isInfinity===!0&&i.isPositive===!0){if(r.isPositive===!0)return{value:t.PositiveInfinity,because:"root(+inf, n) -> +inf when n > 0"};if(r.isNegative===!0)return{value:t.Zero,because:"root(+inf, n) -> 0 when n < 0"}}if(r.isOdd===!0&&i.isNegative===!0)return{value:t._fn("Root",[i.neg(),r]).neg(),because:"root(-a, n) -> -root(a, n) when n odd"};if(m(i,"Sqrt")&&i.op1)return{value:i.op1.pow(t.One.div(t.number(2).mul(r))),because:"root(sqrt(x), n) -> x^{1/(2n)}"};if(m(i,"Root")&&i.op1&&i.op2){let o=i.op1,s=i.op2;return{value:o.pow(t.One.div(s.mul(r))),because:"root(root(x, m), n) -> x^{1/(m*n)}"}}if(m(i,"Power")){let o=i.op1,s=i.op2;if(o&&s?.isSame(r)){if(r.isEven===!0)return{value:t._fn("Abs",[o]),because:"root(x^n, n) -> |x| when n even"};if(r.isOdd===!0||o.isNonNegative===!0)return{value:o,because:"root(x^n, n) -> x when n odd"}}if(o&&s){let a=s.div(r);if(r.isEven===!0){if(a.isInteger===!0)return{value:t._fn("Abs",[o]).pow(a),because:"root(x^m, n) -> |x|^{m/n} when m/n is integer"};let u=Ke(a);if(u){let[,l]=u,c=Ke(r);if(c&&Number(l)<Number(c[0]))return{value:t._fn("Abs",[o]).pow(a),because:"root(x^m, n) -> |x|^{m/n}"}}}if(r.isOdd===!0&&s.isInteger===!0)return{value:o.pow(a),because:"root(x^m, n) -> x^{m/n} when n is odd"};if(o.isNonNegative===!0&&a.isInteger===!0)return{value:o.pow(a),because:"root(x^m, n) -> x^{m/n} when x >= 0"}}}if(m(i,"Multiply")&&i.ops.length>=2){let o=r.re;if(o!==void 0&&Number.isInteger(o)&&o>=2){let s=[],a=[];for(let u of i.ops){let l=t._fn("Root",[u,r]),c=pp(l);if(c&&!c.value.isSame(l))a.push(c.value);else{let f=u.re;if(f!==void 0&&f>0){let p=Math.round(Math.pow(f,1/o));if(Math.pow(p,o)===f){a.push(t.number(p));continue}}s.push(u)}}if(a.length>0){let u=a.length===1?a[0]:t._fn("Multiply",a);if(s.length===0)return{value:u,because:"root(product, n) -> factored"};let l=s.length===1?s[0]:t._fn("Multiply",s);return{value:t._fn("Multiply",[u,t._fn("Root",[l,r])]),because:"root(product, n) -> factored"}}}}}if(n==="Sqrt"&&m(e)){let i=e.op1;if(!i)return;if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.PositiveInfinity,because:"sqrt(+inf) -> +inf"};if(i.operator==="Add"){let r=Xu(i);if(r!==null){let s=m(r)?r.op1:r;return{value:t._fn("Abs",[s]),because:"sqrt(perfect square trinomial) -> |factor|"}}let o=Ku(i);if(o!==null)return{value:t._fn("Sqrt",[o]),because:"sqrt(a\xB2-b\xB2) -> sqrt((a-b)(a+b))"}}if(m(i,"Sqrt")&&i.op1)return{value:i.op1.pow(t.number([1,4])),because:"sqrt(sqrt(x)) -> x^{1/4}"};if(m(i,"Root")&&i.op1&&i.op2){let r=i.op1,o=i.op2;return{value:r.pow(t.One.div(t.number(2).mul(o))),because:"sqrt(root(x, n)) -> x^{1/(2n)}"}}if(m(i,"Power")){let r=i.op1,o=i.op2;if(r&&o){if(o.isSame(2)&&r.isNonNegative===!0)return{value:r,because:"sqrt(x^2) -> x when x >= 0"};if(o.isSame(2))return{value:t._fn("Abs",[r]),because:"sqrt(x^2) -> |x|"};if(o.isEven===!0&&o.isPositive===!0)return{value:t._fn("Abs",[r]).pow(o.div(2)),because:"sqrt(x^{2n}) -> |x|^n"};if(o.isOdd===!0&&o.isInteger===!0&&o.isPositive===!0){let s=o.sub(t.One).div(2);if(s.isPositive===!0)return{value:t._fn("Abs",[r]).pow(s).mul(t._fn("Sqrt",[r])),because:"sqrt(x^{2n+1}) -> |x|^n * sqrt(x)"}}}}if(m(i,"Multiply")){let r=[],o=[];for(let s of i.ops)if(m(s,"Power")&&s.op1&&s.op2){let a=s.op1,u=s.op2;if(u.isSame(2))r.push(t._fn("Abs",[a]));else if(u.isEven===!0&&u.isPositive===!0)r.push(t._fn("Abs",[a]).pow(u.div(2)));else if(u.isInteger===!0&&u.isPositive===!0&&u.isOdd===!0){let l=u.sub(t.One).div(2);l.isPositive===!0&&r.push(t._fn("Abs",[a]).pow(l)),o.push(a)}else o.push(s)}else o.push(s);if(r.length>0){let s=r.length===1?r[0]:t._fn("Multiply",r);if(o.length===0)return{value:s,because:"sqrt(a^2 * ...) -> |a| * ..."};let a=o.length===1?o[0]:t._fn("Multiply",o);return{value:s.mul(t._fn("Sqrt",[a])),because:"sqrt(a^2 * b) -> |a| * sqrt(b)"}}}}if(n==="Power"&&m(e)){let i=e.op1,r=e.op2;if(!i||!r)return;if(r.isSame(1))return{value:i,because:"x^1 -> x"};if(i.isSame(0)&&r.isPositive===!0)return{value:t.Zero,because:"0^x -> 0 when x > 0"};if(i.isSame(-1)){let o=Ke(r);if(o){let[s,a]=o,u=Number(s),l=Number(a);if(u%2!==0&&l%2!==0)return{value:t.number(-1),because:"(-1)^{p/q} -> -1 when p,q odd"}}}if(m(i,"Multiply")){let o=Ke(r);if(o){let[s,a]=o,u=Number(s),l=Number(a),c=u%2!==0,f=l%2!==0;if(c&&f){let p=-1;for(let d=0;d<i.ops.length;d++){let g=i.ops[d];if(E(g)&&g.isNegative===!0){p=d;break}}if(p>=0){let g=i.ops[p].neg(),h=i.ops.map((y,x)=>x===p?g:y);return{value:(h.length===1?h[0]:t._fn("Multiply",h)).pow(r).neg(),because:"(-a*b)^{p/q} -> -(a*b)^{p/q} when p,q odd"}}}}}if(m(i,"Multiply")&&r.isInteger===!0){let o=i.ops.map(s=>s.pow(r));return{value:t._fn("Multiply",o),because:"(a*b)^n -> a^n * b^n"}}if(m(i,"Negate")){let o=i.op1;if(r.isEven===!0)return{value:o.pow(r),because:"(-x)^n -> x^n when n is even"};if(r.isOdd===!0)return{value:o.pow(r).neg(),because:"(-x)^n -> -x^n when n is odd"};let s=Ke(r);if(s){let[a,u]=s,l=Number(a),c=Number(u),f=l%2===0,p=l%2!==0,d=c%2!==0;if(f&&d)return{value:o.pow(r),because:"(-x)^{n/m} -> x^{n/m} when n is even and m is odd"};if(p&&d)return{value:o.pow(r).neg(),because:"(-x)^{n/m} -> -x^{n/m} when n and m are odd"};if(p&&!d)return{value:o.pow(r),because:"(-x)^{n/m} -> x^{n/m} when m is even"}}}if(m(i,"Sqrt")){let o=i.op1;if(r.isEven===!0)return{value:o.pow(r.div(2)),because:"sqrt(x)^n -> x^{n/2} when n is even"};if(o.isNonNegative===!0)return{value:o.pow(r.div(2)),because:"sqrt(x)^n -> x^{n/2} when x >= 0"}}if(m(i,"Root")){let o=i.op1,s=i.op2,a=r.div(s);if(a.isInteger===!0||o.isNonNegative===!0)return{value:o.pow(a),because:"root(x, k)^n -> x^{n/k}"}}if(m(i,"Power")){let o=i.op1,s=i.op2;if(o&&s){let a=o.isNonNegative===!0,u=r.isInteger===!0,l=s.isInteger===!0&&s.isOdd===!0;if(a||u||l)return{value:o.pow(s.mul(r)),because:"(x^n)^m -> x^{n*m}"}}}if(m(i,"Divide")&&i.op2.isSame(0)===!1){let o=i.op1,s=i.op2;if(m(r,"Negate"))return{value:s.div(o).pow(r.op1),because:"(a/b)^{-n} -> (b/a)^n"};if(r.isSame(-1))return{value:s.div(o),because:"(a/b)^{-1} -> b/a"};if(r.isNegative===!0&&E(r))return{value:s.div(o).pow(r.neg()),because:"(a/b)^{-n} -> (b/a)^n"}}}if(n==="Divide"&&m(e)){let i=e.op1,r=e.op2;if(!i||!r)return;if(m(i,"Power")&&r.operator==="Power"&&m(r)){let o=i.op1,s=i.op2,a=r.op1,u=r.op2;if(o?.isSame(a)&&s&&u){let l=t.function("Add",[s,u.neg()]);return{value:o.pow(l),because:"a^m / a^n -> a^{m-n}"}}}if(m(i,"Power")&&i.op1.isSame(r)){let o=t.function("Add",[i.op2,t.NegativeOne]);return{value:r.pow(o),because:"a^m / a -> a^{m-1}"}}if(m(r,"Power")&&r.op1.isSame(i)){let o=t.function("Add",[t.One,r.op2.neg()]);return{value:i.pow(o),because:"a / a^n -> a^{1-n}"}}if(m(r,"Power")&&r.op1.isSame(0)===!1){let o=r.op1,s=r.op2;if(m(s,"Negate"))return{value:i.mul(o.pow(s.op1)),because:"a / b^{-n} -> a * b^n"}}if(m(r,"Multiply"))for(let o=0;o<r.ops.length;o++){let s=r.ops[o];if(m(s,"Power")&&s.op1.isSame(0)===!1&&s.op2.operator==="Negate"&&m(s.op2)){let a=s.op1,u=s.op2.op1,l=r.ops.filter((f,p)=>p!==o),c=l.length===1?l[0]:t._fn("Multiply",l);return{value:i.div(c).mul(a.pow(u)),because:"a / (d * b^{-n}) -> (a/d) * b^n"}}}if(m(r,"Power")&&r.op1.operator==="Divide"&&m(r.op1)&&r.op1.op2.isSame(0)!==!0){let o=r.op1.op1,s=r.op1.op2,a=r.op2;return{value:i.mul(s.div(o).pow(a)),because:"a / (b/c)^d -> a * (c/b)^d"}}}if(n==="Multiply"&&m(e)&&e.ops.length>=2&&e.ops.length===2){let[i,r]=e.ops;if(m(i,"Power")&&r.operator==="Power"&&m(r)){let o=i.op1,s=i.op2,a=r.op1,u=r.op2;if(o?.isSame(a)&&s&&u&&(o.isPositive===!0||o.isNegative===!0||s.add(u).isNonNegative===!0))return{value:o.pow(s.add(u)),because:"x^n * x^m -> x^{n+m}"}}if(m(r,"Power")&&i.isSame(r.op1)&&(i.isPositive===!0||i.isNegative===!0||E(i)))return{value:i.pow(r.op2.add(t.One)),because:"x * x^n -> x^{n+1}"};if(m(i,"Power")&&r.isSame(i.op1)&&(r.isPositive===!0||r.isNegative===!0||E(r)))return{value:r.pow(i.op2.add(t.One)),because:"x^n * x -> x^{n+1}"}}}var o3=new Set(["Sin","Cos","Tan","Cot","Sec","Csc"]),s3=new Set(["Sin","Tan","Cot","Csc"]),a3=new Set(["Cos","Sec"]),By={Sin:"Cos",Cos:"Sin",Tan:"Cot",Cot:"Tan",Sec:"Csc",Csc:"Sec"},u3={Sin:-1,Cos:-1,Tan:1,Cot:1,Sec:-1,Csc:-1},l3={Sin:1,Cos:-1,Tan:-1,Cot:-1,Sec:-1,Csc:1},c3=new Set(["Arcsin","Arccos","Arctan","Arccot","Arcsec","Arccsc"]);function f3(e,n,t){if(!m(n,"Add"))return null;let i=n.ops,r=null,o=-1;for(let c=0;c<i.length;c++){let f=i[c];if(v(f)==="Pi"){r=1,o=c;break}if(m(f,"Multiply")){let p=f.ops,d=p.findIndex(g=>v(g)==="Pi");if(d>=0){let g=p.filter((h,b)=>b!==d);if(g.length===1){let h=g[0];if(E(h)){let b=h.numericValue;if(typeof b=="number"&&Number.isInteger(b)){r=b,o=c;break}}}else if(g.length===0){r=1,o=c;break}}}if(m(f,"Negate")&&v(f.op1)==="Pi"){r=-1,o=c;break}}if(r===null||o<0)return null;let s=e==="Tan"||e==="Cot"?1:2,a=r%s;a<0&&(a+=s);let u=i.filter((c,f)=>f!==o);if(a!==0&&(a===1?u.push(t.Pi):u.push(t.box(["Multiply",a,"Pi"]))),a===r%s&&a===r)return null;let l;return u.length===0?l=t.Zero:u.length===1?l=u[0]:l=fe(...u),t.box([e,l])}function Jy(e){let n=e.operator,t=e.engine;if(o3.has(n)){if(!m(e))return;let i=e.op1;if(!i)return;if(i.isInfinity===!0)return{value:t.NaN,because:`${n}(infinity) -> NaN`};if(m(i,"Negate")){let r=i.op1;if(r){if(s3.has(n))return{value:t._fn(n,[r]).neg(),because:`${n}(-x) -> -${n}(x)`};if(a3.has(n))return{value:t._fn(n,[r]),because:`${n}(-x) -> ${n}(x)`}}}if(m(i,"Subtract")){let r=i.op1,o=i.op2;if(v(r)==="Pi"&&o){let s=l3[n];if(s!==void 0){let a=t._fn(n,[o]);return{value:s===1?a:a.neg(),because:`${n}(\u03C0 - x) -> ${s===1?"":"-"}${n}(x)`}}}}if(m(i,"Add")){let r=i.ops.findIndex(o=>v(o)==="Pi");if(r>=0){let o=i.ops.filter((s,a)=>a!==r);if(o.length===i.ops.length-1){let s=o.length===1?o[0]:t._fn("Add",o),a=u3[n];if(a!==void 0){let u=t._fn(n,[s]);return{value:a===1?u:u.neg(),because:`${n}(\u03C0 + x) -> ${a===1?"":"-"}${n}(x)`}}}}}if(m(i,"Subtract")){let r=i.op1,o=i.op2,s=!1;if(m(r,"Divide")&&v(r.op1)==="Pi"&&r.op2?.isSame(2)&&(s=!0),s&&o){let a=By[n];if(a)return{value:t._fn(a,[o]),because:`${n}(\u03C0/2 - x) -> ${a}(x)`}}}if(m(i,"Add")&&i.nops===2){let r=i.ops,o=null,s=null;for(let a of r){if(m(a,"Multiply")&&a.nops===2){let[u,l]=[a.op1,a.op2];if(v(l)==="Pi"){let c=u?.re;typeof c=="number"&&Math.abs(c-.5)<1e-10&&(o=a)}}m(a,"Negate")&&a.op1&&(s=a.op1)}if(o&&s){let a=By[n];if(a)return{value:t._fn(a,[s]),because:`${n}(\u03C0/2 - x) -> ${a}(x)`}}}if(i.operator==="Add"){let r=f3(n,i,t);if(r)return{value:r,because:`${n} periodicity reduction`}}}if(c3.has(n)){if(!m(e))return;let i=e.op1;if(!i)return;if((n==="Arcsin"||n==="Arccos")&&i.isInfinity===!0)return{value:t.NaN,because:`${n}(infinity) -> NaN`};if(n==="Arctan"){if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.Pi.div(2),because:"arctan(+inf) -> \u03C0/2"};if(i.isInfinity===!0&&i.isNegative===!0)return{value:t.Pi.div(-2),because:"arctan(-inf) -> -\u03C0/2"}}if(n==="Arccot"){if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.Zero,because:"arccot(+inf) -> 0"};if(i.isInfinity===!0&&i.isNegative===!0)return{value:t.Pi,because:"arccot(-inf) -> \u03C0"}}if(n==="Arcsec"&&i.isInfinity===!0)return{value:t.Pi.div(2),because:"arcsec(\xB1inf) -> \u03C0/2"};if(n==="Arccsc"&&i.isInfinity===!0)return{value:t.Zero,because:"arccsc(\xB1inf) -> 0"}}if(n==="Multiply"&&m(e)){if(e.ops.length>=2){let i=null,r=null,o=[];for(let s of e.ops)m(s,"Sin")&&!i?i=s:m(s,"Cos")&&!r?r=s:o.push(s);if(i&&r){let s=i.op1,a=r.op1;if(s?.isSame(a)){let u=t._fn("Sin",[s.mul(2)]);if(o.length===0)return{value:u.div(2),because:"sin(x)*cos(x) -> sin(2x)/2"};{let l=o.length===1?o[0]:t._fn("Multiply",o);return l.isSame(2)?{value:u,because:"2*sin(x)*cos(x) -> sin(2x)"}:{value:l.mul(u).div(2),because:"c*sin(x)*cos(x) -> c*sin(2x)/2"}}}}}if(e.ops.length===2){let[i,r]=e.ops;if(m(i,"Sin")&&m(r)&&r.operator==="Sin"){let o=i.op1,s=r.op1;if(o&&s)return{value:t._fn("Cos",[o.sub(s)]).sub(t._fn("Cos",[o.add(s)])).div(2),because:"sin(x)*sin(y) -> (cos(x-y)-cos(x+y))/2"}}if(m(i,"Cos")&&m(r)&&r.operator==="Cos"){let o=i.op1,s=r.op1;if(o&&s)return{value:t._fn("Cos",[o.sub(s)]).add(t._fn("Cos",[o.add(s)])).div(2),because:"cos(x)*cos(y) -> (cos(x-y)+cos(x+y))/2"}}if(m(i,"Tan")&&m(r)&&r.operator==="Cot"){let o=i.op1,s=r.op1;if(o?.isSame(s))return{value:t.One,because:"tan(x)*cot(x) -> 1"}}if(m(i,"Cot")&&m(r)&&r.operator==="Tan"){let o=i.op1,s=r.op1;if(o?.isSame(s))return{value:t.One,because:"cot(x)*tan(x) -> 1"}}if(i.isSame(2)&&m(r,"Power")&&r.op2?.isSame(2)){let o=r.op1;if(m(o,"Sin")&&o.op1){let s=t._fn("Cos",[o.op1.mul(2)]);return{value:t.One.sub(s),because:"2sin\xB2(x) -> 1 - cos(2x)"}}if(m(o,"Cos")&&o.op1){let s=t._fn("Cos",[o.op1.mul(2)]);return{value:t.One.add(s),because:"2cos\xB2(x) -> 1 + cos(2x)"}}}if(r.isSame(2)&&m(i,"Power")&&i.op2?.isSame(2)){let o=i.op1;if(m(o,"Sin")&&o.op1){let s=t._fn("Cos",[o.op1.mul(2)]);return{value:t.One.sub(s),because:"2sin\xB2(x) -> 1 - cos(2x)"}}if(m(o,"Cos")&&o.op1){let s=t._fn("Cos",[o.op1.mul(2)]);return{value:t.One.add(s),because:"2cos\xB2(x) -> 1 + cos(2x)"}}}}}if(n==="Add"&&m(e)&&e.ops.length===2){let[i,r]=e.ops;if(m(i,"Power")&&m(r)&&r.operator==="Power"&&i.op2?.isSame(2)&&r.op2?.isSame(2)){let o=i.op1,s=r.op1,a=m(o,"Sin")?o.op1:null,u=m(s,"Cos")?s.op1:null;if(a&&u&&a.isSame(u))return{value:t.One,because:"sin\xB2(x) + cos\xB2(x) -> 1"};let l=m(s,"Sin")?s.op1:null,c=m(o,"Cos")?o.op1:null;if(l&&c&&l.isSame(c))return{value:t.One,because:"cos\xB2(x) + sin\xB2(x) -> 1"}}if(m(i,"Power")&&i.op2?.isSame(2)&&r.isSame(1)&&m(i.op1,"Tan"))return{value:t._fn("Sec",[i.op1.op1]).pow(2),because:"tan\xB2(x) + 1 -> sec\xB2(x)"};if(m(r,"Power")&&r.op2?.isSame(2)&&i.isSame(1)&&m(r.op1,"Tan"))return{value:t._fn("Sec",[r.op1.op1]).pow(2),because:"1 + tan\xB2(x) -> sec\xB2(x)"};if(m(i,"Power")&&i.op2?.isSame(2)&&r.isSame(1)&&m(i.op1,"Cot"))return{value:t._fn("Csc",[i.op1.op1]).pow(2),because:"cot\xB2(x) + 1 -> csc\xB2(x)"};if(m(r,"Power")&&r.op2?.isSame(2)&&i.isSame(1)&&m(r.op1,"Cot"))return{value:t._fn("Csc",[r.op1.op1]).pow(2),because:"1 + cot\xB2(x) -> csc\xB2(x)"};if(m(i,"Multiply")&&m(r)&&r.operator==="Multiply"){let o=u=>{if(!m(u)||u.operator!=="Multiply"||u.ops.length!==2)return null;let[l,c]=u.ops;return m(c,"Power")&&c.op2?.isSame(2)&&m(c.op1)&&(c.op1.operator==="Sin"||c.op1.operator==="Cos")?{coeff:l,trigFunc:c.op1.operator,trigArg:c.op1.op1}:m(l,"Power")&&l.op2?.isSame(2)&&m(l.op1)&&(l.op1.operator==="Sin"||l.op1.operator==="Cos")?{coeff:c,trigFunc:l.op1.operator,trigArg:l.op1.op1}:null},s=o(i),a=o(r);if(s&&a&&s.coeff.isSame(a.coeff)&&s.trigArg?.isSame(a.trigArg)&&(s.trigFunc==="Sin"&&a.trigFunc==="Cos"||s.trigFunc==="Cos"&&a.trigFunc==="Sin"))return{value:s.coeff,because:"a*sin\xB2(x) + a*cos\xB2(x) -> a"}}}if(n==="Add"&&m(e)&&e.ops.length===2){let[i,r]=e.ops,o=null,s=null;if(i.isSame(1)&&m(r,"Negate")?(o=i,s=r.op1):r.isSame(1)&&m(i,"Negate")&&(o=r,s=i.op1),o&&s&&m(s,"Power")&&s.op2?.isSame(2)){let f=s.op1;if(m(f,"Sin"))return{value:t._fn("Cos",[f.op1]).pow(2),because:"1 - sin\xB2(x) -> cos\xB2(x)"};if(m(f,"Cos"))return{value:t._fn("Sin",[f.op1]).pow(2),because:"1 - cos\xB2(x) -> sin\xB2(x)"}}let a=null,u=null;if(i.isSame(-1)&&m(r,"Power")&&r.op2?.isSame(2)?(a=i,u=r):r.isSame(-1)&&m(i,"Power")&&i.op2?.isSame(2)&&(a=r,u=i),a&&m(u)){let f=u.op1;if(m(f,"Sin"))return{value:t._fn("Cos",[f.op1]).pow(2).neg(),because:"sin\xB2(x) - 1 -> -cos\xB2(x)"};if(m(f,"Cos"))return{value:t._fn("Sin",[f.op1]).pow(2).neg(),because:"cos\xB2(x) - 1 -> -sin\xB2(x)"};if(m(f,"Sec"))return{value:t._fn("Tan",[f.op1]).pow(2),because:"sec\xB2(x) - 1 -> tan\xB2(x)"};if(m(f,"Csc"))return{value:t._fn("Cot",[f.op1]).pow(2),because:"csc\xB2(x) - 1 -> cot\xB2(x)"}}let l=null,c=null;if(m(i,"Negate")&&i.op1?.isSame(1)&&m(r)&&r.operator==="Power"&&r.op2?.isSame(2)?(l=i,c=r):m(r,"Negate")&&r.op1?.isSame(1)&&m(i)&&i.operator==="Power"&&i.op2?.isSame(2)&&(l=r,c=i),l&&m(c)){let f=c.op1;if(m(f,"Sec"))return{value:t._fn("Tan",[f.op1]).pow(2),because:"sec\xB2(x) - 1 -> tan\xB2(x)"};if(m(f,"Csc"))return{value:t._fn("Cot",[f.op1]).pow(2),because:"csc\xB2(x) - 1 -> cot\xB2(x)"}}if(m(i,"Negate")&&m(r)&&r.operator==="Negate"){let f=i.op1,p=r.op1;if(m(f,"Power")&&f.op2?.isSame(2)&&m(p)&&p.operator==="Power"&&p.op2?.isSame(2)){let d=f.op1,g=p.op1;if(m(d)&&m(g)&&(d.operator==="Sin"&&g.operator==="Cos"||d.operator==="Cos"&&g.operator==="Sin")&&d.op1?.isSame(g.op1))return{value:t.NegativeOne,because:"-sin\xB2(x) - cos\xB2(x) -> -1"}}}}}var p3=new Set(["Sinh","Cosh","Tanh","Coth","Sech","Csch"]),m3=new Set(["Sinh","Tanh","Coth","Csch"]),d3=new Set(["Cosh","Sech"]),g3=new Set(["Arsinh","Arcosh","Artanh","Arcoth","Arsech","Arcsch"]);function zy(e){let n=e.operator,t=e.engine;if(p3.has(n)&&m(e)){let i=e.op1;if(!i)return;if(i.isInfinity===!0&&i.isPositive===!0)switch(n){case"Sinh":return{value:t.PositiveInfinity,because:"sinh(+inf) -> +inf"};case"Cosh":return{value:t.PositiveInfinity,because:"cosh(+inf) -> +inf"};case"Tanh":return{value:t.One,because:"tanh(+inf) -> 1"};case"Coth":return{value:t.One,because:"coth(+inf) -> 1"};case"Sech":return{value:t.Zero,because:"sech(+inf) -> 0"};case"Csch":return{value:t.Zero,because:"csch(+inf) -> 0"}}if(i.isInfinity===!0&&i.isNegative===!0)switch(n){case"Sinh":return{value:t.NegativeInfinity,because:"sinh(-inf) -> -inf"};case"Cosh":return{value:t.PositiveInfinity,because:"cosh(-inf) -> +inf"};case"Tanh":return{value:t.NegativeOne,because:"tanh(-inf) -> -1"};case"Coth":return{value:t.NegativeOne,because:"coth(-inf) -> -1"};case"Sech":return{value:t.Zero,because:"sech(-inf) -> 0"};case"Csch":return{value:t.Zero,because:"csch(-inf) -> 0"}}if(m(i,"Negate")){let r=i.op1;if(r){if(m3.has(n))return{value:t._fn(n,[r]).neg(),because:`${n}(-x) -> -${n}(x)`};if(d3.has(n))return{value:t._fn(n,[r]),because:`${n}(-x) -> ${n}(x)`}}}}if(g3.has(n)&&m(e)){let i=e.op1;if(!i)return;if(n==="Arsinh"){if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.PositiveInfinity,because:"arsinh(+inf) -> +inf"};if(i.isInfinity===!0&&i.isNegative===!0)return{value:t.NegativeInfinity,because:"arsinh(-inf) -> -inf"}}if(n==="Arcosh"){if(i.isInfinity===!0&&i.isPositive===!0)return{value:t.PositiveInfinity,because:"arcosh(+inf) -> +inf"};if(i.isInfinity===!0&&i.isNegative===!0)return{value:t.NaN,because:"arcosh(-inf) -> NaN"}}if(n==="Artanh"&&i.isInfinity===!0)return{value:t.NaN,because:"artanh(\xB1inf) -> NaN"};if(n==="Arcoth"&&i.isInfinity===!0)return{value:t.Zero,because:"arcoth(\xB1inf) -> 0"};if(n==="Arsech"&&i.isInfinity===!0)return{value:t.NaN,because:"arsech(\xB1inf) -> NaN"};if(n==="Arcsch"&&i.isInfinity===!0)return{value:t.Zero,because:"arcsch(\xB1inf) -> 0"}}}function Zo(e){if(E(e))return null;if(m(e,"Add")&&e.nops===2){let[n,t]=[e.op1,e.op2];if(E(t)&&Number.isInteger(t.re)&&!E(n))return{base:n,offset:t.re};if(E(n)&&Number.isInteger(n.re)&&!E(t))return{base:t,offset:n.re}}return{base:e,offset:0}}function Uy(e){if(e.operator!=="Binomial"&&e.operator!=="Choose"||!m(e))return;let n=e.op1,t=e.op2;if(!n||!t)return;let i=e.engine;if(t.isSame(0))return{value:i.One,because:"C(n,0) -> 1"};if(t.isSame(1))return{value:n,because:"C(n,1) -> n"};if(t.isSame(n))return{value:i.One,because:"C(n,n) -> 1"};let r=Zo(n),o=Zo(t);if(r&&o&&r.base.isSame(o.base)&&r.offset-o.offset===1)return{value:n,because:"C(n,n-1) -> n"}}function h3(e){if(m(e,"Factorial"))return{coeff:1,factArg:e.op1};if(m(e,"Negate")&&e.op1.operator==="Factorial"&&m(e.op1))return{coeff:-1,factArg:e.op1.op1};if(m(e,"Multiply")){let n=e.ops,t=-1;for(let s=0;s<n.length;s++)if(m(n[s],"Factorial")){if(t>=0)return null;t=s}if(t<0)return null;let i=n[t];if(!m(i))return null;let r=i.op1,o=n.filter((s,a)=>a!==t);return o.length===1&&E(o[0])&&Number.isInteger(o[0].re)?{coeff:o[0].re,factArg:r}:null}return null}function jy(e){if(!m(e,"Add"))return;let n=e.ops;if(n.length<2)return;let t=[];for(let h=0;h<n.length;h++){let b=h3(n[h]);b&&t.push({...b,index:h})}if(t.length<2)return;let i=e.engine,o=t.map(h=>({...h,bo:Zo(h.factArg)})).filter(h=>h.bo!==null);if(o.length<2)return;let s=o[0].bo.base;if(!o.every(h=>h.bo.base.isSame(s)))return;let a=1/0;for(let h of o)h.bo.offset<a&&(a=h.bo.offset);let u=o.find(h=>h.bo.offset===a).factArg,l=[];for(let h of o){let b=h.bo.offset-a;if(b===0)l.push(i.number(h.coeff));else if(b>0&&b<=8){let y=u.add(i.One);for(let x=2;x<=b;x++)y=y.mul(u.add(i.number(x)));h.coeff===1?l.push(y):h.coeff===-1?l.push(y.neg()):l.push(i.number(h.coeff).mul(y))}else return}let c=l.length===1?l[0]:i.function("Add",l),f=i._fn("Factorial",[u]),p=i._fn("Multiply",[f,c]),d=new Set(t.map(h=>h.index)),g=n.filter((h,b)=>!d.has(b));return g.length>0?{value:i._fn("Add",[p,...g]),because:"factor common factorial"}:{value:p,because:"factor common factorial"}}function Gy(e){if(!m(e,"Divide"))return;let n=e.op1,t=e.op2;if(!n||!t)return;let i=e.engine;if(n.isSame(0)&&t.isSame(0))return{value:i.NaN,because:"0/0 -> NaN"};if(n.isSame(0)&&t.isSame(0)===!1&&(E(t)||t.symbols.length!==0))return{value:i.Zero,because:"0/a -> 0"};if(n.isSame(t)&&n.isSame(0)===!1&&n.isInfinity!==!0&&(E(n)||n.symbols.length!==0))return{value:i.One,because:"a/a -> 1"};if(n.isInfinity&&t.isInfinity)return{value:i.NaN,because:"inf/inf -> NaN"};if(m(t,"Divide")){let r=t.op1,o=t.op2;if(!r||!o)return;if(n.isSame(1)&&r.isSame(1)&&o.isSame(0)===!1)return{value:o,because:"1/(1/a) -> a"};if(r.isSame(1)&&o.isSame(0)===!1)return{value:n.mul(o),because:"a/(1/b) -> a*b"};if(o.isSame(0)===!1)return{value:n.mul(o).div(r),because:"a/(b/c) -> a*c/b"}}{let r,o,s,a;if(m(n,"Power")?(r=n.op1,o=n.op2):(r=n,o=i.One),m(t,"Power")?(s=t.op1,a=t.op2):(s=t,a=i.One),r&&s&&r.isSame(s)&&(!Ke(o)||!Ke(a))){let u=i.function("Add",[o,a.neg()]);return u.isSame(0)?{value:i.One,because:"x^a/x^a -> 1"}:u.isSame(1)?{value:r,because:"x^a/x^b -> x when a-b=1"}:{value:i._fn("Power",[r,u]),because:"x^a/x^b -> x^(a-b)"}}}if(n.operator==="Factorial"&&t.operator==="Factorial"&&m(n)&&m(t)){let r=n.op1,o=t.op1;if(E(r)&&E(o)&&r.isInteger&&o.isInteger&&r.isNonNegative&&o.isNonNegative){let u=BigInt(Math.trunc(r.re)),l=BigInt(Math.trunc(o.re));if((u>l?u-l:l-u)>1000n)return;if(u>=l){let f=1n;for(let p=l+1n;p<=u;p++)f*=p;return{value:i.number(f),because:"n!/k! partial product"}}else{let f=1n;for(let p=u+1n;p<=l;p++)f*=p;return{value:i.number([1,f]),because:"n!/k! -> 1/(partial product)"}}}let s=Zo(r),a=Zo(o);if(s&&a&&s.base.isSame(a.base)){let u=s.offset-a.offset;if(Number.isInteger(u)&&u>=1&&u<=8){let l=o.add(i.One);for(let c=2;c<=u;c++)l=l.mul(o.add(i.number(c)));return{value:l,because:"n!/k! -> (k+1)..n"}}if(Number.isInteger(u)&&u<=-1&&u>=-8){let l=r.add(i.One);for(let c=2;c<=-u;c++)l=l.mul(r.add(i.number(c)));return{value:i.One.div(l),because:"n!/k! -> 1/((n+1)..k)"}}}}if(m(n,"Factorial")&&t.operator==="Multiply"&&m(t)){let r=n.op1,o=t.ops.filter(a=>m(a,"Factorial")),s=t.ops.filter(a=>!m(a,"Factorial"));if(o.length===2&&s.length===0&&m(o[0])&&m(o[1])){let a=o[0].op1,u=o[1].op1;if(E(r)&&E(a)&&E(u)&&a.re+u.re===r.re){let c=a.re<=u.re?a:u;return{value:i._fn("Binomial",[r,c]),because:"n!/(k!(n-k)!) -> Binomial"}}if(a.add(u).isSame(r))return{value:i._fn("Binomial",[r,a]),because:"n!/(k!(n-k)!) -> Binomial"}}}}var Zy=[{match:{sym:"GoldenRatio"},replace:["Divide",["Add",1,["Sqrt",5]],2]},b3,y3,e=>{if(e.operator!=="Divide")return;let n=e.unknowns;if(n.length!==1)return;let t=n[0],i=No(e,t);if(!i.isSame(e))return{value:i,because:"cancel common polynomial factors"}},e=>{if(!m(e,"Divide"))return;let t=e.op2.operator;if(t!=="Multiply"&&t!=="Power")return;let i=e.unknowns;if(i.length!==1)return;let r=i[0],o=Gs(e,r);if(o.isSame(e))return;let s=e.engine;if(!(s.costFunction(o)>=s.costFunction(e)))return{value:o,because:"partial fraction decomposition"}},e=>{if(!m(e,"Divide"))return;let n=e.op1,t=e.op2;if(!(!n||!t)&&n.isSame(t)&&n.isSame(0)===!1&&n.isInfinity!==!0)return{value:e.engine.One,because:"a/a -> 1"}},e=>{if(m(e,"Multiply")&&e.ops.some(t=>t.operator==="Factorial"))return;if(m(e,"Multiply")){let t=new Map;for(let i of e.ops){let r=null;m(i,"Power")?r=JSON.stringify(i.op1.json):_(i)&&(r=JSON.stringify(i.json)),r&&t.set(r,(t.get(r)||0)+1)}for(let i of t.values())if(i>1)return}let n=Ne(e);return n?{value:n,because:"expand"}:void 0},jy,e=>{if(m(e,"Add"))return{value:fe(...e.ops.map(n=>{let t=n.canonical;if(t.unknowns.length===0&&m(t)){let i=t.evaluate();if(E(i))return i}return t})),because:"addition"}},e=>{if(m(e,"Negate"))return{value:e.op1.neg(),because:"negation"}},e=>{if(!m(e,"Multiply"))return;let n=e.ops,t=new Map;for(let i of n){let r=null,o=null;if(m(i,"Power")?(r=JSON.stringify(i.op1.json),o=i):_(i)&&(r=JSON.stringify(i.json),o=i),r&&o){let s=t.get(r)||[];s.push(o),t.set(r,s)}}for(let i of t.values())if(i.length>1)return;if(n.length===2){let[i,r]=n,o=m(i,"Power")&&i.op2.isSame(2)&&["Sin","Cos"].includes(i.op1.operator||"")||m(r,"Power")&&r.op2.isSame(2)&&["Sin","Cos"].includes(r.op1.operator||""),s=E(i)||E(r);if(o&&s)return;let a=i.operator==="Sin"||r.operator==="Sin",u=i.operator==="Cos"||r.operator==="Cos";if(a&&u)return;let l=i.operator==="Tan"||r.operator==="Tan",c=i.operator==="Cot"||r.operator==="Cot";if(l&&c)return}if(!(n.some(i=>i.operator==="Factorial")&&n.some(i=>i.operator==="Add")))return{value:ke(...n.map(i=>{let r=i.canonical;if(r.unknowns.length===0&&m(r)){if(r.operator==="Power"&&(v(r.op1)==="ExponentialE"||r.op2.isRational===!0&&r.op2.isInteger===!1))return r;let o=r.evaluate();if(E(o))return o}return r})),because:"multiplication"}},e=>{if(m(e,"Divide")){let n=e.op1,t=e.op2;return!E(t)&&t.symbols.length===0&&(n.isSame(0)||n.isSame(t))||(n.operator==="Ln"||n.operator==="Log")&&(t.operator==="Ln"||t.operator==="Log")||n.operator==="Power"&&t.operator==="Power"&&m(n)&&m(t)&&n.op1.isSame(t.op1)||m(n,"Power")&&n.op1.isSame(t)||m(t,"Power")&&t.op1.isSame(n)||m(t,"Power")&&t.op1.operator==="Divide"||n.operator==="Factorial"&&t.operator==="Factorial"||n.operator==="Factorial"&&t.operator==="Multiply"&&m(t)&&t.ops.some(i=>i.operator==="Factorial")?void 0:{value:n.div(t),because:"division"}}if(m(e,"Rational")&&e.nops===2)return{value:e.op1.div(e.op2),because:"rational"}},e=>{if(!m(e)||!E(e.op1))return;if(e.operator==="Sqrt"){if(e.op1.isNegative)return{value:e.engine.box(["Multiply",["Sqrt",e.op1.neg()],"ImaginaryUnit"]).simplify(),because:"sqrt"};let i=e.op1.sqrt();return mp(ce(i))?{value:i,because:"sqrt"}:mp(e.op1.numericValue)?void 0:{value:i,because:"sqrt"}}let n=e.op1,t=e.op2;if(E(t)&&n.isInteger&&t.isInteger&&n.re<re&&t.re<re){if(e.operator==="Power")return{value:e.op1.pow(e.op2),because:"power"};if(e.operator==="Root"){let i=e.op1.root(e.op2);if(mp(ce(i)))return{value:e.op1.root(e.op2),because:"root"}}}},e=>{if(e.operator!=="Sign")return;let n=e.sgn,t=e.engine;if(n!==void 0){if(n==="positive")return{value:t.One,because:"sign positive"};if(n==="negative")return{value:t.NegativeOne,because:"sign negative"};if(n==="zero")return{value:t.Zero,because:"sign zero"};if(n==="unsigned")return{value:t.NaN,because:"sign unsinged"}}},e=>{if(m(e)){if(e.operator==="Ln")return e.op1.operator==="Rational"&&e.op1.isInteger===!1?void 0:{value:e.op1.ln(e.ops[1]),because:"ln"};if(e.operator==="Log"){let n=e.ops[1]??10,t=typeof n=="number"?e.engine.number(n):n;if(t.isSame(0)||t.isSame(1)||t.isInfinity===!0||e.op1.isSame(0)||e.op1.isInfinity===!0||m(e.op1,"Power")&&e.op1.op1?.isSame(t))return;if(m(e.op1,"Power")&&e.op1.op2){let i=e.op1.op2;if(i.isRational===!1||i.isRational===!0&&i.isInteger===!1||i.isEven===!0)return}if(t.operator==="Rational"){let i=t.json;if(Array.isArray(i)&&i[0]==="Rational"&&i[1]===1)return}if(m(e.op1,"Multiply")){for(let i of e.op1.ops)if(m(i,"Power")&&i.op1?.isSame(t))return}if(m(e.op1,"Divide")){let i=e.op1.op1,r=e.op1.op2;if(i?.operator==="Power"&&m(i)&&i.op1?.isSame(t)||r?.operator==="Power"&&m(r)&&r.op1?.isSame(t))return}return{value:e.op1.ln(n),because:"log"}}}},e=>{if(m(e)){if(e.operator==="Max"){if(e.nops===0)return{value:e.engine.NegativeInfinity,because:"max"};if(e.nops===1)return{value:e.op1,because:"max"}}else if(e.operator==="Min"){if(e.nops===0)return{value:e.engine.PositiveInfinity,because:"min"};if(e.nops===1)return{value:e.op1,because:"min"}}else if(e.operator==="Supremum"){if(e.nops===0)return{value:e.engine.NegativeInfinity,because:"sup"};if(e.nops===1)return{value:e.op1,because:"sup"}}else if(e.operator==="Infimum"){if(e.nops===0)return{value:e.engine.PositiveInfinity,because:"inf"};if(e.nops===1)return{value:e.op1,because:"inf"}}}},e=>{if(!m(e,"Derivative"))return;let n=e.engine,[t,i]=e.ops;if(e.nops===2)return{value:n._fn("Derivative",[t.simplify(),i]),because:"derivative"};if(e.nops===1)return{value:n._fn("Derivative",[t.simplify()]),because:"derivative"}},e=>m(e,"Hypot")?{value:e.engine.box(["Sqrt",["Add",["Square",e.op1],["Square",e.op2]]]).simplify(),because:"hypot(x,y) -> sqrt(x^2+y^2)"}:void 0,e=>{if(!m(e,"Congruent")||e.nops<3)return;let n=e.engine;return{value:n._fn("Equal",[n.function("Mod",[e.ops[0],e.ops[2]]).simplify(),n.function("Mod",[e.ops[1],e.ops[2]]).simplify()]).simplify(),because:"congruent"}},Dy,$y,e=>{if(!Yf(e)||!m(e))return;let n=Qs(e.operator,e.op1);if(n)return{value:n,because:"constructible value"}},e=>{if(!m(e,"InverseFunction"))return;let n=Ys(e.engine,e.ops);if(n)return{value:n,because:"inverse function"}},e=>{if(!m(e,"Arctan2"))return;let[n,t]=e.ops,i=e.engine;return n.isFinite===!1&&t.isFinite===!1?{value:i.NaN,because:"arctan2"}:n.isSame(0)&&t.isSame(0)?{value:i.Zero,because:"arctan2"}:t.isFinite===!1?{value:t.isPositive?i.Zero:i.Pi,because:"arctan2"}:n.isFinite===!1?{value:n.isPositive?i.Pi.div(2):i.Pi.div(-2),because:"arctan2"}:n.isSame(0)?{value:t.isPositive?i.Zero:i.Pi,because:"arctan2"}:{value:i.function("Arctan",[n.div(t)]).simplify(),because:"arctan2"}},Py,Oy,Ly,Fy,qy,Vy,pp,Jy,zy,Gy,Uy,e=>{if(!m(e,"Multiply")||e.ops.length<2)return;let n=e.engine,t=new Map,i=[];for(let s of e.ops){let a,u;if(m(s,"Power"))a=s.op1,u=s.op2;else if(_(s))a=s,u=n.One;else{i.push(s);continue}let l=JSON.stringify(a.json),c=t.get(l);c||(c={base:a,terms:[]},t.set(l,c)),c.terms.push({term:s,exp:u})}let r=!1;for(let s=i.length-1;s>=0;s--){let a=i[s];if(E(a)){let f=a.numericValue;if(f instanceof we&&f.radical>1){let p=f.rational,d=Number(p[0]),g=Number(p[1]),h=new Map,b=Xt(f.radical);for(let[N,T]of Object.entries(b)){if(N==="1")continue;let I=Number(N),[M,w]=h.get(I)??[0,1];h.set(I,[M*2+T*w,w*2])}let y=Math.abs(d);if(y>1){let N=Xt(y);for(let[T,I]of Object.entries(N)){if(T==="1")continue;let M=Number(T),[w,k]=h.get(M)??[0,1];h.set(M,[w+I*k,k])}}if(g>1){let N=Xt(g);for(let[T,I]of Object.entries(N)){if(T==="1")continue;let M=Number(T),[w,k]=h.get(M)??[0,1];h.set(M,[w-I*k,k])}}if(h.size>0&&[...h.keys()].every(N=>t.has(JSON.stringify(n.number(N).json)))){for(let[N,[T,I]]of h){let M=JSON.stringify(n.number(N).json),w=t.get(M),k=Pe(Math.abs(T),I),P=T/k,F=I/k;w.terms.push({term:a,exp:F===1?n.number(P):n.number([P,F])})}i.splice(s,1),d<0&&i.push(n.NegativeOne),r=!0;continue}}}if(!E(a))continue;let u=a.re;if(Number.isInteger(u)&&Math.abs(u)>1){let f=Math.abs(u),p=Xt(f),d=Object.keys(p).filter(g=>g!=="1");if(d.length>0&&d.every(g=>t.has(JSON.stringify(n.number(Number(g)).json)))){for(let g of d){let h=p[Number(g)],b=JSON.stringify(n.number(Number(g)).json);t.get(b).terms.push({term:a,exp:n.number(h)})}i.splice(s,1),u<0&&i.push(n.NegativeOne),r=!0;continue}}let l=a.numerator?.re,c=a.denominator?.re;if(l!==void 0&&c!==void 0&&Number.isFinite(l)&&Number.isFinite(c)&&Number.isInteger(l)&&Number.isInteger(c)&&c>1){let f=Math.abs(l),p=f>1?Xt(f):{},d=Xt(c),g=new Set([...Object.keys(p).filter(h=>h!=="1"),...Object.keys(d).filter(h=>h!=="1")]);if(g.size>0&&[...g].every(h=>t.has(JSON.stringify(n.number(Number(h)).json)))){for(let h of g){let b=Number(h),y=p[b]??0,x=d[b]??0,N=JSON.stringify(n.number(b).json);t.get(N).terms.push({term:a,exp:n.number(y-x)})}i.splice(s,1),l<0&&i.push(n.NegativeOne),r=!0}}}for(let s of t.values())if(s.terms.length>1){let a=s.base;if(a.isPositive===!0||a.isNegative===!0||E(a))r=!0;else if(s.terms.map(f=>f.exp).reduce((f,p)=>f.add(p)).isPositive===!0)r=!0;else{for(let f of s.terms)i.push(f.term);s.terms.length=0}}if(!r)return;let o=[...i];for(let s of t.values())if(s.terms.length===1)o.push(s.terms[0].term);else{let u=s.terms.map(l=>l.exp).reduce((l,c)=>l.add(c));u.isSame(0)?o.push(n.One):u.isSame(1)?o.push(s.base):o.push(n._fn("Power",[s.base,u]))}return o.length===0?{value:n.One,because:"combined powers"}:o.length===1?{value:o[0],because:"combined powers"}:{value:n._fn("Multiply",o),because:"combined powers with same base"}}];function mp(e){return e===void 0?!1:typeof e=="number"?Number.isInteger(e):e.isExact}function b3(e){let n=e.operator;if(!Ct(n)&&!io(n))return;let t=e,i=e.engine;if(!m(e))return;let r=e.op1.simplify(),o=e.op2.simplify();if(e=i._fn(e.operator,[r,o]),e=gi(e)??e,Gn(e.operator),m(e)&&e.nops===2&&!e.op2.isSame(0)){let s=gi(i._fn(e.operator,[e.op1.sub(e.op2),i.Zero]));i.costFunction(s)<i.costFunction(e)&&(e=s)}if(!e.isSame(t))return{value:e,because:"simplify-relational-operator"}}function y3(e){return!m(e,"List")||!e.ops.every(t=>io(t.operator)||Ct(t.operator))?void 0:{value:e.engine.function("List",e.ops.map(t=>t.simplify())),because:"simplify-system-of-equations"}}function Yy(e,n){return Yr(n,e.context.lexicalScope)}function Qy(e,n,t,i){i??=e.context.lexicalScope,i.bindings.set(n,{value:new Et(e,n,{type:"unknown",inferred:!0})});let r=i.bindings.get(n);return ot(e,n,r,t),e._generation+=1,r}function Xy(e,n,t,i){i??=e.context.lexicalScope,i.bindings.set(n,{value:new Et(e,n,{type:"function"})});let r=i.bindings.get(n);return ot(e,n,r,t),e._generation+=1,r}function Ky(e,n){let t=Yr(n,e.context.lexicalScope);if(!(!t||!se(t)))return t.value.value}function ex(e,n,t){typeof t=="number"?t=e.number(t):typeof t=="boolean"&&(t=t?e.True:e.False);let i=Yr(n,e.context.lexicalScope);if(!i)throw new Error(`Unknown symbol "${n}"`);if(se(i)){i.value.value=t,e._generation+=1;return}throw new Error(`Cannot assign a value to operator symbol "${n}"`)}function nx(e,n,t,{alias:i}={}){if(!Gd(n))throw Error(`The type name "${n}" is invalid`);let r=e.context.lexicalScope;if(r.types?.[n])throw Error(`The type "${n}" is already defined in the current scope`);r.types??={},i??=!1,r.types[n]={kind:"reference",name:n,alias:i,def:void 0};let o=t instanceof V?t.type:typeof t=="string"?Q(t,e._typeResolver):t;r.types[n].def=o}function tx(e,n,t,i){if(typeof n!="string"){for(let[a,u]of Object.entries(n))e.declare(a,u);return e}let r=n;if(r==="Nothing")return e;if(t==null)throw Error(`Expected a definition or type for "${r}"`);if(typeof r!="string"||r.length===0||!rn(r))throw new Error(`Invalid symbol "${r}": ${it(r)}`);if(i??=e.context.lexicalScope,i.bindings.has(r))throw new Error(`The symbol "${r}" is already declared in this scope`);let s=t;if(ms(s))return e._declareSymbolValue(r,s,i),e;if(ps(s))return e._declareSymbolOperator(r,s,i),e;{let a=Q(s,e._typeResolver);if(!Qt(a))throw Error([`Invalid argument for "${r}"`,JSON.stringify(s,void 0,4),"Use a type, a `OperatorDefinition` or a `ValueDefinition`"].join(`
|
|
125
|
+
| `));e._declareSymbolValue(r,{type:a},i)}return e}function ix(e,n,t){if(typeof n=="object"){for(let[a,u]of Object.entries(n))e.assign(a,u);return e}let i=n;if(i==="Nothing")return e;let r=e.lookupDefinition(i);if(xe(r)){let a=Hy(e,t);if(a!==void 0)return ot(e,i,r,{value:a}),e._setSymbolValue(i,a),e;let u=Wy(e,t);if(!u)throw Error(`Invalid definition for symbol "${i}"`);return ot(e,i,r,u),e}let o=Hy(e,t);if(o!==void 0){if(!r)return e._declareSymbolValue(i,{value:o}),e;if(r.value.isConstant)throw Error(`Cannot assign a value to the constant "${i}"`);return r.value.inferredType&&(r.value.type=e.type(Se(r.value.type.type,o.type.type))),e._setSymbolValue(i,o),e}let s=Wy(e,t);if(s===void 0)throw Error(`Invalid definition for symbol "${i}"`);return r?(se(r),ot(e,i,r,s)):e.declare(i,s),e}function Hy(e,n){if(n==null||typeof n=="function")return;if(typeof n=="boolean")return n?e.True:e.False;if(typeof n=="number"||typeof n=="bigint")return e.number(n);let t=e.box(n);if(t.operator!=="Function"&&!t.unknowns.some(i=>i.startsWith("_")))return t}function Wy(e,n){if(typeof n=="function")return{evaluate:n,signature:"function"};if(n==null||typeof n=="boolean")return;let t=Qe(e.box(n));if(t!==void 0)return{evaluate:t}}var Hi="\x1B[0m";var dp="\x1B[30;1m";var gp="\x1B[34;1m";var hp="\x1B[36;1m";var bl="\x1B[1m";var ua=class e{_items;constructor(n){n?n instanceof e?this._items=new Map(n._items):this._items=new Map(n):this._items=new Map}has(n){for(let t of this._items.keys())if(t.isSame(n))return!0;return!1}get(n){for(let[t,i]of this._items)if(t.isSame(n))return i}clear(){this._items.clear()}set(n,t){for(let i of this._items.keys())if(i.isSame(n)){this._items.set(i,t);return}this._items.set(n,t)}delete(n){this._items.delete(n)}[Symbol.iterator](){return this._items.entries()}entries(){return this._items.entries()}};function rx(e,n,t){bp(e,n??{parent:e.context?.lexicalScope,bindings:new Map},t)}function ox(e){yp(e)}function bp(e,n,t){if(!t){let i=e._evalContextStack.length;i===0&&(t="system"),i===1&&(t="global"),t??=`anonymous_${i-1}`}e._evalContextStack.push({lexicalScope:n,name:t,assumptions:new ua(e.context?.assumptions??[])})}function yp(e){e._evalContextStack.pop()}function sx(e,n,t){if(!n)return t();e._evalContextStack.push({lexicalScope:n,name:"",assumptions:new ua(e.context?.assumptions??[])});try{return t()}finally{e._evalContextStack.pop()}}function ax(e,n){n?(n={...n},n.maxDepth??=1,n.details??=!1):n={details:!1,maxDepth:-2},n.maxDepth!==void 0&&n.maxDepth<0&&(n.maxDepth=e._evalContextStack.length+n.maxDepth),n.maxDepth=Math.min(e._evalContextStack.length-1,n.maxDepth);let t=0;for(;t<=n.maxDepth;){let i=e._evalContextStack[e._evalContextStack.length-1-t];t===0?console.group(`${bl}${gp}${i.name}${Hi}`):console.groupCollapsed(`${bl}${gp}${i.name}${Hi} ${dp}(${t})${Hi}`);let r=[...i.assumptions.entries()].map(([o,s])=>`${o}: ${s}`);if(r.length>0){console.groupCollapsed(`${bl}${r.length} assumptions${Hi}`);for(let o of r)console.info(o);console.groupEnd()}if(i.lexicalScope.bindings.size===0){console.groupEnd(),t+=1;continue}for(let[o,s]of i.lexicalScope.bindings)console.info(x3(o,s));console.groupEnd(),t+=1}}function x3(e,n){let t="";if(se(n)){let i=[];n.value.holdUntil==="never"&&i.push("(hold never)"),n.value.holdUntil==="N"&&i.push("(hold until N)"),n.value.inferredType&&i.push("inferred");let r=i.length>0?` ${i.join(" ")}`:"";t=`${hp}${e}${Hi}:${r}`,n.value.isConstant?(t+=` const ${n.value.type.toString()}`,n.value.value!==void 0&&(t+=` = ${n.value.value?.toString()}`)):t+=` ${n.value.type.toString()}`}else if(xe(n)){let i=[];n.operator.inferredSignature&&i.push("(inferred)");let r=i.length>0?` (${i.join(" ")})`:"";t=`${hp}${e}${Hi}:${r} ${n.operator.signature.toString()}`;let o=[];n.operator.lazy&&o.push("lazy"),n.operator.scoped&&o.push("scoped"),n.operator.broadcastable&&o.push("broadcastable"),n.operator.associative&&o.push("associative"),n.operator.commutative&&o.push("commutative"),n.operator.idempotent&&o.push("idempotent"),n.operator.involution&&o.push("involution"),n.operator.pure||o.push("not pure");let s=o.map(a=>`${dp}${a}${Hi}`).join(" ");s.length>0&&(t+=`
|
|
126
|
+
\u2514 ${s}`)}else t="unknown";return t}function ux(e,n){return n.type.matches("integer")?e.type("integer"):n.type.matches("rational")||n.type.matches("real")?e.type("real"):n.type.matches("complex")?e.type("number"):n.type}function lx(e){if(e.operator==="Element")return _3(e);if(e.operator==="Equal")return E3(e);if(Ct(e.operator))return v3(e);throw new Error("Unsupported assumption. Use `Element`, `Equal` or an inequality")}function E3(e){e.operator;let n=e.unknowns;if(n.length===0){let o=e.evaluate();return _(o,"True")?"tautology":_(o,"False")?"contradiction":"not-a-predicate"}let t=e.engine;if(!m(e))return"not-a-predicate";let i=e.op1,r=_(i)?i.symbol:void 0;if(r&&!S3(t,r)&&!e.op2.has(r)){let o=e.op2.evaluate();if(!o.isValid)return"not-a-predicate";let s=t.lookupDefinition(r);return!s||!se(s)?(t.declare(r,{value:o}),"ok"):s.value.type&&!o.type.matches(s.value.type)&&!s.value.inferredType?"contradiction":(t.context.lexicalScope.bindings.has(r)?(t._setSymbolValue(r,o),s.value.inferredType&&(s.value.type=ux(t,o))):t.declare(r,{value:o}),"ok")}if(n.length===1){let o=n[0],s=Bn(e,o);s.length===0&&t.context.assumptions.set(t.function("Equal",[e.op1.sub(e.op2),0]),!0);let a=s.length===1?s[0]:t.function("List",s),u=t.lookupDefinition(o);return!u||!se(u)?(t.declare(o,{value:a}),"ok"):u.value.type&&!s.every(l=>!l.type||a.type.matches(l.type))?"contradiction":(t.context.lexicalScope.bindings.has(o)?(t._setSymbolValue(o,a),u.value.inferredType&&(u.value.type=ux(t,a))):t.declare(o,{value:a}),"ok")}return t.context.assumptions.set(e,!0),"ok"}function v3(e){let n=e.engine;if(!m(e))return"internal-error";let t="",i,r;if(e.operator==="Less"?(i=e.op1,r=e.op2,t="<"):e.operator==="LessEqual"?(i=e.op1,r=e.op2,t="<="):e.operator==="Greater"?(i=e.op2,r=e.op1,t="<"):e.operator==="GreaterEqual"&&(i=e.op2,r=e.op1,t="<="),!t)return"internal-error";let o=i.sub(r),s=n.box([t==="<"?"Less":"LessEqual",o,0]).evaluate();if(_(s,"True"))return"tautology";if(_(s,"False"))return"contradiction";let a=s.unknowns;if(a.length===0)return"not-a-predicate";if(a.length===1){let u=a[0],l=Kt(n,u),c=e.operator,f=e.op1,p=e.op2,d=_(f,u),g=d?p:f,h=E(g)?g.numericValue:void 0;if(h!==void 0){let b=h;if(typeof b=="number"&&isFinite(b)){let y;if(c==="Greater"?y=d?"greater":"less":c==="GreaterEqual"?y=d?"greaterEqual":"lessEqual":c==="Less"?y=d?"less":"greater":y=d?"lessEqual":"greaterEqual",y==="greater"||y==="greaterEqual"){let x=y==="greater";if(l.lowerBound!==void 0){let N=E(l.lowerBound)?l.lowerBound.numericValue:void 0;if(typeof N=="number"&&isFinite(N)){if(x){if(N>b||l.lowerStrict&&N>=b)return"tautology"}else if(N>b||l.lowerStrict&&N>=b||!l.lowerStrict&&N>=b)return"tautology"}}if(l.upperBound!==void 0){let N=E(l.upperBound)?l.upperBound.numericValue:void 0;if(typeof N=="number"&&isFinite(N)){if(x){if(N<b||l.upperStrict&&N<=b||!l.upperStrict&&N<=b)return"contradiction"}else if(N<b||l.upperStrict&&N<=b)return"contradiction"}}}else{let x=y==="less";if(l.upperBound!==void 0){let N=E(l.upperBound)?l.upperBound.numericValue:void 0;if(typeof N=="number"&&isFinite(N)){if(x){if(N<b||l.upperStrict&&N<=b)return"tautology"}else if(N<b||N<=b)return"tautology"}}if(l.lowerBound!==void 0){let N=E(l.lowerBound)?l.lowerBound.numericValue:void 0;if(typeof N=="number"&&isFinite(N)){if(x){if(N>b||l.lowerStrict&&N>=b||!l.lowerStrict&&N>=b)return"contradiction"}else if(N>b||l.lowerStrict&&N>b)return"contradiction"}}}}}}if(a.length===1){let u=a[0],l=n.lookupDefinition(u);l?se(l)&&l.value.inferredType&&(l.value.type=n.type("real")):n.declare(u,{type:"real"})}return s.operator==="Less"||s.operator,n.context.assumptions.set(s,!0),"ok"}function _3(e){e.operator;let n=e.engine;if(!m(e))return"not-a-predicate";let t=N3(e.op1);if(t.length===1){let s=e.op2.evaluate();if(!s.isValid)return"not-a-predicate";let a=Qa(s);if(a==="unknown")throw new Error(`Invalid domain "${s.toString()}"`);return n.declare(t[0],a),"ok"}let i=e.op1,r=_(i)?i.symbol:void 0;if(r&&cx(n,r)){let s=e.op2.evaluate();if(!s.isValid)return"not-a-predicate";let a=Qa(s);n.context?.lexicalScope?.bindings.has(r)||n.declare(r,Qa(s));let u=n.lookupDefinition(r);return se(u)?u.value.type&&!L(a,u.value.type.type)?"contradiction":(u.value.type=new V(a,n._typeResolver),"ok"):xe(u)?L(a,jn(u.operator.signature.type))?"ok":"contradiction":"not-a-predicate"}if(t.length>0)return n.context.assumptions.set(e,!0),"ok";let o=e.evaluate();return _(o,"True")?"tautology":_(o,"False")?"contradiction":"not-a-predicate"}function cx(e,n){return e.lookupDefinition(n)!==void 0}function N3(e){return e.symbols.filter(n=>!cx(e.engine,n))}function S3(e,n){let t=e.lookupDefinition(n);return t?!!(se(t)&&t.value.isConstant||e._getSymbolValue(n)!==void 0):!1}function fx(e,n){let t=e.context?.assumptions;if(t)for(let[i,r]of t.entries()){let o=i.operator;if(!o||o!=="Less"&&o!=="LessEqual"||!m(i))continue;let s=i.ops;if(s.length!==2)continue;let[a,u]=s;if(u.isSame(0)){if(_(a,n)){if(o==="Less")return"negative";if(o==="LessEqual")return"non-positive"}if(m(a,"Negate")&&_(a.op1,n)){if(o==="Less")return"positive";if(o==="LessEqual")return"non-negative"}if(m(a,"Subtract")){let[l,c]=a.ops;if(l&&c){if(_(c,n)&&l.isNonNegative===!0&&o==="Less")return"positive";if(_(l,n)&&c.isNonPositive===!0&&o==="Less")return"negative"}}if(m(a,"Add"))for(let l of a.ops){if(_(l,n)){let c=a.ops.filter(f=>f!==l);if(c.length>0&&c.every(f=>f.isNonNegative===!0)){if(o==="Less")return"negative";if(o==="LessEqual")return"non-positive"}}if(m(l,"Negate")&&_(l.op1,n)){let c=a.ops.filter(f=>f!==l);if(c.length>0&&c.every(f=>f.isNonPositive===!0)){if(o==="Less")return"positive";if(o==="LessEqual")return"non-negative"}}}}}}function px(e,n){let t=e.box(n,{form:"raw"}),i=[],r=c=>c.operator.startsWith("_")||Ze(c)?!0:m(c)?c.ops.some(r):!1,o=c=>{let f=Object.keys(c).sort();for(let p of i){let d=Object.keys(p).sort();if(d.length!==f.length)continue;let g=!0;for(let h=0;h<f.length;h++){if(d[h]!==f[h]){g=!1;break}let b=f[h];if(!c[b].isSame(p[b])){g=!1;break}}if(g)return}i.push(c)},s=e.context.assumptions,a=()=>{let c=new Set;for(let[f,p]of s)if(p===!0)for(let d of f.symbols)c.add(d);return[...c]},u=c=>{let f=c.operator;if(f!=="Less"&&f!=="LessEqual"&&f!=="Greater"&&f!=="GreaterEqual")return[{pattern:c}];if(!m(c))return[{pattern:c}];let p=f==="Greater"||f==="GreaterEqual"?c.op2:c.op1,d=f==="Greater"||f==="GreaterEqual"?c.op1:c.op2,g=f==="Less"||f==="Greater"?"Less":"LessEqual",h=e.box(["Add",p,["Negate",d]],{form:"raw"});return[{pattern:c},{pattern:e.box([g,h,0],{form:"raw"}),matchPermutations:!1}]};if(m(t,"Element")){let c=t.op1,f=t.op2;if(_(c)&&Ze(f)){let p=on(f);if(p&&!p.startsWith("__")){let d=e.box(c.symbol).type;d.isUnknown||o({[p]:e.box(d.toString(),{form:"raw"})})}}}if((t.operator==="Greater"||t.operator==="GreaterEqual"||t.operator==="Less"||t.operator==="LessEqual")&&m(t)&&Ze(t.op2)){let c=on(t.op2);if(c&&!c.startsWith("__")){let f=t.operator==="Greater"||t.operator==="GreaterEqual",p=t.operator==="Greater"||t.operator==="Less",d=t.op1;if(_(d)){let g=Kt(e,d.symbol),h=f?g.lowerBound:g.upperBound,b=f?g.lowerStrict:g.upperStrict;h!==void 0&&(!p||b===!0)&&o({[c]:h})}if(Ze(d)){let g=on(d);if(g&&!g.startsWith("__"))for(let h of a()){let b=Kt(e,h),y=f?b.lowerBound:b.upperBound,x=f?b.lowerStrict:b.upperStrict;y===void 0||p&&x!==!0||o({[g]:e.box(h,{form:"canonical"}),[c]:y})}}}}let l=u(t);for(let[c,f]of s)if(f===!0)for(let{pattern:p,matchPermutations:d}of l){let g=c.match(p,{useVariations:!0,matchPermutations:d});g!==null&&o(g)}return i.length===0&&!r(t)&&!e._isVerifying&&Ho(e,e.box(n,{form:"canonical"}))===!0&&o({}),i}function Ho(e,n){if(!e._isVerifying){e._isVerifying=!0;try{let i=(cr(n)?e.parse(n,{form:"raw"}):e.box(n,{form:"raw"})).evaluate();if(_(i)){if(i.symbol==="True")return!0;if(i.symbol==="False")return!1}let r=i.operator;if(r==="Not"&&m(i)){let o=Ho(e,i.op1);return o===void 0?void 0:!o}if(r==="And"&&m(i)){let o=!1;for(let s of i.ops){let a=Ho(e,s);if(a===!1)return!1;a===void 0&&(o=!0)}return o?void 0:!0}if(r==="Or"&&m(i)){let o=!1;for(let s of i.ops){let a=Ho(e,s);if(a===!0)return!0;a===void 0&&(o=!0)}return o?void 0:!1}return}finally{e._isVerifying=!1}}}function mx(e,n){try{let t=cr(n)?e.parse(n,{form:"raw"}):e.box(n,{form:"raw"});return e._generation+=1,lx(t)}catch(t){throw console.error(t.message.toString()),t}}function xp(e,n){if(n===void 0){e.context.assumptions?.clear(),e._generation+=1;return}if(Array.isArray(n)){for(let t of n)xp(e,t);return}if(typeof n=="string"){for(let[i,r]of e.context.assumptions)i.has(n)&&e.context.assumptions.delete(i);let t=e.context.lexicalScope.bindings.get(n);t&&se(t)&&!t.value.isConstant&&(t.value.value=void 0)}e._generation+=1}var dx="https://oeis.org";function T3(e){return typeof e=="object"&&e!==null?e:null}function I3(e){if(typeof e=="number"&&Number.isInteger(e)&&e>=0)return e;if(typeof e=="string"){let n=Number.parseInt(e,10);if(Number.isInteger(n)&&n>=0)return n}}function w3(e){return typeof e!="string"?[]:e.split(",").map(n=>Number.parseInt(n.trim(),10)).filter(n=>Number.isFinite(n))}function M3(e){if(!Array.isArray(e))return;let n=e.find(t=>typeof t=="string");return typeof n=="string"?n:void 0}function k3(e){if(typeof e=="string")return[e];if(!Array.isArray(e))return;let n=e.filter(t=>typeof t=="string");return n.length>0?n:void 0}function C3(e){if(Array.isArray(e))return e;let n=T3(e);if(!n)return[];let t=n.results;return Array.isArray(t)?t:[]}function A3(e){return C3(e).map(t=>{let i=I3(t.number),r=i!==void 0?`A${String(i).padStart(6,"0")}`:"";return{id:r,name:typeof t.name=="string"?t.name:"",terms:w3(t.data),formula:M3(t.formula),comments:k3(t.comment),url:r?`${dx}/${r}`:""}})}async function gx(e,n={}){let t=n.timeout??1e4,i=n.maxResults??5,r=e.join(","),o=`${dx}/search?fmt=json&q=${encodeURIComponent(r)}&start=0&count=${i}`;try{let s=new AbortController,a=setTimeout(()=>s.abort(),t),u=await fetch(o,{signal:s.signal,headers:{Accept:"application/json"}});if(clearTimeout(a),!u.ok)throw new Error(`OEIS request failed: ${u.status}`);let l=await u.json();return A3(l).slice(0,i)}catch(s){throw s instanceof Error&&s.name==="AbortError"?new Error("OEIS request timed out"):s}}async function hx(e,n,t={}){let i=n.map(r=>{if(typeof r=="number"){if(!Number.isInteger(r))throw new Error("OEIS lookup requires integer terms");return r}let o=r.re;if(!Number.isInteger(o))throw new Error("OEIS lookup requires integer terms");return o});return gx(i,t)}async function bx(e,n,t=10,i={}){let r=e.getSequenceTerms(n,0,t-1);if(!r)throw new Error(`'${n}' is not a defined sequence`);let o=r.map(a=>a.re);return{matches:await gx(o,i),terms:o}}function yx(e,n,t){if(!t.base||Object.keys(t.base).length===0)throw new Error(`Sequence "${n}" requires at least one base case`);if(!t.recurrence)throw new Error(`Sequence "${n}" requires a recurrence relation`);e.declare(n,{subscriptEvaluate:()=>{}});let i=Pf(e,n,t);if(!i.valid)throw new Error(i.error);let r=Rf(e,n,t),o=e.lookupDefinition(n);return o&&se(o)&&(o.value.subscriptEvaluate=r),e}function xx(e,n){return B0(e,n)}function Ex(e,n){return J0(e,n)}function vx(e){return z0(e)}function _x(e,n){return Lf(e,n)}function Nx(e,n){U0(e,n)}function Sx(e,n){return j0(e,n)}function Tx(e,n,t,i,r){return G0(e,n,t,i,r)}function Ix(e,n,t){return hx(e,n,t)}function wx(e,n,t,i){return bx(e,n,t,i)}var yl=class{_entries={};getOrBuild(n,t,i){if(this._entries[n]===void 0)try{this._entries[n]={build:t,purge:i,value:t()}}catch(r){console.error(`Fatal error building cache "${n}":
|
|
127
|
+
${r}`)}return this._entries[n]?.value}invalidate(n){delete this._entries[n]}purgeValues(){for(let n of Object.keys(this._entries)){let t=this._entries[n];t.value&&(t.purge?t.value=t.purge(t.value):delete this._entries[n])}}};var Wi=class extends de{_kind="symbol";_hash;_id;_def;constructor(n,t,i){super(n,i?.metadata),rn(t),`${t}${it(t)}`,this._id=t,this._def=i?.def}get json(){return $n(this._id)?this._id:{sym:this._id}}get hash(){return this._hash??=rt(this._id),this._hash}get isPure(){return!0}get isConstant(){let n=this._def;return(se(n)&&n?.value.isConstant)??!1}bind(){}reset(){}get isCanonical(){return this._def!==void 0}set isCanonical(n){throw new Error("Setting the isCanonical property is not allowed. Use the canonical() method instead.")}get canonical(){return this._def?this:this.engine.symbol(this._id)}is(n,t){if(t===void 0&&this.isSame(n))return!0;let i=this.value;return i&&i!==this?i.is(n,t):!1}isSame(n){if(n===!0)return this.symbol==="True"||_(this.value,"True");if(n===!1)return this.symbol==="False"||_(this.value,"False");if(n instanceof de&&_(n))return this.symbol===n.symbol;let t=n instanceof de?n.value:n;return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"||t instanceof de?this.value?.isSame(t)??!1:!1}toNumericValue(){this.isCanonical;let n=this.engine;return this.symbol==="ImaginaryUnit"?[n._numericValue({re:0,im:1}),n.One]:this.symbol==="PositiveInfinity"||this.isInfinity&&this.isPositive?[n._numericValue(1/0),n.One]:this.symbol==="NegativeInfinity"||this.isInfinity&&this.isNegative?[n._numericValue(-1/0),n.One]:this.symbol==="NaN"?[n._numericValue(NaN),n.One]:[n._numericValue(1),this]}neg(){return Sr(this)}inv(){return this.engine._fn("Divide",[this.engine.One,this])}abs(){return this.isNonNegative?this:this.isNonPositive?this.neg():this.engine._fn("Abs",[this])}add(n){return n===0?this:fe(this,this.engine.box(n))}mul(n){if(n===1)return this;if(n===-1)return this.neg();if(n===0&&!this.isNaN)return this.engine.Zero;if(n instanceof Ee){if(n.isOne)return this;if(n.isNegativeOne)return this.neg();if(n.isZero&&!this.isNaN)return this.engine.Zero}return ke(this,this.engine.box(n))}div(n){return Eo(this,n)}pow(n){return We(this,n,{numericApproximation:!1})}root(n){let t=typeof n=="number"?n:n.im===0?n.re:void 0,i=this.engine;return this.symbol==="ComplexInfinity"||t===0?i.NaN:t===1?this:t===2?this.sqrt():t===-1?this.inv():i._fn("Root",[this,i.box(n)])}sqrt(){let n=this.engine;return this.symbol==="ComplexInfinity"?n.NaN:this.isSame(0)?this:this.isSame(1)?this.engine.One:this.isSame(-1)?n.I:n._fn("Sqrt",[this])}ln(n){let t=n?this.engine.box(n):void 0;return this.isSame(0)?this.engine.NegativeInfinity:this.symbol==="ExponentialE"?!t||_(t,"ExponentialE")?this.engine.One:this.engine.One.div(t.ln()):t?t.re===10?this.engine._fn("Log",[this]):this.engine._fn("Log",[this,t]):this.engine._fn("Ln",[this])}solve(n){let t=cs(n);return t.length!==1?null:t.includes(this.symbol)?[this.engine.Zero]:null}get complexity(){return 7}get operator(){return"Symbol"}get symbol(){return this._id}get baseDefinition(){return this.valueDefinition??this.operatorDefinition}get valueDefinition(){if(se(this._def))return this._def.value}get operatorDefinition(){if(xe(this._def))return this._def.operator}infer(n,t="narrow"){if(!this._def)return!1;let i=this._def;if(se(i))return i.value.inferredType||i.value.type.isUnknown?(i.value.isConstant,i.value.type=this.engine.type(t==="widen"?Se(i.value.type.type,n):wi(i.value.type.type,n)),!0):!1;if(xe(i)){let r=this.engine.type(t==="widen"?Se(i.operator.signature.type,n):wi(i.operator.signature.type,n));return r.matches("function")?(i.operator.signature=r,!0):(ot(this.engine,this._id,i,{type:r.type}),!0)}return!1}get _value(){if(!this._def||xe(this._def))return;if(this._def.value.isConstant)return this._def.value.value;let n=this.engine._getSymbolValue(this._id);if(!(n!==void 0&&"symbol"in n&&n.symbol===this._id))return n}get value(){return xe(this._def)?this.engine._fn("Operator",[this.engine.string(this._id)]):this._value}set value(n){if(!this._def)throw new Error(`Cannot set value of non-canonical ${this._id}`);let t=this.engine;t.forget(this._id);let i;if(typeof n=="boolean"&&(n=n?t.True:t.False),typeof n=="string"&&(n=t.string(n)),typeof n=="object")if("re"in n&&"im"in n)n=t.complex(n.re??0,n.im);else if("num"in n&&"denom"in n)n=t.number([n.num,n.denom]);else if(Array.isArray(n))n=t._fn("List",n.map(r=>t.box(r)));else throw new Error(`Invalid value for symbol ${this._id}: ${n}`);if(n!==void 0&&(i=t.box(n).evaluate()),i?.type.matches("function")){delete this._def.value,this._def.operator={signature:i.type,evaluate:i};return}if(se(this._def)&&this._def.value.isConstant)throw new Error(`The value of the constant "${this._id}" cannot be changed`);t._setSymbolValue(this._id,i)}get type(){let n=this._def;return se(n)?n.value.type:xe(n)?n.operator.signature:V.unknown}set type(n){if(!this._def)throw new Error(`Cannot set type of non-canonical symbol "${this._id}"`);if(this._id[0]==="_")throw new Error(`The type of the wildcard "${this._id}" cannot be changed`);this.engine.forget(this._id),typeof n=="string"?n=Q(n):n instanceof V&&(n=n.type),n==="function"||Ra(n)?xe(this._def)?this._def.operator.signature=n:ot(this.engine,this._id,this._def,{signature:n}):xe(this._def)?ot(this.engine,this._id,this._def,{type:n}):this._def.value.type=this.engine.type(n)}has(n){return typeof n=="string"?this._id===n:n.includes(this._id)}match(n,t){return Vo(this,n,t)}get shape(){let n=this.type.type;return typeof n=="object"&&n.kind==="list"&&n.dimensions?n.dimensions:[]}get rank(){return this.shape.length}get sgn(){return this.value?this.value.sgn:fx(this.engine,this.symbol)}get isOdd(){return this.value?.isOdd}get isEven(){return this.value?.isEven}get isFinite(){return this.value?.isFinite}get isInfinity(){return this.value?.isInfinity}get isNaN(){return this.value?.isNaN}get isPositive(){return Bo(this.sgn)}get isNonPositive(){return Uo(this.sgn)}get isNegative(){return zo(this.sgn)}get isNonNegative(){return Jo(this.sgn)}get isFunction(){if(!this.type.isUnknown)return this.type.matches("function")}get isNumber(){let n=this.type;if(!n.isUnknown)return n.matches("number")}get isInteger(){let n=this.type;if(!n.isUnknown)return n.matches("integer")}get isRational(){let n=this.type;if(!n.isUnknown)return n.matches("rational")}get isReal(){let n=this.type;if(!n.isUnknown)return n.matches("real")}get re(){return this.value?.re??NaN}get im(){return this.value?.im??NaN}get bignumRe(){return this.value?.bignumRe}get bignumIm(){return this.value?.bignumIm}simplify(n){return zn(this,n).at(-1)?.value??this}evaluate(n){let t=this.valueDefinition;if(!t)return this;let i=t.holdUntil;if(t.isConstant){if(n?.numericApproximation){if(i==="never"||i==="evaluate"||i==="N")return t.value?.N()??this}else if(i==="never"||i==="evaluate")return t.value?.evaluate(n)??this}else if(i==="never"||i==="evaluate"||i==="N"&&n?.numericApproximation){let r=this.engine._getSymbolValue(this._id)??this;return r.operator==="Unevaluated"&&(r=r.evaluate(n)??this),r}return this}N(){let n=this.valueDefinition;if(n&&n.holdUntil==="never")return this;if(n&&!n.isConstant){let t=this.engine._getSymbolValue(this._id);if(t)return t.N()}return n?.value?.N()??this}replace(n,t){return fi(this,n,t).at(-1)?.value??null}subs(n,t){let i=t?.canonical??this.isCanonical;if(n[this._id]===void 0)return i?this.canonical:this;let r=i===!0?"canonical":i===!1?"raw":i;return this.engine.box(n[this._id],{form:r})}get _asCollection(){if(se(this._def))return this._def.value.collection}get isCollection(){return this._asCollection?.iterator!==void 0||(this._value?.isCollection??!1)}get isIndexedCollection(){return this._asCollection?.at!==void 0||(this._value?.isIndexedCollection??!1)}get isLazyCollection(){return this._asCollection?.isLazy?.(this._value??this)??this._value?.isLazyCollection??!1}contains(n){return this._asCollection?.contains?.(this._value??this,n)??this._value?.contains?.(n)}get count(){return this._asCollection?.count(this._value??this)??this._value?.count??0}get isEmptyCollection(){return this._asCollection?.isEmpty?.(this._value??this)??this._value?.isEmptyCollection??this.count===0}get isFiniteCollection(){return this._asCollection?.isFinite?.(this._value??this)??this._value?.isFiniteCollection??isFinite(this.count)}each(){let n=this._asCollection?.iterator?.(this._value??this);return n?(function*(){let t=n.next();for(;!t.done;)yield t.value,t=n.next()})():this._value?.each()??(function*(){})()}at(n){return this._asCollection?.at?.(this._value??this,n)??this._value?.at?.(n)}get(n){return this._value?.get?.(n)}indexWhere(n){return this._asCollection?.indexWhere?this._asCollection.indexWhere(this._value??this,n):this._value?.indexWhere(n)}subsetOf(n,t){return this._asCollection?.subsetOf?.(this._value??this,n,t)??this._value?.subsetOf?.(n,t)??!1}};function R3(e,n){return e.lookupDefinition(n)}function Mx(e,n){for(let t of Object.keys(n))n[t]=new Wi(e,t,{def:R3(e,t)})}function kx(e){for(let n of Object.values(e))n?.reset()}var Ep={Add:["+",11],Negate:["-",14],Subtract:["-",11],Multiply:["*",12],Divide:["/",13],Equal:["===",8],NotEqual:["!==",8],LessEqual:["<=",9],GreaterEqual:[">=",9],Less:["<",9],Greater:[">",9],And:["&&",4],Or:["||",3],Not:["!",14]},vp={Abs:(e,n)=>C.isComplexValued(e[0])?`_SYS.cabs(${n(e[0])})`:`Math.abs(${n(e[0])})`,Add:(e,n)=>{if(e.length===1)return n(e[0]);if(!e.some(s=>C.isComplexValued(s)))return`(${e.map(s=>n(s)).join(" + ")})`;let i=e.map(s=>({code:n(s),isComplex:C.isComplexValued(s)})),r=i.map(s=>s.isComplex?`(${s.code}).re`:s.code),o=i.filter(s=>s.isComplex).map(s=>`(${s.code}).im`);return`({ re: ${r.join(" + ")}, im: ${o.join(" + ")} })`},Arccos:(e,n)=>C.isComplexValued(e[0])?`_SYS.cacos(${n(e[0])})`:`Math.acos(${n(e[0])})`,Arcosh:"Math.acosh",Arccot:([e],n)=>{if(e===null)throw new Error("Arccot: no argument");return C.isComplexValued(e)?`_SYS.cacot(${n(e)})`:`Math.atan(1 / (${n(e)}))`},Arcoth:([e],n)=>{if(e===null)throw new Error("Arcoth: no argument");return C.isComplexValued(e)?`_SYS.cacoth(${n(e)})`:`Math.atanh(1 / (${n(e)}))`},Arccsc:([e],n)=>{if(e===null)throw new Error("Arccsc: no argument");return C.isComplexValued(e)?`_SYS.cacsc(${n(e)})`:`Math.asin(1 / (${n(e)}))`},Arcsch:([e],n)=>{if(e===null)throw new Error("Arcsch: no argument");return C.isComplexValued(e)?`_SYS.cacsch(${n(e)})`:`Math.asinh(1 / (${n(e)}))`},Arcsec:([e],n)=>{if(e===null)throw new Error("Arcsec: no argument");return C.isComplexValued(e)?`_SYS.casec(${n(e)})`:`Math.acos(1 / (${n(e)}))`},Arsech:([e],n)=>{if(e===null)throw new Error("Arsech: no argument");return C.isComplexValued(e)?`_SYS.casech(${n(e)})`:`Math.acosh(1 / (${n(e)}))`},Arcsin:(e,n)=>C.isComplexValued(e[0])?`_SYS.casin(${n(e[0])})`:`Math.asin(${n(e[0])})`,Arsinh:"Math.asinh",Arctan:(e,n)=>C.isComplexValued(e[0])?`_SYS.catan(${n(e[0])})`:`Math.atan(${n(e[0])})`,Artanh:"Math.atanh",Ceil:"Math.ceil",Chop:"_SYS.chop",Cos:(e,n)=>C.isComplexValued(e[0])?`_SYS.ccos(${n(e[0])})`:`Math.cos(${n(e[0])})`,Cosh:(e,n)=>C.isComplexValued(e[0])?`_SYS.ccosh(${n(e[0])})`:`Math.cosh(${n(e[0])})`,Cot:([e],n)=>{if(e===null)throw new Error("Cot: no argument");return C.isComplexValued(e)?`_SYS.ccot(${n(e)})`:C.inlineExpression("Math.cos(${x}) / Math.sin(${x})",n(e))},Coth:([e],n)=>{if(e===null)throw new Error("Coth: no argument");return C.isComplexValued(e)?`_SYS.ccoth(${n(e)})`:C.inlineExpression("(Math.cosh(${x}) / Math.sinh(${x}))",n(e))},Csc:([e],n)=>{if(e===null)throw new Error("Csc: no argument");return C.isComplexValued(e)?`_SYS.ccsc(${n(e)})`:`1 / Math.sin(${n(e)})`},Csch:([e],n)=>{if(e===null)throw new Error("Csch: no argument");return C.isComplexValued(e)?`_SYS.ccsch(${n(e)})`:`1 / Math.sinh(${n(e)})`},Exp:(e,n)=>C.isComplexValued(e[0])?`_SYS.cexp(${n(e[0])})`:`Math.exp(${n(e[0])})`,Floor:"Math.floor",Fract:([e],n)=>{if(e===null)throw new Error("Fract: no argument");return C.inlineExpression("${x} - Math.floor(${x})",n(e))},Gamma:"_SYS.gamma",GCD:"_SYS.gcd",Integrate:(e,n,t)=>O3(e,n,t),LCM:"_SYS.lcm",Product:(e,n,t)=>Ax("Product",e,n,t),Sum:(e,n,t)=>Ax("Sum",e,n,t),Limit:(e,n)=>`_SYS.limit(${n(e[0])}, ${n(e[1])})`,Ln:(e,n)=>C.isComplexValued(e[0])?`_SYS.cln(${n(e[0])})`:`Math.log(${n(e[0])})`,List:(e,n)=>`[${e.map(t=>n(t)).join(", ")}]`,Matrix:(e,n)=>n(e[0]),Tuple:(e,n)=>`[${e.map(t=>n(t)).join(", ")}]`,Log:(e,n)=>e.length===1?`Math.log10(${n(e[0])})`:`(Math.log(${n(e[0])}) / Math.log(${n(e[1])}))`,GammaLn:"_SYS.lngamma",Lb:"Math.log2",Max:"Math.max",Mean:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.mean(${n(e[0])})`:`_SYS.mean([${e.map(t=>n(t)).join(", ")}])`,Median:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.median(${n(e[0])})`:`_SYS.median([${e.map(t=>n(t)).join(", ")}])`,Variance:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.variance(${n(e[0])})`:`_SYS.variance([${e.map(t=>n(t)).join(", ")}])`,PopulationVariance:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.populationVariance(${n(e[0])})`:`_SYS.populationVariance([${e.map(t=>n(t)).join(", ")}])`,StandardDeviation:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.standardDeviation(${n(e[0])})`:`_SYS.standardDeviation([${e.map(t=>n(t)).join(", ")}])`,PopulationStandardDeviation:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.populationStandardDeviation(${n(e[0])})`:`_SYS.populationStandardDeviation([${e.map(t=>n(t)).join(", ")}])`,Kurtosis:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.kurtosis(${n(e[0])})`:`_SYS.kurtosis([${e.map(t=>n(t)).join(", ")}])`,Skewness:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.skewness(${n(e[0])})`:`_SYS.skewness([${e.map(t=>n(t)).join(", ")}])`,Mode:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.mode(${n(e[0])})`:`_SYS.mode([${e.map(t=>n(t)).join(", ")}])`,Quartiles:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.quartiles(${n(e[0])})`:`_SYS.quartiles([${e.map(t=>n(t)).join(", ")}])`,InterquartileRange:(e,n)=>e.length===0?"NaN":e.length===1?`_SYS.interquartileRange(${n(e[0])})`:`_SYS.interquartileRange([${e.map(t=>n(t)).join(", ")}])`,Min:"Math.min",Power:(e,n)=>{let t=e[0],i=e[1];if(t===null)throw new Error("Power: no argument");if(C.isComplexValued(t)||C.isComplexValued(i))return`_SYS.cpow(${n(t)}, ${n(i)})`;let r=i.re;return r===.5?`Math.sqrt(${n(t)})`:r===1/3?`Math.cbrt(${n(t)})`:r===1?n(t):r===-1?`(1 / (${n(t)}))`:r===-.5?`(1 / Math.sqrt(${n(t)}))`:`Math.pow(${n(t)}, ${n(i)})`},Range:(e,n)=>{if(e.length===0)return"[]";if(e.length===1)return`Array.from({length: ${n(e[0])}}, (_, i) => i)`;let t=n(e[0]),i=n(e[1]),r=e[2]?n(e[2]):"1";if(t===null)throw new Error("Range: no start");if(i===null&&(i=t,t="1"),r==="0")throw new Error("Range: step cannot be zero");if(parseFloat(r)===1){let o=parseFloat(i),s=parseFloat(t);return o!==null&&s!==null?o-s<50?`[${Array.from({length:o-s+1},(a,u)=>s+u).join(", ")}]`:`Array.from({length: ${o-s+1}
|
|
128
|
+
}, (_, i) => ${t} + i)`:`Array.from({length: ${i} - ${t} + 1
|
|
129
|
+
}, (_, i) => ${t} + i)`}return`Array.from({length: Math.floor((${i} - ${t}) / ${r}) + 1}, (_, i) => ${t} + i * ${r})`},Root:([e,n],t)=>{if(e===null)throw new Error("Root: no argument");return n===null?`Math.sqrt(${t(e)})`:n?.re===2?`Math.sqrt(${t(e)})`:n?.re===3?`Math.cbrt(${t(e)})`:isNaN(n?.re)?`Math.pow(${t(e)}, 1 / (${t(n)}))`:`Math.pow(${t(e)}, ${1/n.re})`},Random:"Math.random",Round:"Math.round",Square:(e,n)=>{let t=e[0];if(t===null)throw new Error("Square: no argument");return`Math.pow(${n(t)}, 2)`},Sec:(e,n)=>{let t=e[0];if(t===null)throw new Error("Sec: no argument");return C.isComplexValued(t)?`_SYS.csec(${n(t)})`:`1 / Math.cos(${n(t)})`},Sech:(e,n)=>{let t=e[0];if(t===null)throw new Error("Sech: no argument");return C.isComplexValued(t)?`_SYS.csech(${n(t)})`:`1 / Math.cosh(${n(t)})`},Heaviside:"_SYS.heaviside",Sign:"Math.sign",Sinc:"_SYS.sinc",FresnelS:"_SYS.fresnelS",FresnelC:"_SYS.fresnelC",Sin:(e,n)=>C.isComplexValued(e[0])?`_SYS.csin(${n(e[0])})`:`Math.sin(${n(e[0])})`,Sinh:(e,n)=>C.isComplexValued(e[0])?`_SYS.csinh(${n(e[0])})`:`Math.sinh(${n(e[0])})`,Sqrt:(e,n)=>C.isComplexValued(e[0])?`_SYS.csqrt(${n(e[0])})`:`Math.sqrt(${n(e[0])})`,Tan:(e,n)=>C.isComplexValued(e[0])?`_SYS.ctan(${n(e[0])})`:`Math.tan(${n(e[0])})`,Tanh:(e,n)=>C.isComplexValued(e[0])?`_SYS.ctanh(${n(e[0])})`:`Math.tanh(${n(e[0])})`,Mod:([e,n],t)=>{if(e===null||n===null)throw new Error("Mod: missing argument");let i=t(e),r=t(n);return`((${i} % ${r}) + ${r}) % ${r}`},Truncate:"Math.trunc",Remainder:([e,n],t)=>{if(e===null||n===null)throw new Error("Remainder: missing argument");return`(${t(e)} - ${t(n)} * Math.round(${t(e)} / ${t(n)}))`},Subtract:([e,n],t)=>{if(e===null||n===null)throw new Error("Subtract: missing argument");let i=C.isComplexValued(e),r=C.isComplexValued(n);if(!i&&!r)return`(${t(e)} - ${t(n)})`;let o=t(e),s=t(n),a=i?`(${o}).re`:o,u=i?`(${o}).im`:"0",l=r?`(${s}).re`:s,c=r?`(${s}).im`:"0";return`({ re: ${a} - ${l}, im: ${u} - ${c} })`},Divide:([e,n],t)=>{if(e===null||n===null)throw new Error("Divide: missing argument");let i=C.isComplexValued(e),r=C.isComplexValued(n);return!i&&!r?`(${t(e)} / ${t(n)})`:i&&r?`(() => { const _a = ${t(e)}, _b = ${t(n)}, _d = _b.re * _b.re + _b.im * _b.im; return { re: (_a.re * _b.re + _a.im * _b.im) / _d, im: (_a.im * _b.re - _a.re * _b.im) / _d }; })()`:i&&!r?`(() => { const _a = ${t(e)}, _r = ${t(n)}; return { re: _a.re / _r, im: _a.im / _r }; })()`:`(() => { const _r = ${t(e)}, _b = ${t(n)}, _d = _b.re * _b.re + _b.im * _b.im; return { re: _r * _b.re / _d, im: -_r * _b.im / _d }; })()`},Negate:([e],n)=>{if(e===null)throw new Error("Negate: no argument");return C.isComplexValued(e)?`_SYS.cneg(${n(e)})`:`(-${n(e)})`},Multiply:(e,n)=>{if(e.length===1)return n(e[0]);if(!e.some(s=>C.isComplexValued(s)))return`(${e.map(s=>n(s)).join(" * ")})`;if(e.length===2){let s=C.isComplexValued(e[0]),a=C.isComplexValued(e[1]),u=n(e[0]),l=n(e[1]);return s&&a?`(() => { const _a = ${u}, _b = ${l}; return { re: _a.re * _b.re - _a.im * _b.im, im: _a.re * _b.im + _a.im * _b.re }; })()`:s&&!a?`(() => { const _a = ${u}, _r = ${l}; return { re: _a.re * _r, im: _a.im * _r }; })()`:`(() => { const _r = ${u}, _b = ${l}; return { re: _r * _b.re, im: _r * _b.im }; })()`}let i=[],r=[];for(let s=0;s<e.length;s++){let a=`_v${s}`;r.push(a),i.push(`const ${a} = ${n(e[s])}`)}let o=C.isComplexValued(e[0]);i.push(`let _re = ${o?`${r[0]}.re`:r[0]}`),i.push(`let _im = ${o?`${r[0]}.im`:"0"}`);for(let s=1;s<e.length;s++){let a=r[s],u=C.isComplexValued(e[s]),l=u?`${a}.re`:a,c=u?`${a}.im`:"0";i.push(`const _nre${s} = _re * ${l} - _im * ${c}`),i.push(`const _nim${s} = _re * ${c} + _im * ${l}`),i.push(`_re = _nre${s}`),i.push(`_im = _nim${s}`)}return`(() => { ${i.join("; ")}; return { re: _re, im: _im }; })()`},Factorial:"_SYS.factorial",Factorial2:"_SYS.factorial2",Exp2:([e],n)=>{if(e===null)throw new Error("Exp2: no argument");return`Math.pow(2, ${n(e)})`},Log2:"Math.log2",Log10:"Math.log10",Lg:"Math.log10",Arctan2:"Math.atan2",Hypot:"Math.hypot",Degrees:([e],n)=>{if(e===null)throw new Error("Degrees: no argument");return`(${n(e)} * Math.PI / 180)`},Haversine:([e],n)=>{if(e===null)throw new Error("Haversine: no argument");return C.inlineExpression("(1 - Math.cos(${x})) / 2",n(e))},InverseHaversine:([e],n)=>{if(e===null)throw new Error("InverseHaversine: no argument");return`(2 * Math.asin(Math.sqrt(${n(e)})))`},Erf:"_SYS.erf",Erfc:"_SYS.erfc",ErfInv:"_SYS.erfInv",Beta:"_SYS.beta",Digamma:"_SYS.digamma",Trigamma:"_SYS.trigamma",PolyGamma:(e,n)=>`_SYS.polygamma(${n(e[0])}, ${n(e[1])})`,Zeta:"_SYS.zeta",LambertW:"_SYS.lambertW",BesselJ:(e,n)=>`_SYS.besselJ(${n(e[0])}, ${n(e[1])})`,BesselY:(e,n)=>`_SYS.besselY(${n(e[0])}, ${n(e[1])})`,BesselI:(e,n)=>`_SYS.besselI(${n(e[0])}, ${n(e[1])})`,BesselK:(e,n)=>`_SYS.besselK(${n(e[0])}, ${n(e[1])})`,AiryAi:"_SYS.airyAi",AiryBi:"_SYS.airyBi",Binomial:(e,n)=>`_SYS.binomial(${n(e[0])}, ${n(e[1])})`,Fibonacci:"_SYS.fibonacci",Re:(e,n)=>C.isComplexValued(e[0])?`(${n(e[0])}).re`:n(e[0]),Im:(e,n)=>C.isComplexValued(e[0])?`(${n(e[0])}).im`:"0",Arg:(e,n)=>C.isComplexValued(e[0])?`_SYS.carg(${n(e[0])})`:`(${n(e[0])} >= 0 ? 0 : Math.PI)`,Conjugate:(e,n)=>C.isComplexValued(e[0])?`_SYS.cconj(${n(e[0])})`:n(e[0]),Color:([e],n)=>{if(e===null)throw new Error("Color: no argument");return`_SYS.color(${n(e)})`},ColorToString:(e,n)=>{if(e.length===0)throw new Error("ColorToString: no argument");return e.length>=2?`_SYS.colorToString(${n(e[0])}, ${n(e[1])})`:`_SYS.colorToString(${n(e[0])})`},ColorMix:(e,n)=>{if(e.length<2)throw new Error("ColorMix: need two colors");return e.length>=3?`_SYS.colorMix(${n(e[0])}, ${n(e[1])}, ${n(e[2])})`:`_SYS.colorMix(${n(e[0])}, ${n(e[1])})`},ColorContrast:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorContrast: need two colors");return`_SYS.colorContrast(${t(e)}, ${t(n)})`},ContrastingColor:(e,n)=>{if(e.length===0)throw new Error("ContrastingColor: no argument");return e.length>=3?`_SYS.contrastingColor(${n(e[0])}, ${n(e[1])}, ${n(e[2])})`:`_SYS.contrastingColor(${n(e[0])})`},ColorToColorspace:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorToColorspace: need color and space");return`_SYS.colorToColorspace(${t(e)}, ${t(n)})`},ColorFromColorspace:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorFromColorspace: need components and space");return`_SYS.colorFromColorspace(${t(e)}, ${t(n)})`},Colormap:(e,n)=>{if(e.length===0)throw new Error("Colormap: no argument");return e.length>=2?`_SYS.colormap(${n(e[0])}, ${n(e[1])})`:`_SYS.colormap(${n(e[0])})`}};function Ae(e){return{re:e.re,im:e.im}}function Ei(e){if(typeof e=="string"){let t=ft(e);return{r:t>>>24&255,g:t>>>16&255,b:t>>>8&255,alpha:(t&255)/255}}let n={r:e[0]*255,g:e[1]*255,b:e[2]*255};return e.length>=4&&(n.alpha=e[3]),n}function _p(e){let n=(e>>>24&255)/255,t=(e>>>16&255)/255,i=(e>>>8&255)/255,r=(e&255)/255;return Math.abs(r-1)<1e-4?[n,t,i]:[n,t,i,r]}var P3={color(e){return _p(ft(e))},colorToString(e,n){let t=Ei(e),i=(n??"hex").toLowerCase();switch(i){case"hex":{let r=Math.round(Math.max(0,Math.min(255,t.r))),o=Math.round(Math.max(0,Math.min(255,t.g))),s=Math.round(Math.max(0,Math.min(255,t.b))),a=`#${r.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`;if(t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4){let u=Math.round(Math.max(0,Math.min(255,t.alpha*255)));a+=u.toString(16).padStart(2,"0")}return a}case"rgb":{let r=Math.round(t.r),o=Math.round(t.g),s=Math.round(t.b);return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?`rgb(${r} ${o} ${s} / ${t.alpha})`:`rgb(${r} ${o} ${s})`}case"hsl":{let r=ko(t.r,t.g,t.b),o=Math.round(r.h*10)/10,s=Math.round(r.s*1e3)/10,a=Math.round(r.l*1e3)/10;return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?`hsl(${o} ${s}% ${a}% / ${t.alpha})`:`hsl(${o} ${s}% ${a}%)`}case"oklch":{let r=Mn(t),o=Math.round(r.L*1e3)/1e3,s=Math.round(r.C*1e3)/1e3,a=Math.round(r.H*10)/10;return t.alpha!==void 0&&Math.abs(t.alpha-1)>1e-4?`oklch(${o} ${s} ${a} / ${t.alpha})`:`oklch(${o} ${s} ${a})`}default:throw new Error(`Unknown color format: ${i}`)}},colorMix(e,n,t=.5){let i=Ei(e),r=Ei(n);t=Math.max(0,Math.min(1,t));let o=Mn(i),s=Mn(r),a=s.H-o.H;a>180&&(a-=360),a<-180&&(a+=360);let u=o.H+a*t;u<0&&(u+=360),u>=360&&(u-=360);let l=Jt({L:o.L+(s.L-o.L)*t,C:o.C+(s.C-o.C)*t,H:u}),c=l.r/255,f=l.g/255,p=l.b/255,d=i.alpha??1,g=r.alpha??1,h=d+(g-d)*t;return Math.abs(h-1)>1e-4?[c,f,p,h]:[c,f,p]},colorContrast(e,n){return Mo(Ei(e),Ei(n))},contrastingColor(e,n,t){let i=Ei(e);return _p(n!==void 0&&t!==void 0?Co({bg:i,fg1:Ei(n),fg2:Ei(t)}):Co(i))},colorToColorspace(e,n){let t=Ei(e),i=t.alpha,r;switch(n.toLowerCase()){case"rgb":r=[t.r/255,t.g/255,t.b/255];break;case"hsl":{let o=ko(t.r,t.g,t.b);r=[o.h,o.s,o.l];break}case"oklch":{let o=Mn(t);r=[o.L,o.C,o.H];break}case"oklab":case"lab":{let o=qs(t);r=[o.L,o.a,o.b];break}default:throw new Error(`Unknown color space: ${n}`)}return i!==void 0&&Math.abs(i-1)>1e-4&&r.push(i),r},colormap(e,n){let i={...Zu,...ju,...Gu}[e];if(!i)throw new Error(`Unknown palette: ${e}`);let r=i.map(s=>S0(s));if(n===void 0)return r;if(Number.isInteger(n)&&n>=2){let s=n,a=[];for(let u=0;u<s;u++){let l=s===1?0:u/(s-1);a.push(this._interpolatePalette(r,l))}return a}let o=Math.max(0,Math.min(1,n));return this._interpolatePalette(r,o)},_interpolatePalette(e,n){if(e.length===0)return[0,0,0];if(n<=0)return[...e[0]];if(n>=1)return[...e[e.length-1]];let t=n*(e.length-1),i=Math.floor(t),r=t-i;if(r===0||i>=e.length-1)return[...e[Math.min(i,e.length-1)]];let o={r:e[i][0]*255,g:e[i][1]*255,b:e[i][2]*255},s={r:e[i+1][0]*255,g:e[i+1][1]*255,b:e[i+1][2]*255},a=Mn(o),u=Mn(s),l=u.H-a.H;l>180&&(l-=360),l<-180&&(l+=360);let c=a.H+l*r;c<0&&(c+=360),c>=360&&(c-=360);let f=Jt({L:a.L+(u.L-a.L)*r,C:a.C+(u.C-a.C)*r,H:c});return[f.r/255,f.g/255,f.b/255]},colorFromColorspace(e,n){let t=e[0],i=e[1],r=e[2],o=e.length>=4?e[3]:void 0,s;switch(n.toLowerCase()){case"rgb":s=[t,i,r];break;case"hsl":{let a=Fs(t,i,r);s=[a.r/255,a.g/255,a.b/255];break}case"oklch":{let a=Jt({L:t,C:i,H:r});s=[a.r/255,a.g/255,a.b/255];break}case"oklab":case"lab":{let a=kr({L:t,a:i,b:r});s=[a.r/255,a.g/255,a.b/255];break}default:throw new Error(`Unknown color space: ${n}`)}return o!==void 0&&Math.abs(o-1)>1e-4&&s.push(o),s}},Rx={chop:ts,factorial:ns,factorial2:or,gamma:De,gcd:Pe,heaviside:e=>e<0?0:e===0?.5:1,integrate:(e,n,t)=>Ps(e,n,t,1e7).estimate,lcm:bt,lngamma:Wn,limit:ir,mean:tl,median:hi,variance:Ro,populationVariance:Po,standardDeviation:h1,populationStandardDeviation:b1,kurtosis:il,skewness:rl,mode:ol,quartiles:sl,interquartileRange:al,erf:ai,erfc:xs,erfInv:su,beta:cu,digamma:bo,trigamma:yo,polygamma:Es,zeta:vs,lambertW:fu,besselJ:Lt,besselY:ho,besselI:si,besselK:pu,airyAi:mu,airyBi:du,sinc:gu,fresnelS:ui,fresnelC:li,binomial:Vt,fibonacci:Tp,csin:e=>Ae(new z(e.re,e.im).sin()),ccos:e=>Ae(new z(e.re,e.im).cos()),ctan:e=>Ae(new z(e.re,e.im).tan()),casin:e=>Ae(new z(e.re,e.im).asin()),cacos:e=>Ae(new z(e.re,e.im).acos()),catan:e=>Ae(new z(e.re,e.im).atan()),csinh:e=>Ae(new z(e.re,e.im).sinh()),ccosh:e=>Ae(new z(e.re,e.im).cosh()),ctanh:e=>Ae(new z(e.re,e.im).tanh()),csqrt:e=>Ae(new z(e.re,e.im).sqrt()),cexp:e=>Ae(new z(e.re,e.im).exp()),cln:e=>Ae(new z(e.re,e.im).log()),cpow:(e,n)=>{let t=typeof e=="number"?new z(e,0):new z(e.re,e.im),i=typeof n=="number"?new z(n,0):new z(n.re,n.im);return Ae(t.pow(i))},ccot:e=>Ae(new z(e.re,e.im).cot()),csec:e=>Ae(new z(e.re,e.im).sec()),ccsc:e=>Ae(new z(e.re,e.im).csc()),ccoth:e=>Ae(new z(e.re,e.im).coth()),csech:e=>Ae(new z(e.re,e.im).sech()),ccsch:e=>Ae(new z(e.re,e.im).csch()),cacot:e=>Ae(new z(e.re,e.im).acot()),casec:e=>Ae(new z(e.re,e.im).asec()),cacsc:e=>Ae(new z(e.re,e.im).acsc()),cacoth:e=>Ae(new z(e.re,e.im).acoth()),casech:e=>Ae(new z(e.re,e.im).asech()),cacsch:e=>Ae(new z(e.re,e.im).acsch()),cabs:e=>new z(e.re,e.im).abs(),carg:e=>new z(e.re,e.im).arg(),cconj:e=>Ae(new z(e.re,e.im).conjugate()),cneg:e=>({re:-e.re,im:-e.im}),...P3},Sp=class extends Function{SYS=Rx;constructor(n,t=""){return super("_SYS","_",t?`${t};return ${n}`:`return ${n}`),new Proxy(this,{apply:(i,r,o)=>super.apply(r,[this.SYS,...o]),get:(i,r)=>r==="toString"?()=>n:r==="isCompiled"?!0:i[r]})}},xl=class extends Function{SYS=Rx;constructor(n,t){return super("_SYS",...t,`return ${n}`),new Proxy(this,{apply:(i,r,o)=>super.apply(r,[this.SYS,...o]),get:(i,r)=>r==="toString"?()=>`(${t.join(", ")}) => ${n}`:r==="isCompiled"?!0:i[r]})}},Lr=class{getOperators(){return Ep}getFunctions(){return vp}createTarget(n={}){return{language:"javascript",operators:t=>Ep[t],functions:t=>vp[t],var:t=>({Pi:"Math.PI",ExponentialE:"Math.E",NaN:"Number.NaN",ImaginaryUnit:"({ re: 0, im: 1 })",Half:"0.5",MachineEpsilon:"Number.EPSILON",GoldenRatio:"((1 + Math.sqrt(5)) / 2)",CatalanConstant:"0.91596559417721901",EulerGamma:"0.57721566490153286"})[t],string:t=>JSON.stringify(t),number:t=>t.toString(),complex:(t,i)=>`({ re: ${t}, im: ${i} })`,indent:0,ws:t=>t??"",preamble:"",...n}}compile(n,t={}){let{operators:i,functions:r,vars:o,imports:s=[],preamble:a,realOnly:u}=t,l=n.unknowns,c=s.map(g=>{if(typeof g=="function")return g.toString();throw new Error(`Unsupported import \`${g}\``)}).join(`
|
|
130
|
+
`),f={};if(r)for(let[g,h]of Object.entries(r))typeof h=="function"?L3(h)?(c+=`${h.toString()};
|
|
131
|
+
`,f[g]=h.name):(c+=`const ${g} = ${h.toString()};
|
|
132
|
+
`,f[g]=g):typeof h=="string"&&(f[g]=h);let p=g=>{if(i){let h=typeof i=="function"?i(g):i[g];if(h)return h}return Ep[g]},d=this.createTarget({operators:p,functions:g=>f?.[g]?f[g]:vp[g],var:g=>{if(o&&g in o)return JSON.stringify(o[g]);let h={Pi:"Math.PI",ExponentialE:"Math.E",NaN:"Number.NaN",ImaginaryUnit:"({ re: 0, im: 1 })",Half:"0.5",MachineEpsilon:"Number.EPSILON",GoldenRatio:"((1 + Math.sqrt(5)) / 2)",CatalanConstant:"0.91596559417721901",EulerGamma:"0.57721566490153286"}[g];if(h!==void 0)return h;if(l.includes(g))return`_.${g}`},preamble:(a??"")+c});return D3(n,d,u)}};function Np(e){let n=e.run;return{...e,run:((...i)=>{let r=n(...i);return typeof r=="object"&&r!==null&&"im"in r?r.im===0?r.re:NaN:r})}}function D3(e,n,t){if(m(e,"Function")){let s=e.ops,a=s.slice(1).map(f=>_(f)?f.symbol:"_"),u=C.compile(s[0].canonical,{...n,var:f=>a.includes(f)?f:n.var(f)}),l=new xl(u,a),c={target:"javascript",success:!0,code:`(${a.join(", ")}) => ${u}`,calling:"lambda",run:l};return t?Np(c):c}if(_(e)){let s=n.operators?.(e.symbol);if(s){let a=new xl(`a ${s[0]} b`,["a","b"]),u={target:"javascript",success:!0,code:`(a, b) => a ${s[0]} b`,calling:"lambda",run:a};return t?Np(u):u}}let i=C.compile(e,n),r=new Sp(i,n.preamble),o={target:"javascript",success:!0,code:i,calling:"expression",run:r};return t?Np(o):o}var $3=100;function Px(e){e.operator;let n=e,t=_(n.op1)?n.op1.symbol:"_",i=n.op2,r=n.op3,o=i.re,s=r.re;return{index:t,lowerExpr:i,upperExpr:r,lowerNum:!isNaN(o)&&Number.isFinite(o)?Math.floor(o):void 0,upperNum:!isNaN(s)&&Number.isFinite(s)?Math.floor(s):void 0}}function Cx(e,n,t){return n!==void 0?String(n):`Math.floor(${C.compile(e,t)})`}function Ax(e,n,t,i){if(!n[0])throw new Error(`${e}: no body`);if(!n[1])throw new Error(`${e}: no indexing set`);let{index:r,lowerExpr:o,upperExpr:s,lowerNum:a,upperNum:u}=Px(n[1]),l=e==="Sum",c=l?"+":"*",f=l?"0":"1",p=C.isComplexValued(n[0]),d=a!==void 0&&u!==void 0;if(d&&a>u)return f;if(d&&u-a+1<=$3){let N=[];for(let k=a;k<=u;k++){let P={...i,var:F=>F===r?String(k):i.var(F)};N.push(`(${C.compile(n[0],P)})`)}if(!p)return`(${N.join(` ${c} `)})`;let T=N.map((k,P)=>`_t${P}`),I=N.map((k,P)=>`const ${T[P]} = ${k}`).join("; ");if(l){let k=T.map(F=>`${F}.re`).join(" + "),P=T.map(F=>`${F}.im`).join(" + ");return`(() => { ${I}; return { re: ${k}, im: ${P} }; })()`}let M=T[0],w=[I];for(let k=1;k<T.length;k++){let P=M;M=`_p${k}`,w.push(`const ${M} = { re: ${P}.re * ${T[k]}.re - ${P}.im * ${T[k]}.im, im: ${P}.re * ${T[k]}.im + ${P}.im * ${T[k]}.re }`)}return`(() => { ${w.join("; ")}; return ${M}; })()`}let g=Cx(o,a,i),h=Cx(s,u,i),b=C.compile(n[0],{...i,var:x=>x===r?r:i.var(x)}),y=C.tempVar();if(p){let x=C.tempVar();return l?`(() => { let ${y} = { re: 0, im: 0 }; let ${r} = ${g}; const _upper = ${h}; while (${r} <= _upper) { const ${x} = ${b}; ${y} = { re: ${y}.re + ${x}.re, im: ${y}.im + ${x}.im }; ${r}++; } return ${y}; })()`:`(() => { let ${y} = { re: 1, im: 0 }; let ${r} = ${g}; const _upper = ${h}; while (${r} <= _upper) { const ${x} = ${b}; ${y} = { re: ${y}.re * ${x}.re - ${y}.im * ${x}.im, im: ${y}.re * ${x}.im + ${y}.im * ${x}.re }; ${r}++; } return ${y}; })()`}return`(() => { let ${y} = ${f}; let ${r} = ${g}; const _upper = ${h}; while (${r} <= _upper) { ${y} ${c}= ${b}; ${r}++; } return ${y}; })()`}function O3(e,n,t){let{index:i,lowerExpr:r,upperExpr:o,lowerNum:s,upperNum:a}=Px(e[1]),u=C.compile(e[0],{...t,var:f=>f===i?f:t.var(f)}),l=s!==void 0?String(s):C.compile(r,t),c=a!==void 0?String(a):C.compile(o,t);return`_SYS.integrate((${i}) => (${u}), ${l}, ${c})`}function L3(e){let n=e.toString();return n.includes("=>")?!1:n.startsWith("function ")&&n.includes(e.name)}function Tp(e){if(!Number.isInteger(e))return NaN;if(e<0)return e%2===0?-Tp(-e):Tp(-e);if(e<=1)return e;let n=0,t=1;for(let i=2;i<=e;i++){let r=n+t;n=t,t=r}return t}var Dx={Add:["+",11],Negate:["-",14],Subtract:["-",11],Multiply:["*",12],Divide:["/",13],Equal:["==",8],NotEqual:["!=",8],LessEqual:["<=",9],GreaterEqual:[">=",9],Less:["<",9],Greater:[">",9],And:["&&",4],Or:["||",3],Not:["!",14]};function vi(e){return e?.language==="wgsl"?"vec2f":"vec2"}var F3=100;function $x(e,n,t,i){if(!n[0])throw new Error(`${e}: no body`);if(!n[1])throw new Error(`${e}: no indexing set`);if(C.isComplexValued(n[0]))throw new Error(`${e}: complex-valued body not supported in GPU targets`);let r=n[1];if(!m(r,"Limits"))throw new Error(`${e}: expected Limits indexing set`);let o=r.ops,s=_(o[0])?o[0].symbol:"_",a=o[1].re,u=o[2].re,l=!isNaN(a)&&Number.isFinite(a)?Math.floor(a):void 0,c=!isNaN(u)&&Number.isFinite(u)?Math.floor(u):void 0,f=e==="Sum",p=f?"+":"*",d=f?"0.0":"1.0",g=i.language==="wgsl",h=l!==void 0&&c!==void 0;if(h&&l>c)return d;if(h&&c-l+1<=F3){let F=[];for(let G=l;G<=c;G++){let U=El(G),ge={...i,var:he=>he===s?U:i.var(he)};F.push(`(${C.compile(n[0],ge)})`)}return`(${F.join(` ${p} `)})`}let b=C.tempVar(),y=g?"f32":"float",x=g?"i32":"int",N={...i,var:F=>F===s?g?`f32(${s})`:`float(${s})`:i.var(F)},T=C.compile(n[0],N),I=l!==void 0?String(l):C.compile(o[1],i),M=c!==void 0?String(c):C.compile(o[2],i),w=g?`var ${b}: ${y}`:`${y} ${b}`,k=g?`var ${s}: ${x}`:`${x} ${s}`;return[`${w} = ${d};`,`for (${k} = ${I}; ${s} <= ${M}; ${s}++) {`,` ${b} ${p}= ${T};`,"}",`return ${b}`].join(`
|
|
133
|
+
`)}var q3={Add:(e,n,t)=>{if(e.length===0)return"0.0";if(e.length===1)return n(e[0]);if(!e.some(o=>C.isComplexValued(o)))return e.map(o=>n(o)).join(" + ");let r=vi(t);return e.map(o=>{let s=n(o);return C.isComplexValued(o)?s:`${r}(${s}, 0.0)`}).join(" + ")},Multiply:(e,n,t)=>{if(e.length===0)return"1.0";if(e.length===1)return n(e[0]);if(!e.some(s=>C.isComplexValued(s)))return e.map(s=>n(s)).join(" * ");let r=n(e[0]),o=C.isComplexValued(e[0]);for(let s=1;s<e.length;s++){let a=n(e[s]),u=C.isComplexValued(e[s]);!o&&!u?r=`(${r} * ${a})`:o&&!u?r=`(${a} * ${r})`:!o&&u?(r=`(${r} * ${a})`,o=!0):r=`_gpu_cmul(${r}, ${a})`}return r},Subtract:(e,n,t)=>{if(e.length===0)return"0.0";if(e.length===1)return n(e[0]);if(!e.some(a=>C.isComplexValued(a))){if(e.length===2)return`${n(e[0])} - ${n(e[1])}`;let a=n(e[0]);for(let u=1;u<e.length;u++)a=`${a} - ${n(e[u])}`;return a}let r=vi(t),o=a=>{let u=n(a);return C.isComplexValued(a)?u:`${r}(${u}, 0.0)`};if(e.length===2)return`${o(e[0])} - ${o(e[1])}`;let s=o(e[0]);for(let a=1;a<e.length;a++)s=`${s} - ${o(e[a])}`;return s},Divide:(e,n,t)=>{if(e.length===0)return"1.0";if(e.length===1)return n(e[0]);let i=C.isComplexValued(e[0]),r=e.length>=2&&C.isComplexValued(e[1]);if(!i&&!r){if(e.length===2)return`${n(e[0])} / ${n(e[1])}`;let s=n(e[0]);for(let a=1;a<e.length;a++)s=`${s} / ${n(e[a])}`;return s}return i&&r?`_gpu_cdiv(${n(e[0])}, ${n(e[1])})`:i&&!r?`(${n(e[0])} / ${n(e[1])})`:`_gpu_cdiv(${vi(t)}(${n(e[0])}, 0.0), ${n(e[1])})`},Negate:([e],n)=>{if(e===null)throw new Error("Negate: no argument");return`(-${n(e)})`},Abs:(e,n)=>C.isComplexValued(e[0])?`length(${n(e[0])})`:`abs(${n(e[0])})`,Arccos:(e,n)=>C.isComplexValued(e[0])?`_gpu_cacos(${n(e[0])})`:`acos(${n(e[0])})`,Arcsin:(e,n)=>C.isComplexValued(e[0])?`_gpu_casin(${n(e[0])})`:`asin(${n(e[0])})`,Arctan:(e,n)=>C.isComplexValued(e[0])?`_gpu_catan(${n(e[0])})`:`atan(${n(e[0])})`,Ceil:"ceil",Clamp:"clamp",Cos:(e,n)=>C.isComplexValued(e[0])?`_gpu_ccos(${n(e[0])})`:`cos(${n(e[0])})`,Degrees:"degrees",Exp:(e,n)=>C.isComplexValued(e[0])?`_gpu_cexp(${n(e[0])})`:`exp(${n(e[0])})`,Exp2:"exp2",Floor:"floor",Fract:"fract",Ln:(e,n)=>C.isComplexValued(e[0])?`_gpu_cln(${n(e[0])})`:`log(${n(e[0])})`,Log2:"log2",Max:"max",Min:"min",Mix:"mix",Power:(e,n,t)=>{let i=e[0],r=e[1];if(i===null)throw new Error("Power: no argument");if(C.isComplexValued(i)||C.isComplexValued(r)){if(_(i,"ExponentialE"))return`_gpu_cexp(${n(r)})`;let o=vi(t),s=C.isComplexValued(i)?n(i):`${o}(${n(i)}, 0.0)`,a=C.isComplexValued(r)?n(r):`${o}(${n(r)}, 0.0)`;return`_gpu_cpow(${s}, ${a})`}return`pow(${n(i)}, ${n(r)})`},Radians:"radians",Round:"round",Sign:"sign",Sin:(e,n)=>C.isComplexValued(e[0])?`_gpu_csin(${n(e[0])})`:`sin(${n(e[0])})`,Smoothstep:"smoothstep",Sqrt:(e,n)=>C.isComplexValued(e[0])?`_gpu_csqrt(${n(e[0])})`:`sqrt(${n(e[0])})`,Step:"step",Tan:(e,n)=>C.isComplexValued(e[0])?`_gpu_ctan(${n(e[0])})`:`tan(${n(e[0])})`,Truncate:"trunc",Re:(e,n)=>C.isComplexValued(e[0])?`(${n(e[0])}).x`:n(e[0]),Im:(e,n)=>C.isComplexValued(e[0])?`(${n(e[0])}).y`:"0.0",Arg:(e,n)=>{if(C.isComplexValued(e[0])){let t=n(e[0]);return`atan(${t}.y, ${t}.x)`}return`(${n(e[0])} >= 0.0 ? 0.0 : 3.14159265359)`},Conjugate:(e,n,t)=>{if(C.isComplexValued(e[0])){let i=vi(t),r=n(e[0]);return`${i}(${r}.x, -${r}.y)`}return n(e[0])},Remainder:([e,n],t)=>{if(e===null||n===null)throw new Error("Remainder: missing argument");return`(${t(e)} - ${t(n)} * round(${t(e)} / ${t(n)}))`},Cot:([e],n)=>{if(e===null)throw new Error("Cot: no argument");if(C.isComplexValued(e))return`_gpu_cdiv(_gpu_ccos(${n(e)}), _gpu_csin(${n(e)}))`;let t=n(e);return`(cos(${t}) / sin(${t}))`},Csc:([e],n,t)=>{if(e===null)throw new Error("Csc: no argument");return C.isComplexValued(e)?`_gpu_cdiv(${vi(t)}(1.0, 0.0), _gpu_csin(${n(e)}))`:`(1.0 / sin(${n(e)}))`},Sec:([e],n,t)=>{if(e===null)throw new Error("Sec: no argument");return C.isComplexValued(e)?`_gpu_cdiv(${vi(t)}(1.0, 0.0), _gpu_ccos(${n(e)}))`:`(1.0 / cos(${n(e)}))`},Arccot:([e],n)=>{if(e===null)throw new Error("Arccot: no argument");return`atan(1.0 / (${n(e)}))`},Arccsc:([e],n)=>{if(e===null)throw new Error("Arccsc: no argument");return`asin(1.0 / (${n(e)}))`},Arcsec:([e],n)=>{if(e===null)throw new Error("Arcsec: no argument");return`acos(1.0 / (${n(e)}))`},Sinh:(e,n)=>C.isComplexValued(e[0])?`_gpu_csinh(${n(e[0])})`:`sinh(${n(e[0])})`,Cosh:(e,n)=>C.isComplexValued(e[0])?`_gpu_ccosh(${n(e[0])})`:`cosh(${n(e[0])})`,Tanh:(e,n)=>C.isComplexValued(e[0])?`_gpu_ctanh(${n(e[0])})`:`tanh(${n(e[0])})`,Coth:([e],n)=>{if(e===null)throw new Error("Coth: no argument");if(C.isComplexValued(e))return`_gpu_cdiv(_gpu_ccosh(${n(e)}), _gpu_csinh(${n(e)}))`;let t=n(e);return`(cosh(${t}) / sinh(${t}))`},Csch:([e],n,t)=>{if(e===null)throw new Error("Csch: no argument");return C.isComplexValued(e)?`_gpu_cdiv(${vi(t)}(1.0, 0.0), _gpu_csinh(${n(e)}))`:`(1.0 / sinh(${n(e)}))`},Sech:([e],n,t)=>{if(e===null)throw new Error("Sech: no argument");return C.isComplexValued(e)?`_gpu_cdiv(${vi(t)}(1.0, 0.0), _gpu_ccosh(${n(e)}))`:`(1.0 / cosh(${n(e)}))`},Arcosh:(e,n)=>C.isComplexValued(e[0])?`_gpu_cacosh(${n(e[0])})`:`acosh(${n(e[0])})`,Arsinh:(e,n)=>C.isComplexValued(e[0])?`_gpu_casinh(${n(e[0])})`:`asinh(${n(e[0])})`,Artanh:(e,n)=>C.isComplexValued(e[0])?`_gpu_catanh(${n(e[0])})`:`atanh(${n(e[0])})`,Arcoth:([e],n)=>{if(e===null)throw new Error("Arcoth: no argument");return`atanh(1.0 / (${n(e)}))`},Arcsch:([e],n)=>{if(e===null)throw new Error("Arcsch: no argument");return`asinh(1.0 / (${n(e)}))`},Arsech:([e],n)=>{if(e===null)throw new Error("Arsech: no argument");return`acosh(1.0 / (${n(e)}))`},Arctan2:(e,n)=>{if(e.length<2)throw new Error("Arctan2: need two arguments");return`atan(${n(e[0])}, ${n(e[1])})`},Hypot:([e,n],t)=>{if(e===null||n===null)throw new Error("Hypot: need two arguments");return`length(vec2(${t(e)}, ${t(n)}))`},Haversine:([e],n)=>{if(e===null)throw new Error("Haversine: no argument");return`((1.0 - cos(${n(e)})) * 0.5)`},InverseHaversine:([e],n)=>{if(e===null)throw new Error("InverseHaversine: no argument");return`(2.0 * asin(sqrt(${n(e)})))`},Gamma:([e],n)=>{if(e===null)throw new Error("Gamma: no argument");return`_gpu_gamma(${n(e)})`},GammaLn:([e],n)=>{if(e===null)throw new Error("GammaLn: no argument");return`_gpu_gammaln(${n(e)})`},Factorial:([e],n)=>{if(e===null)throw new Error("Factorial: no argument");return`_gpu_gamma(${n(e)} + 1.0)`},Beta:([e,n],t)=>{if(e===null||n===null)throw new Error("Beta: need two arguments");let i=t(e),r=t(n);return`(_gpu_gamma(${i}) * _gpu_gamma(${r}) / _gpu_gamma(${i} + ${r}))`},Erf:([e],n)=>{if(e===null)throw new Error("Erf: no argument");return`_gpu_erf(${n(e)})`},Erfc:([e],n)=>{if(e===null)throw new Error("Erfc: no argument");return`(1.0 - _gpu_erf(${n(e)}))`},ErfInv:([e],n)=>{if(e===null)throw new Error("ErfInv: no argument");return`_gpu_erfinv(${n(e)})`},Heaviside:([e],n)=>{if(e===null)throw new Error("Heaviside: no argument");return`_gpu_heaviside(${n(e)})`},Sinc:([e],n)=>{if(e===null)throw new Error("Sinc: no argument");return`_gpu_sinc(${n(e)})`},FresnelC:([e],n)=>{if(e===null)throw new Error("FresnelC: no argument");return`_gpu_fresnelC(${n(e)})`},FresnelS:([e],n)=>{if(e===null)throw new Error("FresnelS: no argument");return`_gpu_fresnelS(${n(e)})`},BesselJ:([e,n],t,i)=>{if(e===null||n===null)throw new Error("BesselJ: need two arguments");return`_gpu_besselJ(${i?.language==="wgsl"?"i32":"int"}(${t(e)}), ${t(n)})`},Lb:"log2",Log:(e,n)=>{if(e.length===0)throw new Error("Log: no argument");return e.length===1?`(log(${n(e[0])}) / log(10.0))`:`(log(${n(e[0])}) / log(${n(e[1])}))`},Log10:([e],n)=>{if(e===null)throw new Error("Log10: no argument");return`(log(${n(e)}) * 0.4342944819032518)`},Lg:([e],n)=>{if(e===null)throw new Error("Lg: no argument");return`(log(${n(e)}) * 0.4342944819032518)`},Square:([e],n)=>{if(e===null)throw new Error("Square: no argument");let t=n(e);return`(${t} * ${t})`},Root:([e,n],t)=>{if(e===null)throw new Error("Root: no argument");return n==null?`sqrt(${t(e)})`:n?.re===2?`sqrt(${t(e)})`:`pow(${t(e)}, 1.0 / ${t(n)})`},ColorMix:(e,n)=>{if(e.length<2)throw new Error("ColorMix: need two colors");let t=n(e[0]),i=n(e[1]),r=e.length>=3?n(e[2]):"0.5";return`_gpu_color_mix(${t}, ${i}, ${r})`},ColorContrast:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorContrast: need two colors");return`_gpu_apca(${t(e)}, ${t(n)})`},ContrastingColor:(e,n,t)=>{if(e.length===0)throw new Error("ContrastingColor: no argument");let i=n(e[0]);if(e.length>=3){let s=n(e[1]),a=n(e[2]);return`(abs(_gpu_apca(${i}, ${s})) >= abs(_gpu_apca(${i}, ${a})) ? ${s} : ${a})`}let o=t?.language==="wgsl"?"vec3f":"vec3";return`((_gpu_apca(${i}, ${o}(0.0)) > 50.0) ? ${o}(0.0) : ${o}(1.0))`},ColorToColorspace:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorToColorspace: need color and space");return`_gpu_srgb_to_oklab(${t(e)})`},ColorFromColorspace:([e,n],t)=>{if(e===null||n===null)throw new Error("ColorFromColorspace: need components and space");return`_gpu_oklab_to_srgb(${t(e)})`},Mandelbrot:([e,n],t,i)=>{if(e===null||n===null)throw new Error("Mandelbrot: missing arguments");let r=i?.language==="wgsl"?"i32":"int";return`_fractal_mandelbrot(${t(e)}, ${r}(${t(n)}))`},Julia:([e,n,t],i,r)=>{if(e===null||n===null||t===null)throw new Error("Julia: missing arguments");let o=r?.language==="wgsl"?"i32":"int";return`_fractal_julia(${i(e)}, ${i(n)}, ${o}(${i(t)}))`},Cross:"cross",Distance:"distance",Dot:"dot",Length:"length",Normalize:"normalize",Reflect:"reflect",Refract:"refract",Sum:(e,n,t)=>$x("Sum",e,n,t),Product:(e,n,t)=>$x("Product",e,n,t),Loop:(e,n,t)=>{if(!e[0])throw new Error("Loop: no body");if(!e[1])throw new Error("Loop: no indexing set");let i=e[1];if(!m(i,"Element"))throw new Error("Loop: expected Element(index, Range(lo, hi))");let r=i.ops[0],o=i.ops[1];if(!_(r))throw new Error("Loop: index must be a symbol");if(!m(o,"Range"))throw new Error("Loop: expected Range(lo, hi)");let s=r.symbol,a=Math.floor(o.ops[0].re),u=Math.floor(o.ops[1].re);if(!Number.isFinite(a)||!Number.isFinite(u))throw new Error("Loop: bounds must be finite numbers");let l=t.language==="wgsl",c=l?"i32":"int",f=C.compile(e[0],{...t,var:d=>d===s?s:t.var(d)});return`for (${l?`var ${s}: ${c}`:`${c} ${s}`} = ${a}; ${s} <= ${u}; ${s}++) {
|
|
134
|
+
${f};
|
|
135
|
+
}`},Function:()=>{throw new Error("Anonymous functions (Function) are not supported in GPU targets")}};function vl(e,n,t,i,r){let o=e[0];if(!m(o))return n(o);let s=o.ops;if(s.length===0)return n(o);let a=s.length,u=s[0],l=m(u)?u.nops:0;if(l===1&&s.every(c=>m(c)&&c.nops===1)){let c=s.map(f=>n(m(f)?f.ops[0]:f));return a>=2&&a<=4?`${t(a)}(${c.join(", ")})`:`${r(a)}(${c.join(", ")})`}if(a===l&&a>=2&&a<=4&&s.every(c=>m(c)&&c.nops===l)){let c=[];for(let f=0;f<l;f++){let p=s.map(d=>n(m(d)?d.ops[f]:d));c.push(`${t(a)}(${p.join(", ")})`)}return`${i(a)}(${c.join(", ")})`}return n(o)}var V3=`
|
|
136
|
+
float _gpu_gamma(float z) {
|
|
137
|
+
const float PI = 3.14159265358979;
|
|
138
|
+
// For z < 0.5, use reflection formula with inlined Lanczos (non-recursive)
|
|
139
|
+
float w = z;
|
|
140
|
+
if (z < 0.5) w = 1.0 - z;
|
|
141
|
+
w -= 1.0;
|
|
142
|
+
float x = 0.99999999999980993;
|
|
143
|
+
x += 676.5203681218851 / (w + 1.0);
|
|
144
|
+
x += -1259.1392167224028 / (w + 2.0);
|
|
145
|
+
x += 771.32342877765313 / (w + 3.0);
|
|
146
|
+
x += -176.61502916214059 / (w + 4.0);
|
|
147
|
+
x += 12.507343278686905 / (w + 5.0);
|
|
148
|
+
x += -0.13857109526572012 / (w + 6.0);
|
|
149
|
+
x += 9.9843695780195716e-6 / (w + 7.0);
|
|
150
|
+
x += 1.5056327351493116e-7 / (w + 8.0);
|
|
151
|
+
float t = w + 7.5;
|
|
152
|
+
float g = sqrt(2.0 * PI) * pow(t, w + 0.5) * exp(-t) * x;
|
|
153
|
+
if (z < 0.5) return PI / (sin(PI * z) * g);
|
|
154
|
+
return g;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
float _gpu_gammaln(float z) {
|
|
158
|
+
// Stirling asymptotic expansion for ln(Gamma(z)), z > 0
|
|
159
|
+
float z3 = z * z * z;
|
|
160
|
+
return z * log(z) - z - 0.5 * log(z)
|
|
161
|
+
+ 0.5 * log(2.0 * 3.14159265358979)
|
|
162
|
+
+ 1.0 / (12.0 * z)
|
|
163
|
+
- 1.0 / (360.0 * z3)
|
|
164
|
+
+ 1.0 / (1260.0 * z3 * z * z);
|
|
165
|
+
}
|
|
166
|
+
`,B3=`
|
|
167
|
+
float _gpu_erf(float x) {
|
|
168
|
+
float ax = abs(x);
|
|
169
|
+
float t = 1.0 / (1.0 + 0.3275911 * ax);
|
|
170
|
+
float y = ((((1.061405429 * t - 1.453152027) * t + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t;
|
|
171
|
+
float result = 1.0 - y * exp(-ax * ax);
|
|
172
|
+
return x < 0.0 ? -result : result;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
float _gpu_erfinv(float x) {
|
|
176
|
+
float pi = 3.14159265358979;
|
|
177
|
+
float x2 = x * x;
|
|
178
|
+
float x3 = x * x2;
|
|
179
|
+
float x5 = x3 * x2;
|
|
180
|
+
float x7 = x5 * x2;
|
|
181
|
+
float x9 = x7 * x2;
|
|
182
|
+
return sqrt(pi) * 0.5 * (x + (pi / 12.0) * x3 + (7.0 * pi * pi / 480.0) * x5 + (127.0 * pi * pi * pi / 40320.0) * x7 + (4369.0 * pi * pi * pi * pi / 5806080.0) * x9);
|
|
183
|
+
}
|
|
184
|
+
`,J3=`
|
|
185
|
+
float _gpu_heaviside(float x) {
|
|
186
|
+
if (x < 0.0) return 0.0;
|
|
187
|
+
if (x > 0.0) return 1.0;
|
|
188
|
+
return 0.5;
|
|
189
|
+
}
|
|
190
|
+
`,z3=`
|
|
191
|
+
fn _gpu_heaviside(x: f32) -> f32 {
|
|
192
|
+
if (x < 0.0) { return 0.0; }
|
|
193
|
+
if (x > 0.0) { return 1.0; }
|
|
194
|
+
return 0.5;
|
|
195
|
+
}
|
|
196
|
+
`,U3=`
|
|
197
|
+
float _gpu_sinc(float x) {
|
|
198
|
+
if (abs(x) < 1e-10) return 1.0;
|
|
199
|
+
return sin(x) / x;
|
|
200
|
+
}
|
|
201
|
+
`,j3=`
|
|
202
|
+
fn _gpu_sinc(x: f32) -> f32 {
|
|
203
|
+
if (abs(x) < 1e-10) { return 1.0; }
|
|
204
|
+
return sin(x) / x;
|
|
205
|
+
}
|
|
206
|
+
`,G3=`
|
|
207
|
+
float _gpu_polevl(float x, float c[12], int n) {
|
|
208
|
+
float ans = c[0];
|
|
209
|
+
for (int i = 1; i < n; i++) ans = ans * x + c[i];
|
|
210
|
+
return ans;
|
|
211
|
+
}
|
|
212
|
+
`,Z3=`
|
|
213
|
+
fn _gpu_polevl(x: f32, c: array<f32, 12>, n: i32) -> f32 {
|
|
214
|
+
var ans = c[0];
|
|
215
|
+
for (var i: i32 = 1; i < n; i++) { ans = ans * x + c[i]; }
|
|
216
|
+
return ans;
|
|
217
|
+
}
|
|
218
|
+
`,H3=`
|
|
219
|
+
float _gpu_fresnelC(float x_in) {
|
|
220
|
+
float sgn = x_in < 0.0 ? -1.0 : 1.0;
|
|
221
|
+
float x = abs(x_in);
|
|
222
|
+
|
|
223
|
+
if (x < 1.6) {
|
|
224
|
+
float x2 = x * x;
|
|
225
|
+
float t = x2 * x2;
|
|
226
|
+
float cn[6] = float[6](
|
|
227
|
+
-4.98843114573573548651e-8, 9.50428062829859605134e-6,
|
|
228
|
+
-6.45191435683965050962e-4, 1.88843319396703850064e-2,
|
|
229
|
+
-2.05525900955013891793e-1, 9.99999999999999998822e-1
|
|
230
|
+
);
|
|
231
|
+
float cd[7] = float[7](
|
|
232
|
+
3.99982968972495980367e-12, 9.15439215774657478799e-10,
|
|
233
|
+
1.25001862479598821474e-7, 1.22262789024179030997e-5,
|
|
234
|
+
8.68029542941784300606e-4, 4.12142090722199792936e-2, 1.0
|
|
235
|
+
);
|
|
236
|
+
return sgn * x * _gpu_polevl(t, cn, 6) / _gpu_polevl(t, cd, 7);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (x < 36.0) {
|
|
240
|
+
float x2 = x * x;
|
|
241
|
+
float t = 3.14159265358979 * x2;
|
|
242
|
+
float u = 1.0 / (t * t);
|
|
243
|
+
float fn[10] = float[10](
|
|
244
|
+
4.21543555043677546506e-1, 1.43407919780758885261e-1,
|
|
245
|
+
1.15220955073585758835e-2, 3.450179397825740279e-4,
|
|
246
|
+
4.63613749287867322088e-6, 3.05568983790257605827e-8,
|
|
247
|
+
1.02304514164907233465e-10, 1.72010743268161828879e-13,
|
|
248
|
+
1.34283276233062758925e-16, 3.76329711269987889006e-20
|
|
249
|
+
);
|
|
250
|
+
float fd[11] = float[11](
|
|
251
|
+
1.0, 7.51586398353378947175e-1,
|
|
252
|
+
1.16888925859191382142e-1, 6.44051526508858611005e-3,
|
|
253
|
+
1.55934409164153020873e-4, 1.8462756734893054587e-6,
|
|
254
|
+
1.12699224763999035261e-8, 3.60140029589371370404e-11,
|
|
255
|
+
5.8875453362157841001e-14, 4.52001434074129701496e-17,
|
|
256
|
+
1.25443237090011264384e-20
|
|
257
|
+
);
|
|
258
|
+
float gn[11] = float[11](
|
|
259
|
+
5.04442073643383265887e-1, 1.97102833525523411709e-1,
|
|
260
|
+
1.87648584092575249293e-2, 6.84079380915393090172e-4,
|
|
261
|
+
1.15138826111884280931e-5, 9.82852443688422223854e-8,
|
|
262
|
+
4.45344415861750144738e-10, 1.08268041139020870318e-12,
|
|
263
|
+
1.37555460633261799868e-15, 8.36354435630677421531e-19,
|
|
264
|
+
1.86958710162783235106e-22
|
|
265
|
+
);
|
|
266
|
+
float gd[12] = float[12](
|
|
267
|
+
1.0, 1.47495759925128324529,
|
|
268
|
+
3.37748989120019970451e-1, 2.53603741420338795122e-2,
|
|
269
|
+
8.14679107184306179049e-4, 1.27545075667729118702e-5,
|
|
270
|
+
1.04314589657571990585e-7, 4.60680728515232032307e-10,
|
|
271
|
+
1.10273215066240270757e-12, 1.38796531259578871258e-15,
|
|
272
|
+
8.39158816283118707363e-19, 1.86958710162783236342e-22
|
|
273
|
+
);
|
|
274
|
+
float f = 1.0 - u * _gpu_polevl(u, fn, 10) / _gpu_polevl(u, fd, 11);
|
|
275
|
+
float g = (1.0 / t) * _gpu_polevl(u, gn, 11) / _gpu_polevl(u, gd, 12);
|
|
276
|
+
float z = 1.5707963267948966 * x2;
|
|
277
|
+
float c = cos(z);
|
|
278
|
+
float s = sin(z);
|
|
279
|
+
return sgn * (0.5 + (f * s - g * c) / (3.14159265358979 * x));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return sgn * 0.5;
|
|
283
|
+
}
|
|
284
|
+
`,W3=`
|
|
285
|
+
fn _gpu_fresnelC(x_in: f32) -> f32 {
|
|
286
|
+
let sgn: f32 = select(1.0, -1.0, x_in < 0.0);
|
|
287
|
+
let x = abs(x_in);
|
|
288
|
+
|
|
289
|
+
if (x < 1.6) {
|
|
290
|
+
let x2 = x * x;
|
|
291
|
+
let t = x2 * x2;
|
|
292
|
+
var cn = array<f32, 12>(
|
|
293
|
+
-4.98843114573573548651e-8, 9.50428062829859605134e-6,
|
|
294
|
+
-6.45191435683965050962e-4, 1.88843319396703850064e-2,
|
|
295
|
+
-2.05525900955013891793e-1, 9.99999999999999998822e-1,
|
|
296
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
297
|
+
);
|
|
298
|
+
var cd = array<f32, 12>(
|
|
299
|
+
3.99982968972495980367e-12, 9.15439215774657478799e-10,
|
|
300
|
+
1.25001862479598821474e-7, 1.22262789024179030997e-5,
|
|
301
|
+
8.68029542941784300606e-4, 4.12142090722199792936e-2, 1.0,
|
|
302
|
+
0.0, 0.0, 0.0, 0.0, 0.0
|
|
303
|
+
);
|
|
304
|
+
return sgn * x * _gpu_polevl(t, cn, 6) / _gpu_polevl(t, cd, 7);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (x < 36.0) {
|
|
308
|
+
let x2 = x * x;
|
|
309
|
+
let t = 3.14159265358979 * x2;
|
|
310
|
+
let u = 1.0 / (t * t);
|
|
311
|
+
var fn = array<f32, 12>(
|
|
312
|
+
4.21543555043677546506e-1, 1.43407919780758885261e-1,
|
|
313
|
+
1.15220955073585758835e-2, 3.450179397825740279e-4,
|
|
314
|
+
4.63613749287867322088e-6, 3.05568983790257605827e-8,
|
|
315
|
+
1.02304514164907233465e-10, 1.72010743268161828879e-13,
|
|
316
|
+
1.34283276233062758925e-16, 3.76329711269987889006e-20,
|
|
317
|
+
0.0, 0.0
|
|
318
|
+
);
|
|
319
|
+
var fd = array<f32, 12>(
|
|
320
|
+
1.0, 7.51586398353378947175e-1,
|
|
321
|
+
1.16888925859191382142e-1, 6.44051526508858611005e-3,
|
|
322
|
+
1.55934409164153020873e-4, 1.8462756734893054587e-6,
|
|
323
|
+
1.12699224763999035261e-8, 3.60140029589371370404e-11,
|
|
324
|
+
5.8875453362157841001e-14, 4.52001434074129701496e-17,
|
|
325
|
+
1.25443237090011264384e-20, 0.0
|
|
326
|
+
);
|
|
327
|
+
var gn = array<f32, 12>(
|
|
328
|
+
5.04442073643383265887e-1, 1.97102833525523411709e-1,
|
|
329
|
+
1.87648584092575249293e-2, 6.84079380915393090172e-4,
|
|
330
|
+
1.15138826111884280931e-5, 9.82852443688422223854e-8,
|
|
331
|
+
4.45344415861750144738e-10, 1.08268041139020870318e-12,
|
|
332
|
+
1.37555460633261799868e-15, 8.36354435630677421531e-19,
|
|
333
|
+
1.86958710162783235106e-22, 0.0
|
|
334
|
+
);
|
|
335
|
+
var gd = array<f32, 12>(
|
|
336
|
+
1.0, 1.47495759925128324529,
|
|
337
|
+
3.37748989120019970451e-1, 2.53603741420338795122e-2,
|
|
338
|
+
8.14679107184306179049e-4, 1.27545075667729118702e-5,
|
|
339
|
+
1.04314589657571990585e-7, 4.60680728515232032307e-10,
|
|
340
|
+
1.10273215066240270757e-12, 1.38796531259578871258e-15,
|
|
341
|
+
8.39158816283118707363e-19, 1.86958710162783236342e-22
|
|
342
|
+
);
|
|
343
|
+
let f = 1.0 - u * _gpu_polevl(u, fn, 10) / _gpu_polevl(u, fd, 11);
|
|
344
|
+
let g = (1.0 / t) * _gpu_polevl(u, gn, 11) / _gpu_polevl(u, gd, 12);
|
|
345
|
+
let z = 1.5707963267948966 * x2;
|
|
346
|
+
let c = cos(z);
|
|
347
|
+
let s = sin(z);
|
|
348
|
+
return sgn * (0.5 + (f * s - g * c) / (3.14159265358979 * x));
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return sgn * 0.5;
|
|
352
|
+
}
|
|
353
|
+
`,Y3=`
|
|
354
|
+
float _gpu_fresnelS(float x_in) {
|
|
355
|
+
float sgn = x_in < 0.0 ? -1.0 : 1.0;
|
|
356
|
+
float x = abs(x_in);
|
|
357
|
+
|
|
358
|
+
if (x < 1.6) {
|
|
359
|
+
float x2 = x * x;
|
|
360
|
+
float t = x2 * x2;
|
|
361
|
+
float sn[6] = float[6](
|
|
362
|
+
-2.99181919401019853726e3, 7.08840045257738576863e5,
|
|
363
|
+
-6.29741486205862506537e7, 2.54890880573376359104e9,
|
|
364
|
+
-4.42979518059697779103e10, 3.18016297876567817986e11
|
|
365
|
+
);
|
|
366
|
+
float sd[7] = float[7](
|
|
367
|
+
1.0, 2.81376268889994315696e2, 4.55847810806532581675e4,
|
|
368
|
+
5.1734388877009640073e6, 4.19320245898111231129e8, 2.2441179564534092094e10,
|
|
369
|
+
6.07366389490084914091e11
|
|
370
|
+
);
|
|
371
|
+
return sgn * x * x2 * _gpu_polevl(t, sn, 6) / _gpu_polevl(t, sd, 7);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
if (x < 36.0) {
|
|
375
|
+
float x2 = x * x;
|
|
376
|
+
float t = 3.14159265358979 * x2;
|
|
377
|
+
float u = 1.0 / (t * t);
|
|
378
|
+
float fn[10] = float[10](
|
|
379
|
+
4.21543555043677546506e-1, 1.43407919780758885261e-1,
|
|
380
|
+
1.15220955073585758835e-2, 3.450179397825740279e-4,
|
|
381
|
+
4.63613749287867322088e-6, 3.05568983790257605827e-8,
|
|
382
|
+
1.02304514164907233465e-10, 1.72010743268161828879e-13,
|
|
383
|
+
1.34283276233062758925e-16, 3.76329711269987889006e-20
|
|
384
|
+
);
|
|
385
|
+
float fd[11] = float[11](
|
|
386
|
+
1.0, 7.51586398353378947175e-1,
|
|
387
|
+
1.16888925859191382142e-1, 6.44051526508858611005e-3,
|
|
388
|
+
1.55934409164153020873e-4, 1.8462756734893054587e-6,
|
|
389
|
+
1.12699224763999035261e-8, 3.60140029589371370404e-11,
|
|
390
|
+
5.8875453362157841001e-14, 4.52001434074129701496e-17,
|
|
391
|
+
1.25443237090011264384e-20
|
|
392
|
+
);
|
|
393
|
+
float gn[11] = float[11](
|
|
394
|
+
5.04442073643383265887e-1, 1.97102833525523411709e-1,
|
|
395
|
+
1.87648584092575249293e-2, 6.84079380915393090172e-4,
|
|
396
|
+
1.15138826111884280931e-5, 9.82852443688422223854e-8,
|
|
397
|
+
4.45344415861750144738e-10, 1.08268041139020870318e-12,
|
|
398
|
+
1.37555460633261799868e-15, 8.36354435630677421531e-19,
|
|
399
|
+
1.86958710162783235106e-22
|
|
400
|
+
);
|
|
401
|
+
float gd[12] = float[12](
|
|
402
|
+
1.0, 1.47495759925128324529,
|
|
403
|
+
3.37748989120019970451e-1, 2.53603741420338795122e-2,
|
|
404
|
+
8.14679107184306179049e-4, 1.27545075667729118702e-5,
|
|
405
|
+
1.04314589657571990585e-7, 4.60680728515232032307e-10,
|
|
406
|
+
1.10273215066240270757e-12, 1.38796531259578871258e-15,
|
|
407
|
+
8.39158816283118707363e-19, 1.86958710162783236342e-22
|
|
408
|
+
);
|
|
409
|
+
float f = 1.0 - u * _gpu_polevl(u, fn, 10) / _gpu_polevl(u, fd, 11);
|
|
410
|
+
float g = (1.0 / t) * _gpu_polevl(u, gn, 11) / _gpu_polevl(u, gd, 12);
|
|
411
|
+
float z = 1.5707963267948966 * x2;
|
|
412
|
+
float c = cos(z);
|
|
413
|
+
float s = sin(z);
|
|
414
|
+
return sgn * (0.5 - (f * c + g * s) / (3.14159265358979 * x));
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return sgn * 0.5;
|
|
418
|
+
}
|
|
419
|
+
`,Q3=`
|
|
420
|
+
fn _gpu_fresnelS(x_in: f32) -> f32 {
|
|
421
|
+
let sgn: f32 = select(1.0, -1.0, x_in < 0.0);
|
|
422
|
+
let x = abs(x_in);
|
|
423
|
+
|
|
424
|
+
if (x < 1.6) {
|
|
425
|
+
let x2 = x * x;
|
|
426
|
+
let t = x2 * x2;
|
|
427
|
+
var sn = array<f32, 12>(
|
|
428
|
+
-2.99181919401019853726e3, 7.08840045257738576863e5,
|
|
429
|
+
-6.29741486205862506537e7, 2.54890880573376359104e9,
|
|
430
|
+
-4.42979518059697779103e10, 3.18016297876567817986e11,
|
|
431
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0
|
|
432
|
+
);
|
|
433
|
+
var sd = array<f32, 12>(
|
|
434
|
+
1.0, 2.81376268889994315696e2, 4.55847810806532581675e4,
|
|
435
|
+
5.1734388877009640073e6, 4.19320245898111231129e8, 2.2441179564534092094e10,
|
|
436
|
+
6.07366389490084914091e11,
|
|
437
|
+
0.0, 0.0, 0.0, 0.0, 0.0
|
|
438
|
+
);
|
|
439
|
+
return sgn * x * x2 * _gpu_polevl(t, sn, 6) / _gpu_polevl(t, sd, 7);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (x < 36.0) {
|
|
443
|
+
let x2 = x * x;
|
|
444
|
+
let t = 3.14159265358979 * x2;
|
|
445
|
+
let u = 1.0 / (t * t);
|
|
446
|
+
var fn = array<f32, 12>(
|
|
447
|
+
4.21543555043677546506e-1, 1.43407919780758885261e-1,
|
|
448
|
+
1.15220955073585758835e-2, 3.450179397825740279e-4,
|
|
449
|
+
4.63613749287867322088e-6, 3.05568983790257605827e-8,
|
|
450
|
+
1.02304514164907233465e-10, 1.72010743268161828879e-13,
|
|
451
|
+
1.34283276233062758925e-16, 3.76329711269987889006e-20,
|
|
452
|
+
0.0, 0.0
|
|
453
|
+
);
|
|
454
|
+
var fd = array<f32, 12>(
|
|
455
|
+
1.0, 7.51586398353378947175e-1,
|
|
456
|
+
1.16888925859191382142e-1, 6.44051526508858611005e-3,
|
|
457
|
+
1.55934409164153020873e-4, 1.8462756734893054587e-6,
|
|
458
|
+
1.12699224763999035261e-8, 3.60140029589371370404e-11,
|
|
459
|
+
5.8875453362157841001e-14, 4.52001434074129701496e-17,
|
|
460
|
+
1.25443237090011264384e-20, 0.0
|
|
461
|
+
);
|
|
462
|
+
var gn = array<f32, 12>(
|
|
463
|
+
5.04442073643383265887e-1, 1.97102833525523411709e-1,
|
|
464
|
+
1.87648584092575249293e-2, 6.84079380915393090172e-4,
|
|
465
|
+
1.15138826111884280931e-5, 9.82852443688422223854e-8,
|
|
466
|
+
4.45344415861750144738e-10, 1.08268041139020870318e-12,
|
|
467
|
+
1.37555460633261799868e-15, 8.36354435630677421531e-19,
|
|
468
|
+
1.86958710162783235106e-22, 0.0
|
|
469
|
+
);
|
|
470
|
+
var gd = array<f32, 12>(
|
|
471
|
+
1.0, 1.47495759925128324529,
|
|
472
|
+
3.37748989120019970451e-1, 2.53603741420338795122e-2,
|
|
473
|
+
8.14679107184306179049e-4, 1.27545075667729118702e-5,
|
|
474
|
+
1.04314589657571990585e-7, 4.60680728515232032307e-10,
|
|
475
|
+
1.10273215066240270757e-12, 1.38796531259578871258e-15,
|
|
476
|
+
8.39158816283118707363e-19, 1.86958710162783236342e-22
|
|
477
|
+
);
|
|
478
|
+
let f = 1.0 - u * _gpu_polevl(u, fn, 10) / _gpu_polevl(u, fd, 11);
|
|
479
|
+
let g = (1.0 / t) * _gpu_polevl(u, gn, 11) / _gpu_polevl(u, gd, 12);
|
|
480
|
+
let z = 1.5707963267948966 * x2;
|
|
481
|
+
let c = cos(z);
|
|
482
|
+
let s = sin(z);
|
|
483
|
+
return sgn * (0.5 - (f * c + g * s) / (3.14159265358979 * x));
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return sgn * 0.5;
|
|
487
|
+
}
|
|
488
|
+
`,X3=`
|
|
489
|
+
float _gpu_factorial(int n) {
|
|
490
|
+
float f = 1.0;
|
|
491
|
+
for (int i = 2; i <= n; i++) f *= float(i);
|
|
492
|
+
return f;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
float _gpu_besselJ_series(int n, float x) {
|
|
496
|
+
float halfX = x / 2.0;
|
|
497
|
+
float negQ = -(x * x) / 4.0;
|
|
498
|
+
float term = 1.0;
|
|
499
|
+
for (int i = 1; i <= n; i++) term /= float(i);
|
|
500
|
+
float s = term;
|
|
501
|
+
for (int k = 1; k <= 60; k++) {
|
|
502
|
+
term *= negQ / (float(k) * float(n + k));
|
|
503
|
+
s += term;
|
|
504
|
+
if (abs(term) < abs(s) * 1e-7) break;
|
|
505
|
+
}
|
|
506
|
+
return s * pow(halfX, float(n));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
float _gpu_besselJ_asymptotic(int n, float x) {
|
|
510
|
+
float mu = 4.0 * float(n) * float(n);
|
|
511
|
+
float P = 1.0;
|
|
512
|
+
float Q = 0.0;
|
|
513
|
+
float ak = 1.0;
|
|
514
|
+
float e8x = 8.0 * x;
|
|
515
|
+
for (int k = 1; k <= 12; k++) {
|
|
516
|
+
float twokm1 = float(2 * k - 1);
|
|
517
|
+
ak *= mu - twokm1 * twokm1;
|
|
518
|
+
float denom = _gpu_factorial(k) * pow(e8x, float(k));
|
|
519
|
+
float contrib = ak / denom;
|
|
520
|
+
if (k == 1 || k == 3 || k == 5 || k == 7 || k == 9 || k == 11) {
|
|
521
|
+
// odd k: contributes to Q
|
|
522
|
+
if (((k - 1) / 2) % 2 == 0) Q += contrib;
|
|
523
|
+
else Q -= contrib;
|
|
524
|
+
} else {
|
|
525
|
+
// even k: contributes to P
|
|
526
|
+
if ((k / 2) % 2 == 1) P -= contrib;
|
|
527
|
+
else P += contrib;
|
|
528
|
+
}
|
|
529
|
+
if (abs(contrib) < 1e-7) break;
|
|
530
|
+
}
|
|
531
|
+
float chi = x - (float(n) / 2.0 + 0.25) * 3.14159265358979;
|
|
532
|
+
return sqrt(2.0 / (3.14159265358979 * x)) * (P * cos(chi) - Q * sin(chi));
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
float _gpu_besselJ(int n, float x) {
|
|
536
|
+
if (x == 0.0) return n == 0 ? 1.0 : 0.0;
|
|
537
|
+
float sgn = 1.0;
|
|
538
|
+
if (n < 0) {
|
|
539
|
+
n = -n;
|
|
540
|
+
if (n % 2 != 0) sgn = -1.0;
|
|
541
|
+
}
|
|
542
|
+
if (x < 0.0) {
|
|
543
|
+
x = -x;
|
|
544
|
+
if (n % 2 != 0) sgn *= -1.0;
|
|
545
|
+
}
|
|
546
|
+
if (x > 25.0 + float(n * n) / 2.0) return sgn * _gpu_besselJ_asymptotic(n, x);
|
|
547
|
+
if (x < 5.0 + float(n)) return sgn * _gpu_besselJ_series(n, x);
|
|
548
|
+
// Miller's backward recurrence
|
|
549
|
+
int M = max(n + 20, int(ceil(x)) + 30);
|
|
550
|
+
if (M > 200) return sgn * _gpu_besselJ_series(n, x);
|
|
551
|
+
float vals[201];
|
|
552
|
+
float jp1 = 0.0;
|
|
553
|
+
float jk = 1.0;
|
|
554
|
+
vals[M] = jk;
|
|
555
|
+
for (int k = M; k >= 1; k--) {
|
|
556
|
+
float jm1 = (2.0 * float(k) / x) * jk - jp1;
|
|
557
|
+
jp1 = jk;
|
|
558
|
+
jk = jm1;
|
|
559
|
+
vals[k - 1] = jk;
|
|
560
|
+
}
|
|
561
|
+
float norm = vals[0];
|
|
562
|
+
for (int k = 2; k <= M; k += 2) norm += 2.0 * vals[k];
|
|
563
|
+
return sgn * vals[n] / norm;
|
|
564
|
+
}
|
|
565
|
+
`,K3=`
|
|
566
|
+
fn _gpu_factorial(n: i32) -> f32 {
|
|
567
|
+
var f: f32 = 1.0;
|
|
568
|
+
for (var i: i32 = 2; i <= n; i++) { f *= f32(i); }
|
|
569
|
+
return f;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
fn _gpu_besselJ_series(n_in: i32, x: f32) -> f32 {
|
|
573
|
+
let halfX = x / 2.0;
|
|
574
|
+
let negQ = -(x * x) / 4.0;
|
|
575
|
+
var term: f32 = 1.0;
|
|
576
|
+
for (var i: i32 = 1; i <= n_in; i++) { term /= f32(i); }
|
|
577
|
+
var s = term;
|
|
578
|
+
for (var k: i32 = 1; k <= 60; k++) {
|
|
579
|
+
term *= negQ / (f32(k) * f32(n_in + k));
|
|
580
|
+
s += term;
|
|
581
|
+
if (abs(term) < abs(s) * 1e-7) { break; }
|
|
582
|
+
}
|
|
583
|
+
return s * pow(halfX, f32(n_in));
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
fn _gpu_besselJ_asymptotic(n_in: i32, x: f32) -> f32 {
|
|
587
|
+
let mu = 4.0 * f32(n_in) * f32(n_in);
|
|
588
|
+
var P: f32 = 1.0;
|
|
589
|
+
var Q: f32 = 0.0;
|
|
590
|
+
var ak: f32 = 1.0;
|
|
591
|
+
let e8x = 8.0 * x;
|
|
592
|
+
for (var k: i32 = 1; k <= 12; k++) {
|
|
593
|
+
let twokm1 = f32(2 * k - 1);
|
|
594
|
+
ak *= mu - twokm1 * twokm1;
|
|
595
|
+
let denom = _gpu_factorial(k) * pow(e8x, f32(k));
|
|
596
|
+
let contrib = ak / denom;
|
|
597
|
+
if (k == 1 || k == 3 || k == 5 || k == 7 || k == 9 || k == 11) {
|
|
598
|
+
if (((k - 1) / 2) % 2 == 0) { Q += contrib; }
|
|
599
|
+
else { Q -= contrib; }
|
|
600
|
+
} else {
|
|
601
|
+
if ((k / 2) % 2 == 1) { P -= contrib; }
|
|
602
|
+
else { P += contrib; }
|
|
603
|
+
}
|
|
604
|
+
if (abs(contrib) < 1e-7) { break; }
|
|
605
|
+
}
|
|
606
|
+
let chi = x - (f32(n_in) / 2.0 + 0.25) * 3.14159265358979;
|
|
607
|
+
return sqrt(2.0 / (3.14159265358979 * x)) * (P * cos(chi) - Q * sin(chi));
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
611
|
+
var n = n_in;
|
|
612
|
+
var x = x_in;
|
|
613
|
+
if (x == 0.0) { return select(0.0, 1.0, n == 0); }
|
|
614
|
+
var sgn: f32 = 1.0;
|
|
615
|
+
if (n < 0) {
|
|
616
|
+
n = -n;
|
|
617
|
+
if (n % 2 != 0) { sgn = -1.0; }
|
|
618
|
+
}
|
|
619
|
+
if (x < 0.0) {
|
|
620
|
+
x = -x;
|
|
621
|
+
if (n % 2 != 0) { sgn *= -1.0; }
|
|
622
|
+
}
|
|
623
|
+
if (x > 25.0 + f32(n * n) / 2.0) { return sgn * _gpu_besselJ_asymptotic(n, x); }
|
|
624
|
+
if (x < 5.0 + f32(n)) { return sgn * _gpu_besselJ_series(n, x); }
|
|
625
|
+
// Miller's backward recurrence
|
|
626
|
+
var M = max(n + 20, i32(ceil(x)) + 30);
|
|
627
|
+
if (M > 200) { return sgn * _gpu_besselJ_series(n, x); }
|
|
628
|
+
var vals: array<f32, 201>;
|
|
629
|
+
var jp1: f32 = 0.0;
|
|
630
|
+
var jk: f32 = 1.0;
|
|
631
|
+
vals[M] = jk;
|
|
632
|
+
for (var k: i32 = M; k >= 1; k--) {
|
|
633
|
+
let jm1 = (2.0 * f32(k) / x) * jk - jp1;
|
|
634
|
+
jp1 = jk;
|
|
635
|
+
jk = jm1;
|
|
636
|
+
vals[k - 1] = jk;
|
|
637
|
+
}
|
|
638
|
+
var norm = vals[0];
|
|
639
|
+
for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
|
|
640
|
+
return sgn * vals[n] / norm;
|
|
641
|
+
}
|
|
642
|
+
`,eI=`
|
|
643
|
+
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
644
|
+
vec2 z = vec2(0.0, 0.0);
|
|
645
|
+
for (int i = 0; i < maxIter; i++) {
|
|
646
|
+
z = vec2(z.x*z.x - z.y*z.y + c.x, 2.0*z.x*z.y + c.y);
|
|
647
|
+
if (dot(z, z) > 4.0)
|
|
648
|
+
return clamp((float(i) - log2(log2(dot(z, z))) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
649
|
+
}
|
|
650
|
+
return 1.0;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
float _fractal_julia(vec2 z, vec2 c, int maxIter) {
|
|
654
|
+
for (int i = 0; i < maxIter; i++) {
|
|
655
|
+
z = vec2(z.x*z.x - z.y*z.y + c.x, 2.0*z.x*z.y + c.y);
|
|
656
|
+
if (dot(z, z) > 4.0)
|
|
657
|
+
return clamp((float(i) - log2(log2(dot(z, z))) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
658
|
+
}
|
|
659
|
+
return 1.0;
|
|
660
|
+
}
|
|
661
|
+
`,nI=`
|
|
662
|
+
fn _fractal_mandelbrot(c: vec2f, maxIter: i32) -> f32 {
|
|
663
|
+
var z = vec2f(0.0, 0.0);
|
|
664
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
665
|
+
z = vec2f(z.x*z.x - z.y*z.y + c.x, 2.0*z.x*z.y + c.y);
|
|
666
|
+
if (dot(z, z) > 4.0) {
|
|
667
|
+
return clamp((f32(i) - log2(log2(dot(z, z))) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
return 1.0;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
674
|
+
var z = z_in;
|
|
675
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
676
|
+
z = vec2f(z.x*z.x - z.y*z.y + c.x, 2.0*z.x*z.y + c.y);
|
|
677
|
+
if (dot(z, z) > 4.0) {
|
|
678
|
+
return clamp((f32(i) - log2(log2(dot(z, z))) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
return 1.0;
|
|
682
|
+
}
|
|
683
|
+
`,tI=`
|
|
684
|
+
float _gpu_srgb_to_linear(float c) {
|
|
685
|
+
if (c <= 0.04045) return c / 12.92;
|
|
686
|
+
return pow((c + 0.055) / 1.055, 2.4);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
float _gpu_linear_to_srgb(float c) {
|
|
690
|
+
if (c <= 0.0031308) return 12.92 * c;
|
|
691
|
+
return 1.055 * pow(c, 1.0 / 2.4) - 0.055;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
vec3 _gpu_srgb_to_oklab(vec3 rgb) {
|
|
695
|
+
float r = _gpu_srgb_to_linear(rgb.x);
|
|
696
|
+
float g = _gpu_srgb_to_linear(rgb.y);
|
|
697
|
+
float b = _gpu_srgb_to_linear(rgb.z);
|
|
698
|
+
float l_ = pow(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b, 1.0 / 3.0);
|
|
699
|
+
float m_ = pow(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b, 1.0 / 3.0);
|
|
700
|
+
float s_ = pow(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b, 1.0 / 3.0);
|
|
701
|
+
return vec3(
|
|
702
|
+
0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,
|
|
703
|
+
1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,
|
|
704
|
+
0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_
|
|
705
|
+
);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
vec3 _gpu_oklab_to_srgb(vec3 lab) {
|
|
709
|
+
float l_ = lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z;
|
|
710
|
+
float m_ = lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z;
|
|
711
|
+
float s_ = lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z;
|
|
712
|
+
float l = l_ * l_ * l_;
|
|
713
|
+
float m = m_ * m_ * m_;
|
|
714
|
+
float s = s_ * s_ * s_;
|
|
715
|
+
float r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;
|
|
716
|
+
float g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
|
|
717
|
+
float b = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;
|
|
718
|
+
return clamp(vec3(_gpu_linear_to_srgb(r), _gpu_linear_to_srgb(g), _gpu_linear_to_srgb(b)), 0.0, 1.0);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
vec3 _gpu_oklab_to_oklch(vec3 lab) {
|
|
722
|
+
float C = length(lab.yz);
|
|
723
|
+
float H = atan(lab.z, lab.y);
|
|
724
|
+
return vec3(lab.x, C, H);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
vec3 _gpu_oklch_to_oklab(vec3 lch) {
|
|
728
|
+
return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
vec3 _gpu_color_mix(vec3 rgb1, vec3 rgb2, float t) {
|
|
732
|
+
vec3 lch1 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb1));
|
|
733
|
+
vec3 lch2 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb2));
|
|
734
|
+
float L = mix(lch1.x, lch2.x, t);
|
|
735
|
+
float C = mix(lch1.y, lch2.y, t);
|
|
736
|
+
float dh = lch2.z - lch1.z;
|
|
737
|
+
const float PI = 3.14159265359;
|
|
738
|
+
if (dh > PI) dh -= 2.0 * PI;
|
|
739
|
+
if (dh < -PI) dh += 2.0 * PI;
|
|
740
|
+
float H = lch1.z + dh * t;
|
|
741
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(vec3(L, C, H)));
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
float _gpu_apca(vec3 bg, vec3 fg) {
|
|
745
|
+
float bgR = _gpu_srgb_to_linear(bg.x);
|
|
746
|
+
float bgG = _gpu_srgb_to_linear(bg.y);
|
|
747
|
+
float bgB = _gpu_srgb_to_linear(bg.z);
|
|
748
|
+
float fgR = _gpu_srgb_to_linear(fg.x);
|
|
749
|
+
float fgG = _gpu_srgb_to_linear(fg.y);
|
|
750
|
+
float fgB = _gpu_srgb_to_linear(fg.z);
|
|
751
|
+
float bgY = 0.2126729 * bgR + 0.7151522 * bgG + 0.0721750 * bgB;
|
|
752
|
+
float fgY = 0.2126729 * fgR + 0.7151522 * fgG + 0.0721750 * fgB;
|
|
753
|
+
float bgC = pow(bgY, 0.56);
|
|
754
|
+
float fgC = pow(fgY, 0.57);
|
|
755
|
+
float contrast = (bgC > fgC)
|
|
756
|
+
? (bgC - fgC) * 1.14
|
|
757
|
+
: (bgC - fgC) * 1.14;
|
|
758
|
+
return contrast * 100.0;
|
|
759
|
+
}
|
|
760
|
+
`,iI=`
|
|
761
|
+
fn _gpu_srgb_to_linear(c: f32) -> f32 {
|
|
762
|
+
if (c <= 0.04045) { return c / 12.92; }
|
|
763
|
+
return pow((c + 0.055) / 1.055, 2.4);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
fn _gpu_linear_to_srgb(c: f32) -> f32 {
|
|
767
|
+
if (c <= 0.0031308) { return 12.92 * c; }
|
|
768
|
+
return 1.055 * pow(c, 1.0 / 2.4) - 0.055;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
fn _gpu_srgb_to_oklab(rgb: vec3f) -> vec3f {
|
|
772
|
+
let r = _gpu_srgb_to_linear(rgb.x);
|
|
773
|
+
let g = _gpu_srgb_to_linear(rgb.y);
|
|
774
|
+
let b = _gpu_srgb_to_linear(rgb.z);
|
|
775
|
+
let l_ = pow(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b, 1.0 / 3.0);
|
|
776
|
+
let m_ = pow(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b, 1.0 / 3.0);
|
|
777
|
+
let s_ = pow(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b, 1.0 / 3.0);
|
|
778
|
+
return vec3f(
|
|
779
|
+
0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,
|
|
780
|
+
1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,
|
|
781
|
+
0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
fn _gpu_oklab_to_srgb(lab: vec3f) -> vec3f {
|
|
786
|
+
let l_ = lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z;
|
|
787
|
+
let m_ = lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z;
|
|
788
|
+
let s_ = lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z;
|
|
789
|
+
let l = l_ * l_ * l_;
|
|
790
|
+
let m = m_ * m_ * m_;
|
|
791
|
+
let s = s_ * s_ * s_;
|
|
792
|
+
let r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;
|
|
793
|
+
let g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
|
|
794
|
+
let b = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;
|
|
795
|
+
return clamp(vec3f(_gpu_linear_to_srgb(r), _gpu_linear_to_srgb(g), _gpu_linear_to_srgb(b)), vec3f(0.0), vec3f(1.0));
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
fn _gpu_oklab_to_oklch(lab: vec3f) -> vec3f {
|
|
799
|
+
let C = length(lab.yz);
|
|
800
|
+
let H = atan2(lab.z, lab.y);
|
|
801
|
+
return vec3f(lab.x, C, H);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
fn _gpu_oklch_to_oklab(lch: vec3f) -> vec3f {
|
|
805
|
+
return vec3f(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
fn _gpu_color_mix(rgb1: vec3f, rgb2: vec3f, t: f32) -> vec3f {
|
|
809
|
+
let lch1 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb1));
|
|
810
|
+
let lch2 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb2));
|
|
811
|
+
let L = mix(lch1.x, lch2.x, t);
|
|
812
|
+
let C = mix(lch1.y, lch2.y, t);
|
|
813
|
+
let PI = 3.14159265359;
|
|
814
|
+
var dh = lch2.z - lch1.z;
|
|
815
|
+
if (dh > PI) { dh -= 2.0 * PI; }
|
|
816
|
+
if (dh < -PI) { dh += 2.0 * PI; }
|
|
817
|
+
let H = lch1.z + dh * t;
|
|
818
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(vec3f(L, C, H)));
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
822
|
+
let bgR = _gpu_srgb_to_linear(bg.x);
|
|
823
|
+
let bgG = _gpu_srgb_to_linear(bg.y);
|
|
824
|
+
let bgB = _gpu_srgb_to_linear(bg.z);
|
|
825
|
+
let fgR = _gpu_srgb_to_linear(fg.x);
|
|
826
|
+
let fgG = _gpu_srgb_to_linear(fg.y);
|
|
827
|
+
let fgB = _gpu_srgb_to_linear(fg.z);
|
|
828
|
+
let bgY = 0.2126729 * bgR + 0.7151522 * bgG + 0.0721750 * bgB;
|
|
829
|
+
let fgY = 0.2126729 * fgR + 0.7151522 * fgG + 0.0721750 * fgB;
|
|
830
|
+
let bgC = pow(bgY, 0.56);
|
|
831
|
+
let fgC = pow(fgY, 0.57);
|
|
832
|
+
let contrast = (bgC - fgC) * 1.14;
|
|
833
|
+
return contrast * 100.0;
|
|
834
|
+
}
|
|
835
|
+
`,Ip={_gpu_cmul:{deps:[],glsl:`vec2 _gpu_cmul(vec2 a, vec2 b) {
|
|
836
|
+
return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
|
|
837
|
+
}`,wgsl:`fn _gpu_cmul(a: vec2f, b: vec2f) -> vec2f {
|
|
838
|
+
return vec2f(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
|
|
839
|
+
}`},_gpu_cdiv:{deps:[],glsl:`vec2 _gpu_cdiv(vec2 a, vec2 b) {
|
|
840
|
+
float d = b.x * b.x + b.y * b.y;
|
|
841
|
+
return vec2((a.x * b.x + a.y * b.y) / d, (a.y * b.x - a.x * b.y) / d);
|
|
842
|
+
}`,wgsl:`fn _gpu_cdiv(a: vec2f, b: vec2f) -> vec2f {
|
|
843
|
+
let d = b.x * b.x + b.y * b.y;
|
|
844
|
+
return vec2f((a.x * b.x + a.y * b.y) / d, (a.y * b.x - a.x * b.y) / d);
|
|
845
|
+
}`},_gpu_cexp:{deps:[],glsl:`vec2 _gpu_cexp(vec2 z) {
|
|
846
|
+
float e = exp(z.x);
|
|
847
|
+
return vec2(e * cos(z.y), e * sin(z.y));
|
|
848
|
+
}`,wgsl:`fn _gpu_cexp(z: vec2f) -> vec2f {
|
|
849
|
+
let e = exp(z.x);
|
|
850
|
+
return vec2f(e * cos(z.y), e * sin(z.y));
|
|
851
|
+
}`},_gpu_cln:{deps:[],glsl:`vec2 _gpu_cln(vec2 z) {
|
|
852
|
+
return vec2(log(length(z)), atan(z.y, z.x));
|
|
853
|
+
}`,wgsl:`fn _gpu_cln(z: vec2f) -> vec2f {
|
|
854
|
+
return vec2f(log(length(z)), atan2(z.y, z.x));
|
|
855
|
+
}`},_gpu_cpow:{deps:["_gpu_cexp","_gpu_cmul","_gpu_cln"],glsl:`vec2 _gpu_cpow(vec2 z, vec2 w) {
|
|
856
|
+
return _gpu_cexp(_gpu_cmul(w, _gpu_cln(z)));
|
|
857
|
+
}`,wgsl:`fn _gpu_cpow(z: vec2f, w: vec2f) -> vec2f {
|
|
858
|
+
return _gpu_cexp(_gpu_cmul(w, _gpu_cln(z)));
|
|
859
|
+
}`},_gpu_csqrt:{deps:[],glsl:`vec2 _gpu_csqrt(vec2 z) {
|
|
860
|
+
float r = length(z);
|
|
861
|
+
float theta = atan(z.y, z.x);
|
|
862
|
+
return sqrt(r) * vec2(cos(theta * 0.5), sin(theta * 0.5));
|
|
863
|
+
}`,wgsl:`fn _gpu_csqrt(z: vec2f) -> vec2f {
|
|
864
|
+
let r = length(z);
|
|
865
|
+
let theta = atan2(z.y, z.x);
|
|
866
|
+
return sqrt(r) * vec2f(cos(theta * 0.5), sin(theta * 0.5));
|
|
867
|
+
}`},_gpu_csin:{deps:[],glsl:`vec2 _gpu_csin(vec2 z) {
|
|
868
|
+
return vec2(sin(z.x) * cosh(z.y), cos(z.x) * sinh(z.y));
|
|
869
|
+
}`,wgsl:`fn _gpu_csin(z: vec2f) -> vec2f {
|
|
870
|
+
return vec2f(sin(z.x) * cosh(z.y), cos(z.x) * sinh(z.y));
|
|
871
|
+
}`},_gpu_ccos:{deps:[],glsl:`vec2 _gpu_ccos(vec2 z) {
|
|
872
|
+
return vec2(cos(z.x) * cosh(z.y), -sin(z.x) * sinh(z.y));
|
|
873
|
+
}`,wgsl:`fn _gpu_ccos(z: vec2f) -> vec2f {
|
|
874
|
+
return vec2f(cos(z.x) * cosh(z.y), -sin(z.x) * sinh(z.y));
|
|
875
|
+
}`},_gpu_ctan:{deps:["_gpu_cdiv","_gpu_csin","_gpu_ccos"],glsl:`vec2 _gpu_ctan(vec2 z) {
|
|
876
|
+
return _gpu_cdiv(_gpu_csin(z), _gpu_ccos(z));
|
|
877
|
+
}`,wgsl:`fn _gpu_ctan(z: vec2f) -> vec2f {
|
|
878
|
+
return _gpu_cdiv(_gpu_csin(z), _gpu_ccos(z));
|
|
879
|
+
}`},_gpu_csinh:{deps:[],glsl:`vec2 _gpu_csinh(vec2 z) {
|
|
880
|
+
return vec2(sinh(z.x) * cos(z.y), cosh(z.x) * sin(z.y));
|
|
881
|
+
}`,wgsl:`fn _gpu_csinh(z: vec2f) -> vec2f {
|
|
882
|
+
return vec2f(sinh(z.x) * cos(z.y), cosh(z.x) * sin(z.y));
|
|
883
|
+
}`},_gpu_ccosh:{deps:[],glsl:`vec2 _gpu_ccosh(vec2 z) {
|
|
884
|
+
return vec2(cosh(z.x) * cos(z.y), sinh(z.x) * sin(z.y));
|
|
885
|
+
}`,wgsl:`fn _gpu_ccosh(z: vec2f) -> vec2f {
|
|
886
|
+
return vec2f(cosh(z.x) * cos(z.y), sinh(z.x) * sin(z.y));
|
|
887
|
+
}`},_gpu_ctanh:{deps:["_gpu_cdiv","_gpu_csinh","_gpu_ccosh"],glsl:`vec2 _gpu_ctanh(vec2 z) {
|
|
888
|
+
return _gpu_cdiv(_gpu_csinh(z), _gpu_ccosh(z));
|
|
889
|
+
}`,wgsl:`fn _gpu_ctanh(z: vec2f) -> vec2f {
|
|
890
|
+
return _gpu_cdiv(_gpu_csinh(z), _gpu_ccosh(z));
|
|
891
|
+
}`},_gpu_casin:{deps:["_gpu_csqrt","_gpu_cln"],glsl:`vec2 _gpu_casin(vec2 z) {
|
|
892
|
+
vec2 iz = vec2(-z.y, z.x);
|
|
893
|
+
vec2 s = _gpu_csqrt(vec2(1.0 - z.x * z.x + z.y * z.y, -2.0 * z.x * z.y));
|
|
894
|
+
vec2 l = _gpu_cln(iz + s);
|
|
895
|
+
return vec2(l.y, -l.x);
|
|
896
|
+
}`,wgsl:`fn _gpu_casin(z: vec2f) -> vec2f {
|
|
897
|
+
let iz = vec2f(-z.y, z.x);
|
|
898
|
+
let s = _gpu_csqrt(vec2f(1.0 - z.x * z.x + z.y * z.y, -2.0 * z.x * z.y));
|
|
899
|
+
let l = _gpu_cln(iz + s);
|
|
900
|
+
return vec2f(l.y, -l.x);
|
|
901
|
+
}`},_gpu_cacos:{deps:["_gpu_casin"],glsl:`vec2 _gpu_cacos(vec2 z) {
|
|
902
|
+
vec2 s = _gpu_casin(z);
|
|
903
|
+
return vec2(1.5707963268 - s.x, -s.y);
|
|
904
|
+
}`,wgsl:`fn _gpu_cacos(z: vec2f) -> vec2f {
|
|
905
|
+
let s = _gpu_casin(z);
|
|
906
|
+
return vec2f(1.5707963268 - s.x, -s.y);
|
|
907
|
+
}`},_gpu_catan:{deps:["_gpu_cln"],glsl:`vec2 _gpu_catan(vec2 z) {
|
|
908
|
+
vec2 iz = vec2(-z.y, z.x);
|
|
909
|
+
vec2 a = _gpu_cln(vec2(1.0 - iz.x, -iz.y));
|
|
910
|
+
vec2 b = _gpu_cln(vec2(1.0 + iz.x, iz.y));
|
|
911
|
+
vec2 d = vec2(a.x - b.x, a.y - b.y);
|
|
912
|
+
return vec2(-0.5 * d.y, 0.5 * d.x);
|
|
913
|
+
}`,wgsl:`fn _gpu_catan(z: vec2f) -> vec2f {
|
|
914
|
+
let iz = vec2f(-z.y, z.x);
|
|
915
|
+
let a = _gpu_cln(vec2f(1.0 - iz.x, -iz.y));
|
|
916
|
+
let b = _gpu_cln(vec2f(1.0 + iz.x, iz.y));
|
|
917
|
+
let d = vec2f(a.x - b.x, a.y - b.y);
|
|
918
|
+
return vec2f(-0.5 * d.y, 0.5 * d.x);
|
|
919
|
+
}`},_gpu_casinh:{deps:["_gpu_csqrt","_gpu_cln"],glsl:`vec2 _gpu_casinh(vec2 z) {
|
|
920
|
+
vec2 z2 = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y);
|
|
921
|
+
vec2 s = _gpu_csqrt(vec2(1.0 + z2.x, z2.y));
|
|
922
|
+
return _gpu_cln(z + s);
|
|
923
|
+
}`,wgsl:`fn _gpu_casinh(z: vec2f) -> vec2f {
|
|
924
|
+
let z2 = vec2f(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y);
|
|
925
|
+
let s = _gpu_csqrt(vec2f(1.0 + z2.x, z2.y));
|
|
926
|
+
return _gpu_cln(z + s);
|
|
927
|
+
}`},_gpu_cacosh:{deps:["_gpu_csqrt","_gpu_cln"],glsl:`vec2 _gpu_cacosh(vec2 z) {
|
|
928
|
+
vec2 z2 = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y);
|
|
929
|
+
vec2 s = _gpu_csqrt(vec2(z2.x - 1.0, z2.y));
|
|
930
|
+
return _gpu_cln(z + s);
|
|
931
|
+
}`,wgsl:`fn _gpu_cacosh(z: vec2f) -> vec2f {
|
|
932
|
+
let z2 = vec2f(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y);
|
|
933
|
+
let s = _gpu_csqrt(vec2f(z2.x - 1.0, z2.y));
|
|
934
|
+
return _gpu_cln(z + s);
|
|
935
|
+
}`},_gpu_catanh:{deps:["_gpu_cln"],glsl:`vec2 _gpu_catanh(vec2 z) {
|
|
936
|
+
vec2 a = _gpu_cln(vec2(1.0 + z.x, z.y));
|
|
937
|
+
vec2 b = _gpu_cln(vec2(1.0 - z.x, -z.y));
|
|
938
|
+
return vec2(0.5 * (a.x - b.x), 0.5 * (a.y - b.y));
|
|
939
|
+
}`,wgsl:`fn _gpu_catanh(z: vec2f) -> vec2f {
|
|
940
|
+
let a = _gpu_cln(vec2f(1.0 + z.x, z.y));
|
|
941
|
+
let b = _gpu_cln(vec2f(1.0 - z.x, -z.y));
|
|
942
|
+
return vec2f(0.5 * (a.x - b.x), 0.5 * (a.y - b.y));
|
|
943
|
+
}`}};function rI(e,n){let t=new Set;for(let a of Object.keys(Ip))e.includes(a)&&t.add(a);if(t.size===0)return"";let i=new Set;function r(a){if(i.has(a))return;let u=Ip[a];if(u){for(let l of u.deps)r(l);i.add(a)}}for(let a of t)r(a);let o=n==="wgsl"?"wgsl":"glsl",s=[];for(let a of i)s.push(Ip[a][o]);return`
|
|
944
|
+
`+s.join(`
|
|
945
|
+
|
|
946
|
+
`)+`
|
|
947
|
+
`}var oI={Pi:"3.14159265359",ExponentialE:"2.71828182846",GoldenRatio:"1.61803398875",CatalanConstant:"0.91596559417",EulerGamma:"0.57721566490"};function El(e){let n=e.toString();return!n.includes(".")&&!n.includes("e")&&!n.includes("E")?`${n}.0`:n}var Yi=class{getOperators(){return Dx}getFunctions(){return{...q3,...this.getLanguageSpecificFunctions()}}getConstants(){return oI}createTarget(n={}){let t=this.getFunctions(),i=this.getConstants(),r=this.languageId==="wgsl"?"vec2f":"vec2";return{language:this.languageId,operators:o=>Dx[o],functions:o=>t[o],var:o=>o==="ImaginaryUnit"?`${r}(0.0, 1.0)`:o in i?i[o]:o,string:o=>JSON.stringify(o),number:El,complex:(o,s)=>`${r}(${El(o)}, ${El(s)})`,indent:0,ws:o=>o??"",preamble:"",declare:(o,s)=>{let a=s??(this.languageId==="wgsl"?"f32":"float");return this.languageId==="wgsl"?`var ${o}: ${a}`:`${a} ${o}`},block:o=>{if(o.length===0)return"";let s=o.length-1;return o[s]=`return ${o[s]}`,o.join(`;
|
|
948
|
+
`)},...n}}compile(n,t={}){let{functions:i,vars:r}=t,o=this.getFunctions(),s=this.getConstants(),a=this.languageId==="wgsl"?"vec2f":"vec2",u=this.createTarget({functions:p=>{if(i&&p in i){let d=i[p];if(typeof d=="string")return d;if(typeof d=="function")return d.name||p}return o[p]},var:p=>r&&p in r?r[p]:p==="ImaginaryUnit"?`${a}(0.0, 1.0)`:p in s?s[p]:p}),l=C.compile(n,u),c={target:this.languageId,success:!0,code:l},f="";return f+=rI(l,this.languageId),l.includes("_gpu_gamma")&&(f+=V3),l.includes("_gpu_erf")&&(f+=B3),l.includes("_gpu_heaviside")&&(f+=this.languageId==="wgsl"?z3:J3),l.includes("_gpu_sinc")&&(f+=this.languageId==="wgsl"?j3:U3),l.includes("_gpu_fresnel")&&(f+=this.languageId==="wgsl"?Z3:G3),l.includes("_gpu_fresnelC")&&(f+=this.languageId==="wgsl"?W3:H3),l.includes("_gpu_fresnelS")&&(f+=this.languageId==="wgsl"?Q3:Y3),l.includes("_gpu_besselJ")&&(f+=this.languageId==="wgsl"?K3:X3),l.includes("_fractal_")&&(f+=this.languageId==="wgsl"?nI:eI),(l.includes("_gpu_srgb_to")||l.includes("_gpu_oklab")||l.includes("_gpu_oklch")||l.includes("_gpu_color_mix")||l.includes("_gpu_apca"))&&(f+=this.languageId==="wgsl"?iI:tI),f&&(c.preamble=f),c}compileToSource(n,t={}){let i=this.createTarget();return C.compile(n,i)}};function Ox(e,n){return e.length===2?`vec2(${e.map(t=>n(t)).join(", ")})`:e.length===3?`vec3(${e.map(t=>n(t)).join(", ")})`:e.length===4?`vec4(${e.map(t=>n(t)).join(", ")})`:`float[${e.length}](${e.map(t=>n(t)).join(", ")})`}var sI={Inversesqrt:"inversesqrt",Mod:"mod",List:Ox,Matrix:(e,n)=>vl(e,n,t=>`vec${t}`,t=>`mat${t}`,t=>`float[${t}]`),Tuple:Ox},Fr=class extends Yi{languageId="glsl";getLanguageSpecificFunctions(){return sI}compileFunction(n,t,i,r){let o=this.createTarget(),s=C.compile(n,o),a=r.map(([u,l])=>`${l} ${u}`).join(", ");if(s.includes(`
|
|
949
|
+
`)){let u=s.split(`
|
|
950
|
+
`).map(l=>` ${l}`).join(`
|
|
951
|
+
`);return`${i} ${t}(${a}) {
|
|
952
|
+
${u};
|
|
953
|
+
}`}return`${i} ${t}(${a}) {
|
|
954
|
+
return ${s};
|
|
955
|
+
}`}compileShader(n){let{type:t,version:i="300 es",inputs:r=[],outputs:o=[],uniforms:s=[],body:a}=n,u=`#version ${i}
|
|
956
|
+
|
|
957
|
+
`;t==="fragment"&&(u+=`precision highp float;
|
|
958
|
+
|
|
959
|
+
`);let l=i.startsWith("300")||i.startsWith("3")?"in":t==="vertex"?"attribute":"varying";for(let f of r)u+=`${l} ${f.type} ${f.name};
|
|
960
|
+
`;r.length>0&&(u+=`
|
|
961
|
+
`);let c=i.startsWith("300")||i.startsWith("3")?"out":"varying";for(let f of o)u+=`${c} ${f.type} ${f.name};
|
|
962
|
+
`;o.length>0&&(u+=`
|
|
963
|
+
`);for(let f of s)u+=`uniform ${f.type} ${f.name};
|
|
964
|
+
`;s.length>0&&(u+=`
|
|
965
|
+
`),u+=`void main() {
|
|
966
|
+
`;for(let f of a){let p=this.compileToSource(f.expression);u+=` ${f.variable} = ${p};
|
|
967
|
+
`}return u+=`}
|
|
968
|
+
`,u}};function Lx(e,n){return e.length===2?`vec2f(${e.map(t=>n(t)).join(", ")})`:e.length===3?`vec3f(${e.map(t=>n(t)).join(", ")})`:e.length===4?`vec4f(${e.map(t=>n(t)).join(", ")})`:`array<f32, ${e.length}>(${e.map(t=>n(t)).join(", ")})`}var aI={Inversesqrt:"inverseSqrt",Mod:([e,n],t)=>{if(e===null||n===null)throw new Error("Mod: missing argument");return`(${t(e)} % ${t(n)})`},Hypot:([e,n],t)=>{if(e===null||n===null)throw new Error("Hypot: need two arguments");return`length(vec2f(${t(e)}, ${t(n)}))`},List:Lx,Matrix:(e,n)=>vl(e,n,t=>`vec${t}f`,t=>`mat${t}x${t}f`,t=>`array<f32, ${t}>`),Tuple:Lx},uI={float:"f32",int:"i32",uint:"u32",bool:"bool",vec2:"vec2f",vec3:"vec3f",vec4:"vec4f",mat2:"mat2x2f",mat3:"mat3x3f",mat4:"mat4x4f"};function Wo(e){return uI[e]??e}var Yo=class extends Yi{languageId="wgsl";getLanguageSpecificFunctions(){return aI}compileFunction(n,t,i,r){let o=this.createTarget(),s=C.compile(n,o),a=r.map(([u,l])=>`${u}: ${Wo(l)}`).join(", ");if(s.includes(`
|
|
969
|
+
`)){let u=s.split(`
|
|
970
|
+
`).map(l=>` ${l}`).join(`
|
|
971
|
+
`);return`fn ${t}(${a}) -> ${Wo(i)} {
|
|
972
|
+
${u};
|
|
973
|
+
}`}return`fn ${t}(${a}) -> ${Wo(i)} {
|
|
974
|
+
return ${s};
|
|
975
|
+
}`}compileShader(n){let{type:t,inputs:i=[],outputs:r=[],uniforms:o=[],workgroupSize:s,body:a}=n,u="";if(i.length>0){u+=`struct VertexInput {
|
|
976
|
+
`;for(let b of i){let y=b.builtin?`@builtin(${b.builtin})`:`@location(${b.location??0})`;u+=` ${y} ${b.name}: ${Wo(b.type)},
|
|
977
|
+
`}u+=`};
|
|
978
|
+
|
|
979
|
+
`}if(r.length>0){u+=`struct ${t==="vertex"?"VertexOutput":"FragmentOutput"} {
|
|
980
|
+
`;for(let y of r){let x=y.builtin?`@builtin(${y.builtin})`:`@location(${y.location??0})`;u+=` ${x} ${y.name}: ${Wo(y.type)},
|
|
981
|
+
`}u+=`};
|
|
982
|
+
|
|
983
|
+
`}for(let b of o){let y=b.group??0,x=b.binding??0;u+=`@group(${y}) @binding(${x}) var<uniform> ${b.name}: ${Wo(b.type)};
|
|
984
|
+
`}o.length>0&&(u+=`
|
|
985
|
+
`);let l=`@${t}`,c=t==="compute"&&s?`@workgroup_size(${s.join(", ")})
|
|
986
|
+
`:"",f=i.length>0,p=r.length>0,d=t==="vertex"?"VertexOutput":"FragmentOutput",g=f?"input: VertexInput":"",h=p?` -> ${d}`:"";u+=`${l}
|
|
987
|
+
${c}fn main(${g})${h} {
|
|
988
|
+
`,p&&(u+=` var output: ${d};
|
|
989
|
+
`);for(let b of a){let y=this.compileToSource(b.expression);u+=` ${b.variable} = ${y};
|
|
990
|
+
`}return p&&(u+=` return output;
|
|
991
|
+
`),u+=`}
|
|
992
|
+
`,u}};function D(e){return{kind:"interval",value:e}}function wp(e){return{lo:e,hi:e}}function Nn(e,n,t){let i=Math.ceil((e.lo-n)/t),r=n+i*t,o=1e-15;return r>=e.lo-o&&r<=e.hi+o}function Qo(e,n){if(e.kind==="empty")return n;if(n.kind==="empty")return e;if(e.kind==="singular"||n.kind==="singular")return{kind:"singular"};if(e.kind==="entire"||n.kind==="entire")return{kind:"entire"};let t=e.value,i=n.value,r=e.kind==="partial"?e.domainClipped:null,o=n.kind==="partial"?n.domainClipped:null,s={lo:Math.min(t.lo,i.lo),hi:Math.max(t.hi,i.hi)};if(r||o){let a=_l(r,o);return{kind:"partial",value:s,domainClipped:a}}return{kind:"interval",value:s}}function _l(e,n){return e==="both"||n==="both"?"both":e===null?n:n===null||e===n?e:"both"}function Mp(e){return e.lo===e.hi}function An(e){return e.lo<=0&&e.hi>=0}function kp(e){return e.lo>0}function la(e){return e.hi<0}function Cp(e){return e.lo>=0}function Ap(e){return e.hi<=0}function Rp(e){return e.hi-e.lo}function Pp(e){return(e.lo+e.hi)/2}function Dp(e){if(e.kind==="interval"||e.kind==="partial")return e.value}function $p(e){return"kind"in e?e.kind==="interval"||e.kind==="partial"?e.value:void 0:e}function B(...e){let n=[];for(let t of e)if("kind"in t){if(t.kind==="empty")return{kind:"empty"};if(t.kind==="entire")return{kind:"entire"};if(t.kind==="singular")return t;n.push(t.value)}else n.push(t);return n}function Op(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return D({lo:i.lo+r.lo,hi:i.hi+r.hi})}function ca(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return D({lo:i.lo-r.hi,hi:i.hi-r.lo})}function Lp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:-t.hi,hi:-t.lo})}function Fp(e,n){let t=[e.lo*n.lo,e.lo*n.hi,e.hi*n.lo,e.hi*n.hi];return{lo:Math.min(...t),hi:Math.max(...t)}}function fa(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return D(Fp(i,r))}function Rn(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return lI(i,r)}function lI(e,n){return n.lo>0||n.hi<0?D(Fp(e,{lo:1/n.hi,hi:1/n.lo})):n.lo<0&&n.hi>0?{kind:"singular"}:n.lo===0&&n.hi>0?e.lo>=0?{kind:"partial",value:{lo:e.lo/n.hi,hi:1/0},domainClipped:"hi"}:e.hi<=0?{kind:"partial",value:{lo:-1/0,hi:e.hi/n.hi},domainClipped:"lo"}:{kind:"entire"}:n.hi===0&&n.lo<0?e.lo>=0?{kind:"partial",value:{lo:-1/0,hi:e.lo/n.lo},domainClipped:"lo"}:e.hi<=0?{kind:"partial",value:{lo:e.hi/n.lo,hi:1/0},domainClipped:"hi"}:{kind:"entire"}:{kind:"empty"}}function qp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return cI(t)}function cI(e){return e.hi<0?{kind:"empty"}:e.lo>=0?D({lo:Math.sqrt(e.lo),hi:Math.sqrt(e.hi)}):{kind:"partial",value:{lo:0,hi:Math.sqrt(e.hi)},domainClipped:"lo"}}function Vp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.lo>=0?D({lo:t.lo*t.lo,hi:t.hi*t.hi}):t.hi<=0?D({lo:t.hi*t.hi,hi:t.lo*t.lo}):D({lo:0,hi:Math.max(t.lo*t.lo,t.hi*t.hi)})}function Fx(e,n){return n===0?{lo:1,hi:1}:n===1?e:n%2===0?e.lo>=0?{lo:Math.pow(e.lo,n),hi:Math.pow(e.hi,n)}:e.hi<=0?{lo:Math.pow(e.hi,n),hi:Math.pow(e.lo,n)}:{lo:0,hi:Math.max(Math.pow(e.lo,n),Math.pow(e.hi,n))}:{lo:Math.pow(e.lo,n),hi:Math.pow(e.hi,n)}}function Nl(e,n){let t=B(e);if(!Array.isArray(t))return t;let[i]=t;if(Number.isInteger(n)){if(n>=0)return D(Fx(i,n));{if(An(i))return{kind:"singular"};let r=Fx(i,-n);return D({lo:1/r.hi,hi:1/r.lo})}}else return la(i)?{kind:"empty"}:i.lo<0?{kind:"partial",value:n>0?{lo:0,hi:Math.pow(i.hi,n)}:{lo:Math.pow(i.hi,n),hi:1/0},domainClipped:"lo"}:n>0?D({lo:Math.pow(i.lo,n),hi:Math.pow(i.hi,n)}):i.lo===0?{kind:"partial",value:{lo:Math.pow(i.hi,n),hi:1/0},domainClipped:"hi"}:D({lo:Math.pow(i.hi,n),hi:Math.pow(i.lo,n)})}function Bp(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;if(r.lo===r.hi&&Number.isInteger(r.lo))return Nl(i,r.lo);if(i.hi<=0)return i.lo===-1&&i.hi===-1&&Math.floor(r.hi)>Math.floor(r.lo)?D({lo:-1,hi:1}):{kind:"empty"};if(i.lo<=0){let s={lo:Math.max(i.lo,Number.EPSILON),hi:i.hi},a=[Math.pow(s.lo,r.lo),Math.pow(s.lo,r.hi),Math.pow(s.hi,r.lo),Math.pow(s.hi,r.hi)];return{kind:"partial",value:{lo:Math.min(...a),hi:Math.max(...a)},domainClipped:"lo"}}let o=[Math.pow(i.lo,r.lo),Math.pow(i.lo,r.hi),Math.pow(i.hi,r.lo),Math.pow(i.hi,r.hi)];return D({lo:Math.min(...o),hi:Math.max(...o)})}function Jp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.exp(t.lo),hi:Math.exp(t.hi)})}function zp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.hi<=0?{kind:"empty"}:t.lo>0?D({lo:Math.log(t.lo),hi:Math.log(t.hi)}):{kind:"partial",value:{lo:-1/0,hi:Math.log(t.hi)},domainClipped:"lo"}}function Up(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.hi<=0?{kind:"empty"}:t.lo>0?D({lo:Math.log10(t.lo),hi:Math.log10(t.hi)}):{kind:"partial",value:{lo:-1/0,hi:Math.log10(t.hi)},domainClipped:"lo"}}function jp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.hi<=0?{kind:"empty"}:t.lo>0?D({lo:Math.log2(t.lo),hi:Math.log2(t.hi)}):{kind:"partial",value:{lo:-1/0,hi:Math.log2(t.hi)},domainClipped:"lo"}}function Gp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.lo>=0?D(t):t.hi<=0?D({lo:-t.hi,hi:-t.lo}):D({lo:0,hi:Math.max(-t.lo,t.hi)})}function Zp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=Math.floor(t.lo),r=Math.floor(t.hi);return i===r?D({lo:i,hi:r}):{kind:"singular",at:i+1,continuity:"right"}}function Hp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=Math.ceil(t.lo),r=Math.ceil(t.hi);return i===r?D({lo:i,hi:r}):{kind:"singular",at:i,continuity:"left"}}function Sl(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=Math.round(t.lo),r=Math.round(t.hi);return i===r?D({lo:i,hi:r}):{kind:"singular",at:i+.5,continuity:"right"}}function Wp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=Math.floor(t.lo),r=Math.floor(t.hi);return i===r?D({lo:t.lo-i,hi:t.hi-i}):{kind:"singular",at:i+1,continuity:"right"}}function Yp(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=Math.trunc(t.lo),r=Math.trunc(t.hi);if(i===r)return D({lo:i,hi:r});if(t.lo>=0)return{kind:"singular",at:i+1,continuity:"right"};let o=Math.ceil(t.lo);return o!==0?{kind:"singular",at:o,continuity:"left"}:{kind:"singular",at:1,continuity:"right"}}function Qp(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return D({lo:Math.min(i.lo,r.lo),hi:Math.min(i.hi,r.hi)})}function Xp(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;return D({lo:Math.max(i.lo,r.lo),hi:Math.max(i.hi,r.hi)})}function Kp(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;if(An(r))return{kind:"singular"};let o=Math.abs(r.lo===r.hi?r.lo:Math.max(Math.abs(r.lo),Math.abs(r.hi))),s=Math.floor(i.lo/o),a=Math.floor(i.hi/o);if(s!==a)return{kind:"singular",at:(s+1)*o,continuity:"right"};let u=i.lo-o*s,l=i.hi-o*s;return D({lo:Math.min(u,l),hi:Math.max(u,l)})}function em(e,n){return ca(e,fa(n,Sl(Rn(e,n))))}function nm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.lo>0?D({lo:1,hi:1}):t.hi<0?D({lo:0,hi:0}):t.lo===0&&t.hi===0?D({lo:.5,hi:.5}):{kind:"singular",at:0}}function tm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.lo>0?D({lo:1,hi:1}):t.hi<0?D({lo:-1,hi:-1}):t.lo===0&&t.hi===0?D({lo:0,hi:0}):{kind:"singular",at:0}}var qx=1.4616321449683622,fI=.8856031944108887;function im(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return pI(t)}function pI(e){if(e.hi>=0&&e.lo<=0)return{kind:"singular",at:0};if(e.lo<0){let n=Math.ceil(e.lo),t=Math.floor(e.hi);if(n<=t)return{kind:"singular",at:n};let i=De(e.lo),r=De(e.hi);return D({lo:Math.min(i,r),hi:Math.max(i,r)})}return e.lo>=qx?D({lo:De(e.lo),hi:De(e.hi)}):e.hi<=qx?D({lo:De(e.hi),hi:De(e.lo)}):D({lo:fI,hi:Math.max(De(e.lo),De(e.hi))})}function rm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return mI(t)}function mI(e){if(e.hi>=0&&e.lo<=0)return{kind:"singular",at:0};if(e.lo<0){let n=Math.ceil(e.lo),t=Math.floor(e.hi);if(n<=t)return{kind:"singular",at:n};let i=Wn(e.lo),r=Wn(e.hi);return D({lo:Math.min(i,r),hi:Math.max(i,r)})}return D({lo:Wn(e.lo),hi:Wn(e.hi)})}function om(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.lo<0)return{kind:"empty"};let i=ns(Math.round(t.lo)),r=ns(Math.round(t.hi));return!Number.isFinite(i)||!Number.isFinite(r)?D({lo:Math.min(i,r),hi:Math.max(i,r)}):D({lo:i,hi:r})}function sm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.lo<0)return{kind:"empty"};let i=or(Math.round(t.lo)),r=or(Math.round(t.hi));return!Number.isFinite(i)||!Number.isFinite(r)?D({lo:Math.min(i,r),hi:Math.max(i,r)}):D({lo:i,hi:r})}function Vx(e,n){let t=B(e);if(!Array.isArray(t))return t;let i=B(n);if(!Array.isArray(i))return i;let[r]=t,[o]=i,s=[Vt(Math.round(r.lo),Math.round(o.lo)),Vt(Math.round(r.lo),Math.round(o.hi)),Vt(Math.round(r.hi),Math.round(o.lo)),Vt(Math.round(r.hi),Math.round(o.hi))];return D({lo:Math.min(...s),hi:Math.max(...s)})}function Bx(e,n){let t=B(e);if(!Array.isArray(t))return t;let i=B(n);if(!Array.isArray(i))return i;let[r]=t,[o]=i,s=[Pe(Math.round(r.lo),Math.round(o.lo)),Pe(Math.round(r.lo),Math.round(o.hi)),Pe(Math.round(r.hi),Math.round(o.lo)),Pe(Math.round(r.hi),Math.round(o.hi))];return D({lo:Math.min(...s),hi:Math.max(...s)})}function Jx(e,n){let t=B(e);if(!Array.isArray(t))return t;let i=B(n);if(!Array.isArray(i))return i;let[r]=t,[o]=i,s=[bt(Math.round(r.lo),Math.round(o.lo)),bt(Math.round(r.lo),Math.round(o.hi)),bt(Math.round(r.hi),Math.round(o.lo)),bt(Math.round(r.hi),Math.round(o.hi))];return D({lo:Math.min(...s),hi:Math.max(...s)})}function zx(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:ts(t.lo),hi:ts(t.hi)})}function Ux(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:ai(t.lo),hi:ai(t.hi)})}function jx(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:xs(t.hi),hi:xs(t.lo)})}function Gx(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.pow(2,t.lo),hi:Math.pow(2,t.hi)})}function Zx(e,n){let t=B(e);if(!Array.isArray(t))return t;let i=B(n);if(!Array.isArray(i))return i;let[r]=t,[o]=i,s=[Math.hypot(r.lo,o.lo),Math.hypot(r.lo,o.hi),Math.hypot(r.hi,o.lo),Math.hypot(r.hi,o.hi)],a=Math.min(...s);return r.lo<=0&&r.hi>=0&&(a=Math.min(a,Math.abs(o.lo),Math.abs(o.hi))),o.lo<=0&&o.hi>=0&&(a=Math.min(a,Math.abs(r.lo),Math.abs(r.hi))),r.lo<=0&&r.hi>=0&&o.lo<=0&&o.hi>=0&&(a=0),D({lo:a,hi:Math.max(...s)})}var Zt=2*Math.PI,nn=Math.PI,Qi=Math.PI/2,Hx=3*Math.PI/2;function um(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=Zt)return D({lo:-1,hi:1});let i=Math.sin(t.lo),r=Math.sin(t.hi),o=Math.min(i,r),s=Math.max(i,r);return Nn(t,Qi,Zt)&&(s=1),Nn(t,Hx,Zt)&&(o=-1),D({lo:o,hi:s})}function lm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=Zt)return D({lo:-1,hi:1});let i=Math.cos(t.lo),r=Math.cos(t.hi),o=Math.min(i,r),s=Math.max(i,r);return Nn(t,0,Zt)&&(s=1),Nn(t,nn,Zt)&&(o=-1),D({lo:o,hi:s})}function cm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=nn)return{kind:"singular"};if(Nn(t,Qi,nn)){let o=Math.ceil((t.lo-Qi)/nn);return{kind:"singular",at:Qi+o*nn}}let i=Math.tan(t.lo),r=Math.tan(t.hi);return i>1e10&&r<-1e10||i<-1e10&&r>1e10?{kind:"singular"}:D({lo:i,hi:r})}function fm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=nn)return{kind:"singular"};if(Nn(t,0,nn))return{kind:"singular",at:Math.ceil(t.lo/nn)*nn};let i=1/Math.tan(t.lo),r=1/Math.tan(t.hi);return D({lo:Math.min(i,r),hi:Math.max(i,r)})}function pm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=nn)return{kind:"singular"};if(Nn(t,Qi,nn)){let a=Math.ceil((t.lo-Qi)/nn);return{kind:"singular",at:Qi+a*nn}}let i=1/Math.cos(t.lo),r=1/Math.cos(t.hi),o=Math.min(i,r),s=Math.max(i,r);return Nn(t,0,Zt)&&(o=Math.min(o,1),s=Math.max(s,1)),Nn(t,nn,Zt)&&(o=Math.min(o,-1),s=Math.max(s,-1)),D({lo:o,hi:s})}function mm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.hi-t.lo>=nn)return{kind:"singular"};if(Nn(t,0,nn))return{kind:"singular",at:Math.ceil(t.lo/nn)*nn};let i=1/Math.sin(t.lo),r=1/Math.sin(t.hi),o=Math.min(i,r),s=Math.max(i,r);return Nn(t,Qi,Zt)&&(o=Math.min(o,1),s=Math.max(s,1)),Nn(t,Hx,Zt)&&(o=Math.min(o,-1),s=Math.max(s,-1)),D({lo:o,hi:s})}function Tl(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.lo>1||t.hi<-1)return{kind:"empty"};if(t.lo<-1||t.hi>1){let i=Math.max(t.lo,-1),r=Math.min(t.hi,1);return{kind:"partial",value:{lo:Math.asin(i),hi:Math.asin(r)},domainClipped:t.lo<-1&&t.hi>1?"both":t.lo<-1?"lo":"hi"}}return D({lo:Math.asin(t.lo),hi:Math.asin(t.hi)})}function Il(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.lo>1||t.hi<-1)return{kind:"empty"};if(t.lo<-1||t.hi>1){let i=Math.max(t.lo,-1),r=Math.min(t.hi,1);return{kind:"partial",value:{lo:Math.acos(r),hi:Math.acos(i)},domainClipped:t.lo<-1&&t.hi>1?"both":t.lo<-1?"lo":"hi"}}return D({lo:Math.acos(t.hi),hi:Math.acos(t.lo)})}function wl(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.atan(t.lo),hi:Math.atan(t.hi)})}function dm(e,n){let t=B(e,n);if(!Array.isArray(t))return t;let[i,r]=t;if(i.lo===i.hi&&r.lo===r.hi){let s=Math.atan2(i.lo,r.lo);return D({lo:s,hi:s})}let o=[];return o.push(Math.atan2(i.lo,r.lo)),o.push(Math.atan2(i.lo,r.hi)),o.push(Math.atan2(i.hi,r.lo)),o.push(Math.atan2(i.hi,r.hi)),r.lo<0&&i.lo<0&&i.hi>0?D({lo:-nn,hi:nn}):D({lo:Math.min(...o),hi:Math.max(...o)})}function pa(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.sinh(t.lo),hi:Math.sinh(t.hi)})}function ma(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.lo>=0?D({lo:Math.cosh(t.lo),hi:Math.cosh(t.hi)}):t.hi<=0?D({lo:Math.cosh(t.hi),hi:Math.cosh(t.lo)}):D({lo:1,hi:Math.max(Math.cosh(t.lo),Math.cosh(t.hi))})}function gm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.tanh(t.lo),hi:Math.tanh(t.hi)})}function Ml(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return D({lo:Math.asinh(t.lo),hi:Math.asinh(t.hi)})}function kl(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return t.hi<1?{kind:"empty"}:t.lo<1?{kind:"partial",value:{lo:0,hi:Math.acosh(t.hi)},domainClipped:"lo"}:D({lo:Math.acosh(t.lo),hi:Math.acosh(t.hi)})}function Cl(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;if(t.lo>=1||t.hi<=-1)return{kind:"empty"};if(t.lo<=-1||t.hi>=1){let i=Math.max(t.lo,-1+Number.EPSILON),r=Math.min(t.hi,1-Number.EPSILON);return{kind:"partial",value:{lo:Math.atanh(i),hi:Math.atanh(r)},domainClipped:t.lo<=-1&&t.hi>=1?"both":t.lo<=-1?"lo":"hi"}}return D({lo:Math.atanh(t.lo),hi:Math.atanh(t.hi)})}function hm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:wl(Rn(D({lo:1,hi:1}),D(t)))}function bm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Tl(Rn(D({lo:1,hi:1}),D(t)))}function ym(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Il(Rn(D({lo:1,hi:1}),D(t)))}function xm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Rn(ma(t),pa(t))}function Em(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Rn(D({lo:1,hi:1}),pa(t))}function vm(e){return Rn(D({lo:1,hi:1}),ma(e))}function _m(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Cl(Rn(D({lo:1,hi:1}),D(t)))}function Nm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:Ml(Rn(D({lo:1,hi:1}),D(t)))}function Sm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n;return An(t)?{kind:"singular",at:0}:kl(Rn(D({lo:1,hi:1}),D(t)))}var am=[4.49341,7.72525,10.90412,14.06619,17.22076,20.3713,23.51945,26.66605,29.8116,32.95639],dI=-.21724;function Tm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=u=>u===0?1:Math.sin(u)/u,r=i(t.lo),o=r,s=u=>{u<r&&(r=u),u>o&&(o=u)};s(i(t.hi)),t.lo<=0&&t.hi>=0&&s(1);let a=am[am.length-1];for(let u of am)u>=t.lo&&u<=t.hi&&s(i(u)),-u>=t.lo&&-u<=t.hi&&s(i(-u));return(Math.abs(t.lo)>a||Math.abs(t.hi)>a)&&s(dI),D({lo:r,hi:o})}var Wx=[],Yx=[];for(let e=1;e<=20;e++)Wx.push(Math.sqrt(2*e)),Yx.push(Math.sqrt(2*e-1));function Im(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=ui(t.lo),r=i,o=s=>{s<i&&(i=s),s>r&&(r=s)};o(ui(t.hi)),t.lo<=0&&t.hi>=0&&o(0);for(let s of Wx)s>=t.lo&&s<=t.hi&&o(ui(s)),-s>=t.lo&&-s<=t.hi&&o(ui(-s));return D({lo:i,hi:r})}function wm(e){let n=B(e);if(!Array.isArray(n))return n;let[t]=n,i=li(t.lo),r=i,o=s=>{s<i&&(i=s),s>r&&(r=s)};o(li(t.hi)),t.lo<=0&&t.hi>=0&&o(0);for(let s of Yx)s>=t.lo&&s<=t.hi&&o(li(s)),-s>=t.lo&&-s<=t.hi&&o(li(-s));return D({lo:i,hi:r})}function Xi(e){return"kind"in e?e:{kind:"interval",value:e}}function Mm(e,n){let t=B(e,n);if(!Array.isArray(t))return"maybe";let[i,r]=t;return i.hi<r.lo?"true":i.lo>=r.hi?"false":"maybe"}function km(e,n){let t=B(e,n);if(!Array.isArray(t))return"maybe";let[i,r]=t;return i.hi<=r.lo?"true":i.lo>r.hi?"false":"maybe"}function Cm(e,n){let t=B(e,n);if(!Array.isArray(t))return"maybe";let[i,r]=t;return i.lo>r.hi?"true":i.hi<=r.lo?"false":"maybe"}function Am(e,n){let t=B(e,n);if(!Array.isArray(t))return"maybe";let[i,r]=t;return i.lo>=r.hi?"true":i.hi<r.lo?"false":"maybe"}function Al(e,n){let t=B(e,n);if(!Array.isArray(t))return"maybe";let[i,r]=t;return i.lo===i.hi&&r.lo===r.hi&&i.lo===r.lo?"true":i.hi<r.lo||r.hi<i.lo?"false":"maybe"}function Rm(e,n){let t=Al(e,n);return t==="true"?"false":t==="false"?"true":"maybe"}function Pm(e,n){return e==="false"||n==="false"?"false":e==="true"&&n==="true"?"true":"maybe"}function Dm(e,n){return e==="true"||n==="true"?"true":e==="false"&&n==="false"?"false":"maybe"}function $m(e){return e==="true"?"false":e==="false"?"true":"maybe"}function Om(e,n,t,i){if(e==="true"||e==="false"||e==="maybe"){let f=e,p=n,d=t;switch(f){case"true":return Xi(p());case"false":return Xi(d());case"maybe":return Qo(Xi(p()),Xi(d()))}}let r=e,o=n,s=t,a=i,u=B(r);if(!Array.isArray(u))return u;let[l]=u;switch(o(l)){case"true":return Xi(s(l));case"false":return Xi(a(l));case"maybe":let f=Xi(s(l)),p=Xi(a(l));return Qo(f,p)}}function Lm(e,n,t){let i=B(e,n,t);if(!Array.isArray(i))return i;let[r,o,s]=i,a=Math.max(r.lo,o.lo),u=Math.min(r.hi,s.hi);return a>u?{kind:"empty"}:{kind:"interval",value:{lo:a,hi:u}}}var Qx={ok:D,point:wp,containsExtremum:Nn,unionResults:Qo,mergeDomainClip:_l,isPoint:Mp,containsZero:An,isPositive:kp,isNegative:la,isNonNegative:Cp,isNonPositive:Ap,width:Rp,midpoint:Pp,getValue:Dp,unwrap:$p,unwrapOrPropagate:B,add:Op,sub:ca,mul:fa,div:Rn,negate:Lp,sqrt:qp,square:Vp,pow:Nl,powInterval:Bp,exp:Jp,ln:zp,log10:Up,log2:jp,abs:Gp,floor:Zp,ceil:Hp,round:Sl,fract:Wp,trunc:Yp,min:Qp,max:Xp,mod:Kp,remainder:em,heaviside:nm,sign:tm,gamma:im,gammaln:rm,factorial:om,factorial2:sm,binomial:Vx,gcd:Bx,lcm:Jx,chop:zx,erf:Ux,erfc:jx,exp2:Gx,hypot:Zx,sin:um,cos:lm,tan:cm,cot:fm,sec:pm,csc:mm,asin:Tl,acos:Il,atan:wl,atan2:dm,sinh:pa,cosh:ma,tanh:gm,asinh:Ml,acosh:kl,atanh:Cl,acot:hm,acsc:bm,asec:ym,coth:xm,csch:Em,sech:vm,acoth:_m,acsch:Nm,asech:Sm,sinc:Tm,fresnelS:Im,fresnelC:wm,less:Mm,lessEqual:km,greater:Cm,greaterEqual:Am,equal:Al,notEqual:Rm,and:Pm,or:Dm,not:$m,piecewise:Om,clamp:Lm};var gI={Add:["_IA.add",20],Negate:["_IA.negate",20],Subtract:["_IA.sub",20],Multiply:["_IA.mul",20],Divide:["_IA.div",20],Equal:["_IA.equal",20],NotEqual:["_IA.notEqual",20],LessEqual:["_IA.lessEqual",20],GreaterEqual:["_IA.greaterEqual",20],Less:["_IA.less",20],Greater:["_IA.greater",20],And:["_IA.and",20],Or:["_IA.or",20],Not:["_IA.not",20]},Fm={Add:(e,n)=>{if(e.length===0)return"_IA.point(0)";if(e.length===1)return n(e[0]);let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.add(${t}, ${n(e[i])})`;return t},Subtract:(e,n)=>{if(e.length===0)return"_IA.point(0)";if(e.length===1)return`_IA.negate(${n(e[0])})`;if(e.length===2)return`_IA.sub(${n(e[0])}, ${n(e[1])})`;let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.sub(${t}, ${n(e[i])})`;return t},Multiply:(e,n)=>{if(e.length===0)return"_IA.point(1)";if(e.length===1)return n(e[0]);let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.mul(${t}, ${n(e[i])})`;return t},Divide:(e,n)=>{if(e.length===0)return"_IA.point(1)";if(e.length===1)return n(e[0]);if(e.length===2)return`_IA.div(${n(e[0])}, ${n(e[1])})`;let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.div(${t}, ${n(e[i])})`;return t},Negate:(e,n)=>`_IA.negate(${n(e[0])})`,Abs:(e,n)=>`_IA.abs(${n(e[0])})`,Ceil:(e,n)=>`_IA.ceil(${n(e[0])})`,Exp:(e,n)=>`_IA.exp(${n(e[0])})`,Floor:(e,n)=>`_IA.floor(${n(e[0])})`,Ln:(e,n)=>`_IA.ln(${n(e[0])})`,Log:(e,n)=>e.length===1?`_IA.log10(${n(e[0])})`:`_IA.div(_IA.ln(${n(e[0])}), _IA.ln(${n(e[1])}))`,Lb:(e,n)=>`_IA.log2(${n(e[0])})`,Max:(e,n)=>{if(e.length===0)return"_IA.point(-Infinity)";if(e.length===1)return n(e[0]);let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.max(${t}, ${n(e[i])})`;return t},Min:(e,n)=>{if(e.length===0)return"_IA.point(Infinity)";if(e.length===1)return n(e[0]);let t=n(e[0]);for(let i=1;i<e.length;i++)t=`_IA.min(${t}, ${n(e[i])})`;return t},Power:(e,n)=>{let t=e[0],i=e[1];if(t===null)throw new Error("Power: no argument");if(_(t,"ExponentialE"))return`_IA.exp(${n(i)})`;if(E(i)&&i.im===0){let r=i.re;return r===.5?`_IA.sqrt(${n(t)})`:r===2?`_IA.square(${n(t)})`:`_IA.pow(${n(t)}, ${r})`}return`_IA.powInterval(${n(t)}, ${n(i)})`},Root:(e,n)=>{let[t,i]=e;if(t===null)throw new Error("Root: no argument");return i===null?`_IA.sqrt(${n(t)})`:i?.re===2?`_IA.sqrt(${n(t)})`:E(i)&&i.im===0?`_IA.pow(${n(t)}, ${1/i.re})`:`_IA.powInterval(${n(t)}, _IA.div(_IA.point(1), ${n(i)}))`},Round:(e,n)=>`_IA.round(${n(e[0])})`,Heaviside:(e,n)=>`_IA.heaviside(${n(e[0])})`,Sign:(e,n)=>`_IA.sign(${n(e[0])})`,Sqrt:(e,n)=>`_IA.sqrt(${n(e[0])})`,Square:(e,n)=>`_IA.square(${n(e[0])})`,Sin:(e,n)=>`_IA.sin(${n(e[0])})`,Cos:(e,n)=>`_IA.cos(${n(e[0])})`,Tan:(e,n)=>`_IA.tan(${n(e[0])})`,Cot:(e,n)=>`_IA.cot(${n(e[0])})`,Sec:(e,n)=>`_IA.sec(${n(e[0])})`,Csc:(e,n)=>`_IA.csc(${n(e[0])})`,Arcsin:(e,n)=>`_IA.asin(${n(e[0])})`,Arccos:(e,n)=>`_IA.acos(${n(e[0])})`,Arctan:(e,n)=>`_IA.atan(${n(e[0])})`,Arccot:(e,n)=>`_IA.acot(${n(e[0])})`,Arccsc:(e,n)=>`_IA.acsc(${n(e[0])})`,Arcsec:(e,n)=>`_IA.asec(${n(e[0])})`,Sinh:(e,n)=>`_IA.sinh(${n(e[0])})`,Cosh:(e,n)=>`_IA.cosh(${n(e[0])})`,Tanh:(e,n)=>`_IA.tanh(${n(e[0])})`,Coth:(e,n)=>`_IA.coth(${n(e[0])})`,Csch:(e,n)=>`_IA.csch(${n(e[0])})`,Sech:(e,n)=>`_IA.sech(${n(e[0])})`,Arsinh:(e,n)=>`_IA.asinh(${n(e[0])})`,Arcosh:(e,n)=>`_IA.acosh(${n(e[0])})`,Artanh:(e,n)=>`_IA.atanh(${n(e[0])})`,Arcoth:(e,n)=>`_IA.acoth(${n(e[0])})`,Arcsch:(e,n)=>`_IA.acsch(${n(e[0])})`,Arsech:(e,n)=>`_IA.asech(${n(e[0])})`,Sinc:(e,n)=>`_IA.sinc(${n(e[0])})`,FresnelS:(e,n)=>`_IA.fresnelS(${n(e[0])})`,FresnelC:(e,n)=>`_IA.fresnelC(${n(e[0])})`,Factorial:(e,n)=>`_IA.factorial(${n(e[0])})`,Factorial2:(e,n)=>`_IA.factorial2(${n(e[0])})`,Gamma:(e,n)=>`_IA.gamma(${n(e[0])})`,GammaLn:(e,n)=>`_IA.gammaln(${n(e[0])})`,Binomial:(e,n)=>`_IA.binomial(${n(e[0])}, ${n(e[1])})`,GCD:(e,n)=>`_IA.gcd(${n(e[0])}, ${n(e[1])})`,LCM:(e,n)=>`_IA.lcm(${n(e[0])}, ${n(e[1])})`,Chop:(e,n)=>`_IA.chop(${n(e[0])})`,Erf:(e,n)=>`_IA.erf(${n(e[0])})`,Erfc:(e,n)=>`_IA.erfc(${n(e[0])})`,Exp2:(e,n)=>`_IA.exp2(${n(e[0])})`,Arctan2:(e,n)=>`_IA.atan2(${n(e[0])}, ${n(e[1])})`,Hypot:(e,n)=>`_IA.hypot(${n(e[0])}, ${n(e[1])})`,Fract:(e,n)=>`_IA.fract(${n(e[0])})`,Truncate:(e,n)=>`_IA.trunc(${n(e[0])})`,Mod:(e,n)=>`_IA.mod(${n(e[0])}, ${n(e[1])})`,Remainder:(e,n)=>`_IA.remainder(${n(e[0])}, ${n(e[1])})`,Sum:(e,n,t)=>Kx("Sum",e,n,t),Product:(e,n,t)=>Kx("Product",e,n,t),If:(e,n)=>{if(e.length!==3)throw new Error("If: wrong number of arguments");return`_IA.piecewise(
|
|
993
|
+
${n(e[0])},
|
|
994
|
+
() => ${n(e[1])},
|
|
995
|
+
() => ${n(e[2])}
|
|
996
|
+
)`},Which:(e,n)=>{if(e.length<2||e.length%2!==0)throw new Error("Which: expected even number of arguments (condition/value pairs)");let t=i=>{if(i>=e.length)return"{ kind: 'empty' }";let r=e[i],o=e[i+1];return _(r,"True")?n(o):`_IA.piecewise(
|
|
997
|
+
${n(r)},
|
|
998
|
+
() => ${n(o)},
|
|
999
|
+
() => ${t(i+2)}
|
|
1000
|
+
)`};return t(0)},Equal:(e,n)=>`_IA.equal(${n(e[0])}, ${n(e[1])})`,NotEqual:(e,n)=>`_IA.notEqual(${n(e[0])}, ${n(e[1])})`,LessEqual:(e,n)=>`_IA.lessEqual(${n(e[0])}, ${n(e[1])})`,GreaterEqual:(e,n)=>`_IA.greaterEqual(${n(e[0])}, ${n(e[1])})`,Less:(e,n)=>`_IA.less(${n(e[0])}, ${n(e[1])})`,Greater:(e,n)=>`_IA.greater(${n(e[0])}, ${n(e[1])})`,And:(e,n)=>`_IA.and(${n(e[0])}, ${n(e[1])})`,Or:(e,n)=>`_IA.or(${n(e[0])}, ${n(e[1])})`,Not:(e,n)=>`_IA.not(${n(e[0])})`},hI=100;function bI(e){e.operator;let n=e,t=_(n.op1)?n.op1.symbol:"_",i=n.op2,r=n.op3,o=i.re,s=r.re;return{index:t,lowerExpr:i,upperExpr:r,lowerNum:!isNaN(o)&&Number.isFinite(o)?Math.floor(o):void 0,upperNum:!isNaN(s)&&Number.isFinite(s)?Math.floor(s):void 0}}function Xx(e,n,t){return n!==void 0?String(n):`Math.floor((${C.compile(e,t)}).hi)`}function Kx(e,n,t,i){if(!n[0])throw new Error(`${e}: no body`);if(!n[1])throw new Error(`${e}: no indexing set`);let{index:r,lowerExpr:o,upperExpr:s,lowerNum:a,upperNum:u}=bI(n[1]),l=e==="Sum",c=l?"_IA.add":"_IA.mul",f=l?"_IA.point(0)":"_IA.point(1)",p=a!==void 0&&u!==void 0;if(p&&a>u)return f;if(p&&u-a+1<=hI){let x=[];for(let T=a;T<=u;T++){let I={...i,var:M=>M===r?`_IA.point(${T})`:i.var(M)};x.push(C.compile(n[0],I))}let N=x[x.length-1];for(let T=x.length-2;T>=0;T--)N=`${c}(${x[T]}, ${N})`;return N}let d=Xx(o,a,i),g=Xx(s,u,i),h=C.tempVar(),b=C.compile(n[0],{...i,var:y=>y===r?`_IA.point(${r})`:i.var(y)});return`(() => { let ${h} = ${f}; const _upper = ${g}; for (let ${r} = ${d}; ${r} <= _upper; ${r}++) { ${h} = ${c}(${h}, ${b}); } return ${h}; })()`}var qm=class extends Function{IA=Qx;constructor(n,t=""){return super("_IA","_",t?`${t};return ${n}`:`return ${n}`),new Proxy(this,{apply:(i,r,o)=>{try{let s=o.map(nE);return super.apply(r,[this.IA,...s])}catch{return{kind:"entire"}}},get:(i,r)=>r==="toString"?()=>n:r==="isCompiled"?!0:i[r]})}};function eE(e){return e!==null&&typeof e=="object"}function yI(e){return eE(e)&&"lo"in e&&"hi"in e}function nE(e){if(e==null||yI(e))return e;if(eE(e)){let n={};for(let[t,i]of Object.entries(e))n[t]=nE(i);return n}return typeof e=="number"?{lo:e,hi:e}:e}var qr=class{getOperators(){return gI}getFunctions(){return Fm}createTarget(n={}){return{language:"interval-javascript",operators:()=>{},functions:t=>Fm[t],var:t=>({Pi:"_IA.point(Math.PI)",ExponentialE:"_IA.point(Math.E)",NaN:"{ lo: NaN, hi: NaN }",ImaginaryUnit:"{ lo: NaN, hi: NaN }",Half:"_IA.point(0.5)",MachineEpsilon:"_IA.point(Number.EPSILON)",GoldenRatio:"_IA.point((1 + Math.sqrt(5)) / 2)",CatalanConstant:"_IA.point(0.91596559417721901)",EulerGamma:"_IA.point(0.57721566490153286)"})[t],string:t=>JSON.stringify(t),number:t=>`_IA.point(${t})`,indent:0,ws:t=>t??"",preamble:"",...n}}compile(n,t={}){let{functions:i,vars:r,preamble:o}=t,s=n.unknowns,a={},u="";if(i)for(let[c,f]of Object.entries(i))typeof f=="function"?(u+=`const ${c} = ${f.toString()};
|
|
1001
|
+
`,a[c]=c):typeof f=="string"&&(a[c]=f);let l=this.createTarget({functions:c=>a?.[c]?a[c]:Fm[c],var:c=>{if(r&&c in r)return r[c];let f={Pi:"_IA.point(Math.PI)",ExponentialE:"_IA.point(Math.E)",NaN:"{ lo: NaN, hi: NaN }",ImaginaryUnit:"{ lo: NaN, hi: NaN }",Half:"_IA.point(0.5)",MachineEpsilon:"_IA.point(Number.EPSILON)",GoldenRatio:"_IA.point((1 + Math.sqrt(5)) / 2)",CatalanConstant:"_IA.point(0.91596559417721901)",EulerGamma:"_IA.point(0.57721566490153286)"};if(c in f)return f[c];if(s.includes(c))return`_.${c}`},preamble:(o??"")+u});return xI(n,l)}};function xI(e,n){let t;try{t=C.compile(e,n)}catch{return{target:"interval-js",success:!1,code:""}}let i=new qm(t,n.preamble);return{target:"interval-js",success:!0,code:t,calling:"expression",run:i}}var Rl=class{_targets=new Map;register(n,t){My(n),Cy(t),this._targets.set(n,t)}get(n){return this._targets.get(n)}list(){return[...this._targets.keys()]}unregister(n){this._targets.delete(n)}registerDefaults(){this.register("javascript",new Lr),this.register("glsl",new Fr),this.register("wgsl",new Yo),this.register("interval-js",new qr)}};var Pl=class{_listeners=new Array(300);_pending=!1;_version=0;listen(n){for(let i of this._listeners)if(i.deref()===n)return()=>this._unsubscribe(n);let t=new WeakRef(n);return this._listeners.push(t),()=>this._unsubscribe(n)}_unsubscribe(n){this._listeners=this._listeners.filter(t=>{let i=t.deref();return i!==void 0&&i!==n})}notify(){if(this._pending)return;this._pending=!0;let n=this._version+1;queueMicrotask(()=>{if(n!==this._version+1){this._pending=!1;return}this.notifyNow()})}notifyNow(){this._version++,this._listeners=this._listeners.filter(n=>{let t=n.deref();try{t?.onConfigurationChange?.()}catch(i){console.error("Listener error:",i)}return t!==void 0}),this._pending=!1}};var Dl=class{_generation=0;_tracker=new Pl;get generation(){return this._generation}set generation(n){this._generation=n}reset(n){this._generation+=1,n.refreshNumericConstants(),n.resetCommonSymbols(),n.purgeCaches(),this._tracker.notifyNow()}listen(n){return this._tracker.listen(n)}};var Sn=class extends de{_kind="number";_value;_hash;constructor(n,t,i){super(n,i?.metadata),t instanceof Ee||typeof t=="number"?this._value=t:this._value=n._numericValue(t)}get hash(){return this._hash??=rt(this._value.toString()),this._hash}get json(){let n=this._value;return typeof n=="number"?Number.isNaN(n)?"NaN":Number.isFinite(n)?n:n>0?"PositiveInfinity":"NegativeInfinity":n.toJSON()}get operator(){if(typeof this._value=="number")return Number.isNaN(this._value)?"NaN":Number.isFinite(this._value)?Number.isInteger(this._value)?"Integer":"Real":this._value>0?"PositiveInfinity":"NegativeInfinity";if(this._value.isNaN)return"NaN";if(this._value.isPositiveInfinity)return"PositiveInfinity";if(this._value.isNegativeInfinity)return"NegativeInfinity";if(this._value.im!==0)return"Complex";let n=this._value.type;return n==="integer"||n==="finite_integer"?"Integer":n==="rational"||n==="finite_rational"?"Rational":n==="real"||n==="finite_real"||n==="imaginary"||n==="finite_complex"||n==="complex"?"Real":n==="non_finite_number"?"Infinity":"Number"}get isPure(){return!0}get isCanonical(){return!0}set isCanonical(n){}get complexity(){return 1}valueOf(){return typeof this._value=="number"?this._value:this._value.N().valueOf()}get numericValue(){return this._value}get isNumberLiteral(){return!0}get re(){return typeof this._value=="number"?this._value:this._value.re}get im(){return typeof this._value=="number"?0:this._value.im}get bignumRe(){if(typeof this._value!="number")return this._value.bignumRe}get bignumIm(){return typeof this._value=="number"?this.engine._BIGNUM_ZERO:this.engine.bignum(this._value.im)}neg(){let n=this._value;return n===0?this:typeof n=="number"?this.engine.number(-n):this.engine.number(n.neg())}inv(){return typeof this._value=="number"?Math.abs(this._value)===1?this:Number.isInteger(this._value)?this.engine.number(this.engine._numericValue({rational:[1,this._value]})):this.engine.number(1/this._value):Math.abs(this.re)===1&&this.im===0?this:this.engine.number(this._value.inv())}abs(){return this.isPositive?this:typeof this._value=="number"?this.engine.number(-this._value):this.engine.number(this._value.abs())}add(n){let t=this.engine;return this.isSame(0)?t.box(n):typeof n=="number"?n===0?this:typeof this._value=="number"?t.number(this._value+n):t.number(this._value.add(n)):E(n)?typeof this._value=="number"?typeof n.numericValue=="number"?t.number(this._value+n.numericValue):t.number(n.numericValue.add(this._value)):t.number(this._value.add(n.numericValue)):fe(this,n.canonical)}mul(n){if(this.isSame(1))return this.engine.box(n);if(this.isSame(-1))return this.engine.box(n).neg();let t=this.engine;return typeof n=="number"?n===1?this:n===0||this.isSame(0)?this.engine.Zero:n===-1?this.neg():t.number(typeof this._value=="number"?this._value*n:this._value.mul(n)):typeof this._value=="number"&&typeof n=="number"?t.number(this._value*n):n instanceof Ee?this.isSame(1)?t.number(n):this.isSame(-1)?t.number(n.neg()):t.number(n.mul(this._value)):E(n)?t.number(t._numericValue(this._value).mul(n.numericValue)):ke(this,n)}div(n){return Eo(this,n)}pow(n){return We(this,n,{numericApproximation:!1})}root(n){if(typeof n=="number"){if(n===0)return this.engine.NaN;if(n===1)return this;if(n===-1)return this.inv();if(n===2)return this.sqrt();if(this.isNegative){if(n%2===1)return this.neg().root(n).neg();if(n%2===0)return this.neg().root(n)}}else{if(n=n.canonical,n.isSame(0))return this.engine.NaN;if(n.isSame(1))return this;if(n.isSame(-1))return this.inv();if(n.isSame(2))return this.sqrt();if(this.isNegative){if(n.isOdd)return this.neg().root(n).neg();if(n.isEven)return this.neg().root(n)}}let t=typeof n=="number"?n:n.re;if(Number.isInteger(t))if(typeof this._value=="number"){let i=this._value**(1/t);if(Number.isInteger(i))return this.engine.number(i)}else{let i=this._value.root(t);if(L(i.type,"integer"))return this.engine.number(i)}return this.engine._fn("Root",[this,this.engine.box(n)])}sqrt(){return typeof this._value=="number"?this._value===0||this._value===1?this:this._value===-1?this.engine.I:this._value>0&&Number.isInteger(this._value)&&this._value<re?this.engine.number(this.engine._numericValue({radical:this._value})):this.engine.number(this.engine._numericValue(this._value).sqrt()):this.isSame(0)||this.isSame(1)?this:this.engine.number(this._value.sqrt())}ln(n){let t=n?this.engine.box(n):void 0;if(this.isSame(0))return this.engine.NegativeInfinity;if(t&&this.isSame(t))return this.engine.One;if((!t||_(t,"ExponentialE"))&&this.symbol==="ExponentialE")return this.engine.One;let i=this.re;if(Number.isInteger(i)&&i>0){let r=this.engine,[o,s]=Zr(i,3);if(o!==1)return r.number(o).ln(t).mul(3).add(r.number(s).ln(t));if([o,s]=Zr(i,2),o!==1)return r.number(o).ln(t).mul(2).add(r.number(s).ln(t))}return t&&t.isInteger?typeof this._value=="number"?this.engine.number(Math.log(this._value)/Math.log(t.re)):this.engine.number(this._value.ln(t.re)):t===void 0?typeof this._value=="number"?this.engine.number(Math.log(this._value)):this.engine.number(this._value.ln()):this.engine._fn("Ln",[this])}get value(){return this}get type(){return typeof this._value=="number"?Number.isNaN(this._value)?V.number:Number.isFinite(this._value)?Number.isInteger(this._value)?V.finite_integer:V.finite_real:V.non_finite_number:new V(this._value.type,this.engine._typeResolver)}get sgn(){if(this._value===0)return"zero";let n;return typeof this._value=="number"?n=Math.sign(this._value):n=this._value.sgn(),n===void 0||Number.isNaN(n)?"unsigned":n===0?"zero":n>0?"positive":"negative"}get numerator(){return typeof this._value=="number"?this:this.engine.number(this._value.numerator)}get denominator(){return typeof this._value=="number"?this.engine.One:this.engine.number(this._value.denominator)}get numeratorDenominator(){if(typeof this._value=="number")return[this,this.engine.One];let n=this.engine;return[n.number(this._value.numerator),n.number(this._value.denominator)]}toRational(){if(typeof this._value=="number")return Number.isFinite(this._value)&&Number.isInteger(this._value)?[this._value,1]:null;if(this._value.im!==0)return null;let n=this._value.asExact;if(!n)return null;let t=n;if(t.radical!==1)return null;let i=t.rational,r=Number(i[0]),o=Number(i[1]);return!Number.isFinite(r)||!Number.isFinite(o)?null:[r,o]}subs(n,t){return this.isStructural?this:this.structural.subs(n,t)}replace(n,t){return fi(this.structural,n,t).at(-1)?.value??null}match(n,t){return Vo(this.structural,n,t)}get isPositive(){return typeof this._value=="number"?!Number.isNaN(this._value)&&this._value>0:Bo(this.sgn)}get isNonNegative(){return typeof this._value=="number"?!Number.isNaN(this._value)&&this._value>=0:Jo(this.sgn)}get isNegative(){return typeof this._value=="number"?!Number.isNaN(this._value)&&this._value<0:zo(this.sgn)}get isNonPositive(){return typeof this._value=="number"?!Number.isNaN(this._value)&&this._value<=0:Uo(this.sgn)}get isOdd(){if(this.isSame(1)||this.isSame(-1))return!0;if(this.isSame(0))return!1;if(!this.isFinite||!this.isInteger)return;if(typeof this._value=="number")return this._value%2!==0;let[n,t]=[this._value.numerator,this._value.denominator];return t.isOne?n.re%2!==0:n.re%2!==0&&t.re%2===0}get isEven(){let n=this.isOdd;return n!==void 0?!n:void 0}get isInfinity(){return typeof this._value=="number"?!Number.isFinite(this._value)&&!Number.isNaN(this._value):Number.isFinite(this._value.im)?this._value.isPositiveInfinity||this._value.isNegativeInfinity:!0}get isNaN(){return typeof this._value=="number"?Number.isNaN(this._value):this._value.isNaN}get isFinite(){return this.isInfinity===!1&&this.isNaN===!1}get isNumber(){return!0}get isInteger(){return typeof this._value=="number"?Number.isInteger(this._value):L(this._value.type,"integer")}get isRational(){return typeof this._value=="number"?Number.isInteger(this._value):L(this._value.type,"rational")}get isReal(){return typeof this._value=="number"?!0:L(this._value.type,"real")}get isExact(){let n=this._value;return typeof n=="number"?!Number.isFinite(n)||Number.isInteger(n):n.isExact}is(n,t){if(this.isSame(n))return!0;if(t!==void 0){if(typeof n=="number")return Math.abs(this.re-n)<=t&&Math.abs(this.im)<=t;if(typeof n=="bigint")return Math.abs(this.re-Number(n))<=t&&Math.abs(this.im)<=t}if(!(n instanceof de)||n.freeVariables.length>0)return!1;let i=n.N();if(!E(i))return!1;let r=t??this.engine.tolerance;return Math.abs(this.re-i.re)<=r&&Math.abs(this.im-i.im)<=r}isSame(n){return typeof n=="number"?typeof this._value=="number"?Object.is(this._value,n):this._value.isNaN?Object.is(n,NaN):this._value.eq(n):typeof n=="bigint"?typeof this._value=="number"?Re(this._value)===n:this._value.eq(this.engine._numericValue(n)):typeof n=="boolean"||typeof n=="string"?!1:sr(this,n)}get canonical(){return this}get isStructural(){return typeof this._value=="number"||this.type.matches("rational")?!0:!(this._value instanceof we)}get structural(){return this.isStructural?this:this.engine.box(this.json,{form:"structural"})}toNumericValue(){let n=this._value;return typeof n=="number"?[this.engine._numericValue(n),this.engine.One]:[n,this.engine.One]}simplify(n){return zn(this.structural,n).at(-1).value??this}evaluate(n){return n?.numericApproximation?this.N():this}N(){let n=this._value;if(typeof n=="number")return this;let t=n.N();return n===t?this:this.engine.number(t)}};function $l(e,n){if(n==null)return NaN;if(n instanceof Ee)return n;if(typeof n=="number")return Number.isInteger(n)&&n>=-re&&n<=re||!Number.isFinite(n)?n:e._numericValue(n);if(n instanceof K){let t=n.toNumber();return n.isInteger()&&Math.abs(t)<=re?t:n.isNaN()?NaN:n.isFinite()?e._numericValue(n):t>0?1/0:-1/0}if(typeof n=="bigint")return n>=-re&&n<=re?Number(n):e._numericValue(n);if(n instanceof z)return n.im===0?$l(e,n.re):n.isNaN()?NaN:!n.isFinite()&&n.im===0?n.re>0?1/0:-1/0:e._numericValue({re:n.re,im:n.im});if(typeof n=="object"&&"num"in n){if(typeof n.num=="number")return $l(e,n.num);if(typeof n.num!="string")throw new Error("MathJSON `num` property should be a string of digits");return tE(e,n.num)}if(typeof n=="string")return tE(e,n);if(n[1]==0)return NaN;if(typeof n[1]=="number"&&!Number.isFinite(n[1]))return Number.isFinite(n[0])?0:NaN;if(typeof n[0]=="number"&&!Number.isFinite(n[0])){let t=n[0]>0?1:-1;return n[0]>0?t>0?1/0:-1/0:n[0]<0?t>0?-1/0:1/0:NaN}return e._numericValue(n)}function tE(e,n){if(n=n.toLowerCase(),/[0-9][nd]$/.test(n)&&(n=n.slice(0,-1)),n=n.replace(/[\u0009-\u000d\u0020\u00a0]/g,""),n==="nan")return NaN;if(n==="infinity"||n==="+infinity"||n==="oo"||n==="+oo")return Number.POSITIVE_INFINITY;if(n==="-infinity"||n==="-oo")return Number.NEGATIVE_INFINITY;if(n==="0")return 0;if(n==="1")return 1;if(n==="-1")return-1;if(/\([0-9]+\)/.test(n)){let[i,r,o,s]=n.match(/(.+)\(([0-9]+)\)(.+)?$/)??[];n=r+o.repeat(Math.ceil(e.precision/o.length))+(s??"")}let t=Re(n);return t!==null?t>=-re&&t<=re?Number(t):e._numericValue(t):e._numericValue(e.bignum(n))}function EI(e){return!!(e===void 0||e==="Number"||e===!0||Array.isArray(e)&&e.includes("Number"))}function iE(e,n,t,i){let r=i?.canonical??!0,o=i?.metadata,s=t.normalize(),a=s.toLowerCase();if(a==="infinity"||a==="+infinity")return e.PositiveInfinity;if(a==="-infinity")return e.NegativeInfinity;if(e.strict&&!rn(s))return e.error(["invalid-symbol",it(s)],s);if(!r)return new Wi(e,s,{metadata:o});let u=n[s];if(u)return u;let l=e.lookupDefinition(s);if(se(l)&&l.value.holdUntil==="never")return l.value.value??e.Nothing;if(l)return new Wi(e,s,{metadata:o,def:l});let c=e.context.lexicalScope;for(;c.noAutoDeclare&&c.parent;)c=c.parent;return l=e._declareSymbolValue(s,{type:"unknown",inferred:!0},c),new Wi(e,s,{metadata:o,def:l})}function rE(e,n,t,i){let r=i?.metadata;if(!EI(i?.canonical)&&Rt(t))return e._fn("Rational",[e.number(t[0]),e.number(t[1])],{...r,canonical:!1});let s=$l(e,t);if(r===void 0){if(typeof s=="number"){let a=s;if(a===1)return e.One;if(a===0)return e.Zero;if(a===-1)return e.NegativeOne;if(a===2)return e.Two;if(Number.isInteger(a)&&n[a]!==void 0)return n[a]??=new Sn(e,s),n[a];if(Number.isNaN(a))return e.NaN;if(!Number.isFinite(a))return a<0?e.NegativeInfinity:e.PositiveInfinity}else if(s instanceof Ee){if(s.isZero)return e.Zero;if(s.isOne)return e.One;if(s.isNegativeOne)return e.NegativeOne;if(s.isNaN)return e.NaN;if(s.isNegativeInfinity)return e.NegativeInfinity;if(s.isPositiveInfinity)return e.PositiveInfinity}}return new Sn(e,s,{metadata:r})}function vI(e){if(typeof e!="string")return Ay(e),e;let n=Fo.find(t=>t.name===e);if(!n)throw new Error(`Unknown standard library: "${e}"`);return n}function oE(e){return e?pl(e.map(vI)):[...ml()]}function sE(e,n){for(let t of n){let i=t.definitions;if(!i)continue;let r=Array.isArray(i)?i:[i];for(let o of r)oy(e,o)}}function Vm(e){let n=[];for(let t of e)t.latexDictionary&&n.push(...t.latexDictionary);return n}function aE(e){let n=!e||e==="all"?Fo:Fo.filter(t=>t.name===e);return Vm(n)}var _I={"(":["\\lparen","("],")":["\\rparen",")"],"[":["\\lbrack","\\[","["],"]":["\\rbrack","\\]","]"],"<":["<","\\langle"],">":[">","\\rangle"],"{":["\\{","\\lbrace"],"}":["\\}","\\rbrace"],":":[":","\\colon"],"|":["|","\\|","\\lvert","\\rvert"],"||":["||","\\Vert","\\lVert","\\rVert"]};function NI(e){return"kind"in e&&e.kind==="matchfix"}var uE={"(":"(",")":")","[":"\\lbrack","]":"\\rbrack","{":"\\lbrace","}":"\\rbrace","<":"\\langle",">":"\\rangle","|":"\\vert","||":"\\Vert","\\lceil":"\\lceil","\\lfloor":"\\lfloor","\\rceil":"\\rceil","\\rfloor":"\\rfloor"};function Xo(e,n,t){let i=e.get(n);i?i.unshift(t):e.set(n,[t])}function lE(e,n,t){let i=SI(n,t);if(i===null)return;let r="kind"in n?n.kind:"expression",o=i.latexTrigger;typeof o=="string"&&(e.lookahead=Math.max(e.lookahead,Ba(o)));let s=Xe(o??"");if(s.length===2&&/[_^]/.test(s[0])&&s[1]!=="<{>"&&r!=="function"&&r!=="environment"&&r!=="matchfix"){let a=n.parse;!a&&n.name&&(r==="postfix"||r==="prefix"?a=(u,l)=>[n.name,l]:a=n.name),lE(e,{...n,kind:r,name:void 0,serialize:void 0,parse:a,latexTrigger:[s[0],"<{>",s[1],"<}>"]},t)}if(e.defs.push(i),NI(i)){let a=i.openTrigger,u=[];if(typeof a=="string"){let l=_I[a];l?u.push(...l):u.push(a),a==="||"&&u.push("|")}else Array.isArray(a)&&a.length>0&&u.push(a[0]);for(let l of u){let c=e.matchfixByOpen.get(l);c?c.unshift(i):e.matchfixByOpen.set(l,[i])}}if(i.latexTrigger&&i.latexTrigger!==""){let a=i.latexTrigger;switch(i.kind){case"infix":Xo(e.infixByTrigger,a,i);break;case"prefix":Xo(e.prefixByTrigger,a,i);break;case"postfix":Xo(e.postfixByTrigger,a,i);break;case"function":Xo(e.functionByTrigger,a,i);break;case"symbol":Xo(e.symbolByTrigger,a,i);break;case"expression":Xo(e.expressionByTrigger,a,i);break;case"environment":case"matchfix":break}}i.name!==void 0&&(e.ids.has(i.name)&&t({severity:"warning",message:["invalid-dictionary-entry",i.name,"Duplicate definition. The name (MathJSON symbol) must be unique, but triggers can be shared by multiple definitions."]}),e.ids.set(i.name,i))}function Bm(e,n){let t={lookahead:1,ids:new Map,defs:[],matchfixByOpen:new Map,infixByTrigger:new Map,prefixByTrigger:new Map,postfixByTrigger:new Map,functionByTrigger:new Map,symbolByTrigger:new Map,expressionByTrigger:new Map};for(let r of e)lE(t,r,n);let i={"(":[")","\\rparen"],"\\lparen":[")","\\rparen"],"[":["]","\\rbrack","\\]"],"\\lbrack":["]","\\rbrack","\\]"],"\\[":["]","\\rbrack","\\]"],"{":["}","\\rbrace"],"\\lbrace":["}","\\rbrace"],"\\{":["}","\\rbrace"],"<":[">","\\rangle"],"\\langle":[">","\\rangle"],"|":["|","\\|","\\rvert","\\lvert"],"\\|":["|","\\|","\\rvert","\\lvert"],"\\lvert":["|","\\|","\\rvert","\\lvert"],"||":["||","\\Vert","\\lVert","\\rVert"],"\\Vert":["||","\\Vert","\\lVert","\\rVert"],"\\lVert":["||","\\Vert","\\lVert","\\rVert"]};for(let[r,o]of t.matchfixByOpen.entries())t.matchfixByOpen.set(r,o.sort((s,a)=>{let u=b=>typeof b=="string"?b:b[0]||"",l=b=>typeof b=="string"?b:b[0]||"",c=u(s.openTrigger),f=l(s.closeTrigger),p=i[c]?.includes(f)??!1,d=u(a.openTrigger),g=l(a.closeTrigger),h=i[d]?.includes(g)??!1;return p&&!h?-1:!p&&h?1:0}));return t}function SI(e,n){if(!wI(e,n))return null;let t={kind:"kind"in e?e.kind:"expression"},i=null;"latexTrigger"in e&&(typeof e.latexTrigger=="string"?i=Xe(e.latexTrigger):i=e.latexTrigger);let r=null;"symbolTrigger"in e&&(r=e.symbolTrigger),i!==null&&(t.latexTrigger=yt(i)),r!==null&&(t.symbolTrigger=r),e.name&&(t.name=e.name,t.serialize=TI(e,i,r)),t.kind==="matchfix"&&ss(e)&&(t.openTrigger=e.openTrigger,t.closeTrigger=e.closeTrigger),t.kind==="symbol"&&qg(e)&&(t.precedence=e.precedence??1e4),t.kind==="expression"&&Fg(e)&&(t.precedence=e.precedence??1e4),(t.kind==="prefix"||t.kind==="postfix")&&(Ja(e)||wc(e))&&(i&&(i[0]==="^"||i[0]==="_")?(t.precedence=720,e.precedence):t.precedence=e.precedence??1e4),t.kind==="infix"&&Ic(e)&&(!i||i[0]!=="^"&&i[0]!=="_"||!e.associativity||e.associativity,t.associativity=e.associativity??"none",t.precedence=e.precedence??1e4);let o=II(e,i,r);return o&&(t.parse=o),t.kind==="function"&&"arguments"in e&&(t.arguments=e.arguments),t}function TI(e,n,t){if(typeof e.serialize=="function")return e.serialize;let i=e.kind??"expression";if(i==="environment"){let a=e.symbolTrigger??e.name??"unknown";return(u,l)=>$([`\\begin{${a}}`,u.serialize(S(l,1)),`\\end{${a}}`])}if(ss(e)){let a=typeof e.openTrigger=="string"?uE[e.openTrigger]:yt(e.openTrigger),u=typeof e.closeTrigger=="string"?uE[e.closeTrigger]:yt(e.closeTrigger);return(l,c)=>$([a,l.serialize(S(c,1)),u])}let r=e.serialize;if(r===void 0&&n&&(r=yt(n)),r){let a=e.precedence??1e4;return i==="postfix"?(u,l)=>$([u.wrap(S(l,1),a),r]):i==="prefix"?(u,l)=>$([r,u.wrap(S(l,1),a)]):i==="infix"?(u,l)=>{let c=Ie(l);if(c===0)return"";let f=e.precedence??1e4;return $(O(l).flatMap((p,d)=>{let g=u.wrap(p,f+1);return d<c-1?[g,r]:[g]}))}:(u,l)=>A(l)?$([r,u.wrapArguments(l)]):r}let o=t??e.name??"unknown",s=e.precedence??1e4;return i==="postfix"?(a,u)=>$([a.wrap(S(u,1),s),a.serializeSymbol(o)]):i==="prefix"?(a,u)=>$([a.serializeSymbol(o),a.wrap(S(u,1),s)]):i==="infix"?(a,u)=>$([a.wrap(S(u,1),s+1),a.serializeSymbol(o),a.wrap(S(u,2),s+1)]):(a,u)=>A(u)?$([a.serializeSymbol(o),a.wrapArguments(u)]):a.serializeSymbol(o)}function II(e,n,t){if("parse"in e&&typeof e.parse=="function")return e.parse;let i=("kind"in e?e.kind:"expression")??"expression";if(i==="environment"){let r=e.parse??e.name??t;if(r)return(o,s)=>{let a=o.parseTabular();return a===null?null:[r,["List",a.map(u=>["List",...u])]]}}if(i==="function"){let r=e.parse??e.name??t,o=("arguments"in e?e.arguments:void 0)??"enclosure";if(r)return(s,a)=>{let u=s.parseArguments(o,a);return u===null?r:[r,...u]}}if(i==="symbol"){let r=e.parse??e.name??t;if(r)return(o,s)=>r}if(i==="prefix"){let r=e.parse??e.name??t;if(r){let o=e.precedence??1e4;return(s,a)=>{let u=s.parseExpression({...a??[],minPrec:o});return u===null?null:[r,u]}}}if(i==="postfix"){let r=e.parse??e.name;if(r)return(o,s)=>s===null?null:[r,s]}if(i==="infix"){if(/[_^]/.test(n?.[0]??"")){let o=e.name??e.parse;return(s,a)=>[o,me(S(a,1)),me(S(a,2))]}let r=e.parse??e.name??t;if(r){let o=e.precedence??1e4,s=e.associativity??"none";return s==="none"?(a,u,l)=>{if(u===null)return null;let c=me(a.parseExpression({...l,minPrec:o}));return[r,u,c]}:s==="left"?(a,u,l)=>{if(u===null)return null;let c=me(a.parseExpression({...l,minPrec:o+1}));return typeof r!="string"?[r,u,c]:[r,u,c]}:s==="right"?(a,u,l)=>{if(u===null)return null;let c=me(a.parseExpression({...l,minPrec:o}));return typeof r!="string"?[r,u,c]:[r,u,c]}:(a,u,l)=>{if(u===null)return null;let c=me(a.parseExpression({...l,minPrec:o}));return typeof r!="string"?[r,u,c]:ur(r,u,c)}}}if(i==="matchfix"){let r=e.parse??e.name;if(r)return(o,s)=>Te(s)?null:[r,s]}if(i==="expression"){let r=e.parse??e.name??t;if(r)return()=>r}if("parse"in e){let r=e.parse;return()=>r}}function wI(e,n){let t=e.name??e.latexTrigger??e.symbolTrigger??e.openTrigger;if(!t)try{t=JSON.stringify(e)}catch{t="???"}if(Array.isArray(t)&&(t=yt(t)),"kind"in e&&!["expression","symbol","function","infix","postfix","prefix","matchfix","environment"].includes(e.kind)&&n({severity:"warning",message:["invalid-dictionary-entry",t,"The 'kind' property must be one of 'expression', 'symbol', 'function', 'infix', 'postfix', 'prefix', 'matchfix', 'environment'"]}),e.serialize!==void 0&&!e.name)return n({severity:"warning",message:["invalid-dictionary-entry",t,"A 'name' property must be provided if a 'serialize' handler is provided"]}),!1;if("symbolTrigger"in e&&(!("kind"in e)||e.kind!=="environment")&&(typeof e.symbolTrigger!="string"||!rn(e.symbolTrigger))&&n({severity:"warning",message:["invalid-dictionary-entry",t,"The 'symbolTrigger' property must be a valid symbol"]}),"name"in e&&(typeof e.name!="string"?e.name!==void 0&&n({severity:"warning",message:["invalid-dictionary-entry",t,"The 'name' property must be a string"]}):rn(e.name)||n({severity:"warning",message:["invalid-dictionary-entry",e.name,"The 'name' property must be a valid symbol"]})),ss(e)){if("latexTrigger"in e||"symbolTrigger"in Ja)return n({severity:"warning",message:["invalid-dictionary-entry",t,"'matchfix' operators use a 'openTrigger' and 'closeTrigger' instead of a 'latexTrigger' or 'symbolTrigger'. "]}),!1;if(!e.openTrigger||!e.closeTrigger)return n({severity:"warning",message:["invalid-dictionary-entry",t,"Expected `openTrigger` and a `closeTrigger` for matchfix operator"]}),!1;if(typeof e.openTrigger!=typeof e.closeTrigger)return n({severity:"warning",message:["invalid-dictionary-entry",t,"Expected `openTrigger` and `closeTrigger` to both be strings or array of LatexToken"]}),!1}if(Ic(e)||wc(e)||Ja(e)){if(Array.isArray(e.latexTrigger)&&(e.latexTrigger[0]==="_"||e.latexTrigger[0]==="^")||typeof e.latexTrigger=="string"&&(e.latexTrigger.startsWith("^")||e.latexTrigger.startsWith("_"))){if(e.precedence!==void 0||e.associativity!==void 0)return n({severity:"warning",message:["invalid-dictionary-entry",t,'Unexpected "precedence" or "associativity" for superscript/subscript operator']}),!1}else if(e.precedence===void 0)return n({severity:"warning",message:["invalid-dictionary-entry",t,`Expected a "precedence" for ${e.kind} operator`]}),!1}else if(e.associativity!==void 0)return n({severity:"warning",message:["invalid-dictionary-entry",t,'Unexpected "associativity" operator']}),!1;return!ss(e)&&!Vg(e)&&!e.latexTrigger&&!e.symbolTrigger&&!e.name?(n({severity:"warning",message:["invalid-dictionary-entry",t,"Expected a 'name', a 'latexTrigger' or a 'symbolTrigger'"]}),!1):e.parse===void 0&&e.name===void 0?(n({severity:"warning",message:["invalid-dictionary-entry",t,"Expected a 'parse' or 'name'"]}),!1):!0}var Ol=class{constructor(n){this._defaultProvider=n}_input;_indexed;get dictionary(){return this._input??this._defaultProvider()}set dictionary(n){this._input=n,this._indexed=Bm(n,t=>{throw Error(typeof t.message=="string"?t.message:t.message.join(","))})}get indexedDictionary(){return this._indexed??=Bm(this.dictionary,n=>console.error(n)),this._indexed}};var Ll=class{_rules;_cachedLength=-1;constructor(n){this._rules=n}get rules(){return this._rules}set rules(n){this._rules=n,this._cachedLength=-1}hasMutatedSinceLastCache(){return this._cachedLength>=0&&this._rules.length!==this._cachedLength}markCached(){this._cachedLength=this._rules.length}};var Fl=class{_bignum;_precision;_angularUnit;_tolerance;_bignumTolerance;_negBignumTolerance;_constants;constructor(n){let t=n?.precision??lc;t==="machine"&&(t=Math.floor(ht)),this._bignum=K.clone({precision:t}),this._precision=t,this._angularUnit=n?.angularUnit??"rad",this._tolerance=Gr,this._bignumTolerance=new this._bignum(Gr),this._negBignumTolerance=new this._bignum(-Gr),this.setTolerance(n?.tolerance??"auto"),this._constants=this.computeConstants()}get precision(){return this._precision}setPrecision(n){let t=n;if(t==="machine"&&(t=ht),t==="auto"&&(t=lc),t===this._precision)return!1;if(typeof t!="number"||t<=0)throw Error('Expected "machine" or a positive number');return this._precision=Math.max(t,ht),this._bignum=this._bignum.config({precision:this._precision}),this.setTolerance("auto"),this._constants=this.computeConstants(),!0}get angularUnit(){return this._angularUnit}setAngularUnit(n){if(n===this._angularUnit)return!1;if(typeof n!="string")throw Error("Expected a string");return this._angularUnit=n,!0}get tolerance(){return this._tolerance}setTolerance(n){let t=n;t==="auto"&&(t=Gr),(!Number.isFinite(t)||t<0)&&(t=Math.pow(10,-this._precision+2)),this._tolerance=t,this._bignumTolerance=this.bignum(t),this._negBignumTolerance=this.bignum(-t)}get bignumTolerance(){return this._bignumTolerance}get negBignumTolerance(){return this._negBignumTolerance}get bignumNaN(){return this._constants.nan}get bignumZero(){return this._constants.zero}get bignumOne(){return this._constants.one}get bignumTwo(){return this._constants.two}get bignumHalf(){return this._constants.half}get bignumPi(){return this._constants.pi}get bignumNegativeOne(){return this._constants.negativeOne}refreshConstants(){this._constants=this.computeConstants()}bignum(n){if(typeof n=="bigint")return new this._bignum(n.toString());try{return new this._bignum(n)}catch(t){t instanceof Error?console.error(t.message):console.error(String(t))}return new this._bignum(Number.NaN)}computeConstants(){let n=this.bignum(-1),t=this.bignum(1),i=this.bignum(2);return{negativeOne:n,nan:this.bignum(Number.NaN),zero:this.bignum(0),one:t,two:i,half:t.div(i),pi:n.acos()}}};var MI={"\\mathord":"","\\mathop":"","\\mathbin":"","\\mathrel":"","\\mathopen":"","\\mathclose":"","\\mathpunct":"","\\mathinner":"","\\operatorname":"","\\text":"","\\mathrm":"_upright","\\mathit":"_italic","\\mathbf":"_bold","\\mathscr":"_script","\\mathcal":"_calligraphic","\\mathfrak":"_fraktur","\\mathsf":"_sansserif","\\mathtt":"_monospace","\\mathbb":"_doublestruck"},kI={"\\mathring":"_ring","\\hat":"_hat","\\tilde":"_tilde","\\vec":"_vec","\\overline":"_bar","\\underline":"_underbar","\\dot":"_dot","\\ddot":"_ddot","\\dddot":"_dddot","\\ddddot":"_ddddot","\\acute":"_acute","\\grave":"_grave","\\breve":"_breve","\\check":"_check"};function cE(e,n){if(e.atEnd)return null;let t=e.peek,i={"\\_":"_","\\#":"hash"}[t];if(!i&&!n.toplevel&&(i={"+":"plus","-":"minus","\\plusmn":"pm","\\pm":"pm","\\ast":"ast","\\dag":"dag","\\ddag":"ddag","\\bot":"bottom","\\top":"top","\\bullet":"bullet","\\cir":"circle","\\diamond":"diamond","\\times":"times","\\square":"square","\\star":"star"}[t]),i)return e.nextToken(),i;let r=xt.findIndex(s=>s[1]===t);if(r>=0)return e.nextToken(),xt[r][0];let o=e.parseChar();return o!==null?/^\p{XIDC}+$/u.test(o)?o:[...o].length===1?"____"+o.codePointAt(0).toString(16).toUpperCase().padStart(6,"0"):o:e.nextToken()}function da(e){let n=Jm(e),t=kI[e.peek]??null;if(t){if(e.nextToken(),!e.match("<{>"))return null;let o=da(e);if(o===null||!e.match("<}>"))return null;n=`${o}${t}`}if(n===null){for(n="";!e.atEnd;){let o=e.peek;if(o==="<}>"||o==="_"||o==="^")break;if(o==="<space>"){e.nextToken();continue}let s=cE(e,{toplevel:!1});if(s===null)return null;n+=s}for(;!e.atEnd&&/\d/.test(e.peek);)n+=e.nextToken()}for(;!e.atEnd;)if(e.match("\\degree"))n+="_deg";else if(e.matchAll(["^","\\circ"]))n+="_deg";else if(e.matchAll(["^","\\prime"]))n+="_prime";else if(e.matchAll(["^","<{>","\\prime","<}>"]))n+="_prime";else if(e.matchAll(["^","<{>","\\doubleprime","<}>"]))n+="_dprime";else if(e.matchAll(["^","<{>","\\prime","\\prime","<}>"]))n+="_dprime";else break;let i=[],r=[];for(;!e.atEnd;)if(e.match("_")){let o=e.match("<{>"),s=da(e);if(o&&!e.match("<}>")||s===null)return null;r.push(s)}else if(e.match("^")){let o=e.match("<{>"),s=da(e);if(o&&!e.match("<}>")||s===null)return null;i.push(s)}else break;return i.length>0&&(n+="__"+i.join("")),r.length>0&&(n+="_"+r.join("")),n}function Jm(e){let n=MI[e.peek]??null;if(n===null)return null;if(e.nextToken(),e.match("<{>")){let t="",i={0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine"}[e.peek]??"";return i&&(t=i,e.nextToken()),t+=da(e),t===null||!e.match("<}>")?null:n==="_upright"&&t.length>1?t:t+n}return null}function zm(e){let n=e.index,t=Jm(e);return t===null||rn(t)?null:e.error(["invalid-symbol",{str:it(t)}],n)}function ga(e){if(/^[a-zA-Z]$/.test(e.peek)||/^\p{XIDS}$/u.test(e.peek)){let i=e.nextToken(),o=e.getSymbolType(i).matches("indexed_collection"),s=e.hasSubscriptEvaluate(i);for(;!e.atEnd&&!o&&!s&&e.peek==="_";){let u=e.index;if(e.nextToken(),e.match("<{>")){let c=e.peek;if(c==="("||c==="\\lparen"||c==="\\left"){e.index=u;break}let f=da(e),p=f!==null&&/plus|minus|times|ast/.test(f);if(f===null||f.includes(",")||p||e.peek!=="<}>"){e.index=u;break}e.match("<}>"),i+="_"+f}else{let c=e.peek;if(e.options.strict===!1&&/^[0-9]$/.test(c)){let f="";for(;!e.atEnd&&/^[0-9]$/.test(e.peek);)f+=e.peek,e.nextToken();i+="_"+f}else if(/^[a-zA-Z0-9]$/.test(c)||/^\p{XIDS}$/u.test(c))e.nextToken(),i+="_"+c;else{e.index=u;break}}}return i}let n=Jm(e);if(!n){for(n="";!e.atEnd&&so.test(n+e.peek);)n+=e.nextToken();n||(n=null)}let t=e.index;return n??=cE(e,{toplevel:!0}),n&&(n=n.normalize(),rn(n))?n:(e.index=t,null)}function CI(e){let n=!!e.matchAny(["-","\u2212"]);for(;e.matchAny(["+","\uFE62"])||e.skipSpace();)e.matchAny(["-","\u2212"])&&(n=!n);return n?"-":"+"}function Ki(e,n,t="whole"){let i=[],r=!1;for(;!r;){for(;/^[0-9]$/.test(e.peek);)i.push(e.nextToken()),e.skipVisualSpace();r=!0;let o=t==="whole"?n.wholeDigitGroupSeparatorTokens:n.fractionalDigitGroupSeparatorTokens;if(t!=="none"&&o.length>0){let s=e.index;e.skipVisualSpace(),e.matchAll(o)&&(e.skipVisualSpace(),/^[0-9]$/.test(e.peek)?r=!1:e.index=s)}}return i.join("")}function Um(e,n,t){let i=e.index,r=CI(e),o=Ki(e,n,t);return o?r==="-"?"-"+o:o:(e.index=i,"")}function AI(e,n){let t=e.index;if(e.skipVisualSpace(),e.matchAny(["e","E"])){let i=Um(e,n,"none");if(i)return i}if(e.index=t,e.match("\\times")&&(e.skipVisualSpace(),e.matchAll(["1","0"])&&(e.skipVisualSpace(),e.match("^")))){if(e.skipVisualSpace(),/^[0-9]$/.test(e.peek))return e.nextToken();if(e.match("<{>")){e.skipVisualSpace();let i=Um(e,n,"whole");if(e.skipVisualSpace(),i&&e.match("<}>"))return i}}if(e.index=t,e.skipVisualSpace(),e.match("\\%"))return"-2";if(e.index=t,e.matchAll(n.exponentProductTokens)&&(e.skipVisualSpace(),e.matchAll(n.beginExponentMarkerTokens))){e.skipVisualSpace();let i=Um(e,n,"none");if(e.skipVisualSpace(),i&&e.matchAll(n.endExponentMarkerTokens))return i}return e.index=t,""}function fE(e){let n=e.index;if(e.matchAll(["\\overset","<{>"])&&(e.match(".")||e.match("\\cdots"))&&e.matchAll(["<}>","<{>"])){let t=e.nextToken();if(t&&/^\d$/.test(t)&&e.match("<}>"))return t}return e.index=n,null}function RI(e){let n=e.peek;return n==="\\overline"||n==="\\overset"||n==="\\wideparent"||n==="\\overarc"||n==="("||n==="\\left"}function Gm(e,n){let t=e.index,i=e.options.repeatingDecimal,r="";if((i==="auto"||i==="parentheses")&&e.match("("))return r=Ki(e,n,"fraction"),r&&e.match(")")?`(${r})`:(e.index=t,"");if(e.index=t,(i==="auto"||i==="parentheses")&&e.matchAll(["\\left","("]))return r=Ki(e,n,"fraction"),r&&e.matchAll(["\\right",")"])?`(${r})`:(e.index=t,"");if(e.index=t,(i==="auto"||i==="vinculum")&&e.matchAll(["\\overline","<{>"]))return r=Ki(e,n,"fraction"),r&&e.match("<}>")?`(${r})`:(e.index=t,"");if(e.index=t,(i==="auto"||i==="arc")&&(e.matchAll(["\\wideparen","<{>"])||e.matchAll(["\\overarc","<{>"])))return r=Ki(e,n,"fraction"),r&&e.match("<}>")?`(${r})`:(e.index=t,"");if(e.index=t,i==="auto"||i==="dots"){let o=fE(e);if(o!==null){if(r=Ki(e,n,"fraction"),!r)return`(${o})`;let s=fE(e);if(s!==null)return`(${o}${r}${s})`}}return e.index=t,""}function jm(e){return e===0?{num:"0"}:Number.isInteger(e)&&Math.abs(e)<re?e:{num:e.toString()}}function pE(e,n){let t=e.options.parseNumbers;if(t===!1||t==="never")return null;let i=e.index;e.skipVisualSpace();let r=1;for(;e.peek==="-"||e.peek==="+";)e.match("-")?r=-r:e.match("+"),e.skipVisualSpace();let o="",s="",a=!1;if(e.match(".")||e.matchAll(n.decimalSeparatorTokens)){let p=e.peek;(/^[\d]$/.test(p)||RI(e))&&(a=!0,o="0")}else o=Ki(e,n,"whole");if(!o)return e.index=i,null;let u=e.index,l=!1;(a||e.match(".")||e.matchAll(n.decimalSeparatorTokens))&&(s=Ki(e,n,"fraction"),l=!0);let c=!1;if(l){let p=Gm(e,n);p&&(s+=p,c=!0),e.match("\\ldots")||e.matchAll(n.truncationMarkerTokens)}if(l&&!s)return e.index=u,o.length<10?jm(r*parseInt(o,10)):{num:r<0?"-"+o:o};let f=AI(e,n);if(!l&&!f&&o.length<10)return jm(r*parseInt(o,10));if(!c&&e.options.parseNumbers==="rational"){let p=o.length>16||o.length===16&&o>"9007199254740991";if(!s){if(p){let T=r<0?"-"+o:o;return f?["Multiply",{num:T},["Power",10,f]]:{num:T}}let N=parseInt(o,10);return f?["Multiply",r*N,["Power",10,f]]:jm(r*N)}let d=s.length;if(o.length+d>15){let N=BigInt(o),T=BigInt(s),I=BigInt(10)**BigInt(d),M=N*I+T,w=r<0?-M:M;return f?["Multiply",["Rational",{num:w.toString()},Number(I)],["Power",10,f]]:["Rational",{num:w.toString()},Number(I)]}let h=parseInt(o,10),b=parseInt(s,10),y=h*10**d+b,x=10**d;return f?["Multiply",["Rational",r*y,x],["Power",10,f]]:["Rational",r*y,x]}return{num:(r<0?"-":"")+o+(l?"."+s:"")+(f?"e"+f:"")}}var Zm={"(":["\\lparen","("],")":["\\rparen",")"],"[":["\\lbrack","\\[","["],"]":["\\rbrack","\\]","]"],"<":["<","\\langle"],">":[">","\\rangle"],"{":["\\{","\\lbrace"],"}":["\\}","\\rbrace"],":":[":","\\colon"],"|":["|","\\|","\\lvert","\\rvert"],"||":["||","\\Vert","\\lVert","\\rVert"]},ql={"\\left":"\\right","\\bigl":"\\bigr","\\Bigl":"\\Bigr","\\biggl":"\\biggr","\\Biggl":"\\Biggr","\\big":"\\big","\\Big":"\\Big","\\bigg":"\\bigg","\\Bigg":"\\Bigg","\\mathopen":"\\mathclose","\\mleft":"\\mright"},Hm={"(":")","[":"]","|":"|","\\{":"\\}","\\[":"\\]","\\lbrace":"\\rbrace","\\lparen":"\\rparen","\\langle":"\\rangle","\\lfloor":"\\rfloor","\\lceil":"\\rceil","\\vert":"\\vert","\\lvert":"\\rvert","\\Vert":"\\Vert","\\lVert":"\\rVert","\\lbrack":"\\rbrack","\\ulcorner":"\\urcorner","\\llcorner":"\\lrcorner","\\lgroup":"\\rgroup","\\lmoustache":"\\rmoustache","\\llbracket":"\\rrbracket"};function PI(e){if(e===null)return"null";if(e===void 0)return"undefined";if(e instanceof V)return"BoxedType";if(typeof e=="string")return`"${e}"`;if(typeof e=="object"){let n=e.constructor?.name;return n&&n!=="Object"?n:"object"}return`${typeof e} (${String(e)})`}var Wm=class e{options;_index=0;symbolTable={parent:null,ids:{}};pushSymbolTable(){this.symbolTable={parent:this.symbolTable,ids:{}}}popSymbolTable(){this.symbolTable=this.symbolTable.parent??this.symbolTable}addSymbol(n,t){if(typeof t=="string"&&(t=new V(t)),n in this.symbolTable.ids&&this.symbolTable.ids[n].is(t.type))throw new Error(`Symbol ${n} already declared as a different type`);this.symbolTable.ids[n]=t}_quantifierScopeDepth=0;get inQuantifierScope(){return this._quantifierScopeDepth>0}enterQuantifierScope(){this._quantifierScopeDepth++}exitQuantifierScope(){this._quantifierScopeDepth>0&&this._quantifierScopeDepth--}get index(){return this._index}set index(n){this._index=n,this._lastPeek="",this._peekCounter=0}_tokens;_positiveInfinityTokens;_negativeInfinityTokens;_notANumberTokens;_decimalSeparatorTokens;_wholeDigitGroupSeparatorTokens;_fractionalDigitGroupSeparatorTokens;_exponentProductTokens;_beginExponentMarkerTokens;_endExponentMarkerTokens;_truncationMarkerTokens;_imaginaryUnitTokens;_dictionary;_boundaries=[];_lastPeek="";_peekCounter=0;constructor(n,t,i){this._tokens=n,this.options=i,this._dictionary=t,this._positiveInfinityTokens=Xe(this.options.positiveInfinity),this._negativeInfinityTokens=Xe(this.options.negativeInfinity),this._notANumberTokens=Xe(this.options.notANumber),this._decimalSeparatorTokens=Xe(this.options.decimalSeparator),this._wholeDigitGroupSeparatorTokens=[],this._fractionalDigitGroupSeparatorTokens=[],this.options.digitGroupSeparator&&(typeof this.options.digitGroupSeparator=="string"?(this._wholeDigitGroupSeparatorTokens=Xe(this.options.digitGroupSeparator),this._fractionalDigitGroupSeparatorTokens=this._wholeDigitGroupSeparatorTokens):Array.isArray(this.options.digitGroupSeparator)&&(this._wholeDigitGroupSeparatorTokens=Xe(this.options.digitGroupSeparator[0]),this._fractionalDigitGroupSeparatorTokens=Xe(this.options.digitGroupSeparator[1]))),this._exponentProductTokens=Xe(this.options.exponentProduct),this._beginExponentMarkerTokens=Xe(this.options.beginExponentMarker),this._endExponentMarkerTokens=Xe(this.options.endExponentMarker),this._truncationMarkerTokens=Xe(this.options.truncationMarker),this._imaginaryUnitTokens=Xe(this.options.imaginaryUnit),this._numberFormatTokens={decimalSeparatorTokens:this._decimalSeparatorTokens,wholeDigitGroupSeparatorTokens:this._wholeDigitGroupSeparatorTokens,fractionalDigitGroupSeparatorTokens:this._fractionalDigitGroupSeparatorTokens,exponentProductTokens:this._exponentProductTokens,beginExponentMarkerTokens:this._beginExponentMarkerTokens,endExponentMarkerTokens:this._endExponentMarkerTokens,truncationMarkerTokens:this._truncationMarkerTokens}}_numberFormatTokens;getSymbolType(n){let t=this.symbolTable;for(;t;){if(n in t.ids)return t.ids[n];t=t.parent}if(this.options.getSymbolType){let i=this.options.getSymbolType(n);if(i instanceof V)return i;if(typeof i=="string")try{return new V(i)}catch(r){let o=r instanceof Error?r.message:String(r);throw new Error(`ce.parse(): getSymbolType("${n}") returned invalid type string "${i}". ${o}`)}throw new Error(`ce.parse(): getSymbolType("${n}") must return a BoxedType or a type string, received ${PI(i)}`)}return V.unknown}hasSubscriptEvaluate(n){return this.options.hasSubscriptEvaluate?this.options.hasSubscriptEvaluate(n):!1}get peek(){let n=this._tokens[this.index];if(n===this._lastPeek?this._peekCounter+=1:this._peekCounter=0,this._peekCounter>=1024){let t=`Infinite loop detected while parsing "${this.latex(0)}" at "${this._lastPeek}" (index ${this.index})`;throw console.error(t),new Error(t)}return this._lastPeek=n,n}nextToken(){return this._tokens[this.index++]}get atEnd(){return this.index>=this._tokens.length}atTerminator(n){return this.atBoundary||((n?.condition&&n.condition(this))??!1)}get atBoundary(){if(this.atEnd)return!0;let n=this.index;for(let t of this._boundaries)if(this.matchAll(t.tokens))return this.index=n,!0;return!1}addBoundary(n){this._boundaries.push({index:this.index,tokens:n})}removeBoundary(){this._boundaries.pop()}matchBoundary(){let n=this._boundaries[this._boundaries.length-1],t=n&&this.matchAll(n.tokens);return t&&this._boundaries.pop(),t}boundaryError(n){let t=this._boundaries[this._boundaries.length-1];return this._boundaries.pop(),this.error(n,t.index)}canSkipMatchfixReparsing(n,t,i){return!i&&t.length===1&&(n==="("||n==="\\lparen")&&(t[0]==="]"||t[0]==="\\rbrack")}latex(n,t){return yt(this._tokens.slice(n,t))}latexAhead(n){return this.latex(this.index,this.index+n)}lookAhead(){let n=Math.min(this._dictionary.lookahead,this._tokens.length-this.index);if(n<=0)return[];let t=[];for(;n>0;)t.push([n,this.latexAhead(n--)]);return t}peekDefinitions(n){if(this.atEnd)return[];let t=[],i;switch(n){case"infix":i=this._dictionary.infixByTrigger;break;case"prefix":i=this._dictionary.prefixByTrigger;break;case"postfix":i=this._dictionary.postfixByTrigger;break;case"function":i=this._dictionary.functionByTrigger;break;case"symbol":i=this._dictionary.symbolByTrigger;break;case"expression":i=this._dictionary.expressionByTrigger;break;case"operator":i=void 0;break}if(i){let r=[];for(let o of this.getDefs(n))(o.latexTrigger===""||o.symbolTrigger)&&r.push(o);for(let o of r)o.latexTrigger===""&&t.push([o,0]);for(let[o,s]of this.lookAhead()){let a=i.get(s);if(a)for(let u of a)t.push([u,o])}for(let o of r)if(o.symbolTrigger){let s=mE(this,o.symbolTrigger);s>0&&t.push([o,s])}}else{let r=[...this.getDefs(n)];for(let o of r)o.latexTrigger===""&&t.push([o,0]);for(let[o,s]of this.lookAhead())for(let a of r)a.latexTrigger===s&&t.push([a,o]);for(let o of r)if(o.symbolTrigger){let s=mE(this,o.symbolTrigger);s>0&&t.push([o,s])}}return t}skipSpaceTokens(){for(;this.match("<space>"););}skipSpace(){if(!this.atEnd&&this.peek==="<{>"){let t=this.index;for(this.nextToken();this.match("<space>"););if(this.nextToken()==="<}>")return this.skipSpace(),!0;this.index=t}if(!this.options.skipSpace)return!1;let n=!1;for(;this.match("<space>");)n=!0;return n&&this.skipSpace(),n}skipVisualSpace(){this.options.skipSpace&&(this.skipSpace(),["\\!","\\,","\\:","\\;","\\enskip","\\enspace","\\space","\\quad","\\qquad"].includes(this.peek)&&(this.nextToken(),this.skipVisualSpace()),this.skipSpace())}match(n){return this._tokens[this.index]!==n?!1:(this.index++,!0)}matchAll(n){if(n.length===0)return!1;let t,i=0;do t=this._tokens[this.index+i]===n[i++];while(t&&i<n.length);return t&&(this.index+=i),t}matchAny(n){return n.includes(this._tokens[this.index])?this._tokens[this.index++]:""}parseLatexNumber(n=!0){let t=!1,i=this.peek;for(;i==="<space>"||i==="+"||i==="-";)i==="-"&&(t=!t),this.nextToken(),i=this.peek;let r=10,o=["0","1","2","3","4","5","6","7","8","9"];if(this.match("'"))r=8,o=["0","1","2","3","4","5","6","7"],n=!0;else if(this.match('"')||this.match("x"))r=16,o=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"],n=!0;else if(this.match("`"))return i=this.nextToken(),i?i.startsWith("\\")&&i.length===2?(t?-1:1)*(i.codePointAt(1)??0):(t?-1:1)*(i.codePointAt(0)??0):null;let s="";for(;o.includes(this.peek);)s+=this.nextToken();if(!n&&this.match("."))for(s+=".";o.includes(this.peek);)s+=this.nextToken();let a=n?Number.parseInt(s,r):Number.parseFloat(s);return Number.isNaN(a)?null:t?-a:a}parseChar(){let n=this.index,t=0;for(;this.match("^");)t+=1;if(t<2&&(this.index=n),t>=2){let i="",r=0;for(;r!=t;){let o=this.matchAny(["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]);if(!o)break;i+=o,r+=1}if(i.length===t)return String.fromCodePoint(Number.parseInt(i,16))}else if(this.match("\\char")){let i=Math.floor(this.parseLatexNumber()??Number.NaN);return(!Number.isFinite(i)||i<0||i>1114111)&&(i=10067),String.fromCodePoint(i)}else if(this.match("\\unicode"))if(this.skipSpaceTokens(),this.match("<{>")){let i=this.parseLatexNumber();if(this.match("<}>")&&i!==null&&i>=0&&i<=1114111)return String.fromCodePoint(i)}else{let i=this.parseLatexNumber();if(i!==null&&i>=0&&i<=1114111)return String.fromCodePoint(i)}return this.index=n,null}matchDelimiter(n,t){let i=this.index,r=ql[this.peek];r&&this.nextToken();let o=r&&this.peek==="<{>";if(o&&this.nextToken(),Array.isArray(n)){if(Array.isArray(t),n.length===1){if(!(Zm[n[0]]??[n[0]]).includes(this.peek))return this.index=i,!1;let c=this.nextToken().startsWith("\\");if(o&&!this.match("<}>"))return this.index=i,!1;let f=Zm[t[0]]??[t[0]],p=f.find(g=>c?g.startsWith("\\"):!g.startsWith("\\"))??f[0],d=r?o?[r,"<{>",p,"<}>"]:[r,p]:[p];return this.addBoundary(d),!0}if(!this.matchAll(n))return this.index=i,!1;let a=r?[r,...t]:t;return this.addBoundary(a),!0}if(Array.isArray(t),n==="||"&&this.matchAll(["|","|"]))return this.addBoundary(["|","|"]),!0;if(!(Zm[n]??[n]).includes(this.peek))return this.index=i,!1;if(n=this.nextToken(),o&&!this.match("<}>"))return this.index=i,!1;t=Hm[n]??t;let s=r?o?[r,"<{>",t,"<}>"]:[r,t]:[t];return this.addBoundary(s),!0}parseGroup(){let n=this.index;if(this.skipSpaceTokens(),this.match("<{>")){this.addBoundary(["<}>"]);let t=this.parseExpression();if(this.skipSpace(),this.matchBoundary())return t??"Nothing";for(;!this.matchBoundary()&&!this.atEnd;)this.nextToken();if(A(t)==="Error")return t;let i=this.error("expected-closing-delimiter",n);return t!==null?["InvisibleOperator",t,i]:i}return this.index=n,null}parseOptionalGroup(){let n=this.index;if(this.skipSpaceTokens(),this.match("[")){this.addBoundary(["]"]);let t=this.parseExpression();return this.skipSpace(),this.matchBoundary()?t:this.boundaryError("expected-closing-delimiter")}return this.index=n,null}parseToken(){return this.skipSpace(),[...'!"#$%&(),/;:?@[]\\`|~'.split(""),"\\left","\\bigl","\\mleft"].includes(this.peek)?null:/^[0-9]$/.test(this.peek)?parseInt(this.nextToken(),10):this.parseGenericExpression()??this.parseSymbol()}parseTabular(){let n=[],t=[],i=null;for(;!this.atBoundary;)if(this.skipSpace(),this.match("&"))t.push(i??"Nothing"),i=null;else if(this.match("\\\\")||this.match("\\cr"))this.skipSpace(),this.parseOptionalGroup(),i!==null&&t.push(i),n.push(t),t=[],i=null;else{let r=[],o=this.peek;for(;o!=="&"&&o!=="\\\\"&&o!=="\\cr"&&!this.atBoundary;)i=this.parseExpression({minPrec:0,condition:s=>{let a=s.peek;return a==="&"||a==="\\\\"||a==="\\cr"}}),i!==null?r.push(i):(r.push(["Error","'unexpected-token'",{str:yt(o)}]),this.nextToken()),this.skipSpace(),o=this.peek;r.length>1?i=["Sequence",...r]:i=r[0]??"Nothing"}return i!==null&&t.push(i),t.length>0&&n.push(t),n}parseStringGroupContent(){let n=this.index,t="",i=0;for(;!this.atBoundary||i>0;){let r=this.nextToken();if(r==="<$>"||r==="<$$>")return this.index=n,"";r==="<{>"?(i+=1,t+="\\{"):r==="<}>"?(i-=1,t+="\\}"):r==="<space>"?t+=" ":(r[0],t+=r)}return t}parseStringGroup(n){n===void 0&&(n=!1);let t=this.index;for(;this.match("<space>"););if(this.match(n?"[":"<{>")){this.addBoundary([n?"]":"<}>"]);let i=this.parseStringGroupContent();if(this.matchBoundary())return i;this.removeBoundary()}return this.index=t,null}parseEnvironment(n){let t=this.index;if(!this.match("\\begin"))return null;let i=this.parseStringGroup()?.trim();if(!i)return this.error("expected-environment-name",t);this.addBoundary(["\\end","<{>",...i.split(""),"<}>"]);for(let r of this.getDefs("environment"))if(r.symbolTrigger===i){let o=r.parse(this,n);return this.skipSpace(),this.matchBoundary()?o!==null?this.decorate(o,t):(this.index=t,null):this.boundaryError("unbalanced-environment")}return this.parseTabular(),this.skipSpace(),this.matchBoundary()?this.error(["unknown-environment",{str:i}],t):this.boundaryError("unbalanced-environment")}parseRepeatingDecimal(){return Gm(this,this._numberFormatTokens)}parseNumber(){return pE(this,this._numberFormatTokens)}parsePrefixOperator(n){n||(n={minPrec:0}),n.minPrec||(n={...n,minPrec:0});let t=this.index;for(let[i,r]of this.peekDefinitions("prefix")){this.index=t+r;let o=i.parse(this,{...n,minPrec:i.precedence+1});if(o!==null)return o}return this.index=t,null}parseInfixOperator(n,t){t??={minPrec:0},t.minPrec,t.minPrec===void 0&&(t={...t,minPrec:0});let i=this.index;for(let[r,o]of this.peekDefinitions("infix"))if(r.precedence>=t.minPrec){this.index=i+o;let s=r.parse(this,n,t);if(s!==null)return s}return this.index=i,null}parseArguments(n="enclosure",t){if(this.atTerminator(t))return null;let i=this.index,r=this.parseEnclosure();if(n==="enclosure")return r===null?null:Ri(r)??[];if(n==="implicit"){if(A(r)==="Delimiter"){let s=S(r,1);return A(s)==="Sequence"?O(s):s===null?[]:[s]}if(r!==null)return[r];let o=this.parseExpression({...t,minPrec:On});return o===null?null:[o]}return this.index=i,null}parseEnclosure(){let n=this.index,t=this.peek,i=ql[t],r=i?this._tokens[this.index+1]:t;i&&r==="<{>"&&(r=this._tokens[this.index+2]);let o=this._dictionary.matchfixByOpen.get(r)??[];o.length===0&&!r&&(o=[...this.getDefs("matchfix")]);for(let s of o){if(this.index=n,!this.matchDelimiter(s.openTrigger,s.closeTrigger))continue;let u=this.index;this.skipSpace();let l=this.parseExpression();this.skipSpace();let c=this._boundaries[this._boundaries.length-1]?.tokens,f=this.matchBoundary(),p=typeof s.openTrigger=="string"&&typeof s.closeTrigger=="string"&&s.openTrigger===s.closeTrigger||Array.isArray(s.openTrigger)&&Array.isArray(s.closeTrigger)&&s.openTrigger.length===s.closeTrigger.length&&s.openTrigger.every((g,h)=>g===s.closeTrigger[h]);if(f&&Te(l)&&p&&c){if(this.index=u,this.skipSpace(),l=this.parseExpression(),this.skipSpace(),!this.matchAll(c)){if(this.index=n,!this.atEnd)continue;return null}}else if(!f){let g=this._boundaries[this._boundaries.length-1]?.tokens;if(!g){this.index=n;continue}if(this.canSkipMatchfixReparsing(r,g,p)){this.removeBoundary(),this.index=n;continue}else if(this.removeBoundary(),this.index=u,this.skipSpace(),l=this.parseExpression(),this.skipSpace(),!this.matchAll(g)){if(this.index=n,!this.atEnd)continue;return null}}let d=s.parse(this,l??"Nothing");if(d!==null)return d}return this.index=n,null}parseGenericExpression(n){if(this.atTerminator(n))return null;let t=this.index,i=null,r=this.peekDefinitions("expression")??[];for(let[o,s]of r)if(this.index=t+s,typeof o.parse=="function"){if(i=o.parse(this,n),i!==null)return i}else return o.name;return this.index=t,null}parseFunction(n){if(this.atTerminator(n))return null;let t=this.index,i=null,r="enclosure";for(let[a,u]of this.peekDefinitions("function"))if(this.index=t+u,typeof a.parse=="function"){if(i=a.parse(this,n),i!==null)return i}else{i=a.name,r=a.arguments??"enclosure";break}let o=!1;if(i===null&&(this.index=t,i=ga(this),!this.isFunctionOperator(i))){if(!this.looksLikePredicate(i))return this.index=t,null;o=!0}do{let a=this.parsePostfixOperator(i,n);if(a===null)break;i=a}while(!0);let s=this.parseArguments(r,n);return s===null?i:o&&typeof i=="string"&&(this.inQuantifierScope||i==="D"||i==="N")?["Predicate",i,...s]:typeof i=="string"?[i,...s]:["Apply",i,...s]}parseSymbol(n){if(this.atTerminator(n))return null;let t=this.index;for(let[r,o]of this.peekDefinitions("symbol"))if(this.index=t+o,typeof r.parse=="function"){let s=r.parse(this,n);if(s!==null)return s}else return r.name;this.index=t;let i=ga(this);return i!==null&&!this.getSymbolType(i).matches("error")?i:(this.index=t,null)}tryParseBareFunction(n){if(this.options.strict!==!1)return null;let t=this.index;if(t>0&&/^[a-zA-Z]$/.test(this._tokens[t-1]))return null;let i="";for(;!this.atEnd&&/^[a-zA-Z]$/.test(this.peek);)i+=this.peek,this.index++;if(!i)return this.index=t,null;this.skipSpace();let r=null;if(this.peek==="_"){if(this.index++,r=this.parseGroup(),r===null){if(!this.atEnd&&/^[a-zA-Z]$/.test(this.peek))r=this.peek,this.index++;else{let c="";for(;!this.atEnd&&/^[0-9]$/.test(this.peek);)c+=this.peek,this.index++;c&&(r=parseInt(c))}if(r===null)return this.index=t,null}this.skipSpace()}let o=null;if(this.peek==="^"){if(this.index++,o=this.parseGroup(),o===null){let c=!1;this.peek==="-"&&(c=!0,this.index++);let f="";for(;!this.atEnd&&/^[0-9]$/.test(this.peek);)f+=this.peek,this.index++;if(f){let p=parseInt(f);o=c?-p:p}else return this.index=t,null}this.skipSpace()}if(this.peek!=="(")return this.index=t,null;let a={sin:"Sin",cos:"Cos",tan:"Tan",cot:"Cot",sec:"Sec",csc:"Csc",sinh:"Sinh",cosh:"Cosh",tanh:"Tanh",coth:"Coth",sech:"Sech",csch:"Csch",arcsin:"Arcsin",arccos:"Arccos",arctan:"Arctan",arccot:"Arccot",arcsec:"Arcsec",arccsc:"Arccsc",asin:"Arcsin",acos:"Arccos",atan:"Arctan",arcsinh:"Arsinh",arccosh:"Arcosh",arctanh:"Artanh",arccoth:"Arcoth",arcsech:"Arsech",arccsch:"Arcsch",asinh:"Arsinh",acosh:"Arcosh",atanh:"Artanh",log:"Log",ln:"Ln",exp:"Exp",lg:"Lg",lb:"Lb",sqrt:"Sqrt",abs:"Abs",sgn:"Sgn",sign:"Sgn",floor:"Floor",ceil:"Ceil",round:"Round",max:"Max",min:"Min",gcd:"Gcd",lcm:"Lcm",cbrt:"Root",binom:"Binomial",nCr:"Binomial"}[i];if(!a)return this.index=t,null;let u=this.parseArguments("enclosure",n);if(u===null)return this.index=t,null;if(i==="cbrt"){let c=["Root",u[0]??"Nothing",3];return o!==null?["Power",c,o]:c}let l;return i==="log"&&r!==null?r===2?l=["Lb",...u]:r===10?l=["Log",...u]:l=["Log",u[0],r]:l=[a,...u],o!==null?["Power",l,o]:l}static BARE_SYMBOL_MAP={alpha:"alpha",beta:"beta",gamma:"gamma",delta:"delta",epsilon:"epsilon",varepsilon:"varepsilon",zeta:"zeta",eta:"eta",theta:"theta",vartheta:"vartheta",iota:"iota",kappa:"kappa",lambda:"lambda",mu:"mu",nu:"nu",xi:"xi",omicron:"omicron",pi:"Pi",rho:"rho",sigma:"sigma",tau:"tau",upsilon:"upsilon",phi:"phi",varphi:"varphi",chi:"chi",psi:"psi",omega:"omega",Gamma:"Gamma",Delta:"Delta",Theta:"Theta",Lambda:"Lambda",Xi:"Xi",Sigma:"Sigma",Upsilon:"Upsilon",Phi:"Phi",Psi:"Psi",Omega:"Omega",oo:"PositiveInfinity",inf:"PositiveInfinity",ii:"ImaginaryUnit"};tryParseBareSymbol(){if(this.options.strict!==!1)return null;let n=this.index;if(n>0&&/^[a-zA-Z]$/.test(this._tokens[n-1]))return null;let t="";for(;!this.atEnd&&/^[a-zA-Z]$/.test(this.peek);)t+=this.peek,this.index++;if(!t)return this.index=n,null;let i=e.BARE_SYMBOL_MAP[t];return i||(this.index=n,null)}parseSupsub(n){if(this.atEnd)return n;let t=this.index;if(this.options.strict===!1&&typeof n=="string"&&n.length===1&&/^[a-zA-Z]$/.test(n)&&/^[2-9]$/.test(this.peek)){let a=parseInt(this.peek);return this.index++,this.parseSupsub(["Power",n,a])}this.skipSpace();let i=[],r=[],o=t;for(;this.peek==="_"||this.peek==="^";){if(this.match("_"))if(o=this.index,this.match("_")||this.match("^"))r.push(this.error("syntax-error",o));else{let a=this.parseGroup();if(a===null&&this.options.strict===!1){let u="";for(;!this.atEnd&&/^[0-9]$/.test(this.peek);)u+=this.peek,this.index++;u&&(a=parseInt(u))}if(a??=this.parseToken(),a===null&&this.options.strict===!1&&this.peek==="("&&(a=this.parseEnclosure()),a??=this.parseStringGroup(),a===null)return this.error("missing",t);r.push(a)}else if(this.match("^"))if(o=this.index,this.match("_")||this.match("^"))i.push(this.error("syntax-error",o));else{let a=this.parseGroup();if(a===null&&this.options.strict===!1){let u=this.index,l=!1;this.peek==="-"&&(l=!0,this.index++);let c="";for(;!this.atEnd&&/^[0-9]$/.test(this.peek);)c+=this.peek,this.index++;if(c){let f=parseInt(c);a=l?-f:f}else this.index=u}if(a??=this.parseToken(),a===null&&this.options.strict===!1&&this.peek==="("&&(a=this.parseEnclosure()),a===null)return this.error("missing",t);i.push(a)}o=this.index,this.skipSpace()}if(i.length===0&&r.length===0)return this.index=t,n;let s=n;if(r.length>0){let a=[...this.getDefs("infix")].filter(u=>u.latexTrigger==="_");if(a){let u=["Subscript",s,r.length===1?r[0]:["List",...r]];for(let l of a)if(typeof l.parse=="function"?s=l.parse(this,u,{minPrec:0}):s=u,s!==null)break}}if(i.length>0){let a=[...this.getDefs("infix")].filter(u=>u.latexTrigger==="^");if(a){let u=i.filter(l=>!Te(l));if(u.length!==0){let l=u.length===1?u[0]:["List",...u],c=["Superscript",s,l];for(let f of a)if(typeof f.parse=="function"?s=f.parse(this,c,{minPrec:0}):s=c,s!==null)break}}}return s===null&&(this.index=t),s}parsePostfixOperator(n,t){if(n===null||this.atEnd)return null;let i=this.index;for(let[r,o]of this.peekDefinitions("postfix")){this.index=i+o;let s=r.parse(this,n,t);if(s!==null)return s}return this.index=i,null}parseSyntaxError(){let n=this.index;if(this.peek==="^")return this.index+=1,["Superscript",this.error("missing",n),me(this.parseGroup())];let t=this.peekDefinitions("operator");if(t.length>0){if(t=this.peekDefinitions("postfix"),t.length>0){let[a,u]=t[0];if(this.index+=u,typeof a.parse=="function"){let l=a.parse(this,this.error("missing",n));if(l!==null)return l}return this.error("unexpected-operator",n)}if(t=this.peekDefinitions("prefix"),t.length>0){let[a,u]=t[0];if(this.index+=u,typeof a.parse=="function"){let l=a.parse(this,{minPrec:0});if(l!==null)return l}return a.name?[a.name,this.parseExpression()??this.error("missing",n)]:this.error("unexpected-operator",n)}if(t=this.peekDefinitions("infix"),t.length>0){let[a,u]=t[0];this.index+=u;let l=a.parse(this,this.error("missing",n),{minPrec:0});return l!==null?l:this.error("unexpected-operator",n)}}let i=this.index,r=zm(this);if(r!==null)return r;if(r=ga(this),r!==null)return this.error(["unexpected-symbol",{str:r}],i);let o=this.peek;if(!o)return this.error("syntax-error",n);if(DI(this))return this.error("unexpected-delimiter",n);if(o[0]!=="\\")return this.error(["unexpected-token",{str:yt(o)}],n);let s=this.nextToken();if(this.skipSpaceTokens(),s==="\\end"){let a=this.parseStringGroup();return a===null?this.error("expected-environment-name",n):this.error(["unbalanced-environment",{str:a}],n)}for(;this.match("[");){let a=0;for(;!this.atEnd&&a===0&&this.peek!=="]";)this.peek==="["&&(a+=1),this.peek==="]"&&(a-=1),this.nextToken();this.match("]")}for(;this.match("<{>");){let a=0;for(;!this.atEnd&&a===0&&this.peek!=="<}>";)this.peek==="<{>"&&(a+=1),this.peek==="<}>"&&(a-=1),this.nextToken();this.match("<}>")}return this.error(["unexpected-command",{str:yt(s)}],n)}parsePrimary(n){if(this.atBoundary||this.atTerminator(n))return null;let t=null,i=this.index;if(this.match("<}>"))return this.error("unexpected-closing-delimiter",i);if(t??=this.parseGroup(),t??=this.parseNumber(),t??=this.parseEnclosure(),t??=this.parseEnvironment(n),t===null&&this.matchAll(this._positiveInfinityTokens)&&(t="PositiveInfinity"),t===null&&this.matchAll(this._negativeInfinityTokens)&&(t="NegativeInfinity"),t===null&&this.matchAll(this._notANumberTokens)&&(t="NaN"),t===null&&this.matchAll(this._imaginaryUnitTokens)&&(t="ImaginaryUnit"),t??=this.tryParseBareFunction(n),t??=this.tryParseBareSymbol(),t??=this.parseGenericExpression(n)??this.parseFunction(n)??this.parseSymbol(n)??zm(this),t!==null&&Te(t))return this.parsePrimary(n);if(t!==null){t=this.decorate(t,i);let r=null,o=this.index;do{if(r=this.parsePostfixOperator(t,n),t=r??t,this.index===o&&r!==null){this.index;break}o=this.index}while(r!==null)}return t!==null&&(t=this.parseSupsub(t)),t===null&&(t=this.options.parseUnexpectedToken?.(null,this)??null,t===null&&this.peek.startsWith("\\")&&(this.nextToken(),t=this.error("unexpected-command",i))),this.decorate(t,i)}parseExpression(n){this.skipSpace();let t=this.index;if(this.atBoundary)return this.index=t,null;n??={minPrec:0},n.minPrec,n.minPrec===void 0&&(n={...n,minPrec:0});let i=this.parsePrefixOperator({...n,minPrec:0});if(i??=this.parsePrimary(n),i!==null){let r=!1;for(;!r&&!this.atTerminator(n);){this.skipSpace();let o=this.parseInfixOperator(i,n);if(o===null&&n.minPrec<=Sc){let s=this.peekDefinitions("operator");if(s.length===0||s.every(([a])=>a.latexTrigger==="\\text")){let a=this.parseExpression({...n,minPrec:Sc+1});a!==null?A(i)==="InvisibleOperator"?A(a)==="InvisibleOperator"?o=["InvisibleOperator",...O(i),...O(a)]:o=["InvisibleOperator",...O(i),a]:A(a)==="InvisibleOperator"?o=["InvisibleOperator",i,...O(a)]:o=["InvisibleOperator",i,a]:o===null&&(o=this.options.parseUnexpectedToken?.(i,this)??null)}}o!==null?i=o:r=!0}}return this.decorate(i,t)}decorate(n,t){if(n===null)return null;if(!this.options.preserveLatex)return n;let i=this.latex(t,this.index);return Array.isArray(n)?n={latex:i,fn:n}:typeof n=="number"?n={latex:i,num:Number(n).toString()}:typeof n=="string"?n.startsWith("'")?n={latex:i,str:n.slice(1,-1)}:n={latex:i,sym:n}:typeof n=="object"&&n!==null&&(n.latex=i),n}error(n,t){let i;typeof n=="string"?(n.startsWith("'"),i={str:n}):(n[0].startsWith("'"),i=["ErrorCode",{str:n[0]},...n.slice(1)]);let r=this.latex(t,this.index);return r?["Error",i,["LatexString",{str:r}]]:["Error",i]}isFunctionOperator(n){return n===null||n==="D"||n==="N"?!1:!!this.getSymbolType(n).matches("function")}looksLikePredicate(n){return n===null||typeof n!="string"||!/^[A-Z]$/.test(n)?!1:(this.skipSpace(),this.peek==="("||this.peek==="\\left")}*getDefs(n){if(n==="operator")for(let t=this._dictionary.defs.length-1;t>=0;t--){let i=this._dictionary.defs[t];/^prefix|infix|postfix/.test(i.kind)&&(yield i)}else for(let t=this._dictionary.defs.length-1;t>=0;t--){let i=this._dictionary.defs[t];i.kind===n&&(yield i)}}};function mE(e,n){let t=e.index,i=ga(e)?.trim();if(i===null)return 0;let r=i!==n?0:e.index-t;return e.index=t,r}function DI(e){let n=e.peek;return Object.values(Hm).includes(n)||Hm[n]?(e.nextToken(),!0):ql[n]||Object.values(ql).includes(n)?(e.nextToken(),e.nextToken(),!0):!1}function dE(e,n,t){let i=new Wm(Xe(e),n,t),r=i.parseExpression();if(!i.atEnd){let o=i.parseSyntaxError();r=r!==null?["Sequence",r,o]:o}if(r??="Nothing",t.preserveLatex){if(Array.isArray(r))return{latex:e,fn:r};if(typeof r=="number")return{latex:e,num:Number(r).toString()};if(typeof r=="string"){if(qa(r))return{latex:e,str:ye(r)};if($n(r))return{latex:e,sym:r};if(nt(r))return{latex:e,num:r}}typeof r=="object"&&r!==null&&(r.latex=e)}return r}function $I(e,n){let t=e.lookupDefinition(n);return t?xe(t)?t.operator.signature:se(t)?t.value.type:V.unknown:V.unknown}function OI(e,n){let t=e.lookupDefinition(n);return!!(se(t)&&t.value.subscriptEvaluate)}function gE(e,n,t){if(n==null)return null;if(typeof n!="string")throw Error("ce.parse(): expected a LaTeX string");let i={imaginaryUnit:"\\imaginaryI",positiveInfinity:"\\infty",negativeInfinity:"-\\infty",notANumber:"\\operatorname{NaN}",decimalSeparator:e.decimalSeparator,digitGroup:3,digitGroupSeparator:"\\,",exponentProduct:"\\cdot",beginExponentMarker:"10^{",endExponentMarker:"}",truncationMarker:"\\ldots",repeatingDecimal:"auto",strict:!0,skipSpace:!0,parseNumbers:"auto",getSymbolType:a=>$I(e,a),hasSubscriptEvaluate:a=>OI(e,a),parseUnexpectedToken:(a,u)=>null,preserveLatex:!1,quantifierScope:"tight",timeDerivativeVariable:"t"},r=dE(ti(n)??n,e._indexedLatexDictionary,{...i,...t});if(r===null)throw Error("Failed to parse LaTeX string");let{canonical:o,structural:s}=aa(t?.form);return Kn(e,r,{canonical:o,structural:s})}var Vl=class{_timeLimit=2e3;_iterationLimit=1024;_recursionLimit=1024;_deadline=void 0;_isVerifying=!1;get timeLimit(){return this._timeLimit}set timeLimit(n){this._timeLimit=n<=0?Number.POSITIVE_INFINITY:n}get iterationLimit(){return this._iterationLimit}set iterationLimit(n){this._iterationLimit=n<=0?Number.POSITIVE_INFINITY:n}get recursionLimit(){return this._recursionLimit}set recursionLimit(n){this._recursionLimit=n<=0?Number.POSITIVE_INFINITY:n}get deadline(){return this._deadline}set deadline(n){this._deadline=n}get timeRemaining(){return this._deadline===void 0?Number.POSITIVE_INFINITY:this._deadline-Date.now()}get isVerifying(){return this._isVerifying}set isVerifying(n){this._isVerifying=n}shouldContinueExecution(){return this._deadline===void 0||this._deadline>=Date.now()}};function ha(e,n){let t=e[n];if(!t)throw new Error(`Common symbol "${n}" failed to initialize`);return t}var Bl=class{constructor(n){this.engine=n}initializeCommonNumbers(){return{Zero:new Sn(this.engine,0),One:new Sn(this.engine,1),Half:new Sn(this.engine,{rational:[1,2]}),NegativeOne:new Sn(this.engine,-1),Two:new Sn(this.engine,2),NaN:new Sn(this.engine,Number.NaN),PositiveInfinity:new Sn(this.engine,Number.POSITIVE_INFINITY),NegativeInfinity:new Sn(this.engine,Number.NEGATIVE_INFINITY),I:new Sn(this.engine,{im:1}),ComplexInfinity:new Sn(this.engine,{re:1/0,im:1/0})}}bootstrapLibraries(n){let t=oE(n);sE(this.engine,t);let i=Vm(t);i.length>0&&(this.engine.latexDictionary=i)}initializeCommonSymbolBindings(n){return Mx(this.engine,n),{True:ha(n,"True"),False:ha(n,"False"),Pi:ha(n,"Pi"),E:ha(n,"ExponentialE"),Nothing:ha(n,"Nothing")}}};function LI(e){let n=[],t=e;for(;t;)t.types&&n.push(...Object.keys(t.types)),t=t.parent;return n}function FI(e,n){let t=e;for(;t;){if(t.types?.[n])return t.types[n];t=t.parent}}function hE(e){return{get names(){return LI(e.context.lexicalScope)},resolve(n){return FI(e.context.lexicalScope,n)},forward(n){let t={kind:"reference",name:n,alias:!1,def:void 0};return e.context.lexicalScope.types??={},e.context.lexicalScope.types[n]=t,t}}}function Jl(e,n,t){let i;typeof n=="string"?i=e.string(n):i=e.function("ErrorCode",n.map(s=>e.string(s)));let r;t&&cr(t)?r=e.function("LatexString",[e.string(ti(t))]):typeof t=="string"&&t.length>0&&(r=e.string(t));let o=[e.box(i)];return r&&o.push(r),e.function("Error",o)}function bE(e,n,t,i){return t?Jl(e,["incompatible-type",_e(n),t.toString()],i):Jl(e,["incompatible-type",_e(n)],i)}var Ym=null,Qm=null;function yE(e){Qm=e}function er(){if(!Ym){if(!Qm)throw new Error("ComputeEngine class not registered. Import from the main module.");Ym=new Qm}return Ym}function nr(e){return typeof e=="string"?er().parse(e,{strict:!1}):Pa(e)?e:er().box(e)}function Xm(e){return er().parse(e,{strict:!1})}function Km(e){return nr(e).simplify()}function ed(e){return nr(e).evaluate()}function nd(e){return nr(e).N()}function td(e,n){er().declare(e,n)}function id(e,n){er().assign(e,n)}function rd(e){return Ne(nr(e))}function od(e,n){return nr(e).solve(n)}function sd(e){return wr(nr(e))}function ad(e){return gi(nr(e))}function ud(e,n){return Go(nr(e),n)}var xE={Add:["+",11],Negate:["-",14],Subtract:["-",11],Multiply:["*",12],Divide:["/",13],Power:["**",15],Equal:["==",8],NotEqual:["!=",8],LessEqual:["<=",9],GreaterEqual:[">=",9],Less:["<",9],Greater:[">",9],And:["and",4],Or:["or",3],Not:["not",14]},EE={Add:(e,n)=>e.length===0?"0":e.length===1?n(e[0]):e.map(t=>n(t)).join(" + "),Multiply:(e,n)=>e.length===0?"1":e.length===1?n(e[0]):e.map(t=>n(t)).join(" * "),Subtract:(e,n)=>{if(e.length===0)return"0";if(e.length===1)return n(e[0]);if(e.length===2)return`${n(e[0])} - ${n(e[1])}`;let t=n(e[0]);for(let i=1;i<e.length;i++)t=`${t} - ${n(e[i])}`;return t},Divide:(e,n)=>{if(e.length===0)return"1";if(e.length===1)return n(e[0]);if(e.length===2)return`${n(e[0])} / ${n(e[1])}`;let t=n(e[0]);for(let i=1;i<e.length;i++)t=`${t} / ${n(e[i])}`;return t},Sin:(e,n)=>C.isComplexValued(e[0])?`cmath.sin(${n(e[0])})`:`np.sin(${n(e[0])})`,Cos:(e,n)=>C.isComplexValued(e[0])?`cmath.cos(${n(e[0])})`:`np.cos(${n(e[0])})`,Tan:(e,n)=>C.isComplexValued(e[0])?`cmath.tan(${n(e[0])})`:`np.tan(${n(e[0])})`,Arcsin:(e,n)=>C.isComplexValued(e[0])?`cmath.asin(${n(e[0])})`:`np.arcsin(${n(e[0])})`,Arccos:(e,n)=>C.isComplexValued(e[0])?`cmath.acos(${n(e[0])})`:`np.arccos(${n(e[0])})`,Arctan:(e,n)=>C.isComplexValued(e[0])?`cmath.atan(${n(e[0])})`:`np.arctan(${n(e[0])})`,Arctan2:"np.arctan2",Sinh:(e,n)=>C.isComplexValued(e[0])?`cmath.sinh(${n(e[0])})`:`np.sinh(${n(e[0])})`,Cosh:(e,n)=>C.isComplexValued(e[0])?`cmath.cosh(${n(e[0])})`:`np.cosh(${n(e[0])})`,Tanh:(e,n)=>C.isComplexValued(e[0])?`cmath.tanh(${n(e[0])})`:`np.tanh(${n(e[0])})`,Arsinh:"np.arcsinh",Arcosh:"np.arccosh",Artanh:"np.arctanh",Cot:([e],n)=>{if(e===null)throw new Error("Cot: no argument");return`(np.cos(${n(e)}) / np.sin(${n(e)}))`},Csc:([e],n)=>{if(e===null)throw new Error("Csc: no argument");return`(1 / np.sin(${n(e)}))`},Sec:([e],n)=>{if(e===null)throw new Error("Sec: no argument");return`(1 / np.cos(${n(e)}))`},Arccot:([e],n)=>{if(e===null)throw new Error("Arccot: no argument");return`np.arctan(1 / (${n(e)}))`},Arccsc:([e],n)=>{if(e===null)throw new Error("Arccsc: no argument");return`np.arcsin(1 / (${n(e)}))`},Arcsec:([e],n)=>{if(e===null)throw new Error("Arcsec: no argument");return`np.arccos(1 / (${n(e)}))`},Coth:([e],n)=>{if(e===null)throw new Error("Coth: no argument");return`(np.cosh(${n(e)}) / np.sinh(${n(e)}))`},Csch:([e],n)=>{if(e===null)throw new Error("Csch: no argument");return`(1 / np.sinh(${n(e)}))`},Sech:([e],n)=>{if(e===null)throw new Error("Sech: no argument");return`(1 / np.cosh(${n(e)}))`},Arcoth:([e],n)=>{if(e===null)throw new Error("Arcoth: no argument");return`np.arctanh(1 / (${n(e)}))`},Arcsch:([e],n)=>{if(e===null)throw new Error("Arcsch: no argument");return`np.arcsinh(1 / (${n(e)}))`},Arsech:([e],n)=>{if(e===null)throw new Error("Arsech: no argument");return`np.arccosh(1 / (${n(e)}))`},Lb:"np.log2",Square:([e],n)=>{if(e===null)throw new Error("Square: no argument");return`np.square(${n(e)})`},Fract:([e],n)=>{if(e===null)throw new Error("Fract: no argument");return`np.modf(${n(e)})[0]`},Exp:(e,n)=>C.isComplexValued(e[0])?`cmath.exp(${n(e[0])})`:`np.exp(${n(e[0])})`,Ln:(e,n)=>C.isComplexValued(e[0])?`cmath.log(${n(e[0])})`:`np.log(${n(e[0])})`,Log:(e,n)=>e.length===1?`np.log10(${n(e[0])})`:e.length===2?`(np.log(${n(e[0])}) / np.log(${n(e[1])}))`:"np.log10",Log10:"np.log10",Log2:"np.log2",Exp2:"np.exp2",Power:(e,n)=>e.length!==2?"np.power":C.isComplexValued(e[0])||C.isComplexValued(e[1])?`(${n(e[0])} ** ${n(e[1])})`:`np.power(${n(e[0])}, ${n(e[1])})`,Sqrt:(e,n)=>C.isComplexValued(e[0])?`cmath.sqrt(${n(e[0])})`:`np.sqrt(${n(e[0])})`,Root:(e,n)=>e.length!==2?"np.power":`np.power(${n(e[0])}, 1.0 / ${n(e[1])})`,Abs:(e,n)=>C.isComplexValued(e[0])?`abs(${n(e[0])})`:`np.abs(${n(e[0])})`,Sign:"np.sign",Floor:"np.floor",Ceil:"np.ceil",Round:"np.round",Truncate:"np.trunc",Min:"np.minimum",Max:"np.maximum",Mod:"np.mod",Remainder:"np.remainder",Real:"np.real",Imaginary:"np.imag",Argument:"np.angle",Conjugate:"np.conj",Sum:"np.sum",Product:"np.prod",Mean:"np.mean",Median:"np.median",Variance:"np.var",StandardDeviation:"np.std",Dot:"np.dot",Cross:"np.cross",Norm:"np.linalg.norm",Determinant:"np.linalg.det",Inverse:"np.linalg.inv",Transpose:"np.transpose",MatrixMultiply:"np.matmul",Equal:"np.equal",NotEqual:"np.not_equal",Less:"np.less",LessEqual:"np.less_equal",Greater:"np.greater",GreaterEqual:"np.greater_equal",And:"np.logical_and",Or:"np.logical_or",Not:"np.logical_not",Erf:"scipy.special.erf",Erfc:"scipy.special.erfc",Gamma:"scipy.special.gamma",GammaLn:"scipy.special.loggamma",Factorial:"scipy.special.factorial",List:(e,n)=>`[${e.map(t=>n(t)).join(", ")}]`,Matrix:(e,n)=>`np.array(${n(e[0])})`,Tuple:(e,n)=>`(${e.map(t=>n(t)).join(", ")})`,Sequence:(e,n)=>`np.array([${e.map(t=>n(t)).join(", ")}])`,Range:(e,n)=>e.length===1?`np.arange(${n(e[0])})`:e.length===2?`np.arange(${n(e[0])}, ${n(e[1])})`:e.length===3?`np.arange(${n(e[0])}, ${n(e[1])}, ${n(e[2])})`:"np.arange"},ba=class{includeImports;useScipy;constructor(n={}){this.includeImports=n.includeImports??!1,this.useScipy=n.useScipy??!1}getOperators(){return xE}getFunctions(){return EE}createTarget(n={}){return{language:"python",operators:t=>xE[t],functions:t=>EE[t],var:t=>{let i={Pi:"np.pi",ExponentialE:"np.e",ImaginaryUnit:"1j",Infinity:"np.inf",NaN:"np.nan",GoldenRatio:"((1 + np.sqrt(5)) / 2)",CatalanConstant:"0.915965594177219015054603514932384110774",EulerGamma:"0.5772156649015328606065120900824024310421"};return t in i?i[t]:t},complex:(t,i)=>`complex(${t}, ${i})`,string:t=>JSON.stringify(t),number:t=>isFinite(t)?t.toString():t===1/0?"np.inf":t===-1/0?"-np.inf":"np.nan",indent:0,ws:t=>t??"",preamble:"",...n}}compile(n,t={}){return{target:"python",success:!0,code:this.compileToSource(n,t)}}compileToSource(n,t={}){let i=this.createTarget(),r=C.compile(n,i);if(this.includeImports){let o=`import numpy as np
|
|
1002
|
+
`;return o+=`import cmath
|
|
1003
|
+
`,this.useScipy&&(o+=`import scipy.special
|
|
1004
|
+
`),`${o}
|
|
1005
|
+
${r}`}return r}compileFunction(n,t,i,r){let o=this.createTarget(),s=C.compile(n,o),a=i.join(", "),u="";return this.includeImports&&(u+=`import numpy as np
|
|
1006
|
+
`,u+=`import cmath
|
|
1007
|
+
`,this.useScipy&&(u+=`import scipy.special
|
|
1008
|
+
`),u+=`
|
|
1009
|
+
`),u+=`def ${t}(${a}):
|
|
1010
|
+
`,r&&(u+=` r"""${r}"""
|
|
1011
|
+
`),u+=` return ${s}
|
|
1012
|
+
`,u}compileVectorized(n,t,i,r){let s=this.compileFunction(n,`_${t}_scalar`,i,r)+`
|
|
1013
|
+
`;return s+=`# Vectorized version
|
|
1014
|
+
`,s+=`${t} = np.vectorize(_${t}_scalar)
|
|
1015
|
+
`,s}compileLambda(n,t){let i=this.createTarget(),r=C.compile(n,i);return`lambda ${t.join(", ")}: ${r}`}};var qI=/^(Sin|Cos|Tan|Cot|Sec|Csc)$/;function zl(e){return qI.test(e.operator)?!0:m(e)?e.ops.some(zl):!1}function tr(e,...n){return n.includes(e.operator)?!0:m(e)?e.ops.some(t=>tr(t,...n)):!1}function Ge(e,n){let t=e.engine;if(m(e)&&e.ops.length>0){let i=e,r=i.ops.map(s=>Ge(s,n));r.some((s,a)=>s!==i.ops[a])&&(e=t._fn(i.operator,r))}return n(e)??e}function ld(e,n){if(!m(e)||!m(n))return!1;let t=e.op1,i=n.op1;return t!==void 0&&i!==void 0&&t.isSame(i)}function VI(e){let n=e.engine,t=e.operator;if(!m(e))return;let i=e.op1;if(i){if(t==="Sec")return n.One.div(n._fn("Cos",[i]));if(t==="Csc")return n.One.div(n._fn("Sin",[i]))}}function SE(e){return Ge(e,VI)}function BI(e){let n=e.engine,t=e.operator;if(!m(e))return;let i=e.op1;if(i){if(t==="Tan")return n._fn("Sin",[i]).div(n._fn("Cos",[i]));if(t==="Cot")return n._fn("Cos",[i]).div(n._fn("Sin",[i]))}}function TE(e){return Ge(e,BI)}function JI(e){let n=e.engine;if(e.operator!=="Divide"||!m(e))return;let t=e.op1,i=e.op2;if(!(!t||!i)){if(t.operator==="Sin"&&i.operator==="Cos"&&ld(t,i))return m(t)?n._fn("Tan",[t.op1]):void 0;if(t.operator==="Cos"&&i.operator==="Sin"&&ld(t,i))return m(t)?n._fn("Cot",[t.op1]):void 0}}function IE(e){return Ge(e,JI)}function zI(e){if(m(e,"Negate"))return e.op1;if(m(e,"Multiply")){let n=e.ops.findIndex(t=>t.isSame(-1));if(n>=0){let t=e.ops.filter((i,r)=>r!==n);return t.length===1?t[0]:e.engine._fn("Multiply",t)}}}function UI(e){let n=e.engine,t=e.operator;if(!m(e))return;let i=e.op1;if(!i)return;let r=zI(i);if(r){if(t==="Cos")return n._fn("Cos",[r]);if(t==="Sec")return n._fn("Sec",[r]);if(t==="Sin")return n._fn("Sin",[r]).neg();if(t==="Tan")return n._fn("Tan",[r]).neg();if(t==="Csc")return n._fn("Csc",[r]).neg();if(t==="Cot")return n._fn("Cot",[r]).neg()}}function wE(e){return Ge(e,UI)}function jI(e){let n=e.engine;if(e.operator!=="Power"||!m(e))return;let t=e.op1,i=e.op2;if(!t||!i||t.operator!=="Sin"||!i.isSame(2)||!m(t))return;let r=t.op1;if(r)return n.One.sub(n._fn("Cos",[r]).pow(2))}function cd(e){return Ge(e,jI)}function GI(e){let n=e.engine;if(e.operator!=="Power"||!m(e))return;let t=e.op1,i=e.op2;if(!t||!i||t.operator!=="Cos"||!i.isSame(2)||!m(t))return;let r=t.op1;if(r)return n.One.sub(n._fn("Sin",[r]).pow(2))}function ME(e){return Ge(e,GI)}function ZI(e){let n=e.engine;if(e.operator!=="Power"||!m(e))return;let t=e.op1,i=e.op2;if(!t||!i||t.operator!=="Cos"||!i.isSame(2)||!m(t))return;let r=t.op1;if(r)return n.One.add(n._fn("Cos",[r.mul(2)])).div(2)}function kE(e){return Ge(e,ZI)}function HI(e){let n=e.engine;if(m(e,"Divide")){let i=e.op1,r=e.op2;if(!i||!r||!r.isSame(2))return;if(m(i,"Add")&&i.ops.length===2)return vE(n,i.ops)}let t=i=>!!(i.re===.5&&i.im===0||i.isSame(n.Half));if(m(e,"Multiply")){let i=e.ops.findIndex(r=>t(r));if(i>=0){let r=e.ops.filter((o,s)=>s!==i);if(r.length===1&&r[0].operator==="Add"){let o=r[0];if(m(o)&&o.ops.length===2)return vE(n,o.ops)}}}if(m(e,"Add")&&e.ops.length===2){let i,r,o=!1,s=a=>a.re===-.5&&a.im===0;for(let a of e.ops){if(t(a)){i=a;continue}let u=a,l=!1;if(m(a,"Negate")&&(l=!0,u=a.op1),m(u,"Divide")&&u.op2?.isSame(2)){let c=u.op1;if(c?.operator==="Cos"){r=c,o=l;continue}}if(m(u,"Multiply")){let c=u.ops.findIndex(p=>t(p));if(c>=0){let p=u.ops.filter((d,g)=>g!==c);if(p.length===1&&p[0].operator==="Cos"){r=p[0],o=l;continue}}let f=u.ops.findIndex(p=>s(p));if(f>=0){let p=u.ops.filter((d,g)=>g!==f);if(p.length===1&&p[0].operator==="Cos"){r=p[0],o=!l;continue}}}}if(i&&r){if(!m(r))return;let a=r.op1;if(!a)return;let u;if(m(a,"Multiply")){let l=a.ops.findIndex(c=>c.isSame(2));if(l>=0){let c=a.ops.filter((f,p)=>p!==l);u=c.length===1?c[0]:n._fn("Multiply",c)}}return u?o?n._fn("Sin",[u]).pow(2):n._fn("Cos",[u]).pow(2):void 0}}}function vE(e,n){let t=-1,i=-1,r=!1;for(let u=0;u<n.length;u++)if(n[u].isSame(1))t=u;else if(n[u].operator==="Cos")i=u,r=!1;else if(n[u].operator==="Negate"){let l=n[u];m(l)&&l.op1?.operator==="Cos"&&(i=u,r=!0)}if(t<0||i<0)return;let o;if(r){let u=n[i];if(!m(u))return;o=u.op1}else o=n[i];if(!m(o))return;let s=o.op1;if(!s)return;let a;if(m(s,"Multiply")){let u=s.ops.findIndex(l=>l.isSame(2));if(u>=0){let l=s.ops.filter((c,f)=>f!==u);a=l.length===1?l[0]:e._fn("Multiply",l)}}if(a)return r?e._fn("Sin",[a]).pow(2):e._fn("Cos",[a]).pow(2)}function fd(e){return Ge(e,HI)}function WI(e){let n=e.engine;if(e.operator!=="Multiply"||!m(e))return;let t=e.ops;if(!(t.length<2))for(let i=0;i<t.length;i++)for(let r=i+1;r<t.length;r++){let o=t[i],s=t[r];if(!m(o)||!m(s))continue;let a=o.op1,u=s.op1;if(!a||!u)continue;let l;if(o.operator==="Sin"&&s.operator==="Cos"?l=n._fn("Sin",[a.add(u)]).add(n._fn("Sin",[a.sub(u)])).div(2):o.operator==="Cos"&&s.operator==="Sin"?l=n._fn("Sin",[a.add(u)]).sub(n._fn("Sin",[a.sub(u)])).div(2):o.operator==="Cos"&&s.operator==="Cos"?l=n._fn("Cos",[a.add(u)]).add(n._fn("Cos",[a.sub(u)])).div(2):o.operator==="Sin"&&s.operator==="Sin"&&(l=n._fn("Cos",[a.sub(u)]).sub(n._fn("Cos",[a.add(u)])).div(2)),l){let c=t.filter((f,p)=>p!==i&&p!==r);return c.length===0?l:l.mul(c.length===1?c[0]:n._fn("Multiply",c))}}}function CE(e){return Ge(e,WI)}function YI(e){let n=e.engine;if(e.operator!=="Add"||!m(e))return;let t=e.ops;if(!(t.length<2))for(let i=0;i<t.length;i++)for(let r=i+1;r<t.length;r++){let o=t[i],s=t[r],a;if(o.operator==="Sin"&&s.operator==="Sin"){if(!m(o)||!m(s))continue;let u=o.op1,l=s.op1;if(u&&l){let c=u.add(l).div(2),f=u.sub(l).div(2);a=n._fn("Sin",[c]).mul(n._fn("Cos",[f])).mul(2)}}else if(o.operator==="Cos"&&s.operator==="Cos"){if(!m(o)||!m(s))continue;let u=o.op1,l=s.op1;if(u&&l){let c=u.add(l).div(2),f=u.sub(l).div(2);a=n._fn("Cos",[c]).mul(n._fn("Cos",[f])).mul(2)}}else if(o.operator==="Sin"&&s.operator==="Negate"){if(!m(o)||!m(s)||s.op1?.operator!=="Sin")continue;let u=s.op1;if(!m(u))continue;let l=o.op1,c=u.op1;if(l&&c){let f=l.add(c).div(2),p=l.sub(c).div(2);a=n._fn("Cos",[f]).mul(n._fn("Sin",[p])).mul(2)}}else if(o.operator==="Cos"&&s.operator==="Negate"){if(!m(o)||!m(s)||s.op1?.operator!=="Cos")continue;let u=s.op1;if(!m(u))continue;let l=o.op1,c=u.op1;if(l&&c){let f=l.add(c).div(2),p=l.sub(c).div(2);a=n._fn("Sin",[f]).mul(n._fn("Sin",[p])).mul(-2)}}if(a){let u=t.filter((l,c)=>c!==i&&c!==r);return u.length===0?a:a.add(u.length===1?u[0]:n._fn("Add",u))}}}function Ul(e){return Ge(e,YI)}function QI(e){let n=e.engine,t=e.operator;if(t!=="Sin"&&t!=="Cos"||!m(e))return;let i=e.op1;if(i){if(m(i,"Add")&&i.ops.length===2){let[r,o]=i.ops;return t==="Sin"?n._fn("Sin",[r]).mul(n._fn("Cos",[o])).add(n._fn("Cos",[r]).mul(n._fn("Sin",[o]))):n._fn("Cos",[r]).mul(n._fn("Cos",[o])).sub(n._fn("Sin",[r]).mul(n._fn("Sin",[o])))}if(m(i,"Subtract")){let r=i.op1,o=i.op2;return!r||!o?void 0:t==="Sin"?n._fn("Sin",[r]).mul(n._fn("Cos",[o])).sub(n._fn("Cos",[r]).mul(n._fn("Sin",[o]))):n._fn("Cos",[r]).mul(n._fn("Cos",[o])).add(n._fn("Sin",[r]).mul(n._fn("Sin",[o])))}}}function AE(e){return Ge(e,QI)}function XI(e){let n=e.engine;if(e.operator!=="Add"||!m(e))return;let t=e.ops;if(!(t.length<2))for(let i=0;i<t.length;i++)for(let r=i+1;r<t.length;r++){let o=t[i],s=t[r],a=I=>{if(I.operator!=="Multiply"||!m(I))return null;let M=I.ops;if(M.length!==2)return null;let[w,k]=M;return w.operator==="Sin"&&k.operator==="Cos"?{sin:w,cos:k}:w.operator==="Cos"&&k.operator==="Sin"?{sin:k,cos:w}:null},u=I=>{if(I.operator!=="Multiply"||!m(I))return null;let M=I.ops;if(M.length!==2)return null;let[w,k]=M;return w.operator==="Cos"&&k.operator==="Cos"?{cos1:w,cos2:k}:null},l=I=>{if(I.operator!=="Multiply"||!m(I))return null;let M=I.ops;if(M.length!==2)return null;let[w,k]=M;return w.operator==="Sin"&&k.operator==="Sin"?{sin1:w,sin2:k}:null},c=I=>m(I)?I.op1:void 0,f=a(o),p=a(s),d=m(o,"Negate")&&o.op1?a(o.op1):null,g=m(s,"Negate")&&s.op1?a(s.op1):null;if(f&&p){let I=c(f.sin),M=c(f.cos),w=c(p.sin),k=c(p.cos);if(I&&M&&w&&k&&I.isSame(k)&&M.isSame(w)){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Sin",[I.add(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}if(f&&g){let I=c(f.sin),M=c(f.cos),w=c(g.sin),k=c(g.cos);if(I&&M&&w&&k&&I.isSame(k)&&M.isSame(w)){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Sin",[I.sub(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}if(d&&p){let I=c(d.sin),M=c(d.cos),w=c(p.sin),k=c(p.cos);if(I&&M&&w&&k&&w.isSame(M)&&k.isSame(I)){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Sin",[w.sub(k)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}let h=u(o),b=u(s),y=l(o),x=l(s),N=m(o,"Negate")&&o.op1?l(o.op1):null,T=m(s,"Negate")&&s.op1?l(s.op1):null;if(h&&T){let I=c(h.cos1),M=c(h.cos2),w=c(T.sin1),k=c(T.sin2);if(I&&M&&w&&k&&(I.isSame(w)&&M.isSame(k)||I.isSame(k)&&M.isSame(w))){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Cos",[I.add(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}if(N&&b){let I=c(b.cos1),M=c(b.cos2),w=c(N.sin1),k=c(N.sin2);if(I&&M&&w&&k&&(I.isSame(w)&&M.isSame(k)||I.isSame(k)&&M.isSame(w))){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Cos",[I.add(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}if(h&&x){let I=c(h.cos1),M=c(h.cos2),w=c(x.sin1),k=c(x.sin2);if(I&&M&&w&&k&&(I.isSame(w)&&M.isSame(k)||I.isSame(k)&&M.isSame(w))){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Cos",[I.sub(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}if(y&&b){let I=c(b.cos1),M=c(b.cos2),w=c(y.sin1),k=c(y.sin2);if(I&&M&&w&&k&&(I.isSame(w)&&M.isSame(k)||I.isSame(k)&&M.isSame(w))){let P=t.filter((G,U)=>U!==i&&U!==r),F=n._fn("Cos",[I.sub(M)]);return P.length===0?F:F.add(P.length===1?P[0]:n._fn("Add",P))}}}}function jl(e){return Ge(e,XI)}function KI(e){let n=e.engine,t=e.operator;if(t!=="Sin"&&t!=="Cos"||!m(e))return;let i=e.op1;if(i&&m(i,"Multiply")){let r=i.ops,o=r.findIndex(s=>s.isSame(2));if(o>=0){let s=r.filter((u,l)=>l!==o),a=s.length===1?s[0]:n._fn("Multiply",s);return t==="Sin"?n._fn("Sin",[a]).mul(n._fn("Cos",[a])).mul(2):n._fn("Cos",[a]).pow(2).mul(2).sub(n.One)}}}function pd(e){return Ge(e,KI)}function ew(e){let n=e.engine;if(m(e,"Multiply")){let t=e.ops,i=t.findIndex(r=>r.isSame(2));if(i>=0){let r=t.filter((a,u)=>u!==i),o,s;for(let a of r)a.operator==="Sin"&&!o?o=a:a.operator==="Cos"&&!s&&(s=a);if(o&&s&&ld(o,s)){if(!m(o))return;let a=r.filter(l=>l!==o&&l!==s),u=n._fn("Sin",[o.op1.mul(2)]);return a.length===0?u:u.mul(a.length===1?a[0]:n._fn("Multiply",a))}}}if(m(e,"Add")&&e.ops.length===2){let[t,i]=e.ops;if(m(t,"Power")&&t.op1?.operator==="Cos"&&t.op2?.isSame(2)&&i.operator==="Negate"&&m(i)&&i.op1?.operator==="Power"&&m(i.op1)&&i.op1.op1?.operator==="Sin"&&i.op1.op2?.isSame(2)){let u=t.op1,l=i.op1;if(m(u)&&m(l)){let c=l.op1;if(m(c)){let f=u.op1,p=c.op1;if(f&&p&&f.isSame(p))return n._fn("Cos",[f.mul(2)])}}}let r=u=>{if(!m(u,"Multiply"))return;let l=u.ops.findIndex(p=>p.isSame(2));if(l<0)return;let c=u.ops.filter((p,d)=>d!==l);if(c.length!==1)return;let f=c[0];if(m(f,"Power")&&f.op1?.operator==="Cos"&&f.op2?.isSame(2)){let p=f.op1;if(m(p))return p.op1}},o=r(t);if(o&&(i.isSame(-1)||m(i,"Negate")&&i.op1?.isSame(1)))return n._fn("Cos",[o.mul(2)]);if(o=r(i),o&&(t.isSame(-1)||m(t,"Negate")&&t.op1?.isSame(1)))return n._fn("Cos",[o.mul(2)]);let s=u=>{if(!m(u,"Multiply"))return;let l=u.ops.findIndex(p=>p.isSame(2));if(l<0)return;let c=u.ops.filter((p,d)=>d!==l);if(c.length!==1)return;let f=c[0];if(m(f,"Power")&&f.op1?.operator==="Sin"&&f.op2?.isSame(2)){let p=f.op1;if(m(p))return p.op1}};if(t.isSame(1)&&m(i,"Negate")&&i.op1){let u=s(i.op1);if(u)return n._fn("Cos",[u.mul(2)])}if(i.isSame(1)&&m(t,"Negate")&&t.op1){let u=s(t.op1);if(u)return n._fn("Cos",[u.mul(2)])}let a=u=>{if(!m(u,"Multiply"))return;let l=u.ops.findIndex(p=>p.isSame(-2));if(l<0)return;let c=u.ops.filter((p,d)=>d!==l);if(c.length!==1)return;let f=c[0];if(m(f,"Power")&&f.op1?.operator==="Sin"&&f.op2?.isSame(2)){let p=f.op1;if(m(p))return p.op1}};if(t.isSame(1)){let u=a(i);if(u)return n._fn("Cos",[u.mul(2)])}if(i.isSame(1)){let u=a(t);if(u)return n._fn("Cos",[u.mul(2)])}}}function RE(e){return Ge(e,ew)}function nw(e){let n=e.engine;if(e.operator!=="Tan"||!m(e))return;let t=e.op1;if(t){if(m(t,"Add")&&t.ops.length===2){let[i,r]=t.ops,o=n._fn("Tan",[i]),s=n._fn("Tan",[r]);return o.add(s).div(n.One.sub(o.mul(s)))}if(m(t,"Subtract")){let i=t.op1,r=t.op2;if(!i||!r)return;let o=n._fn("Tan",[i]),s=n._fn("Tan",[r]);return o.sub(s).div(n.One.add(o.mul(s)))}}}function PE(e){return Ge(e,nw)}var tw=[{value:0,angle:[0,1]},{value:1/Math.sqrt(3),angle:[1,6]},{value:1,angle:[1,4]},{value:Math.sqrt(3),angle:[1,3]},{value:2-Math.sqrt(3),angle:[1,12]},{value:2+Math.sqrt(3),angle:[5,12]}];function iw(e,n=1e-10){for(let t of tw)if(Math.abs(t.value-e)<n)return t.angle}function rw(e){if(e.operator!=="Multiply"||!m(e))return;let n=e.ops;if(n.length<2)return;let t=[],i=1;for(let r of n)if(m(r,"Tan")&&r.op1)t.push(r.op1);else if(m(r,"Negate")&&r.op1?.operator==="Sqrt"){let o=r.op1;if(m(o)){let s=o.op1;if(E(s)&&typeof s.re=="number")i*=-Math.sqrt(s.re);else return}else return}else if(m(r,"Sqrt")){let o=r.op1;if(o&&E(o)&&typeof o.re=="number")i*=Math.sqrt(o.re);else return}else if(E(r)&&typeof r.re=="number")i*=r.re;else return;if(t.length===2)return[i,t[0],t[1]]}function _E(e){if(m(e,"Multiply")){let n=!1,t;for(let i of e.ops)if(_(i,"Pi"))n=!0;else if(E(i)&&typeof i.re=="number"){let r=i.re;for(let o=1;o<=36;o++){let s=Math.round(r*o);if(Math.abs(s/o-r)<1e-10){t=[s,o];break}}}if(n&&t)return t}if(_(e,"Pi"))return[1,1]}function ow(e){let n=e.engine;if(e.operator!=="Add"||!m(e))return;let t=e.ops;if(t.length!==3)return;let i=[],r;for(let x=0;x<t.length;x++){let N=t[x];if(m(N,"Tan")&&N.op1)i.push({arg:N.op1,index:x});else{let T=rw(N);T&&(r={coef:T[0],arg1:T[1],arg2:T[2],index:x})}}if(i.length!==2||!r)return;let[o,s]=i,a=o.arg.isSame(r.arg1)||o.arg.isSame(r.arg2),u=s.arg.isSame(r.arg1)||s.arg.isSame(r.arg2),l=o.arg.isSame(r.arg2)||o.arg.isSame(r.arg1),c=s.arg.isSame(r.arg2)||s.arg.isSame(r.arg1);if(!(a&&c||u&&l))return;let f=-r.coef;if(f<=0)return;let p=iw(f);if(!p)return;let d=_E(o.arg),g=_E(s.arg);if(!d||!g)return;let h=NE(NE(d[1],g[1]),p[1]);if(d[0]*(h/d[1])+g[0]*(h/g[1])+p[0]*(h/p[1])!==h)return;let y=n._fn("Multiply",[n.number([p[0],p[1]]),n.symbol("Pi")]);return n._fn("Tan",[y]).neg()}function NE(e,n){return Math.abs(e*n)/sw(e,n)}function sw(e,n){for(e=Math.abs(e),n=Math.abs(n);n;){let t=n;n=e%n,e=t}return e}function DE(e){return Ge(e,ow)}function aw(e){let n=e.engine;if(e.operator!=="Multiply"||!m(e))return;let t=e.ops;if(!(t.length<2))for(let i=0;i<t.length;i++)for(let r=i+1;r<t.length;r++){let o=t[i],s=t[r];if(!m(o)||!m(s))continue;let a=o.op1,u=s.op1;if(!(!a||!u)){if(o.operator==="Tan"&&s.operator==="Tan"){let l=o,c=s,f=n._fn("Cot",[a.add(u)]),p=n.One.sub(l.add(c).mul(f)),d=t.filter((g,h)=>h!==i&&h!==r);return d.length===0?p:p.mul(d.length===1?d[0]:n._fn("Multiply",d))}if(o.operator==="Cot"&&s.operator==="Cot"){let l=o,c=s,f=n._fn("Cot",[a.add(u)]),p=n.One.add(l.add(c).mul(f)),d=t.filter((g,h)=>h!==i&&h!==r);return d.length===0?p:p.mul(d.length===1?d[0]:n._fn("Multiply",d))}}}}function $E(e){return Ge(e,aw)}function uw(e){let n=e.engine;if(e.operator!=="Power"||!m(e))return;let t=e.op1,i=e.op2;if(!t||!i||!i.isSame(2)||!m(t))return;let r=t.op1;if(r){if(t.operator==="Tan")return n._fn("Sec",[r]).pow(2).sub(n.One);if(t.operator==="Cot")return n._fn("Csc",[r]).pow(2).sub(n.One);if(t.operator==="Sec")return n.One.add(n._fn("Tan",[r]).pow(2));if(t.operator==="Csc")return n.One.add(n._fn("Cot",[r]).pow(2))}}function OE(e){return Ge(e,uw)}function lw(e){let n=e.engine;if(e.operator!=="Add"||!m(e))return;let t=e.ops;if(t.length!==2)return;let i=p=>{let d=!1,g=p;if(m(p,"Negate")&&(d=!0,g=p.op1),!m(g)||g.operator!=="Power"||!g.op2?.isSame(2))return null;let h=g.op1;if(!m(h)||!h.op1)return null;let b=h.operator;return["Tan","Cot","Sec","Csc"].includes(b)?{func:b,arg:h.op1,neg:d}:null},r=i(t[0]),o=i(t[1]);if(r&&o&&r.arg.isSame(o.arg)){if(r.func==="Cot"&&!r.neg&&o.func==="Csc"&&o.neg||r.func==="Csc"&&r.neg&&o.func==="Cot"&&!o.neg)return n.number(-1);if(r.func==="Csc"&&!r.neg&&o.func==="Cot"&&o.neg||r.func==="Cot"&&r.neg&&o.func==="Csc"&&!o.neg)return n.One;if(r.func==="Tan"&&!r.neg&&o.func==="Sec"&&o.neg||r.func==="Sec"&&r.neg&&o.func==="Tan"&&!o.neg)return n.number(-1);if(r.func==="Sec"&&!r.neg&&o.func==="Tan"&&o.neg||r.func==="Tan"&&r.neg&&o.func==="Sec"&&!o.neg)return n.One}let s=-1,a=-1,u=!1;for(let p=0;p<t.length;p++){let d=t[p];d.isSame(1)?(s=p,u=!1):d.isSame(-1)||m(d,"Negate")&&d.op1?.isSame(1)?(s=p,u=!0):m(d,"Power")&&d.op2?.isSame(2)&&(a=p)}if(s<0||a<0)return;let l=t[a];if(!m(l))return;let c=l.op1;if(!c||!m(c))return;let f=c.op1;if(f){if(c.operator==="Sec"&&u)return n._fn("Tan",[f]).pow(2);if(c.operator==="Csc"&&u)return n._fn("Cot",[f]).pow(2);if(c.operator==="Tan"&&!u)return n._fn("Sec",[f]).pow(2);if(c.operator==="Cot"&&!u)return n._fn("Csc",[f]).pow(2)}}function md(e){return Ge(e,lw)}function cw(e){let n=e.engine;if(!m(e,"Multiply"))return[1,n.One,e];for(let t=0;t<e.ops.length;t++){let i=e.ops[t],r;if(E(i)&&typeof i.re=="number"&&i.im===0&&(r=i.re),r!==void 0){let o=e.ops.filter((a,u)=>u!==t),s=o.length===1?o[0]:n._fn("Multiply",o);return[r,i,s]}}return[1,n.One,e]}function fw(e){let n=e.engine;if(e.operator!=="Multiply"||!m(e))return;let t=e.ops;if(t.length<2)return;let i=[],r=[];for(let w of t)if(m(w,"Cos")&&w.op1){let k=cw(w.op1);k?i.push({arg:k[2],numericMult:k[0],symbolicCoeff:k[1]}):i.push({arg:w.op1,numericMult:1,symbolicCoeff:n.One})}else r.push(w);if(i.length<2)return;let o=i[0].arg,s=i.filter(w=>w.arg.isSame(o)),a=i.filter(w=>!w.arg.isSame(o));if(s.length<2)return;s.sort((w,k)=>w.numericMult-k.numericMult);let u=[],l=[],c=[...s],f=c[0].numericMult;if(f>0){u.push(c[0]);let w=new Set([0]),k=f*2;for(;;){let P=c.findIndex((F,G)=>!w.has(G)&&Math.abs(F.numericMult-k)<1e-10);if(P===-1)break;u.push(c[P]),w.add(P),k*=2}l=c.filter((P,F)=>!w.has(F))}if(u.length<2)return;let p=u[0].numericMult,d=[...r];for(let w of l){let k=w.symbolicCoeff.isSame(n.One)?w.arg:n._fn("Multiply",[w.symbolicCoeff,w.arg]);d.push(n._fn("Cos",[k]))}for(let w of a){let k=w.symbolicCoeff.isSame(n.One)?w.arg:n._fn("Multiply",[w.symbolicCoeff,w.arg]);d.push(n._fn("Cos",[k]))}let g=u.length,h=u[0].symbolicCoeff,b=Math.pow(2,g);if(_(o,"Pi")){let w=1/(b+1);if(Math.abs(p-w)<1e-10){let k=n.number([1,b]);return d.length===0?k:k.mul(d.length===1?d[0]:n._fn("Multiply",d))}}let y=h.mul(b),x=h.isSame(n.One)?o:n._fn("Multiply",[h,o]),N=n._fn("Multiply",[y,o]),T=n._fn("Sin",[N]),I=n._fn("Sin",[x]),M=T.div(n.number(b).mul(I));return d.length===0?M:M.mul(d.length===1?d[0]:n._fn("Multiply",d))}function LE(e){return Ge(e,fw)}function pw(e){if(m(e,"Power")&&e.op2?.isSame(2)){let n=e.op1;if(m(n,"Sin")&&n.op1)return{func:"Sin",arg:n.op1,coef:1};if(m(n,"Cos")&&n.op1)return{func:"Cos",arg:n.op1,coef:1}}if(m(e,"Multiply")){let n=1,t;for(let i of e.ops)if(m(i,"Power")&&i.op2?.isSame(2)){let r=i.op1;(r?.operator==="Sin"||r?.operator==="Cos")&&(t=i)}else typeof i.re=="number"&&i.im===0&&(n*=i.re);if(m(t)){let i=t.op1;if(m(i,"Sin")&&i.op1)return{func:"Sin",arg:i.op1,coef:n};if(m(i,"Cos")&&i.op1)return{func:"Cos",arg:i.op1,coef:n}}}return null}function mw(e){let n=e.engine;if(e.operator!=="Add"||!m(e))return;let t=e.ops;if(t.length<2)return;let i=[],r=[],o=[];for(let s=0;s<t.length;s++){let a=t[s],u=pw(a);u?i.push({...u,index:s}):typeof a.re=="number"&&a.im===0&&E(a)?o.push({value:a.re,index:s}):r.push({expr:a,index:s})}for(let s=0;s<i.length;s++)for(let a=s+1;a<i.length;a++){let u=i[s],l=i[a];if(u.arg.isSame(l.arg)&&(u.func==="Sin"&&l.func==="Cos"||u.func==="Cos"&&l.func==="Sin")&&Math.abs(u.coef-l.coef)<1e-10){let c=u.coef,f=new Set([u.index,l.index]),p=t.filter((d,g)=>!f.has(g));return p.length===0?n.number(c):c===1?n._fn("Add",[n.One,...p]):n._fn("Add",[n.number(c),...p])}}for(let s of i)if(s.coef<0){let a=Math.abs(s.coef);for(let u of o)if(Math.abs(u.value-a)<1e-10){let l=new Set([s.index,u.index]),c=t.filter((d,g)=>!l.has(g)),f=s.func==="Sin"?"Cos":"Sin",p=n._fn(f,[s.arg]).pow(2).mul(a);return c.length===0?p:n._fn("Add",[p,...c])}}}function FE(e){return Ge(e,mw)}var dw=new Set(["Sin","Cos","Tan","Cot","Sec","Csc"]);function dd(e){let n=0;if(dw.has(e.operator)&&(n=1),m(e))for(let t of e.ops)n+=dd(t);return n}function gd(e){if(_(e)||E(e))return 1;let n=1;if(m(e))for(let t of e.ops)n+=gd(t);return n}function qE(e){let n=dd(e),t=gd(e);return n*1e3+t}var VE=qE;function hd(e,n){if(e.length===0)throw new Error("bestOf called with empty array");if(e.length===1)return e[0];let t=e[0],i=n(t);for(let r=1;r<e.length;r++){let o=n(e[r]);o<i&&(t=e[r],i=o)}return t}function ya(e,n){let t=n(e);return t.isSame(e)?null:t}function BE(e,n){let t=ya(e,cd),i=ya(e,ME),r=[e];return t&&r.push(t),i&&r.push(i),hd(r,n)}function gw(e,n){return BE(e,n)}function hw(e,n){let t=ya(e,CE),i=[e];if(t){i.push(t);let r=ya(t,jl);r&&i.push(r)}return hd(i,n)}function bw(e,n){let t=ya(e,jl),i=[e];return t&&i.push(t),hd(i,n)}function yw(e,n){let t=PE(e);return t=$E(t),t}function xw(e,n){let t=e;return t=AE(t),t=pd(t),t=cd(t),t=kE(t),t=pd(t),t=hw(t,n),t=BE(t,n),t=Ul(t),t=gw(t,n),t=Ul(t),t=bw(t,n),t}function JE(e,n){if(!zl(e))return;let t=n?.measure??VE,i=n?.maxIterations??100,r=e,o=0,s=e,a=t(e),u=T=>{let I=t(T);I<a&&(s=T,a=I)};r=wE(r),u(r);let l=md(r);u(l);let c=OE(r);u(c),r=s;let f=fd(r);if(u(f),r=s,tr(r,"Sec","Csc")&&(r=SE(r),s=r,a=t(r)),tr(r,"Tan","Cot")){let T=yw(r,t);u(T),r=T}if(tr(r,"Tan","Cot")&&(r=TE(r),u(r)),tr(r,"Sin","Cos")){let T=Ul(r);u(T),r=s}if(tr(r,"Sin","Cos")){let T=t(r);for(;o<i;){o++;let I=xw(r,t),M=t(I);if(u(I),M>=T)break;r=I,T=M}}let p=IE(s);u(p);let d=RE(s);u(d);let g=LE(s);u(g);let h=fd(s);u(h);let b=md(s);u(b);let y=jl(s);u(y);let x=FE(s);u(x);let N=DE(s);if(u(N),s.operator==="Add"||s.operator==="Multiply"){let T=e.engine.box(s.json);u(T)}if(!s.isSame(e))return{value:s,because:"fu"}}var Vr=class e{True;False;Pi;E;Nothing;Zero;One;Half;NegativeOne;Two;I;NaN;PositiveInfinity;NegativeInfinity;ComplexInfinity;decimalSeparator=".";_numericConfiguration;_cacheStore=new yl;_runtimeState=new Vl;_configurationLifecycle=new Dl;_cost;_simplificationRules=new Ll([...Zy]);_compilationTargets=new Rl;_fuAlgorithm=JE;_commonSymbols={Pi:null,True:null,False:null,All:null,Nothing:null,None:null,Undefined:null,ImaginaryUnit:null,ExponentialE:null};_commonNumbers={"-5":null,"-4":null,"-3":null,"-2":null,2:null,3:null,4:null,5:null,6:null,7:null,8:null,9:null,10:null,11:null,12:null,36:null};_evalContextStack=[];get context(){return this._evalContextStack[this._evalContextStack.length-1]}get contextStack(){return[...this._evalContextStack]}set contextStack(n){this._evalContextStack=[...n]}get _BIGNUM_NAN(){return this._numericConfiguration.bignumNaN}get _BIGNUM_ZERO(){return this._numericConfiguration.bignumZero}get _BIGNUM_ONE(){return this._numericConfiguration.bignumOne}get _BIGNUM_TWO(){return this._numericConfiguration.bignumTwo}get _BIGNUM_HALF(){return this._numericConfiguration.bignumHalf}get _BIGNUM_PI(){return this._numericConfiguration.bignumPi}get _BIGNUM_NEGATIVE_ONE(){return this._numericConfiguration.bignumNegativeOne}get _typeResolver(){return hE(this)}declareType(n,t,i){nx(this,n,t,i)}get trace(){return this._evalContextStack.map(n=>n.name).filter(n=>n!==void 0).reverse()}get _generation(){return this._configurationLifecycle.generation}set _generation(n){this._configurationLifecycle.generation=n}strict;_latexDictionaryState=new Ol(()=>e.getLatexDictionary());static getStandardLibrary(n){return ml(n)}static getLatexDictionary(n){return aE(n)}constructor(n){if(n!==void 0&&typeof n!="object")throw Error("Unexpected argument");this.strict=!0,this._numericConfiguration=new Fl({precision:n?.precision,tolerance:n?.tolerance??"auto",angularUnit:"rad"});let t=new Bl(this),i=t.initializeCommonNumbers();this.Zero=i.Zero,this.One=i.One,this.Half=i.Half,this.NegativeOne=i.NegativeOne,this.Two=i.Two,this.NaN=i.NaN,this.PositiveInfinity=i.PositiveInfinity,this.NegativeInfinity=i.NegativeInfinity,this.I=i.I,this.ComplexInfinity=i.ComplexInfinity,this._reset(),this.pushScope(void 0,"system"),this.declareType("limits","expression<Limits>"),t.bootstrapLibraries(n?.libraries);let r=t.initializeCommonSymbolBindings(this._commonSymbols);this.True=r.True,this.False=r.False,this.Pi=r.Pi,this.E=r.E,this.Nothing=r.Nothing,this.pushScope(void 0,"global"),this._compilationTargets.registerDefaults(),Wd(this)}toJSON(){return"[ComputeEngine]"}[Symbol.toStringTag]="ComputeEngine";get latexDictionary(){return this._latexDictionaryState.dictionary}set latexDictionary(n){this._latexDictionaryState.dictionary=n}get _indexedLatexDictionary(){return this._latexDictionaryState.indexedDictionary}_reset(){this._configurationLifecycle.reset({refreshNumericConstants:()=>this._numericConfiguration.refreshConstants(),resetCommonSymbols:()=>kx(this._commonSymbols),purgeCaches:()=>this._cacheStore.purgeValues()})}listenToConfigurationChange(n){return this._configurationLifecycle.listen(n)}registerCompilationTarget(n,t){this._compilationTargets.register(n,t)}getCompilationTarget(n){return this._compilationTargets.get(n)}listCompilationTargets(){return this._compilationTargets.list()}unregisterCompilationTarget(n){this._compilationTargets.unregister(n)}_compile(n,t){return Go(n,t)}get precision(){return this._numericConfiguration.precision}set precision(n){this._numericConfiguration.setPrecision(n)&&this._reset()}get angularUnit(){return this._numericConfiguration.angularUnit}set angularUnit(n){this._numericConfiguration.setAngularUnit(n)&&this._reset()}get timeLimit(){return this._runtimeState.timeLimit}set timeLimit(n){this._runtimeState.timeLimit=n}get deadline(){return this._runtimeState.deadline}set deadline(n){this._runtimeState.deadline=n}get _deadline(){return this._runtimeState.deadline}set _deadline(n){this._runtimeState.deadline=n}get _timeRemaining(){return this._runtimeState.timeRemaining}get iterationLimit(){return this._runtimeState.iterationLimit}set iterationLimit(n){this._runtimeState.iterationLimit=n}get recursionLimit(){return this._runtimeState.recursionLimit}set recursionLimit(n){this._runtimeState.recursionLimit=n}get _isVerifying(){return this._runtimeState.isVerifying}set _isVerifying(n){this._runtimeState.isVerifying=n}get isVerifying(){return this._runtimeState.isVerifying}get tolerance(){return this._numericConfiguration.tolerance}set tolerance(n){this._numericConfiguration.setTolerance(n)}chop(n){let t=this._numericConfiguration.tolerance;return typeof n=="number"?Math.abs(n)<=t?0:n:n instanceof K?n.isPositive()&&n.lte(this._numericConfiguration.bignumTolerance)||n.isNegative()&&n.gte(this._numericConfiguration.negBignumTolerance)||n.isZero()?0:n:n instanceof z&&Math.abs(n.re)<=t&&Math.abs(n.im)<=t?0:n}bignum(n){return this._numericConfiguration.bignum(n)}complex(n,t){return n instanceof K&&(n=n.toNumber()),t instanceof K&&(t=t.toNumber()),new z(n,t)}_numericValue(n){if(n instanceof Ee)return n.asExact??n;let t=r=>this.bignum(r),i=this._numericConfiguration.precision>ht?r=>new _r(r,t):r=>new Nr(r,t);if(typeof n=="number")return Number.isInteger(n)?new we(n,i,t):i(n);if(typeof n=="bigint")return new we(n,i,t);if(Rt(n))return new we({rational:n},i,t);if(n instanceof K){if(n.isInteger()&&n.e<=Kd){let r=Re(n.toString());if(r!==null)return new we(r,i,t)}return i(n)}if(n instanceof z)return n.im===0?this._numericValue(n.re):i({re:n.re,im:n.im});if("im"in n||"re"in n)return n.im!==void 0&&n.im!==0?i(n):n.re instanceof K&&n.re.isInteger()?new we({rational:[Re(n.re.toString()),BigInt(1)]},i,t):typeof n.re=="number"&&Number.isInteger(n.re)?new we({rational:[n.re,1]},i,t):i(n);if("radical"in n||"rational"in n){if(n.radical!==void 0&&(!Number.isInteger(n.radical)||n.radical>=re))throw Error("Unexpected value for radical part:"+n.radical);return n.rational&&xn(n.rational)&&(!Number.isInteger(n.rational[0])||!Number.isInteger(n.rational[1]))?i(n):new we(n,i,t)}throw Error("Unexpected value")}get costFunction(){return this._cost??np}set costFunction(n){typeof n!="function"&&(this._cost=np),this._cost=n}get simplificationRules(){return this._simplificationRules.rules}set simplificationRules(n){this._simplificationRules.rules=n,this._cacheStore.invalidate("standard-simplification-rules")}lookupDefinition(n){return Yy(this,n)}_declareSymbolValue(n,t,i){return Qy(this,n,t,i)}_declareSymbolOperator(n,t,i){return Xy(this,n,t,i)}pushScope(n,t){rx(this,n,t)}popScope(){ox(this)}_pushEvalContext(n,t){bp(this,n,t)}_popEvalContext(){yp(this)}_inScope(n,t){return sx(this,n,t)}_printStack(n){ax(this,n)}_getSymbolValue(n){return Ky(this,n)}_setSymbolValue(n,t){ex(this,n,t)}declare(n,t,i){return tx(this,n,t,i)}declareSequence(n,t){return yx(this,n,t)}getSequenceStatus(n){return xx(this,n)}getSequence(n){return Ex(this,n)}listSequences(){return vx(this)}isSequence(n){return _x(this,n)}clearSequenceCache(n){Nx(this,n)}getSequenceCache(n){return Sx(this,n)}getSequenceTerms(n,t,i,r){return Tx(this,n,t,i,r)}lookupOEIS(n,t){return Ix(this,n,t)}checkSequenceOEIS(n,t,i){return wx(this,n,t,i)}assign(n,t){return ix(this,n,t)}_shouldContinueExecution(){return this._runtimeState.shouldContinueExecution()}_checkContinueExecution(){if(!this._shouldContinueExecution())throw new Error("timeout")}_cache(n,t,i){return this._cacheStore.getOrBuild(n,t,i)}box(n,t){let{canonical:i,structural:r}=aa(t?.form);return Kn(this,n,{canonical:i,structural:r,scope:t?.scope})}function(n,t,i){let{canonical:r,structural:o}=aa(i?.form);return hl(this,n,t,{metadata:i?.metadata,canonical:r,structural:o,scope:i?.scope})}error(n,t){return Jl(this,n,t)}typeError(n,t,i){return bE(this,n,t,i)}hold(n){return this._fn("Hold",[this.box(n,{form:"raw"})])}tuple(...n){return new je(this,"Tuple",n.map(t=>typeof t=="number"?this.number(t):t.canonical),{canonical:!0})}type(n){return n instanceof V?n:new V(n,this._typeResolver)}string(n,t){return new ji(this,n,t)}symbol(n,t){return iE(this,this._commonSymbols,n,t)}number(n,t){return rE(this,this._commonNumbers,n,t)}rules(n,t){return $s(this,n,t)}getRuleSet(n){if(n??="standard-simplification",n==="standard-simplification"){this._simplificationRules.hasMutatedSinceLastCache()&&this._cacheStore.invalidate("standard-simplification-rules");let t=this._cache("standard-simplification-rules",()=>$s(this,this._simplificationRules.rules,{canonical:!0}));return this._simplificationRules.markCached(),t}if(n==="solve-univariate")return this._cache("univariate-roots-rules",()=>$s(this,Yb));if(n==="harmonization")return this._cache("harmonization-rules",()=>$s(this,Qb))}_fn(n,t,i){let r=i?.canonical??!0;return new je(this,n,t,{...i,canonical:r})}parse(n,t){return gE(this,n,t)}ask(n){return px(this,n)}verify(n){return Ho(this,n)}assume(n){return mx(this,n)}forget(n){xp(this,n)}};yE(Vr);var Ew="0.54.0";globalThis[Symbol.for("io.cortexjs.compute-engine")]={ComputeEngine:Vr.prototype.constructor,version:"0.54.0"};return HE(vw);})();
|
|
1016
|
+
/*! Bundled license information:
|
|
1017
|
+
|
|
1018
|
+
complex-esm/dist/src/complex.js:
|
|
1019
|
+
(**
|
|
1020
|
+
* @license Complex.js v2.1.1 12/05/2020
|
|
1021
|
+
*
|
|
1022
|
+
* Copyright (c) 2020, Robert Eisele (robert@xarg.org)
|
|
1023
|
+
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
1024
|
+
**)
|
|
1025
|
+
|
|
1026
|
+
decimal.js/decimal.mjs:
|
|
1027
|
+
(*!
|
|
1028
|
+
* decimal.js v10.6.0
|
|
1029
|
+
* An arbitrary-precision Decimal type for JavaScript.
|
|
1030
|
+
* https://github.com/MikeMcl/decimal.js
|
|
1031
|
+
* Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>
|
|
1032
|
+
* MIT Licence
|
|
1033
|
+
*)
|
|
1034
|
+
*/
|
|
1035
|
+
Object.assign(exports, ComputeEngine); Object.defineProperty(exports, '__esModule', { value: true });}));
|