@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,45 @@
1
+ import sha1 from "crypto-js/sha1";
2
+ import Base64 from "crypto-js/enc-base64";
3
+
4
+ let rePlus = /\+/g;
5
+ let reSlash = /\//g;
6
+
7
+ export function createUniqueName(componentType, longNameId) {
8
+ // use base64 encoding, but replace + with _ and / with -
9
+ // so that the name is a valid CSS identifier
10
+ let hashStringShortened = Base64.stringify(sha1(longNameId))
11
+ .slice(0, 10)
12
+ .replace(rePlus, "_")
13
+ .replace(reSlash, "-");
14
+
15
+ // console.log(`componentType: ${componentType}, longNameID: ${longNameId}, hashString: ${hashStringShortened}`)
16
+
17
+ return "__" + componentType + "_" + hashStringShortened;
18
+ }
19
+
20
+ export function getUniqueIdentifierFromBase(
21
+ uniqueIdentifierBase,
22
+ uniqueIdentifiersUsed,
23
+ ) {
24
+ let postfix = 1;
25
+ let uniqueIdentifier = uniqueIdentifierBase + postfix;
26
+
27
+ while (uniqueIdentifiersUsed.includes(uniqueIdentifier)) {
28
+ postfix += 1;
29
+ uniqueIdentifier = uniqueIdentifierBase + postfix;
30
+ }
31
+
32
+ uniqueIdentifiersUsed.push(uniqueIdentifier);
33
+
34
+ return uniqueIdentifier;
35
+ }
36
+
37
+ export function getNamespaceFromName(componentName) {
38
+ let lastSlash = componentName.lastIndexOf("/");
39
+ if (lastSlash === -1) {
40
+ throw Error(
41
+ `Encountered name ${componentName} that doesn't include a slash`,
42
+ );
43
+ }
44
+ return componentName.slice(0, lastSlash + 1);
45
+ }
@@ -0,0 +1,403 @@
1
+ import me from "math-expressions";
2
+
3
+ export default function periodicSetEquality(
4
+ expr,
5
+ other,
6
+ { min_elements_match = 3, match_partial = false } = {},
7
+ ) {
8
+ // expr must be a discrete infinite set
9
+ if (!is_periodic_set(expr)) return false;
10
+
11
+ // other must be a discrete infinite set or a list
12
+ if (is_periodic_set(other)) {
13
+ if (match_partial) {
14
+ let match1 = contained_in(expr.tree, other.tree, match_partial);
15
+ if (match1 === false) {
16
+ return 0;
17
+ }
18
+ let match2 = contained_in(other.tree, expr.tree, match_partial);
19
+ if (match2 === false) {
20
+ return 0;
21
+ }
22
+
23
+ if (match1 === true) {
24
+ if (match2 === true) {
25
+ return 1;
26
+ } else {
27
+ return match2;
28
+ }
29
+ } else if (match2 === true) {
30
+ return match1;
31
+ } else {
32
+ return Math.min(match1, match2);
33
+ }
34
+ } else {
35
+ return (
36
+ contained_in(expr.tree, other.tree, match_partial) &&
37
+ contained_in(other.tree, expr.tree, match_partial)
38
+ );
39
+ }
40
+ } else {
41
+ let operands = expr.tree.slice(1);
42
+
43
+ // implemented only if have just one tuple defining set
44
+ if (operands.length > 1) {
45
+ return false;
46
+ }
47
+
48
+ let offset = me.fromAst(operands[0][1]).evaluate_to_constant();
49
+ let period = me
50
+ .fromAst(["apply", "abs", operands[0][2]])
51
+ .evaluate_to_constant();
52
+
53
+ if (!Number.isFinite(offset) || !Number.isFinite(period)) {
54
+ return false;
55
+ }
56
+
57
+ let min_index = operands[0][3];
58
+ let max_index = operands[0][4];
59
+
60
+ // implemented only if min_index is -infinity and max_index is infinity
61
+ if (min_index !== -Infinity || max_index !== Infinity) {
62
+ return false;
63
+ }
64
+
65
+ // check if other is a list that begins and ends in 'ldots'
66
+ if (other.tree[0] !== "list") {
67
+ return false;
68
+ }
69
+
70
+ let number_list = other.tree.slice(1);
71
+
72
+ let n_ldots = 0;
73
+
74
+ if (number_list[0][0] === "ldots") {
75
+ n_ldots++;
76
+ number_list = number_list.slice(1);
77
+ } else if (!match_partial) {
78
+ return false;
79
+ }
80
+
81
+ if (number_list[number_list.length - 1][0] === "ldots") {
82
+ n_ldots++;
83
+ number_list = number_list.slice(0, number_list.length - 1);
84
+ } else if (!match_partial) {
85
+ return false;
86
+ }
87
+
88
+ let n_in_list = number_list.length;
89
+ if (n_in_list === 0) {
90
+ return false;
91
+ }
92
+
93
+ if (!match_partial && n_in_list < min_elements_match) {
94
+ return false;
95
+ }
96
+
97
+ number_list = number_list.map((x) => me.fromAst(x).evaluate_to_constant());
98
+
99
+ // use me.math.mod rather than % so it always non-negative
100
+ let offset_diff = me.math.mod(number_list[0] - offset, period);
101
+
102
+ if (!(me.math.min(offset_diff, period - offset_diff) < 1e-10 * period)) {
103
+ return false;
104
+ }
105
+
106
+ let n_matches = 1;
107
+
108
+ for (let i = 1; i < n_in_list; i++) {
109
+ if (
110
+ Math.abs(number_list[i] - number_list[i - 1] - period) <
111
+ 1e-10 * period
112
+ ) {
113
+ n_matches++;
114
+ } else {
115
+ if (!match_partial) {
116
+ return false;
117
+ }
118
+ break;
119
+ }
120
+ }
121
+
122
+ if (
123
+ n_matches === n_in_list &&
124
+ n_ldots === 2 &&
125
+ n_in_list >= min_elements_match
126
+ ) {
127
+ return true;
128
+ }
129
+
130
+ let fraction_matched = n_matches / Math.max(n_in_list, min_elements_match);
131
+
132
+ // penalize if don't have dots
133
+ // max 80% without dots
134
+ fraction_matched *= (9 + n_ldots / 2) / 10;
135
+
136
+ return fraction_matched;
137
+
138
+ // let the_list = other_tree.slice(0,n_in_list+1);
139
+
140
+ // // get list of same size from
141
+ // let generated_list = sequence_from_discrete_infinite(expr, n_in_list);
142
+
143
+ // if(!generated_list)
144
+ // return false;
145
+
146
+ // generated_list = ['list'].concat(generated_list);
147
+
148
+ // return full_equals(expr.context.from(generated_list), other.context.from(the_list));
149
+
150
+ // check if other is a list than ends in 'ldots'
151
+ // let other_tree = other.tree;
152
+
153
+ // if(other_tree[0] !== 'list')
154
+ // return false;
155
+
156
+ // let n_in_list = other_tree.length-2;
157
+
158
+ // if(other_tree[n_in_list+1][0] !== 'ldots')
159
+ // return false;
160
+
161
+ // if(n_in_list < min_elements_match)
162
+ // return false;
163
+
164
+ // let the_list = other_tree.slice(0,n_in_list+1);
165
+
166
+ // // get list of same size from
167
+ // let generated_list = sequence_from_discrete_infinite(expr, n_in_list);
168
+
169
+ // if(!generated_list)
170
+ // return false;
171
+
172
+ // generated_list = ['list'].concat(generated_list);
173
+
174
+ // return full_equals(expr.context.from(generated_list), other.context.from(the_list));
175
+ }
176
+ }
177
+
178
+ function is_periodic_set(expr) {
179
+ var tree = expr.tree;
180
+ if (!Array.isArray(tree)) return false;
181
+ if (tree[0] !== "periodic_set") return false;
182
+ var operands = tree.slice(1);
183
+
184
+ for (var v of operands) {
185
+ if (!Array.isArray(v)) return false;
186
+ if (v[0] !== "tuple") return false;
187
+ if (v.length !== 5) return false;
188
+ }
189
+
190
+ return true;
191
+ }
192
+
193
+ function contained_in(tree, i_set, match_partial) {
194
+ // true if tree is contained in the discrete infinite set i_set
195
+ // tree is either a discrete infinite set
196
+ // or a tuple of form [offset, period, min_index, max_index]
197
+
198
+ if (tree[0] === "periodic_set") {
199
+ if (match_partial) {
200
+ let num_matches = 0;
201
+ for (let piece of tree.slice(1)) {
202
+ let match = contained_in(piece, i_set, match_partial);
203
+ if (match === true) {
204
+ num_matches++;
205
+ } else if (match !== false) {
206
+ num_matches += match;
207
+ }
208
+ }
209
+
210
+ let num_pieces = tree.length - 1;
211
+
212
+ if (num_matches === num_pieces) {
213
+ return true;
214
+ } else if (num_matches === 0) {
215
+ return false;
216
+ } else {
217
+ return num_matches / num_pieces;
218
+ }
219
+ } else {
220
+ return tree.slice(1).every((v) => contained_in(v, i_set));
221
+ }
222
+ }
223
+
224
+ // tree is a tuple of the form [offset, period, min_index, max_index]
225
+
226
+ var offset0 = tree[1];
227
+ var period0 = tree[2];
228
+ var min_index = tree[3];
229
+ var max_index = tree[4];
230
+
231
+ // implemented only if min_index === -infinity and max_index === infinity
232
+ if (min_index !== -Infinity || max_index !== Infinity) return false;
233
+
234
+ // normalize to period 1
235
+ offset0 = me.fromAst(["/", offset0, period0]).evaluate_to_constant();
236
+
237
+ // if(!(typeof offset0 === 'number'))
238
+ // return false;
239
+
240
+ var tuples = i_set.slice(1);
241
+
242
+ // data will be array of form [p, q, offset, period]
243
+ // where offset and period are normalized by period0
244
+ // and p/q is fraction form of period
245
+
246
+ var data = [];
247
+ for (let i = 0; i < tuples.length; i++) {
248
+ // implemented only if min_index === -infinity and max_index === infinity
249
+ let this_min_index = tuples[i][3];
250
+ let this_max_index = tuples[i][4];
251
+ if (this_min_index !== -Infinity || this_max_index !== Infinity)
252
+ return false;
253
+
254
+ let offset = me
255
+ .fromAst(["/", tuples[i][1], period0])
256
+ .evaluate_to_constant();
257
+ let period = me
258
+ .fromAst(["apply", "abs", ["/", tuples[i][2], period0]])
259
+ .evaluate_to_constant();
260
+
261
+ if (typeof period !== "number" || Number.isNaN(period)) return false;
262
+
263
+ let frac = me.math.fraction(period);
264
+ let p = frac.n;
265
+
266
+ if (p > 1000) {
267
+ return false;
268
+ }
269
+
270
+ let q = frac.d;
271
+ data.push([p, q, offset, period]);
272
+ }
273
+
274
+ // sort by p
275
+ data.sort();
276
+
277
+ // check any with period for which original period is a multiple
278
+ while (true) {
279
+ let p = data[0][0];
280
+ if (p !== 1) break;
281
+
282
+ let offset = data[0][2];
283
+ let period = data[0][3];
284
+
285
+ // offsets match, then we've covered all of tree
286
+ let offset_diff = me
287
+ .fromAst(["+", offset, ["-", offset0]])
288
+ .evaluate_to_constant();
289
+
290
+ if (Number.isFinite(offset_diff) && Number.isFinite(period)) {
291
+ // use me.math.mod rather than % so it always non-negative
292
+ offset_diff = me.math.mod(offset_diff, period);
293
+
294
+ if (me.math.min(offset_diff, period - offset_diff) < 1e-10 * period)
295
+ return true;
296
+ }
297
+ data.splice(0, 1); // remove first entry from data
298
+ if (data.length === 0) return false;
299
+ }
300
+
301
+ var all_ps = [...new Set(data.map((v) => v[0]))];
302
+
303
+ let max_fraction_covered = 0;
304
+
305
+ for (let base_p of all_ps) {
306
+ // find all ps where base_p is a multiple
307
+ let options = data
308
+ .map(function (v, i) {
309
+ let m = base_p / v[0];
310
+ if (Number.isInteger(m)) return [v[0], m, i];
311
+ else return undefined;
312
+ })
313
+ .filter((v) => v);
314
+
315
+ let covered = [];
316
+
317
+ for (let opt of options) {
318
+ let p = opt[0];
319
+ let m = opt[1];
320
+ let i = opt[2];
321
+ let offset = data[i][2];
322
+ let period = data[i][3];
323
+
324
+ for (let j = 0; j < p; j++) {
325
+ let offset_diff = me
326
+ .fromAst(["+", offset, ["-", ["+", offset0, j]]])
327
+ .evaluate_to_constant();
328
+
329
+ // use me.math.mod rather than % so it always non-negative
330
+ if (Number.isFinite(offset_diff) && Number.isFinite(period)) {
331
+ offset_diff = me.math.mod(offset_diff, period);
332
+
333
+ if (me.math.min(offset_diff, period - offset_diff) < 1e-10 * period) {
334
+ for (let k = 0; k < m; k++) {
335
+ covered[j + k * p] = true;
336
+ }
337
+
338
+ // check to see if covered all;
339
+ let covered_all = true;
340
+ for (let ind = 0; ind < base_p; ind++) {
341
+ if (!covered[ind]) {
342
+ covered_all = false;
343
+ break;
344
+ }
345
+ }
346
+
347
+ if (covered_all) return true;
348
+
349
+ break;
350
+ }
351
+ }
352
+ }
353
+ }
354
+
355
+ if (match_partial) {
356
+ let fraction_covered = 0;
357
+ for (let ind = 0; ind < base_p; ind++) {
358
+ if (covered[ind]) {
359
+ fraction_covered++;
360
+ }
361
+ }
362
+ fraction_covered /= base_p;
363
+
364
+ if (fraction_covered > max_fraction_covered) {
365
+ max_fraction_covered = fraction_covered;
366
+ }
367
+ }
368
+ }
369
+
370
+ if (match_partial && max_fraction_covered > 0) {
371
+ return max_fraction_covered;
372
+ }
373
+
374
+ return false;
375
+ }
376
+
377
+ function sequence_from_discrete_infinite(expr, n_elements) {
378
+ // assuming without checking that expr is discrete infinite set
379
+
380
+ var tree = expr.tree;
381
+ var operands = tree.slice(1);
382
+
383
+ // implemented only if have just one tuple defining set
384
+ if (operands.length > 1) return;
385
+
386
+ let offset = operands[0][1];
387
+ let period = operands[0][2];
388
+ let min_index = simplify.evaluate_numbers(operands[0][3]);
389
+ let max_index = operands[0][4];
390
+
391
+ // implemented only if min_index is defined and an integer and max_index is infinity
392
+ if (!Number.isInteger(min_index) || max_index !== Infinity) return;
393
+
394
+ let result = [];
395
+
396
+ for (let i = 0; i < n_elements; i++) {
397
+ result.push(
398
+ simplify.evaluate_numbers(["+", ["*", period, min_index + i], offset]),
399
+ );
400
+ }
401
+
402
+ return result;
403
+ }
@@ -0,0 +1,70 @@
1
+ export function sampleFromRandomNumbers({
2
+ type,
3
+ numSamples,
4
+ standardDeviation,
5
+ mean,
6
+ to,
7
+ from,
8
+ step,
9
+ numDiscreteValues,
10
+ rng,
11
+ }) {
12
+ if (type === "gaussian") {
13
+ if (!(standardDeviation >= 0) || !Number.isFinite(mean)) {
14
+ let message =
15
+ "Invalid mean (" +
16
+ mean +
17
+ ") or standard deviation (" +
18
+ standardDeviation +
19
+ ") for a gaussian random variable.";
20
+ console.warn(message);
21
+
22
+ return Array(numSamples).fill(NaN);
23
+ }
24
+
25
+ let sampledValues = [];
26
+
27
+ for (let i = 0; i < numSamples; i++) {
28
+ // Standard Normal variate using Box-Muller transform.
29
+ let u = 0,
30
+ v = 0;
31
+ while (u === 0) {
32
+ u = rng();
33
+ }
34
+ while (v === 0) {
35
+ v = rng();
36
+ }
37
+ let standardNormal =
38
+ Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
39
+
40
+ // transform to correct parameters
41
+ sampledValues.push(mean + standardDeviation * standardNormal);
42
+ }
43
+
44
+ return sampledValues;
45
+ } else if (type === "uniform") {
46
+ let sampledValues = [];
47
+
48
+ let diff = to - from;
49
+
50
+ for (let i = 0; i < numSamples; i++) {
51
+ sampledValues.push(from + rng() * diff);
52
+ }
53
+
54
+ return sampledValues;
55
+ } else {
56
+ // discreteuniform
57
+ let sampledValues = [];
58
+
59
+ if (numDiscreteValues > 0) {
60
+ for (let i = 0; i < numSamples; i++) {
61
+ // random integer from 0 to numDiscreteValues-1
62
+ let ind = Math.floor(rng() * numDiscreteValues);
63
+
64
+ sampledValues.push(from + step * ind);
65
+ }
66
+ }
67
+
68
+ return sampledValues;
69
+ }
70
+ }
@@ -0,0 +1,98 @@
1
+ import axios from "axios";
2
+ import { cidFromArrayBuffer } from "./cid";
3
+
4
+ export async function retrieveMediaForCid(cid, mimeType) {
5
+ try {
6
+ return await retrieveMediaFromIPFS(cid);
7
+ } catch (e) {
8
+ // if have error from IPFS, fallback to retrieving from server
9
+ }
10
+
11
+ //Only if doenetML tag is not providing mimeType and not on IPFS
12
+ //look up in database
13
+ if (!mimeType) {
14
+ let { data } = await axios.get("/api/getMimeType.php", {
15
+ params: { cid: cid },
16
+ });
17
+ mimeType = data["mime-type"];
18
+ }
19
+
20
+ return retrieveMediaFromServer(cid, mimeType);
21
+ }
22
+
23
+ async function retrieveMediaFromIPFS(cid) {
24
+ let controller = new AbortController();
25
+ let signal = controller.signal;
26
+
27
+ // If the IPFS gateway cannot find the cid,
28
+ // it hangs for a long time before timing out.
29
+ // To avoid the long wait, abort the request after 1 second.
30
+ let timeoutId = setTimeout(() => {
31
+ controller.abort();
32
+ }, 1000);
33
+
34
+ try {
35
+ let response = await fetch(`https://${cid}.ipfs.dweb.link/`, { signal });
36
+
37
+ // if got a response, then we won't abort
38
+ clearTimeout(timeoutId);
39
+
40
+ if (response.ok) {
41
+ let mediaBlob = await response.blob();
42
+
43
+ let CidRetrieved = await cidFromArrayBuffer(
44
+ await mediaBlob.arrayBuffer(),
45
+ );
46
+
47
+ if (CidRetrieved === cid) {
48
+ let mediaURL = URL.createObjectURL(mediaBlob);
49
+ return { mediaBlob, mediaURL };
50
+ } else {
51
+ return Promise.reject(new Error("cid mismatch"));
52
+ }
53
+ } else {
54
+ return Promise.reject(new Error(`cid not found: ${cid}`));
55
+ }
56
+ } catch (e) {
57
+ return Promise.reject(new Error(`cid not found: ${cid}`));
58
+ }
59
+ }
60
+
61
+ async function retrieveMediaFromServer(cid, mimeType) {
62
+ try {
63
+ let extension = extensionFromMimeType(mimeType);
64
+
65
+ let response = await fetch(`/media/${cid}.${extension}`);
66
+
67
+ if (response.ok) {
68
+ let mediaBlob = await response.blob();
69
+
70
+ let CidRetrieved = await cidFromArrayBuffer(
71
+ await mediaBlob.arrayBuffer(),
72
+ );
73
+
74
+ if (CidRetrieved === cid) {
75
+ let mediaURL = URL.createObjectURL(mediaBlob);
76
+ return { mediaBlob, mediaURL };
77
+ } else {
78
+ return Promise.reject(new Error("cid mismatch"));
79
+ }
80
+ } else {
81
+ return Promise.reject(new Error(`cid not found: ${cid}`));
82
+ }
83
+ } catch (e) {
84
+ return Promise.reject(new Error(`cid not found: ${cid}`));
85
+ }
86
+ }
87
+
88
+ function extensionFromMimeType(mimeType) {
89
+ if (mimeType === "image/png") {
90
+ return "png";
91
+ } else if (mimeType === "image/jpeg") {
92
+ return "jpg";
93
+ } else if (mimeType === "text/csv") {
94
+ return "csv";
95
+ } else {
96
+ return "txt";
97
+ }
98
+ }