mathjslab
Version:
MathJSLab - An interpreter with language syntax like MATLAB®/Octave, ISBN 978-65-00-82338-7.
703 lines (594 loc) • 35.1 kB
Markdown
# Release notes
All notable changes to this project will be documented in this file. This
project adheres to [Semantic Versioning](http://semver.org/).
## 1.9.1
- The function `Complex.atan2` was created.
- We have begun implementing the `eig` function. Several functions have been
created in the `BLAS` and `LAPACK` classes, which have not yet been fully
tested. Unused functions have been grouped into the `BLASunused.ts` and
`LAPACKunused.ts` files. For now, the `eig` function only returns correct
values for symmetric real matrices. The functions `det`, `mtimes`, `inv`, and
`lu` were implemented based on the functions defined in `BLAS` and `LAPACK`.
- The `ldivFactory` function was created in the `ComplexInterface.ts` file to
support left division operations. The wrapper function
`MathOperation.mldivide` was created, which implements the `\` operator in
the MATLAB/Octave language. This function uses the dispatcher
`LAPACK.mldivide`.
- The `LAPACK.spec.ts` file was enhanced with approximately 170 tests of the
`BLAS` and `LAPACK` functions, becoming the development basis for the
functions and testing the contracts between them.
- The functions `cross`, `kron`, `dot` and `diag` have been implemented.
- The `ElementType` type and the `MultiArray` class were typed with the
`ELEMENT` parameter.
- The `Evaluator` class has been modified in several ways:
- The `EvaluatorInterface` was created, which the `Evaluator` class
implements.
- The `Evaluator.Unparse` function has been adjusted to work similarly to
the `Evaluator.UnparseMathML` function, removing unnecessary parentheses.
The `unparseFactory` function in the `ComplexInterface.ts` file has also
been modified to work similarly to `unparseMathMLFactory`. The dynamic
`unparse` method has been removed from classes that represent literals,
such as `CharString`, `ComplexNumber`, `ComplexDecimal`,
`FunctionHandle`, `MultiArray`, and `Structure`. In these classes, the
dynamic `toString` method has been created, replacing the old `unparse`
method.
- Properties have been protected by making them private and accessible via
setters and getters. These have been given the name of the property, and
the property name has been prefixed with an underscore (`_`).
- The `response` property has been made static.
- The `undefinedReferenceTable` property has been created, and the
`nameTable` table (now called `_nameTable`) has been modified to contain
the undefined value in each entry when evaluating it before storing it in
the table.
- The `Execute` method was created, which simply executes the `Parse` and
`Evaluate` methods on an input string, returning the computed result.
- Bug fix: During assignments, the `Evaluator` function executed the
right-hand side of the assignment twice. This was corrected by
eliminating unnecessary calls to the `Evaluator` function.
- Bug fix: The parser failed with malformed matrices, with extra spaces
between the sign and the number of the imaginary part when there was a
real part, for example, the syntax `A = [2+ 3i 4-5i]` produced the error:
"SyntaxError: no viable alternative at input '[2+ ' (1:7)". This was
corrected in the `SPACE_OR_CONTINUATION` rule in the `MathJSLabLexer.g4`
file.
- The dynamic method `unparse` from classes that represent literals, such as
`CharString`, `ComplexNumber`, `ComplexDecimal`, `FunctionHandle`,
`MultiArray`, and `Structure` has been removed. The `toString` method was
created in its place for debugging purposes.
- The `build.config.json` file was modified to configure the bundle
`"web.es2022"` as the development version. Therefore, the production build
compiles all 6 bundles, and the development build compiles only the
`"web.es2022"` version. The `webpack.config.ts` file was not modified. The
production build takes approximately 55 to 65 seconds, and the development
build takes approximately 10 seconds.
- Bug fix: Matrix multiplication was not throwing an error when the operands
had incompatible dimensions. The `LinearAlgebra.mul` function had been
removed, and `BLAS.gemm` was being used directly in `MathOperation.mtimes`.
`LinearAlgebra.mul` was responsible for the dimension check, and even then it
was still producing an error. It was restored, corrected, and recoded using
`BLAS.gemm`.
- Dependencies updated.
## 1.9.0
- The `dot` and `cross` functions (`LinearAlgebra.dot`) have been implemented.
- The `Evaluator.throwErrorIfGreaterThanReturnList` and
`Evaluator.reduceIfReturnList` methods have been moved to the `AST` class.
The `reduceIfReturnList` method has been made static. The
`CoreFUnctions.throwInvalidCallError` has been moved to the `AST` class too.
- The factory function `MultiArray.reduceFactory` was created to generate the
functions that use `MultiArray.reduce` and are defined in the `CoreFunctions`
class: `all`, `any`, `sum`, `prod`, `sumsq`, `max`, `min`, `mean`, `cumsum`,
`cumprod`, `cummin`, and `cummax`. The function `var`
(`CoreFunctions.variance`) was created using `MultiArray.reduce` directly,
and the function `std` was created using `CoreFunctions.variance`.
- The properties `LinearAlgebra.blockThreshold` (= 1e5 by default) and
`LinearAlgebra.blockSize` (= 64 by default) were created to configure the
parameters of the block multiplication algorithm for matrices, which was
implemented (`BLAS.gemm`). The auxiliary function `BLAS.gemm_kernel` was
created, which multiplies two sub-blocks, accumulating them into a third. The
function `LinearAlgebra.set` was created to configure these parameters. The
`Configuration.ts` file was updated with these parameters to be configured by
the user using the `configure` function.
- Bug fix: The `MultiArray.elementWiseOperation` static method has been fixed
and optimized. The `MultiArray.computeStrides` method has been created.
- Bug fix: The `CoreFunctions.reshape` has been fixed. The function had a bug
that produced incorrect results and threw an error when the second parameter
was passed as an array.
- Bug fix: There was a condition test in the `LinearAlgebra.inv` that was
flawed, producing incorrect results. The function has been enhanced to make
use of `LinearAlgebra.luDecomposition`.
- Bug fix: functions that return multiple assignments had a limitation; they
returned values based on the `selector` function of `NodeReturnList` nodes.
This caused some functions to be executed repeatedly for each assignment. The
`handler` field was created in `NodeReturnList`, and the logic for executing
commands with multiple assignments is now evaluated using these two
functions: `handler` executes the code that should be executed once, based on
the length of the assignment list, and `selector` receives the result of
`handler` and the index of the assignment list, returning the corresponding
value.
- All static methods in `MultiArray` have been converted to arrow functions.
- All static methods in `CoreFunctions` have been converted to arrow functions.
- We began developing the QR factorization algorithm and then created the
`BLAS` (`BLAS.ts` file) and `LAPACK` (`LAPACK.ts`) classes with several
functions analogous to the original implementation of these libraries.
Various modifications using these new definitions of static methods in these
classes were made to the `LinearAlgebra` functions. The `README.md` file has
been updated to provide information about the architecture adopted in the
design.
- All dependencies have been updated.
## 1.8.2
- Bug fix: the `lib/src/` directory was not being published. The
`"prebuild:package"` `package.json` script has been removed.
## 1.8.1
- Modifications in `.prettierignore` file.
- The package `turndown` has been installed as development dependency. It's
used to convert antlr HTML license to Markdown format.
- The following modifications were made due to comply the package build to be
checked by a CircleCI pipeline:
- More streamlined script definitions in the `package.json` file (removing
pre and post definitions where possible).
- The `.circleci/config.yml` file was created to configure a CircleCI
pipeline.
- The `src/MathJSLabLexer.ts` and `src/MathJSLabParser.ts` entries of
`.gitignore` file has been removed.
- The `script/build-resources.ts` file has been renamed to
`script/get-antlr.ts` and modifications have been made so the script
accepts command line parameters (the output directory).
- The `"files"` field was created in the `package.json` file to select only
the files that should be saved to the npm registry.
- The `npx sort-package-json` command was executed to sort the fields in
the `package.json` file.
- The CircleCI status badge has been included in the `README.md` file.
- Due to GitHub's rate limit issues, the organization repository's direct raw
file download system was replaced with a system that clones the entire
repository, then copies individual files to the current project and removes
the cloned repositories directory. The files
`script/helper/copy-repo-files.ts` and `copy.repo.config.json` were created
and moved to the organization repository.
- The MathJSLab logo in the .md files has been modified to use logo image in
the website (mathjslab-www repository).
## 1.8.0
- The second release of 2025 (`reia`) has been launch.
- Changes in `README.md` file (grammatical corrections in paragraph on line
43).
- The `mathjslab.bib` file has been improved with the inclusion of repository
and project page URLs.
- The complex type was restructured to support number types other than
`Decimal`. The `ComplexNumber` class was created, analogous to the
ComplexDecimal class. The complex type contract was created in the
`src/ComplexInterface.ts` file, defining the complex type generically. We
adopted the Facade architecture: The `src/Complex.ts` file was created with
the corresponding class. The static methods in the `ComplexDecimal` class
were converted to arrow functions. This is the facade design: the static
methods and properties are in the `Complex` class, which uses the methods and
properties of `ComplexDecimal` or `ComplexNumber`. The type is defined by
`ComplexType` in the `Complex.ts` file. Most of the methods and properties in
`ComplexDecimal` and `ComplexNumber` are defined through factory functions
defined in the `ComplexInterface.ts` file. Some extensions to the `Decimal`
object and the native `Math` object have been created for use by factories.
Local methods have been removed from `Evaluator` with the class directly
referencing the base class's methods and properties. Modifications were made
to the `Evaluator` class so that after changing the engine (`ComplexDecimal`
or `ComplexNumber`) with the `configure` function, when executing the `clear`
command, the `Evaluator` properties are reloaded with the appropriate values
for the selected engine. Thus, modifying some of the configuration parameters
with `configure` (the `'real'` parameter in this case) must be followed by
the `clear` command.
- In all object classes and in the `Complex` facade, the `isInstanceOf` method
was defined, returning `true` if the argument is an instance of the class. In
the `Complex` class, the `isInstanceOf` method returns `true` if the argument
is `ComplexNumber` or `ComplexDecimal`. Thus, the operator type tests in the
methods of the `MathOperation` abstract class were changed to use the
classes' `isInstanceOf` methods. To generate an array of strings with the
keys of the `Complex` facade class, the build script `script/build-key.ts`
and the helper `script/helper/buildInterfaceKeyTable.ts` were created. The
build script generates the file `src/ComplexInterfaceStaticKeyTable.ts`. The
helper `script/helper/buildInterfaceKeyTable.ts` was transferred to the
organization's repository and can be downloaded from the organization's
repository (https://github.com/MathJSLab).
- The `AST.ts` file has been enhanced to meet ESM module standards. Functions
that create Abstract Syntax Tree nodes have been grouped into the `AST`
class, and type definitions are exported with `export type`. The `omitOut`
property of `NodeBase` has been renamed to `OmitOutput`. The `omitAns`
property defined on some nodes has been renamed to `omitAnswer` and defined
on `NodeBase`. The node types that, by definition, should not write the `ans`
variable have been specified in the `omitAnswerTable` array.
- All static methods in the abstract class `MathOperation` have been converted
to arrow functions and the class typing has been improved.
- The `src/lib-node.ts` and `src/lib-node.es2015.ts` files were created to
selectively include packages in the Node.js environment (only
`import 'node:crypto'` for now, to support the `decimal.js` package - used in
the `Decimal.random` method according to the configuration options). The
`webpack.config.ts` file was improved, with more granular build configuration
in the `build.config.json` file (to resolve errors related to the output
generated by the Webpack bundle analyzer). The `BuildConfigSet` and
`BuildConfig` types were defined in the `webpack.config.ts` file.
- The `madge` package has been installed as development dependency to test
circular imports. The `"test:circular"` script has been created in the
`package.json` file.
- All static methods in the `CharString` and `FunctionHandle` classes have been
converted to arrow functions.
- The `eslint.config.cjs` configuration file has been improved, grouping
definitions in a more streamlined manner. The package's TypeScript source
code definitions now comply with modern ESM definitions.
- A setting for formatting `.md` files has been added to the `.prettierrc`
file.
- The `shx` package was installed as a development dependency. The `rimraf`
package has been removed from development dependencies. The scripts in the
`package.json` file have been changed to use `shx rm -rf` instead of
`rimraf`.
## 1.7.3
- The following dependencies has been removed: `@types/debug`,
`@types/supertest` and `source-map-support`. The
`@types/eslint-config-prettier` package has been installed as development
dependency.
- The following scripts in the `package.json`file has been renamed:
- `"download-resources"` to `"download"`.
- `"clean:download-resources"` to `"clean:download"`.
- All dependencies have been updated.
- The MathJSLab logo have been updated.
- Added `mathjslab.bib` file with bibtex entry to cite the software properly.
- The generation of es2020 targets has been changed to generate es2022 targets.
- The `string.at` method in the `src/MathJSLabParser.g4` (line 134) has been
- changed to indexing due to target incompatibility (es2015).
## 1.7.2
- The `"type": "module"` field has been added to the `package.json` file and
the `"main"`, `"module"`, `"exports"` and `"browser"` fields in the
`package.json` file have been changed to follow modern standards and avoid
unwanted fallback to the UMD bundle.
- All dependencies have been updated.
## 1.7.1
- More rational definitions in `webpack.config.ts`.
- The `cross-env` package has been instaled as development dependency and some
scripts in the `package.json` file has been made platform-independent.
- All references to `global` have been changed to `globalThis`.
- Dependencies updated.
- The `ajv` package was installed as a development dependency. It was needed
after the last dependency update. An error was occurring during the Webpack
build, which was resolved after installing `ajv`. The reason for this error
may be related to running Webpack using `tsx`.
- The `fence` and `stretchy` properties has been set to `true` on all `<mo>`
elements referring to delimiters in MathML unparse functions.
- The definition of namespace in `ComplexDecimal.ts` file has been removed.
- The inline exports of types and objects in multiple files have been moved to
the end of the files. This way they comply with the modern way of defining
modules. It's a new code convention (decribed in `CONTRIBUTING.md` file).
- A more detailed description of the demo web application's features has been
included in the documentation (`README.md` file).
- A badge pointing to the [OpenAIRE](https://explore.openaire.eu/) search for
MathJSLab has been added to the `README.md` file.
- An operator precedence table has been added to the `Evaluator` class and the
`unparserMathML` method has been modified to not represent unnecessary
parentheses in the result. The `Evaluator.nodePrecedence` method was also
created, which, by consulting the precedence table, returns the precedence of
the AST node.
- The file `MathML.ts` was created containing some types and an abstract class
with a static property (`format`) that defines functions to help unparse in
MathML language. The comments in this file contain relevant MathML language
references that were used to code this module.
## 1.7.0
- All dependencies have been updated.
- The `README.md` file has been updated with trademark notice.
## 1.7.0-b1
- The reason for publishing this beta version is to test access via CDNs before
publishing the final version, so that we can describe the use of CDNs in the
`README.md` file.
- All dependencies have been updated.
- 'globalThis' has been configured as a global object to make the package work
in any JavaScript environment, as per
[#2](https://github.com/MathJSLab/mathjslab/issues/2) and
[#3](https://github.com/MathJSLab/mathjslab/pull/3). Now the project Webpack
configuration generates 6 different bundles:
1. web.umd2015
2. node.cjs2015
3. web.umd2020
4. node.cjs2020
5. web.esm2020
6. node.esm2020
Additionally, type generation is now done by `tsc` in an initial build step,
separate from the build of bundles. The bundles targeting "ES2015" imports
'globalthis/polyfill' (imported by file 'src/lib.es2015.ts') for compatibility
('globalthis' package added as regular dependency). The fields "main", "module"
and "exports" of `package.json` file has been set to support different targets.
The `license-webpack-plugin` is used to generate the license of each bundle
accurately. The generation of .d.ts files is now done in a separate step by
tsc, before the Webpack build. Some `tsconfig` files were created, extending
the `tsconfig.build.json` file, for building the various bundles and type
definitions.
- The `build.config.json` file was created, which is imported by
`webpack.config.json` to customize some Webpack build configurations.
- The `test` directory was created, with bundle integration tests, in addition
to other tests. The Jest configuration (`jest.config.js`) has been updated:
there are 7 test projects, one is a unitary test and the others are resulting
bundles tests. Scripts to run tests has been created in `package.json` file.
The tests have not yet been fully implemented. In fact, the test coverage is
small, and what has been done is only the structure of the tests, the
creation of the `.spec.*` files, the configuration of Jest, etc.
- The `script/build-resources.ts` has been updated to download the ANTLR
license. It's not available at `node_modules`, then the
`license-webpack-plugin` can't insert license text in the outputh directory
`./lib/`. The ANTLR license is downloaded from GitHub repository and inserted
as licenseTextOverrides plugin parameter.
- The `git-commit.cjs` script was created to commit with the user's message. If
no message is entered, after the timeout (5s) a default message with the date
is used. The file was also created in the
[MathJSLab organization repository](https://github.com/MathJSLab) to be
available on other projects as well.
## 1.6.2
- All dependencies have been updated.
- The MathJSLab logo has been modified. It is built on the MathJSLab
organization repository, and the 'mathjslab' package downloads the
logo-related files (and other common files too) from the organization
repository using the `download-files.cjs` script, which also provides a means
to clean up the downloaded files. The download of these files is triggered by
the script in the `package.json` file called "download-resources".
- The ESLint configuration file (`eslint.config.js`) has been revised.
- An example on CodePen was added (on README.md).
## 1.6.1
- All dependencies have been updated.
- Optimizations in the file 'mathjslab-logo.svg'
- Changes in the 'webpack.config.ts': `path.resolve` changed to `path.join`
when possible. More rational path specifications. JavaScript files selection
removed from regular expression test (`configuration.module.rules[0].test`
and `configuration.module.rules[0].exclude`). JavaScript files selection
removed from regular expressions in the file 'jest.config.js' too.
- The demo Web application of MathJSLab package has been renamed to
'mathjslab-demo', with its repository also being renamed. All references to
its name and repository have been updated.
- Added information to the 'README.md' file stating that the MathJSLab package
documentation is in three languages, in the demo web application repository.
## 1.6.0
- Change repository owner to MathJSLab GitHub organization:
https://github.com/MathJSLab . Changes in repository references in
'package.json' file and documentation.
## 1.5.13
- Changes in 'README.md' file (CDN instructions and links, badges, build
instructions, ISBN link, etc.).
- Changes to build scripts ('script' directory): some console messages issued
using `console.warn` and `console.error` instead of `console.log`.
- The structure of the build files in the 'package.json' file has been modified
(cleanup scripts).
## 1.5.12
- Some changes in 'README.md' file (links to mathjslab.com).
- Exclude eslint and jest config from build ('tsconfig.build.json' file).
- Improvements to the 'webpack.config.ts' file to setup
`configuration.mode = argv.mode`. Webpack configuration was hardcoded as a
factory.
- The 'eslint.config.js' file has been changed to include more granular rules
for the 'script' directory and configuration files.
## 1.5.11
- Domain setup (mathjslab.com). Set as "homepage" in 'package.json' file. Some
changes in 'README.md' file.
## 1.5.10
- The 'node-html-parser', 'tsconfig-paths' and 'tsx' packages have been
installed as development dependencies. The 'ts-node' package was kept because
of the 'webpack.config.ts' file. Webpack uses 'ts-node' when the
configuration file is coded in TypeScript. All dependencies have been
updated.
- The 'jest.config.js' file has been created and the jest configurations in the
'package.json' file have been moved to it.
- The "keywords" field in 'package.json' file was modified.
- The 'script' directory with build scripts has been created. It contains the
'helper' directory with useful functions for the build scripts.
- The 'eslint.config.js' file has been changed to include more flexible rules
for the 'script' directory.
- The 'clean-package-lock.cjs' script has been created. It removes the
'package-lock.json' file and the 'node_modules' directory.
- The 'build-resources.ts' script has been created. It downloads the latest
version of ANTLR into the resources directory for use by the project.
- The identifier property of the base classes (the first property of the class
of type `public static readonly`, followed by the class name in uppercase)
was set in each file by the literal numeric value in the files
'FunctionHandle.ts', 'CharString.ts' and 'Structure.ts'. This was necessary
to fix errors occurring in jest tests.
## 1.5.9
- Prettier settings in 'eslint.config.js'.
- File '.npmrc' created. Configuration legacy-peer-deps set to true.
- Target modified to es2015.
- Badge 'GitHub Created At' added to 'README.md'.
## 1.5.8
- Badge changes in 'README.md' file. Using badges from https://shields.io/ .
- Dependecies update.
- Bug fix in functions 'asin', 'acsc', 'asec' and 'acot'.
- Configurations in '.eslintrc.js' (removed) modified to flat config in
'eslint.config.js'.
## 1.5.7
- MathJSLab logo in README.md file.
- User function 'isstruc'.
## 1.5.6
- Optimizations in `CoreFunctions.throwInvalidCallError` (`test`parameter) and
all `CoreFunctions` methods that use it.
- More strong type definitions in 'CoreFunctions.ts' file.
- User functions 'isscalar', 'ismatrix', 'isvector', 'iscell', 'isrow' and
'iscolumn'.
## 1.5.5
- Sizes and Zenodo badges in 'README.md'.
- User function 'squeeze'.
## 1.5.4
- Bug fix in `MultiArray.evaluate` (array of cells be evaluated in the same way
as common array now solved).
## 1.5.3
- Bug fix in `MultiArray.evaluate` (evaluating null array throws error now
solved).
## 1.5.2
- Bug fix in `MultiArray.evaluate`. Before the method was page-oriented. Now is
full dimensional using recursion and concatenation.
- Exports `ElementType` from 'MultiArray.ts' in 'lib.ts'.
- User functions 'repmat', 'colon', 'linspace', 'logspace', 'meshgrid' and
'ndgrid'.
- Optimizations in `MultiArray.reshape`.
## 1.5.1
- Bug fix in `Evaluator` ('IDX' node processing).
## 1.5.0
- The file 'FunctionHandle.ts' and its corresponding test file has been
created. The `FunctionHandle` type has been created and made a member of
`AST.NodeExpr` through `ElementType`. `Evaluator.nameTable` entries has been
modified to `AST.NodeExpr`. Changes in `Evaluator.Evaluator`, removing
function definition, and altering processing of node types 'IDENT' and 'IDX'
to use function handles. Now the function definitions and use is the same
like in MATLAB®/Octave.
## 1.4.2
- Bug fix in indexing by colon (:).
- Bug fix in functions 'ones' and 'zeros' (`CoreFunctions.newFilled`).
## 1.4.1
- More strong type definitions in 'AST.ts' and 'MathJSLabParser.g4' files.
- Number input as binary, octal and hexadecimal implemented in REAL_NUMBER rule
of lexer.
- Optimizations in 'ComplexDecimal.ts' (use of isZero() method).
- Bug fix in `Evaluator` (indexing with 'end' and literal indexing).
- `clear` word list command defined inside body of `Evaluator` class.
- 'constantsTable.ts' file and `Evaluator.readonlyNameTable` has been removed.
Improvements in clear command.
- 'Structure.ts' file with `Structure` class definition and its respective test
file has been created. Some indirect reference implemented in lexer, parser
and evaluator.
- Bug fix in expansion with indexing from scalar.
- Bug fix in test files (references to `Evaluator.initialize` modified to
`new Evaluator`).
- Bug fix in functions 'rand' and 'randi' (`CoreFunctions.newFilledEach`).
- Optimizations in `Evaluator.validateAssignment` (remove `left` field in
return value).
- Create `ComplexDecimal.random` using `Decimal.random` so configuration
'crypt' takes effect.
- Optimizations in `ComplexDecimal.set`.
- Changes in `Evaluator.baseFunctionTable` and function calling:
- mapper field is now not optional.
- `Evaluator.localTable` variable creation using
`globalThis.crypto.randomUUID`.
- Function parameters selectively evaluated if ev.length > 0.
## 1.4.0
- Bug fix in parser (pre-increment and element-by-element operations).
- Rules to functions definition and handlers in parser and AST implemented.
Evaluation not yet implemented.
- The string 'arguments' to define arguments block in functions is defined as
keyword in lexer.
- 'Parser.ts' file removed and Parser implemented as a method of `Evaluator`.
The method `Evaluator.initialize` has been removed and initialization actions
moved to `Evaluator` constructor. Now the `Evaluator` class can be
instantiated more than one time.
## 1.3.4
- More strong type definitions in 'MultiArray.ts', 'Evaluator.ts' and
'MathOperation.ts' files.
- Global variable EvaluatorPointer removed. Evaluator instance reference passed
in method parameters.
## 1.3.3
- File 'MathObject.ts' and (their respective class and test file) renamed to
MathOperation.ts.
- CharString conversion to MultiArray implemented as previous to any operation
in MathOperation.ts.
## 1.3.2
- Tests for types implemented as `instanceof` in 'MathObject.ts' and
'Evaluator.ts'. Method 'isThis' removed from classes.
- Some bug fix in evaluator (not operation).
## 1.3.1
- Improvements and some bug fixes in lexer and parser. Support for cell arrays
in parser and MultiArray class. Error messages in existing functions and cell
array functions no yet implemented.
- Start and stop positions (line and column) of statements in global scope
stored in AST nodes.
- Some improvements in CharString class, removing 'removeQuotes' method an
creating 'quote' property to store type of quote (single or double).
## 1.3.0
- Parser implemented using ANTLR in files 'MathJSLabLexer.g4' and
'MathJSLabParser.g4'. The wrapper class for lexer and parser has been created
in file Parser.ts. Need to make extensive tests.
- File names converted to camel case.
- The file AST.ts (Abstract Syntax Tree) has been created, and related types
and interfaces defined in Evaluator.ts has been moved to AST.ts file.
## 1.2.5
- Optimizations (resulting return as number) in multi-array.ts file and code
cleaning by hand in file 'parser.jison'.
## 1.2.4
- The file 'symbol-table.ts' and 'symbol-table.spec.ts' has been created.
- Changes in the lexer to support comment blocks spaces and line breaks to
separate elements within arrays. Context variables created (previous_token
and matrix_context).
## 1.2.3
- The file 'configuration.ts' and 'configuration.spec.ts' has been created. Two
user functions (configure and getconfig) was created to manage internal
configurations of MathJSLab. Most of the settings refer to Decimal.js
settings related to the accuracy of the results.
- Namespaces wrapping external definitions in 'evaluator.ts' and
'complex-decimal.ts' files.
## 1.2.2
- Bug fix in function 'cat'.
- User functions 'cummin', 'cummax', 'cumsum', 'cumprod', 'ndims', 'rows',
'columns', 'length', 'numel', 'isempty' and 'reshape'.
- Bug fix in MultiArray.unparse and MultiArray.unparseMathML (null array).
- Bug fix in MultiArray constructor (dimension.length >= 2).
- Bug fix in MultiArray.isEmpty.
- Functions newFilled and newFilledEach in MultiArray class moved to
CoreFunctions and optimized.
- Some methods related to multiple assignment in Evaluator modified to static
functions.
## 1.2.1
- More methods and properties have been renamed to express their functions more
clearly.
- Code cleaning by hand.
- Bug fix in MultiArray.newFilledEach (used in rand and randi functions).
## 1.2.0
- The MultiArray class now supports multidimensional arrays. More integration
tests are needed. Several methods have been renamed to express their
functions more clearly. Methods related to linear algebra in MultiArray class
have been moved to the LinearAlgebra class in linear-algebra.ts file.
- The core-functions.ts file and its corresponding test file were created.
Functions in MultiArray class have been moved to the CoreFunctions class in
core-functions.ts file. The generalized methods have been left in MultiArray
class and the user functions have been moved to the CoreFunctions class. The
linearizedFunctions in MultiArray class have been removed (and corresponding
methods and code in Evaluator class removed too).
## 1.1.27
- The linear-algebra.ts file and its corresponding test file were created. The
relevant methods of the MultiArray class will be moved to this file as
support for multidimensional arrays evolves in the MultiArray class. Some
methods moved.
- More evolve to support multidimensional arrays in the MultiArray class.
MultiArray constructor upgraded to support multidimensional arrays.
Constructor overloaded.
- The class `Tensor` has been renamed to `MathObject` and the file 'tensor.ts'
has been renamed to 'math-object.ts'. The file 'math-object.spec.ts' has been
created.
- The corresponding test file for char-string.ts file has been created.
- Unary and binary operations name type defined in complex-decimal.ts for use
in generic operations methods of the MultiArray class.
## 1.1.26
- A fix for a major bug in element wise operations. Assymetric operations
produce incorrect results. This shouldn't even be called a bug. This was like
finding a lizard in your bathroom, coming up the drain. The fix has been
simple, but the lizard is old, it certainly comes from the first version. It
is necessary to extend the tests.
- `horzcat` and `vertcat` functions defined as function mappings.
- Start to extend MultiArray class to support multidimensional arrays.
## 1.1.25
- More bug fix in indexing (some `end` in ranges stop to work after 1.1.23. The
problem is parent link absent in some constructions).
## 1.1.24
- Fix logical indexing (with operation and literal).
## 1.1.23
- Logical indexing.
## 1.1.22
- Fix `end` in ranges. The `colon_item` parser rule has been removed and the
`end` descriptor in ranges has been created in the `primary_expr` rule.
- Fix range expansion. Before it could only be increasing, now it can also be
decreasing.
- Reference to contribute to MathJSLab Demo in CONTRIBUTING.md file.
## 1.1.21
- Fix evaluator: 'LIST' `parent` setting.
- Fix evaluator: assignment at right side.
- Fix evaluator: some parents did not propagate to all terminal nodes.
- Comment about the ISBN in the CONTRIBUTING.md file.
## 1.1.20
- Changes in build scripts in package.json.
- Colon (:) when indexing.
- Discard output (~ at left side).
## 1.1.19
- Fix parser parenthesis node.
## 1.1.18
- `end` in ranges implemented in parser rule `colon_item`. To do this it was
necessary to track the context creating the `parent` property in each node,
set during `Evaluator`, and also the `index` property in the 'LIST' and 'IDX'
type nodes. This can be useful in `Unparse` and `UnparseMathML`, to eliminate
unnecessary parenthesis.
## 1.1.17
- Project launch.
- Multiple assignment implemented using `NodeReturnList` type. Method
`reduceIfReturnList` created in class `Evaluator`.