@doenet/doenetml 0.6.0-alpha1

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 (549) hide show
  1. package/.prettierrc +3 -0
  2. package/LICENSE +661 -0
  3. package/README.md +146 -0
  4. package/cypress/e2e/ActivityViewer/activityVariants.cy.js +1770 -0
  5. package/cypress/e2e/ActivityViewer/compiledActivity.cy.js +83 -0
  6. package/cypress/e2e/ActivityViewer/relationshipsAmongPages.cy.js +697 -0
  7. package/cypress/e2e/answerValidation/errorinnumbers.cy.js +2125 -0
  8. package/cypress/e2e/answerValidation/factoring.cy.js +1945 -0
  9. package/cypress/e2e/answerValidation/factoringOldAlgorithm.cy.js +892 -0
  10. package/cypress/e2e/answerValidation/functionanswers.cy.js +314 -0
  11. package/cypress/e2e/answerValidation/matchingpatterns.cy.js +287 -0
  12. package/cypress/e2e/answerValidation/matchpartial.cy.js +6711 -0
  13. package/cypress/e2e/answerValidation/pointlocation.cy.js +3989 -0
  14. package/cypress/e2e/answerValidation/symbolicequality.cy.js +1893 -0
  15. package/cypress/e2e/answerValidation/videoProgress.cy.js +210 -0
  16. package/cypress/e2e/assignNames/basiccopy.cy.js +2376 -0
  17. package/cypress/e2e/assignNames/collections.cy.js +9247 -0
  18. package/cypress/e2e/assignNames/selects.cy.js +105 -0
  19. package/cypress/e2e/assignNames/sequences.cy.js +1964 -0
  20. package/cypress/e2e/baseComponent/basecomponentproperties.cy.js +999 -0
  21. package/cypress/e2e/baseComponent/doenetMLtext.cy.js +427 -0
  22. package/cypress/e2e/chemistry/atom.cy.js +201 -0
  23. package/cypress/e2e/chemistry/ion.cy.js +608 -0
  24. package/cypress/e2e/chemistry/ioniccompound.cy.js +133 -0
  25. package/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js +2653 -0
  26. package/cypress/e2e/dynamicalsystem/equilibriumcurve.cy.js +311 -0
  27. package/cypress/e2e/dynamicalsystem/equilibriumline.cy.js +279 -0
  28. package/cypress/e2e/dynamicalsystem/equilibriumpoint.cy.js +283 -0
  29. package/cypress/e2e/dynamicalsystem/odesystem.cy.js +1834 -0
  30. package/cypress/e2e/equality/mathexpressions.cy.js +948 -0
  31. package/cypress/e2e/graphing/graphreferences.cy.js +978 -0
  32. package/cypress/e2e/graphing/graphreferences2.cy.js +615 -0
  33. package/cypress/e2e/linearAlgebra/eigenDecomposition.cy.js +401 -0
  34. package/cypress/e2e/tagSpecific/angle.cy.js +3898 -0
  35. package/cypress/e2e/tagSpecific/animatefromsequence.cy.js +2306 -0
  36. package/cypress/e2e/tagSpecific/answer.cy.js +31647 -0
  37. package/cypress/e2e/tagSpecific/bestfitline.cy.js +612 -0
  38. package/cypress/e2e/tagSpecific/blockquote.cy.js +30 -0
  39. package/cypress/e2e/tagSpecific/boolean.cy.js +742 -0
  40. package/cypress/e2e/tagSpecific/booleaninput.cy.js +1283 -0
  41. package/cypress/e2e/tagSpecific/booleanlist.cy.js +588 -0
  42. package/cypress/e2e/tagSpecific/booleanoperators.cy.js +596 -0
  43. package/cypress/e2e/tagSpecific/booleanoperatorsonmath.cy.js +498 -0
  44. package/cypress/e2e/tagSpecific/callaction.cy.js +2835 -0
  45. package/cypress/e2e/tagSpecific/choiceinput.cy.js +3205 -0
  46. package/cypress/e2e/tagSpecific/circle.cy.js +22036 -0
  47. package/cypress/e2e/tagSpecific/codeeditor.cy.js +1995 -0
  48. package/cypress/e2e/tagSpecific/collect.cy.js +5035 -0
  49. package/cypress/e2e/tagSpecific/componentsize.cy.js +502 -0
  50. package/cypress/e2e/tagSpecific/conditionalcontent.cy.js +3495 -0
  51. package/cypress/e2e/tagSpecific/contentBrowser.cy.js +335 -0
  52. package/cypress/e2e/tagSpecific/contentpicker.cy.js +261 -0
  53. package/cypress/e2e/tagSpecific/copy.cy.js +12627 -0
  54. package/cypress/e2e/tagSpecific/copy2.cy.js +5698 -0
  55. package/cypress/e2e/tagSpecific/curve.bezier.cy.js +12440 -0
  56. package/cypress/e2e/tagSpecific/curve.cy.js +1716 -0
  57. package/cypress/e2e/tagSpecific/curve.function.cy.js +1471 -0
  58. package/cypress/e2e/tagSpecific/curve.parametrized.cy.js +920 -0
  59. package/cypress/e2e/tagSpecific/document.cy.js +234 -0
  60. package/cypress/e2e/tagSpecific/endpoint.cy.js +197 -0
  61. package/cypress/e2e/tagSpecific/evaluate.cy.js +8895 -0
  62. package/cypress/e2e/tagSpecific/extract.cy.js +2282 -0
  63. package/cypress/e2e/tagSpecific/feedback.cy.js +2941 -0
  64. package/cypress/e2e/tagSpecific/function.cy.js +9450 -0
  65. package/cypress/e2e/tagSpecific/functioniterates.cy.js +1178 -0
  66. package/cypress/e2e/tagSpecific/functionoperators.cy.js +4047 -0
  67. package/cypress/e2e/tagSpecific/graph.cy.js +2491 -0
  68. package/cypress/e2e/tagSpecific/group.cy.js +683 -0
  69. package/cypress/e2e/tagSpecific/hint.cy.js +204 -0
  70. package/cypress/e2e/tagSpecific/image.cy.js +770 -0
  71. package/cypress/e2e/tagSpecific/integer.cy.js +206 -0
  72. package/cypress/e2e/tagSpecific/label.cy.js +800 -0
  73. package/cypress/e2e/tagSpecific/legend.cy.js +1001 -0
  74. package/cypress/e2e/tagSpecific/line.cy.js +12167 -0
  75. package/cypress/e2e/tagSpecific/linesegment.cy.js +4749 -0
  76. package/cypress/e2e/tagSpecific/lorem.cy.js +289 -0
  77. package/cypress/e2e/tagSpecific/map.cy.js +4476 -0
  78. package/cypress/e2e/tagSpecific/matchespattern.cy.js +693 -0
  79. package/cypress/e2e/tagSpecific/math.cy.js +10990 -0
  80. package/cypress/e2e/tagSpecific/mathdisplay.cy.js +2689 -0
  81. package/cypress/e2e/tagSpecific/mathinput.cy.js +15628 -0
  82. package/cypress/e2e/tagSpecific/mathinputgraph.cy.js +566 -0
  83. package/cypress/e2e/tagSpecific/mathlist.cy.js +4073 -0
  84. package/cypress/e2e/tagSpecific/mathoperators.cy.js +13851 -0
  85. package/cypress/e2e/tagSpecific/matrix.cy.js +8825 -0
  86. package/cypress/e2e/tagSpecific/matrixinput.cy.js +16277 -0
  87. package/cypress/e2e/tagSpecific/module.cy.js +1771 -0
  88. package/cypress/e2e/tagSpecific/number.cy.js +2221 -0
  89. package/cypress/e2e/tagSpecific/numberlist.cy.js +1285 -0
  90. package/cypress/e2e/tagSpecific/p.cy.js +72 -0
  91. package/cypress/e2e/tagSpecific/paginator.cy.js +2983 -0
  92. package/cypress/e2e/tagSpecific/parabola.cy.js +14331 -0
  93. package/cypress/e2e/tagSpecific/paragraphmarkup.cy.js +104 -0
  94. package/cypress/e2e/tagSpecific/periodicset.cy.js +1439 -0
  95. package/cypress/e2e/tagSpecific/piecewisefunction.cy.js +1055 -0
  96. package/cypress/e2e/tagSpecific/pluralize.cy.js +274 -0
  97. package/cypress/e2e/tagSpecific/point.cy.js +8895 -0
  98. package/cypress/e2e/tagSpecific/point2.cy.js +10259 -0
  99. package/cypress/e2e/tagSpecific/polygon.cy.js +5039 -0
  100. package/cypress/e2e/tagSpecific/polyline.cy.js +4704 -0
  101. package/cypress/e2e/tagSpecific/problem.cy.js +2768 -0
  102. package/cypress/e2e/tagSpecific/ray.cy.js +10770 -0
  103. package/cypress/e2e/tagSpecific/rectangle.cy.js +2143 -0
  104. package/cypress/e2e/tagSpecific/ref.cy.js +420 -0
  105. package/cypress/e2e/tagSpecific/regularPolygon.cy.js +1006 -0
  106. package/cypress/e2e/tagSpecific/regularPolygon2.cy.js +100 -0
  107. package/cypress/e2e/tagSpecific/regularPolygon3.cy.js +777 -0
  108. package/cypress/e2e/tagSpecific/samplerandomnumbers.cy.js +3619 -0
  109. package/cypress/e2e/tagSpecific/sectioning.cy.js +3530 -0
  110. package/cypress/e2e/tagSpecific/select.cy.js +5376 -0
  111. package/cypress/e2e/tagSpecific/selectfromsequence.cy.js +3846 -0
  112. package/cypress/e2e/tagSpecific/selectrandomnumbers.cy.js +2914 -0
  113. package/cypress/e2e/tagSpecific/sequence.cy.js +2093 -0
  114. package/cypress/e2e/tagSpecific/shuffle.cy.js +490 -0
  115. package/cypress/e2e/tagSpecific/sidebyside.cy.js +8057 -0
  116. package/cypress/e2e/tagSpecific/singlecharactercomponents.cy.js +72 -0
  117. package/cypress/e2e/tagSpecific/slider.cy.js +914 -0
  118. package/cypress/e2e/tagSpecific/solution.cy.js +109 -0
  119. package/cypress/e2e/tagSpecific/solveequations.cy.js +1026 -0
  120. package/cypress/e2e/tagSpecific/sort.cy.js +1685 -0
  121. package/cypress/e2e/tagSpecific/spreadsheet.cy.js +5971 -0
  122. package/cypress/e2e/tagSpecific/subsetofreals.cy.js +2725 -0
  123. package/cypress/e2e/tagSpecific/substitute.cy.js +2646 -0
  124. package/cypress/e2e/tagSpecific/tabular.cy.js +36 -0
  125. package/cypress/e2e/tagSpecific/text.cy.js +975 -0
  126. package/cypress/e2e/tagSpecific/textinput.cy.js +2177 -0
  127. package/cypress/e2e/tagSpecific/textlist.cy.js +369 -0
  128. package/cypress/e2e/tagSpecific/triangle.cy.js +1936 -0
  129. package/cypress/e2e/tagSpecific/triggerset.cy.js +2023 -0
  130. package/cypress/e2e/tagSpecific/updatevalue.cy.js +3288 -0
  131. package/cypress/e2e/tagSpecific/vector.cy.js +20183 -0
  132. package/cypress/e2e/tagSpecific/video.cy.js +612 -0
  133. package/cypress/e2e/tagSpecific/when.cy.js +202 -0
  134. package/cypress/e2e/variants/specifysinglevariant.cy.js +6726 -0
  135. package/cypress/e2e/variants/uniquevariants.cy.js +4846 -0
  136. package/cypress/fixtures/example.json +5 -0
  137. package/cypress/support/commands.js +32 -0
  138. package/cypress/support/e2e.js +31 -0
  139. package/cypress.config.js +18 -0
  140. package/docs/codeSnippet.jsx +11 -0
  141. package/docs/index.html +133 -0
  142. package/docs/index.jsx +138 -0
  143. package/docs/prism.css +3 -0
  144. package/index.html +14 -0
  145. package/index.js +21 -0
  146. package/media/answer_example.png +0 -0
  147. package/media/graph_example.png +0 -0
  148. package/media/graph_markup_example.png +0 -0
  149. package/package.json +83 -0
  150. package/public/favicon.ico +0 -0
  151. package/public/fonts/files/open-sans-v18-latin-700.woff +0 -0
  152. package/public/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
  153. package/public/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
  154. package/public/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
  155. package/public/fonts/files/open-sans-v18-latin-italic.woff +0 -0
  156. package/public/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
  157. package/public/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
  158. package/public/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
  159. package/public/fonts/files/open-sans-v18-latin-light.woff +0 -0
  160. package/public/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
  161. package/public/fonts/files/open-sans-v18-latin-regular.woff +0 -0
  162. package/public/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
  163. package/src/Core/ComponentTypes.js +426 -0
  164. package/src/Core/Core.js +11852 -0
  165. package/src/Core/CoreWorker.js +127 -0
  166. package/src/Core/Dependencies.js +8226 -0
  167. package/src/Core/Numerics.js +473 -0
  168. package/src/Core/ParameterStack.js +36 -0
  169. package/src/Core/ReadOnlyProxyHandler.js +41 -0
  170. package/src/Core/StateProxyHandler.js +88 -0
  171. package/src/Core/components/Aliases.js +67 -0
  172. package/src/Core/components/Angle.js +758 -0
  173. package/src/Core/components/AnimateFromSequence.js +922 -0
  174. package/src/Core/components/Answer.js +2087 -0
  175. package/src/Core/components/AsList.js +83 -0
  176. package/src/Core/components/AttractTo.js +245 -0
  177. package/src/Core/components/AttractToAngles.js +262 -0
  178. package/src/Core/components/AttractToConstraint.js +104 -0
  179. package/src/Core/components/AttractToGrid.js +315 -0
  180. package/src/Core/components/Award.js +906 -0
  181. package/src/Core/components/BestFitLine.js +318 -0
  182. package/src/Core/components/BezierControls.js +719 -0
  183. package/src/Core/components/BlockQuote.js +35 -0
  184. package/src/Core/components/Boolean.js +500 -0
  185. package/src/Core/components/BooleanInput.js +330 -0
  186. package/src/Core/components/BooleanList.js +396 -0
  187. package/src/Core/components/BooleanOperators.js +35 -0
  188. package/src/Core/components/BooleanOperatorsOfMath.js +148 -0
  189. package/src/Core/components/CallAction.js +261 -0
  190. package/src/Core/components/Caption.js +73 -0
  191. package/src/Core/components/Case.js +56 -0
  192. package/src/Core/components/Cell.js +439 -0
  193. package/src/Core/components/CellBlock.js +64 -0
  194. package/src/Core/components/Chart.js +795 -0
  195. package/src/Core/components/Choice.js +266 -0
  196. package/src/Core/components/ChoiceInput.js +1407 -0
  197. package/src/Core/components/Circle.js +2884 -0
  198. package/src/Core/components/CodeEditor.js +647 -0
  199. package/src/Core/components/CodeViewer.js +294 -0
  200. package/src/Core/components/CollaborateGroupSetup.js +46 -0
  201. package/src/Core/components/CollaborateGroups.js +119 -0
  202. package/src/Core/components/Collect.js +850 -0
  203. package/src/Core/components/Column.js +608 -0
  204. package/src/Core/components/ConditionalContent.js +468 -0
  205. package/src/Core/components/ConsiderAsResponses.js +49 -0
  206. package/src/Core/components/ConstrainTo.js +161 -0
  207. package/src/Core/components/ConstrainToAngles.js +244 -0
  208. package/src/Core/components/ConstrainToGraph.js +142 -0
  209. package/src/Core/components/ConstrainToGrid.js +175 -0
  210. package/src/Core/components/ConstraintUnion.js +119 -0
  211. package/src/Core/components/Constraints.js +497 -0
  212. package/src/Core/components/ContentBrowser.js +441 -0
  213. package/src/Core/components/ContentPicker.js +263 -0
  214. package/src/Core/components/ControlVectors.js +25 -0
  215. package/src/Core/components/Coords.js +63 -0
  216. package/src/Core/components/Copy.js +3412 -0
  217. package/src/Core/components/Curve.js +4130 -0
  218. package/src/Core/components/CustomAttribute.js +175 -0
  219. package/src/Core/components/DataFrame.js +357 -0
  220. package/src/Core/components/DiscreteSimulationResultList.js +342 -0
  221. package/src/Core/components/DiscreteSimulationResultPolyline.js +581 -0
  222. package/src/Core/components/Divisions.js +55 -0
  223. package/src/Core/components/Document.js +888 -0
  224. package/src/Core/components/Embed.js +65 -0
  225. package/src/Core/components/Endpoint.js +62 -0
  226. package/src/Core/components/Evaluate.js +321 -0
  227. package/src/Core/components/Extract.js +656 -0
  228. package/src/Core/components/Extrema.js +556 -0
  229. package/src/Core/components/Feedback.js +200 -0
  230. package/src/Core/components/FeedbackDefinitions.js +97 -0
  231. package/src/Core/components/Figure.js +148 -0
  232. package/src/Core/components/Footnote.js +73 -0
  233. package/src/Core/components/Function.js +5344 -0
  234. package/src/Core/components/FunctionIterates.js +306 -0
  235. package/src/Core/components/FunctionOperators.js +702 -0
  236. package/src/Core/components/Graph.js +1679 -0
  237. package/src/Core/components/Group.js +7 -0
  238. package/src/Core/components/HasSameFactoring.js +407 -0
  239. package/src/Core/components/Hint.js +241 -0
  240. package/src/Core/components/Image.js +524 -0
  241. package/src/Core/components/Indexing.js +79 -0
  242. package/src/Core/components/IntComma.js +64 -0
  243. package/src/Core/components/Integer.js +81 -0
  244. package/src/Core/components/Intersection.js +328 -0
  245. package/src/Core/components/Interval.js +29 -0
  246. package/src/Core/components/Label.js +492 -0
  247. package/src/Core/components/Latex.js +104 -0
  248. package/src/Core/components/Legend.js +329 -0
  249. package/src/Core/components/Line.js +2040 -0
  250. package/src/Core/components/LineSegment.js +882 -0
  251. package/src/Core/components/Lists.js +180 -0
  252. package/src/Core/components/Lorem.js +249 -0
  253. package/src/Core/components/MMeMen.js +377 -0
  254. package/src/Core/components/Map.js +873 -0
  255. package/src/Core/components/Markers.js +101 -0
  256. package/src/Core/components/MatchesPattern.js +339 -0
  257. package/src/Core/components/Math.js +2552 -0
  258. package/src/Core/components/MathInput.js +948 -0
  259. package/src/Core/components/MathList.js +828 -0
  260. package/src/Core/components/MathOperators.js +1286 -0
  261. package/src/Core/components/Matrix.js +497 -0
  262. package/src/Core/components/MatrixInput.js +3157 -0
  263. package/src/Core/components/MdMdnMrow.js +394 -0
  264. package/src/Core/components/Module.js +16 -0
  265. package/src/Core/components/Number.js +1031 -0
  266. package/src/Core/components/NumberList.js +550 -0
  267. package/src/Core/components/Option.js +24 -0
  268. package/src/Core/components/P.js +71 -0
  269. package/src/Core/components/Paginator.js +338 -0
  270. package/src/Core/components/Panel.js +126 -0
  271. package/src/Core/components/Parabola.js +1561 -0
  272. package/src/Core/components/ParagraphMarkup.js +59 -0
  273. package/src/Core/components/Pegboard.js +43 -0
  274. package/src/Core/components/PeriodicSet.js +291 -0
  275. package/src/Core/components/PiecewiseFunction.js +832 -0
  276. package/src/Core/components/Pluralize.js +198 -0
  277. package/src/Core/components/Point.js +1295 -0
  278. package/src/Core/components/Polygon.js +408 -0
  279. package/src/Core/components/Polyline.js +841 -0
  280. package/src/Core/components/RandomizedTextList.js +225 -0
  281. package/src/Core/components/Ray.js +1737 -0
  282. package/src/Core/components/Rectangle.js +1535 -0
  283. package/src/Core/components/Ref.js +350 -0
  284. package/src/Core/components/RegionBetweenCurveXAxis.js +124 -0
  285. package/src/Core/components/RegionHalfPlane.js +107 -0
  286. package/src/Core/components/RegularPolygon.js +2118 -0
  287. package/src/Core/components/RenderDoenetML.js +181 -0
  288. package/src/Core/components/Row.js +780 -0
  289. package/src/Core/components/SampleRandomNumbers.js +653 -0
  290. package/src/Core/components/Sectioning.js +303 -0
  291. package/src/Core/components/Select.js +947 -0
  292. package/src/Core/components/SelectFromSequence.js +1242 -0
  293. package/src/Core/components/SelectRandomNumbers.js +225 -0
  294. package/src/Core/components/Sequence.js +444 -0
  295. package/src/Core/components/Setup.js +53 -0
  296. package/src/Core/components/Shuffle.js +470 -0
  297. package/src/Core/components/SideBySide.js +2130 -0
  298. package/src/Core/components/SingleCharacterComponents.js +41 -0
  299. package/src/Core/components/Slider.js +819 -0
  300. package/src/Core/components/SolutionContainer.js +67 -0
  301. package/src/Core/components/Solutions.js +334 -0
  302. package/src/Core/components/SolveEquations.js +568 -0
  303. package/src/Core/components/Sort.js +398 -0
  304. package/src/Core/components/Sources.js +108 -0
  305. package/src/Core/components/Split.js +205 -0
  306. package/src/Core/components/Spreadsheet.js +1507 -0
  307. package/src/Core/components/StyleDefinitions.js +111 -0
  308. package/src/Core/components/SubsetOfReals.js +348 -0
  309. package/src/Core/components/SubsetOfRealsInput.js +1474 -0
  310. package/src/Core/components/Substitute.js +496 -0
  311. package/src/Core/components/SummaryStatistics.js +652 -0
  312. package/src/Core/components/Table.js +145 -0
  313. package/src/Core/components/Tabular.js +384 -0
  314. package/src/Core/components/Template.js +360 -0
  315. package/src/Core/components/Text.js +341 -0
  316. package/src/Core/components/TextInput.js +566 -0
  317. package/src/Core/components/TextList.js +442 -0
  318. package/src/Core/components/TextListFromString.js +137 -0
  319. package/src/Core/components/TextOperatorsOfMath.js +21 -0
  320. package/src/Core/components/Triangle.js +280 -0
  321. package/src/Core/components/TriggerSet.js +189 -0
  322. package/src/Core/components/TupleList.js +43 -0
  323. package/src/Core/components/UpdateValue.js +435 -0
  324. package/src/Core/components/VariantControl.js +36 -0
  325. package/src/Core/components/Vector.js +2478 -0
  326. package/src/Core/components/Verbatim.js +125 -0
  327. package/src/Core/components/Video.js +673 -0
  328. package/src/Core/components/When.js +198 -0
  329. package/src/Core/components/abstract/AngleListComponent.js +140 -0
  330. package/src/Core/components/abstract/BaseComponent.js +1496 -0
  331. package/src/Core/components/abstract/BlockComponent.js +5 -0
  332. package/src/Core/components/abstract/BooleanBaseOperator.js +88 -0
  333. package/src/Core/components/abstract/BooleanBaseOperatorOfMath.js +100 -0
  334. package/src/Core/components/abstract/BooleanBaseOperatorOneInput.js +44 -0
  335. package/src/Core/components/abstract/ComponentSize.js +789 -0
  336. package/src/Core/components/abstract/ComponentWithSelectableType.js +537 -0
  337. package/src/Core/components/abstract/CompositeComponent.js +142 -0
  338. package/src/Core/components/abstract/ConstraintComponent.js +19 -0
  339. package/src/Core/components/abstract/FunctionBaseOperator.js +680 -0
  340. package/src/Core/components/abstract/GraphicalComponent.js +56 -0
  341. package/src/Core/components/abstract/InlineComponent.js +5 -0
  342. package/src/Core/components/abstract/InlineRenderInlineChildren.js +63 -0
  343. package/src/Core/components/abstract/Input.js +192 -0
  344. package/src/Core/components/abstract/IntervalListComponent.js +218 -0
  345. package/src/Core/components/abstract/LineListComponent.js +114 -0
  346. package/src/Core/components/abstract/MathBaseOperator.js +631 -0
  347. package/src/Core/components/abstract/MathBaseOperatorOneInput.js +112 -0
  348. package/src/Core/components/abstract/PointListComponent.js +238 -0
  349. package/src/Core/components/abstract/SectioningComponent.js +1262 -0
  350. package/src/Core/components/abstract/SingleCharacterInline.js +23 -0
  351. package/src/Core/components/abstract/TextBaseOperatorOfMath.js +47 -0
  352. package/src/Core/components/abstract/TextOrInline.js +66 -0
  353. package/src/Core/components/abstract/VariableName.js +31 -0
  354. package/src/Core/components/abstract/VariableNameList.js +83 -0
  355. package/src/Core/components/abstract/VectorListComponent.js +235 -0
  356. package/src/Core/components/chemistry/Atom.js +910 -0
  357. package/src/Core/components/chemistry/ElectronConfiguration.js +36 -0
  358. package/src/Core/components/chemistry/Ion.js +684 -0
  359. package/src/Core/components/chemistry/IonicCompound.js +189 -0
  360. package/src/Core/components/chemistry/OrbitalDiagram.js +175 -0
  361. package/src/Core/components/chemistry/OrbitalDiagramInput.js +753 -0
  362. package/src/Core/components/chemistry/index.js +6 -0
  363. package/src/Core/components/commonsugar/breakstrings.js +627 -0
  364. package/src/Core/components/commonsugar/lists.js +177 -0
  365. package/src/Core/components/dynamicalSystems/CobwebPolyline.js +913 -0
  366. package/src/Core/components/dynamicalSystems/EquilibriumCurve.js +95 -0
  367. package/src/Core/components/dynamicalSystems/EquilibriumLine.js +93 -0
  368. package/src/Core/components/dynamicalSystems/EquilibriumPoint.js +93 -0
  369. package/src/Core/components/dynamicalSystems/ODESystem.js +943 -0
  370. package/src/Core/components/dynamicalSystems/index.js +5 -0
  371. package/src/Core/components/linearAlgebra/EigenDecomposition.js +294 -0
  372. package/src/Core/utils/array.js +30 -0
  373. package/src/Core/utils/booleanLogic.js +965 -0
  374. package/src/Core/utils/checkEquality.js +818 -0
  375. package/src/Core/utils/cid.js +29 -0
  376. package/src/Core/utils/componentInfoObjects.js +100 -0
  377. package/src/Core/utils/constraints.js +23 -0
  378. package/src/Core/utils/copy.js +572 -0
  379. package/src/Core/utils/deepFunctions.js +173 -0
  380. package/src/Core/utils/descendants.js +252 -0
  381. package/src/Core/utils/enumeration.js +234 -0
  382. package/src/Core/utils/feedback.js +84 -0
  383. package/src/Core/utils/function.js +1343 -0
  384. package/src/Core/utils/graphical.js +196 -0
  385. package/src/Core/utils/label.js +396 -0
  386. package/src/Core/utils/math.js +1056 -0
  387. package/src/Core/utils/naming.js +45 -0
  388. package/src/Core/utils/periodicSetEquality.js +403 -0
  389. package/src/Core/utils/randomNumbers.js +70 -0
  390. package/src/Core/utils/retrieveMedia.js +98 -0
  391. package/src/Core/utils/retrieveTextFile.js +140 -0
  392. package/src/Core/utils/returnAllPossibleVariants.js +73 -0
  393. package/src/Core/utils/rounding.js +316 -0
  394. package/src/Core/utils/sequence.js +754 -0
  395. package/src/Core/utils/serializedStateProcessing.js +4049 -0
  396. package/src/Core/utils/size.js +22 -0
  397. package/src/Core/utils/stateVariables.js +138 -0
  398. package/src/Core/utils/style.js +535 -0
  399. package/src/Core/utils/subset-of-reals.js +796 -0
  400. package/src/Core/utils/table.js +41 -0
  401. package/src/Core/utils/text.js +16 -0
  402. package/src/Core/utils/triggering.js +167 -0
  403. package/src/Core/utils/variants.js +477 -0
  404. package/src/DoenetML.css +308 -0
  405. package/src/DoenetML.jsx +201 -0
  406. package/src/Parser/doenet.grammar +90 -0
  407. package/src/Parser/doenet.js +33 -0
  408. package/src/Parser/doenet.terms.js +20 -0
  409. package/src/Parser/parser.js +266 -0
  410. package/src/Parser/tokens.js +129 -0
  411. package/src/Tools/CodeMirror.jsx +440 -0
  412. package/src/Tools/DarkmodeController.jsx +21 -0
  413. package/src/Tools/Footers/MathInputSelector.jsx +34 -0
  414. package/src/Tools/Footers/VirtualKeyboard.jsx +751 -0
  415. package/src/Tools/cypressTest/CypressTest.jsx +341 -0
  416. package/src/Tools/cypressTest/index.html +102 -0
  417. package/src/Tools/cypressTest/index.jsx +40 -0
  418. package/src/Viewer/ActivityViewer.jsx +1461 -0
  419. package/src/Viewer/PageViewer.jsx +1329 -0
  420. package/src/Viewer/renderers/alert.jsx +17 -0
  421. package/src/Viewer/renderers/angle.jsx +209 -0
  422. package/src/Viewer/renderers/answer.jsx +206 -0
  423. package/src/Viewer/renderers/asList.jsx +25 -0
  424. package/src/Viewer/renderers/blockQuote.jsx +41 -0
  425. package/src/Viewer/renderers/boolean.jsx +17 -0
  426. package/src/Viewer/renderers/booleanInput.css +105 -0
  427. package/src/Viewer/renderers/booleanInput.jsx +636 -0
  428. package/src/Viewer/renderers/button.jsx +369 -0
  429. package/src/Viewer/renderers/c.jsx +17 -0
  430. package/src/Viewer/renderers/callAction.jsx +18 -0
  431. package/src/Viewer/renderers/cell.jsx +59 -0
  432. package/src/Viewer/renderers/chart.jsx +83 -0
  433. package/src/Viewer/renderers/choiceInput.css +223 -0
  434. package/src/Viewer/renderers/choiceInput.jsx +535 -0
  435. package/src/Viewer/renderers/circle.jsx +990 -0
  436. package/src/Viewer/renderers/cobwebPolyline.jsx +442 -0
  437. package/src/Viewer/renderers/codeEditor.jsx +248 -0
  438. package/src/Viewer/renderers/codeViewer.jsx +105 -0
  439. package/src/Viewer/renderers/containerBlock.jsx +41 -0
  440. package/src/Viewer/renderers/containerInline.jsx +17 -0
  441. package/src/Viewer/renderers/contentBrowser.jsx +159 -0
  442. package/src/Viewer/renderers/contentPicker.jsx +160 -0
  443. package/src/Viewer/renderers/curve.jsx +1072 -0
  444. package/src/Viewer/renderers/ellipsis.jsx +17 -0
  445. package/src/Viewer/renderers/em.jsx +17 -0
  446. package/src/Viewer/renderers/embed.jsx +110 -0
  447. package/src/Viewer/renderers/feedback.jsx +74 -0
  448. package/src/Viewer/renderers/figure.jsx +131 -0
  449. package/src/Viewer/renderers/footnote.jsx +52 -0
  450. package/src/Viewer/renderers/graph.jsx +925 -0
  451. package/src/Viewer/renderers/hint.jsx +142 -0
  452. package/src/Viewer/renderers/image.jsx +581 -0
  453. package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs +2 -0
  454. package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs.map +1 -0
  455. package/src/Viewer/renderers/label.jsx +470 -0
  456. package/src/Viewer/renderers/legend.jsx +306 -0
  457. package/src/Viewer/renderers/line.jsx +511 -0
  458. package/src/Viewer/renderers/lineSegment.jsx +754 -0
  459. package/src/Viewer/renderers/list.jsx +111 -0
  460. package/src/Viewer/renderers/lq.jsx +12 -0
  461. package/src/Viewer/renderers/lsq.jsx +12 -0
  462. package/src/Viewer/renderers/math.jsx +582 -0
  463. package/src/Viewer/renderers/mathInput.css +10 -0
  464. package/src/Viewer/renderers/mathInput.jsx +425 -0
  465. package/src/Viewer/renderers/mathInputog.jsx +534 -0
  466. package/src/Viewer/renderers/mathList.jsx +39 -0
  467. package/src/Viewer/renderers/matrixInput.jsx +317 -0
  468. package/src/Viewer/renderers/mdash.jsx +12 -0
  469. package/src/Viewer/renderers/nbsp.jsx +12 -0
  470. package/src/Viewer/renderers/ndash.jsx +12 -0
  471. package/src/Viewer/renderers/number.jsx +454 -0
  472. package/src/Viewer/renderers/numberList.jsx +35 -0
  473. package/src/Viewer/renderers/orbitalDiagram.jsx +247 -0
  474. package/src/Viewer/renderers/orbitalDiagramInput.jsx +450 -0
  475. package/src/Viewer/renderers/p.jsx +38 -0
  476. package/src/Viewer/renderers/paginatorControls.jsx +41 -0
  477. package/src/Viewer/renderers/pegboard.jsx +239 -0
  478. package/src/Viewer/renderers/point.jsx +649 -0
  479. package/src/Viewer/renderers/polygon.jsx +612 -0
  480. package/src/Viewer/renderers/polyline.jsx +608 -0
  481. package/src/Viewer/renderers/pre.jsx +34 -0
  482. package/src/Viewer/renderers/q.jsx +17 -0
  483. package/src/Viewer/renderers/ray.jsx +410 -0
  484. package/src/Viewer/renderers/ref.jsx +149 -0
  485. package/src/Viewer/renderers/regionBetweenCurveXAxis.jsx +182 -0
  486. package/src/Viewer/renderers/renderDoenetML.jsx +56 -0
  487. package/src/Viewer/renderers/row.jsx +31 -0
  488. package/src/Viewer/renderers/rq.jsx +12 -0
  489. package/src/Viewer/renderers/rsq.jsx +12 -0
  490. package/src/Viewer/renderers/section.jsx +427 -0
  491. package/src/Viewer/renderers/sideBySide.jsx +80 -0
  492. package/src/Viewer/renderers/slider.jsx +800 -0
  493. package/src/Viewer/renderers/solution.jsx +134 -0
  494. package/src/Viewer/renderers/spreadsheet.jsx +83 -0
  495. package/src/Viewer/renderers/sq.jsx +17 -0
  496. package/src/Viewer/renderers/styles/global.css +14 -0
  497. package/src/Viewer/renderers/subsetOfRealsInput.jsx +392 -0
  498. package/src/Viewer/renderers/summaryStatistics.jsx +83 -0
  499. package/src/Viewer/renderers/table.jsx +78 -0
  500. package/src/Viewer/renderers/tabular.jsx +58 -0
  501. package/src/Viewer/renderers/tag.jsx +26 -0
  502. package/src/Viewer/renderers/text.jsx +439 -0
  503. package/src/Viewer/renderers/textInput.jsx +774 -0
  504. package/src/Viewer/renderers/textList.jsx +30 -0
  505. package/src/Viewer/renderers/triggerSet.jsx +52 -0
  506. package/src/Viewer/renderers/updateValue.jsx +30 -0
  507. package/src/Viewer/renderers/utils/css.js +13 -0
  508. package/src/Viewer/renderers/utils/graph.js +159 -0
  509. package/src/Viewer/renderers/utils/offGraphIndicators.js +91 -0
  510. package/src/Viewer/renderers/vector.jsx +678 -0
  511. package/src/Viewer/renderers/video.jsx +494 -0
  512. package/src/Viewer/useDoenetRenderer.jsx +128 -0
  513. package/src/main.jsx +16 -0
  514. package/src/media/fonts/files/open-sans-v18-latin-700.woff +0 -0
  515. package/src/media/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
  516. package/src/media/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
  517. package/src/media/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
  518. package/src/media/fonts/files/open-sans-v18-latin-italic.woff +0 -0
  519. package/src/media/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
  520. package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
  521. package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
  522. package/src/media/fonts/files/open-sans-v18-latin-light.woff +0 -0
  523. package/src/media/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
  524. package/src/media/fonts/files/open-sans-v18-latin-regular.woff +0 -0
  525. package/src/media/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
  526. package/src/test/testCode.doenet +26 -0
  527. package/src/test/testViewer.jsx +158 -0
  528. package/src/uiComponents/ActionButton.jsx +157 -0
  529. package/src/uiComponents/ActionButtonGroup.jsx +93 -0
  530. package/src/uiComponents/Button.jsx +160 -0
  531. package/src/uiComponents/ButtonGroup.jsx +56 -0
  532. package/src/uiComponents/ToggleButton.jsx +194 -0
  533. package/src/uiComponents/ToggleButtonGroup.jsx +77 -0
  534. package/src/utils/activityUtils.js +713 -0
  535. package/src/utils/array.js +17 -0
  536. package/src/utils/cid.js +34 -0
  537. package/src/utils/componentInfoObjects.js +89 -0
  538. package/src/utils/deepFunctions.js +165 -0
  539. package/src/utils/enumeration.js +226 -0
  540. package/src/utils/math.js +624 -0
  541. package/src/utils/naming.js +44 -0
  542. package/src/utils/retrieveTextFile.js +156 -0
  543. package/src/utils/returnAllPossibleVariants.js +81 -0
  544. package/src/utils/sequence.js +715 -0
  545. package/src/utils/serialize.js +29 -0
  546. package/src/utils/serializedStateProcessing.js +2587 -0
  547. package/src/utils/subset-of-reals.js +783 -0
  548. package/src/utils/url.js +19 -0
  549. package/vite.config.js +14 -0
