@totemorg/mathjx v3.7.0
MATHJX
Extends MathJS to provide Matlab-JS-blended coding with the following control-blocks:
if TEST
DO
elseif TEST
DO
:
else
DO
end
switch TEST
case TEST
DO
:
default
DO
end
try
DO
catch
DO
end
for INDEX
DO
end
while TEST
DO
end
until TEST
DO
end
when EVENT
DO
end
def f=(x,y, [a,b, ...], {u,v, ...}, ...)
DO
end
Inline functions are supported using fat-arrows:
(x,y, [a,b, ...], {u,v, ...}, ...) => {
DO
}
Evaluate programs using:
$( "program code", ctx => { /* optional callback */ );
Because MathJS intrinsically protects against lax Matlab expressions, term-wise
evaluation of intrinsically singular functions like cos
must use Cos([x,y,z...])
or map([x,y,z,...], cos)
.
Transposes are likewise strict, so [x,y,z,...]'
, [[x,y,z,...]]'
, and [x;y;z;...]'
produce [x,y,z,...]
, [x;y;z,...]
, and
[x,y,z,...]
, respectively. Code multiple DOs on same line with DO \ DO \ ...
.
MathJX supports both MathJS tensors and native JS-style tensors:
var
A = $( [N1], function $ ( i, A ) { /*...*/ } ), // rank 1
B = $( [N1,N2], function $$ (i,j, B ) { /*...*/ } ), // rank 2
C = $( [N1,N2,...NK], ( [i,j,...], C ) => { /*...*/ } ) // rank K
where initialization callbacks are optional. Tensors are similarly indexed using:
A.$( (i, A) => { /*...*/ } ); // rank 1
B.$$( (i,j, B) => { /*...*/ } ); // rank 2
C.for( [i,j,...], C ) { /*...*/ } ); // rank K
Usage
Acquire and optionally configure MATHJX as follows:
const $ = require("@totemorg/mathjx").config({
key: value, // set key
"key.key": value, // indexed set
"key.key.": value // indexed append
});
where configuration keys follow ENUMS deep copy conventions.
Manage
npm install @totemorg/mathjx # Install
npm run start [ ? | $ | ...] # Unit test
npm run verminor # Roll minor version
npm run vermajor # Roll major version
npm run redoc # Regen documentation
Program Reference
MATHJX
Extends MathJS with program control-blocks. This module documented in accordance with jsdoc.
Requires: module:mathjs, module:enums, module:cp
Author: ACMESDS
MATHJX~JX
Reduce program control-blocks to mathjs executable code. The default language model reduces the following programs:
if TEST
BLOCK
elseif TEST
BLOCK
:
else
BLOCK
end
switch TEST
case TEST
BLOCK
:
default TEST
BLOCK
end
try
BLOCK
catch
BLOCK
end
for INDEX
BLOCK
end
while TEST
BLOCK
end
until TEST
BLOCK
end
when EVENT
BLOCK
end
def f=(x,y,...)
BLOCK
end
Inline functions are also supported using fat-arrows:
(x,y,...) => {
BLOCK
}
Kind: inner constant of MATHJX
Example$ctx: program
def f=(a,b,{x,y})
f=x+y+a+b;
end
disp(f(4,5,{x:10,y:20}));
reduces to
def($ctx[1]);disp(f([4,5],{x:10,y:20}));
with context
[ { test: 'f=([a,b],{x,y})', code: 'f=x+y+a+b;\n' } ]
Param | Type | Description |
---|---|---|
pgm | String | Array | Program being parsed. Use Array to bypass default eol-tokenization. |
blks | Array | Stash fo code blocks; initially []. |
idx | Number | Current line index to start parsing; initially 0. |
lang | Object | Language model; see code herein. |
Example
program
def f=(x,y)
f=x+y;
end
reduces to
def($ctx[1])
with context
[ { test: 'f=(x,y)', code: 'f=x+y\n' } ]
Example
program
for i
i1
i2
for j
j1; j2;
while u\u1\end
end
end
reduces to
for($ctx[3])
with context
[
{ test: 'u', code: 'u1\n' },
{ test: 'j', code: 'j1; j2;\nwhile($ctx[1])' },
{ test: 'i', code: 'i1\ni2\nfor($ctx[2])' }
]
Example
program
a1="this;is;a;test";
reduces to
a1=$ctx[1];
with context
[ 'this;is;a;test' ]
Example
program
somefn(1,2, \def f=(x,y)
print("x=%f and y=%f",x,y);
end
)
and program
somefn(1,2, \(x,y) => {
print("x=%f and y=%f",x,y);
})
reduces to
def($ctx[2]))
with context
[ 'x=%f and y=%f', { test: 'f=(x,y)', code: 'print($ctx[1],x,y);\n' } ]
Example
program
def f=(x,y)
f=x+y;
end
disp(f(1,2));
reduces to
def($ctx[1]);disp(f(1,2));
with context
[ { test: 'f=(x,y)', code: 'f=x+y;\n' } ]
MATHJX~config(opts)
Configure MathJX with supplied options hash.
Kind: inner method of MATHJX
Param | Type | Description |
---|---|---|
opts | Object | Options hash with keys following the deep-copy conventions |
MATHJX~get()
Kind: inner method of MATHJX
MATHJX~toMathJS()
Return MathJS tensor handle.
Kind: inner method of MATHJX
MATHJX~toJS()
Return JS tensor handle.
Kind: inner method of MATHJX
MATHJX~isDefined()
Kind: inner method of MATHJX
MATHJX~rank()
Return rank of x.
Kind: inner method of MATHJX
MATHJX~size()
Return size of x.
Kind: inner method of MATHJX
MATHJX~len()
Return length of x.
Kind: inner method of MATHJX
MATHJX~disp()
Kind: inner method of MATHJX
MATHJX~print()
Kind: inner method of MATHJX
MATHJX~def()
Kind: inner method of MATHJX
MATHJX~for()
Kind: inner method of MATHJX
MATHJX~while()
Kind: inner method of MATHJX
MATHJX~if()
Kind: inner method of MATHJX
MATHJX~try()
Kind: inner method of MATHJX
MATHJX~switch()
Kind: inner method of MATHJX
MATHJX~when()
Kind: inner method of MATHJX
MATHJX~until()
Kind: inner method of MATHJX
Contacting, Contributing, Following
Feel free to
- submit and status TOTEM issues
- contribute to TOTEM notebooks
- revise TOTEM requirements
- browse TOTEM holdings
- or follow TOTEM milestones
License
© 2012 ACMESDS