aesara-devs/aesara

Aesara is a Python library for defining, optimizing, and efficiently evaluating mathematical expressions involving multi-dimensional arrays.

Python

1,221

24,042 commits

updated Nov 15, 2024

See the code

README

logo

Pypi Downloads Contributors
Gitter Discord Twitter

Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays.

A fast and hackable meta-tensor library in Python

Features • Get Started • Install • Get help • Contribute

Roadmap • Docs

[!IMPORTANT] This project is no longer actively maintained. See https://github.com/aesara-devs/aesara/discussions/1521#discussioncomment-7687831 and https://x.com/BrandonTWillard/status/1729350499793588249 for more details.

Features

  • A hackable, pure-Python codebase
  • Extensible graph framework suitable for rapid development of custom operators and symbolic optimizations
  • Implements an extensible graph transpilation framework that currently provides compilation via C, JAX, and Numba.
  • Based on one of the most widely-used Python tensor libraries: Theano.

Aesara Overview Diagram: A graph linking the different components of Aesara. From left to right: Numpy API->Symbolic Graph<->Rewrites->Optimize/Stabilize->[C, Jax, Numba]

Get started

import aesara
from aesara import tensor as at

# Declare two symbolic floating-point scalars
a = at.dscalar("a")
b = at.dscalar("b")

# Create a simple example expression
c = a + b

# Convert the expression into a callable object that takes `(a, b)`
# values as input and computes the value of `c`.
f_c = aesara.function([a, b], c)

assert f_c(1.5, 2.5) == 4.0

# Compute the gradient of the example expression with respect to `a`
dc = aesara.grad(c, a)

f_dc = aesara.function([a, b], dc)

assert f_dc(1.5, 2.5) == 1.0

# Compiling functions with `aesara.function` also optimizes
# expression graphs by removing unnecessary operations and
# replacing computations with more efficient ones.

v = at.vector("v")
M = at.matrix("M")

d = a/a + (M + a).dot(v)

aesara.dprint(d)
# Elemwise{add,no_inplace} [id A] ''
#  |InplaceDimShuffle{x} [id B] ''
#  | |Elemwise{true_divide,no_inplace} [id C] ''
#  |   |a [id D]
#  |   |a [id D]
#  |dot [id E] ''
#    |Elemwise{add,no_inplace} [id F] ''
#    | |M [id G]
#    | |InplaceDimShuffle{x,x} [id H] ''
#    |   |a [id D]
#    |v [id I]

f_d = aesara.function([a, v, M], d)

# `a/a` -> `1` and the dot product is replaced with a BLAS function
# (i.e. CGemv)
aesara.dprint(f_d)
# Elemwise{Add}[(0, 1)] [id A] ''   5
#  |TensorConstant{(1,) of 1.0} [id B]
#  |CGemv{inplace} [id C] ''   4
#    |AllocEmpty{dtype='float64'} [id D] ''   3
#    | |Shape_i{0} [id E] ''   2
#    |   |M [id F]
#    |TensorConstant{1.0} [id G]
#    |Elemwise{add,no_inplace} [id H] ''   1
#    | |M [id F]
#    | |InplaceDimShuffle{x,x} [id I] ''   0
#    |   |a [id J]
#    |v [id K]
#    |TensorConstant{0.0} [id L]

See the Aesara documentation for in-depth tutorials.

Install

The latest release of Aesara can be installed from PyPI using pip:

pip install aesara

Or via conda-forge:

conda install -c conda-forge aesara

The current development branch of Aesara can be installed from GitHub, also using pip:

pip install git+https://github.com/aesara-devs/aesara

Get help

Report bugs by opening an issue. If you have a question regarding the usage of Aesara, start a discussion. For real-time feedback or more general chat about Aesara use our Discord server, or Gitter.

Contribute

We welcome bug reports and fixes and improvements to the documentation.

For more information on contributing, please see the contributing guide and the Aesara Mission Statement.

A good place to start contributing is by looking through the issues.

Support

Special thanks to Bram Timmer for the logo.

aesara
automatic-differentiation
optimizing-compiler
optimizing-compilers
symbolic-computation
tensors
term-rewriting-system
theano
transpiler

aesara-devs/aesara

Aesara is a Python library for defining, optimizing, and efficiently evaluating mathematical expressions involving multi-dimensional arrays.

Python

1,221

24,042 commits

updated Nov 15, 2024

