X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=NEWS;h=da87a2bbcc9cf27bfe7cd2aaf96a1a5a2c376405;hp=699284cc2b10ab6d4874348c3b439232a4ef7505;hb=0962930400269497db414baba12740496157a63b;hpb=6a0b4545189926492f657b201e3ed1b9de1dd897 diff --git a/NEWS b/NEWS index 699284cc..da87a2bb 100644 --- a/NEWS +++ b/NEWS @@ -1,16 +1,391 @@ This file records noteworthy changes. -0.6.0 (...) +1.2.0 () +* Added a structure template class for the easy creation of user-defined + algebraic classes. +* Added support for (acyclic) visitors, to allow cleaner implementations of + algebraic algorithms. +* +* Completely revamped the implementation of expression output. It is now + possible to add new output formats, to change the behavior of predefined + formats at run-time, and to have different output styles for algebraic + functions. +* Symbols can be made non-commutative. +* Improved the speed of subs(), normal(), to_rational() and to_polynomial() + by the use of maps instead of lists. The old forms + subs(const lst & ls, const lst & lr, unsigned options) + to_rational/to_polynomial(lst & repl) + are still available for compatibility, but using the new forms + subs(const exmap & m, unsigned options) + to_rational/to_polynomial(exmap & repl) + is more efficient, especially when the number of replacements is large. +* quo(), rem(), prem(), sprem(), decomp_rational(), unit(), content(), + primpart() and matrix::charpoly() now take a "const ex &" instead of a + "const symbol &". +* +* Lots of internal streamlining and optimizations. +* Caveats for class implementors: + - basic::copy() and basic::destroy() are gone; classes derived from + basic can use the defaults for the assignment operator and copy + constructor. + - basic::subs(), basic::normal(), basic::to_rational() and + basic::to_polynomial() take 'exmap' objects instead of lists. + - basic::subs() now descends into subexpressions (if accessible via + nops()/op()/let_op()). If you have a custom implementation of subs() + that calls basic::subs() after substituting subexpressions, this needs + to be changed to a call to subs_one_level(). + - lst::thislst() and exprseq::thisexprseq() renamed to thiscontainer(). + - thiscontainer() and associated constructors now take a std::auto_ptr. + - Overloading basic::print() is now deprecated. You should use + print_func<>() class options instead. + +1.1.0 (3 April 2003) +* Removed deprecated macros is_ex_a, is_ex_exactly_a and friends for good. +* The scalar_products mechanism allows the specification of an index dimension. +* Removed dirac_gamma6/7(). +* Added ex::to_polynomial(). +* subs() accepts an optional "options" argument. The option + subs_option::subs_algebraic enables "smart" substitutions in products and + powers. +* Added stream manipulators "dflt", "latex", "python", "python_repr", "tree", + "csrc", "csrc_float", "csrc_double", "csrc_cl_N", "index_dimensions" and + "no_index_dimensions" to control the output format. Calling basic::print() + directly is now deprecated. +* Made the hashing more simple and efficient. +* Caveats for class implementors: + - basic::subs(): third argument changed from "bool" to "unsigned" + - unarchiving constructor and basic::unarchive(): "const" removed from + second argument + - basic::let_op() should only be implemented if write access to + subexpressions is desired + - simplify_ncmul() renamed to eval_ncmul() + - simplified_ncmul() renamed to hold_ncmul() + - nonsimplified_ncmul() renamed to reeval_ncmul() + +1.0.14 (1 March 2003) +* Improved the C-source output: complex numbers are printed correctly (using + the STL complex<> template or cln::complex()), rational numbers use cl_RA() + in the CLN output, and small integers are printed in a more compact format + (e.g. "2.0" instead of "2.0000000e+00"). +* function_options::set_return_type() and function_options::do_not_evalf_params() + now actually work. + +1.0.13 (27 January 2003) +* Contracting epsilon tensors with Euclidean indices now works. +* Improved dummy index symmetrization in sums. +* Added dirac_gammaL/R(), which can be used instead of dirac_gamma6/7() + but are single objects, to allow for a more compact notation of Dirac + strings. +* Powers with negative numeric exponents are printed as fractions in the + LaTeX output. +* Added symbolic_matrix() for the convenient creation of matrices filled + with symbols. +* Added collect_common_factors() which collects common factors from the + terms of sums. +* simplify_indexed() converts "gamma~mu*p.mu" to "p\". + +1.0.12 (30 October 2002) +* Fixed a bug in power::expand() that could produce invalid expressions. +* The input parser no longer ignores extra data following accepted input. +* Improved the CLN C-source output (integers are printed as integers, and + floating point numbers include the precision). +* Fixed a problem in the LaTeX-output of negative fractions. +* Added print_latex() and print_csrc() to ginsh. +* The sprem() function is now public. + +1.0.11 (18 September 2002) +* Fixed a possible memory corruption in contractions of indexed objects with + delta or metric tensors. +* Computing the derivative of a power series object with respect to a symbol + that is not the expansion variable now works correctly. +* Several bugfixes in code generation. + +1.0.10 (24 July 2002) +* Powers of indexed objects are now parenthesized correctly in LaTeX output. +* Input parser handles indices (they have to be specified in the same list + as the symbols). +* Added some limited support for subspaces in the idx and tensor classes. +* Fixed a bug in canonicalize() (antisymmetric canonicalization of an already + sorted list containing two or more equal objects failed to return 0). + +1.0.9 (11 June 2002) +* simplify_indexed() now raises/lowers dummy indices to canonicalize the index + variance. This allows some simplifications that weren't possible before, + like eps~a.b~c~d*X.a*X~b -> 0 and X.a~a-X~a.a -> 0. +* Implemented relational::subs(). +* Fixed bug in simplify_ncmul() for clifford objects. + +1.0.8 (31 March 2002) +* Improvements in memory usage of the expand() methods. + +1.0.7 (18 March 2002) +* Fixed LaTeX output of indexed and matrix objects. +* Fixed matrix::pow(n) for n==0 and added helper functions to create unit + matrices "ex unit_matrix(unsigned, unsigned)". + +1.0.6 (4 March 2002) +* "(x+1).subs(x==x-1)" now returns the correct result "x" instead of "x-1". + +1.0.5 (27 January 2002) +* (l)degree(s), coeff(s, n) and collect(s) were extended to accept expressions + of any class (except add/mul/ncmul/numeric) for "s". They should even work + if "s" is a "power" object, as long as the exponent is non-integer, but with + some limitations. For example, you can "collect(a*2^x+b*2^x, 2^x)" to get + "(a+b)*2^x", but "degree(2^(3*x), 2^x)" yields 0 instead of 3). +* Fixed a small output bug. + +1.0.4 (24 January 2002) +* Speedup in expand(). +* Faster Bernoulli numbers (Markus Nullmeier). +* Some minor bugfixes and documentation updates. + +1.0.3 (21 December 2001) +* Fixed a bug where quo() would call vector::reserve() with a negative + argument. +* Fix several bugs in code generation. + +1.0.2 (19 December 2001) +* Input parser recognizes "sqrt()", which is also used in the output. +* divide(a,b,q) only modifies q if the division succeeds; also, divide(a,b,a) + works now. +* Fixed small bug in dummy index renaming which could cause it to not + recognize renamable indices in some cases. +* power::degree() and power::ldegree() throw an exception when encountering + a non-integer exponent. +* Add output-support for Python bindings. + +1.0.1 (22 November 2001) +* Function sqrfree() handles a few more cases now. +* Class relational has real canonical ordering now. +* Handle obscene libreadline version numbers when building ginsh. + +1.0.0 (6 November 2001) +* Some internal reorganization resulting in a general speed-up. +* The last 3 evaluated expressions in ginsh are now referred to with the + tokens '%', '%%' and '%%%'. The old '"', '""' and '"""' remain for + compatibility but may be removed in a future version of GiNaC. + +0.9.4 (20 September 2001) +* Functions have better support for external scripting languages. +* Interface cleanups and bugfixes. +* Fix silly bug in evalf() that prevented things like 2^Pi being computed. + +0.9.3 (16 August 2001) +* series expansion now much more consistent for small order expansion. +* lsolve() accepts algorithmic hint as parameter. + +0.9.2 (31 July 2001) +* Epsilon tensor is more functional. +* simplify_indexed() is better at detecting expressions that vanish for + symmetry reasons. +* Several little bugfixes and consistency enhancements. + +0.9.1 (27 June 2001) +* Ctors of class numeric are not explicit any more. All built-in callers for + pseudofunctions are now templated and default to ex arguments which relaxes + the need for explicit ctors. +* New functions/methods: + - find() + - remove_first(), remove_last(), sort() and unique() for lists + - symmetrize_cyclic() + - decomp_rational() +* Instead of just totally symmetric or antisymmetric, complex symmetries + can now be defined for indexed objects. Symmetries are described by a + tree of "symmetry" objects that is constructed with the sy_none(), + sy_symm(), sy_anti() and sy_cycl() functions. The symmetry of a function + with respect to its arguments can also be defined (this is currently + only used for the Beta function). +* Generalized map() to take a function object instead of a function pointer. + This allows passing an arbitrary number of additional state to the + function being called. +* color_trace(), dirac_trace(), diff(), expand(), evalf() and normal() work + better with container classes, e.g. using color_trace() on a relation will + take the trace on both sides, using diff() on a matrix differentiates every + element etc. +* diff() works properly with non-commutative products and indexed objects. +* New option flag "expand_function_args" for expand(). +* Supplement some (now deprecated) macros by inlined template functions: + - is_of_type(foo, type) -> is_a(foo) + - is_ex_of_type(foo, type) -> is_a(foo) + - is_exaclty_of_type(foo, type) -> is_exaclty_a(foo) + - is_ex_exaclty_of_type(foo, type) -> is_exaclty_a(foo) + - ex_to_foobar(baz) -> ex_to(baz) +* rem(c, p[x], x) (c: numeric, p[x]: polynomial) erroneously returned p[x] + instead of c. +* Small bugfixes in pattern matching. +* Updated libtool to version 1.4. + +0.9.0 (7 June 2001) +* In the output and in ginsh, lists are now delimited by { } braces, and + matrices are delimited by single [ ] brackets. +* simplify_indexed() renames dummy indices so, e.g., "a.i*a.i+a.j*a.j" gets + simplified to "2*a.i*a.i" (or "2*a.j*a.j"). +* New functions/methods: + - canonicalize_clifford() (helpful when comparing expressions containing + Dirac matrices) + - symmetrize() and antisymmetrize() + - numer_denom() (return numerator and denominator in one call) + - map() (apply function to subexpressions) + - evalm() (evaluate sums, products and integer powers of matrices) +* Added a new function match() for performing pattern matching. subs() and + has() also accept patterns as arguments. A pattern can be any expression, + optionally containing wildcard objects. These are constructed with the + call "wild()" and are denoted as "$0", "$1" etc. in the output + and in ginsh. +* Positive integer powers of non-commutative expressions (except matrices) + are automatically expanded. +* Removed cint subdirectory, ginaccint is a separate package now due to + packaging considerations. +* Several little bugfixes. + +0.8.3 (11 May 2001) +* color and clifford classes are functional and documented. +* New "spinidx" class for dotted/undotted indices. +* Predefined spinor metric tensor (created by spinor_metric()). +* Symbols can have a LaTeX name, e.g. symbol s("s", "\\sigma"); +* LaTeX output of indexed objects is much nicer. +* Fixed some build problems (with recent libreadline). +* Semantics of arithmetic operators now follows the C++ rules more strictly. + +0.8.2 (24 April 2001) +* degree(), ldegree(), coeff(), lcoeff(), tcoeff() and collect() work with + non-symbols as the second argument in ginsh. +* the argument to collect() can be a list of objects in which case the + result is either a recursively collected polynomial, or a polynomial in + a distributed form with terms like coeff*x1^e1*...*xn^en, as specified by + the second argument to collect(). +* Several bugfixes (including a nasty memory leak in .normal()). +* class matrix: solve() doesn't call algorithms redundantly any more and + inverse() falls back to solve() which works in more general cases. + +0.8.1 (16 April 2001) +* degree(), ldegree(), coeff(), lcoeff(), tcoeff() and collect() can now + be used with constants, functions and indexed expressions as well, so you + can use it to collect by powers of Pi or sin(x), or to find the coefficient + of gamma~0. + Limitations: + - it only works with symbols, constants, functions and indexed expressions, + trying to find the coefficient of, e.g., "x^2" or "x+y" won't work; + - it does not know about dummy index summations; the coefficient of + gamma~0 in p.mu*gamma~mu should be p.0 but is returned as 0; + - using coeff(), tcoeff(), lcoeff() or collect() on elements of + noncommutative products might return wrong or surprising results. +* subs() no longer only substitutes symbols and indices but performs a more + general "syntactic substitution", i.e. it substitutes whole objects in sub- + expressions. You can subs((a+b)^2,a+b==3) and get 9, but subs(a+b+c,a+b==3) + doesn't do anything. + Limitations: + - substituting numerics (subs(expr, 2==4)) will not replace then in all + occurences; in general, you shouldn't substitute numerics, though. +* Added preliminary (re)implementations of color and clifford classes. +* simplify_indexed(): contraction of symmetric and antisymmetric tensors + is zero. +* Replaced the various print*() member functions by a single print() that + takes a print_context object that determines the output formatting. This + should make it easier to add more output types, such as LaTeX output, + which is based on work by Stefan Weinzierl. +* Added functions to retrieve the properties stored in archive objects + outside of unarchive() (for printing or debugging purposes). +* Some bugfixes (indexed objects, archive writing). +* .collect() on non-polynomials is now algebraically correct. + +0.8.0 (24 March 2001) +* Complete revamp of indexed objects. Instead of multiple classes for + indexed things and their indices there is now only one "indexed" class + and two types of indices: "idx" for simple indices and "varidx" for + indices with variance. There are predefined delta, epsilon and metric + tensors, and a function simplify_indexed() that performs canonicalization + and dummy index summations. Matrix objects can be indexed for doing simple + linear algebra. +* Added an option "expand_indexed" to expand() to perform expansion of + indexed objects like (a+b).i -> a.i + b.i +* Renamed get_indices() to get_free_indices(), which no longer returns + dummy indices and checks the consistency of indices in sums. +* sqrfree() factorization fixed and improved syntactically. +* subs() works on matrices. +* Matrices can be constructed from flat list of elements; diagonal matrices + can be constructed from list of diagonal elements with diag_matrix(). +* Fixed memory leak in expand(). +* Operator% for objects of class ncmul has gone. Use operator* now for that + case too, which is much more natural. + +0.7.3 (28 February 2001) +* Several bugfixes and minor performance tunings. +* Added a section to the tutorial about adding new algebraic classes to GiNaC. +* Closed many in-source documentation gaps. + +0.7.2 (17 February 2001) +* Several bugfixes in power series expansion, one of them critical. + +0.7.1 (7 February 2001) +* Fix problems with Cint that were caused by CLN's overloaded operator new. +* Fix compilation errors with GCC3. +* normal() handles large sums of fractions better and normalizes the exponent + of power expressions. +* expand() always expands the exponent and transforms x^(a+b) -> x^a*x^b. +* Some bugfixes of series expansion around branch cuts of special functions. + +0.7.0 (15 December 2000) +* Requires CLN 1.1 now. Class numeric doesn't use an indirect pointer to the + actual representation any more. This is a speedup. +* mul::expand() was reengineered to not allocate excess temporary memory. +* Non-integer powers of a symbol are treated as constants by (l)degree() and + coeff(). Using these functions on an expression containing such powers used + to fail with an internal error message. The side-effect is that collect() + can be used on expressions which are not polynomials. +* Added a man page for the ginac-config script. +* Ctor of numeric from char* honors Digits. + +0.6.4 (10 August 2000) +* Complete revamp of methods in class matrix. Some redundant (and poor) + implementations of elimination schemes were thrown out. The code is now + highly orthogonal, more flexible and much more efficient. +* Some long standing and quite nasty bugs were discovered and fixed in the + following functions: add::normal(), heur_gcd(), sr_gcd() and Order_eval(). + +0.6.3 (25 July 2000) +* Derivatives are now assembled in a slightly different manner (i.e. they + might 'look' different on first sight). Under certain circumstances this + can result in a dramatic speedup because it gives hashing a better chance, + especially when computing higher derivatives. +* Some series expansions of built-in functions have been reengineered. +* The algorithm for computing determinants can be chosen by the user. See + ginac/flags.h and ginac/matrix.h. +* The Dilogarithm (Li2) now has floating point evaluation, derivative and a + proper series expansion. +* Namespace 'std' cleanly disentangled, as demanded by ISO/EIC 14882-1998(E). +* Some minor bugfixes, one major lsolve()-bugfix and documentation updates. + +0.6.2 (21 June 2000) +* ginaccint.bin is now launched by a binary program instead of by a scripts. + This allows us to write #!-scripts. A small test suite for GiNaC-cint was + added. +* Several minor bugfixes. + +0.6.1 (18 May 2000) +* Cleanup in the interface to Cint. The required version is now Cint 5.14.38. +* Several bugfixes in target install. + +0.6.0 (11 May 2000) * IMPORTANT: Several interface changes make programs written with GiNaC much clearer but break compatibility with older versions: - f(x).series(x,p[,o]) -> f(x).series(x==p,o) - series(f(x),x,p[,o]) -> series(f(x),x==p,o) - - gamma() -> Gamma() - - EulerGamma -> gamma - - beta() -> Beta() + - gamma() -> tgamma() (The true Gamma function, there is now also + log(tgamma()), called lgamma(), in accord with ISO/IEC 9899:1999.) + - EulerGamma -> Euler * #include'ing ginac.h defines the preprocessor symbols GINACLIB_MAJOR_VERSION, GINACLIB_MINOR_VERSION, and GINACLIB_MICRO_VERSION with the respective GiNaC library version numbers. +* Expressions can be constructed from strings like this: + ex e("2*x+y", lst(x, y)); +* ex::to_rational() provides a way to extend the domain of functions like + gcd() and divide() that only work on polynomials or rational functions (the + good old ex::subs() method reverses this process) +* Calling diff() on a function that has no derivative defined returns the + inert derivative function "Derivative". +* Several new timings in the check target. Some of them may be rather rude + at your machine, feel free to interrupt them. 0.5.4 (15 March 2000) * Some algorithms in class matrix (notably determinant) were replaced by