Skip to content

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

License

Notifications You must be signed in to change notification settings

kariparisari/aesara

 
 

Tests Status Coverage Gitter

logo

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

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

Getting 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_div,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.

Installation

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 

Contributing

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 here.

Support

Special thanks to Bram Timmer for the logo.

About

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

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.3%
  • C++ 1.7%
  • C 1.7%
  • Cython 0.3%
  • HTML 0.0%
  • Makefile 0.0%