See the code

README

logo

Pypi Downloads Contributors
Gitter Discord Twitter

Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays.

A fast and hackable meta-tensor library in Python

Features • Get Started • Install • Get help • Contribute

Roadmap • Docs

[!IMPORTANT] This project is no longer actively maintained. See https://github.com/aesara-devs/aesara/discussions/1521#discussioncomment-7687831 and https://x.com/BrandonTWillard/status/1729350499793588249 for more details.

Features

  • A hackable, pure-Python codebase
  • Extensible graph framework suitable for rapid development of custom operators and symbolic optimizations
  • Implements an extensible graph transpilation framework that currently provides compilation via C, JAX, and Numba.
  • Based on one of the most widely-used Python tensor libraries: Theano.

Aesara Overview Diagram: A graph linking the different components of Aesara. From left to right: Numpy API->Symbolic Graph<->Rewrites->Optimize/Stabilize->[C, Jax, Numba]

Get started

import aesara
from aesara import tensor as at

# Declare two symbolic floating-point scalars
a = at.dscalar("a")
b = at.dscalar("b")

# Create a simple example expression
c = a + b

# Convert the expression into a callable object that takes `(a, b)`
# values as input and computes the value of `c`.
f_c = aesara.function([a, b], c)

assert f_c(1.5, 2.5) == 4.0

# Compute the gradient of the example expression with respect to `a`
dc = aesara.grad(c, a)

f_dc = aesara.function([a, b], dc)

assert f_dc(1.5, 2.5) == 1.0

# Compiling functions with `aesara.function` also optimizes
# expression graphs by removing unnecessary operations and
# replacing computations with more efficient ones.

v = at.vector("v")
M = at.matrix("M")

d = a/a + (M + a).dot(v)

aesara.dprint(d)
# Elemwise{add,no_inplace} [id A] ''
#  |InplaceDimShuffle{x} [id B] ''
#  | |Elemwise{true_divide,no_inplace} [id C] ''
#  |   |a [id D]
#  |   |a [id D]
#  |dot [id E] ''
#    |Elemwise{add,no_inplace} [id F] ''
#    | |M [id G]
#    | |InplaceDimShuffle{x,x} [id H] ''
#    |   |a [id D]
#    |v [id I]

f_d = aesara.function([a, v, M], d)

# `a/a` -> `1` and the dot product is replaced with a BLAS function
# (i.e. CGemv)
aesara.dprint(f_d)
# Elemwise{Add}[(0, 1)] [id A] ''   5
#  |TensorConstant{(1,) of 1.0} [id B]
#  |CGemv{inplace} [id C] ''   4
#    |AllocEmpty{dtype='float64'} [id D] ''   3
#    | |Shape_i{0} [id E] ''   2
#    |   |M [id F]
#    |TensorConstant{1.0} [id G]
#    |Elemwise{add,no_inplace} [id H] ''   1
#    | |M [id F]
#    | |InplaceDimShuffle{x,x} [id I] ''   0
#    |   |a [id J]
#    |v [id K]
#    |TensorConstant{0.0} [id L]

See the Aesara documentation for in-depth tutorials.

Install

The latest release of Aesara can be installed from PyPI using pip:

pip install aesara

Or via conda-forge:

conda install -c conda-forge aesara

The current development branch of Aesara can be installed from GitHub, also using pip:

pip install git+https://github.com/aesara-devs/aesara

Get help

Report bugs by opening an issue. If you have a question regarding the usage of Aesara, start a discussion. For real-time feedback or more general chat about Aesara use our Discord server, or Gitter.

Contribute

We welcome bug reports and fixes and improvements to the documentation.

For more information on contributing, please see the contributing guide and the Aesara Mission Statement.

A good place to start contributing is by looking through the issues.

Support

Special thanks to Bram Timmer for the logo.

aesara
automatic-differentiation
optimizing-compiler
optimizing-compilers
symbolic-computation
tensors
term-rewriting-system
theano
transpiler

Project health

Overall

4.2/10

Maintained

0/10

Code review

4/10
OpenSSF Scorecard

PyPI

Latest release

2.9.4 · Aug 28, 2024

Releases this year

0

Significant stargazers

Henry Schreiner

945 followers · starred Jul 2023

Joren Hammudoglu

189 followers · starred Mar 2025

justheuristic

497 followers · starred Sep 2023

8bitmp3

31 followers · starred Jan 2023