@cortex-js/compute-engine 0.55.5 → 0.56.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 (259) hide show
  1. package/dist/compile.esm.js +912 -770
  2. package/dist/compile.min.esm.js +300 -523
  3. package/dist/compile.min.umd.cjs +301 -524
  4. package/dist/compile.umd.cjs +912 -770
  5. package/dist/compute-engine.esm.js +1517 -902
  6. package/dist/compute-engine.min.esm.js +300 -522
  7. package/dist/compute-engine.min.umd.cjs +300 -522
  8. package/dist/compute-engine.umd.cjs +1517 -902
  9. package/dist/core.esm.js +1516 -901
  10. package/dist/core.min.esm.js +299 -521
  11. package/dist/core.min.umd.cjs +299 -521
  12. package/dist/core.umd.cjs +1516 -901
  13. package/dist/interval.esm.js +268 -63
  14. package/dist/interval.min.esm.js +7 -7
  15. package/dist/interval.min.umd.cjs +7 -7
  16. package/dist/interval.umd.cjs +268 -63
  17. package/dist/latex-syntax.esm.js +371 -77
  18. package/dist/latex-syntax.min.esm.js +7 -6
  19. package/dist/latex-syntax.min.umd.cjs +7 -6
  20. package/dist/latex-syntax.umd.cjs +371 -77
  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 +4 -2
  26. package/dist/numerics.min.esm.js +3 -3
  27. package/dist/numerics.min.umd.cjs +3 -3
  28. package/dist/numerics.umd.cjs +4 -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 +2 -2
  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 +1 -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 +1 -1
  105. package/dist/types/compute-engine/compilation/compile-expression.d.ts +2 -3
  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 +15 -58
  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 +25 -3
  111. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/types.d.ts +1 -67
  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 +23 -3
  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 +4 -3
  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 +10 -0
  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 +9 -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 +4 -2
  169. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -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 +1 -1
  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 +6 -2
  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 +2 -3
  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 +2 -2
  259. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +0 -19
