See the change log for latest changes only available on github.
- 14 April 2017
- Version 2.1.4 released (changes).
- 4 January 2017
- Version 2.1.2 released (changes).
- 3 January 2017
- Version 2.1.0 released (changes).
- 3 January 2017
- The old site has been turned off. Cadabra 1.x will still be supported with bug fixes, and it will continue to be available via Debian-based distros, but all further development will take place on the 2.x versions.
- 6 November 2016
- We are now generating packages for all major Linux distributions automatically so they track the github master branch. Get them from the download page.
What is Cadabra?
Cadabra is a symbolic computer algebra system (CAS) designed specifically for the solution of problems encountered in field theory. It has extensive functionality for tensor computer algebra, tensor polynomial simplification including multi-term symmetries, fermions and anti-commuting variables, Clifford algebras and Fierz transformations, component computations, implicit coordinate dependence, multiple index types and many more. The input format is a subset of TeX. Both a command-line and a graphical interface are available.
- Designed for field-theory problems, with handling of anti-commuting and non-commuting objects without special notations for their products, gamma matrix algebra, Fierz identities, Dirac conjugation, vielbeine, flat and curved, covariant and contravariant indices, implicit dependence of tensors on coordinates, partial and covariant derivatives...
- Powerful tensor simplification algorithms, not just for mono-term symmetries but also for multi-terms symmetries like the Bianchi identity, or dimensionally-dependent symmetries like the Schouten identity.
- Allows for both abstract and component computations.
- A standalone graphical notebook interface which can also be used as a front-end for SymPy.
- Input and output using a subset of LaTeX notation.
- Programmable using Python.
Cadabra's design philosophy
Cadabra is built around the fact that many computations do not have one single and unique path between the starting point and the end result. When we do computations on paper, we often taken bits of an expression apart, do some manipulations on them, stick them back into the main expression, and so on. Often, the manipulations that we do are far from uniquely determined by the problem, and often there is no way even in principle for a computer to figure out what is 'the best' thing to do.
What we need the computer to do, in such a case, is to be good at performing simple but tedious steps, without enforcing on the user how to do a particular computation. In other words, we want the computer algebra system to be a scratchpad, leaving us in control of which steps to take, not forcing us to return to a 'canonical' expression at every stage.
Most existing computer algebra systems allow for this kind of work flow only by requiring to stick clumsy 'inert' or 'hold' arguments onto expressions, by default always 'simplifying' every input to some form they think is best. Cadabra starts from the other end of the spectrum, and as a general rule keeps your expression untouched, unless you explicitly ask for something to be done to it.
Cadabra was originally written around 2001 to solve a number of problems related to higher-derivative supergravity. It was then expanded and polished, and first saw its public release in 2007. During the years that followed, it became clear that several design decisions were not ideal, such as the use of a custom programming language and the lack functionality for component computations. Over the course of 2015-2016 a large rewrite took place, which resulted in Cadabra 2.x. This new version is programmable in Python and does both abstract and component computations. This new web site, with new tutorials and all manual pages accessible online, will also hopefully help to make Cadabra easier to use.
Version 2.x is still actively being worked on, so expect the occasional bumpy ride, but it is already much better (and easier to compile, too) than the old 1.x.