Happy New Year!
Finalize 1.8.2 release. Oh, and Happy New Year!
Happy New Year!
Remove deprecated initialization via overloaded comma operator. This feature has been marked as deprecated since 1.7.0. There's been more than four years to switch to initializer lists. Let's hope people have modified their code since.
Happy New Year!
Happy New Year!
Add optional matrix::rank() algorighm selection. Before, matrix::rank() was hardcoded to use Bareiss elimination, which for some matrices is way too slow (and I had to work around this limitation in my own code). I propose adding an argument that will allow users to select which elimination scheme to use. The argument is the same as matrix::solve() takes (so, solve_algo::*). I've tried to mimic how a similar argument was added to matrix::inverse() by keeping the current set of rank() functions and defining separate ones with the 'algo' argument, with the old ones calling the new ones with solve_algo::automatic. This is instead of using default argument values. I've also put the code that makes the automatic selection of the elimination method into a separate function so that both matrix::solve() and matrix::rank() could share it. There's a bit of similar code in matrix::determinant(), but since the self of determinant algorithms is different from the elimination algorithms, it's not clear if these two could be unified.
Add Markowitz-ordered Gaussian elimination algorithm. This algorithm avoids the 'fill-in' problem of Gaussian elimination and significantly improves the times for solving large sparse systems. See: <https://www.ginac.de/pipermail/ginac-list/2018-May/002202.html>.
Fix ABI compatibility with so-version 6. Commit 1be7026a unintentionally broke the ABI since g++ doesn't appear to generate symbols for inline methods. Ugh. Cf. https://bugzilla.redhat.com/show_bug.cgi?id=1541187
Add optional algorithm selection to matrix::inverse(). Following a proposal by Vitaly Magerya, a signature with a solve_algo is added to class matrix. (Not using a default argument in order to not break the ABI.)
Happy New Year!
Happy New Year! Update copyright statements.
Fix compilation of programs using __attribute__((deprecated)). Ouu, we mustn't redefine 'deprecated' in order for this to work... Thanks to Alexander Proskurin for reporting this.
Remove 'level' argument of evalf(). The 'level' argument was modeled after that of the eval() methods (removed in 6c946d4c). It has never been very useful except for confusing developers. Moreover, I have no indication that it has ever been used.
Happy New Year!
Make .eval() evaluate top-level only. With the previous patch, some old workarounds have become unnecessary: If all expressions are evaluated, any object which is an aggregate of expressions will only ever have to evaluate the top level. As such, it has become pointless to evaluate child objects of an expression prior to doing its own term-rewriting. This patch removes the evaluation of children from all GiNaC objects. It also removes the now superfluous parameter 'level' of the eval methods.
Use neseted initializer lists to construct matrix objects. Add constructor of initializer_list<initializer_list<ex>> to matrix. Use this syntax where, previously, ctor from comma-separated list of elements was used. Deprecate the ctor from comma-separated list. Note: The output format '[[a,b],[c,d]]' and ginsh syntax are unchanged because lists are printed '{a,b,c}' and a matrix is not a list of lists.
Make ample use of the contextual keyword 'override'. This patch adds the C++11 contextual keyword 'override' to every overridden virtual function declaration except where that would incur macro duplications. Along the way, it fixes some comments about member functions 'virtuality'.
Move ctors for classes matrix and pseries.
Fix some apparent typos and misindentations.