algebrain
TypeScript icon, indicating that this package has built-in type declarations

0.0.9 • Public • Published

Algebrain 🧠

Build Status Coverage Status

Combuter Algebra System focusing on symbolic transformations.

100% writen in typescript.

Parser generated using ANTLR4.

Note: Algebrain is still at a very early and unstable stage.

Install

$ npm install algebrain

Usage

Expressions

import Algebrain from "algebrain";
 
const expr = Algebrain.parse("(3^2)*1.6+5/(y-12.34)");
// Your string expression is now a tree of nodes:
//  +
//  ├── *
//  │   ├── 1.6
//  │   └── ^
//  │       ├── 3
//  │       └── 2
//  └── /
//      ├── 5
//      └── -
//          ├── y
//          └── 12.34
 
const evaluated = expr.evaluate();
// Evaluated tree of the following form:
// +
// ├── 14.4
// └── /
//     ├── 5
//     └── -
//         ├── y
//         └── 12.34
 
console.log(`My evaluated expression is: ${evaluated}`);
// > My evaluated expression is: 14.4+5/(y-12.34)

Under the hood, the above parsing uses an extensive API for structuring algebraic expressions:

// Algebrain heavily relies on the immutable package for persistent data structures
import { List } from "immutable";
import { Operator, Num, Symbol, OperatorSymbol } from "algebrain";
 
// The above expression: 14.4+5/(y-12.34), is constructed as:
const expr = new Operator(OperatorSymbol.Plus, List([
    new Num(14.4),
    new Operator(OperatorSymbol.Div, List([
        new Num(5),
        new Operator(OperatorSymbol.Minus, List([
            new Symbol("y"),
            new Num(12.34)
        ]))
    ]))
]));
 
console.log(expr.toString());
// > 14.4+5/(y-12.34)

Transformations

By exploiting the concept of rewriting rules, Algebrain enables the use of custom transformations, that can be entirely developed and compiled within its environment.

import Algebrain, { Transformation } from "algebrain";
 
const rules = [
    Algebrain.parse("fib(0)=0"),
    Algebrain.parse("fib(1)=1"),
    Algebrain.parse("fib($a)=fib($a-1)+fib($a-2) if const($a)"),
];
 
const fibonacci = new Transformation("fib", rules);
 
const expr = Algebrain.parse("fib(15)");
 
console.log(`The 15th term of fibonacci is: ${expr.transform(fibonacci)}`);
// > The 15h term of fibonacci is 610

Interpreter - The execution framework of Algebrain

Similar to any traditional Computer Algebra System, Algebrain provides a progamming language and an intepreter. Every Algebrain statement or expression, when parsed, results to an object implementing the Executable interface.

✍️ more documentation to come...

Web UI

There is a web-app client that materiliases a friendly interface for exploring algebrain at https://algebrain.io

The source repo of the React app can be found here.

Develop

# Linting 
npm run lint
 
# Unit tests w/ coverage thresholds 
npm run test
 
# Compile typescript 
npm run build
 
# Please commit through the following npm scripts 
npm run precommit
npm run commit

Package Sidebar

Install

npm i algebrain

Weekly Downloads

2

Version

0.0.9

License

MIT

Unpacked Size

254 kB

Total Files

54

Last publish

Collaborators

  • dedoussis