# 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&reg;/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`.
