Roadmap
  
    Broadly speaking, any form of purely symbolic mathematical computation is
    in scope for SymPy. However, there are a few things we plan to focus our
    development efforts on.
  
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
Broadly speaking, any form of purely symbolic mathematical computation is in scope for SymPy. However, there are a few things we plan to focus our development efforts on.
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
 SymPy
 SymPy