@cortex-js/compute-engine 0.56.0 → 0.57.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.
Files changed (258) hide show
  1. package/dist/compile.esm.js +450 -42
  2. package/dist/compile.min.esm.js +57 -57
  3. package/dist/compile.min.umd.cjs +58 -58
  4. package/dist/compile.umd.cjs +450 -42
  5. package/dist/compute-engine.esm.js +677 -49
  6. package/dist/compute-engine.min.esm.js +62 -62
  7. package/dist/compute-engine.min.umd.cjs +62 -62
  8. package/dist/compute-engine.umd.cjs +677 -49
  9. package/dist/core.esm.js +676 -48
  10. package/dist/core.min.esm.js +61 -61
  11. package/dist/core.min.umd.cjs +61 -61
  12. package/dist/core.umd.cjs +676 -48
  13. package/dist/interval.esm.js +228 -16
  14. package/dist/interval.min.esm.js +6 -6
  15. package/dist/interval.min.umd.cjs +6 -6
  16. package/dist/interval.umd.cjs +228 -16
  17. package/dist/latex-syntax.esm.js +269 -16
  18. package/dist/latex-syntax.min.esm.js +6 -6
  19. package/dist/latex-syntax.min.umd.cjs +6 -6
  20. package/dist/latex-syntax.umd.cjs +269 -16
  21. package/dist/math-json.esm.js +2 -2
  22. package/dist/math-json.min.esm.js +2 -2
  23. package/dist/math-json.min.umd.cjs +2 -2
  24. package/dist/math-json.umd.cjs +2 -2
  25. package/dist/numerics.esm.js +2 -2
  26. package/dist/numerics.min.esm.js +2 -2
  27. package/dist/numerics.min.umd.cjs +2 -2
  28. package/dist/numerics.umd.cjs +2 -2
  29. package/dist/types/big-decimal/big-decimal.d.ts +1 -1
  30. package/dist/types/big-decimal/index.d.ts +1 -1
  31. package/dist/types/big-decimal/transcendentals.d.ts +1 -1
  32. package/dist/types/big-decimal/utils.d.ts +1 -1
  33. package/dist/types/common/ansi-codes.d.ts +1 -1
  34. package/dist/types/common/configuration-change.d.ts +1 -1
  35. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  36. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  37. package/dist/types/common/interruptible.d.ts +1 -1
  38. package/dist/types/common/one-of.d.ts +1 -1
  39. package/dist/types/common/signals.d.ts +1 -1
  40. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  41. package/dist/types/common/type/boxed-type.d.ts +1 -1
  42. package/dist/types/common/type/lexer.d.ts +1 -1
  43. package/dist/types/common/type/parse.d.ts +1 -1
  44. package/dist/types/common/type/parser.d.ts +1 -1
  45. package/dist/types/common/type/primitive.d.ts +1 -1
  46. package/dist/types/common/type/reduce.d.ts +1 -1
  47. package/dist/types/common/type/serialize.d.ts +1 -1
  48. package/dist/types/common/type/subtype.d.ts +1 -1
  49. package/dist/types/common/type/type-builder.d.ts +1 -1
  50. package/dist/types/common/type/types.d.ts +1 -1
  51. package/dist/types/common/type/utils.d.ts +1 -1
  52. package/dist/types/common/utils.d.ts +1 -1
  53. package/dist/types/compile.d.ts +1 -1
  54. package/dist/types/compute-engine/assume.d.ts +1 -1
  55. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +6 -1
  56. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
  69. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  71. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  72. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  73. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  74. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  75. package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
  76. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  77. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  78. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  79. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  80. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  81. package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
  82. package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
  83. package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
  84. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  85. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  86. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  87. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  88. package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
  89. package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
  90. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  91. package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
  92. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  93. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  94. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  95. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  96. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
  97. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  98. package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
  99. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  100. package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
  101. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  102. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  103. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  104. package/dist/types/compute-engine/compilation/base-compiler.d.ts +55 -6
  105. package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  108. package/dist/types/compute-engine/compilation/gpu-target.d.ts +1 -1
  109. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
  110. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/types.d.ts +1 -1
  113. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  114. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  115. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  116. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  117. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  118. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  119. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  120. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  121. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  132. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  133. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  134. package/dist/types/compute-engine/global-types.d.ts +1 -1
  135. package/dist/types/compute-engine/index.d.ts +3 -2
  136. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  137. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  138. package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
  139. package/dist/types/compute-engine/interval/index.d.ts +1 -1
  140. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  141. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  142. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  143. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  144. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  145. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  146. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  147. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-colors.d.ts +1 -1
  148. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  149. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  150. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  151. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  168. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/types.d.ts +40 -1
  171. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  172. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  173. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  174. package/dist/types/compute-engine/library/collections.d.ts +5 -3
  175. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  176. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  177. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  178. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  179. package/dist/types/compute-engine/library/core.d.ts +1 -1
  180. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  181. package/dist/types/compute-engine/library/library.d.ts +1 -1
  182. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  183. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  184. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  185. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  186. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  187. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  188. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  189. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  190. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  191. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  192. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  193. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  194. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  195. package/dist/types/compute-engine/library/units.d.ts +1 -1
  196. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  197. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  198. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  199. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  200. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  201. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  202. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  203. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  204. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  205. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  206. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  207. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  208. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  209. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  211. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  217. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  218. package/dist/types/compute-engine/oeis.d.ts +1 -1
  219. package/dist/types/compute-engine/sequence.d.ts +1 -1
  220. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  221. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  222. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  223. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  224. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  225. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  226. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  227. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  228. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  229. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  230. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  238. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  239. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  240. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  241. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  242. package/dist/types/compute-engine/types-engine.d.ts +18 -1
  243. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  244. package/dist/types/compute-engine/types-expression.d.ts +1 -1
  245. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
  246. package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
  247. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  248. package/dist/types/compute-engine/types.d.ts +1 -1
  249. package/dist/types/compute-engine.d.ts +1 -1
  250. package/dist/types/core.d.ts +1 -1
  251. package/dist/types/interval.d.ts +1 -1
  252. package/dist/types/latex-syntax.d.ts +2 -2
  253. package/dist/types/math-json/symbols.d.ts +1 -1
  254. package/dist/types/math-json/types.d.ts +1 -1
  255. package/dist/types/math-json/utils.d.ts +1 -1
  256. package/dist/types/math-json.d.ts +2 -2
  257. package/dist/types/numerics.d.ts +1 -1
  258. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** Compute Engine 0.56.0 */