@@ -0,0 +1,1056 @@
1
+ import me from "math-expressions";
2
+
3
+ export var appliedFunctionSymbolsDefault = [
4
+ "abs",
5
+ "exp",
6
+ "log",
7
+ "ln",
8
+ "log10",
9
+ "sign",
10
+ "sqrt",
11
+ "erf",
12
+ "cos",
13
+ "cosh",
14
+ "acos",
15
+ "acosh",
16
+ "arccos",
17
+ "arccosh",
18
+ "cot",
19
+ "coth",
20
+ "acot",
21
+ "acoth",
22
+ "arccot",
23
+ "arccoth",
24
+ "csc",
25
+ "csch",
26
+ "acsc",
27
+ "acsch",
28
+ "arccsc",
29
+ "arccsch",
30
+ "sec",
31
+ "sech",
32
+ "asec",
33
+ "asech",
34
+ "arcsec",
35
+ "arcsech",
36
+ "sin",
37
+ "sinh",
38
+ "asin",
39
+ "asinh",
40
+ "arcsin",
41
+ "arcsinh",
42
+ "tan",
43
+ "tanh",
44
+ "atan",
45
+ "atan2",
46
+ "atanh",
47
+ "arctan",
48
+ "arctanh",
49
+ "arg",
50
+ "min",
51
+ "max",
52
+ "mean",
53
+ "median",
54
+ "floor",
55
+ "ceil",
56
+ "round",
57
+ "sum",
58
+ "prod",
59
+ "variance",
60
+ "std",
61
+ "count",
62
+ "mod",
63
+ "re",
64
+ "im",
65
+ "det",
66
+ "trace",
67
+ "nPr",
68
+ "nCr",
69
+ ];
70
+
71
+ export var appliedFunctionSymbolsDefaultLatex = [
72
+ "abs",
73
+ "exp",
74
+ "log",
75
+ "ln",
76
+ "log10",
77
+ "sign",
78
+ "sqrt",
79
+ "erf",
80
+ "cos",
81
+ "cosh",
82
+ "acos",
83
+ "acosh",
84
+ "arccos",
85
+ "arccosh",
86
+ "cot",
87
+ "coth",
88
+ "acot",
89
+ "acoth",
90
+ "arccot",
91
+ "arccoth",
92
+ "csc",
93
+ "csch",
94
+ "acsc",
95
+ "acsch",
96
+ "arccsc",
97
+ "arccsch",
98
+ "sec",
99
+ "sech",
100
+ "asec",
101
+ "asech",
102
+ "arcsec",
103
+ "arcsech",
104
+ "sin",
105
+ "sinh",
106
+ "asin",
107
+ "asinh",
108
+ "arcsin",
109
+ "arcsinh",
110
+ "tan",
111
+ "tanh",
112
+ "atan",
113
+ "atan2",
114
+ "atanh",
115
+ "arctan",
116
+ "arctanh",
117
+ "arg",
118
+ "min",
119
+ "max",
120
+ "mean",
121
+ "median",
122
+ "floor",
123
+ "ceil",
124
+ "round",
125
+ "sum",
126
+ "prod",
127
+ "variance",
128
+ "std",
129
+ "count",
130
+ "mod",
131
+ "Re",
132
+ "Im",
133
+ "det",
134
+ "trace",
135
+ "nPr",
136
+ "nCr",
137
+ ];
138
+
139
+ let allowedLatexSymbols = [
140
+ "alpha",
141
+ "beta",
142
+ "gamma",
143
+ "Gamma",
144
+ "delta",
145
+ "Delta",
146
+ "epsilon",
147
+ "zeta",
148
+ "eta",
149
+ "theta",
150
+ "Theta",
151
+ "iota",
152
+ "kappa",
153
+ "lambda",
154
+ "Lambda",
155
+ "mu",
156
+ "nu",
157
+ "xi",
158
+ "Xi",
159
+ "pi",
160
+ "Pi",
161
+ "rho",
162
+ "sigma",
163
+ "Sigma",
164
+ "tau",
165
+ "Tau",
166
+ "upsilon",
167
+ "Upsilon",
168
+ "phi",
169
+ "Phi",
170
+ "chi",
171
+ "psi",
172
+ "Psi",
173
+ "omega",
174
+ "Omega",
175
+ "partial",
176
+ "varnothing",
177
+ "emptyset",
178
+ "angle",
179
+ "circ",
180
+ "$",
181
+ "%",
182
+ ];
183
+
184
+ export var textToAst = new me.converters.textToAstObj({
185
+ appliedFunctionSymbols: appliedFunctionSymbolsDefault,
186
+ });
187
+
188
+ export function getFromText({
189
+ functionSymbols,
190
+ appliedFunctionSymbols = appliedFunctionSymbolsDefault,
191
+ splitSymbols = true,
192
+ parseScientificNotation = false,
193
+ } = {}) {
194
+ return (x) =>
195
+ me.fromAst(
196
+ new me.converters.textToAstObj({
197
+ appliedFunctionSymbols,
198
+ functionSymbols,
199
+ splitSymbols,
200
+ parseScientificNotation,
201
+ }).convert(x),
202
+ );
203
+ }
204
+
205
+ export var latexToAst = new me.converters.latexToAstObj({
206
+ appliedFunctionSymbols: appliedFunctionSymbolsDefaultLatex,
207
+ allowedLatexSymbols,
208
+ });
209
+
210
+ export function getFromLatex({
211
+ functionSymbols,
212
+ appliedFunctionSymbols = appliedFunctionSymbolsDefaultLatex,
213
+ splitSymbols = true,
214
+ parseScientificNotation = false,
215
+ } = {}) {
216
+ if (splitSymbols) {
217
+ return (x) =>
218
+ me.fromAst(
219
+ new me.converters.latexToAstObj({
220
+ appliedFunctionSymbols,
221
+ functionSymbols,
222
+ allowedLatexSymbols,
223
+ parseScientificNotation,
224
+ }).convert(wrapWordIncludingNumberWithVar(x, parseScientificNotation)),
225
+ );
226
+ } else {
227
+ return (x) =>
228
+ me.fromAst(
229
+ new me.converters.latexToAstObj({
230
+ appliedFunctionSymbols,
231
+ functionSymbols,
232
+ allowedLatexSymbols,
233
+ parseScientificNotation,
234
+ }).convert(wrapWordWithVar(x, parseScientificNotation)),
235
+ );
236
+ }
237
+ }
238
+
239
+ export function normalizeMathExpression({
240
+ value,
241
+ simplify,
242
+ expand = false,
243
+ createVectors = false,
244
+ createIntervals = false,
245
+ }) {
246
+ if (createVectors) {
247
+ value = value.tuples_to_vectors();
248
+ }
249
+ if (createIntervals) {
250
+ value = value.to_intervals();
251
+ }
252
+ if (expand) {
253
+ value = value.expand();
254
+ }
255
+ if (simplify === "full") {
256
+ return value.simplify();
257
+ } else if (simplify === "numbers") {
258
+ return value.evaluate_numbers();
259
+ } else if (simplify === "numberspreserveorder") {
260
+ return value.evaluate_numbers({ skip_ordering: true });
261
+ }
262
+ return value;
263
+ }
264
+
265
+ export function findFiniteNumericalValue(value) {
266
+ // return undefined if value is undefined
267
+ // returns null if value has a non-numerical value (including Infinity)
268
+ // otherwise, returns numerical value
269
+
270
+ if (value === undefined) {
271
+ return undefined;
272
+ }
273
+
274
+ if (Number.isFinite(value)) {
275
+ return value;
276
+ }
277
+
278
+ if (value.evaluate_to_constant !== undefined) {
279
+ value = value.evaluate_to_constant();
280
+ if (Number.isFinite(value)) {
281
+ return value;
282
+ }
283
+ }
284
+
285
+ // couldn't find numerical value
286
+ return null;
287
+ }
288
+
289
+ export function convertValueToMathExpression(value) {
290
+ if (value instanceof me.class) {
291
+ return value;
292
+ } else if (typeof value === "number" || typeof value === "string") {
293
+ // let value be math-expression based on value
294
+ return me.fromAst(value);
295
+ } else if (Array.isArray(value)) {
296
+ // let value be math-expression based on value
297
+ return me.fromAst(value);
298
+ } else {
299
+ return me.fromAst("\uFF3F"); // long underscore
300
+ }
301
+ }
302
+
303
+ export function returnNVariables(n, variablesSpecified) {
304
+ // console.log(`return N variables`, n, variablesSpecified)
305
+
306
+ if (!Number.isInteger(n) || n < 1) {
307
+ return [];
308
+ }
309
+
310
+ let nVariablesSpecified = variablesSpecified.length;
311
+
312
+ if (nVariablesSpecified === 0) {
313
+ if (n === 1) {
314
+ return [me.fromAst("x")];
315
+ } else if (n === 2) {
316
+ return [me.fromAst("x"), me.fromAst("y")];
317
+ } else if (n === 3) {
318
+ return [me.fromAst("x"), me.fromAst("y"), me.fromAst("z")];
319
+ } else {
320
+ let variables = [];
321
+ for (let i = 1; i <= n; i++) {
322
+ variables.push(me.fromAst(textToAst.convert(`x_${i}`)));
323
+ }
324
+ return variables;
325
+ }
326
+ }
327
+
328
+ if (
329
+ new Set(variablesSpecified.map((x) => x.toString())).size <
330
+ nVariablesSpecified
331
+ ) {
332
+ console.warn("Duplicate variables specified");
333
+ }
334
+
335
+ if (n <= nVariablesSpecified) {
336
+ return variablesSpecified.slice(0, n);
337
+ }
338
+
339
+ let variablesUsed = [...variablesSpecified.map((x) => x.toString())];
340
+ let variables = [...variablesSpecified];
341
+ for (let i = nVariablesSpecified + 1; i <= n; i++) {
342
+ let preferredVariables;
343
+ if (i == 1) {
344
+ if (n > 3) {
345
+ preferredVariables = ["x_1"];
346
+ } else {
347
+ preferredVariables = ["x"];
348
+ }
349
+ } else if (i == 2) {
350
+ if (n > 3) {
351
+ preferredVariables = ["x_2", "y_2"];
352
+ } else {
353
+ preferredVariables = ["y", "x_2"];
354
+ }
355
+ } else if (i == 3) {
356
+ if (n > 3) {
357
+ preferredVariables = ["x_3", "y_3", "z_3"];
358
+ } else {
359
+ preferredVariables = ["z", "x_3", "z_3"];
360
+ }
361
+ } else {
362
+ preferredVariables = ["x", "y", "z", "u", "v", "w", "X", "Y", "Z"].map(
363
+ (x) => `${x}_${i}`,
364
+ );
365
+ }
366
+ let addedVariable = false;
367
+ for (let v of preferredVariables) {
368
+ if (!variablesUsed.includes(v)) {
369
+ variables.push(me.fromAst(textToAst.convert(v)));
370
+ variablesUsed.push(v);
371
+ addedVariable = true;
372
+ break;
373
+ }
374
+ }
375
+ if (!addedVariable) {
376
+ let v = preferredVariables[0];
377
+ variables.push(me.fromAst(textToAst.convert(v)));
378
+ variablesUsed.push(v);
379
+ console.warn(`Variables added were not unique`);
380
+ }
381
+ }
382
+
383
+ return variables;
384
+ }
385
+
386
+ export async function preprocessMathInverseDefinition({
387
+ desiredValue,
388
+ stateValues,
389
+ variableName = "value",
390
+ arrayKey,
391
+ workspace,
392
+ }) {
393
+ if (
394
+ !vectorOperators.includes(desiredValue.tree[0]) ||
395
+ !desiredValue.tree.includes()
396
+ ) {
397
+ return { desiredValue };
398
+ }
399
+
400
+ // have a desiredValue that is a vector that is missing some entries
401
+
402
+ let valueAst;
403
+
404
+ let workspaceKey = variableName + "Ast";
405
+ if (arrayKey !== undefined) {
406
+ workspaceKey += `_${arrayKey}`;
407
+ }
408
+
409
+ if (workspace[workspaceKey]) {
410
+ // if have value from workspace
411
+ // we will merge components from desired value into workspace value
412
+ valueAst = workspace[workspaceKey].slice(0, desiredValue.tree.length);
413
+ } else {
414
+ let currentValue = await stateValues[variableName];
415
+
416
+ currentValue = currentValue.expand().simplify();
417
+
418
+ if (currentValue && arrayKey !== undefined) {
419
+ // TODO: generalize to multi-dimensional arrays?
420
+ currentValue = currentValue[arrayKey];
421
+ }
422
+
423
+ if (currentValue && vectorOperators.includes(currentValue.tree[0])) {
424
+ // if we have a currentValue that is a vector
425
+ // we will merge components from desired value into current value
426
+ valueAst = currentValue.tree.slice(0, desiredValue.tree.length);
427
+ }
428
+ }
429
+
430
+ if (valueAst) {
431
+ // have a vector that we'll merge desiredValue into
432
+
433
+ let vectorComponentsNotAffected = [];
434
+ let foundNotAffected = false;
435
+ for (let [ind, value] of desiredValue.tree.entries()) {
436
+ if (value === undefined) {
437
+ foundNotAffected = true;
438
+ vectorComponentsNotAffected.push(ind);
439
+ } else {
440
+ valueAst[ind] = value;
441
+ }
442
+ }
443
+ desiredValue = me.fromAst(valueAst);
444
+ workspace[workspaceKey] = valueAst;
445
+
446
+ if (foundNotAffected) {
447
+ return {
448
+ desiredValue,
449
+ vectorComponentsNotAffected,
450
+ };
451
+ } else {
452
+ return { desiredValue };
453
+ }
454
+ } else {
455
+ // don't have a vector to merge desiredValue into
456
+ // but desiredValue has undefined entries
457
+ // desired expression could have undefined entries
458
+ // fill in with \uff3f
459
+ let desiredOperands = [];
460
+ for (let val of desiredValue.tree.slice(1)) {
461
+ if (val === undefined) {
462
+ desiredOperands.push("\uff3f");
463
+ } else {
464
+ desiredOperands.push(val);
465
+ }
466
+ }
467
+
468
+ desiredValue = me.fromAst([desiredValue.tree[0], ...desiredOperands]);
469
+
470
+ return { desiredValue };
471
+ }
472
+ }
473
+
474
+ export function normalizeLatexString(latexString, { unionFromU = false } = {}) {
475
+ let substitutions = [
476
+ ["\u03B1", "\\alpha "], // 'α'
477
+ ["\u03B2", "\\beta "], // 'β'
478
+ ["\u03D0", "\\beta "], // 'ϐ'
479
+ ["\u0393", "\\Gamma "], // 'Γ'
480
+ ["\u03B3", "\\gamma "], // 'γ'
481
+ ["\u0394", "\\Delta "], // 'Δ'
482
+ ["\u03B4", "\\delta "], // 'δ'
483
+ ["\u03B5", "\\epsilon "], // 'ε' should this be varepsilon?
484
+ ["\u03F5", "\\epsilon "], // 'ϵ'
485
+ ["\u03B6", "\\zeta "], // 'ζ'
486
+ ["\u03B7", "\\eta "], // 'η'
487
+ ["\u0398", "\\Theta "], // 'Θ'
488
+ ["\u03F4", "\\Theta "], // 'ϴ'
489
+ ["\u03B8", "\\theta "], // 'θ'
490
+ ["\u1DBF", "\\theta "], // 'ᶿ'
491
+ ["\u03D1", "\\theta "], // 'ϑ'
492
+ ["\u03B9", "\\iota "], // 'ι'
493
+ ["\u03BA", "\\kappa "], // 'κ'
494
+ ["\u039B", "\\Lambda "], // 'Λ'
495
+ ["\u03BB", "\\lambda "], // 'λ'
496
+ ["\u03BC", "\\mu "], // 'μ'
497
+ ["\u00B5", "\\mu "], // 'µ' should this be micro?
498
+ ["\u03BD", "\\nu "], // 'ν'
499
+ ["\u039E", "\\Xi "], // 'Ξ'
500
+ ["\u03BE", "\\xi "], // 'ξ'
501
+ ["\u03A0", "\\Pi "], // 'Π'
502
+ ["\u03C0", "\\pi "], // 'π'
503
+ ["\u03D6", "\\pi "], // 'ϖ' should this be varpi?
504
+ ["\u03C1", "\\rho "], // 'ρ'
505
+ ["\u03F1", "\\rho "], // 'ϱ' should this be varrho?
506
+ ["\u03A3", "\\Sigma "], // 'Σ'
507
+ ["\u03C3", "\\sigma "], // 'σ'
508
+ ["\u03C2", "\\sigma "], // 'ς' should this be varsigma?
509
+ ["\u03C4", "\\tau "], // 'τ'
510
+ ["\u03A5", "\\Upsilon "], // 'Υ'
511
+ ["\u03C5", "\\upsilon "], // 'υ'
512
+ ["\u03A6", "\\Phi "], // 'Φ'
513
+ ["\u03C6", "\\phi "], // 'φ' should this be varphi?
514
+ ["\u03D5", "\\phi "], // 'ϕ'
515
+ ["\u03A8", "\\Psi "], // 'Ψ'
516
+ ["\u03C8", "\\psi "], // 'ψ'
517
+ ["\u03A9", "\\Omega "], // 'Ω'
518
+ ["\u03C9", "\\omega "], // 'ω'
519
+ ["\u2212", "-"], // minus sign
520
+ ["\u22C5", " \\cdot "], // dot operator
521
+ ["\u00B7", " \\cdot "], // middle dot
522
+ ["\u222A", " \\cup "], // ∪
523
+ ["\u2229", " \\cap "], // ∩
524
+ ["\u221E", " \\infty "], // ∞
525
+ ["\u2205", " \\emptyset "], // ∅
526
+ ];
527
+
528
+ for (let sub of substitutions) {
529
+ latexString = latexString.replaceAll(sub[0], sub[1]);
530
+ }
531
+
532
+ let startLdotsMatch = latexString.match(
533
+ /^(\\ )*(\\ldots|\.(\\ )*\.(\\ )*\.)(\\ )*(.*)$/,
534
+ );
535
+
536
+ if (startLdotsMatch) {
537
+ let afterLdots = startLdotsMatch[6];
538
+ if (afterLdots[0] !== ",") {
539
+ latexString = "\\ldots," + afterLdots;
540
+ } else {
541
+ latexString = "\\ldots" + afterLdots;
542
+ }
543
+ }
544
+
545
+ let endLdotsMatch = latexString.match(
546
+ /^(.*?)(\\ )*(\\ldots|\.(\\ )*\.(\\ )*\.)(\\ )*$/,
547
+ );
548
+
549
+ if (endLdotsMatch) {
550
+ let beforeLdots = endLdotsMatch[1];
551
+ if (beforeLdots[beforeLdots.length - 1] !== ",") {
552
+ latexString = beforeLdots + ",\\ldots";
553
+ } else {
554
+ latexString = beforeLdots + "\\ldots";
555
+ }
556
+ }
557
+
558
+ // replace [space]or[space]
559
+ // with \or
560
+ latexString = latexString.replaceAll(/(\b|\\ )or(\b|\\ )/g, "$1\\lor$2");
561
+ latexString = latexString.replaceAll(/(\b|\\ )and(\b|\\ )/g, "$1\\land$2");
562
+
563
+ if (unionFromU) {
564
+ latexString = latexString.replaceAll(/(\b|\\ )U(\b|\\ )/g, "$1\\cup$2");
565
+ }
566
+
567
+ return latexString;
568
+ }
569
+
570
+ export function isValidVariable(expression) {
571
+ // to be a valid variable, tree must be either
572
+ // - a string other than long underscore, or
573
+ // - a string with a subscript that is a string or a number
574
+ let tree = expression.tree;
575
+ let validVariable = true;
576
+ if (typeof tree === "string") {
577
+ if (tree === "\uFF3F") {
578
+ // long underscore
579
+ validVariable = false;
580
+ }
581
+ } else if (
582
+ !Array.isArray(tree) ||
583
+ tree[0] !== "_" ||
584
+ typeof tree[1] !== "string" ||
585
+ (typeof tree[2] !== "string" && typeof tree[2] !== "number")
586
+ ) {
587
+ validVariable = false;
588
+ }
589
+
590
+ return validVariable;
591
+ }
592
+
593
+ export function mathStateVariableFromNumberStateVariable({
594
+ numberVariableName = "number",
595
+ mathVariableName = "math",
596
+ isPublic = false,
597
+ } = {}) {
598
+ let mathDef = {
599
+ returnDependencies: () => ({
600
+ number: {
601
+ dependencyType: "stateVariable",
602
+ variableName: numberVariableName,
603
+ },
604
+ }),
605
+ definition: function ({ dependencyValues }) {
606
+ return {
607
+ setValue: {
608
+ [mathVariableName]: numberToMathExpression(dependencyValues.number),
609
+ },
610
+ };
611
+ },
612
+ inverseDefinition: function ({ desiredStateVariableValues }) {
613
+ let desiredMath = desiredStateVariableValues[mathVariableName];
614
+
615
+ let desiredNumber;
616
+ if (desiredMath instanceof me.class) {
617
+ desiredNumber = desiredMath.evaluate_to_constant();
618
+ } else if (typeof desiredMath === "number") {
619
+ desiredNumber = desiredMath;
620
+ } else {
621
+ desiredNumber = NaN;
622
+ }
623
+
624
+ return {
625
+ success: true,
626
+ instructions: [
627
+ {
628
+ setDependency: "number",
629
+ desiredValue: desiredNumber,
630
+ },
631
+ ],
632
+ };
633
+ },
634
+ };
635
+
636
+ if (isPublic) {
637
+ mathDef.public = true;
638
+ mathDef.shadowingInstructions = { createComponentOfType: "math" };
639
+ }
640
+
641
+ return mathDef;
642
+ }
643
+
644
+ export function numberToMathExpression(number) {
645
+ let mathTree;
646
+ if (typeof number?.re === "number" && typeof number?.im === "number") {
647
+ if (number.im === 0) {
648
+ mathTree = number.re;
649
+ } else {
650
+ let imPart;
651
+ if (number.im === 1) {
652
+ imPart = "i";
653
+ } else if (number.im === -1) {
654
+ imPart = ["-", "i"];
655
+ } else {
656
+ imPart = ["*", number.im, "i"];
657
+ }
658
+ if (number.re === 0) {
659
+ mathTree = imPart;
660
+ } else {
661
+ mathTree = ["+", number.re, imPart];
662
+ }
663
+ }
664
+ } else {
665
+ mathTree = number;
666
+ }
667
+ return me.fromAst(mathTree);
668
+ }
669
+
670
+ export function roundForDisplay({ value, dependencyValues }) {
671
+ let rounded = me.round_numbers_to_precision_plus_decimals(
672
+ value,
673
+ dependencyValues.displayDigits,
674
+ dependencyValues.displayDecimals,
675
+ );
676
+
677
+ if (
678
+ dependencyValues.displayDigits > 0 &&
679
+ dependencyValues.displaySmallAsZero > 0
680
+ ) {
681
+ rounded = me.set_small_zero(rounded, dependencyValues.displaySmallAsZero);
682
+ }
683
+
684
+ return rounded;
685
+ }
686
+
687
+ export function mergeListsWithOtherContainers(tree) {
688
+ if (!Array.isArray(tree)) {
689
+ return tree;
690
+ }
691
+
692
+ let operator = tree[0];
693
+ let operands = tree.slice(1);
694
+
695
+ if ([...vectorOperators, "list", "set"].includes(operator)) {
696
+ operands = operands.reduce(
697
+ (a, c) =>
698
+ Array.isArray(c) && c[0] === "list" ? [...a, ...c.slice(1)] : [...a, c],
699
+ [],
700
+ );
701
+ }
702
+
703
+ operands = operands.map((x) => mergeListsWithOtherContainers(x));
704
+
705
+ return [operator, ...operands];
706
+ }
707
+
708
+ export function wrapWordWithVar(string, parseScientificNotation) {
709
+ // wrap words that aren't already in a \operatorname with a \operatorname
710
+
711
+ let newString = "";
712
+
713
+ let regex = /\\operatorname\s*{[^{}]*}/;
714
+ let match = string.match(regex);
715
+ while (match) {
716
+ let beginMatch = match.index;
717
+ let endMatch = beginMatch + match[0].length;
718
+ newString += wrapWordWithVarSub(
719
+ string.substring(0, beginMatch),
720
+ parseScientificNotation,
721
+ );
722
+ newString += string.substring(beginMatch, endMatch);
723
+ string = string.substring(endMatch);
724
+ match = string.match(regex);
725
+ }
726
+ newString += wrapWordWithVarSub(string, parseScientificNotation);
727
+
728
+ return newString;
729
+ }
730
+
731
+ function wrapWordWithVarSub(string, parseScientificNotation) {
732
+ let newString = "";
733
+
734
+ const regex = /([^a-zA-Z0-9]?)([a-zA-Z][a-zA-Z0-9]+)([^a-zA-Z0-9]?)/;
735
+
736
+ let regexSN;
737
+
738
+ if (parseScientificNotation) {
739
+ const sci_notat_exp_regex =
740
+ "(E[+\\-]?[0-9]+\\s*($|(?=\\,|&|\\||\\\\\\||\\)|\\}|\\\\}|\\]|\\\\\\\\|\\\\end)))";
741
+ regexSN = new RegExp(
742
+ "([0-9]+(\\.[0-9]*)?" +
743
+ sci_notat_exp_regex +
744
+ ")|(\\.[0-9]+" +
745
+ sci_notat_exp_regex +
746
+ ")",
747
+ );
748
+ }
749
+
750
+ let match = string.match(regex);
751
+ while (match) {
752
+ let beginMatch = match.index;
753
+ let endMatch = beginMatch + match[0].length - match[3].length;
754
+ if (parseScientificNotation) {
755
+ let matchSN = string.match(regexSN);
756
+ if (
757
+ matchSN &&
758
+ matchSN.index < endMatch &&
759
+ matchSN.index + matchSN[0].length > beginMatch
760
+ ) {
761
+ // skip because is part of scientific notation
762
+ newString += string.substring(0, endMatch);
763
+ string = string.substring(endMatch);
764
+ match = string.match(regex);
765
+ continue;
766
+ }
767
+ }
768
+ if (match[1] === "\\") {
769
+ // start with backslash, so skip
770
+ newString += string.substring(0, endMatch);
771
+ string = string.substring(endMatch);
772
+ } else {
773
+ let beginWord = beginMatch + match[1].length;
774
+ newString += string.substring(0, beginWord);
775
+ newString += `\\operatorname{${match[2]}}`;
776
+ string = string.substring(endMatch);
777
+ }
778
+
779
+ match = string.match(regex);
780
+ }
781
+
782
+ newString += string;
783
+
784
+ return newString;
785
+ }
786
+
787
+ export function wrapWordIncludingNumberWithVar(
788
+ string,
789
+ parseScientificNotation,
790
+ ) {
791
+ let newString = "";
792
+
793
+ let regex = /\\operatorname\s*{[^{}]*}/;
794
+ let match = string.match(regex);
795
+ while (match) {
796
+ let beginMatch = match.index;
797
+ let endMatch = beginMatch + match[0].length;
798
+ newString += wrapWordIncludingNumberWithVarSub(
799
+ string.substring(0, beginMatch),
800
+ parseScientificNotation,
801
+ );
802
+ newString += string.substring(beginMatch, endMatch);
803
+ string = string.substring(endMatch);
804
+ match = string.match(regex);
805
+ }
806
+ newString += wrapWordIncludingNumberWithVarSub(
807
+ string,
808
+ parseScientificNotation,
809
+ );
810
+
811
+ return newString;
812
+ }
813
+
814
+ function wrapWordIncludingNumberWithVarSub(string, parseScientificNotation) {
815
+ let newString = "";
816
+
817
+ const regex =
818
+ /([^a-zA-Z0-9\s]?\s*)([a-zA-Z][a-zA-Z0-9]*[0-9][a-zA-Z0-9]*)([^a-zA-Z0-9]?)/;
819
+
820
+ let regexSN;
821
+
822
+ if (parseScientificNotation) {
823
+ const sci_notat_exp_regex =
824
+ "(E[+\\-]?[0-9]+\\s*($|(?=\\,|&|\\||\\\\\\||\\)|\\}|\\\\}|\\]|\\\\\\\\|\\\\end)))";
825
+ regexSN = new RegExp(
826
+ "([0-9]+(\\.[0-9]*)?" +
827
+ sci_notat_exp_regex +
828
+ ")|(\\.[0-9]+" +
829
+ sci_notat_exp_regex +
830
+ ")",
831
+ );
832
+ }
833
+
834
+ let match = string.match(regex);
835
+ while (match) {
836
+ let beginMatch = match.index;
837
+ let endMatch = beginMatch + match[0].length - match[3].length;
838
+ if (parseScientificNotation) {
839
+ let matchSN = string.match(regexSN);
840
+ if (
841
+ matchSN &&
842
+ matchSN.index < endMatch &&
843
+ matchSN.index + matchSN[0].length > beginMatch
844
+ ) {
845
+ // skip because is part of scientific notation
846
+ newString += string.substring(0, endMatch);
847
+ string = string.substring(endMatch);
848
+ match = string.match(regex);
849
+ continue;
850
+ }
851
+ }
852
+ if (match[1] === "\\" || match[1][0] === "^" || match[1][0] === "_") {
853
+ // start with backslash or with a ^ or _ and optional space
854
+ // so skip
855
+ newString += string.substring(0, endMatch);
856
+ string = string.substring(endMatch);
857
+ } else {
858
+ let beginWord = beginMatch + match[1].length;
859
+ newString += string.substring(0, beginWord);
860
+ newString += `\\operatorname{${match[2]}}`;
861
+ string = string.substring(endMatch);
862
+ }
863
+
864
+ match = string.match(regex);
865
+ }
866
+
867
+ newString += string;
868
+
869
+ return newString;
870
+ }
871
+
872
+ export function stripLatex(latex) {
873
+ return latex
874
+ .replaceAll(`\\,`, "")
875
+ .replaceAll(/\\operatorname{([^{}]*)}/g, "$1");
876
+ }
877
+
878
+ export function superSubscriptsToUnicode(text) {
879
+ let charToSubscriptUnicode = {
880
+ 0: "\u2080",
881
+ 1: "\u2081",
882
+ 2: "\u2082",
883
+ 3: "\u2083",
884
+ 4: "\u2084",
885
+ 5: "\u2085",
886
+ 6: "\u2086",
887
+ 7: "\u2087",
888
+ 8: "\u2088",
889
+ 9: "\u2089",
890
+ "+": "\u208A",
891
+ "-": "\u208B",
892
+ " ": "",
893
+ };
894
+
895
+ let charToSuperscriptUnicode = {
896
+ 0: "\u2070",
897
+ 1: "\u00B9",
898
+ 2: "\u00B2",
899
+ 3: "\u00B3",
900
+ 4: "\u2074",
901
+ 5: "\u2075",
902
+ 6: "\u2076",
903
+ 7: "\u2077",
904
+ 8: "\u2078",
905
+ 9: "\u2079",
906
+ "+": "\u207A",
907
+ "-": "\u207B",
908
+ " ": "",
909
+ };
910
+
911
+ function replaceSubscripts(match, p1) {
912
+ let newVal = "";
913
+
914
+ for (let char of p1) {
915
+ newVal += charToSubscriptUnicode[char];
916
+ }
917
+
918
+ return newVal;
919
+ }
920
+
921
+ function replaceSuperscripts(match, p1) {
922
+ let newVal = "";
923
+
924
+ for (let char of p1) {
925
+ newVal += charToSuperscriptUnicode[char];
926
+ }
927
+
928
+ return newVal;
929
+ }
930
+
931
+ text = text.replaceAll(/_(\d+)/g, replaceSubscripts);
932
+ text = text.replaceAll(/_\(([\d +-]+)\)/g, replaceSubscripts);
933
+ text = text.replaceAll(/\^(\d+)/g, replaceSuperscripts);
934
+ text = text.replaceAll(/\^\(([\d +-]+)\)/g, replaceSuperscripts);
935
+
936
+ return text;
937
+ }
938
+
939
+ export function unicodeToSuperSubscripts(text) {
940
+ let subscriptUnicodeToChar = {
941
+ "\u2080": "0",
942
+ "\u2081": "1",
943
+ "\u2082": "2",
944
+ "\u2083": "3",
945
+ "\u2084": "4",
946
+ "\u2085": "5",
947
+ "\u2086": "6",
948
+ "\u2087": "7",
949
+ "\u2088": "8",
950
+ "\u2089": "9",
951
+ "\u208A": "+",
952
+ "\u208B": "-",
953
+ };
954
+
955
+ let superscriptUnicodeToChar = {
956
+ "\u2070": "0",
957
+ "\u00B9": "1",
958
+ "\u00B2": "2",
959
+ "\u00B3": "3",
960
+ "\u2074": "4",
961
+ "\u2075": "5",
962
+ "\u2076": "6",
963
+ "\u2077": "7",
964
+ "\u2078": "8",
965
+ "\u2079": "9",
966
+ "\u207A": "+",
967
+ "\u207B": "-",
968
+ };
969
+
970
+ function replaceSubscripts(match, p1) {
971
+ let newVal = "";
972
+
973
+ for (let char of p1) {
974
+ newVal += subscriptUnicodeToChar[char];
975
+ }
976
+
977
+ return "_(" + newVal + ")";
978
+ }
979
+
980
+ function replaceSuperscripts(match, p1) {
981
+ let newVal = "";
982
+
983
+ for (let char of p1) {
984
+ newVal += superscriptUnicodeToChar[char];
985
+ }
986
+
987
+ return "^(" + newVal + ")";
988
+ }
989
+
990
+ text = text.replaceAll(
991
+ /([\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u208A\u208B]+)/g,
992
+ replaceSubscripts,
993
+ );
994
+ text = text.replaceAll(
995
+ /([\u2070\u00B9\u00B2\u00B3\u2074\u2075\u2076\u2077\u2078\u2079\u207A\u207B]+)/g,
996
+ replaceSuperscripts,
997
+ );
998
+
999
+ return text;
1000
+ }
1001
+
1002
+ export const mathjaxConfig = {
1003
+ showProcessingMessages: false,
1004
+ "fast-preview": {
1005
+ disabled: true,
1006
+ },
1007
+ jax: ["input/TeX", "output/CommonHTML"],
1008
+ extensions: [
1009
+ "tex2jax.js",
1010
+ "MathMenu.js",
1011
+ "MathZoom.js",
1012
+ "AssistiveMML.js",
1013
+ "a11y/accessibility-menu.js",
1014
+ ],
1015
+ TeX: {
1016
+ extensions: [
1017
+ "AMSmath.js",
1018
+ "AMSsymbols.js",
1019
+ "noErrors.js",
1020
+ "noUndefined.js",
1021
+ ],
1022
+ equationNumbers: {
1023
+ autoNumber: "AMS",
1024
+ },
1025
+ Macros: {
1026
+ lt: "<",
1027
+ gt: ">",
1028
+ amp: "&",
1029
+ var: ["\\mathrm{#1}", 1],
1030
+ csch: "\\operatorname{csch}",
1031
+ sech: "\\operatorname{sech}",
1032
+ },
1033
+ },
1034
+ tex2jax: {
1035
+ displayMath: [["\\[", "\\]"]],
1036
+ },
1037
+ };
1038
+
1039
+ export const vectorOperators = ["vector", "altvector", "tuple"];
1040
+
1041
+ export function removeFunctionsMathExpressionClass(value) {
1042
+ if (value instanceof me.class) {
1043
+ value = value.tree;
1044
+ } else if (typeof value === "function") {
1045
+ value = undefined;
1046
+ } else if (Array.isArray(value)) {
1047
+ value = value.map((x) => removeFunctionsMathExpressionClass(x));
1048
+ } else if (typeof value === "object" && value !== null) {
1049
+ let valueCopy = {};
1050
+ for (let key in value) {
1051
+ valueCopy[key] = removeFunctionsMathExpressionClass(value[key]);
1052
+ }
1053
+ value = valueCopy;
1054
+ }
1055
+ return value;
1056
+ }