# Ziele

Generell steht SymPy für jede Form von symbolischer mathematischer Berechnung im Zusammenhang. Jedoch gibt es einige Dinge, auf die wir unsere Entwicklungsarbeit fokusieren wollen.

### The Assumptions System

The assumptions system handles how SymPy makes assumptions on expressions and does logical inference and simplification based on those assumptions (for instance, assuming an expression is "positive" or "integer"). The SymPy assumptions system is currently in a state of disarray, as there is a "new" system and an "old" system that need to be properly merged. However, because assumptions affect every part of the codebase, this is a challenging task.

### Code Generation

Code generation refers to the task of converting SymPy expressions into another language, such as C or Fortran, for the purposes of fast numerical evaluation. The goal with code generation is to be able to use SymPy to model a problem symbolically, and then seamlessly convert that symbolic model into fast code that can be numerically evaluated on real data. Our roadmap for code generation is to make that translation as seamless as possible, through things like higher level abstractions that reduce the amount of work needed by the end user, an optimization pipeline, which would allow SymPy to take advantage of its mathematical knowledge to create faster and more accurate code, and more tools to help solve domain specific problems.

### Performance

Performance is an important aspect in symbolic computation. SymPy often suffers in terms of performance due to it being written in pure Python. There are a few ways that SymPy can be made more performant. One is to more carefully benchmark and profile SymPy code, so that inefficiencies can be rooted out. This includes tooling to prevent performance regressions from ever occurring in the first place. Second is to have a fast symbolic core that can be optionally plugged in to make SymPy's core operations faster. The plan is to use the SymEngine library as an optional fast symbolic core for SymPy. SymEngine is a symbolic library written in C++, with an emphasis on performance. A third way SymPy can be made more performant is by implementing faster symbolic algorithms for various computations (see below).

### SymPy Live and SymPy Gamma

SymPy Live is a web application that runs a full SymPy Python session in the browser. It can be used standalone, and is also used in the SymPy documentation to allow readers to interactively evaluate the documentation examples. The backend of SymPy Live needs modernization, and there are several possible improvements for the frontend as well.

SymPy Gamma is a web application that takes a mathematical formula and performs many useful calculations on it, such as plotting, solving, simplifying, and symbolic integration. The goal of SymPy Gamma is to be an open source competitor to things like WolframAlpha. We aim to improve SymPy Gamma by adding more useful computations to the output, and by improving the parsing so that users do not need to know SymPy syntax to use it.

### Algorithmic Improvements

SymPy depends on a large array of symbolic computation algorithms to work. Many algorithms are already implemented, but quite a few are not. These include things like improved algorithms for symbolic integration, summations, simplification, polynomial manipulation, and equation solving, among many others. Improved algorithms will both increase the number of symbolic computations that SymPy is able to successfully compute, and, in many cases, greatly improve the performance of existing algorithms. A good resource for the sorts of things we want to implement is our Google Summer of Code ideas page.

### General Improvements

Aside from the above specific items, we are always aiming to improve SymPy in many ways. This includes things like

- fixing bugs
- better documentation
- improved development tooling
- new features
- better community outreach