1
+ /** Compute Engine 0.57.0 */
2
2
 
3
3
  // src/math-json/utils.ts
4
4
  var MISSING = ["Error", "'missing'"];
@@ -3681,6 +3681,64 @@ function parseQuantifier(kind) {
3681
3681
  }
3682
3682
 
3683
3683
  // src/compute-engine/latex-syntax/dictionary/definitions-core.ts
3684
+ var COMPONENT_ACCESS_HEADS = {
3685
+ x: "First",
3686
+ y: "Second",
3687
+ z: "Third",
3688
+ real: "Real",
3689
+ re: "Real",
3690
+ imag: "Imaginary",
3691
+ im: "Imaginary",
3692
+ count: "Length",
3693
+ total: "Sum",
3694
+ max: "Max",
3695
+ min: "Min"
3696
+ };
3697
+ function memberHead(name) {
3698
+ return COMPONENT_ACCESS_HEADS[name] ?? null;
3699
+ }
3700
+ function parseComponentAccess(parser, lhs) {
3701
+ parser.skipVisualSpace();
3702
+ if (parser.match("\\operatorname")) {
3703
+ const name = parser.parseStringGroup();
3704
+ if (name === null) return null;
3705
+ const head = memberHead(name.trim());
3706
+ if (head === null) return null;
3707
+ return [head, lhs];
3708
+ }
3709
+ const tok = parser.peek;
3710
+ if (typeof tok === "string" && tok.startsWith("\\")) {
3711
+ const bare = tok.slice(1);
3712
+ const head = memberHead(bare);
3713
+ if (head !== null) {
3714
+ parser.nextToken();
3715
+ return [head, lhs];
3716
+ }
3717
+ return null;
3718
+ }
3719
+ if (typeof tok === "string" && /^[a-zA-Z]$/.test(tok)) {
3720
+ const head = memberHead(tok);
3721
+ if (head === null) return null;
3722
+ parser.nextToken();
3723
+ return [head, lhs];
3724
+ }
3725
+ return null;
3726
+ }
3727
+ function parseWhenRestriction(parser, lhs, close) {
3728
+ parser.addBoundary(close);
3729
+ parser.skipVisualSpace();
3730
+ const cond = parser.parseExpression({ minPrec: 0 });
3731
+ if (cond === null) {
3732
+ parser.removeBoundary();
3733
+ return null;
3734
+ }
3735
+ parser.skipVisualSpace();
3736
+ if (!parser.matchBoundary()) {
3737
+ parser.removeBoundary();
3738
+ return null;
3739
+ }
3740
+ return ["When", lhs, cond];
3741
+ }
3684
3742
  function parseSequence(parser, terminator, lhs, prec, sep) {
3685
3743
  if (terminator && terminator.minPrec >= prec) return null;
3686
3744
  const result = lhs ? [lhs] : ["Nothing"];
@@ -4152,6 +4210,15 @@ var DEFINITIONS_CORE = [
4152
4210
  }
4153
4211
  },
