578 Commits

Author SHA1 Message Date
Glen Whitney
cbcc425c58
feat(FunctionNode): allow function parameters to be called (#2443)
* feat(FunctionNode): allow function parameters to be called

  This change is implemented by checking if a function symbol is in
  the arg list, and if so delaying its analysis until evaluation time,
  at which point it is extracted from the arguments and called as
  appropriate depending on its rawArgs property.

  Also adds a few tests, documents the new facility, and documents the
  handling of free variables in a function definition, which was previously
  left undescribed.

  Resolves #2441.
  Resolves #2442.

* chore: correct lint violations (sorry)

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2022-03-01 14:21:13 +01:00
Glen Whitney
7dcdad04fc
feat(simplify): Provide context option to control simplifications allowed (#2399)
* feat(simplify): Allow context option

  If the options argument has a key 'context', it value is interpreted
  as a context specifying various (non-default) properties of operators.
  This context is propagated to all rules and all matching.

  Adds some initial tests that the context option affects the behavior
  of simplify appropriately. Not all can be activated until in a future
  commit we add the ability for the application of a rule to be contingent
  on aspects of the context.

  Note that the enhanced rule matching necessary to support rules
  constrained by non-default operator properties led to a couple of
  changes to the output of rationalize() as well. Since the new output
  seemed to better match what a person would typical write for the
  rationalized form, this commit changed the test rather than attempted
  to preserve the exact prior order of terms.

* feat(simplifyCore): strip all parentheses

  Prior to this commit, simplifyCore stripped internal parentheses, but
  would leave top-level ones. But top-level parentheses don't carry any
  semantics, and no tests other than the ones that explicitly checked for
  the retention of top-level parentheses were affected by this change.
  Not making a special case for the top level also notably streamlined the
  code in simplifyCore.

  Adds tests for the new parenthesis-stripping behavior, as well as for
  other node types that were added earlier but which did not yet have
  simplifyCore tests.

* refactor(simplifyCore): Strip any node marked as trivial in context

  This replaces special-case tests for unary + and parentheses, and
  paves the way for example for 'abs' being marked trivial in a
  putative positiveContext

* refactor(simplify): Rename 'context' parameter to rules and document it.

  The new name is 'imposeContext' -- the motivation for the change is to
  distinguish the parameter for 'assuming', which will be added as a new
  parameter to control rule application based on context.

* feat(simplify): Allow context-based conditions on rule application.

  Adds a new property of rules specified as objects: `assuming`. Its
  value should be a context, and every property specified in that context
  must match the incoming context, or else the rule will not be applied.
  Updates the constant floating rules to require their operators be commutative,
  as a test of the feature, and adds a unit test for this.

* feat(simplify): annotate rules with underlying assumptions

  Also activates a number of tests of simplifications that should
  or should not occur in various contexts.

  To get all tests to pass, I could no longer find a rule ordering
  that worked in all cases, without the ability to mark an individual
  rule as applying repeatedly until just that rule stabilized. So this
  commit also adds that ability, and uses it to eliminate the tricky rule
  of expanding n1 + (n2 + n3)*(-1) to n1 + n2*(-1) + n3*(-1) late in the
  rule ordering, in favor of the more intuitive (complete) expansion of
  (n1 + n2)*(-1) to n1*(-1) + n2*(-1) early in the rule ordering, before
  constant folding and gathering of like terms.

* feat(simplify): Add contexts for specific domains

  In particular, adds a `simplify.realContext` and a `simplify.positiveContext`
  which (attempt to) guarantee that no simplifications that change the value
  of the expression, on any real number or any positive real number,
  respectively, will occur.

  Adds multiple tests for these contexts, including verification that the
  simplification in either context does not change some example values of
  any of the expressions in any simplify test.

  This testing uncovered that it is unaryPlus that must be marked as trivial
  for simplifyCore to work properly, so that marking is added as well.

* chore: Alter value consistency tests for browsers/older Node

  The problem was NaN != NaN in some JavaScripts but not others,
  so test for "both values NaN" explicitly before using deepEqual.

* fix: Implement requested changes from review

  Added documentation about scope and context in top-level algebra functions
  page; made variable name less abbreviated; performed suggested refactoring.

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2022-02-16 11:06:13 +01:00
David
bfd91422b0
Changed "square" to "curly" (#2373)
It says:
An object is enclosed by **square** brackets `{`, `}`,
But they are not square`[`,`]`, they are **curly** `{`, `}`.
The proposal is:
An object is enclosed by curly brackets `{`, `}`,
2022-01-05 08:38:20 +01:00
Raku Zeta
677be84b8a
Update constants.md (#2371)
Enclose math expressions in ticks to prevent the `*` symbol from being treated as Markdown.
2021-12-29 09:38:57 +01:00
Ramesh Vijayaraghavan
c7f4c53483
Support for Percentage Operation (#2304)
* Support for Percentage Operation

* Fixed Style issue

* Added Test case to check for modulo followed by pi

* Support for % addition and % subtraction

* Fixed Documentation comment

* Support - Should not calculate mod for negative divisor

* Updated Docs

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2021-09-22 11:45:37 +02:00
CRIMX
fe7d8a7100
docs(expressions): fix incorrect example link (#2273) 2021-07-07 08:28:01 +02:00
Jos de Jong
8b3e0e1067 Fix #2255: document the implicit property of OperatorNode 2021-06-23 10:02:33 +02:00
jhugman
e80995d52d
Add support for scopes with get and set methods (#2166)
* Add support for scopes with get and set methods

* Fix build for node v12

* Fixup cli and parser tests

* Add tests for simplify and evaluate

* Add example for a custom scope object

* Function calls need child scopes

* Transitionary step: Separate Safe and Scope Property calls

* Renamed identifiers in FunctionNode

* Evaluate with ObjectScopeWrapper

* Simplify tests passing

* Assume all scopes are map-like. Except parser

* Remove isMapLike check in customs.*SafeProperty() methods

* Change MapLike to Map

* Move keywords from an Object to a Set

* Move ScopeProperty functions in to scope.js

* Removed deprecation warning

* Rename scope.js to map.js

* Rename ScopeProperty to MapProperty

* Add tests and docs for map.js

* Put back the micro-optimization of function calls

* Use Map in the parser

* Called scope methods directly in cli.js

* Coercing of scope into a Map is done in Node, not evaluate

* Move createSubScope to its own file

* Fixup following self-review

* Add scope docs

* Final self-review changes

* Address reviewer comments

* Remove MapProperty witness marks

* Converted broken benchmark possibly lost in a rebase

* Use bare map as scope in benchmark

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2021-05-16 13:33:01 +02:00
Jos de Jong
06052ecc86 Fix #2142: clarify the meaning of matrix dimensions in the docs 2021-04-05 14:44:50 +02:00
Colin Holzman
90e15c6d95
Support for parsing non decimal numbers with radix point (#2122)
* Basic untested support for parsing non decimal numbers with radix point.

* Added some documentation for function parseNonDecimalWithRadix.

* Renamed variable in BigNumber constructor.

Not related to current feature branch but is a good change.

* Improved some variable and function names in number.js and fixed an error when parsing octal numbers with radix point.

* Added some tests and fixed linter issues.

* Added some documentation on new syntax.

* Added more tests.

* Added more tests for edge cases.
2021-03-10 09:01:08 +01:00
Colin Holzman
d12f3a5fac
Word size suffix and BigNumber support for bin oct hex literals (#1996)
* added support for word size suffix in getToken

* start modifying number(string) to support word size suffix for signed integers

* word size suffixes for Number

* initial support for BigNumber

* fix linter issues

* remove unused variable

* start extending bitwise operators for Number for values greater than 32 bits

* Revert "start extending bitwise operators for Number for values greater than 32 bits"

This reverts commit 6fac1a7b10665a221ab5de521c08fa9fcf959eb1.

* add a test for 53 bit literal

* added an optional second argument to bin, oct, and hex to allow formatting signed numbers with custom word size

* removed size checks

* Attempted to extend bin, oct, hex format functions to work with BigNumber, but not working fully.

Apparently Decimal.js toString method doesn't take a base parameter like js number does. I guess I have to do the formatting myself.

* Added n2base function to do formatting for BigNumber.

* Added check for zero in n2base.

* Removed old failing tests.

* Added some tests (failing).

* Extended 'format' function with 'base' and 'wordSize' options and changed 'bin', 'oct', and 'hex' to use 'format' function.

* Fixed lint issues.

* Fixed issues related to the merge.

* Corrected a test.

* Fixed bignumber formatter.

* Added tests for math.format with 'base' and 'wordSize' options.

* Fixed lint issue.

* Changed 'base' option to 'bin', 'oct', and 'hex' values for 'notation' option of 'format' function.

* Added word size suffix to the output of format, bin, oct, and hex.

* Updated documentation.
2021-01-06 09:46:58 +01:00
Jos de Jong
af6e93ba04 Fix documentation of serialization 2020-12-16 10:25:16 +01:00
rnd-debug
a34ebc2478
Providing overridable Unit.isValidAlpha (#2000)
* first commit

* providing some tests

* some docs
2020-10-28 11:50:45 +01:00
Colin Holzman
f5d843bbc6
Binary, octal, and hexadecimal literals and formatting (#1968)
* allow binary, octal, and hex literals as in JS (0b, 0o, 0x)

* add tests

* fix lint issues

* add notation for binary, octal, and hex in formatNumber

* remove the extra format notations

* add bin, oct, and hex functions for formatting

* move bin, oct, and hex from base.js to their own files, fixed built test error about documentation

* parse and format treat values as 32 bit signed 2s complement integers

* add section in syntax documentation

* typo

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2020-09-26 17:45:10 +02:00
Jos de Jong
9e462268e5 Fix #1940: error in the documentation about resizing matrices 2020-08-10 21:49:40 +02:00
josdejong
e9cf247c7d Fix #1902: typo in an example in the documentation 2020-07-03 08:29:15 +02:00
josdejong
ca6aa45a88 Fix typo 2020-06-28 22:14:44 +02:00
josdejong
2df28bb609 Fix #1899: documentation on expression trees still using old namespace
`math.expression.node.*` instead of `math.*`
2020-06-28 22:14:27 +02:00
josdejong
28b7a02f01 Fix #1834: value Infinity cannot be serialized and deserialized 2020-05-03 15:41:03 +02:00
jos
3153de27ee Clarify the documentation on scope when using rawArgs, see #1055 2020-04-04 17:24:36 +02:00
Eric Mansfield
97ff95b32c Added baseName option to createUnit (#1708)
* Fixed unit base recognition and formatting for user-defined units

* Added baseName option to createUnit

* Trailing spaces

* Fixed line in docs
2020-01-08 10:23:23 +01:00
Tanmay
4c5aa0d23e toHTML() method example corrected. (#1627) 2019-09-21 14:56:10 +02:00
jos
718b93b2b4 Create unit aliases bit and byte 2019-08-28 15:41:39 +02:00
jos
294515f600 Publish v6.0.4 2019-08-05 21:28:48 +02:00
0xflotus
71a02f3164 fixed vulnerabilities (#1583) 2019-07-31 19:27:02 +02:00
jos
b390a23f4b Fix function reference not published in npm library 2019-06-09 20:44:16 +02:00
jos
bb14f62dd9 Describe mathjs/number in getting started 2019-06-05 09:43:36 +02:00
jos
ec44199dc0 Ignore generated docs in repo, cleanup generated docs before generation 2019-05-22 14:25:42 +02:00
jos
29866f3437 Remove generated docs from repo 2019-05-22 14:21:58 +02:00
jos
a602a38340 Updated docs for v6 2019-05-20 21:42:49 +02:00
jos
ab1b83a2f6 Remove generated files from repo, make tests independent from generated files 2019-05-12 15:14:13 +02:00
jos
217c2dcf57 Merge v5 branch in develop 2019-05-08 22:17:05 +02:00
jos
df4b334be7 Updated decimal.js. Remove node 6 and add node 12 to travis. Publish v5.10.0 2019-05-08 21:51:51 +02:00
jos
b4f2eb005e Merge remote-tracking branch 'origin/fix/1428' into develop
# Conflicts:
#	HISTORY.md
#	src/function/algebra/simplify.js
2019-05-04 10:07:39 +02:00
jos
850886f361 Fix occurrences of CommonCS exports 2019-04-13 17:07:21 +02:00
jos
6081360d6a Merged develop into modular_architecture 2019-04-13 16:51:51 +02:00
jos
e6c5df5af5 Fix merge conflicts in row+column PR 2019-03-21 21:51:05 +01:00
jos
d2a99f9bec Publish v5.8.0 2019-03-20 15:36:59 +01:00
bnlcas
0db42306ec Extend std var for variable dimensions request 999 (#1444)
* initial implementation of multidimensional std and var

* consolidated std function into var, cleaned up the interface for var, fixed bias correction

* added documentation of variable axis for std and var

* updated documentation for std and var

* changed the order of normalization and dimension for a three parameter input in the functions

* updated documentation for var and std

* add transform expressions for std and var with variable axis

* added test coverage for std and var with a variable axis

* update to documentation

* change n dim std to use apply function

* fixed tests, removed unnecessary code, updated docs

* fixed typo in docs

* update docs to remove a type

* changed location of apply function

* updated tests to use deepStrictEqual to pass linter

* adding test coverage for var.transform and std.transform
2019-03-20 15:21:55 +01:00
SzechuanSage
f7364372fb Merge branch 'develop' of https://github.com/SzechuanSage/mathjs into develop 2019-03-08 23:56:31 +10:00
SzechuanSage
4677bfdd8c Add row and column to functions reference doc 2019-03-08 23:37:20 +10:00
SzechuanSage
b4e309073f Add reference docs for functions row and column 2019-03-08 22:28:27 +10:00
jos
5c263d3dff Fixed #1428: transform iterating over replaced nodes 2019-03-05 21:10:59 +01:00
jos
70cbc3ec30 Replace http urls with https where supported 2019-02-27 13:08:42 +01:00
jos
6c700d12a2 Publish v5.5.0 2019-02-20 17:10:03 +01:00
jos
c0486162dd Update latest docs for hasNumericValue and update package-lock.json 2019-02-09 22:13:23 +01:00
jos
83df09800b Merge branch 'develop' into modular_architecture_merge
# Conflicts:
#	HISTORY.md
#	gulpfile.js
#	package-lock.json
#	package.json
#	src/core/function/typed.js
#	src/expression/transform/index.js
#	src/function/statistics/sum.js
#	src/function/utils/index.js
#	src/type/unit/Unit.js
#	src/version.js
#	test/expression/node/FunctionNode.test.js
#	test/type/unit/function/createUnit.test.js
#	test/utils/bignumber/formatter.test.js
#	test/utils/number.test.js
2019-02-09 21:26:25 +01:00
jos
99da53da0e Flatten everything in a mathjs instance to make it consistent with the ES6 exports. Create deprecation warnings for the old classes and functions 2019-02-07 21:24:51 +01:00
jos
9402f0ee94 Moved class math.expression.Parser to math.type.Parser 2019-02-03 20:45:04 +01:00
jos
25be459ed3 Merge math.expression.parse into math.parse 2019-02-03 20:30:43 +01:00