@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.
- package/.prettierrc +3 -0
- package/LICENSE +661 -0
- package/README.md +146 -0
- package/cypress/e2e/ActivityViewer/activityVariants.cy.js +1770 -0
- package/cypress/e2e/ActivityViewer/compiledActivity.cy.js +83 -0
- package/cypress/e2e/ActivityViewer/relationshipsAmongPages.cy.js +697 -0
- package/cypress/e2e/answerValidation/errorinnumbers.cy.js +2125 -0
- package/cypress/e2e/answerValidation/factoring.cy.js +1945 -0
- package/cypress/e2e/answerValidation/factoringOldAlgorithm.cy.js +892 -0
- package/cypress/e2e/answerValidation/functionanswers.cy.js +314 -0
- package/cypress/e2e/answerValidation/matchingpatterns.cy.js +287 -0
- package/cypress/e2e/answerValidation/matchpartial.cy.js +6711 -0
- package/cypress/e2e/answerValidation/pointlocation.cy.js +3989 -0
- package/cypress/e2e/answerValidation/symbolicequality.cy.js +1893 -0
- package/cypress/e2e/answerValidation/videoProgress.cy.js +210 -0
- package/cypress/e2e/assignNames/basiccopy.cy.js +2376 -0
- package/cypress/e2e/assignNames/collections.cy.js +9247 -0
- package/cypress/e2e/assignNames/selects.cy.js +105 -0
- package/cypress/e2e/assignNames/sequences.cy.js +1964 -0
- package/cypress/e2e/baseComponent/basecomponentproperties.cy.js +999 -0
- package/cypress/e2e/baseComponent/doenetMLtext.cy.js +427 -0
- package/cypress/e2e/chemistry/atom.cy.js +201 -0
- package/cypress/e2e/chemistry/ion.cy.js +608 -0
- package/cypress/e2e/chemistry/ioniccompound.cy.js +133 -0
- package/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js +2653 -0
- package/cypress/e2e/dynamicalsystem/equilibriumcurve.cy.js +311 -0
- package/cypress/e2e/dynamicalsystem/equilibriumline.cy.js +279 -0
- package/cypress/e2e/dynamicalsystem/equilibriumpoint.cy.js +283 -0
- package/cypress/e2e/dynamicalsystem/odesystem.cy.js +1834 -0
- package/cypress/e2e/equality/mathexpressions.cy.js +948 -0
- package/cypress/e2e/graphing/graphreferences.cy.js +978 -0
- package/cypress/e2e/graphing/graphreferences2.cy.js +615 -0
- package/cypress/e2e/linearAlgebra/eigenDecomposition.cy.js +401 -0
- package/cypress/e2e/tagSpecific/angle.cy.js +3898 -0
- package/cypress/e2e/tagSpecific/animatefromsequence.cy.js +2306 -0
- package/cypress/e2e/tagSpecific/answer.cy.js +31647 -0
- package/cypress/e2e/tagSpecific/bestfitline.cy.js +612 -0
- package/cypress/e2e/tagSpecific/blockquote.cy.js +30 -0
- package/cypress/e2e/tagSpecific/boolean.cy.js +742 -0
- package/cypress/e2e/tagSpecific/booleaninput.cy.js +1283 -0
- package/cypress/e2e/tagSpecific/booleanlist.cy.js +588 -0
- package/cypress/e2e/tagSpecific/booleanoperators.cy.js +596 -0
- package/cypress/e2e/tagSpecific/booleanoperatorsonmath.cy.js +498 -0
- package/cypress/e2e/tagSpecific/callaction.cy.js +2835 -0
- package/cypress/e2e/tagSpecific/choiceinput.cy.js +3205 -0
- package/cypress/e2e/tagSpecific/circle.cy.js +22036 -0
- package/cypress/e2e/tagSpecific/codeeditor.cy.js +1995 -0
- package/cypress/e2e/tagSpecific/collect.cy.js +5035 -0
- package/cypress/e2e/tagSpecific/componentsize.cy.js +502 -0
- package/cypress/e2e/tagSpecific/conditionalcontent.cy.js +3495 -0
- package/cypress/e2e/tagSpecific/contentBrowser.cy.js +335 -0
- package/cypress/e2e/tagSpecific/contentpicker.cy.js +261 -0
- package/cypress/e2e/tagSpecific/copy.cy.js +12627 -0
- package/cypress/e2e/tagSpecific/copy2.cy.js +5698 -0
- package/cypress/e2e/tagSpecific/curve.bezier.cy.js +12440 -0
- package/cypress/e2e/tagSpecific/curve.cy.js +1716 -0
- package/cypress/e2e/tagSpecific/curve.function.cy.js +1471 -0
- package/cypress/e2e/tagSpecific/curve.parametrized.cy.js +920 -0
- package/cypress/e2e/tagSpecific/document.cy.js +234 -0
- package/cypress/e2e/tagSpecific/endpoint.cy.js +197 -0
- package/cypress/e2e/tagSpecific/evaluate.cy.js +8895 -0
- package/cypress/e2e/tagSpecific/extract.cy.js +2282 -0
- package/cypress/e2e/tagSpecific/feedback.cy.js +2941 -0
- package/cypress/e2e/tagSpecific/function.cy.js +9450 -0
- package/cypress/e2e/tagSpecific/functioniterates.cy.js +1178 -0
- package/cypress/e2e/tagSpecific/functionoperators.cy.js +4047 -0
- package/cypress/e2e/tagSpecific/graph.cy.js +2491 -0
- package/cypress/e2e/tagSpecific/group.cy.js +683 -0
- package/cypress/e2e/tagSpecific/hint.cy.js +204 -0
- package/cypress/e2e/tagSpecific/image.cy.js +770 -0
- package/cypress/e2e/tagSpecific/integer.cy.js +206 -0
- package/cypress/e2e/tagSpecific/label.cy.js +800 -0
- package/cypress/e2e/tagSpecific/legend.cy.js +1001 -0
- package/cypress/e2e/tagSpecific/line.cy.js +12167 -0
- package/cypress/e2e/tagSpecific/linesegment.cy.js +4749 -0
- package/cypress/e2e/tagSpecific/lorem.cy.js +289 -0
- package/cypress/e2e/tagSpecific/map.cy.js +4476 -0
- package/cypress/e2e/tagSpecific/matchespattern.cy.js +693 -0
- package/cypress/e2e/tagSpecific/math.cy.js +10990 -0
- package/cypress/e2e/tagSpecific/mathdisplay.cy.js +2689 -0
- package/cypress/e2e/tagSpecific/mathinput.cy.js +15628 -0
- package/cypress/e2e/tagSpecific/mathinputgraph.cy.js +566 -0
- package/cypress/e2e/tagSpecific/mathlist.cy.js +4073 -0
- package/cypress/e2e/tagSpecific/mathoperators.cy.js +13851 -0
- package/cypress/e2e/tagSpecific/matrix.cy.js +8825 -0
- package/cypress/e2e/tagSpecific/matrixinput.cy.js +16277 -0
- package/cypress/e2e/tagSpecific/module.cy.js +1771 -0
- package/cypress/e2e/tagSpecific/number.cy.js +2221 -0
- package/cypress/e2e/tagSpecific/numberlist.cy.js +1285 -0
- package/cypress/e2e/tagSpecific/p.cy.js +72 -0
- package/cypress/e2e/tagSpecific/paginator.cy.js +2983 -0
- package/cypress/e2e/tagSpecific/parabola.cy.js +14331 -0
- package/cypress/e2e/tagSpecific/paragraphmarkup.cy.js +104 -0
- package/cypress/e2e/tagSpecific/periodicset.cy.js +1439 -0
- package/cypress/e2e/tagSpecific/piecewisefunction.cy.js +1055 -0
- package/cypress/e2e/tagSpecific/pluralize.cy.js +274 -0
- package/cypress/e2e/tagSpecific/point.cy.js +8895 -0
- package/cypress/e2e/tagSpecific/point2.cy.js +10259 -0
- package/cypress/e2e/tagSpecific/polygon.cy.js +5039 -0
- package/cypress/e2e/tagSpecific/polyline.cy.js +4704 -0
- package/cypress/e2e/tagSpecific/problem.cy.js +2768 -0
- package/cypress/e2e/tagSpecific/ray.cy.js +10770 -0
- package/cypress/e2e/tagSpecific/rectangle.cy.js +2143 -0
- package/cypress/e2e/tagSpecific/ref.cy.js +420 -0
- package/cypress/e2e/tagSpecific/regularPolygon.cy.js +1006 -0
- package/cypress/e2e/tagSpecific/regularPolygon2.cy.js +100 -0
- package/cypress/e2e/tagSpecific/regularPolygon3.cy.js +777 -0
- package/cypress/e2e/tagSpecific/samplerandomnumbers.cy.js +3619 -0
- package/cypress/e2e/tagSpecific/sectioning.cy.js +3530 -0
- package/cypress/e2e/tagSpecific/select.cy.js +5376 -0
- package/cypress/e2e/tagSpecific/selectfromsequence.cy.js +3846 -0
- package/cypress/e2e/tagSpecific/selectrandomnumbers.cy.js +2914 -0
- package/cypress/e2e/tagSpecific/sequence.cy.js +2093 -0
- package/cypress/e2e/tagSpecific/shuffle.cy.js +490 -0
- package/cypress/e2e/tagSpecific/sidebyside.cy.js +8057 -0
- package/cypress/e2e/tagSpecific/singlecharactercomponents.cy.js +72 -0
- package/cypress/e2e/tagSpecific/slider.cy.js +914 -0
- package/cypress/e2e/tagSpecific/solution.cy.js +109 -0
- package/cypress/e2e/tagSpecific/solveequations.cy.js +1026 -0
- package/cypress/e2e/tagSpecific/sort.cy.js +1685 -0
- package/cypress/e2e/tagSpecific/spreadsheet.cy.js +5971 -0
- package/cypress/e2e/tagSpecific/subsetofreals.cy.js +2725 -0
- package/cypress/e2e/tagSpecific/substitute.cy.js +2646 -0
- package/cypress/e2e/tagSpecific/tabular.cy.js +36 -0
- package/cypress/e2e/tagSpecific/text.cy.js +975 -0
- package/cypress/e2e/tagSpecific/textinput.cy.js +2177 -0
- package/cypress/e2e/tagSpecific/textlist.cy.js +369 -0
- package/cypress/e2e/tagSpecific/triangle.cy.js +1936 -0
- package/cypress/e2e/tagSpecific/triggerset.cy.js +2023 -0
- package/cypress/e2e/tagSpecific/updatevalue.cy.js +3288 -0
- package/cypress/e2e/tagSpecific/vector.cy.js +20183 -0
- package/cypress/e2e/tagSpecific/video.cy.js +612 -0
- package/cypress/e2e/tagSpecific/when.cy.js +202 -0
- package/cypress/e2e/variants/specifysinglevariant.cy.js +6726 -0
- package/cypress/e2e/variants/uniquevariants.cy.js +4846 -0
- package/cypress/fixtures/example.json +5 -0
- package/cypress/support/commands.js +32 -0
- package/cypress/support/e2e.js +31 -0
- package/cypress.config.js +18 -0
- package/docs/codeSnippet.jsx +11 -0
- package/docs/index.html +133 -0
- package/docs/index.jsx +138 -0
- package/docs/prism.css +3 -0
- package/index.html +14 -0
- package/index.js +21 -0
- package/media/answer_example.png +0 -0
- package/media/graph_example.png +0 -0
- package/media/graph_markup_example.png +0 -0
- package/package.json +83 -0
- package/public/favicon.ico +0 -0
- package/public/fonts/files/open-sans-v18-latin-700.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-light.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-regular.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
- package/src/Core/ComponentTypes.js +426 -0
- package/src/Core/Core.js +11852 -0
- package/src/Core/CoreWorker.js +127 -0
- package/src/Core/Dependencies.js +8226 -0
- package/src/Core/Numerics.js +473 -0
- package/src/Core/ParameterStack.js +36 -0
- package/src/Core/ReadOnlyProxyHandler.js +41 -0
- package/src/Core/StateProxyHandler.js +88 -0
- package/src/Core/components/Aliases.js +67 -0
- package/src/Core/components/Angle.js +758 -0
- package/src/Core/components/AnimateFromSequence.js +922 -0
- package/src/Core/components/Answer.js +2087 -0
- package/src/Core/components/AsList.js +83 -0
- package/src/Core/components/AttractTo.js +245 -0
- package/src/Core/components/AttractToAngles.js +262 -0
- package/src/Core/components/AttractToConstraint.js +104 -0
- package/src/Core/components/AttractToGrid.js +315 -0
- package/src/Core/components/Award.js +906 -0
- package/src/Core/components/BestFitLine.js +318 -0
- package/src/Core/components/BezierControls.js +719 -0
- package/src/Core/components/BlockQuote.js +35 -0
- package/src/Core/components/Boolean.js +500 -0
- package/src/Core/components/BooleanInput.js +330 -0
- package/src/Core/components/BooleanList.js +396 -0
- package/src/Core/components/BooleanOperators.js +35 -0
- package/src/Core/components/BooleanOperatorsOfMath.js +148 -0
- package/src/Core/components/CallAction.js +261 -0
- package/src/Core/components/Caption.js +73 -0
- package/src/Core/components/Case.js +56 -0
- package/src/Core/components/Cell.js +439 -0
- package/src/Core/components/CellBlock.js +64 -0
- package/src/Core/components/Chart.js +795 -0
- package/src/Core/components/Choice.js +266 -0
- package/src/Core/components/ChoiceInput.js +1407 -0
- package/src/Core/components/Circle.js +2884 -0
- package/src/Core/components/CodeEditor.js +647 -0
- package/src/Core/components/CodeViewer.js +294 -0
- package/src/Core/components/CollaborateGroupSetup.js +46 -0
- package/src/Core/components/CollaborateGroups.js +119 -0
- package/src/Core/components/Collect.js +850 -0
- package/src/Core/components/Column.js +608 -0
- package/src/Core/components/ConditionalContent.js +468 -0
- package/src/Core/components/ConsiderAsResponses.js +49 -0
- package/src/Core/components/ConstrainTo.js +161 -0
- package/src/Core/components/ConstrainToAngles.js +244 -0
- package/src/Core/components/ConstrainToGraph.js +142 -0
- package/src/Core/components/ConstrainToGrid.js +175 -0
- package/src/Core/components/ConstraintUnion.js +119 -0
- package/src/Core/components/Constraints.js +497 -0
- package/src/Core/components/ContentBrowser.js +441 -0
- package/src/Core/components/ContentPicker.js +263 -0
- package/src/Core/components/ControlVectors.js +25 -0
- package/src/Core/components/Coords.js +63 -0
- package/src/Core/components/Copy.js +3412 -0
- package/src/Core/components/Curve.js +4130 -0
- package/src/Core/components/CustomAttribute.js +175 -0
- package/src/Core/components/DataFrame.js +357 -0
- package/src/Core/components/DiscreteSimulationResultList.js +342 -0
- package/src/Core/components/DiscreteSimulationResultPolyline.js +581 -0
- package/src/Core/components/Divisions.js +55 -0
- package/src/Core/components/Document.js +888 -0
- package/src/Core/components/Embed.js +65 -0
- package/src/Core/components/Endpoint.js +62 -0
- package/src/Core/components/Evaluate.js +321 -0
- package/src/Core/components/Extract.js +656 -0
- package/src/Core/components/Extrema.js +556 -0
- package/src/Core/components/Feedback.js +200 -0
- package/src/Core/components/FeedbackDefinitions.js +97 -0
- package/src/Core/components/Figure.js +148 -0
- package/src/Core/components/Footnote.js +73 -0
- package/src/Core/components/Function.js +5344 -0
- package/src/Core/components/FunctionIterates.js +306 -0
- package/src/Core/components/FunctionOperators.js +702 -0
- package/src/Core/components/Graph.js +1679 -0
- package/src/Core/components/Group.js +7 -0
- package/src/Core/components/HasSameFactoring.js +407 -0
- package/src/Core/components/Hint.js +241 -0
- package/src/Core/components/Image.js +524 -0
- package/src/Core/components/Indexing.js +79 -0
- package/src/Core/components/IntComma.js +64 -0
- package/src/Core/components/Integer.js +81 -0
- package/src/Core/components/Intersection.js +328 -0
- package/src/Core/components/Interval.js +29 -0
- package/src/Core/components/Label.js +492 -0
- package/src/Core/components/Latex.js +104 -0
- package/src/Core/components/Legend.js +329 -0
- package/src/Core/components/Line.js +2040 -0
- package/src/Core/components/LineSegment.js +882 -0
- package/src/Core/components/Lists.js +180 -0
- package/src/Core/components/Lorem.js +249 -0
- package/src/Core/components/MMeMen.js +377 -0
- package/src/Core/components/Map.js +873 -0
- package/src/Core/components/Markers.js +101 -0
- package/src/Core/components/MatchesPattern.js +339 -0
- package/src/Core/components/Math.js +2552 -0
- package/src/Core/components/MathInput.js +948 -0
- package/src/Core/components/MathList.js +828 -0
- package/src/Core/components/MathOperators.js +1286 -0
- package/src/Core/components/Matrix.js +497 -0
- package/src/Core/components/MatrixInput.js +3157 -0
- package/src/Core/components/MdMdnMrow.js +394 -0
- package/src/Core/components/Module.js +16 -0
- package/src/Core/components/Number.js +1031 -0
- package/src/Core/components/NumberList.js +550 -0
- package/src/Core/components/Option.js +24 -0
- package/src/Core/components/P.js +71 -0
- package/src/Core/components/Paginator.js +338 -0
- package/src/Core/components/Panel.js +126 -0
- package/src/Core/components/Parabola.js +1561 -0
- package/src/Core/components/ParagraphMarkup.js +59 -0
- package/src/Core/components/Pegboard.js +43 -0
- package/src/Core/components/PeriodicSet.js +291 -0
- package/src/Core/components/PiecewiseFunction.js +832 -0
- package/src/Core/components/Pluralize.js +198 -0
- package/src/Core/components/Point.js +1295 -0
- package/src/Core/components/Polygon.js +408 -0
- package/src/Core/components/Polyline.js +841 -0
- package/src/Core/components/RandomizedTextList.js +225 -0
- package/src/Core/components/Ray.js +1737 -0
- package/src/Core/components/Rectangle.js +1535 -0
- package/src/Core/components/Ref.js +350 -0
- package/src/Core/components/RegionBetweenCurveXAxis.js +124 -0
- package/src/Core/components/RegionHalfPlane.js +107 -0
- package/src/Core/components/RegularPolygon.js +2118 -0
- package/src/Core/components/RenderDoenetML.js +181 -0
- package/src/Core/components/Row.js +780 -0
- package/src/Core/components/SampleRandomNumbers.js +653 -0
- package/src/Core/components/Sectioning.js +303 -0
- package/src/Core/components/Select.js +947 -0
- package/src/Core/components/SelectFromSequence.js +1242 -0
- package/src/Core/components/SelectRandomNumbers.js +225 -0
- package/src/Core/components/Sequence.js +444 -0
- package/src/Core/components/Setup.js +53 -0
- package/src/Core/components/Shuffle.js +470 -0
- package/src/Core/components/SideBySide.js +2130 -0
- package/src/Core/components/SingleCharacterComponents.js +41 -0
- package/src/Core/components/Slider.js +819 -0
- package/src/Core/components/SolutionContainer.js +67 -0
- package/src/Core/components/Solutions.js +334 -0
- package/src/Core/components/SolveEquations.js +568 -0
- package/src/Core/components/Sort.js +398 -0
- package/src/Core/components/Sources.js +108 -0
- package/src/Core/components/Split.js +205 -0
- package/src/Core/components/Spreadsheet.js +1507 -0
- package/src/Core/components/StyleDefinitions.js +111 -0
- package/src/Core/components/SubsetOfReals.js +348 -0
- package/src/Core/components/SubsetOfRealsInput.js +1474 -0
- package/src/Core/components/Substitute.js +496 -0
- package/src/Core/components/SummaryStatistics.js +652 -0
- package/src/Core/components/Table.js +145 -0
- package/src/Core/components/Tabular.js +384 -0
- package/src/Core/components/Template.js +360 -0
- package/src/Core/components/Text.js +341 -0
- package/src/Core/components/TextInput.js +566 -0
- package/src/Core/components/TextList.js +442 -0
- package/src/Core/components/TextListFromString.js +137 -0
- package/src/Core/components/TextOperatorsOfMath.js +21 -0
- package/src/Core/components/Triangle.js +280 -0
- package/src/Core/components/TriggerSet.js +189 -0
- package/src/Core/components/TupleList.js +43 -0
- package/src/Core/components/UpdateValue.js +435 -0
- package/src/Core/components/VariantControl.js +36 -0
- package/src/Core/components/Vector.js +2478 -0
- package/src/Core/components/Verbatim.js +125 -0
- package/src/Core/components/Video.js +673 -0
- package/src/Core/components/When.js +198 -0
- package/src/Core/components/abstract/AngleListComponent.js +140 -0
- package/src/Core/components/abstract/BaseComponent.js +1496 -0
- package/src/Core/components/abstract/BlockComponent.js +5 -0
- package/src/Core/components/abstract/BooleanBaseOperator.js +88 -0
- package/src/Core/components/abstract/BooleanBaseOperatorOfMath.js +100 -0
- package/src/Core/components/abstract/BooleanBaseOperatorOneInput.js +44 -0
- package/src/Core/components/abstract/ComponentSize.js +789 -0
- package/src/Core/components/abstract/ComponentWithSelectableType.js +537 -0
- package/src/Core/components/abstract/CompositeComponent.js +142 -0
- package/src/Core/components/abstract/ConstraintComponent.js +19 -0
- package/src/Core/components/abstract/FunctionBaseOperator.js +680 -0
- package/src/Core/components/abstract/GraphicalComponent.js +56 -0
- package/src/Core/components/abstract/InlineComponent.js +5 -0
- package/src/Core/components/abstract/InlineRenderInlineChildren.js +63 -0
- package/src/Core/components/abstract/Input.js +192 -0
- package/src/Core/components/abstract/IntervalListComponent.js +218 -0
- package/src/Core/components/abstract/LineListComponent.js +114 -0
- package/src/Core/components/abstract/MathBaseOperator.js +631 -0
- package/src/Core/components/abstract/MathBaseOperatorOneInput.js +112 -0
- package/src/Core/components/abstract/PointListComponent.js +238 -0
- package/src/Core/components/abstract/SectioningComponent.js +1262 -0
- package/src/Core/components/abstract/SingleCharacterInline.js +23 -0
- package/src/Core/components/abstract/TextBaseOperatorOfMath.js +47 -0
- package/src/Core/components/abstract/TextOrInline.js +66 -0
- package/src/Core/components/abstract/VariableName.js +31 -0
- package/src/Core/components/abstract/VariableNameList.js +83 -0
- package/src/Core/components/abstract/VectorListComponent.js +235 -0
- package/src/Core/components/chemistry/Atom.js +910 -0
- package/src/Core/components/chemistry/ElectronConfiguration.js +36 -0
- package/src/Core/components/chemistry/Ion.js +684 -0
- package/src/Core/components/chemistry/IonicCompound.js +189 -0
- package/src/Core/components/chemistry/OrbitalDiagram.js +175 -0
- package/src/Core/components/chemistry/OrbitalDiagramInput.js +753 -0
- package/src/Core/components/chemistry/index.js +6 -0
- package/src/Core/components/commonsugar/breakstrings.js +627 -0
- package/src/Core/components/commonsugar/lists.js +177 -0
- package/src/Core/components/dynamicalSystems/CobwebPolyline.js +913 -0
- package/src/Core/components/dynamicalSystems/EquilibriumCurve.js +95 -0
- package/src/Core/components/dynamicalSystems/EquilibriumLine.js +93 -0
- package/src/Core/components/dynamicalSystems/EquilibriumPoint.js +93 -0
- package/src/Core/components/dynamicalSystems/ODESystem.js +943 -0
- package/src/Core/components/dynamicalSystems/index.js +5 -0
- package/src/Core/components/linearAlgebra/EigenDecomposition.js +294 -0
- package/src/Core/utils/array.js +30 -0
- package/src/Core/utils/booleanLogic.js +965 -0
- package/src/Core/utils/checkEquality.js +818 -0
- package/src/Core/utils/cid.js +29 -0
- package/src/Core/utils/componentInfoObjects.js +100 -0
- package/src/Core/utils/constraints.js +23 -0
- package/src/Core/utils/copy.js +572 -0
- package/src/Core/utils/deepFunctions.js +173 -0
- package/src/Core/utils/descendants.js +252 -0
- package/src/Core/utils/enumeration.js +234 -0
- package/src/Core/utils/feedback.js +84 -0
- package/src/Core/utils/function.js +1343 -0
- package/src/Core/utils/graphical.js +196 -0
- package/src/Core/utils/label.js +396 -0
- package/src/Core/utils/math.js +1056 -0
- package/src/Core/utils/naming.js +45 -0
- package/src/Core/utils/periodicSetEquality.js +403 -0
- package/src/Core/utils/randomNumbers.js +70 -0
- package/src/Core/utils/retrieveMedia.js +98 -0
- package/src/Core/utils/retrieveTextFile.js +140 -0
- package/src/Core/utils/returnAllPossibleVariants.js +73 -0
- package/src/Core/utils/rounding.js +316 -0
- package/src/Core/utils/sequence.js +754 -0
- package/src/Core/utils/serializedStateProcessing.js +4049 -0
- package/src/Core/utils/size.js +22 -0
- package/src/Core/utils/stateVariables.js +138 -0
- package/src/Core/utils/style.js +535 -0
- package/src/Core/utils/subset-of-reals.js +796 -0
- package/src/Core/utils/table.js +41 -0
- package/src/Core/utils/text.js +16 -0
- package/src/Core/utils/triggering.js +167 -0
- package/src/Core/utils/variants.js +477 -0
- package/src/DoenetML.css +308 -0
- package/src/DoenetML.jsx +201 -0
- package/src/Parser/doenet.grammar +90 -0
- package/src/Parser/doenet.js +33 -0
- package/src/Parser/doenet.terms.js +20 -0
- package/src/Parser/parser.js +266 -0
- package/src/Parser/tokens.js +129 -0
- package/src/Tools/CodeMirror.jsx +440 -0
- package/src/Tools/DarkmodeController.jsx +21 -0
- package/src/Tools/Footers/MathInputSelector.jsx +34 -0
- package/src/Tools/Footers/VirtualKeyboard.jsx +751 -0
- package/src/Tools/cypressTest/CypressTest.jsx +341 -0
- package/src/Tools/cypressTest/index.html +102 -0
- package/src/Tools/cypressTest/index.jsx +40 -0
- package/src/Viewer/ActivityViewer.jsx +1461 -0
- package/src/Viewer/PageViewer.jsx +1329 -0
- package/src/Viewer/renderers/alert.jsx +17 -0
- package/src/Viewer/renderers/angle.jsx +209 -0
- package/src/Viewer/renderers/answer.jsx +206 -0
- package/src/Viewer/renderers/asList.jsx +25 -0
- package/src/Viewer/renderers/blockQuote.jsx +41 -0
- package/src/Viewer/renderers/boolean.jsx +17 -0
- package/src/Viewer/renderers/booleanInput.css +105 -0
- package/src/Viewer/renderers/booleanInput.jsx +636 -0
- package/src/Viewer/renderers/button.jsx +369 -0
- package/src/Viewer/renderers/c.jsx +17 -0
- package/src/Viewer/renderers/callAction.jsx +18 -0
- package/src/Viewer/renderers/cell.jsx +59 -0
- package/src/Viewer/renderers/chart.jsx +83 -0
- package/src/Viewer/renderers/choiceInput.css +223 -0
- package/src/Viewer/renderers/choiceInput.jsx +535 -0
- package/src/Viewer/renderers/circle.jsx +990 -0
- package/src/Viewer/renderers/cobwebPolyline.jsx +442 -0
- package/src/Viewer/renderers/codeEditor.jsx +248 -0
- package/src/Viewer/renderers/codeViewer.jsx +105 -0
- package/src/Viewer/renderers/containerBlock.jsx +41 -0
- package/src/Viewer/renderers/containerInline.jsx +17 -0
- package/src/Viewer/renderers/contentBrowser.jsx +159 -0
- package/src/Viewer/renderers/contentPicker.jsx +160 -0
- package/src/Viewer/renderers/curve.jsx +1072 -0
- package/src/Viewer/renderers/ellipsis.jsx +17 -0
- package/src/Viewer/renderers/em.jsx +17 -0
- package/src/Viewer/renderers/embed.jsx +110 -0
- package/src/Viewer/renderers/feedback.jsx +74 -0
- package/src/Viewer/renderers/figure.jsx +131 -0
- package/src/Viewer/renderers/footnote.jsx +52 -0
- package/src/Viewer/renderers/graph.jsx +925 -0
- package/src/Viewer/renderers/hint.jsx +142 -0
- package/src/Viewer/renderers/image.jsx +581 -0
- package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs +2 -0
- package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs.map +1 -0
- package/src/Viewer/renderers/label.jsx +470 -0
- package/src/Viewer/renderers/legend.jsx +306 -0
- package/src/Viewer/renderers/line.jsx +511 -0
- package/src/Viewer/renderers/lineSegment.jsx +754 -0
- package/src/Viewer/renderers/list.jsx +111 -0
- package/src/Viewer/renderers/lq.jsx +12 -0
- package/src/Viewer/renderers/lsq.jsx +12 -0
- package/src/Viewer/renderers/math.jsx +582 -0
- package/src/Viewer/renderers/mathInput.css +10 -0
- package/src/Viewer/renderers/mathInput.jsx +425 -0
- package/src/Viewer/renderers/mathInputog.jsx +534 -0
- package/src/Viewer/renderers/mathList.jsx +39 -0
- package/src/Viewer/renderers/matrixInput.jsx +317 -0
- package/src/Viewer/renderers/mdash.jsx +12 -0
- package/src/Viewer/renderers/nbsp.jsx +12 -0
- package/src/Viewer/renderers/ndash.jsx +12 -0
- package/src/Viewer/renderers/number.jsx +454 -0
- package/src/Viewer/renderers/numberList.jsx +35 -0
- package/src/Viewer/renderers/orbitalDiagram.jsx +247 -0
- package/src/Viewer/renderers/orbitalDiagramInput.jsx +450 -0
- package/src/Viewer/renderers/p.jsx +38 -0
- package/src/Viewer/renderers/paginatorControls.jsx +41 -0
- package/src/Viewer/renderers/pegboard.jsx +239 -0
- package/src/Viewer/renderers/point.jsx +649 -0
- package/src/Viewer/renderers/polygon.jsx +612 -0
- package/src/Viewer/renderers/polyline.jsx +608 -0
- package/src/Viewer/renderers/pre.jsx +34 -0
- package/src/Viewer/renderers/q.jsx +17 -0
- package/src/Viewer/renderers/ray.jsx +410 -0
- package/src/Viewer/renderers/ref.jsx +149 -0
- package/src/Viewer/renderers/regionBetweenCurveXAxis.jsx +182 -0
- package/src/Viewer/renderers/renderDoenetML.jsx +56 -0
- package/src/Viewer/renderers/row.jsx +31 -0
- package/src/Viewer/renderers/rq.jsx +12 -0
- package/src/Viewer/renderers/rsq.jsx +12 -0
- package/src/Viewer/renderers/section.jsx +427 -0
- package/src/Viewer/renderers/sideBySide.jsx +80 -0
- package/src/Viewer/renderers/slider.jsx +800 -0
- package/src/Viewer/renderers/solution.jsx +134 -0
- package/src/Viewer/renderers/spreadsheet.jsx +83 -0
- package/src/Viewer/renderers/sq.jsx +17 -0
- package/src/Viewer/renderers/styles/global.css +14 -0
- package/src/Viewer/renderers/subsetOfRealsInput.jsx +392 -0
- package/src/Viewer/renderers/summaryStatistics.jsx +83 -0
- package/src/Viewer/renderers/table.jsx +78 -0
- package/src/Viewer/renderers/tabular.jsx +58 -0
- package/src/Viewer/renderers/tag.jsx +26 -0
- package/src/Viewer/renderers/text.jsx +439 -0
- package/src/Viewer/renderers/textInput.jsx +774 -0
- package/src/Viewer/renderers/textList.jsx +30 -0
- package/src/Viewer/renderers/triggerSet.jsx +52 -0
- package/src/Viewer/renderers/updateValue.jsx +30 -0
- package/src/Viewer/renderers/utils/css.js +13 -0
- package/src/Viewer/renderers/utils/graph.js +159 -0
- package/src/Viewer/renderers/utils/offGraphIndicators.js +91 -0
- package/src/Viewer/renderers/vector.jsx +678 -0
- package/src/Viewer/renderers/video.jsx +494 -0
- package/src/Viewer/useDoenetRenderer.jsx +128 -0
- package/src/main.jsx +16 -0
- package/src/media/fonts/files/open-sans-v18-latin-700.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-regular.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
- package/src/test/testCode.doenet +26 -0
- package/src/test/testViewer.jsx +158 -0
- package/src/uiComponents/ActionButton.jsx +157 -0
- package/src/uiComponents/ActionButtonGroup.jsx +93 -0
- package/src/uiComponents/Button.jsx +160 -0
- package/src/uiComponents/ButtonGroup.jsx +56 -0
- package/src/uiComponents/ToggleButton.jsx +194 -0
- package/src/uiComponents/ToggleButtonGroup.jsx +77 -0
- package/src/utils/activityUtils.js +713 -0
- package/src/utils/array.js +17 -0
- package/src/utils/cid.js +34 -0
- package/src/utils/componentInfoObjects.js +89 -0
- package/src/utils/deepFunctions.js +165 -0
- package/src/utils/enumeration.js +226 -0
- package/src/utils/math.js +624 -0
- package/src/utils/naming.js +44 -0
- package/src/utils/retrieveTextFile.js +156 -0
- package/src/utils/returnAllPossibleVariants.js +81 -0
- package/src/utils/sequence.js +715 -0
- package/src/utils/serialize.js +29 -0
- package/src/utils/serializedStateProcessing.js +2587 -0
- package/src/utils/subset-of-reals.js +783 -0
- package/src/utils/url.js +19 -0
- package/vite.config.js +14 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/*
|
|
2
|
+
This file contains code modified from JSXGraph, which is copyright 2008-2018
|
|
3
|
+
Matthias Ehmann,
|
|
4
|
+
Michael Gerhaeuser,
|
|
5
|
+
Carsten Miller,
|
|
6
|
+
Bianca Valentin,
|
|
7
|
+
Alfred Wassermann,
|
|
8
|
+
Peter Wilfahrt
|
|
9
|
+
|
|
10
|
+
Redistributed and modified under the terms of the
|
|
11
|
+
|
|
12
|
+
* GNU Lesser General Public License as published by
|
|
13
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
14
|
+
(at your option) any later version
|
|
15
|
+
OR
|
|
16
|
+
* MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export default class Numerics {
|
|
21
|
+
constructor({
|
|
22
|
+
maxIterationsRoot = 80,
|
|
23
|
+
maxIterationsMinimize = 500,
|
|
24
|
+
eps = 0.000001,
|
|
25
|
+
} = {}) {
|
|
26
|
+
this.maxIterationsRoot = maxIterationsRoot;
|
|
27
|
+
this.maxIterationsMinimize = maxIterationsMinimize;
|
|
28
|
+
this.eps = eps;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* Find zero of an univariate function f.
|
|
34
|
+
* @param {function} f Function, whose root is to be found
|
|
35
|
+
* @param {Array,Number} x0 Start value or start interval enclosing the root
|
|
36
|
+
* @param {Object} object Parent object in case f is method of it
|
|
37
|
+
* @returns {Number} the approximation of the root
|
|
38
|
+
* Algorithm:
|
|
39
|
+
* G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
|
|
40
|
+
* computations. M., Mir, 1980, p.180 of the Russian edition
|
|
41
|
+
*
|
|
42
|
+
* If x0 is an array containing lower and upper bound for the zero
|
|
43
|
+
* algorithm 748 is applied. Otherwise, if x0 is a number,
|
|
44
|
+
* the algorithm tries to bracket a zero of f starting from x0.
|
|
45
|
+
* If this fails, we fall back to Newton's method.
|
|
46
|
+
*/
|
|
47
|
+
fzero(f, x0, object) {
|
|
48
|
+
var a,
|
|
49
|
+
b,
|
|
50
|
+
c,
|
|
51
|
+
fa,
|
|
52
|
+
fb,
|
|
53
|
+
fc,
|
|
54
|
+
aa,
|
|
55
|
+
blist,
|
|
56
|
+
i,
|
|
57
|
+
len,
|
|
58
|
+
u,
|
|
59
|
+
fu,
|
|
60
|
+
prev_step,
|
|
61
|
+
t1,
|
|
62
|
+
cb,
|
|
63
|
+
t2,
|
|
64
|
+
// Actual tolerance
|
|
65
|
+
tol_act,
|
|
66
|
+
// Interpolation step is calculated in the form p/q; division
|
|
67
|
+
// operations is delayed until the last moment
|
|
68
|
+
p,
|
|
69
|
+
q,
|
|
70
|
+
// Step at this iteration
|
|
71
|
+
new_step,
|
|
72
|
+
eps = this.eps,
|
|
73
|
+
maxiter = this.maxIterationsRoot,
|
|
74
|
+
niter = 0,
|
|
75
|
+
nfev = 0;
|
|
76
|
+
|
|
77
|
+
if (Array.isArray(x0)) {
|
|
78
|
+
if (x0.length < 2) {
|
|
79
|
+
throw new Error("fzero: length of array x0 has to be at least two.");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
a = x0[0];
|
|
83
|
+
fa = f.call(object, a);
|
|
84
|
+
nfev += 1;
|
|
85
|
+
b = x0[1];
|
|
86
|
+
fb = f.call(object, b);
|
|
87
|
+
nfev += 1;
|
|
88
|
+
} else {
|
|
89
|
+
a = x0;
|
|
90
|
+
fa = f.call(object, a);
|
|
91
|
+
nfev += 1;
|
|
92
|
+
|
|
93
|
+
// Try to get b.
|
|
94
|
+
if (a === 0) {
|
|
95
|
+
aa = 1;
|
|
96
|
+
} else {
|
|
97
|
+
aa = a;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
blist = [
|
|
101
|
+
0.9 * aa,
|
|
102
|
+
1.1 * aa,
|
|
103
|
+
aa - 1,
|
|
104
|
+
aa + 1,
|
|
105
|
+
0.5 * aa,
|
|
106
|
+
1.5 * aa,
|
|
107
|
+
-aa,
|
|
108
|
+
2 * aa,
|
|
109
|
+
-10 * aa,
|
|
110
|
+
10 * aa,
|
|
111
|
+
];
|
|
112
|
+
len = blist.length;
|
|
113
|
+
|
|
114
|
+
for (i = 0; i < len; i++) {
|
|
115
|
+
b = blist[i];
|
|
116
|
+
fb = f.call(object, b);
|
|
117
|
+
nfev += 1;
|
|
118
|
+
|
|
119
|
+
if (fa * fb <= 0) {
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (b < a) {
|
|
124
|
+
u = a;
|
|
125
|
+
a = b;
|
|
126
|
+
b = u;
|
|
127
|
+
|
|
128
|
+
fu = fa;
|
|
129
|
+
fa = fb;
|
|
130
|
+
fb = fu;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (fa * fb > 0) {
|
|
135
|
+
// Bracketing not successful, fall back to Newton's method or to fminbr
|
|
136
|
+
if (Array.isArray(x0)) {
|
|
137
|
+
return this.fminbr(f, [a, b], object).x;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return this.Newton(f, a, object);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// OK, we have enclosed a zero of f.
|
|
144
|
+
// Now we can start Brent's method
|
|
145
|
+
|
|
146
|
+
c = a;
|
|
147
|
+
fc = fa;
|
|
148
|
+
|
|
149
|
+
// Main iteration loop
|
|
150
|
+
while (niter < maxiter) {
|
|
151
|
+
// Distance from the last but one to the last approximation
|
|
152
|
+
prev_step = b - a;
|
|
153
|
+
|
|
154
|
+
// Swap data for b to be the best approximation
|
|
155
|
+
if (Math.abs(fc) < Math.abs(fb)) {
|
|
156
|
+
a = b;
|
|
157
|
+
b = c;
|
|
158
|
+
c = a;
|
|
159
|
+
|
|
160
|
+
fa = fb;
|
|
161
|
+
fb = fc;
|
|
162
|
+
fc = fa;
|
|
163
|
+
}
|
|
164
|
+
tol_act = 0.5 * eps * (Math.abs(b) + 1);
|
|
165
|
+
new_step = (c - b) * 0.5;
|
|
166
|
+
|
|
167
|
+
if (Math.abs(new_step) <= tol_act && Math.abs(fb) <= eps) {
|
|
168
|
+
// Acceptable approx. is found
|
|
169
|
+
return b;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Decide if the interpolation can be tried
|
|
173
|
+
// If prev_step was large enough and was in true direction Interpolatiom may be tried
|
|
174
|
+
if (Math.abs(prev_step) >= tol_act && Math.abs(fa) > Math.abs(fb)) {
|
|
175
|
+
cb = c - b;
|
|
176
|
+
|
|
177
|
+
// If we have only two distinct points linear interpolation can only be applied
|
|
178
|
+
if (a === c) {
|
|
179
|
+
t1 = fb / fa;
|
|
180
|
+
p = cb * t1;
|
|
181
|
+
q = 1.0 - t1;
|
|
182
|
+
// Quadric inverse interpolation
|
|
183
|
+
} else {
|
|
184
|
+
q = fa / fc;
|
|
185
|
+
t1 = fb / fc;
|
|
186
|
+
t2 = fb / fa;
|
|
187
|
+
|
|
188
|
+
p = t2 * (cb * q * (q - t1) - (b - a) * (t1 - 1.0));
|
|
189
|
+
q = (q - 1.0) * (t1 - 1.0) * (t2 - 1.0);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// p was calculated with the opposite sign; make p positive
|
|
193
|
+
if (p > 0) {
|
|
194
|
+
q = -q;
|
|
195
|
+
// and assign possible minus to q
|
|
196
|
+
} else {
|
|
197
|
+
p = -p;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// If b+p/q falls in [b,c] and isn't too large it is accepted
|
|
201
|
+
// If p/q is too large then the bissection procedure can reduce [b,c] range to more extent
|
|
202
|
+
if (
|
|
203
|
+
p < 0.75 * cb * q - Math.abs(tol_act * q) * 0.5 &&
|
|
204
|
+
p < Math.abs(prev_step * q * 0.5)
|
|
205
|
+
) {
|
|
206
|
+
new_step = p / q;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Adjust the step to be not less than tolerance
|
|
211
|
+
if (Math.abs(new_step) < tol_act) {
|
|
212
|
+
if (new_step > 0) {
|
|
213
|
+
new_step = tol_act;
|
|
214
|
+
} else {
|
|
215
|
+
new_step = -tol_act;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Save the previous approx.
|
|
220
|
+
a = b;
|
|
221
|
+
fa = fb;
|
|
222
|
+
b += new_step;
|
|
223
|
+
fb = f.call(object, b);
|
|
224
|
+
// Do step to a new approxim.
|
|
225
|
+
nfev += 1;
|
|
226
|
+
|
|
227
|
+
// Adjust c for it to have a sign opposite to that of b
|
|
228
|
+
if ((fb > 0 && fc > 0) || (fb < 0 && fc < 0)) {
|
|
229
|
+
c = a;
|
|
230
|
+
fc = fa;
|
|
231
|
+
}
|
|
232
|
+
niter++;
|
|
233
|
+
} // End while
|
|
234
|
+
|
|
235
|
+
return b;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
*
|
|
240
|
+
* Find minimum of an univariate function f.
|
|
241
|
+
* <p>
|
|
242
|
+
* Algorithm:
|
|
243
|
+
* G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
|
|
244
|
+
* computations. M., Mir, 1980, p.180 of the Russian edition
|
|
245
|
+
*
|
|
246
|
+
* @param {function} f Function, whose minimum is to be found
|
|
247
|
+
* @param {Array} x0 Start interval enclosing the minimum
|
|
248
|
+
* @param {Object} context Parent object in case f is method of it
|
|
249
|
+
*
|
|
250
|
+
* Return object with attributes:
|
|
251
|
+
* - success: true if reached minimum before max number of iterations
|
|
252
|
+
* - x: the approximation of the minimum value position
|
|
253
|
+
* - fx: the value of f at x
|
|
254
|
+
* - tol: the tolerance used in computing the minimum
|
|
255
|
+
**/
|
|
256
|
+
|
|
257
|
+
fminbr(f, x0, context, eps_override) {
|
|
258
|
+
let eps = eps_override !== undefined ? eps_override : this.eps;
|
|
259
|
+
var a,
|
|
260
|
+
b,
|
|
261
|
+
x,
|
|
262
|
+
v,
|
|
263
|
+
w,
|
|
264
|
+
fx,
|
|
265
|
+
fv,
|
|
266
|
+
fw,
|
|
267
|
+
range,
|
|
268
|
+
middle_range,
|
|
269
|
+
tol_act,
|
|
270
|
+
new_step,
|
|
271
|
+
p,
|
|
272
|
+
q,
|
|
273
|
+
t,
|
|
274
|
+
ft,
|
|
275
|
+
// Golden section ratio
|
|
276
|
+
r = (3.0 - Math.sqrt(5.0)) * 0.5,
|
|
277
|
+
tol = eps,
|
|
278
|
+
sqrteps = eps, //Math.sqrt(Mat.eps),
|
|
279
|
+
maxiter = this.maxIterationsMinimize,
|
|
280
|
+
niter = 0,
|
|
281
|
+
nfev = 0;
|
|
282
|
+
|
|
283
|
+
if (!Array.isArray(x0) || x0.length < 2) {
|
|
284
|
+
throw new Error(
|
|
285
|
+
"Numerics.fminbr: length of array x0 has to be at least two.",
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
a = x0[0];
|
|
290
|
+
b = x0[1];
|
|
291
|
+
v = a + r * (b - a);
|
|
292
|
+
fv = f.call(context, v);
|
|
293
|
+
if (Number.isNaN(fv)) {
|
|
294
|
+
return { success: false };
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// First step - always gold section
|
|
298
|
+
nfev += 1;
|
|
299
|
+
x = v;
|
|
300
|
+
w = v;
|
|
301
|
+
fx = fv;
|
|
302
|
+
fw = fv;
|
|
303
|
+
|
|
304
|
+
while (niter < maxiter) {
|
|
305
|
+
// Range over the interval in which we are looking for the minimum
|
|
306
|
+
range = b - a;
|
|
307
|
+
middle_range = (a + b) * 0.5;
|
|
308
|
+
|
|
309
|
+
// Actual tolerance
|
|
310
|
+
tol_act = sqrteps * Math.abs(x) + tol / 3.0;
|
|
311
|
+
|
|
312
|
+
if (Math.abs(x - middle_range) + range * 0.5 <= 2.0 * tol_act) {
|
|
313
|
+
// Acceptable approx. is found
|
|
314
|
+
return { success: true, x: x, fx: fx, tol: tol_act };
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Obtain the golden section step
|
|
318
|
+
new_step = r * (x < middle_range ? b - x : a - x);
|
|
319
|
+
|
|
320
|
+
// Decide if the interpolation can be tried. If x and w are distinct interpolatiom may be tried
|
|
321
|
+
if (Math.abs(x - w) >= tol_act) {
|
|
322
|
+
// Interpolation step is calculated as p/q;
|
|
323
|
+
// division operation is delayed until last moment
|
|
324
|
+
t = (x - w) * (fx - fv);
|
|
325
|
+
q = (x - v) * (fx - fw);
|
|
326
|
+
p = (x - v) * q - (x - w) * t;
|
|
327
|
+
q = 2 * (q - t);
|
|
328
|
+
|
|
329
|
+
if (q > 0) {
|
|
330
|
+
// q was calculated with the op-
|
|
331
|
+
p = -p; // posite sign; make q positive
|
|
332
|
+
} else {
|
|
333
|
+
// and assign possible minus to
|
|
334
|
+
q = -q; // p
|
|
335
|
+
}
|
|
336
|
+
if (
|
|
337
|
+
Math.abs(p) < Math.abs(new_step * q) && // If x+p/q falls in [a,b]
|
|
338
|
+
p > q * (a - x + 2 * tol_act) && // not too close to a and
|
|
339
|
+
p < q * (b - x - 2 * tol_act)
|
|
340
|
+
) {
|
|
341
|
+
// b, and isn't too large
|
|
342
|
+
new_step = p / q; // it is accepted
|
|
343
|
+
}
|
|
344
|
+
// If p/q is too large then the
|
|
345
|
+
// golden section procedure can
|
|
346
|
+
// reduce [a,b] range to more
|
|
347
|
+
// extent
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Adjust the step to be not less than tolerance
|
|
351
|
+
if (Math.abs(new_step) < tol_act) {
|
|
352
|
+
if (new_step > 0) {
|
|
353
|
+
new_step = tol_act;
|
|
354
|
+
} else {
|
|
355
|
+
new_step = -tol_act;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Obtain the next approximation to min
|
|
360
|
+
// and reduce the enveloping range
|
|
361
|
+
|
|
362
|
+
// Tentative point for the min
|
|
363
|
+
t = x + new_step;
|
|
364
|
+
ft = f.call(context, t);
|
|
365
|
+
if (Number.isNaN(ft)) {
|
|
366
|
+
return { success: false };
|
|
367
|
+
}
|
|
368
|
+
nfev += 1;
|
|
369
|
+
|
|
370
|
+
// t is a better approximation
|
|
371
|
+
if (ft <= fx) {
|
|
372
|
+
// Reduce the range so that t would fall within it
|
|
373
|
+
if (t < x) {
|
|
374
|
+
b = x;
|
|
375
|
+
} else {
|
|
376
|
+
a = x;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Assign the best approx to x
|
|
380
|
+
v = w;
|
|
381
|
+
w = x;
|
|
382
|
+
x = t;
|
|
383
|
+
|
|
384
|
+
fv = fw;
|
|
385
|
+
fw = fx;
|
|
386
|
+
fx = ft;
|
|
387
|
+
// x remains the better approx
|
|
388
|
+
} else {
|
|
389
|
+
// Reduce the range enclosing x
|
|
390
|
+
if (t < x) {
|
|
391
|
+
a = t;
|
|
392
|
+
} else {
|
|
393
|
+
b = t;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (ft <= fw || w === x) {
|
|
397
|
+
v = w;
|
|
398
|
+
w = t;
|
|
399
|
+
fv = fw;
|
|
400
|
+
fw = ft;
|
|
401
|
+
} else if (ft <= fv || v === x || v === w) {
|
|
402
|
+
v = t;
|
|
403
|
+
fv = ft;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
niter += 1;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return { success: false, x: x, fx: fx };
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Newton's method to find roots of a funtion in one variable.
|
|
414
|
+
* @param {function} f We search for a solution of f(x)=0.
|
|
415
|
+
* @param {Number} x initial guess for the root, i.e. start value.
|
|
416
|
+
* @param {Object} context optional object that is treated as "this" in the function body. This is useful if
|
|
417
|
+
* the function is a method of an object and contains a reference to its parent object via "this".
|
|
418
|
+
* @returns {Number} A root of the function f.
|
|
419
|
+
*/
|
|
420
|
+
Newton(f, x, context) {
|
|
421
|
+
var df,
|
|
422
|
+
i = 0,
|
|
423
|
+
h = this.eps,
|
|
424
|
+
newf = f.apply(context, [x]),
|
|
425
|
+
nfev = 1;
|
|
426
|
+
|
|
427
|
+
// For compatibility
|
|
428
|
+
if (Array.isArray(x)) {
|
|
429
|
+
x = x[0];
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
while (i < 50 && Math.abs(newf) > h) {
|
|
433
|
+
df = this.D(f, context)(x);
|
|
434
|
+
nfev += 2;
|
|
435
|
+
|
|
436
|
+
if (Math.abs(df) > h) {
|
|
437
|
+
x -= newf / df;
|
|
438
|
+
} else {
|
|
439
|
+
x += Math.random() * 0.2 - 1.0;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
newf = f.apply(context, [x]);
|
|
443
|
+
nfev += 1;
|
|
444
|
+
i += 1;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return x;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Numerical (symmetric) approximation of derivative.
|
|
452
|
+
* @param {function} f Function in one variable to be differentiated.
|
|
453
|
+
* @param {object} [obj] Optional object that is treated as "this" in the function body. This is useful, if the function is a
|
|
454
|
+
* method of an object and contains a reference to its parent object via "this".
|
|
455
|
+
* @returns {function} Derivative function of a given function f.
|
|
456
|
+
*/
|
|
457
|
+
D(f, obj) {
|
|
458
|
+
if (!(obj === undefined || obj === null)) {
|
|
459
|
+
return function (x) {
|
|
460
|
+
var h = 0.00001,
|
|
461
|
+
h2 = h * 2.0;
|
|
462
|
+
return (f(x + h) - f(x - h)) / h2;
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
return function (x) {
|
|
467
|
+
var h = 0.00001,
|
|
468
|
+
h2 = h * 2.0;
|
|
469
|
+
|
|
470
|
+
return (f.apply(obj, [x + h]) - f.apply(obj, [x - h])) / h2;
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default class ParameterStack {
|
|
2
|
+
constructor(initialParameters) {
|
|
3
|
+
this.stack = [{}];
|
|
4
|
+
if (initialParameters !== undefined) {
|
|
5
|
+
Object.assign(this.parameters, initialParameters);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
get parameters() {
|
|
10
|
+
return this.stack[this.stack.length - 1];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
push(additionalParameters, mergePrevious = true) {
|
|
14
|
+
let newParameters = {};
|
|
15
|
+
if (mergePrevious) {
|
|
16
|
+
Object.assign(newParameters, this.parameters);
|
|
17
|
+
if (additionalParameters !== undefined) {
|
|
18
|
+
Object.assign(newParameters, additionalParameters);
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
newParameters = additionalParameters;
|
|
22
|
+
}
|
|
23
|
+
this.stack.push(newParameters);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
pop() {
|
|
27
|
+
let lastParams = this.stack.pop();
|
|
28
|
+
|
|
29
|
+
// don't fail if pop off too much
|
|
30
|
+
// just create an empty object
|
|
31
|
+
if (this.stack.length === 0) {
|
|
32
|
+
this.stack = [{}];
|
|
33
|
+
}
|
|
34
|
+
return lastParams;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const readOnlyProxyHandler = {
|
|
2
|
+
get: function (obj, prop) {
|
|
3
|
+
if (prop === "__isReadOnlyProxy") {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
if (prop === "then" && obj instanceof Promise) {
|
|
7
|
+
// If we are wrapping the read-only proxy around the "then" of a promise,
|
|
8
|
+
// we want to swap the order of the promise and the read-only proxy
|
|
9
|
+
// so that we have a promise of a proxy rather than vice-versa.
|
|
10
|
+
|
|
11
|
+
// We return a function that will be used instead of the "then"
|
|
12
|
+
// that first applies the read-only proxy
|
|
13
|
+
return (f) =>
|
|
14
|
+
obj.then.bind(obj)((x) =>
|
|
15
|
+
f(
|
|
16
|
+
x !== null && typeof x === "object"
|
|
17
|
+
? new Proxy(x, readOnlyProxyHandler)
|
|
18
|
+
: x,
|
|
19
|
+
),
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
let result = obj[prop];
|
|
23
|
+
if (
|
|
24
|
+
result !== null &&
|
|
25
|
+
typeof result === "object" &&
|
|
26
|
+
result.__isReadOnlyProxy !== true
|
|
27
|
+
) {
|
|
28
|
+
return new Proxy(result, readOnlyProxyHandler);
|
|
29
|
+
} else {
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
set: function (obj, prop, value) {
|
|
34
|
+
throw Error("Property " + prop + " is read-only");
|
|
35
|
+
},
|
|
36
|
+
deleteProperty: function (obj, prop) {
|
|
37
|
+
throw Error("Property " + prop + " is read-only");
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default readOnlyProxyHandler;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import readOnlyProxyHandler from "./ReadOnlyProxyHandler";
|
|
2
|
+
|
|
3
|
+
export default function createStateProxyHandler() {
|
|
4
|
+
return {
|
|
5
|
+
get: function (obj, prop) {
|
|
6
|
+
let result = obj[prop];
|
|
7
|
+
if (result !== undefined) {
|
|
8
|
+
if (result.isArray && (result.public || result.trackChanges)) {
|
|
9
|
+
result = new Proxy(
|
|
10
|
+
result.value,
|
|
11
|
+
createArrayProxyHandler({
|
|
12
|
+
variable: prop,
|
|
13
|
+
numDimensions: result.numDimensions,
|
|
14
|
+
}),
|
|
15
|
+
);
|
|
16
|
+
} else {
|
|
17
|
+
result = result.value;
|
|
18
|
+
// if (result !== null && typeof result === 'object' && result.__isReadOnlyProxy !== true) {
|
|
19
|
+
// result = new Proxy(result, readOnlyProxyHandler);
|
|
20
|
+
// }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
},
|
|
25
|
+
set: function (obj, prop, value) {
|
|
26
|
+
throw Error("Property " + prop + " is read-only");
|
|
27
|
+
},
|
|
28
|
+
deleteProperty: function (obj, prop) {
|
|
29
|
+
throw Error("Property " + prop + " is read-only");
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function createArrayProxyHandler({
|
|
35
|
+
variable,
|
|
36
|
+
numDimensions,
|
|
37
|
+
indicesSoFar = [],
|
|
38
|
+
}) {
|
|
39
|
+
return {
|
|
40
|
+
variable: variable,
|
|
41
|
+
numDimensions: numDimensions,
|
|
42
|
+
indicesSoFar: indicesSoFar,
|
|
43
|
+
get: function (obj, index) {
|
|
44
|
+
if (index === "then" && obj instanceof Promise) {
|
|
45
|
+
// If we are wrapping the array proxy around the "then" of a promise,
|
|
46
|
+
// we want to swap the order of the promise and the array proxy
|
|
47
|
+
// so that we have a promise of a proxy rather than vice-versa.
|
|
48
|
+
|
|
49
|
+
// We return a function that will be used instead of the "then"
|
|
50
|
+
// that first applies the array proxy
|
|
51
|
+
return (f) =>
|
|
52
|
+
obj.then.bind(obj)((x) =>
|
|
53
|
+
f(
|
|
54
|
+
x !== null && typeof x === "object"
|
|
55
|
+
? new Proxy(
|
|
56
|
+
x,
|
|
57
|
+
createArrayProxyHandler({
|
|
58
|
+
variable: this.variable,
|
|
59
|
+
numDimensions: this.numDimensions,
|
|
60
|
+
indicesSoFar: this.indicesSoFar,
|
|
61
|
+
}),
|
|
62
|
+
)
|
|
63
|
+
: x,
|
|
64
|
+
),
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
let result = obj[index];
|
|
69
|
+
if (result !== null && typeof result === "object" && numDimensions > 1) {
|
|
70
|
+
result = new Proxy(
|
|
71
|
+
result,
|
|
72
|
+
createArrayProxyHandler({
|
|
73
|
+
variable: this.variable,
|
|
74
|
+
numDimensions: this.numDimensions - 1,
|
|
75
|
+
indicesSoFar: [...this.indicesSoFar, index],
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
},
|
|
81
|
+
set: function (obj, prop, value) {
|
|
82
|
+
throw Error("Property " + prop + " is read-only");
|
|
83
|
+
},
|
|
84
|
+
deleteProperty: function (obj, prop) {
|
|
85
|
+
throw Error("Property " + prop + " is read-only");
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import TextComponent from "./Text";
|
|
2
|
+
import TextOrInline from "./abstract/TextOrInline";
|
|
3
|
+
import Template from "./Template";
|
|
4
|
+
import MathComponent from "./Math";
|
|
5
|
+
import Label from "./Label";
|
|
6
|
+
import MathList from "./MathList";
|
|
7
|
+
import { Div } from "./Divisions";
|
|
8
|
+
|
|
9
|
+
export class Columns extends TextComponent {
|
|
10
|
+
static componentType = "columns";
|
|
11
|
+
static rendererType = "text";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class Title extends TextOrInline {
|
|
15
|
+
static componentType = "title";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class RightHandSide extends MathComponent {
|
|
19
|
+
static componentType = "rightHandSide";
|
|
20
|
+
static rendererType = "math";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class Description extends TextOrInline {
|
|
24
|
+
static componentType = "description";
|
|
25
|
+
static rendererType = undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class Else extends Template {
|
|
29
|
+
static componentType = "else";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class Xlabel extends Label {
|
|
33
|
+
static componentType = "xlabel";
|
|
34
|
+
static rendererType = "label";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class Ylabel extends Label {
|
|
38
|
+
static componentType = "ylabel";
|
|
39
|
+
static rendererType = "label";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export class MatrixRow extends MathList {
|
|
43
|
+
static componentType = "matrixRow";
|
|
44
|
+
static rendererType = "mathList";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export class MatrixColumn extends MathList {
|
|
48
|
+
static componentType = "matrixColumn";
|
|
49
|
+
static rendererType = "mathList";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export class Statement extends Div {
|
|
53
|
+
static componentType = "statement";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export class Introduction extends Div {
|
|
57
|
+
static componentType = "introduction";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export class Conclusion extends Div {
|
|
61
|
+
static componentType = "conclusion";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export class Topic extends TextComponent {
|
|
65
|
+
static componentType = "topic";
|
|
66
|
+
static rendererType = "text";
|
|
67
|
+
}
|