added check for consistency of numeric input/output routines
[ginac.git] / NEWS
diff --git a/NEWS b/NEWS
index 601e575496282a7251cf6da9be8a4240d4017aa2..a86ac596876a9b4a8fdb64e451651e60d8077fe2 100644 (file)
--- a/NEWS
+++ b/NEWS
 This file records noteworthy changes.
 
-0.5.4 (?? 2000)
-* Algorithms in class matrix (determinant and solve) were replaced by
+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<type>(foo)
+  - is_ex_of_type(foo, type) -> is_a<type>(foo)
+  - is_exaclty_of_type(foo, type) -> is_exaclty_a<type>(foo)
+  - is_ex_exaclty_of_type(foo, type) -> is_exaclty_a<type>(foo)
+  - ex_to_foobar(baz)  ->  ex_to<foobar>(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(<unsigned>)" 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() -> 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
   less brain-dead ones and should now have much better performance.
-* Checks were reorganized and split up into three parts:
-  a) exams (small tests with predefined input)
-  b) checks (lenghty consistency checks)
-  c) timings (for crude benchmarking)
+* Checks were completely reorganized and split up into three parts:
+  a) exams (small regression tests with predefined input)
+  b) checks (lenghty coherence checks with random input)
+  c) timings (for coherence and crude benchmarking)
+* Behaviour of .evalf() was changed: it doesn't .evalf() any exponents.
+* Expanded expressions now remember they are expanded to prevent
+  superfluous expansions.
+* Small bugfixes and improvements in the series expansion.
 
 0.5.3 (23 February 2000)
 * A more flexible scheme for registering functions was implemented,