@@ -1,4 +1,4 @@
1
- /** LatexSyntax 0.55.5 */
1
+ /** LatexSyntax 0.56.0 */
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.LatexSyntax = {}));})(this, (function (exports) { 'use strict';
3
3
  var LatexSyntax = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -1190,6 +1190,7 @@ var LatexSyntax = (() => {
1190
1190
  ];
1191
1191
  var VALUE_TYPES = [
1192
1192
  "value",
1193
+ "color",
1193
1194
  ...COLLECTION_TYPES,
1194
1195
  ...SCALAR_TYPES
1195
1196
  ];
@@ -2841,6 +2842,7 @@ var LatexSyntax = (() => {
2841
2842
  symbol: [],
2842
2843
  boolean: [],
2843
2844
  string: [],
2845
+ color: [],
2844
2846
  expression: EXPRESSION_TYPES
2845
2847
  };
2846
2848
  function isPrimitiveSubtype(lhs, rhs) {
@@ -4787,10 +4789,6 @@ var LatexSyntax = (() => {
4787
4789
  // Lagrange notation
4788
4790
  {
4789
4791
  name: "Derivative",
4790
- // @todo: Leibniz notation: {% latex " \\frac{d^n}{dx^n} f(x)" %}
4791
- // @todo: Euler modified notation: This notation is used by Mathematica. The Euler notation uses `D` instead of
4792
- // `\partial`: `\partial_{x} f`, `\partial_{x,y} f`
4793
- // Newton notation (\dot{v}, \ddot{v}) is implemented below
4794
4792
  serialize: (serializer, expr) => {
4795
4793
  const degree = machineValue(operand(expr, 2)) ?? 1;
4796
4794
  const base = serializer.serialize(operand(expr, 1));
@@ -5828,14 +5826,18 @@ var LatexSyntax = (() => {
5828
5826
  return ["Complement", lhs];
5829
5827
  }
5830
5828
  // precedence: 240,
5831
- // @todo: serialize for the multiple argument case
5832
5829
  },
5833
5830
  {
5834
5831
  name: "Complement",
5835
5832
  latexTrigger: ["^", "<{>", "\\complement", "<}>"],
5836
- kind: "postfix"
5833
+ kind: "postfix",
5837
5834
  // precedence: 240,
5838
- // @todo: serialize for the multiple argument case
5835
+ serialize: (serializer, expr) => {
5836
+ return joinLatex([
5837
+ serializer.serialize(operand(expr, 1)),
5838
+ "^\\complement"
5839
+ ]);
5840
+ }
5839
5841
  },
5840
5842
  {
5841
5843
  name: "Intersection",
@@ -5922,7 +5924,6 @@ var LatexSyntax = (() => {
5922
5924
  // commands like \rbrack a, b \rbrack which are unambiguous.
5923
5925
  {
5924
5926
  name: "Multiple",
5925
- // @todo: parse
5926
5927
  serialize: serializeSet
5927
5928
  },
5928
5929
  {
@@ -5931,14 +5932,28 @@ var LatexSyntax = (() => {
5931
5932
  kind: "infix",
5932
5933
  precedence: 350
5933
5934
  },
5935
+ // \mid as a separator/operator (used in set-builder notation: {x \mid x > 0})
5936
+ // Low precedence so it binds loosely — everything on each side is parsed first
5937
+ {
5938
+ name: "Divides",
5939
+ latexTrigger: ["\\mid"],
5940
+ kind: "infix",
5941
+ precedence: 160
5942
+ },
5934
5943
  {
5935
5944
  name: "Set",
5936
5945
  kind: "matchfix",
5937
5946
  openTrigger: "{",
5938
5947
  closeTrigger: "}",
5939
- // @todo: the set syntax can also include conditions...
5940
5948
  parse: (_parser, body) => {
5941
5949
  if (isEmptySequence(body)) return "EmptySet";
5950
+ const h = operator(body);
5951
+ if (h === "Divides" || h === "Colon") {
5952
+ const expr = operand(body, 1);
5953
+ const condition = operand(body, 2);
5954
+ if (expr !== null && condition !== null)
5955
+ return ["Set", expr, ["Condition", condition]];
5956
+ }
5942
5957
  if (operator(body) == "Delimiter" && stringValue(operand(body, 2)) === ",") {
5943
5958
  body = operand(body, 1);
5944
5959
  }
@@ -5946,6 +5961,17 @@ var LatexSyntax = (() => {
5946
5961
  return ["Set", ...operands(body)];
5947
5962
  },
5948
5963
  serialize: (serializer, expr) => {
5964
+ if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
5965
+ const condition = operand(expr, 2);
5966
+ return joinLatex([
5967
+ "\\lbrace",
5968
+ serializer.serialize(operand(expr, 1)),
5969
+ "\\mid",
5970
+ // Serialize the inner expression of the Condition wrapper
5971
+ serializer.serialize(operand(condition, 1)),
5972
+ "\\rbrace"
5973
+ ]);
5974
+ }
5949
5975
  return joinLatex([
5950
5976
  "\\lbrace",
5951
5977
  operands(expr).map((x) => serializer.serialize(x)).join(", "),
@@ -6112,23 +6138,6 @@ var LatexSyntax = (() => {
6112
6138
  if (expr === null) return "";
6113
6139
  const h = operator(expr);
6114
6140
  if (!h) return "";
6115
- if (h === "Set") {
6116
- if (nops(expr) === 0) return "\\emptyset";
6117
- if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
6118
- return joinLatex([
6119
- "\\left\\lbrace",
6120
- serializer.serialize(operand(expr, 1)),
6121
- "\\middle\\mid",
6122
- serializer.serialize(operand(expr, 2)),
6123
- "\\right\\rbrace"
6124
- ]);
6125
- }
6126
- return joinLatex([
6127
- "\\left\\lbrace",
6128
- ...operands(expr).map((x) => serializer.serialize(x) + " ,"),
6129
- "\\right\\rbrace"
6130
- ]);
6131
- }
6132
6141
  if (h === "Multiple") {
6133
6142
  }
6134
6143
  if (h === "Range") {
@@ -7276,11 +7285,13 @@ var LatexSyntax = (() => {
7276
7285
  if (!parser.match("_")) return null;
7277
7286
  const base = parser.parseGroup();
7278
7287
  if (operator(base) !== "To") return null;
7279
- const expr = parser.parseArguments("implicit");
7288
+ const expr = parser.parseExpression({
7289
+ minPrec: MULTIPLICATION_PRECEDENCE
7290
+ });
7280
7291
  if (!expr) return null;
7281
7292
  return [
7282
7293
  "Limit",
7283
- ["Function", expr[0], operand(base, 1)],
7294
+ ["Function", expr, operand(base, 1)],
7284
7295
  operand(base, 2)
7285
7296
  ];
7286
7297
  },
@@ -7361,6 +7372,8 @@ var LatexSyntax = (() => {
7361
7372
  precedence: DIVISION_PRECEDENCE,
7362
7373
  parse: "Mod"
7363
7374
  },
7375
+ // Function-style alias: `\operatorname{mod}(a, b)`
7376
+ { latexTrigger: "\\operatorname{mod}", parse: "Mod" },
7364
7377
  {
7365
7378
  latexTrigger: "\\pmod",
7366
7379
  kind: "prefix",
@@ -7601,6 +7614,13 @@ var LatexSyntax = (() => {
7601
7614
  const rhs = serializer.wrap(operand(expr, 2), ADDITION_PRECEDENCE + 3);
7602
7615
  return joinLatex([lhs, "-", rhs]);
7603
7616
  }
7617
+ },
7618
+ // Euclidean distance between two points (tuples of numbers).
7619
+ {
7620
+ name: "Distance",
7621
+ latexTrigger: ["\\operatorname{distance}"],
7622
+ kind: "function",
7623
+ serialize: (serializer, expr) => "\\operatorname{distance}" + serializer.wrapArguments(expr)
7604
7624
  }
7605
7625
  ];
7606
7626
  function getIndexAssignment(expr, upper) {
@@ -9025,7 +9045,9 @@ var LatexSyntax = (() => {
9025
9045
  if (!expr || !symbol(expr)) return null;
9026
9046
  return ["Mean", expr];
9027
9047
  }
9028
- }
9048
+ },
9049
+ // Function-style alias: `\operatorname{var}(...)`
9050
+ { latexTrigger: "\\operatorname{var}", parse: "Variance" }
9029
9051
  ];
9030
9052
 
9031
9053
  // src/compute-engine/numerics/unit-data.ts
@@ -9484,12 +9506,52 @@ var LatexSyntax = (() => {
9484
9506
  ];
9485
9507
 
9486
9508
  // src/compute-engine/latex-syntax/dictionary/definitions-other.ts
9509
+ var TEX_UNITS = [
9510
+ "pt",
9511
+ "em",
9512
+ "mu",
9513
+ "ex",
9514
+ "mm",
9515
+ "cm",
9516
+ "in",
9517
+ "bp",
9518
+ "sp",
9519
+ "dd",
9520
+ "cc",
9521
+ "pc",
9522
+ "nc",
9523
+ "nd"
9524
+ ];
9525
+ function skipTexDimension(parser) {
9526
+ parser.skipSpace();
9527
+ if (parser.peek === "-" || parser.peek === "+") parser.nextToken();
9528
+ while (/^[\d.]$/.test(parser.peek)) parser.nextToken();
9529
+ for (const unit of TEX_UNITS) {
9530
+ if (parser.matchAll([...unit])) return;
9531
+ }
9532
+ }
9487
9533
  function parseSingleArg(cmd) {
9488
9534
  return (parser) => {
9489
9535
  const arg = parser.parseGroup();
9490
9536
  return arg === null ? [cmd] : [cmd, arg];
9491
9537
  };
9492
9538
  }
9539
+ function parseMathStyleSwitch(mathStyle) {
9540
+ return (parser) => {
9541
+ const body = parser.parseExpression();
9542
+ if (body !== null && !isEmptySequence(body))
9543
+ return ["Annotated", body, { dict: { mathStyle } }];
9544
+ return "Nothing";
9545
+ };
9546
+ }
9547
+ function parseSizeSwitch(size) {
9548
+ return (parser) => {
9549
+ const body = parser.parseExpression();
9550
+ if (body !== null && !isEmptySequence(body))
9551
+ return ["Annotated", body, { dict: { size } }];
9552
+ return "Nothing";
9553
+ };
9554
+ }
9493
9555
  var DEFINITIONS_OTHERS = [
9494
9556
  {
9495
9557
  name: "Overscript",
@@ -9729,80 +9791,71 @@ var LatexSyntax = (() => {
9729
9791
  },
9730
9792
  {
9731
9793
  latexTrigger: ["\\displaystyle"],
9732
- parse: () => "Nothing"
9733
- // @todo: parse as ['Annotated'...]
9794
+ parse: parseMathStyleSwitch("normal")
9734
9795
  },
9735
9796
  {
9736
9797
  latexTrigger: ["\\textstyle"],
9737
- parse: () => "Nothing"
9738
- // @todo: parse as ['Annotated'...]
9798
+ parse: parseMathStyleSwitch("compact")
9739
9799
  },
9740
9800
  {
9741
9801
  latexTrigger: ["\\scriptstyle"],
9742
- parse: () => "Nothing"
9743
- // @todo: parse as ['Annotated'...]
9802
+ parse: parseMathStyleSwitch("script")
9744
9803
  },
9745
9804
  {
9746
9805
  latexTrigger: ["\\scriptscriptstyle"],
9747
- parse: () => "Nothing"
9748
- // @todo: parse as ['Annotated'...]
9806
+ parse: parseMathStyleSwitch("scriptscript")
9749
9807
  },
9750
9808
  {
9751
9809
  latexTrigger: ["\\color"],
9752
9810
  parse: (parser) => {
9753
- parser.parseGroup();
9811
+ const color = parser.parseStringGroup();
9812
+ if (color !== null) {
9813
+ const body = parser.parseExpression();
9814
+ if (body !== null && !isEmptySequence(body))
9815
+ return ["Annotated", body, { dict: { color } }];
9816
+ }
9754
9817
  return "Nothing";
9755
9818
  }
9756
9819
  },
9757
9820
  {
9758
9821
  latexTrigger: ["\\tiny"],
9759
- parse: () => "Nothing"
9760
- // @todo: parse as ['Annotated'...]
9822
+ parse: parseSizeSwitch(1)
9761
9823
  },
9762
9824
  {
9763
9825
  latexTrigger: ["\\scriptsize"],
9764
- parse: () => "Nothing"
9765
- // @todo: parse as ['Annotated'...]
9826
+ parse: parseSizeSwitch(2)
9766
9827
  },
9767
9828
  {
9768
9829
  latexTrigger: ["\\footnotesize"],
9769
- parse: () => "Nothing"
9770
- // @todo: parse as ['Annotated'...]
9830
+ parse: parseSizeSwitch(3)
9771
9831
  },
9772
9832
  {
9773
9833
  latexTrigger: ["\\small"],
9774
- parse: () => "Nothing"
9775
- // @todo: parse as ['Annotated'...]
9834
+ parse: parseSizeSwitch(4)
9776
9835
  },
9777
9836
  {
9778
9837
  latexTrigger: ["\\normalsize"],
9779
- parse: () => "Nothing"
9780
- // @todo: parse as ['Annotated'...]
9838
+ parse: parseSizeSwitch(5)
9781
9839
  },
9782
9840
  {
9783
9841
  latexTrigger: ["\\large"],
9784
- parse: () => "Nothing"
9785
- // @todo: parse as ['Annotated'...]
9842
+ parse: parseSizeSwitch(6)
9786
9843
  },
9787
9844
  {
9788
9845
  latexTrigger: ["\\Large"],
9789
- parse: () => "Nothing"
9790
- // @todo: parse as ['Annotated'...]
9846
+ parse: parseSizeSwitch(7)
9791
9847
  },
9792
9848
  {
9793
9849
  latexTrigger: ["\\LARGE"],
9794
- parse: () => "Nothing"
9795
- // @todo: parse as ['Annotated'...]
9850
+ parse: parseSizeSwitch(8)
9796
9851
  },
9797
9852
  {
9798
9853
  latexTrigger: ["\\huge"],
9799
- parse: () => "Nothing"
9800
- // @todo: parse as ['Annotated'...]
9854
+ parse: parseSizeSwitch(9)
9801
9855
  },
9802
9856
  {
9803
9857
  latexTrigger: ["\\Huge"],
9804
- parse: () => "Nothing"
9805
- // @todo: parse as ['Annotated'...]
9858
+ parse: parseSizeSwitch(10)
9806
9859
  },
9807
9860
  {
9808
9861
  name: "Annotated",
@@ -9814,6 +9867,10 @@ var LatexSyntax = (() => {
9814
9867
  result = joinLatex(["{\\displaystyle", result, "}"]);
9815
9868
  else if (dict.dict.mathStyle === "compact")
9816
9869
  result = joinLatex(["{\\textstyle", result, "}"]);
9870
+ else if (dict.dict.mathStyle === "script")
9871
+ result = joinLatex(["{\\scriptstyle", result, "}"]);
9872
+ else if (dict.dict.mathStyle === "scriptscript")
9873
+ result = joinLatex(["{\\scriptscriptstyle", result, "}"]);
9817
9874
  const v = dict.dict.size;
9818
9875
  if (v !== null && v >= 1 && v <= 10) {
9819
9876
  result = joinLatex([
@@ -9901,6 +9958,28 @@ var LatexSyntax = (() => {
9901
9958
  latexTrigger: ["\\enspace"],
9902
9959
  parse: () => ["HorizontalSpacing", 9]
9903
9960
  },
9961
+ {
9962
+ latexTrigger: ["\\hspace"],
9963
+ parse: (parser) => {
9964
+ if (parser.peek === "*") parser.nextToken();
9965
+ parser.parseStringGroup();
9966
+ return ["HorizontalSpacing", 0];
9967
+ }
9968
+ },
9969
+ {
9970
+ latexTrigger: ["\\hskip"],
9971
+ parse: (parser) => {
9972
+ skipTexDimension(parser);
9973
+ return ["HorizontalSpacing", 0];
9974
+ }
9975
+ },
9976
+ {
9977
+ latexTrigger: ["\\kern"],
9978
+ parse: (parser) => {
9979
+ skipTexDimension(parser);
9980
+ return ["HorizontalSpacing", 0];
9981
+ }
9982
+ },
9904
9983
  {
9905
9984
  latexTrigger: ["\\phantom"],
9906
9985
  parse: (parser) => {
@@ -9951,7 +10030,17 @@ var LatexSyntax = (() => {
9951
10030
  // `["HorizontalSpacing", expr, 'op'|'bin'|rel]` -> indicate a spacing around and expression, i.e. `\mathbin{x}`, etc...
9952
10031
  serialize: (serializer, expr) => {
9953
10032
  if (operand(expr, 2) !== null) {
9954
- return serializer.serialize(operand(expr, 1));
10033
+ const cls = stringValue(operand(expr, 2));
10034
+ const inner = serializer.serialize(operand(expr, 1));
10035
+ if (cls === "bin") return `\\mathbin{${inner}}`;
10036
+ if (cls === "op") return `\\mathop{${inner}}`;
10037
+ if (cls === "rel") return `\\mathrel{${inner}}`;
10038
+ if (cls === "ord") return `\\mathord{${inner}}`;
10039
+ if (cls === "open") return `\\mathopen{${inner}}`;
10040
+ if (cls === "close") return `\\mathclose{${inner}}`;
10041
+ if (cls === "punct") return `\\mathpunct{${inner}}`;
10042
+ if (cls === "inner") return `\\mathinner{${inner}}`;
10043
+ return inner;
9955
10044
  }
9956
10045
  const v = machineValue(operand(expr, 1));
9957
10046
  if (v === null) return "";
@@ -9966,7 +10055,7 @@ var LatexSyntax = (() => {
9966
10055
  36: "\\qquad"
9967
10056
  }[v] ?? "";
9968
10057
  }
9969
- }
10058
+ },
9970
10059
  // if (
9971
10060
  // [
9972
10061
  // '\\!',
@@ -9990,6 +10079,121 @@ var LatexSyntax = (() => {
9990
10079
  // name: '',
9991
10080
  // trigger: '\\check',
9992
10081
  // },
10082
+ // ---------------------------------------------------------------------------
10083
+ // Function-style aliases for collection / random operators that some
10084
+ // notations write in lowercase (e.g. `\operatorname{shuffle}(L)`).
10085
+ // The capitalized library entries already exist; these are pure parse
10086
+ // aliases so the lowercase names don't land in `unsupported-operator`.
10087
+ // ---------------------------------------------------------------------------
10088
+ { latexTrigger: "\\operatorname{random}", parse: "Random" },
10089
+ { latexTrigger: "\\operatorname{shuffle}", parse: "Shuffle" },
10090
+ { latexTrigger: "\\operatorname{repeat}", parse: "Repeat" },
10091
+ { latexTrigger: "\\operatorname{join}", parse: "Join" },
10092
+ // ---------------------------------------------------------------------------
10093
+ // Geometric primitive heads. Registered as known typed heads so consumers
10094
+ // can branch on the operator name; CE itself doesn't render them. The
10095
+ // library entries (with no evaluator) live in `library/core.ts`.
10096
+ // ---------------------------------------------------------------------------
10097
+ {
10098
+ name: "Triangle",
10099
+ latexTrigger: ["\\operatorname{triangle}"],
10100
+ kind: "function",
10101
+ serialize: (serializer, expr) => "\\operatorname{triangle}" + serializer.wrapArguments(expr)
10102
+ },
10103
+ // Desmos's geometric `vector(p1, p2)` — a directed segment between two
10104
+ // points. Routed to a dedicated head (not the existing column-vector
10105
+ // `Vector`, which has a narrower `(number+) -> vector` signature).
10106
+ {
10107
+ name: "GeometricVector",
10108
+ latexTrigger: ["\\operatorname{vector}"],
10109
+ kind: "function",
10110
+ serialize: (serializer, expr) => "\\operatorname{vector}" + serializer.wrapArguments(expr)
10111
+ },
10112
+ {
10113
+ name: "Sphere",
10114
+ latexTrigger: ["\\operatorname{sphere}"],
10115
+ kind: "function",
10116
+ serialize: (serializer, expr) => "\\operatorname{sphere}" + serializer.wrapArguments(expr)
10117
+ },
10118
+ {
10119
+ name: "Segment",
10120
+ latexTrigger: ["\\operatorname{segment}"],
10121
+ kind: "function",
10122
+ serialize: (serializer, expr) => "\\operatorname{segment}" + serializer.wrapArguments(expr)
10123
+ }
10124
+ ];
10125
+
10126
+ // src/compute-engine/latex-syntax/dictionary/definitions-colors.ts
10127
+ var DEFINITIONS_COLORS = [
10128
+ // Color constructors (one per colorspace, preserves space on evaluation)
10129
+ {
10130
+ name: "Rgb",
10131
+ latexTrigger: ["\\operatorname{rgb}"],
10132
+ kind: "function",
10133
+ serialize: (serializer, expr) => "\\operatorname{rgb}" + serializer.wrapArguments(expr)
10134
+ },
10135
+ {
10136
+ name: "Hsv",
10137
+ latexTrigger: ["\\operatorname{hsv}"],
10138
+ kind: "function",
10139
+ serialize: (serializer, expr) => "\\operatorname{hsv}" + serializer.wrapArguments(expr)
10140
+ },
10141
+ {
10142
+ name: "Hsl",
10143
+ latexTrigger: ["\\operatorname{hsl}"],
10144
+ kind: "function",
10145
+ serialize: (serializer, expr) => "\\operatorname{hsl}" + serializer.wrapArguments(expr)
10146
+ },
10147
+ {
10148
+ name: "Oklab",
10149
+ latexTrigger: ["\\operatorname{oklab}"],
10150
+ kind: "function",
10151
+ serialize: (serializer, expr) => "\\operatorname{oklab}" + serializer.wrapArguments(expr)
10152
+ },
10153
+ {
10154
+ name: "Oklch",
10155
+ latexTrigger: ["\\operatorname{oklch}"],
10156
+ kind: "function",
10157
+ serialize: (serializer, expr) => "\\operatorname{oklch}" + serializer.wrapArguments(expr)
10158
+ },
10159
+ // Conversion functions (color → color in the named space)
10160
+ {
10161
+ name: "AsRgb",
10162
+ latexTrigger: ["\\operatorname{asRgb}"],
10163
+ kind: "function",
10164
+ serialize: (serializer, expr) => "\\operatorname{asRgb}" + serializer.wrapArguments(expr)
10165
+ },
10166
+ {
10167
+ name: "AsHsv",
10168
+ latexTrigger: ["\\operatorname{asHsv}"],
10169
+ kind: "function",
10170
+ serialize: (serializer, expr) => "\\operatorname{asHsv}" + serializer.wrapArguments(expr)
10171
+ },
10172
+ {
10173
+ name: "AsHsl",
10174
+ latexTrigger: ["\\operatorname{asHsl}"],
10175
+ kind: "function",
10176
+ serialize: (serializer, expr) => "\\operatorname{asHsl}" + serializer.wrapArguments(expr)
10177
+ },
10178
+ {
10179
+ name: "AsOklab",
10180
+ latexTrigger: ["\\operatorname{asOklab}"],
10181
+ kind: "function",
10182
+ serialize: (serializer, expr) => "\\operatorname{asOklab}" + serializer.wrapArguments(expr)
10183
+ },
10184
+ {
10185
+ name: "AsOklch",
10186
+ latexTrigger: ["\\operatorname{asOklch}"],
10187
+ kind: "function",
10188
+ serialize: (serializer, expr) => "\\operatorname{asOklch}" + serializer.wrapArguments(expr)
10189
+ },
10190
+ // Perceptual difference (returns a scalar in [0, ~1])
10191
+ {
10192
+ name: "ColorDelta",
10193
+ latexTrigger: ["\\operatorname{colorDelta}"],
10194
+ kind: "function",
10195
+ serialize: (serializer, expr) => "\\operatorname{colorDelta}" + serializer.wrapArguments(expr)
10196
+ }
9993
10197
  ];
9994
10198
 
9995
10199
  // src/compute-engine/latex-syntax/dictionary/default-dictionary.ts
@@ -10020,7 +10224,8 @@ var LatexSyntax = (() => {
10020
10224
  ...DEFINITIONS_STATISTICS,
10021
10225
  ...DEFINITIONS_UNITS,
10022
10226
  ...DEFINITIONS_OTHERS,
10023
- ...DEFINITIONS_PHYSICS
10227
+ ...DEFINITIONS_PHYSICS,
10228
+ ...DEFINITIONS_COLORS
10024
10229
  ];
10025
10230
 
10026
10231
  // src/math-json/symbols.ts
@@ -10185,6 +10390,17 @@ var LatexSyntax = (() => {
10185
10390
  } else if (Array.isArray(openTrigger) && openTrigger.length > 0) {
10186
10391
  openTokens.push(openTrigger[0]);
10187
10392
  }
10393
+ const closeTrigger = indexedEntry.closeTrigger;
10394
+ const closeTokens = /* @__PURE__ */ new Set();
10395
+ if (typeof closeTrigger === "string") {
10396
+ const variants = DELIMITER_SHORTHAND[closeTrigger];
10397
+ if (variants) for (const v of variants) closeTokens.add(v);
10398
+ else closeTokens.add(closeTrigger);
10399
+ if (closeTrigger === "||") closeTokens.add("|");
10400
+ } else if (Array.isArray(closeTrigger) && closeTrigger.length > 0) {
10401
+ closeTokens.add(closeTrigger[0]);
10402
+ }
10403
+ indexedEntry.closeTokens = closeTokens;
10188
10404
  for (const token of openTokens) {
10189
10405
  const existing = result.matchfixByOpen.get(token);
10190
10406
  if (existing) {
@@ -10342,25 +10558,43 @@ var LatexSyntax = (() => {
10342
10558
  result.arguments = entry.arguments;
10343
10559
  return result;
10344
10560
  }
10561
+ function serializeTabularBody(serializer, body) {
10562
+ if (!body) return "";
10563
+ if (operator(body) !== "List") return serializer.serialize(body);
10564
+ const rows = operands(body);
10565
+ if (rows.length === 0) return "";
10566
+ if (!rows.every((row) => operator(row) === "List"))
10567
+ return serializer.serialize(body);
10568
+ return rows.map(
10569
+ (row) => operands(row).map((cell) => serializer.serialize(cell)).join(" & ")
10570
+ ).join(" \\\\\n");
10571
+ }
10345
10572
  function makeSerializeHandler(entry, latexTrigger, idTrigger) {
10346
10573
  if (typeof entry.serialize === "function") return entry.serialize;
10347
10574
  const kind = entry["kind"] ?? "expression";
10348
10575
  if (kind === "environment") {
10349
10576
  const envName = entry["symbolTrigger"] ?? entry.name ?? "unknown";
10350
- return (serializer, expr) => joinLatex([
10351
- `\\begin{${envName}}`,
10352
- serializer.serialize(operand(expr, 1)),
10353
- `\\end{${envName}}`
10354
- ]);
10577
+ return (serializer, expr) => {
10578
+ const body = operand(expr, 1);
10579
+ return joinLatex([
10580
+ `\\begin{${envName}}`,
10581
+ serializeTabularBody(serializer, body),
10582
+ `\\end{${envName}}`
10583
+ ]);
10584
+ };
10355
10585
  }
10356
10586
  if (isMatchfixEntry(entry)) {
10357
10587
  const openDelim = typeof entry.openTrigger === "string" ? DEFAULT_DELIMITER[entry.openTrigger] : tokensToString(entry.openTrigger);
10358
10588
  const closeDelim = typeof entry.closeTrigger === "string" ? DEFAULT_DELIMITER[entry.closeTrigger] : tokensToString(entry.closeTrigger);
10359
- return (serializer, expr) => joinLatex([
10360
- openDelim,
10361
- serializer.serialize(operand(expr, 1)),
10362
- closeDelim
10363
- ]);
10589
+ return (serializer, expr) => {
10590
+ const style = serializer.groupStyle(expr, serializer.level + 1);
10591
+ const inner = serializer.serialize(operand(expr, 1));
10592
+ if (style === "scaled")
10593
+ return joinLatex([`\\left${openDelim}`, inner, `\\right${closeDelim}`]);
10594
+ if (style === "big")
10595
+ return joinLatex([`\\Bigl${openDelim}`, inner, `\\Bigr${closeDelim}`]);
10596
+ return joinLatex([openDelim, inner, closeDelim]);
10597
+ };
10364
10598
  }
10365
10599
  let latex = entry.serialize;
10366
10600
  if (latex === void 0 && latexTrigger) latex = tokensToString(latexTrigger);
@@ -12623,6 +12857,16 @@ var LatexSyntax = (() => {
12623
12857
  }
12624
12858
 
12625
12859
  // src/compute-engine/latex-syntax/parse.ts
12860
+ var _symbolToUnicode = null;
12861
+ function getSymbolToUnicode() {
12862
+ if (!_symbolToUnicode) {
12863
+ _symbolToUnicode = /* @__PURE__ */ new Map();
12864
+ for (const [, latex, codepoint] of SYMBOLS) {
12865
+ _symbolToUnicode.set(latex, String.fromCodePoint(codepoint));
12866
+ }
12867
+ }
12868
+ return _symbolToUnicode;
12869
+ }
12626
12870
  var DELIMITER_SHORTHAND2 = {
12627
12871
  "(": ["\\lparen", "("],
12628
12872
  ")": ["\\rparen", ")"],
@@ -13070,6 +13314,35 @@ var LatexSyntax = (() => {
13070
13314
  this.nextToken();
13071
13315
  this.skipVisualSpace();
13072
13316
  }
13317
+ if (this.match("\\hspace")) {
13318
+ this.match("*");
13319
+ this.parseStringGroup();
13320
+ this.skipVisualSpace();
13321
+ }
13322
+ if (this.match("\\hskip") || this.match("\\kern")) {
13323
+ this.skipSpace();
13324
+ if (!this.match("-")) this.match("+");
13325
+ while (/^[\d.]$/.test(this.peek)) this.nextToken();
13326
+ for (const unit of [
13327
+ "pt",
13328
+ "em",
13329
+ "mu",
13330
+ "ex",
13331
+ "mm",
13332
+ "cm",
13333
+ "in",
13334
+ "bp",
13335
+ "sp",
13336
+ "dd",
13337
+ "cc",
13338
+ "pc",
13339
+ "nc",
13340
+ "nd"
13341
+ ]) {
13342
+ if (this.matchAll([...unit])) break;
13343
+ }
13344
+ this.skipVisualSpace();
13345
+ }
13073
13346
  this.skipSpace();
13074
13347
  }
13075
13348
  match(token) {
@@ -13407,7 +13680,8 @@ var LatexSyntax = (() => {
13407
13680
  } else if (token === "<space>") {
13408
13681
  result += " ";
13409
13682
  } else if (token[0] === "\\") {
13410
- result += token;
13683
+ const unicode = getSymbolToUnicode().get(token);
13684
+ result += unicode ?? token;
13411
13685
  } else {
13412
13686
  result += token;
13413
13687
  }
@@ -13561,6 +13835,19 @@ var LatexSyntax = (() => {
13561
13835
  }
13562
13836
  for (const def of defs) {
13563
13837
  this.index = start;
13838
+ if (def.closeTokens.size > 0) {
13839
+ let found = false;
13840
+ const tokens = this._tokens;
13841
+ for (let i = start; i < tokens.length; i++) {
13842
+ if (def.closeTokens.has(tokens[i])) {
13843
+ found = true;
13844
+ break;
13845
+ }
13846
+ }
13847
+ if (!found) continue;
13848
+ }
13849
+ if (typeof def.openTrigger === "string" && def.openTrigger === "." && !OPEN_DELIMITER_PREFIX[currentToken])
13850
+ continue;
13564
13851
  const matched = this.matchDelimiter(def.openTrigger, def.closeTrigger);
13565
13852
  if (!matched) continue;
13566
13853
  const bodyStart = this.index;
@@ -14767,7 +15054,7 @@ var LatexSyntax = (() => {
14767
15054
  sansserif: (s) => `\\mathsf{${s}}`,
14768
15055
  monospace: (s) => `\\mathtt{${s}}`
14769
15056
  };
14770
- var Serializer4 = class {
15057
+ var Serializer5 = class {
14771
15058
  options;
14772
15059
  dictionary;
14773
15060
  level = -1;
@@ -14782,11 +15069,18 @@ var LatexSyntax = (() => {
14782
15069
  /**
14783
15070
  * Serialize the expression, and if the expression is an operator
14784
15071
  * of precedence less than or equal to prec, wrap it in some parens.
14785
- * @todo: don't wrap Abs, Floor, Ceil, Delimiter
15072
+ *
15073
+ * Skip wrapping for matchfix operators (Abs, Floor, Ceil, Norm, etc.)
15074
+ * and Delimiter since they already have visible delimiters.
14786
15075
  */
14787
15076
  wrap(expr, prec) {
14788
15077
  if (expr === null || expr === void 0) return "";
14789
15078
  if (prec === void 0) {
15079
+ const name2 = operator(expr);
15080
+ if (name2) {
15081
+ const def = this.dictionary.ids.get(name2);
15082
+ if (def?.kind === "matchfix") return this.serialize(expr);
15083
+ }
14790
15084
  return this.wrapString(
14791
15085
  this.serialize(expr),
14792
15086
  this.options.groupStyle(expr, this.level + 1)
@@ -15080,7 +15374,7 @@ var LatexSyntax = (() => {
15080
15374
  return body;
15081
15375
  }
15082
15376
  function serializeLatex(expr, dict, options) {
15083
- const serializer = new Serializer4(dict, options);
15377
+ const serializer = new Serializer5(dict, options);
15084
15378
  return serializer.serialize(expr);
15085
15379
  }
15086
15380
 
@@ -15207,7 +15501,7 @@ var LatexSyntax = (() => {
15207
15501
  }
15208
15502
 
15209
15503
  // src/latex-syntax.ts
15210
- var version = "0.55.5";
15504
+ var version = "0.56.0";
15211
15505
  return __toCommonJS(latex_syntax_exports);
15212
15506
  })();
15213
15507
  Object.assign(exports, LatexSyntax); Object.defineProperty(exports, '__esModule', { value: true });}));