An update on SymEngine, a fast symbolic manipulation library

Sumith (~Sumith1896)


2

Votes

Description:

The Brief Description

The goal of SymEngine is to be the fastest C++ symbolic manipulation library (opensource or commercial), compatible with SymPy, that can be used from many languages (Python, Ruby, Julia, ...). We will present the current status of development, how things are implemented internally, why we chose C++, benchmarks, and examples of usage from Python (SymPy and Sage), Ruby and Julia.

The Detailed Abstract

Motivation

SymPy is a widely used symbolic manipulation library in Python. While SymPy turns out to be very useful for many applications, one of the long term problems with SymPy is that the speed might be insufficient when handling of very large expressions is required. Another problem with SymPy is that due to being written in Python, it can be cumbersome to use from other languages like Julia, Ruby, JavaScript or C++, because it requires, say, a Python to Julia bridge, which might not always be robust and which inflicts additional overhead.

Methods

For these reasons, we implemented SymEngine, an open source C++ symbolic manipulation library, with the goal of being the fastest library for symbolic manipulation (opensource or commercial), and allowing natural wrappers to other languages like Python (the most mature wrapper), Ruby, Julia and others.

Results

We will show benchmarks against other computer algebra systems (opensource and commercial) as well as examples of usage from Python (SymPy and Sage), Ruby and Julia. We will present a roadmap how to port SymPy on top of SymEngine.

We will talk about why we chose C++ and what rules to follow so that the code cannot have an undefined behavior in Debug mode (thus providing similar ease of development as one is used to from Python).

The SymEngine C++ library already has 36 contributors, 109 forks and 146 stars on GitHub, as of June 30, 2016.

Conclusion

SymEngine should fix the slowness of SymPy, while providing a familiar interface, and at the same allowing many languages to naturaly use it, thus creating a common platform/tool that many projects (like SymPy, Sage, ...) can use as their main symbolic engine and all contribute back to it.

Prerequisites:

Nothing as such, basic math to appreciate examples preferred.

Content URLs:

Resources

Contents of presentation prepared by the SymEngine team lies here https://github.com/certik/scipy-2016-symengine-talk/

  • SymEngine C++ library: https://github.com/symengine/symengine
  • SymEngine Python wrappers (with SymPy and Sage integration): https://github.com/symengine/symengine.py
  • SymEngine Ruby wrappers: https://github.com/symengine/symengine.rb
  • SymEngine Julia wrappers: https://github.com/symengine/symengine.jl
  • SymPy: http://sympy.org/

Speaker Info:

Sumith is currently a third year computer science undergraduate student at IIT Bombay. <br/> He is a contributor to SymPy as well as SymEngine, currently a mentor of GSoC for two projects under the SymPy organisation, he has also successfully completed GSoC 2015 project for SymEngine under Python Software Foundation. Sumith has also interned at EPFL, birth place of the Scala functional programming language.

Speaker Links:

Github : https://github.com/Sumith1896 <br/> Webpage : https://www.cse.iitb.ac.in/~sumith/ <br/> Twitter : https://twitter.com/sumith1896 <br/> E-mail : sumith1896@gmail.com <br/>

You can even reach me on Facebook. My blog lives here.

Section: Scientific Computing
Type: Talks
Target Audience: Beginner
Last Updated: