/// \defgroup core Core /// All computer algebra functionality in the form of C++ classes. /// /// \defgroup cleanup Cleanup /// Functionality to clean up expressions so that they satisfy the requirements /// of a consistent expression tree. /// \ingroup core /// /// \defgroup display Expression display /// Classes to handle printing of expressions in various formats. /// /// There are several different requirements for printing, depending on whether /// output is to the console, the graphical notebook, or to a different /// computer algebra system. In the latter case, one typically also needs /// to be able to convert the output of that external system back into /// Cadabra-parsable format, which is what e.g. the DisplayMMA::import /// and DisplaySympy::import member functions do. /// \ingroup core /// /// /// \defgroup compare Expression comparison /// Functions to compare and match expressions stored in Ex objects. /// /// These can involve wildcards and dummy indices, and matching may depend on /// the properties attached to symbols. /// This is an important bit of functionality used widely throughout the Cadabra core. /// All substitution and component evaluation logic depends on this module. /// \ingroup core /// /// \defgroup files Notebooks and packages /// Graphical notebook interface and Cadabra packages. /// /// Functionality to store and manipulate Cadabra notebooks and use them as /// packages inside other notebooks or scripts. /// \ingroup core /// \defgroup pythoncore Python Core /// Python wrapper around the C++ core module. /// /// This wrapper makes the entire /// functionality of Cadabra accessible from Python. This consists of two /// parts. One is core/cadabra2_defaults.py, which is a pure-python file. /// It contains the display function to show Cadabra objects to the user /// in a UI-independent way (e.g. switching between a text representation /// on the command line and a LaTeX representation when running in a notebook). /// The other part are the various files in core/pythoncdb, which build /// the cadabra2 module for python, to be imported with 'from cadabra2 import *'. /// /// The Python module has functionality to import Cadabra notebooks using /// standard Python import syntax. This functionality is part of the /// \ref files module and described there. /// \ingroup core /// \defgroup scalar Scalar algebra /// Functionality to make Cadabra interface with scalar computer /// algebra systems such as Sympy or Mathematica. /// /// It converts scalar /// parts of Cadabra expressions ('things without indices') to one of /// these systems, runs them through, and then converts back to Cadabra /// notation. Currently available are SymPy and Mathematica backends. /// \ingroup core /// \defgroup numerical Numerical evaluation /// Functionality to evaluate mathematical expressions numerically. /// /// Cadabra's symbolic expressions can be evaluated numerically, /// e.g. when you want to plot a function. Cadabra contains its own /// fast numerical evaluator and its own numerical tensor types. /// \ingroup core /// \defgroup algorithms Algorithms /// Containing all algorithms acting on symbolic expression trees. /// \ingroup core /// /// \defgroup properties Properties /// Containing all properties that can be attached to symbolic expressions. /// \ingroup core /// /// \defgroup clientserver Client-Server /// /// Base classes (independent of any GUI toolkit) to write Cadabra /// clients and servers. /// /// All clients use two threads. One is the main thread and runs /// most of the logic in the DocumentThread object. The other one is /// a thread which communicates with the server process; code for /// this thread is in the ComputeThread object. One typically /// subclasses the former into a full-fledged object driving the /// graphical user interface. /// /// All functionality that deals with GUI updates is isolated in /// GUIBase. A client should derive from this abstract base class /// and implement the methods there. Clients should also derive from /// DocumentThread, but there are no abstract virtual members /// to implemented from this base class. /// /// All actual updates to the document stored in the /// DocumentThread::dtree member are made on the GUI thread as /// well. The compute thread merely puts requests to change the /// document onto a stack, and then requests that the GUI updates /// the document. /// /// In order to enable undo/redo, all updates to DocumentThread::dtree /// are made by putting objects derived from ActionBase onto the /// action stack. See DocumentThread::queue_action for details. /// These ActionBase objects (among which ActionAddCell, ActionRemoveCell, /// ActionInsertText, etc) get executed on the GUI thread, and contain /// the actual logic to perform updates to the document and related /// GUI elements. /// /// /// \defgroup libcadabra2 Cadabra C++ library /// /// All Cadabra functionality can be used directly from C++ programs without /// using the Python frontend. A sample program can be found in /// c++lib/simple.cc: /// \include c++lib/simple.cc /// /// /// \defgroup frontend Front-end /// All code which implements graphical front-end notebook interfaces.