### 14 releases (6 breaking)

new 0.6.0 | May 27, 2024 |
---|---|

0.4.0 | Apr 15, 2024 |

0.3.0 | Mar 18, 2024 |

0.1.4 | Dec 5, 2023 |

0.0.0 | Jan 11, 2023 |

#**120** in Math

**168** downloads per month

Used in spenso

**Custom license**and LGPL-3.0+

1.5MB

**40K**
SLoC

# Symbolica

Symbolica is a blazing fast and modern computer algebra system which aims to handle huge expressions. It can easily be incorporated into existing projects using its Python, Rust or C++ bindings. Check out the live Jupyter Notebook demo!

For documentation and more, see symbolica.io.

## Quick Example

Symbolica allows you to build and manipulate mathematical expressions through matching and replacing patterns, similar to

for text:`regex`

You are able to perform these operations from the comfort of a programming language that you (probably) already know, by using Symbolica's bindings to Python, Rust and C++:

# Installation

Visit the Get Started page for detailed installation instructions.

## Python

Symbolica can be installed for Python >3.5 using

:`pip`

`pip`` install symbolica`

The installation may take some time on Mac OS and Windows, as it may have to compile Symbolica.

## Rust

If you want to use Symbolica as a library in Rust, simply include it in the

:`Cargo.toml`

`[``dependencies``]`
`symbolica ``=` `"`0.6`"`

# Examples

Below we list some examples of the features of Symbolica. Check the guide for a complete overview.

### Pattern matching

Variables ending with a

are wildcards that match to any subexpression.
In the following example we try to match the pattern `_`

:`f``(`w1_`,`w2_`)`

`from`` symbolica ``import`` ``Expression`
`x`, `y`, `w1_`, `w2_` `=` `Expression``.``vars``(``'``x``'``,``'``y``'``,``'``w1_``'``,``'``w2_``'``)`
`f` `=` `Expression``.``fun``(``'``f``'``)`
`e` `=` `f``(``3``,``x``)``*``y``*``*``2``+``5`
`r` `=` `e``.``replace_all``(``f``(``w1_``,``w2_``)``,` `f``(``w1_` `-` `1``,` `w2_``*``*``2``)``)`
`print``(``r``)`

which yields

.`y ^2*f(2,x^2)+5`

### Solving a linear system

Solve a linear system in

and `x`

with a parameter `y`

:`c`

`from`` symbolica ``import`` ``Expression`
`x`, `y`, `c` `=` `Expression``.``vars``(``'``x``'``,` `'``y``'``,` `'``c``'``)`
`f` `=` `Expression``.``fun``(``'``f``'``)`
`x_r`, `y_r` `=` `Expression``.``solve_linear_system``(`
`[``f``(``c``)``*``x` `+` `y` `+` `c``,` `y` `+` `c``*``*``2``]``,` `[``x``,` `y``]``)`
`print``(``'``x =``'``,` `x_r``,` `'``, y =``'``,` `y_r``)`

which yields

and `x = (-c+c^2)*f(c)^-1`

`y ``=` `-`c`^``2`

.### Series expansion

Perform the Taylor series in

of an expression that contains a user-defined function `x`

:`f`

`from`` symbolica ``import`` ``Expression`
`x`, `y` `=` `Expression``.``vars``(``'``x``'``,` `'``y``'``)`
`f` `=` `Expression``.``fun``(``'``f``'``)`
`e` `=` `2``*` `x``*``*``2` `*` `y` `+` `f``(``x``)`
`e` `=` `e``.``taylor_series``(``x``,` `0``,` `2``)`
`print``(``e``)`

which yields

.`f``(``0``)``+`x`*``der``(``1``,``f``(``0``)``)``+``1``/``2``*`x`^``2``*``(``4``*`y`+``der``(``2``,``f``(``0``)``)``)`

### Rational arithmetic

Symbolica is world-class in rational arithmetic, outperforming Mathematica, Maple, Form, Fermat, and other computer algebra packages. Simply convert an expression to a rational polynomial:

`from`` symbolica ``import`` ``Expression`
`x`, `y` `=` `Expression``.``vars``(``'``x``'``,``'``y``'``)`
`p` `=` `Expression``.``parse``(``'``(x*y^2*5+5)^2/(2*x+5)+(x+4)/(6*x^2+1)``'``)``.``to_rational_polynomial``(``)`
`print``(``p``)`

which yields

.`(``45``+``13``*`x`+``50``*`x`*`y`^``2``+``152``*`x`^``2``+``25``*`x`^``2``*`y`^``4``+``300``*`x`^``3``*`y`^``2``+``150``*`x`^``4``*`y`^``4``)``/``(``5``+``2``*`x`+``30``*`x`^``2``+``12``*`x`^``3``)`

## Development

Follow the development and discussions on Zulip!

#### Dependencies

~**31–43MB**

~1M SLoC