# SymPy.jl

Documentation for SymPy.jl a `Julia`

interface to Python's SymPy library for symbolic mathematics.

To install the package, run

`(v1.4) pkg> add SymPy`

This package relies on `PyCall`

to provide a link between `Julia`

and `Python`

. Installation should install `PyCall`

, the `sympy`

module for python, and if needed, a python executable.

## Quick example

This package provides a convenient way to access the functionality of the `sympy`

library for `Python`

from `Julia`

, utilizing the `PyCall`

package to provide the interface. A symbolic type, a wrapper around a `PyCall.PyObject`

, is provided and, as much as reasonable, generic `Julia`

methods are created for this type. Many sympy specific features are available through a qualified function call, e.g. `sympy.funcname(...)`

or a `Python`

method call, e.g., `obj.methname(...)`

.

This example from calculus provides an illustation of each.

`julia> using SymPy`

Here we create some symbolic variables, one with an assumption:

```
julia> @vars x
(x,)
julia> @vars a real=true
(a,)
```

The basic math functions have methods for symbolic expressions:

```
julia> sin(x)
sin(x)
julia> log(x)
log(x)
```

The output is a symbolic expression.

A selection of SymPy functions are defined as `Julia`

functions. Here are three common calculus operations:

```
julia> limit(sin(a*x)/x, x => 0)
a
julia> diff(x^x, (x,3))
x ⎛ 3 3⋅(log(x) + 1) 1 ⎞
x ⋅⎜(log(x) + 1) + ────────────── - ──⎟
⎜ x 2⎟
⎝ x ⎠
julia> integrate(exp(-a*x) * sin(x), x)
a⋅sin(x) cos(x)
- ────────────── - ──────────────
2 a⋅x a⋅x 2 a⋅x a⋅x
a ⋅ℯ + ℯ a ⋅ℯ + ℯ
```

Both `limit`

and `integrate`

are defined within the package, whereas `diff`

, a generic `Julia`

function, has a method defined for the first argument being symbolic.

The `diff`

function finds derivatives, SymPy's `Derivative`

function defines *unevaluated* derivatives, which are evaluated through their `doit`

method. `Derivative`

is not a `Julia`

function, so we must qualify it:

```
julia> out = sympy.Derivative(x^x, x)
d ⎛ x⎞
──⎝x ⎠
dx
julia> out.doit()
x
x ⋅(log(x) + 1)
```