4154
4212
  { name: "LatexTokens", serialize: serializeLatexTokens },
4213
+ // Component-access postfix: expr.member (C3)
4214
+ // The '.' trigger is consumed before the parse function is called.
4215
+ // Precedence 850 > 810 (At/indexing) so .x chains tightly.
4216
+ {
4217
+ kind: "postfix",
4218
+ precedence: 850,
4219
+ latexTrigger: ["."],
4220
+ parse: parseComponentAccess
4221
+ },
4155
4222
  {
4156
4223
  name: "At",
4157
4224
  kind: "postfix",
@@ -4172,6 +4239,29 @@ var DEFINITIONS_CORE = [
4172
4239
  latexTrigger: ["\\left", "\\lbrack"],
4173
4240
  parse: parseAt("\\right", "\\rbrack")
4174
4241
  },
4242
+ // When-restriction: `expr\left\{cond\right\}` → `When(expr, cond)` (D3)
4243
+ {
4244
+ name: "When",
4245
+ kind: "postfix",
4246
+ precedence: 800,
4247
+ latexTrigger: ["\\left", "\\{"],
4248
+ parse: (parser, lhs) => parseWhenRestriction(parser, lhs, ["\\right", "\\}"]),
4249
+ serialize: (serializer, expr) => {
4250
+ const e = operand(expr, 1);
4251
+ const cond = operand(expr, 2);
4252
+ if (!e || !cond) return "";
4253
+ const clauses = operator(cond) === "And" ? operands(cond) ?? [] : [cond];
4254
+ const inner = clauses.map((c) => `\\left\\{${serializer.serialize(c)}\\right\\}`).join("");
4255
+ return `${serializer.serialize(e)}${inner}`;
4256
+ }
4257
+ },
4258
+ // When-restriction: bare `expr\{cond\}` → `When(expr, cond)`
4259
+ {
4260
+ kind: "postfix",
4261
+ precedence: 800,
4262
+ latexTrigger: ["\\{"],
4263
+ parse: (parser, lhs) => parseWhenRestriction(parser, lhs, ["\\}"])
4264
+ },
4175
4265
  {
4176
4266
  kind: "postfix",
4177
4267
  latexTrigger: ["_"],
@@ -4254,6 +4344,29 @@ var DEFINITIONS_CORE = [
4254
4344
  return "";
4255
4345
  }
4256
4346
  },
4347
+ // Additional triggers for Range: `...`, `\ldots`, and `\dots` are
4348
+ // equivalent to `..` when used as infix operators (e.g. `[1...9]`).
4349
+ // No `name` field here — names must be unique per the dictionary rules;
4350
+ // the first Range entry owns the name. When there is no LHS the symbol
4351
+ // entries near the top of the file still fire (ContinuationPlaceholder).
4352
+ {
4353
+ latexTrigger: [".", ".", "."],
4354
+ kind: "infix",
4355
+ precedence: 800,
4356
+ parse: parseRange
4357
+ },
4358
+ {
4359
+ latexTrigger: ["\\ldots"],
4360
+ kind: "infix",
4361
+ precedence: 800,
4362
+ parse: parseRange
4363
+ },
4364
+ {
4365
+ latexTrigger: ["\\dots"],
4366
+ kind: "infix",
4367
+ precedence: 800,
4368
+ parse: parseRange
4369
+ },
4257
4370
  {
4258
4371
  latexTrigger: [";"],
4259
4372
  kind: "infix",
@@ -4438,13 +4551,24 @@ var DEFINITIONS_CORE = [
4438
4551
  const args = operands(expr);
4439
4552
  if (!args || args.length < 2) return "";
4440
4553
  const body = args[0];
4441
- const indexing = args[1];
4442
- if (operator(indexing) === "Element") {
4443
- const index = operand(indexing, 1);
4444
- const range = operand(indexing, 2);
4445
- if (operator(range) === "Range") {
4446
- const lo = operand(range, 1);
4447
- const hi = operand(range, 2);
4554
+ const elements = args.slice(1);
4555
+ const allElements = elements.every((e) => operator(e) === "Element");
4556
+ if (!allElements) {
4557
+ return joinLatex([
4558
+ "\\operatorname{Loop}(",
4559
+ serializer.serialize(body),
4560
+ ", ",
4561
+ serializer.serialize(elements[0]),
4562
+ ")"
4563
+ ]);
4564
+ }
4565
+ if (elements.length === 1) {
4566
+ const elem = elements[0];
4567
+ const index = operand(elem, 1);
4568
+ const coll = operand(elem, 2);
4569
+ if (operator(coll) === "Range") {
4570
+ const lo = operand(coll, 1);
4571
+ const hi = operand(coll, 2);
4448
4572
  return joinLatex([
4449
4573
  "\\text{for }",
4450
4574
  serializer.serialize(index),
@@ -4456,13 +4580,27 @@ var DEFINITIONS_CORE = [
4456
4580
  serializer.serialize(body)
4457
4581
  ]);
4458
4582
  }
4583
+ return joinLatex([
4584
+ serializer.serialize(body),
4585
+ " \\operatorname{for} ",
4586
+ serializer.serialize(index),
4587
+ " = ",
4588
+ serializer.serialize(coll)
4589
+ ]);
4459
4590
  }
4591
+ const bindings = elements.map((elem) => {
4592
+ const name = operand(elem, 1);
4593
+ const coll = operand(elem, 2);
4594
+ return joinLatex([
4595
+ serializer.serialize(name),
4596
+ " = ",
4597
+ serializer.serialize(coll)
4598
+ ]);
4599
+ }).join(", ");
4460
4600
  return joinLatex([
4461
- "\\operatorname{Loop}(",
4462
4601
  serializer.serialize(body),
4463
- ", ",
4464
- serializer.serialize(indexing),
4465
- ")"
4602
+ " \\operatorname{for} ",
4603
+ bindings
4466
4604
  ]);
4467
4605
  }
4468
4606
  },
@@ -4495,6 +4633,18 @@ var DEFINITIONS_CORE = [
4495
4633
  precedence: 245,
4496
4634
  parse: (parser, until) => parseForExpression(parser, until)
4497
4635
  },
4636
+ // \operatorname{for} as postfix infix (list comprehension):
4637
+ // `body \operatorname{for} x = L_1, y = L_2`
4638
+ // Precedence 19 — just below comma (20) so the body is allowed to use
4639
+ // any operator (including comma sequencing) up to the keyword, and the
4640
+ // bindings can be comma-separated below us.
4641
+ {
4642
+ symbolTrigger: "for",
4643
+ kind: "infix",
4644
+ associativity: "none",
4645
+ precedence: 19,
4646
+ parse: (parser, lhs, until) => parseForComprehension(parser, lhs, until)
4647
+ },
4498
4648
  // \operatorname{break}
4499
4649
  {
4500
4650
  symbolTrigger: "break",
@@ -4699,7 +4849,10 @@ var DEFINITIONS_CORE = [
4699
4849
  if (!sym || !parser.getSymbolType(sym).matches("function")) return null;
4700
4850
  parser.addBoundary([")"]);
4701
4851
  const expr = parser.parseExpression(until);
4702
- if (!parser.matchBoundary()) return null;
4852
+ if (!parser.matchBoundary()) {
4853
+ parser.removeBoundary();
4854
+ return null;
4855
+ }
4703
4856
  if (!parser.match("<}>")) return null;
4704
4857
  return ["Derivative", lhs, expr];
4705
4858
  }
@@ -5140,7 +5293,12 @@ function parseBrackets(parser, body) {
5140
5293
  if (isEmptySequence(body)) return ["List"];
5141
5294
  const h = operator(body);
5142
5295
  if (h === "Range" || h === "Linspace") return body;
5143
- if (h === "Sequence") return ["List", ...operands(body)];
5296
+ if (h === "Sequence") {
5297
+ const elems = operands(body);
5298
+ const inferred = tryInferRangeFromElements(elems, parser);
5299
+ if (inferred) return inferred;
5300
+ return ["List", ...elems];
5301
+ }
5144
5302
  if (h === "Delimiter") {
5145
5303
  const delim = stringValue(operand(body, 2)) ?? "...";
5146
5304
  if (delim === ";" || delim === ".;.") {
@@ -5153,12 +5311,37 @@ function parseBrackets(parser, body) {
5153
5311
  }
5154
5312
  if (delim === "," || delim === ".,.") {
5155
5313
  body = operand(body, 1);
5156
- if (operator(body) === "Sequence") return ["List", ...operands(body)];
5314
+ if (operator(body) === "Sequence") {
5315
+ const elems = operands(body);
5316
+ const inferred = tryInferRangeFromElements(elems, parser);
5317
+ if (inferred) return inferred;
5318
+ return ["List", ...elems];
5319
+ }
5157
5320
  return ["List", body ?? "Nothing"];
5158
5321
  }
5159
5322
  }
5160
5323
  return ["List", body];
5161
5324
  }
5325
+ function tryInferRangeFromElements(elems, parser) {
5326
+ if (elems.length < 4) return null;
5327
+ const penultimate = elems[elems.length - 2];
5328
+ if (symbol(penultimate) !== "ContinuationPlaceholder") return null;
5329
+ const samples = elems.slice(0, -2);
5330
+ const endExpr = elems[elems.length - 1];
5331
+ if (samples.length < 2) return null;
5332
+ const sampleNums = samples.map(machineValue);
5333
+ if (sampleNums.some((n) => n === null)) return null;
5334
+ const nums = sampleNums;
5335
+ const step = nums[nums.length - 1] - nums[nums.length - 2];
5336
+ const tol = parser.options.tolerance;
5337
+ if (Math.abs(step) < tol)
5338
+ return parser.error("degenerate-range-step", parser.index);
5339
+ for (let i = 1; i < nums.length; i++) {
5340
+ if (Math.abs(nums[i] - nums[i - 1] - step) > tol)
5341
+ return parser.error("inconsistent-range-samples", parser.index);
5342
+ }
5343
+ return ["Range", nums[0], endExpr, step];
5344
+ }
5162
5345
  function serializeList(serializer, expr) {
5163
5346
  if (nops(expr) > 1 && operands(expr).every((x) => {
5164
5347
  const op = operator(x);
@@ -5410,6 +5593,35 @@ function parseForExpression(parser, until) {
5410
5593
  ["Element", index, ["Range", lower, upper]]
5411
5594
  ];
5412
5595
  }
5596
+ function parseForComprehension(parser, lhs, until) {
5597
+ const bindingTerminator = {
5598
+ minPrec: 21,
5599
+ // Above comma (20) and ; (19), so `x = L_1` is captured whole
5600
+ condition: (p) => {
5601
+ if (until?.condition?.(p)) return true;
5602
+ const saved = p.index;
5603
+ p.skipVisualSpace();
5604
+ const isComma = p.peek === ",";
5605
+ p.index = saved;
5606
+ return isComma;
5607
+ }
5608
+ };
5609
+ const elements = [];
5610
+ do {
5611
+ parser.skipVisualSpace();
5612
+ const binding = parser.parseExpression(bindingTerminator);
5613
+ if (binding === null) break;
5614
+ const op = operator(binding);
5615
+ if (op !== "Equal" && op !== "Assign") return null;
5616
+ const name = operand(binding, 1);
5617
+ const list = operand(binding, 2);
5618
+ if (!name || !list) return null;
5619
+ elements.push(["Element", name, list]);
5620
+ parser.skipVisualSpace();
5621
+ } while (parser.match(","));
5622
+ if (elements.length === 0) return null;
5623
+ return ["Loop", lhs, ...elements];
5624
+ }
5413
5625
  function parseWhereExpression(parser, lhs, until) {
5414
5626
  const bindingTerminator = {
5415
5627
  minPrec: 21,
@@ -14466,6 +14678,19 @@ var _Parser = class __Parser {
14466
14678
  } while (postfix !== null);
14467
14679
  }
14468
14680
  if (result !== null) result = this.parseSupsub(result);
14681
+ if (result !== null) {
14682
+ let postfix = null;
14683
+ let index = this.index;
14684
+ do {
14685
+ postfix = this.parsePostfixOperator(result, until);
14686
+ result = postfix ?? result;
14687
+ if (this.index === index && postfix !== null) {
14688
+ console.assert(this.index !== index, "No token consumed");
14689
+ break;
14690
+ }
14691
+ index = this.index;
14692
+ } while (postfix !== null);
14693
+ }
14469
14694
  if (result === null) {
14470
14695
  result = this.options.parseUnexpectedToken?.(null, this) ?? null;
14471
14696
  if (result === null && this.peek.startsWith("\\")) {
@@ -14974,6 +15199,28 @@ function toDecimalNumber(wholePart, fractionalPart, exp) {
14974
15199
  }
14975
15200
 
14976
15201
  // src/compute-engine/latex-syntax/serializer.ts
15202
+ var DOT_NOTATION_MAP = {
15203
+ First: ".x",
15204
+ Second: ".y",
15205
+ Third: ".z",
15206
+ Real: ".\\operatorname{real}",
15207
+ Imaginary: ".\\operatorname{imag}",
15208
+ Length: ".\\operatorname{count}",
15209
+ Sum: ".\\operatorname{total}",
15210
+ Max: ".\\max",
15211
+ Min: ".\\min"
15212
+ };
15213
+ function trySerializeDotNotation(serializer, expr) {
15214
+ if (!serializer.options.dotNotation) return null;
15215
+ const ops = operands(expr);
15216
+ if (!ops || ops.length !== 1) return null;
15217
+ const head = operator(expr);
15218
+ if (!head) return null;
15219
+ const suffix = DOT_NOTATION_MAP[head];
15220
+ if (suffix === void 0) return null;
15221
+ const lhs = serializer.wrap(ops[0], 810);
15222
+ return `${lhs}${suffix}`;
15223
+ }
14977
15224
  var ACCENT_MODIFIERS = {
14978
15225
  deg: (s) => `${s}\\degree`,
14979
15226
  prime: (s) => `${s}^{\\prime}`,
@@ -15017,6 +15264,7 @@ var Serializer5 = class {
15017
15264
  constructor(dictionary, options) {
15018
15265
  this.dictionary = dictionary;
15019
15266
  this.options = {
15267
+ dotNotation: false,
15020
15268
  dmsFormat: false,
15021
15269
  angleNormalization: "none",
15022
15270
  ...options
@@ -15115,6 +15363,8 @@ var Serializer5 = class {
15115
15363
  return def?.serialize?.(this, expr) ?? serializeSymbol(symbol(expr)) ?? "";
15116
15364
  }
15117
15365
  serializeFunction(expr, def) {
15366
+ const dotResult = trySerializeDotNotation(this, expr);
15367
+ if (dotResult !== null) return dotResult;
15118
15368
  if (def?.serialize) return def.serialize(this, expr);
15119
15369
  const h = operator(expr);
15120
15370
  return serializeSymbol(h, "auto") + this.wrapArguments(expr);
@@ -15357,6 +15607,8 @@ function defaultParseOptions(opts) {
15357
15607
  preserveLatex: opts.preserveLatex ?? false,
15358
15608
  quantifierScope: opts.quantifierScope ?? "tight",
15359
15609
  timeDerivativeVariable: opts.timeDerivativeVariable ?? "t",
15610
+ // Standalone mode has no engine; use the same default as ComputeEngine
15611
+ tolerance: 1e-7,
15360
15612
  // Callbacks -- standalone mode has no engine, so these are stubs
15361
15613
  getSymbolType: (_id) => BoxedType.unknown,
15362
15614
  hasSubscriptEvaluate: (_id) => false,
@@ -15389,6 +15641,7 @@ function defaultSerializeOptions(opts) {
15389
15641
  invisiblePlus: "",
15390
15642
  multiply: "\\times",
15391
15643
  missingSymbol: "\\blacksquare",
15644
+ dotNotation: false,
15392
15645
  dmsFormat: false,
15393
15646
  angleNormalization: "none",
15394
15647
  // Style callbacks -- use same defaults as the engine
@@ -15457,7 +15710,7 @@ function serialize(expr) {
15457
15710
  }
15458
15711
 
15459
15712
  // src/latex-syntax.ts
15460
- var version = "0.56.0";
15713
+ var version = "0.57.0";
15461
15714
  export {
15462
15715
  DEFINITIONS_ALGEBRA as ALGEBRA_DICTIONARY,
15463
15716
  DEFINITIONS_ARITHMETIC as ARITHMETIC_DICTIONARY,