@cortex-js/compute-engine 0.55.4 → 0.55.6
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/compile.esm.js +137 -545
- package/dist/compile.min.esm.js +60 -430
- package/dist/compile.min.umd.cjs +66 -436
- package/dist/compile.umd.cjs +137 -545
- package/dist/compute-engine.esm.js +227 -563
- package/dist/compute-engine.min.esm.js +68 -437
- package/dist/compute-engine.min.umd.cjs +68 -437
- package/dist/compute-engine.umd.cjs +227 -563
- package/dist/core.esm.js +225 -562
- package/dist/core.min.esm.js +67 -436
- package/dist/core.min.umd.cjs +67 -436
- package/dist/core.umd.cjs +225 -562
- package/dist/interval.esm.js +136 -60
- package/dist/interval.min.esm.js +7 -7
- package/dist/interval.min.umd.cjs +7 -7
- package/dist/interval.umd.cjs +136 -60
- package/dist/latex-syntax.esm.js +219 -74
- package/dist/latex-syntax.min.esm.js +7 -6
- package/dist/latex-syntax.min.umd.cjs +7 -6
- package/dist/latex-syntax.umd.cjs +219 -74
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/math-json.min.umd.cjs +2 -2
- package/dist/math-json.umd.cjs +2 -2
- package/dist/numerics.esm.js +2 -2
- package/dist/numerics.min.esm.js +2 -2
- package/dist/numerics.min.umd.cjs +2 -2
- package/dist/numerics.umd.cjs +2 -2
- package/dist/types/big-decimal/big-decimal.d.ts +1 -1
- package/dist/types/big-decimal/index.d.ts +1 -1
- package/dist/types/big-decimal/transcendentals.d.ts +1 -1
- package/dist/types/big-decimal/utils.d.ts +1 -1
- 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/compile.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 +1 -1
- 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 +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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/constant-folding.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 +1 -47
- 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 +1 -48
- 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-library-bootstrap.d.ts +1 -1
- package/dist/types/compute-engine/engine-numeric-configuration.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 +2 -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/default-dictionary.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/latex-syntax.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 +4 -2
- 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/linear-algebra.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 +1 -1
- 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 +1 -1
- package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -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 +2 -1
- package/dist/types/core.d.ts +1 -1
- package/dist/types/interval.d.ts +1 -1
- package/dist/types/latex-syntax.d.ts +2 -2
- 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/dist/types/numerics.d.ts +1 -1
- package/package.json +1 -1
- package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +0 -13
package/dist/core.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** ComputeEngineCore 0.55.
|
|
1
|
+
/** ComputeEngineCore 0.55.6 */
|
|
2
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.ComputeEngineCore = {}));})(this, (function (exports) { 'use strict';
|
|
3
3
|
var ComputeEngineCore = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -11084,10 +11084,6 @@ var ComputeEngineCore = (() => {
|
|
|
11084
11084
|
// Lagrange notation
|
|
11085
11085
|
{
|
|
11086
11086
|
name: "Derivative",
|
|
11087
|
-
// @todo: Leibniz notation: {% latex " \\frac{d^n}{dx^n} f(x)" %}
|
|
11088
|
-
// @todo: Euler modified notation: This notation is used by Mathematica. The Euler notation uses `D` instead of
|
|
11089
|
-
// `\partial`: `\partial_{x} f`, `\partial_{x,y} f`
|
|
11090
|
-
// Newton notation (\dot{v}, \ddot{v}) is implemented below
|
|
11091
11087
|
serialize: (serializer, expr2) => {
|
|
11092
11088
|
const degree = machineValue(operand(expr2, 2)) ?? 1;
|
|
11093
11089
|
const base = serializer.serialize(operand(expr2, 1));
|
|
@@ -12125,14 +12121,18 @@ var ComputeEngineCore = (() => {
|
|
|
12125
12121
|
return ["Complement", lhs];
|
|
12126
12122
|
}
|
|
12127
12123
|
// precedence: 240,
|
|
12128
|
-
// @todo: serialize for the multiple argument case
|
|
12129
12124
|
},
|
|
12130
12125
|
{
|
|
12131
12126
|
name: "Complement",
|
|
12132
12127
|
latexTrigger: ["^", "<{>", "\\complement", "<}>"],
|
|
12133
|
-
kind: "postfix"
|
|
12128
|
+
kind: "postfix",
|
|
12134
12129
|
// precedence: 240,
|
|
12135
|
-
|
|
12130
|
+
serialize: (serializer, expr2) => {
|
|
12131
|
+
return joinLatex([
|
|
12132
|
+
serializer.serialize(operand(expr2, 1)),
|
|
12133
|
+
"^\\complement"
|
|
12134
|
+
]);
|
|
12135
|
+
}
|
|
12136
12136
|
},
|
|
12137
12137
|
{
|
|
12138
12138
|
name: "Intersection",
|
|
@@ -12219,7 +12219,6 @@ var ComputeEngineCore = (() => {
|
|
|
12219
12219
|
// commands like \rbrack a, b \rbrack which are unambiguous.
|
|
12220
12220
|
{
|
|
12221
12221
|
name: "Multiple",
|
|
12222
|
-
// @todo: parse
|
|
12223
12222
|
serialize: serializeSet
|
|
12224
12223
|
},
|
|
12225
12224
|
{
|
|
@@ -12228,14 +12227,28 @@ var ComputeEngineCore = (() => {
|
|
|
12228
12227
|
kind: "infix",
|
|
12229
12228
|
precedence: 350
|
|
12230
12229
|
},
|
|
12230
|
+
// \mid as a separator/operator (used in set-builder notation: {x \mid x > 0})
|
|
12231
|
+
// Low precedence so it binds loosely — everything on each side is parsed first
|
|
12232
|
+
{
|
|
12233
|
+
name: "Divides",
|
|
12234
|
+
latexTrigger: ["\\mid"],
|
|
12235
|
+
kind: "infix",
|
|
12236
|
+
precedence: 160
|
|
12237
|
+
},
|
|
12231
12238
|
{
|
|
12232
12239
|
name: "Set",
|
|
12233
12240
|
kind: "matchfix",
|
|
12234
12241
|
openTrigger: "{",
|
|
12235
12242
|
closeTrigger: "}",
|
|
12236
|
-
// @todo: the set syntax can also include conditions...
|
|
12237
12243
|
parse: (_parser, body) => {
|
|
12238
12244
|
if (isEmptySequence(body)) return "EmptySet";
|
|
12245
|
+
const h = operator(body);
|
|
12246
|
+
if (h === "Divides" || h === "Colon") {
|
|
12247
|
+
const expr2 = operand(body, 1);
|
|
12248
|
+
const condition = operand(body, 2);
|
|
12249
|
+
if (expr2 !== null && condition !== null)
|
|
12250
|
+
return ["Set", expr2, ["Condition", condition]];
|
|
12251
|
+
}
|
|
12239
12252
|
if (operator(body) == "Delimiter" && stringValue(operand(body, 2)) === ",") {
|
|
12240
12253
|
body = operand(body, 1);
|
|
12241
12254
|
}
|
|
@@ -12243,6 +12256,17 @@ var ComputeEngineCore = (() => {
|
|
|
12243
12256
|
return ["Set", ...operands(body)];
|
|
12244
12257
|
},
|
|
12245
12258
|
serialize: (serializer, expr2) => {
|
|
12259
|
+
if (nops(expr2) === 2 && operator(operand(expr2, 2)) === "Condition") {
|
|
12260
|
+
const condition = operand(expr2, 2);
|
|
12261
|
+
return joinLatex([
|
|
12262
|
+
"\\lbrace",
|
|
12263
|
+
serializer.serialize(operand(expr2, 1)),
|
|
12264
|
+
"\\mid",
|
|
12265
|
+
// Serialize the inner expression of the Condition wrapper
|
|
12266
|
+
serializer.serialize(operand(condition, 1)),
|
|
12267
|
+
"\\rbrace"
|
|
12268
|
+
]);
|
|
12269
|
+
}
|
|
12246
12270
|
return joinLatex([
|
|
12247
12271
|
"\\lbrace",
|
|
12248
12272
|
operands(expr2).map((x) => serializer.serialize(x)).join(", "),
|
|
@@ -12409,23 +12433,6 @@ var ComputeEngineCore = (() => {
|
|
|
12409
12433
|
if (expr2 === null) return "";
|
|
12410
12434
|
const h = operator(expr2);
|
|
12411
12435
|
if (!h) return "";
|
|
12412
|
-
if (h === "Set") {
|
|
12413
|
-
if (nops(expr2) === 0) return "\\emptyset";
|
|
12414
|
-
if (nops(expr2) === 2 && operator(operand(expr2, 2)) === "Condition") {
|
|
12415
|
-
return joinLatex([
|
|
12416
|
-
"\\left\\lbrace",
|
|
12417
|
-
serializer.serialize(operand(expr2, 1)),
|
|
12418
|
-
"\\middle\\mid",
|
|
12419
|
-
serializer.serialize(operand(expr2, 2)),
|
|
12420
|
-
"\\right\\rbrace"
|
|
12421
|
-
]);
|
|
12422
|
-
}
|
|
12423
|
-
return joinLatex([
|
|
12424
|
-
"\\left\\lbrace",
|
|
12425
|
-
...operands(expr2).map((x) => serializer.serialize(x) + " ,"),
|
|
12426
|
-
"\\right\\rbrace"
|
|
12427
|
-
]);
|
|
12428
|
-
}
|
|
12429
12436
|
if (h === "Multiple") {
|
|
12430
12437
|
}
|
|
12431
12438
|
if (h === "Range") {
|
|
@@ -13573,11 +13580,13 @@ var ComputeEngineCore = (() => {
|
|
|
13573
13580
|
if (!parser.match("_")) return null;
|
|
13574
13581
|
const base = parser.parseGroup();
|
|
13575
13582
|
if (operator(base) !== "To") return null;
|
|
13576
|
-
const expr2 = parser.
|
|
13583
|
+
const expr2 = parser.parseExpression({
|
|
13584
|
+
minPrec: MULTIPLICATION_PRECEDENCE
|
|
13585
|
+
});
|
|
13577
13586
|
if (!expr2) return null;
|
|
13578
13587
|
return [
|
|
13579
13588
|
"Limit",
|
|
13580
|
-
["Function", expr2
|
|
13589
|
+
["Function", expr2, operand(base, 1)],
|
|
13581
13590
|
operand(base, 2)
|
|
13582
13591
|
];
|
|
13583
13592
|
},
|
|
@@ -15874,12 +15883,52 @@ var ComputeEngineCore = (() => {
|
|
|
15874
15883
|
];
|
|
15875
15884
|
|
|
15876
15885
|
// src/compute-engine/latex-syntax/dictionary/definitions-other.ts
|
|
15886
|
+
var TEX_UNITS = [
|
|
15887
|
+
"pt",
|
|
15888
|
+
"em",
|
|
15889
|
+
"mu",
|
|
15890
|
+
"ex",
|
|
15891
|
+
"mm",
|
|
15892
|
+
"cm",
|
|
15893
|
+
"in",
|
|
15894
|
+
"bp",
|
|
15895
|
+
"sp",
|
|
15896
|
+
"dd",
|
|
15897
|
+
"cc",
|
|
15898
|
+
"pc",
|
|
15899
|
+
"nc",
|
|
15900
|
+
"nd"
|
|
15901
|
+
];
|
|
15902
|
+
function skipTexDimension(parser) {
|
|
15903
|
+
parser.skipSpace();
|
|
15904
|
+
if (parser.peek === "-" || parser.peek === "+") parser.nextToken();
|
|
15905
|
+
while (/^[\d.]$/.test(parser.peek)) parser.nextToken();
|
|
15906
|
+
for (const unit of TEX_UNITS) {
|
|
15907
|
+
if (parser.matchAll([...unit])) return;
|
|
15908
|
+
}
|
|
15909
|
+
}
|
|
15877
15910
|
function parseSingleArg(cmd) {
|
|
15878
15911
|
return (parser) => {
|
|
15879
15912
|
const arg = parser.parseGroup();
|
|
15880
15913
|
return arg === null ? [cmd] : [cmd, arg];
|
|
15881
15914
|
};
|
|
15882
15915
|
}
|
|
15916
|
+
function parseMathStyleSwitch(mathStyle) {
|
|
15917
|
+
return (parser) => {
|
|
15918
|
+
const body = parser.parseExpression();
|
|
15919
|
+
if (body !== null && !isEmptySequence(body))
|
|
15920
|
+
return ["Annotated", body, { dict: { mathStyle } }];
|
|
15921
|
+
return "Nothing";
|
|
15922
|
+
};
|
|
15923
|
+
}
|
|
15924
|
+
function parseSizeSwitch(size) {
|
|
15925
|
+
return (parser) => {
|
|
15926
|
+
const body = parser.parseExpression();
|
|
15927
|
+
if (body !== null && !isEmptySequence(body))
|
|
15928
|
+
return ["Annotated", body, { dict: { size } }];
|
|
15929
|
+
return "Nothing";
|
|
15930
|
+
};
|
|
15931
|
+
}
|
|
15883
15932
|
var DEFINITIONS_OTHERS = [
|
|
15884
15933
|
{
|
|
15885
15934
|
name: "Overscript",
|
|
@@ -16119,80 +16168,71 @@ var ComputeEngineCore = (() => {
|
|
|
16119
16168
|
},
|
|
16120
16169
|
{
|
|
16121
16170
|
latexTrigger: ["\\displaystyle"],
|
|
16122
|
-
parse: (
|
|
16123
|
-
// @todo: parse as ['Annotated'...]
|
|
16171
|
+
parse: parseMathStyleSwitch("normal")
|
|
16124
16172
|
},
|
|
16125
16173
|
{
|
|
16126
16174
|
latexTrigger: ["\\textstyle"],
|
|
16127
|
-
parse: (
|
|
16128
|
-
// @todo: parse as ['Annotated'...]
|
|
16175
|
+
parse: parseMathStyleSwitch("compact")
|
|
16129
16176
|
},
|
|
16130
16177
|
{
|
|
16131
16178
|
latexTrigger: ["\\scriptstyle"],
|
|
16132
|
-
parse: (
|
|
16133
|
-
// @todo: parse as ['Annotated'...]
|
|
16179
|
+
parse: parseMathStyleSwitch("script")
|
|
16134
16180
|
},
|
|
16135
16181
|
{
|
|
16136
16182
|
latexTrigger: ["\\scriptscriptstyle"],
|
|
16137
|
-
parse: (
|
|
16138
|
-
// @todo: parse as ['Annotated'...]
|
|
16183
|
+
parse: parseMathStyleSwitch("scriptscript")
|
|
16139
16184
|
},
|
|
16140
16185
|
{
|
|
16141
16186
|
latexTrigger: ["\\color"],
|
|
16142
16187
|
parse: (parser) => {
|
|
16143
|
-
parser.
|
|
16188
|
+
const color = parser.parseStringGroup();
|
|
16189
|
+
if (color !== null) {
|
|
16190
|
+
const body = parser.parseExpression();
|
|
16191
|
+
if (body !== null && !isEmptySequence(body))
|
|
16192
|
+
return ["Annotated", body, { dict: { color } }];
|
|
16193
|
+
}
|
|
16144
16194
|
return "Nothing";
|
|
16145
16195
|
}
|
|
16146
16196
|
},
|
|
16147
16197
|
{
|
|
16148
16198
|
latexTrigger: ["\\tiny"],
|
|
16149
|
-
parse: ()
|
|
16150
|
-
// @todo: parse as ['Annotated'...]
|
|
16199
|
+
parse: parseSizeSwitch(1)
|
|
16151
16200
|
},
|
|
16152
16201
|
{
|
|
16153
16202
|
latexTrigger: ["\\scriptsize"],
|
|
16154
|
-
parse: ()
|
|
16155
|
-
// @todo: parse as ['Annotated'...]
|
|
16203
|
+
parse: parseSizeSwitch(2)
|
|
16156
16204
|
},
|
|
16157
16205
|
{
|
|
16158
16206
|
latexTrigger: ["\\footnotesize"],
|
|
16159
|
-
parse: ()
|
|
16160
|
-
// @todo: parse as ['Annotated'...]
|
|
16207
|
+
parse: parseSizeSwitch(3)
|
|
16161
16208
|
},
|
|
16162
16209
|
{
|
|
16163
16210
|
latexTrigger: ["\\small"],
|
|
16164
|
-
parse: ()
|
|
16165
|
-
// @todo: parse as ['Annotated'...]
|
|
16211
|
+
parse: parseSizeSwitch(4)
|
|
16166
16212
|
},
|
|
16167
16213
|
{
|
|
16168
16214
|
latexTrigger: ["\\normalsize"],
|
|
16169
|
-
parse: ()
|
|
16170
|
-
// @todo: parse as ['Annotated'...]
|
|
16215
|
+
parse: parseSizeSwitch(5)
|
|
16171
16216
|
},
|
|
16172
16217
|
{
|
|
16173
16218
|
latexTrigger: ["\\large"],
|
|
16174
|
-
parse: ()
|
|
16175
|
-
// @todo: parse as ['Annotated'...]
|
|
16219
|
+
parse: parseSizeSwitch(6)
|
|
16176
16220
|
},
|
|
16177
16221
|
{
|
|
16178
16222
|
latexTrigger: ["\\Large"],
|
|
16179
|
-
parse: ()
|
|
16180
|
-
// @todo: parse as ['Annotated'...]
|
|
16223
|
+
parse: parseSizeSwitch(7)
|
|
16181
16224
|
},
|
|
16182
16225
|
{
|
|
16183
16226
|
latexTrigger: ["\\LARGE"],
|
|
16184
|
-
parse: ()
|
|
16185
|
-
// @todo: parse as ['Annotated'...]
|
|
16227
|
+
parse: parseSizeSwitch(8)
|
|
16186
16228
|
},
|
|
16187
16229
|
{
|
|
16188
16230
|
latexTrigger: ["\\huge"],
|
|
16189
|
-
parse: ()
|
|
16190
|
-
// @todo: parse as ['Annotated'...]
|
|
16231
|
+
parse: parseSizeSwitch(9)
|
|
16191
16232
|
},
|
|
16192
16233
|
{
|
|
16193
16234
|
latexTrigger: ["\\Huge"],
|
|
16194
|
-
parse: ()
|
|
16195
|
-
// @todo: parse as ['Annotated'...]
|
|
16235
|
+
parse: parseSizeSwitch(10)
|
|
16196
16236
|
},
|
|
16197
16237
|
{
|
|
16198
16238
|
name: "Annotated",
|
|
@@ -16204,6 +16244,10 @@ var ComputeEngineCore = (() => {
|
|
|
16204
16244
|
result = joinLatex(["{\\displaystyle", result, "}"]);
|
|
16205
16245
|
else if (dict.dict.mathStyle === "compact")
|
|
16206
16246
|
result = joinLatex(["{\\textstyle", result, "}"]);
|
|
16247
|
+
else if (dict.dict.mathStyle === "script")
|
|
16248
|
+
result = joinLatex(["{\\scriptstyle", result, "}"]);
|
|
16249
|
+
else if (dict.dict.mathStyle === "scriptscript")
|
|
16250
|
+
result = joinLatex(["{\\scriptscriptstyle", result, "}"]);
|
|
16207
16251
|
const v = dict.dict.size;
|
|
16208
16252
|
if (v !== null && v >= 1 && v <= 10) {
|
|
16209
16253
|
result = joinLatex([
|
|
@@ -16291,6 +16335,28 @@ var ComputeEngineCore = (() => {
|
|
|
16291
16335
|
latexTrigger: ["\\enspace"],
|
|
16292
16336
|
parse: () => ["HorizontalSpacing", 9]
|
|
16293
16337
|
},
|
|
16338
|
+
{
|
|
16339
|
+
latexTrigger: ["\\hspace"],
|
|
16340
|
+
parse: (parser) => {
|
|
16341
|
+
if (parser.peek === "*") parser.nextToken();
|
|
16342
|
+
parser.parseStringGroup();
|
|
16343
|
+
return ["HorizontalSpacing", 0];
|
|
16344
|
+
}
|
|
16345
|
+
},
|
|
16346
|
+
{
|
|
16347
|
+
latexTrigger: ["\\hskip"],
|
|
16348
|
+
parse: (parser) => {
|
|
16349
|
+
skipTexDimension(parser);
|
|
16350
|
+
return ["HorizontalSpacing", 0];
|
|
16351
|
+
}
|
|
16352
|
+
},
|
|
16353
|
+
{
|
|
16354
|
+
latexTrigger: ["\\kern"],
|
|
16355
|
+
parse: (parser) => {
|
|
16356
|
+
skipTexDimension(parser);
|
|
16357
|
+
return ["HorizontalSpacing", 0];
|
|
16358
|
+
}
|
|
16359
|
+
},
|
|
16294
16360
|
{
|
|
16295
16361
|
latexTrigger: ["\\phantom"],
|
|
16296
16362
|
parse: (parser) => {
|
|
@@ -16341,7 +16407,17 @@ var ComputeEngineCore = (() => {
|
|
|
16341
16407
|
// `["HorizontalSpacing", expr, 'op'|'bin'|rel]` -> indicate a spacing around and expression, i.e. `\mathbin{x}`, etc...
|
|
16342
16408
|
serialize: (serializer, expr2) => {
|
|
16343
16409
|
if (operand(expr2, 2) !== null) {
|
|
16344
|
-
|
|
16410
|
+
const cls = stringValue(operand(expr2, 2));
|
|
16411
|
+
const inner = serializer.serialize(operand(expr2, 1));
|
|
16412
|
+
if (cls === "bin") return `\\mathbin{${inner}}`;
|
|
16413
|
+
if (cls === "op") return `\\mathop{${inner}}`;
|
|
16414
|
+
if (cls === "rel") return `\\mathrel{${inner}}`;
|
|
16415
|
+
if (cls === "ord") return `\\mathord{${inner}}`;
|
|
16416
|
+
if (cls === "open") return `\\mathopen{${inner}}`;
|
|
16417
|
+
if (cls === "close") return `\\mathclose{${inner}}`;
|
|
16418
|
+
if (cls === "punct") return `\\mathpunct{${inner}}`;
|
|
16419
|
+
if (cls === "inner") return `\\mathinner{${inner}}`;
|
|
16420
|
+
return inner;
|
|
16345
16421
|
}
|
|
16346
16422
|
const v = machineValue(operand(expr2, 1));
|
|
16347
16423
|
if (v === null) return "";
|
|
@@ -16732,25 +16808,47 @@ var ComputeEngineCore = (() => {
|
|
|
16732
16808
|
result.arguments = entry.arguments;
|
|
16733
16809
|
return result;
|
|
16734
16810
|
}
|
|
16811
|
+
function serializeTabularBody(serializer, body) {
|
|
16812
|
+
if (!body) return "";
|
|
16813
|
+
if (operator(body) !== "List") return serializer.serialize(body);
|
|
16814
|
+
const rows = operands(body);
|
|
16815
|
+
if (rows.length === 0) return "";
|
|
16816
|
+
if (!rows.every((row) => operator(row) === "List"))
|
|
16817
|
+
return serializer.serialize(body);
|
|
16818
|
+
return rows.map(
|
|
16819
|
+
(row) => operands(row).map((cell) => serializer.serialize(cell)).join(" & ")
|
|
16820
|
+
).join(" \\\\\n");
|
|
16821
|
+
}
|
|
16735
16822
|
function makeSerializeHandler(entry, latexTrigger, idTrigger) {
|
|
16736
16823
|
if (typeof entry.serialize === "function") return entry.serialize;
|
|
16737
16824
|
const kind = entry["kind"] ?? "expression";
|
|
16738
16825
|
if (kind === "environment") {
|
|
16739
16826
|
const envName = entry["symbolTrigger"] ?? entry.name ?? "unknown";
|
|
16740
|
-
return (serializer, expr2) =>
|
|
16741
|
-
|
|
16742
|
-
|
|
16743
|
-
|
|
16744
|
-
|
|
16827
|
+
return (serializer, expr2) => {
|
|
16828
|
+
const body = operand(expr2, 1);
|
|
16829
|
+
return joinLatex([
|
|
16830
|
+
`\\begin{${envName}}`,
|
|
16831
|
+
serializeTabularBody(serializer, body),
|
|
16832
|
+
`\\end{${envName}}`
|
|
16833
|
+
]);
|
|
16834
|
+
};
|
|
16745
16835
|
}
|
|
16746
16836
|
if (isMatchfixEntry(entry)) {
|
|
16747
16837
|
const openDelim = typeof entry.openTrigger === "string" ? DEFAULT_DELIMITER[entry.openTrigger] : tokensToString(entry.openTrigger);
|
|
16748
16838
|
const closeDelim = typeof entry.closeTrigger === "string" ? DEFAULT_DELIMITER[entry.closeTrigger] : tokensToString(entry.closeTrigger);
|
|
16749
|
-
return (serializer, expr2) =>
|
|
16750
|
-
|
|
16751
|
-
serializer.serialize(operand(expr2, 1))
|
|
16752
|
-
|
|
16753
|
-
|
|
16839
|
+
return (serializer, expr2) => {
|
|
16840
|
+
const style = serializer.groupStyle(expr2, serializer.level + 1);
|
|
16841
|
+
const inner = serializer.serialize(operand(expr2, 1));
|
|
16842
|
+
if (style === "scaled")
|
|
16843
|
+
return joinLatex([`\\left${openDelim}`, inner, `\\right${closeDelim}`]);
|
|
16844
|
+
if (style === "big")
|
|
16845
|
+
return joinLatex([
|
|
16846
|
+
`\\Bigl${openDelim}`,
|
|
16847
|
+
inner,
|
|
16848
|
+
`\\Bigr${closeDelim}`
|
|
16849
|
+
]);
|
|
16850
|
+
return joinLatex([openDelim, inner, closeDelim]);
|
|
16851
|
+
};
|
|
16754
16852
|
}
|
|
16755
16853
|
let latex = entry.serialize;
|
|
16756
16854
|
if (latex === void 0 && latexTrigger) latex = tokensToString(latexTrigger);
|
|
@@ -17635,6 +17733,16 @@ var ComputeEngineCore = (() => {
|
|
|
17635
17733
|
}
|
|
17636
17734
|
|
|
17637
17735
|
// src/compute-engine/latex-syntax/parse.ts
|
|
17736
|
+
var _symbolToUnicode = null;
|
|
17737
|
+
function getSymbolToUnicode() {
|
|
17738
|
+
if (!_symbolToUnicode) {
|
|
17739
|
+
_symbolToUnicode = /* @__PURE__ */ new Map();
|
|
17740
|
+
for (const [, latex, codepoint] of SYMBOLS2) {
|
|
17741
|
+
_symbolToUnicode.set(latex, String.fromCodePoint(codepoint));
|
|
17742
|
+
}
|
|
17743
|
+
}
|
|
17744
|
+
return _symbolToUnicode;
|
|
17745
|
+
}
|
|
17638
17746
|
var DELIMITER_SHORTHAND2 = {
|
|
17639
17747
|
"(": ["\\lparen", "("],
|
|
17640
17748
|
")": ["\\rparen", ")"],
|
|
@@ -18082,6 +18190,35 @@ var ComputeEngineCore = (() => {
|
|
|
18082
18190
|
this.nextToken();
|
|
18083
18191
|
this.skipVisualSpace();
|
|
18084
18192
|
}
|
|
18193
|
+
if (this.match("\\hspace")) {
|
|
18194
|
+
this.match("*");
|
|
18195
|
+
this.parseStringGroup();
|
|
18196
|
+
this.skipVisualSpace();
|
|
18197
|
+
}
|
|
18198
|
+
if (this.match("\\hskip") || this.match("\\kern")) {
|
|
18199
|
+
this.skipSpace();
|
|
18200
|
+
this.match("-") || this.match("+");
|
|
18201
|
+
while (/^[\d.]$/.test(this.peek)) this.nextToken();
|
|
18202
|
+
for (const unit of [
|
|
18203
|
+
"pt",
|
|
18204
|
+
"em",
|
|
18205
|
+
"mu",
|
|
18206
|
+
"ex",
|
|
18207
|
+
"mm",
|
|
18208
|
+
"cm",
|
|
18209
|
+
"in",
|
|
18210
|
+
"bp",
|
|
18211
|
+
"sp",
|
|
18212
|
+
"dd",
|
|
18213
|
+
"cc",
|
|
18214
|
+
"pc",
|
|
18215
|
+
"nc",
|
|
18216
|
+
"nd"
|
|
18217
|
+
]) {
|
|
18218
|
+
if (this.matchAll([...unit])) break;
|
|
18219
|
+
}
|
|
18220
|
+
this.skipVisualSpace();
|
|
18221
|
+
}
|
|
18085
18222
|
this.skipSpace();
|
|
18086
18223
|
}
|
|
18087
18224
|
match(token) {
|
|
@@ -18419,7 +18556,8 @@ var ComputeEngineCore = (() => {
|
|
|
18419
18556
|
} else if (token === "<space>") {
|
|
18420
18557
|
result += " ";
|
|
18421
18558
|
} else if (token[0] === "\\") {
|
|
18422
|
-
|
|
18559
|
+
const unicode = getSymbolToUnicode().get(token);
|
|
18560
|
+
result += unicode ?? token;
|
|
18423
18561
|
} else {
|
|
18424
18562
|
result += token;
|
|
18425
18563
|
}
|
|
@@ -19779,7 +19917,7 @@ var ComputeEngineCore = (() => {
|
|
|
19779
19917
|
sansserif: (s) => `\\mathsf{${s}}`,
|
|
19780
19918
|
monospace: (s) => `\\mathtt{${s}}`
|
|
19781
19919
|
};
|
|
19782
|
-
var
|
|
19920
|
+
var Serializer5 = class {
|
|
19783
19921
|
options;
|
|
19784
19922
|
dictionary;
|
|
19785
19923
|
level = -1;
|
|
@@ -19794,11 +19932,18 @@ var ComputeEngineCore = (() => {
|
|
|
19794
19932
|
/**
|
|
19795
19933
|
* Serialize the expression, and if the expression is an operator
|
|
19796
19934
|
* of precedence less than or equal to prec, wrap it in some parens.
|
|
19797
|
-
*
|
|
19935
|
+
*
|
|
19936
|
+
* Skip wrapping for matchfix operators (Abs, Floor, Ceil, Norm, etc.)
|
|
19937
|
+
* and Delimiter since they already have visible delimiters.
|
|
19798
19938
|
*/
|
|
19799
19939
|
wrap(expr2, prec) {
|
|
19800
19940
|
if (expr2 === null || expr2 === void 0) return "";
|
|
19801
19941
|
if (prec === void 0) {
|
|
19942
|
+
const name2 = operator(expr2);
|
|
19943
|
+
if (name2) {
|
|
19944
|
+
const def = this.dictionary.ids.get(name2);
|
|
19945
|
+
if (def?.kind === "matchfix") return this.serialize(expr2);
|
|
19946
|
+
}
|
|
19802
19947
|
return this.wrapString(
|
|
19803
19948
|
this.serialize(expr2),
|
|
19804
19949
|
this.options.groupStyle(expr2, this.level + 1)
|
|
@@ -20092,7 +20237,7 @@ var ComputeEngineCore = (() => {
|
|
|
20092
20237
|
return body;
|
|
20093
20238
|
}
|
|
20094
20239
|
function serializeLatex(expr2, dict, options) {
|
|
20095
|
-
const serializer = new
|
|
20240
|
+
const serializer = new Serializer5(dict, options);
|
|
20096
20241
|
return serializer.serialize(expr2);
|
|
20097
20242
|
}
|
|
20098
20243
|
|
|
@@ -42131,12 +42276,14 @@ ${e.message}
|
|
|
42131
42276
|
canonical: canonicalBlock,
|
|
42132
42277
|
evaluate: evaluateBlock
|
|
42133
42278
|
},
|
|
42134
|
-
// A condition expression tests for one or more conditions of an expression
|
|
42135
|
-
//
|
|
42279
|
+
// A condition expression tests for one or more conditions of an expression.
|
|
42280
|
+
// Two forms:
|
|
42281
|
+
// ['Condition', value, "positive"] — tests value against named condition(s)
|
|
42282
|
+
// ['Condition', predicate] — set-builder predicate (e.g. x > 0)
|
|
42136
42283
|
Condition: {
|
|
42137
42284
|
description: "Test whether a value satisfies one or more conditions.",
|
|
42138
42285
|
lazy: true,
|
|
42139
|
-
signature: "(
|
|
42286
|
+
signature: "(expression, symbol?) -> boolean",
|
|
42140
42287
|
evaluate: ([value, conds], { engine }) => {
|
|
42141
42288
|
let conditions = [];
|
|
42142
42289
|
if (isSymbol2(conds)) {
|
|
@@ -61310,33 +61457,6 @@ Error in definition of "${name}"`,
|
|
|
61310
61457
|
return b;
|
|
61311
61458
|
}
|
|
61312
61459
|
|
|
61313
|
-
// src/compute-engine/compilation/fractal-orbit.ts
|
|
61314
|
-
function computeReferenceOrbit(center, maxIter, precision) {
|
|
61315
|
-
const prevPrecision = BigDecimal.precision;
|
|
61316
|
-
BigDecimal.precision = precision;
|
|
61317
|
-
try {
|
|
61318
|
-
const cr = new BigDecimal(center[0]);
|
|
61319
|
-
const ci = new BigDecimal(center[1]);
|
|
61320
|
-
let zr = BigDecimal.ZERO;
|
|
61321
|
-
let zi = BigDecimal.ZERO;
|
|
61322
|
-
const ESCAPE = new BigDecimal(256);
|
|
61323
|
-
const points = [];
|
|
61324
|
-
for (let i = 0; i < maxIter; i++) {
|
|
61325
|
-
points.push(zr.toNumber(), zi.toNumber());
|
|
61326
|
-
const zr2 = zr.mul(zr).toPrecision(precision);
|
|
61327
|
-
const zi2 = zi.mul(zi).toPrecision(precision);
|
|
61328
|
-
const mag2 = zr2.add(zi2);
|
|
61329
|
-
if (mag2.cmp(ESCAPE) > 0) break;
|
|
61330
|
-
const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
|
|
61331
|
-
zr = zr2.sub(zi2).add(cr);
|
|
61332
|
-
zi = new_zi;
|
|
61333
|
-
}
|
|
61334
|
-
return new Float32Array(points);
|
|
61335
|
-
} finally {
|
|
61336
|
-
BigDecimal.precision = prevPrecision;
|
|
61337
|
-
}
|
|
61338
|
-
}
|
|
61339
|
-
|
|
61340
61460
|
// src/compute-engine/compilation/gpu-target.ts
|
|
61341
61461
|
var GPU_OPERATORS = {
|
|
61342
61462
|
Add: ["+", 11],
|
|
@@ -61420,13 +61540,6 @@ Error in definition of "${name}"`,
|
|
|
61420
61540
|
];
|
|
61421
61541
|
return lines.join("\n");
|
|
61422
61542
|
}
|
|
61423
|
-
function selectFractalStrategy(target) {
|
|
61424
|
-
const radius = target.hints?.viewport?.radius;
|
|
61425
|
-
if (radius === void 0) return "single";
|
|
61426
|
-
if (radius > 1e-6) return "single";
|
|
61427
|
-
if (radius > 1e-14) return "double";
|
|
61428
|
-
return "perturbation";
|
|
61429
|
-
}
|
|
61430
61543
|
var GPU_FUNCTIONS = {
|
|
61431
61544
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
61432
61545
|
Add: (args, compile3, target) => {
|
|
@@ -61922,32 +62035,12 @@ Error in definition of "${name}"`,
|
|
|
61922
62035
|
if (c === null || maxIter === null)
|
|
61923
62036
|
throw new Error("Mandelbrot: missing arguments");
|
|
61924
62037
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61925
|
-
const strategy = selectFractalStrategy(target);
|
|
61926
|
-
if (strategy === "double") {
|
|
61927
|
-
const cCode = compile3(c);
|
|
61928
|
-
return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61929
|
-
}
|
|
61930
|
-
if (strategy === "perturbation") {
|
|
61931
|
-
const cCode = compile3(c);
|
|
61932
|
-
return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
|
|
61933
|
-
}
|
|
61934
62038
|
return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
|
|
61935
62039
|
},
|
|
61936
62040
|
Julia: ([z, c, maxIter], compile3, target) => {
|
|
61937
62041
|
if (z === null || c === null || maxIter === null)
|
|
61938
62042
|
throw new Error("Julia: missing arguments");
|
|
61939
62043
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61940
|
-
const strategy = selectFractalStrategy(target);
|
|
61941
|
-
if (strategy === "double") {
|
|
61942
|
-
const zCode = compile3(z);
|
|
61943
|
-
const cCode = compile3(c);
|
|
61944
|
-
return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61945
|
-
}
|
|
61946
|
-
if (strategy === "perturbation") {
|
|
61947
|
-
const zCode = compile3(z);
|
|
61948
|
-
const cCode = compile3(c);
|
|
61949
|
-
return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
|
|
61950
|
-
}
|
|
61951
62044
|
return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
|
|
61952
62045
|
},
|
|
61953
62046
|
// Vector/Matrix operations
|
|
@@ -62544,200 +62637,6 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
62544
62637
|
for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
|
|
62545
62638
|
return sgn * vals[n] / norm;
|
|
62546
62639
|
}
|
|
62547
|
-
`;
|
|
62548
|
-
var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
|
|
62549
|
-
// Split a float into high and low parts for exact multiplication
|
|
62550
|
-
vec2 ds_split(float a) {
|
|
62551
|
-
const float SPLIT = 4097.0; // 2^12 + 1
|
|
62552
|
-
float t = SPLIT * a;
|
|
62553
|
-
float hi = t - (t - a);
|
|
62554
|
-
float lo = a - hi;
|
|
62555
|
-
return vec2(hi, lo);
|
|
62556
|
-
}
|
|
62557
|
-
|
|
62558
|
-
// Create a double-single from a single float
|
|
62559
|
-
vec2 ds_from(float a) {
|
|
62560
|
-
return vec2(a, 0.0);
|
|
62561
|
-
}
|
|
62562
|
-
|
|
62563
|
-
// Error-free addition (Knuth TwoSum)
|
|
62564
|
-
vec2 ds_add(vec2 a, vec2 b) {
|
|
62565
|
-
float s = a.x + b.x;
|
|
62566
|
-
float v = s - a.x;
|
|
62567
|
-
float e = (a.x - (s - v)) + (b.x - v);
|
|
62568
|
-
float lo = (a.y + b.y) + e;
|
|
62569
|
-
float hi = s + lo;
|
|
62570
|
-
lo = lo - (hi - s);
|
|
62571
|
-
return vec2(hi, lo);
|
|
62572
|
-
}
|
|
62573
|
-
|
|
62574
|
-
// Double-single subtraction
|
|
62575
|
-
vec2 ds_sub(vec2 a, vec2 b) {
|
|
62576
|
-
return ds_add(a, vec2(-b.x, -b.y));
|
|
62577
|
-
}
|
|
62578
|
-
|
|
62579
|
-
// Error-free multiplication (Dekker TwoProduct)
|
|
62580
|
-
vec2 ds_mul(vec2 a, vec2 b) {
|
|
62581
|
-
float p = a.x * b.x;
|
|
62582
|
-
vec2 sa = ds_split(a.x);
|
|
62583
|
-
vec2 sb = ds_split(b.x);
|
|
62584
|
-
float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62585
|
-
err += a.x * b.y + a.y * b.x;
|
|
62586
|
-
float hi = p + err;
|
|
62587
|
-
float lo = err - (hi - p);
|
|
62588
|
-
return vec2(hi, lo);
|
|
62589
|
-
}
|
|
62590
|
-
|
|
62591
|
-
// Optimized self-multiply
|
|
62592
|
-
vec2 ds_sqr(vec2 a) {
|
|
62593
|
-
float p = a.x * a.x;
|
|
62594
|
-
vec2 sa = ds_split(a.x);
|
|
62595
|
-
float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62596
|
-
err += 2.0 * a.x * a.y;
|
|
62597
|
-
float hi = p + err;
|
|
62598
|
-
float lo = err - (hi - p);
|
|
62599
|
-
return vec2(hi, lo);
|
|
62600
|
-
}
|
|
62601
|
-
|
|
62602
|
-
// Compare magnitude: returns -1, 0, or 1
|
|
62603
|
-
float ds_cmp(vec2 a, vec2 b) {
|
|
62604
|
-
float d = a.x - b.x;
|
|
62605
|
-
if (d != 0.0) return sign(d);
|
|
62606
|
-
return sign(a.y - b.y);
|
|
62607
|
-
}
|
|
62608
|
-
`;
|
|
62609
|
-
var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
|
|
62610
|
-
fn ds_split(a: f32) -> vec2f {
|
|
62611
|
-
const SPLIT: f32 = 4097.0;
|
|
62612
|
-
let t = SPLIT * a;
|
|
62613
|
-
let hi = t - (t - a);
|
|
62614
|
-
let lo = a - hi;
|
|
62615
|
-
return vec2f(hi, lo);
|
|
62616
|
-
}
|
|
62617
|
-
|
|
62618
|
-
fn ds_from(a: f32) -> vec2f {
|
|
62619
|
-
return vec2f(a, 0.0);
|
|
62620
|
-
}
|
|
62621
|
-
|
|
62622
|
-
fn ds_add(a: vec2f, b: vec2f) -> vec2f {
|
|
62623
|
-
let s = a.x + b.x;
|
|
62624
|
-
let v = s - a.x;
|
|
62625
|
-
let e = (a.x - (s - v)) + (b.x - v);
|
|
62626
|
-
let lo_t = (a.y + b.y) + e;
|
|
62627
|
-
let hi = s + lo_t;
|
|
62628
|
-
let lo = lo_t - (hi - s);
|
|
62629
|
-
return vec2f(hi, lo);
|
|
62630
|
-
}
|
|
62631
|
-
|
|
62632
|
-
fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
|
|
62633
|
-
return ds_add(a, vec2f(-b.x, -b.y));
|
|
62634
|
-
}
|
|
62635
|
-
|
|
62636
|
-
fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
|
|
62637
|
-
let p = a.x * b.x;
|
|
62638
|
-
let sa = ds_split(a.x);
|
|
62639
|
-
let sb = ds_split(b.x);
|
|
62640
|
-
var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62641
|
-
err += a.x * b.y + a.y * b.x;
|
|
62642
|
-
let hi = p + err;
|
|
62643
|
-
let lo = err - (hi - p);
|
|
62644
|
-
return vec2f(hi, lo);
|
|
62645
|
-
}
|
|
62646
|
-
|
|
62647
|
-
fn ds_sqr(a: vec2f) -> vec2f {
|
|
62648
|
-
let p = a.x * a.x;
|
|
62649
|
-
let sa = ds_split(a.x);
|
|
62650
|
-
var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62651
|
-
err += 2.0 * a.x * a.y;
|
|
62652
|
-
let hi = p + err;
|
|
62653
|
-
let lo = err - (hi - p);
|
|
62654
|
-
return vec2f(hi, lo);
|
|
62655
|
-
}
|
|
62656
|
-
|
|
62657
|
-
fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
|
|
62658
|
-
let d = a.x - b.x;
|
|
62659
|
-
if (d != 0.0) { return sign(d); }
|
|
62660
|
-
return sign(a.y - b.y);
|
|
62661
|
-
}
|
|
62662
|
-
`;
|
|
62663
|
-
var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
|
|
62664
|
-
float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
|
|
62665
|
-
// c = (re_hi, im_hi, re_lo, im_lo)
|
|
62666
|
-
vec2 cr = vec2(c.x, c.z); // real part as ds
|
|
62667
|
-
vec2 ci = vec2(c.y, c.w); // imag part as ds
|
|
62668
|
-
vec2 zr = vec2(0.0, 0.0);
|
|
62669
|
-
vec2 zi = vec2(0.0, 0.0);
|
|
62670
|
-
for (int i = 0; i < maxIter; i++) {
|
|
62671
|
-
vec2 zr2 = ds_sqr(zr);
|
|
62672
|
-
vec2 zi2 = ds_sqr(zi);
|
|
62673
|
-
// |z|^2 > 4.0 ?
|
|
62674
|
-
vec2 mag2 = ds_add(zr2, zi2);
|
|
62675
|
-
if (mag2.x > 4.0)
|
|
62676
|
-
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62677
|
-
// z = z^2 + c
|
|
62678
|
-
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
|
|
62679
|
-
zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
|
|
62680
|
-
zi = new_zi;
|
|
62681
|
-
}
|
|
62682
|
-
return 1.0;
|
|
62683
|
-
}
|
|
62684
|
-
|
|
62685
|
-
float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
|
|
62686
|
-
vec2 zr = vec2(z_in.x, z_in.z);
|
|
62687
|
-
vec2 zi = vec2(z_in.y, z_in.w);
|
|
62688
|
-
vec2 cr = vec2(c.x, c.z);
|
|
62689
|
-
vec2 ci = vec2(c.y, c.w);
|
|
62690
|
-
for (int i = 0; i < maxIter; i++) {
|
|
62691
|
-
vec2 zr2 = ds_sqr(zr);
|
|
62692
|
-
vec2 zi2 = ds_sqr(zi);
|
|
62693
|
-
vec2 mag2 = ds_add(zr2, zi2);
|
|
62694
|
-
if (mag2.x > 4.0)
|
|
62695
|
-
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62696
|
-
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62697
|
-
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62698
|
-
zi = new_zi;
|
|
62699
|
-
}
|
|
62700
|
-
return 1.0;
|
|
62701
|
-
}
|
|
62702
|
-
`;
|
|
62703
|
-
var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
|
|
62704
|
-
fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
|
|
62705
|
-
let cr = vec2f(c.x, c.z);
|
|
62706
|
-
let ci = vec2f(c.y, c.w);
|
|
62707
|
-
var zr = vec2f(0.0, 0.0);
|
|
62708
|
-
var zi = vec2f(0.0, 0.0);
|
|
62709
|
-
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62710
|
-
let zr2 = ds_sqr(zr);
|
|
62711
|
-
let zi2 = ds_sqr(zi);
|
|
62712
|
-
let mag2 = ds_add(zr2, zi2);
|
|
62713
|
-
if (mag2.x > 4.0) {
|
|
62714
|
-
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62715
|
-
}
|
|
62716
|
-
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62717
|
-
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62718
|
-
zi = new_zi;
|
|
62719
|
-
}
|
|
62720
|
-
return 1.0;
|
|
62721
|
-
}
|
|
62722
|
-
|
|
62723
|
-
fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
|
|
62724
|
-
var zr = vec2f(z_in.x, z_in.z);
|
|
62725
|
-
var zi = vec2f(z_in.y, z_in.w);
|
|
62726
|
-
let cr = vec2f(c.x, c.z);
|
|
62727
|
-
let ci = vec2f(c.y, c.w);
|
|
62728
|
-
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62729
|
-
let zr2 = ds_sqr(zr);
|
|
62730
|
-
let zi2 = ds_sqr(zi);
|
|
62731
|
-
let mag2 = ds_add(zr2, zi2);
|
|
62732
|
-
if (mag2.x > 4.0) {
|
|
62733
|
-
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62734
|
-
}
|
|
62735
|
-
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62736
|
-
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62737
|
-
zi = new_zi;
|
|
62738
|
-
}
|
|
62739
|
-
return 1.0;
|
|
62740
|
-
}
|
|
62741
62640
|
`;
|
|
62742
62641
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
62743
62642
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
@@ -62781,188 +62680,6 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
62781
62680
|
}
|
|
62782
62681
|
return 1.0;
|
|
62783
62682
|
}
|
|
62784
|
-
`;
|
|
62785
|
-
var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
|
|
62786
|
-
uniform sampler2D _refOrbit;
|
|
62787
|
-
uniform int _refOrbitLen;
|
|
62788
|
-
uniform int _refOrbitTexWidth;
|
|
62789
|
-
|
|
62790
|
-
vec2 _pt_fetch_orbit(int i) {
|
|
62791
|
-
int y = i / _refOrbitTexWidth;
|
|
62792
|
-
int x = i - y * _refOrbitTexWidth;
|
|
62793
|
-
return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
|
|
62794
|
-
}
|
|
62795
|
-
|
|
62796
|
-
float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
|
|
62797
|
-
float dr = 0.0;
|
|
62798
|
-
float di = 0.0;
|
|
62799
|
-
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62800
|
-
for (int i = 0; i < orbitLen; i++) {
|
|
62801
|
-
vec2 Zn = _pt_fetch_orbit(i);
|
|
62802
|
-
// delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
|
|
62803
|
-
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62804
|
-
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62805
|
-
dr = new_dr;
|
|
62806
|
-
di = new_di;
|
|
62807
|
-
// Full z = Z_{n+1} + delta for escape check
|
|
62808
|
-
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62809
|
-
float zr = Zn1.x + dr;
|
|
62810
|
-
float zi = Zn1.y + di;
|
|
62811
|
-
float mag2 = zr * zr + zi * zi;
|
|
62812
|
-
if (mag2 > 4.0)
|
|
62813
|
-
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62814
|
-
// Glitch detection: |delta|^2 > |Z|^2
|
|
62815
|
-
float dmag2 = dr * dr + di * di;
|
|
62816
|
-
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62817
|
-
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62818
|
-
// Rebase to absolute coordinates and continue with single-float
|
|
62819
|
-
float abs_zr = Zn1.x + dr;
|
|
62820
|
-
float abs_zi = Zn1.y + di;
|
|
62821
|
-
// Reconstruct absolute c from reference + delta
|
|
62822
|
-
// (Use ds_from for the concept, but single-float suffices for fallback)
|
|
62823
|
-
float cx = abs_zr - dr + delta_c.x;
|
|
62824
|
-
float cy = abs_zi - di + delta_c.y;
|
|
62825
|
-
for (int j = i + 1; j < maxIter; j++) {
|
|
62826
|
-
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62827
|
-
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62828
|
-
abs_zr = new_zr;
|
|
62829
|
-
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62830
|
-
if (mag2 > 4.0)
|
|
62831
|
-
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62832
|
-
}
|
|
62833
|
-
return 1.0;
|
|
62834
|
-
}
|
|
62835
|
-
}
|
|
62836
|
-
return 1.0;
|
|
62837
|
-
}
|
|
62838
|
-
|
|
62839
|
-
float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
|
|
62840
|
-
float dr = z_delta.x;
|
|
62841
|
-
float di = z_delta.y;
|
|
62842
|
-
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62843
|
-
for (int i = 0; i < orbitLen; i++) {
|
|
62844
|
-
vec2 Zn = _pt_fetch_orbit(i);
|
|
62845
|
-
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62846
|
-
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62847
|
-
dr = new_dr;
|
|
62848
|
-
di = new_di;
|
|
62849
|
-
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62850
|
-
float zr = Zn1.x + dr;
|
|
62851
|
-
float zi = Zn1.y + di;
|
|
62852
|
-
float mag2 = zr * zr + zi * zi;
|
|
62853
|
-
if (mag2 > 4.0)
|
|
62854
|
-
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62855
|
-
float dmag2 = dr * dr + di * di;
|
|
62856
|
-
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62857
|
-
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62858
|
-
float abs_zr = Zn1.x + dr;
|
|
62859
|
-
float abs_zi = Zn1.y + di;
|
|
62860
|
-
float cx = delta_c.x;
|
|
62861
|
-
float cy = delta_c.y;
|
|
62862
|
-
for (int j = i + 1; j < maxIter; j++) {
|
|
62863
|
-
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62864
|
-
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62865
|
-
abs_zr = new_zr;
|
|
62866
|
-
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62867
|
-
if (mag2 > 4.0)
|
|
62868
|
-
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62869
|
-
}
|
|
62870
|
-
return 1.0;
|
|
62871
|
-
}
|
|
62872
|
-
}
|
|
62873
|
-
return 1.0;
|
|
62874
|
-
}
|
|
62875
|
-
`;
|
|
62876
|
-
var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
|
|
62877
|
-
@group(0) @binding(1) var _refOrbit: texture_2d<f32>;
|
|
62878
|
-
var<uniform> _refOrbitLen: i32;
|
|
62879
|
-
var<uniform> _refOrbitTexWidth: i32;
|
|
62880
|
-
|
|
62881
|
-
fn _pt_fetch_orbit(i: i32) -> vec2f {
|
|
62882
|
-
let y = i / _refOrbitTexWidth;
|
|
62883
|
-
let x = i - y * _refOrbitTexWidth;
|
|
62884
|
-
return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
|
|
62885
|
-
}
|
|
62886
|
-
|
|
62887
|
-
fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62888
|
-
var dr: f32 = 0.0;
|
|
62889
|
-
var di: f32 = 0.0;
|
|
62890
|
-
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62891
|
-
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62892
|
-
let Zn = _pt_fetch_orbit(i);
|
|
62893
|
-
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62894
|
-
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62895
|
-
dr = new_dr;
|
|
62896
|
-
di = new_di;
|
|
62897
|
-
var Zn1 = vec2f(0.0);
|
|
62898
|
-
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62899
|
-
let zr = Zn1.x + dr;
|
|
62900
|
-
let zi = Zn1.y + di;
|
|
62901
|
-
var mag2 = zr * zr + zi * zi;
|
|
62902
|
-
if (mag2 > 4.0) {
|
|
62903
|
-
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62904
|
-
}
|
|
62905
|
-
let dmag2 = dr * dr + di * di;
|
|
62906
|
-
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62907
|
-
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62908
|
-
var f_zr = Zn1.x + dr;
|
|
62909
|
-
var f_zi = Zn1.y + di;
|
|
62910
|
-
let cx = delta_c.x;
|
|
62911
|
-
let cy = delta_c.y;
|
|
62912
|
-
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62913
|
-
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62914
|
-
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62915
|
-
f_zr = t_zr;
|
|
62916
|
-
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62917
|
-
if (mag2 > 4.0) {
|
|
62918
|
-
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62919
|
-
}
|
|
62920
|
-
}
|
|
62921
|
-
return 1.0;
|
|
62922
|
-
}
|
|
62923
|
-
}
|
|
62924
|
-
return 1.0;
|
|
62925
|
-
}
|
|
62926
|
-
|
|
62927
|
-
fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62928
|
-
var dr = z_delta.x;
|
|
62929
|
-
var di = z_delta.y;
|
|
62930
|
-
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62931
|
-
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62932
|
-
let Zn = _pt_fetch_orbit(i);
|
|
62933
|
-
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62934
|
-
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62935
|
-
dr = new_dr;
|
|
62936
|
-
di = new_di;
|
|
62937
|
-
var Zn1 = vec2f(0.0);
|
|
62938
|
-
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62939
|
-
let zr = Zn1.x + dr;
|
|
62940
|
-
let zi = Zn1.y + di;
|
|
62941
|
-
var mag2 = zr * zr + zi * zi;
|
|
62942
|
-
if (mag2 > 4.0) {
|
|
62943
|
-
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62944
|
-
}
|
|
62945
|
-
let dmag2 = dr * dr + di * di;
|
|
62946
|
-
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62947
|
-
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62948
|
-
var f_zr = Zn1.x + dr;
|
|
62949
|
-
var f_zi = Zn1.y + di;
|
|
62950
|
-
let cx = delta_c.x;
|
|
62951
|
-
let cy = delta_c.y;
|
|
62952
|
-
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62953
|
-
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62954
|
-
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62955
|
-
f_zr = t_zr;
|
|
62956
|
-
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62957
|
-
if (mag2 > 4.0) {
|
|
62958
|
-
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62959
|
-
}
|
|
62960
|
-
}
|
|
62961
|
-
return 1.0;
|
|
62962
|
-
}
|
|
62963
|
-
}
|
|
62964
|
-
return 1.0;
|
|
62965
|
-
}
|
|
62966
62683
|
`;
|
|
62967
62684
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
62968
62685
|
float _gpu_srgb_to_linear(float c) {
|
|
@@ -63402,7 +63119,6 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
63402
63119
|
const constants = this.getConstants();
|
|
63403
63120
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
63404
63121
|
const target = this.createTarget({
|
|
63405
|
-
hints: options.hints,
|
|
63406
63122
|
functions: (id) => {
|
|
63407
63123
|
if (userFunctions && id in userFunctions) {
|
|
63408
63124
|
const fn = userFunctions[id];
|
|
@@ -63441,65 +63157,12 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
63441
63157
|
if (code.includes("_gpu_besselJ"))
|
|
63442
63158
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
63443
63159
|
if (code.includes("_fractal_")) {
|
|
63444
|
-
|
|
63445
|
-
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63446
|
-
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
|
|
63447
|
-
} else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
|
|
63448
|
-
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63449
|
-
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
|
|
63450
|
-
} else {
|
|
63451
|
-
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
63452
|
-
}
|
|
63160
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
63453
63161
|
}
|
|
63454
63162
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
63455
63163
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
63456
63164
|
}
|
|
63457
63165
|
if (preamble) result.preamble = preamble;
|
|
63458
|
-
if (code.includes("_fractal_") && options.hints?.viewport) {
|
|
63459
|
-
const strategy = selectFractalStrategy(target);
|
|
63460
|
-
const radius = options.hints.viewport.radius;
|
|
63461
|
-
switch (strategy) {
|
|
63462
|
-
case "single":
|
|
63463
|
-
result.staleWhen = { radiusBelow: 1e-6 };
|
|
63464
|
-
break;
|
|
63465
|
-
case "double":
|
|
63466
|
-
result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
|
|
63467
|
-
break;
|
|
63468
|
-
case "perturbation":
|
|
63469
|
-
result.staleWhen = {
|
|
63470
|
-
radiusAbove: 1e-5,
|
|
63471
|
-
radiusBelow: radius * 0.01,
|
|
63472
|
-
centerDistance: radius * 2
|
|
63473
|
-
};
|
|
63474
|
-
break;
|
|
63475
|
-
}
|
|
63476
|
-
}
|
|
63477
|
-
if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
|
|
63478
|
-
const viewport = options.hints.viewport;
|
|
63479
|
-
const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
|
|
63480
|
-
const maxIter = 1e3;
|
|
63481
|
-
const orbit = computeReferenceOrbit(
|
|
63482
|
-
viewport.center,
|
|
63483
|
-
maxIter,
|
|
63484
|
-
digits
|
|
63485
|
-
);
|
|
63486
|
-
const orbitLen = orbit.length / 2;
|
|
63487
|
-
const texWidth = Math.min(orbitLen, 4096);
|
|
63488
|
-
const texHeight = Math.ceil(orbitLen / texWidth);
|
|
63489
|
-
result.textures = {
|
|
63490
|
-
_refOrbit: {
|
|
63491
|
-
data: orbit,
|
|
63492
|
-
width: texWidth,
|
|
63493
|
-
height: texHeight,
|
|
63494
|
-
format: "rg32f"
|
|
63495
|
-
}
|
|
63496
|
-
};
|
|
63497
|
-
result.uniforms = {
|
|
63498
|
-
...result.uniforms,
|
|
63499
|
-
_refOrbitLen: orbitLen,
|
|
63500
|
-
_refOrbitTexWidth: texWidth
|
|
63501
|
-
};
|
|
63502
|
-
}
|
|
63503
63166
|
return result;
|
|
63504
63167
|
}
|
|
63505
63168
|
compileToSource(expr2, _options = {}) {
|
|
@@ -68482,7 +68145,7 @@ ${workgroupAttr}fn main(${paramStr})${returnStr} {
|
|
|
68482
68145
|
_setDefaultEngineFactory(() => new ComputeEngine());
|
|
68483
68146
|
|
|
68484
68147
|
// src/core.ts
|
|
68485
|
-
var version = "0.55.
|
|
68148
|
+
var version = "0.55.6";
|
|
68486
68149
|
return __toCommonJS(core_exports);
|
|
68487
68150
|
})();
|
|
68488
68151
|
/*! Bundled license information:
|