3.7.0 • Published 7 months ago

@totemorg/mathjx v3.7.0

Weekly downloads
-
License
ISC
Repository
github
Last release
7 months ago

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' } ]  
ParamTypeDescription
pgmString | ArrayProgram being parsed. Use Array to bypass default eol-tokenization.
blksArrayStash fo code blocks; initially [].
idxNumberCurrent line index to start parsing; initially 0.
langObjectLanguage 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

ParamTypeDescription
optsObjectOptions 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

License

MIT


© 2012 ACMESDS

3.7.0

7 months ago

3.6.0

10 months ago

3.4.0

1 year ago

3.3.0

1 year ago

3.2.0

1 year ago

3.5.0

1 year ago

3.1.0

1 year ago

2.3.0

1 year ago

2.2.0

1 year ago

2.5.0

1 year ago

2.4.0

1 year ago

2.7.0

1 year ago

2.6.0

1 year ago

2.8.0

1 year ago

2.1.0

1 year ago

2.0.0

1 year ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.0

2 years ago