[GiNaC-devel] [SCM] GiNaC -- a C++ library for symbolic computations branch, ginac_1-5, created. release_1-4-0-185-gcbba7a5

Jens Vollinga git at ginac.de
Tue Feb 17 17:27:23 CET 2009


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GiNaC -- a C++ library for symbolic computations".

The branch, ginac_1-5 has been created
        at  cbba7a5eb9d33003c081a8017dec7da3aa990571 (commit)

- Log -----------------------------------------------------------------
commit cbba7a5eb9d33003c081a8017dec7da3aa990571
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Mon Feb 16 16:23:16 2009 +0200

    Univariate GCD timing: use sr_gcd when appropriate.
    
    The benchmark consists of two parts:
    1) timing of different GCD calculation methods (i.e. subresultant PRS,
       heuristic, chinese remaindering).
    2) timing of different implementations of the same method. The purpose
       is to find out how (in)efficient GiNaC::ex is as a representation
       of (univariate) polynomials (as a side note, the result is a bit
       depressing -- using coefficient vector instead of GiNaC:ex makes
       GCD calculation 50x -- 1000x faster).
    
    Now GiNaC uses modular (chinese remaindering) GCD by default, so part 2)
    got broken, i.e. instead of (intended) timings
    
    a) (heuristic, GiNaC::ex) versus (heuristic, coefficient vector)
    b) (PRS, GiNaC::ex) versus (PRS, coefficient vector)
    
    one gets
    
    a') (heuristic, GiNaC::ex) versus (heuristic, coefficient vector)
    b') (chinese remaindering, GiNaC::ex) versus (PRS, coefficient vector)
    
    Set the gcd_options::use_sr_gcd to restore the meaning of the benchmark.
    
    Note: this patch does not affect the library proper.

commit 4f2cf6aebc213c200b98fde6adb7133e8688530d
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Mon Feb 16 16:24:15 2009 +0200

    Polished NEWS a little bit.

commit f529b4d90e810d5b2a8d463b6327824805a87db7
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Feb 17 14:38:17 2009 +0100

    Added release date.

commit fc16effeefb35845d77d98b2173160131bafa9b3
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 16:49:47 2009 +0100

    Adjusted NEWS and INSTALL documentation.

commit 0d22af8982798509662a897ce72f546fe2149d0c
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 16:35:22 2009 +0100

    Missed to change one date in function.pl.

commit 2251ede3f4b3e7066f83fbedba53181c03f633f7
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 16:24:58 2009 +0100

    Changed name of debugging macro (to avoid warning cause by multiple definition).

commit bf08e105894751acc66f337074be6a5b9e738220
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 16:22:58 2009 +0100

    Fixed returning of test result (++result was +result).

commit 1602530f716ba1d425a0667b897182b99c374823
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 16:07:10 2009 +0100

    Prettified source code.
    
    - Added copyright and GPL licencing to new files.
    - Increased year to 2009.
    - Changed guarding macros in header to uniform pattern without leading or
      trailing __ (double underscores).
    - Put includes of system wide header consistently below own includes (help
      a tiny bit to clarify dependencies).

commit 3627c2c0f2fe8fe04816703c5fc6dad9c96fb0a6
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Fri Feb 6 08:57:32 2009 +0200

    Fix chinese_remainder() so modular GCD actually works.

commit a3a0f8b23bb70802cb0fc952cafdc2223c892fe9
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Feb 6 13:13:06 2009 +0100

    Automake now needs to be version >=1.8. Older versions like 1.7.9 do not create
    the directory m4 in a VPATH build.

commit 80b1c3e0ee0e465d56e5c76bef4e52ef2dbc5197
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Feb 5 10:54:21 2009 +0100

    Renamed files *.tcc and *.hpp to *.h.

commit b9dc3d71083fe1a2f90a34db24b57b06ad51ebde
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Tue Feb 3 13:50:33 2009 +0100

    Fixed compile errors introduced in previous commit
    45b1e47372090352ac5af655b32473df2abab23b.

commit 45b1e47372090352ac5af655b32473df2abab23b
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Mon Jan 19 08:45:38 2009 +0200

    Implement modular multivariate GCD (based on chinese remaindering algorithm).
    
    Both algorithm and implementation are a bit inefficient:
    
    * algorithm does not make use of sparseness of inputs (and most of
      multivariate polynomials are quite sparse)
    * GiNaC's expressions are essentially immutable. Thus some simple
      operations (i.e. multiplying a polynomial by an element of the base ring)
      are prohibitively expensive.
    * All numbers (i.e. GiNaC::numeric objects) are heap allocated.
    
    Still it's much faster (~5x on bivariate polynomials, ~100x on 3-variate
    ones) than (subresultant) PRS algorithm, so gcd() uses modular algorithm
    by default.

commit 3f0b0165865bbb297901e9542fced88a0e32298e
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Mon Jan 19 08:44:36 2009 +0200

    Improve (fix?) smod: now it really converts into symmetric representation...
    
    ... instead of clumsy convention inspirited by some proprietary CAS.

commit e79c1f6f914b7be886a19c8d7cdd3603405cda2a
Author: Alexei Sheplyakov <varg at metalica.kh.ua>
Date:   Mon Jan 19 08:43:50 2009 +0200

    Fix copy-paste error in GINACLIB_MICRO_VERSION.

commit 38f3143eee71d942f40ab47f5a561dc9736203fc
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Jan 8 10:26:50 2009 +0100

    Fixed bug in binomial(). binomial(n,0) erroneously returned 0.

commit 4c47ecd9caa39ba1a31f5294e395fcbdf2006431
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Dec 18 12:19:35 2008 +0100

    Small fixes to avoid compile warnings (-Wall).

commit a12c1d88131c5a301d35767f0c4c947064703418
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Dec 18 11:10:50 2008 +0100

    Fixed bug in multivariate factorization. Fractional numerical content was not
    extracted and led to a not so finite running behavior. Added new checks for that
    bug.
    
    Added static keywords to hide debugging output operators.

commit 7b68fe1d835d84030d4a351c1a3c7665dc15e7e3
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Mon Dec 1 10:26:38 2008 +0100

    Added new items.

commit 58491538f7362529b3eaa1bcffcab3e9c0f0d049
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Dec 1 10:13:12 2008 +0100

    [PATCH] [build] Simplify generation of ginac/version.h

commit 481e3e83f6b71d6639dd5c3fbd3c0d1e1ac18328
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Dec 1 10:12:25 2008 +0100

    [PATCH] Fix GiNaC library version information.
    
    The libtool naming scheme cannot guarantee that on all systems, the numbering
    is consecutive. It only guarantees that it is increasing. This doesn't matter,
    though: there is not incurred cost for numbers that are omitted, except for
    shrinking the available space of leftover numbers. Not something we need to
    worry about yet.  ;-)  On the other hand, tricks which we were using to make
    version numbers consecutive on GNU/Linux break versioning on other OSes.

commit c277943ace48d2f22f7016ba9439ff7cb949a231
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Mon Dec 1 09:54:53 2008 +0100

    Fixed a problem in polynomial divide by deactivating a recursion that lead to a
    significant slowdown in sqrfree() and sometimes to a infinite loop.

commit 6ddfb1a594386a48ab627ef7237e897535235593
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Fri Nov 14 12:00:52 2008 +0100

    Added section about factor(). Made appropriate changes at other places.

commit dcce72e85f936117b39774a839ec1d76add66aec
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Nov 13 16:36:02 2008 +0100

    Added many comments.

commit 2b0ad5c381dc081cc4066b0c5f939f5169ad9ab3
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Nov 13 11:13:05 2008 +0100

    Fixed lots of bugs in factor_multivariate().
    
    factor_univariate() takes now the content of the polynomial into accout when
    choosing a prime. It also returns the chosen prime. This supports the
    factor_multivariate() code.
    
    Polynomials are expanded before calling factor_sqrfree(). This avoids problems
    with some input polynomials.
    
    Added static qualifiers to all hidden functions.

commit a17a77e5c3d4ec2a92804debac65c75921f0156d
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Tue Nov 11 10:33:29 2008 +0100

    Fixed a bug in squarefree(). Some polynomials were erroneously classified as
    square free (e.g. x^prime+1).
    
    Fixed a bug in multivar_diophant() causing  sporadically an infinite loop.
    
    Improved lifting bound code.
    
    Univariate lifting can now use a cache for the modular factors. At the moment,
    this gives no measurable speed gain.

commit edc92b7a463993da62357fb4afad053e8c6d0771
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Mon Nov 10 13:38:11 2008 +0100

    Added modular square free factorization.
    Completed distinct degree factorization.
    Univariate polynomial factorization uses now upoly.
    Merged class Partition and function split into class factor_partition.

commit 22bf8270163ec9ec11f37c79957e18d6e6e163cd
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Nov 6 14:18:01 2008 +0100

    Stupid error: did the revert on the wrong branch (master instead of ginac_1-4).
    
    Revert "Revert "[portability] GiNaC::compile_ex works on OpenBSD now.""
    
    This reverts commit a6854a8a0f1e5db722320f5d7ccb9097053500cf.

commit a6854a8a0f1e5db722320f5d7ccb9097053500cf
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Nov 6 14:13:54 2008 +0100

    Revert "[portability] GiNaC::compile_ex works on OpenBSD now."
    
    This reverts commit 375a7aa1f13fa6061c278eb2c2447fd91521b45d.

commit 9d92d4b442fc4c1a95685884be4ba0494cd02bbe
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Nov 6 14:11:02 2008 +0100

    Univariate Hensel lifting now uses upoly.
    Changed q_matrix code.

commit e342f91c239e89839fdbe643957595b5f598c628
Author: Paul Irofti <bulibuta at sdf.lonestar.org>
Date:   Tue Nov 4 17:55:34 2008 +0300

    Equip ginac-examples.texi with directory entry for info.

commit 375a7aa1f13fa6061c278eb2c2447fd91521b45d
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Nov 3 19:17:16 2008 +0300

    [portability] GiNaC::compile_ex works on OpenBSD now.
    
    * acinclude.m4: check for dlopen() in libdl and in libc itself.
    
    Thanks to Paul Irofti for a bug report and a suggestion.

commit 6488232432c883422104915c65b89f194fc0c2ee
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Nov 3 17:34:29 2008 +0300

    [build] Set correct rpath for linking with CLN...
    
    ... so users won't get 'error while loading shared libraries: no such file
    or directory'. Also embed rpath into pkg-config meta data, so
    
    g++ `pkg-config --cflags --libs ginac` foo.cc
    
    actually works without any additional effort from the user side.

commit d625a28c3def007a9d2d5108141a6f6a4889bf9d
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Oct 23 17:48:14 2008 +0400

    [bugfix] integer_cra: check if arguments contain at least 2 moduli
    
    While at it, also fix exam_cra so it does not produce pointless inputs.

commit 44fa38df264efa7a87beb59afc4664595de8ab48
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Oct 21 10:09:33 2008 +0400

    exam_cra: explicitly #include <limits>. This should make g++ 4.3 happy.

commit 556ea59d4be5f0e2e8d3760501b8b9cb8587c1ec
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Wed Nov 5 13:56:53 2008 +0100

    Changed debugging facilities in factor.cpp.

commit 40d2f5d1ddacf71991adb447b163a19136ee2179
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Wed Nov 5 11:31:35 2008 +0100

    Fixed some minor spelling errors.

commit 931ece4838fcef7b9ec71761d224e2e1cd11a89d
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Wed Nov 5 11:22:19 2008 +0100

    Changed code from using cl_UP_MI to using umodpoly. The cl_UP_MI interface was
    inconvenient to use and caused several very difficult bugs (some were still
    unresolved before changing to umodpoly!).
    
    Fixed severe bug in multivariate factorization. The condition that all modular
    factors should be relatively prime in the base ring was violated. This caused
    the factorization sometimes to go into an infinite loop.

commit e989719ca767691eb75b34785baaaed716ea2624
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Mon Nov 3 15:50:31 2008 +0100

    Added code for distinct degree factorization.

commit 4fb48e28063e08c613a773378cfa5de608560a84
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Oct 19 20:21:33 2008 +0400

    tutorial: simplify the instructions on writing extension classes.
    
    Don't mention (un)archiving while describing the `mystring' class
    (the minimalistic extension class), so readers have less chances to get
    confused.

commit d327f3f00c66a79d42855939866047b3e8caa630
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Oct 19 19:39:30 2008 +0400

    Don't force every algebraic class to implement archiving/unarchiving.
    
    So people who don't use (un)archiving don't need to bother with it.

commit 434e5582627a91aa4d8fdb5156d975482a7f350c
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Oct 17 17:57:27 2008 +0400

    tutorial: don't mention custom RTTI any more (as it does not exist).

commit 8fdf123fe6dac43ad7b8020d7bb7446c51cf75e7
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Oct 16 15:43:32 2008 +0400

    symbol: make get_domain() a virtual method, remove symbol::domain.
    
    This cuts yet another 4 bytes from GiNaC::symbol. While at it, fix a memory
    leak in ginsh.

commit 94e5076a9ad0d142ee4604e9b078a10083efd24c
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Oct 16 15:43:32 2008 +0400

    symbol: don't bother to set TeX name if user did not specified one.
    
    Same for the usual name. As a result we use less memory (and the output
    is exactly the same).

commit 32209e57010f19f080cc25e527347bcaa36053ec
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Oct 17 14:56:54 2008 +0400

    symbol: remove return_type_tinfo() and return_type() (shrink symbol by 8 bytes)
    
    Bloating symbol to the state sizeof(symbol) == 64 is not appreciated at all.
    If someone needs/wants non-commutative symbols or other fancy stuff, please
    derive from class symbol and do whatever you want.

commit def26469ff96228c66e877bb5594e7d9a24b638f
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Oct 17 13:41:01 2008 +0400

    Wipe out remnants of custom RTTI.
    
    Custom RTTI considered harmful, final part.

commit 09988aee53a2bfef87fc887a434b4c78d6326c47
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 15:32:11 2008 +0400

    registered_class_info: use typeid() instead of tinfo_static.
    
    (Custom RTTI considered harmful, part 5).
    
    Since custom RTTI is going to be removed, registered_class_info needs to be
    re-organazied. Now tinfo_key is a (const) pointer to std::type_info.

commit 12fefbca9b424cb8e9ae05d83883b96e17c7b96e
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Oct 17 13:15:03 2008 +0400

    A better return_type_tinfo() mechanism.
    
    return_type_tinfo() is used in order to distingish between non-commutative
    objects of different type. However, often it's necessary to distingish
    between non-commutative objects of the same type, for example, between
    gamma matrices with different representation label. return_type_tinfo()
    does not provide any clean way to do that. Hence, introduce return_type_t
    type which holds representation label along with type information, and
    use it for return_type_tinfo().

commit b573b0146341709649f373e0fc5c0d440877ebaf
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 15:32:11 2008 +0400

    calchash(): use type_info::name() instead of tinfo().
    
    Custom RTTI considered harmful, part 4.
    
    The hash value of the object of different types should be different whenever
    possible. Hence calcash() needs a unique per type number. Previously we used
    tinfo_key for this. typeinfo::name() (a *pointer* to implementation dependent
    string) is also unique for each class, so it's just as good as tinfo() is.

commit e858ebe524f9beac33d492b9a4e614666819c3ab
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 15:32:11 2008 +0400

    indexed::eval: use standard C++ RTTI.
    
    Custom RTTI considered harmful, part 3.

commit 11fcbe7ea462936b79807a1f12273e5685f3f744
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 15:32:11 2008 +0400

    basic, expairseq: use standard C++ RTTI in compare(), is_equal(), match(), etc.
    
    Custom RTTI considered harmful, part 2.
    
    * basic.cpp: use standard C++ RTTI in compare(), is_equal(), operator=(),
      match().
    * expairseq.cpp: use standard C++ RTTI in match(), make_flat(),
      construct_from_2_ex().

commit e9b5729311fcd5572d806f5df2e645e1845603e5
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 15:32:11 2008 +0400

    is_exactly_a: use typeid() to check the type of expression.
    
    Custom RTTI considered harmful, part 1.
    
    Custom run time type information (RTTI) system implemented in GiNaC have
    several serious drawbacks, such as
    
    1. It makes writing GiNaC classes unnecessary cumbersome.
    2. It wastes sizeof(void *) bytes per object, for small objects like
       symbol, numeric, etc. this overhead is considerable.
    
    It turns out that GiNaC's RTTI is not any faster than the standard one
    (at least on GNU/Linux and Solaris with GNU C++ library and compiler).
    So, GiNaC RTTI have no reasons to exit any more.

commit ce9053c15affb2a1a99d1157b85266d70aec601b
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Oct 15 10:16:07 2008 +0400

    ptr.h: use unsigned int to store reference counts (in order to save memory).
    
    We'll hardly ever get more than 2^32 references to the same object. So using
    size_t to store reference count only wastes 4 bytes per object (on 64-bit
    architecture). Use unsigned int instead.

commit c7d9b624cb4bd5658a36fbcac2f73dbdb99edd5f
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Oct 19 21:27:14 2008 +0400

    Rewritten heuristic and PRS GCD for univariate polynomials, added benchmark.
    
    Using a better data structure for univariate polynomials makes GCD 10 -- 300
    times faster (and less memory hungry).

commit 47b7f9c9b4a5bd91c7c83b12bac8481b55bf4b92
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Oct 14 10:44:07 2008 +0400

    polynomial: introduce a helper function to divide polynomial by ring element.

commit 55fcb39a1209898ec43694f7e25ffb4572b0c4d1
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Oct 14 10:37:42 2008 +0400

    mod_gcd: naive hack to chose a 'good' prime (to speed up gcd computation).

commit 62923ac249c7e4f7e824bc37030ac79bab3675f3
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Sep 29 09:58:35 2008 +0400

    [bugfix] remainder_in_ring: using exact division is plain wrong.

commit d5c76f155cfbd25ccfd14735b6d1041e23214a86
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Sep 29 09:53:46 2008 +0400

    [bugfix] normalize_in_ring: don't set the leading coefficient to 1.
    
    The coefficient ring is not a field, so the leading coefficient don't
    have to be 1.

commit ceb63120f43b41b62dcb0328231a3137d666161b
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Sep 25 13:19:57 2008 +0400

    [trivial] excompiler.cpp: shut up some silly compiler warnings.
    
    GCC warns about 'comparison between signed and unsigned integer expressions'.
    In this case such comparison is harmless, but still it's a bit annoying.

commit a377cee53b71348235ec36f83afeced7e10288a8
Merge: 2a5d912dc9407c6bd1dbee6cb99cfdc206c4e42c 546bababce8ef2b3c5ed3011cb7e49bd78016844
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Sep 30 11:47:25 2008 +0200

    Merge branch 'master' of git://ffmssmsc.jinr.ru:443/varg/ginac

commit 2a5d912dc9407c6bd1dbee6cb99cfdc206c4e42c
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Mon Sep 29 17:38:46 2008 +0200

    Replaced class UniPoly by cl_UP_MI.

commit 1b735625b2759c1627046f9cb1baf834f4d26f5d
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Fri Sep 26 11:07:02 2008 +0200

    - Added options argument to factor(). Added flag factor_options::all that lets
      factor() act on all polynomial subexpressions.
    - Added more comments.

commit 546bababce8ef2b3c5ed3011cb7e49bd78016844
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 20 23:18:46 2008 +0400

    Implemented modular GCD algorithm for univariate polynomials.

commit 8c732512ca284f2a586694c7c33f1a0a4a68cef7
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 07:13:01 2008 +0400

    Wipe out the old (bison/flex generated) parser.
    
    Bison generated parser has a number of problems:
    
    1. Bad performance. Parsing a sum seems to be O(N^{2 + a}) (a > 0).
       For example, parsing a sum (actually, a univariate polynomial) of 32768
       terms takes about 90 sec. on my box, parsing a sum of 10^6 terms takes
       "eternity".
    2. The user is expected to provide list of all symbols in the expression.
       Often this is very annoying (and useless), sometimes it is not possible
       at all.
    3. Parser is not reentrant (bison *can* produce reentrant parsers, but that
       won't solve other problems).
    4. Parser is difficult to extend.
    
    Since the new parser handles almost everything (useful) as the old one, let's
    remove the latter.

commit b84032466e31ff23d4be3b81a3f535b2c70202e5
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 06:57:21 2008 +0400

    check: time_parser.cpp: don't run the same benchmark twice.
    
    Since ex(const string&, lst&) ctor uses the new parser now comparing its
    performance (and result) with one of direct invocation of the parser is
    pointless.

commit 6f64b39dd25e4d2dcc869995b3d19724fa72afa6
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 06:41:12 2008 +0400

    Document the new parser, provide an example.

commit 95bec2b8af126412b2e27b51e6bfd8d9ab18d5d7
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 06:24:29 2008 +0400

    Use the new parser in the ex(const string&, lst&) ctor.
    
    Note: this is certainly not the optimal way to use the parser. It's provided
    for backward compatibility only.

commit 3324b2f0f035490940b1a9d7cf5dc210776f6d87
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 06:01:53 2008 +0400

    Parser can parse (some) floating point numbers now.

commit 1261c54df6548cf558405a118b2134805f63376d
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 03:26:33 2008 +0400

    parser: add necessary checks to operator() to stop accepting nonsense.
    
    Since the parser is recursive parse_* methods (in particular,
    parse_binop_rhs()) does NOT check if the last unparsed token is valid.
    Thus parse_expression() stops if it encounters an unknown token. That's
    why parser::operator() needs to make sure nothing is left in the input
    stream.

commit d4593e1981a168677f98e4d3b098696bd31088e2
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 02:36:16 2008 +0400

    [bugfix] parser::parse_literal_expr(): don't forget to consume the token...
    
    ... so parser won't process it twice (and get either spurious error or
    wrong result).

commit 05157f89a3db97fff79e33fd53156b380107011f
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 14 03:19:05 2008 +0400

    [bugfix]: parser::parse_unary_expr() parses '-a-b' correctly now.
    
    Also added regression test.

commit dbe5029ed72f406f45ec2a9d3584a828653ab34a
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 13 05:12:31 2008 +0400

    ginac.h: include parser.hpp

commit 14d8318d10eb608300e006af3bc261690c14d041
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 13 04:55:23 2008 +0400

    parser: change order of the constructor optional arguments.
    
    Functions/methods having multiple optional arguments are not very convenient
    to use in C++ (to put it mildly). Shuffle parser ctor arguments so not so
    frequently used argument is the last one.

commit ef06261c6354bea6d35e8bcdb89806056d4cccb9
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 13 04:40:12 2008 +0400

    parser: allow read/write access to symbol table and strictness.
    
    Intended usage:
    
    parser reader;
    ifstream input_file1, input_file2;
    // read the first file...
    ex e1 = reader(input_file1);
    // ... add extra entry into the symbol table used by parser
    symbol x;
    parser.get_syms()["x"] = x;
    // Disable the parser to introduce new symbols, e.g. to ensure the expression
    // in input_file2 contains the same symbols as e1 (read from input_file1).
    parser.strict = true;
    ex e2;
    try {
    	e2 = reader(input_file2);
    } catch (...) {
    	abort();
    }

commit 58a84c0adac7cbaa63a50c06815aed9c7a0bcdcc
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 13 04:30:22 2008 +0400

    parser: map input strings onto arbitrary expressions (not only symbols).
    
    So it's possible to make abbreviations, e.g.
    
    symbol x;
    symtab table;
    table["x"] = x + log(x) + 1;
    parser reader(table);
    ex e = reader("1 + x^2 + 5*x^3");

commit 949508429ea9850b8ec36d862f4e4d291773c313
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 13 04:21:27 2008 +0400

    [BUGFIX] parser.hpp: fix include guard so the header is actually usable.

commit 4cbc8e8bdf06fd91ec652e9645965a5f1a808d76
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Sep 12 19:55:36 2008 +0400

    [nitpick] power::expand_add(): don't use int instead of std::size_t.
    
    This shuts a few 'comparison between signed and unsigned integer expressions'
    warnings.

commit 1f7f3c85ec1b8063f475789544e9392ce59beb40
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Sep 12 19:55:36 2008 +0400

    [nitpick] inifcns_nstdsums: don't use int instead of std::size_t.
    
    This shuts up quite a number of 'comparison between signed and unsigned
    integer expressions'  warnings.

commit bd3ecf75ed2a77b9f56fc31f7923fc0f4d1982d4
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Sep 12 19:55:36 2008 +0400

    [nitpick] don't use int instead of std::size_t.
    
    This shuts up (some of) 'comparison between signed and unsigned integer
    expressions'  warnings.

commit 5d367f84b43b0636f943fe239f7a58b4d147f002
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Sep 11 15:16:21 2008 +0400

    G_numeric: use cl_N and int to manipulate numbers (instead of ex).
    
    Convert helper functions G_do_hoelder and G_do_trafo in the same manner,
    update all call sites. This should speed up numerical calculation of
    multiple polylogarithms a little bit, and reduce the memory usage.

commit 502e76319b484c32246707e33e70a428ac5dc6ad
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Sep 10 15:43:35 2008 +0400

    G_numeric: put convergence/acceleration transofrmations into helper functions.
    
    This is simple code move, everything else should be considered a bug.
    The helper functions (as well as G_numeric itself) will be improved by
    subsequent patches.

commit 4f596b14ac1cdb03163c74e210cab493358ababf
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Sep 12 14:55:42 2008 +0400

    match() (find()): use exmap (exset) to store matched subexpressions.
    
    There's no need to re-invent associative arrays and wrap them into
    a GiNaC class.

commit 3918e4767063fb45e5728bd9b3a09dd8ac30d055
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Sep 11 16:59:30 2008 +0400

    expairseq::match(): remove the code which works around basic::match bug.
    
    basic::match() used to have side effects in a case of a failed match. As
    a result of that bug exparsed::match did not work correctly in some cases,
    see [1] for more details. These false negatives were worked around by [2].
    Now that match() has no unwanted side effects [3] we don't need any work
    arounds any more.
    
    Just in a case add a regression test (from [1]).
    
    [1] http://www.ginac.de/pipermail/ginac-devel/2006-April/000942.html
    [2] Commit 73f0ce4cf8d91f073f35a45443f5fbe886921c5c ("Fixed bugs in ::match").
    [3] Commit 192ed7390b7b2b705ad100e3db0a92eedd2b20ad ("match: don't modify
        subexpression list if expression doesn't match the pattern.").

commit 4ee761760b3db8649b8b616256cd7466fe2cd033
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Thu Sep 18 20:26:37 2008 +0200

    Fixed various bugs in multivariate factorization.

commit b8150271ff497c2ef0c2a8748f5f53b4f1bab7c8
Merge: 7d23da3e0ee0d03f90f47585ea27f86ecbfe866b c647bf0942d660691272a8a2f4d7e5a3c0f6eb0f
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Sep 9 22:42:50 2008 +0200

    Merge branch 'master' of git://ffmssmsc.jinr.ru:443/varg/ginac

commit 7d23da3e0ee0d03f90f47585ea27f86ecbfe866b
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Sep 9 22:41:39 2008 +0200

    Bug fix related to the usage of int instead of cl_I.

commit 416f530b032f2861bb3cb96d23f14097237a87ea
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Sep 9 22:41:24 2008 +0200

    Updated NEWS.

commit c647bf0942d660691272a8a2f4d7e5a3c0f6eb0f
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Sep 9 14:44:25 2008 +0400

    build: shut up automake warnings, don't use GNU make extensions.
    
    Not that I really care about non-GNU makes, but those warnings are a bit
    annoying and can hide useful ones.

commit 93eb93a10a2f29360baa4ab45d5b34b982c7fa5c
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Sep 8 11:53:30 2008 +0400

    build: put (almost) all auto* tools scripts into the config directory.
    
    So I can just rm -rf it to clean up the repository.

commit a32a30d8ccdd0eb945b8180c8fe82d154e9280de
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Sep 8 11:09:20 2008 +0400

    Allow user to disable GiNaC::compile_ex (e.g. for security reasons).
    
    configure takes --{disable,enable}-excompiler argument now. It can be
    used to disable GiNaC::compile_ex (default is to enable it).
    
    acinclude.m4:
    GINAC_EXCOMPILER: new macro. Checks for libdl, allows user to disable
    GiNaC::compile_ex. Also it doesn't bother to check for libdl on MinGW.
    
    configure.ac: use GINAC_EXCOMPILER to check for libdl.

commit e677a783b3c986ceb873a580a18f2214ad6de52c
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 7 22:53:07 2008 +0400

    configure: run important checks first (and bail out if something is missing).
    
    Don't bother to check for optional stuff if CLN and/or standard C++ headers
    are missing.

commit a3009dfc5402f6253e9219201f48d972dd46984b
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 7 22:47:01 2008 +0400

    configure: don't bother to run checks which can be done at the compile time.
    
    Don't check for sizeof of various types, this can be done at the compile time.
    GCC optimizes away these checks, so the actual code is the same.

commit 4a9f6c276daf54acbb2f5951f0435bfb6f014809
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Sep 7 22:17:55 2008 +0400

    utils.h: use <stdint.h> (if available) instead of reinventing it.
    
    The argument of golden_ratio_hash() is as an integer of the same size as
    a void* pointer. Unfortunately ISO C++ 98 does not provide suitable typedef.
    Hence
    
    * use <stdint.h> if available and define p_int to uintptr_t. Note: AC_PROG_CC
      already checks for this header, so no extra checks are necessary.
    * as a fallback define p_int to be unsigned long, this works on most systems
      I know of (the only exception is woe64).
    
    While at it, stop including "config.h" unconditionally.

commit b21923803208edf7ec3b0bfaa51f813cb25a0d86
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 6 09:21:18 2008 +0400

    configure: don't check for sizeof(long double), we don't use it.

commit 66633e0aca7656c2826e2fd06dc638eac8900660
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Sep 6 08:51:19 2008 +0400

    build: faster check for standard C++ headers.
    
    Include them all into a test program and check if it compiles (in order to reduce
    the run time of the `configure' script).

commit 0f26d08929532724d24a60e9fa5e5e98c4b2fa55
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Jun 9 16:21:30 2008 +0400

    build: don't run any ${host} binaries while checking for readline.
    
    Now GiNaC (to be more precise, ginsh) can be easily cross compiled.
    However, ancient versions of readline (<= 4.2) are not supported any more.

commit db751462877f91d8b76a0fd80d48330eddcb7095
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Sep 8 11:50:12 2008 +0400

    don't mention CVS any more, describe how to install from git.

commit 192ed7390b7b2b705ad100e3db0a92eedd2b20ad
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Jul 15 21:08:22 2008 +0400

    match: don't modify subexpression list if expression doesn't match the pattern.
    
    As of now the match() method modifies the list of matched subexpressions
    (its second argument) even if the expression in question does not match
    the pattern. Thus, this simple program
    
     #include <ginac/ginac.h>
     #include <iostream>
    using namespace GiNaC;
    
    int main(int argc, char** argv)
    {
    	symbol x;
    	ex e = pow(x, 5);
    	ex pattern = pow(wild(), -1);
    	lst repl;
    	bool test = e.match(pattern, repl);
    	std::cout << "repl = " << repl << std::endl;
    }
    
    prints
    
    repl = {x}
    
    Such behaviour is a bit unexpected. Sometimes it confuses even GiNaC
    developers, see e.g.
    http://www.ginac.de/pipermail/ginac-devel/2006-April/000942.html
    
    Hence this patch. Now the above program prints
    
    repl = {}
    
    as expected.

commit aff357309f6611a59efb10d06d3dcfd3812a9ec5
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Aug 19 15:39:46 2008 +0400

    [BUGFIX] Reclaiming the memory allocated for static objects *is* necessary.
    
    GiNaC allocates memory for static objects (i.e. flyweights, remember tables,
    etc), but doesn't free it. This is OK if the program lifetime matches libginac
    lifetime, since the OS will reclaim that memory anyway.
    However, if the program lifetime is different from that of libginac, this
    turns into a memory leak. This happens if someone dlopen's libginac.so, and
    dlclose's it later on (read: if someone uses GiNaC via scripting language
    bindings).
    
    symbol::autoname_prefix(): there's no need for dynamical memory allocation.
    remember_table::remember_tables(): likewise.
    function::registered_functions(): likewise.
    lib_init::~lib_init(): if library usage count drops to 0, reclaim the memory
                           allocated for flyweights.

commit 1776cd33da528c878ef1fb5530f8ac788e445ee5
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Sep 9 11:14:57 2008 +0400

    symbol: get rid of assign/unassign (for performance and other reasons).
    
    * symbol::eval() is trivial now, so compiler can inline it in some cases.
    * symbol takes less memory.
    * no functionality is lost (as C++ has associative arrays).

commit eaa0370ac188561e02195a377b252b4caf5ab57a
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Sep 9 10:39:26 2008 +0400

    ginsh: use exmap for storing assigned symbols.
    
    C++ already have associative arrays, there's no need to re-invent them.

commit dae52def8dd15914d32c94c2c21e2bd8419b65bb
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Aug 29 23:44:51 2008 +0400

    multiple zeta values: make crandall_Y_loop helper function reentrant.
    
    * Move crB and crG variables into initcX function (the only user of these
      variables).
    * Pass crX coefficients to crandall_Y_loop instead of using a global variable.
    * While at it make crandall_Y_loop and initcX functions static.

commit 773570d668a8a86d4c646dfe9d8572746329652c
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Aug 29 23:44:51 2008 +0400

    multiple zeta values: make crandall_Z helper function reentrant.
    
    Pass the f_kj coefficients as an arguments to crandall_Z and calc_f
    functions instead of using global variables.

commit 85dbe3f2049dce7d43a1bd956d622f4ff5c0c156
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 19:08:36 2008 +0400

    parser: improve error reporting a little bit.
    
    Introduce class 'parse_error' (which contain some info about location of
    the error) and throw it on parse errors.
    
    N.B.: the actual info is a bit inaccurate because lexer doesn't track
    the location properly yet.

commit 581244b7b8fc9b5f81291e1a3f5731939e3f3d8e
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 17:49:58 2008 +0400

    lexer: when switching to another output stream, clean last read character.
    
    Otherwise we prepend to the current stream the last character read from
    the previous stream, which is obviously incorrect.

commit bb6b3d82cdf9e7ff4ecac89c47e63024e39ec96b
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Mon Sep 8 19:17:56 2008 +0200

    Fixed bug in unvariate factorization. Bound for lifting was using a ordinary
    int instead of a cl_I.

commit ccec535ede5a414447d69fba95af194df7327bfb
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Mon Sep 8 18:32:27 2008 +0200

    Added missing code for multivariate factorization.

commit dacdde924c6d2e43ec52c2d6310d208d8e4024f6
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Mon Sep 8 18:17:51 2008 +0200

    Fixed bug. G() ignored the imaginary parts of the arguments.

commit 55af76071727bd6e2fd540ad58eac26dd961f9c9
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Wed Aug 27 17:25:16 2008 +0200

    Added internal code for multivariate factorization.

commit a79a813e7249f793859d1d3b443d1931dbab94b6
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:57:38 2008 +0400

    gcd_pf_pow_pow: deobfuscate a little bit (no functional changes).
    
    Use
    
    if (foo)
    	return bar();
    return baz();
    
    instead of
    
    	if (foo) {
    		return bar();
    	} else {
    		return baz();
    	}
    
    This makes the code a little bit more readable.

commit 6ff92476a4dcd32f9a0c6f59c95c74812ea86fef
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:57:02 2008 +0400

    gcd_pf_pow: get rid of duplicate code.
    
    This function (which helps gcd() handle partially factored expressions)
    contained two copies of the same code. Remove one redundant copy.

commit 55e50ea26252dff7432bdce8b010f9fbd058e907
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:56:04 2008 +0400

    introduce gcd_pf_pow_pow: gcd helper to handle partially factored expressions.
    
    gcd_pf_pow_pow handles the case when both arguments of gcd() are powers.
    
    N.B. the actual code moved from gcd_pf_pow, no functional changes.

commit 1d09676118944532e6100c93383d1659b1253a60
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:55:42 2008 +0400

    gcd_pf_{pow, mul}: don't check if the arguments are polynomials.
    
    These functions gets called only from gcd(), which does this check
    on its own.

commit adb1dbd383ae6e5a999b5f8cba72a5c2bfd50c11
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:55:13 2008 +0400

    gcd_pf_mul: get rid of duplicate code.
    
    This function (which helps gcd() handle partially factored expressions)
    contained two copies of the same code. Remove one redundant copy.

commit c77689e7ac8d8f4dbca0f337b6e9acf2419010ff
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:54:46 2008 +0400

    gcd(): allow user to override (some of) heuristics.
    
    GiNaC tries to avoid expanding expressions while computing GCDs and applies
    a number of heuristics. Usually this improves performance, but in some cases
    it doesn't. Allow user to switch off heuristics.
    
    Part 5:
    
    * gcd(): don't use heuristic GCD algorithm if gcd_options::no_heur_gcd
      flag is set.
    * gcd(): don't handle partially factored expressions in a special way
      if gcd_options::no_part_factored flag is set.

commit 77b6a0304a48d6a306deeda18177680f16025b33
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:54:10 2008 +0400

    refactor gcd() a little bit (no functional changes).
    
    GiNaC tries to avoid expanding expressions while computing GCDs and applies
    a number of heuristics. Usually this improves performance, but in some cases
    it doesn't. Allow user to switch off heuristics.
    
    Part 4:
    
    refactor gcd() a little bit, so subsequent patch(es) won't be so big and ugly.

commit 7d7131d3af3de5425b7fe80b1f587740294371bc
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:53:47 2008 +0400

    introduce gcd_pf_mul: gcd helper to handle partially factored expressions.
    
    GiNaC tries to avoid expanding expressions while computing GCDs and applies
    a number of heuristics. Usually this improves performance, but in some cases
    it doesn't. Allow user to switch off heuristics.
    
    Part 3:
    
    Move the code handling products from gcd() into a separate function. This
    is *really* only code move, everything else should be considered a bug.

commit b65fcd7481a401ec23c284c91f6f4e883e967676
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:53:07 2008 +0400

    introduce gcd_pf_pow: gcd helper to handle partially factored expressions.
    
    GiNaC tries to avoid expanding expressions while computing GCDs and applies
    a number of heuristics. Usually this improves performance, but in some cases
    it doesn't. Allow user to switch off heuristics.
    
    Part 2:
    
    Move the code handling powers from gcd() into a separate function. This
    is *really* only code move, everything else should be considered a bug.

commit 8474043d373a19e04008f476fa9b77e45734b604
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Aug 25 16:52:45 2008 +0400

    gcd: allow user to override (some of) heuristics.
    
    GiNaC tries to avoid expanding expressions while computing GCDs and applies
    a number of heuristics. Usually this improves performance, but in some cases
    it doesn't. Allow user to switch off heuristics.
    
    Part 1:
    
    * add new (optional) argument to gcd() to control its behaviour.
    * introduce gcd_options structure.
    
    N.B. No actual code changes so far, the actual handling of newly introduced
    options is the subject of further patches.

commit ff09c4f8103f53fe3b7a51eb3c33eff2e5a243f0
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sun Aug 24 15:25:24 2008 +0400

    inifscn_nstdsums: make functions handling Li/G transformations reentrant.
    
    Explicitly pass the dummy symbols instead of using a global variable.
    As a side effect, the code is more clear now (that's a bit subjective, but
    anyway).

commit b4b302fe5d54720b58a23568a4270e04ee1ca216
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Aug 22 02:42:17 2008 +0400

    Bail out if both autogen and autogen'erated file(s) are missing.
    
    This makes the error message(s) more helpful.

commit 1222eac51cee964961d2aad889dc4ceccb144a36
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Aug 19 23:48:03 2008 +0400

    Faster, better (recursive descent) expression parser.
    
    Ouch, it fails to compile. Here is a correct version:
    
    From: Alexei Sheplyakov <varg at theor.jinr.ru>
    Date: Tue, 19 Aug 2008 21:50:03 +0400
    Subject: [PATCH] Faster, better (recursive descent) expression parser.
    
    bison generated parser has a number of problems:
    
    1. Bad performance. Parsing a sum seems to be O(N^{2 + a}) (a > 0) [1].
       For example, parsing a sum (actually, a univariate polynomial) of 32768
       terms takes about 90 sec. on my box, parsing a sum of 10^6 terms takes
       "eternity".
    2. The user is expected to provide list of all symbols in the expression.
       Often this is very annoying (and useless).
    3. Parser is not reentrant (bison *can* produce reentrant parsers, but that
       won't solve other problems).
    4. Parser is difficult to extend.
    
    Hence the new parser.
    
    Features:
    
    1. Parsing large sums and products is O(N).
    2. Parser is reentrant (well, almost).
    3. It's possible to insert (shell style) comments inside the expressions.
    4. matrices, lists, FAIL are NOT handled. Yes, this *is* a feature :-)
    
    Limitations:
    
    1. Error handling is a bit terse: on error exception is thrown, and that's it.
    2. Binary, octal, and hexadecimal numbers can not be parsed (yet).
    3. Tensors, noncommutative products, etc. can not be parsed.
    
    Other notes:
    
    1. ex ctor still uses the old parser.
    2. ginsh still uses the old parser.
    
    [1] Mesured by this script (requires gnuplot):
    
    make_expression_string ()
    {
    	printf "1 + x"
    	local n=2
    	while test $n -le $1; do
    		printf " + %s*x^%s" $n $n
    		n=$(expr $n + 1)
    	done
    }
    
    single_test ()
    {
    	printf "$1 \t"
    	( printf "time("; make_expression_string $1; printf ");" ) | \
    	ginsh | sed -e 's/s$//'
    }
    
    benchmark ()
    {
    	local N=$1
    	while test $N -le $2; do
    		single_test $N
    		N=$(expr $N \* 2)
    	done
    
    }
    
    gnuplot_header ()
    {
     	echo "set logscale xy"
    	echo "set xlabel 'degree (# of terms)'"
    	echo "set ylabel 'time, sec.'"
    	echo "set xrange [${1}:${2}]"
    	echo "plot '-' using 1:2 with lines title '1+x+2*x^2+...+n*x^n'"
    }
    
    gnuplot_footer ()
    {
    	echo "e"
    }
    
    benchmark_and_plot ()
    {
    	( gnuplot_header $1 $2
    	  benchmark $1 $2 | tee $3.txt
    	  gnuplot_footer ) | \
    	gnuplot -persist '-'
    }
    
    N_ini=${1:-1024}
    N_fin=${2:-32768}
    out_base=${3:-parser_benchmark}
    
    benchmark_and_plot $N_ini $N_fin $out_base

commit 321d5c941f81b1d0b86de91f3f17c5af5b6e4642
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Thu Aug 21 22:37:09 2008 +0200

    Daily bugfix in the polynomial factorization (code didn't catch polynomial "x"
    and cln::sqrt conversion was buggy).

commit 37c418c602485be9b023378a1b60ebdb4a592f2a
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Wed Aug 20 22:16:13 2008 +0200

    Fixed bug in the Q matrix calculation and the univariate factorization function.

commit f3eefbda588318e09dcb3180c6f039dc3fc30f87
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Mon Aug 18 21:10:48 2008 +0200

    Fixed bug in modular square-free factorization.

commit d08150300eb98c6435a4c464c057ba2967a19c8f
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Sat Aug 9 10:14:02 2008 +0200

    Added polynomial factorization (univariate case).

commit 114449ae6f2cd3151d9b8342c570db021a9e892c
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Sat Aug 9 10:11:40 2008 +0200

    Added polynomial factorization (univariate case).

commit 5e9875d5f67a68d2cb680454ff4de480bad1b6f1
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Jul 30 20:32:46 2008 +0400

    Any complex number can be (un)archived properly.
    
    A complex number can have an exact real part and inexact (floating point)
    imaginary part, and vice a versa. Handle these cases properly in the archiving
    code instead of bailing out with a bizzare error message.
    
    Thanks to Chris Bouchard for reporting the bug.
    
    NOTE: this fix changes the format of GiNaC archives, so formally it breaks
    the binary compatibility. However, "mixed" complex numbers (i.e.  ones with
    exact real part and inexact imaginary part) can not be archived with previous
    versions of GiNaC, so there's nothing to break.

commit a7693a0f710b49494f95ce5a4a0953752e69c7f9
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:28:34 2008 +0300

    define lgamma and tgamma taking cl_N as an argument.
    
    The actual code is the same. These functions are OK since cl_N is not
    automatically converted to numeric any more.

commit 2d52c00438cde2c47f43620d26d78022f0d60746
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:28:10 2008 +0300

    Implicit conversion from cl_N to numeric considered harmful.
    
    Finally, mark the numeric(const cl_N&) ctor as explicit.
    This allows one to mix the code using GiNaC and CLN, i.e.
    
    cl_N x, y;
    // initialize them
    cl_N z = sin(x) +  y*exp(y);
    symbol a("a");
    ex e = exp(a);

commit a297391b22c1a4ec3464d13191f8cb33332c9863
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:27:27 2008 +0300

    bernoulli, fibonacci, iquo: explicitly convert return values to numeric.
    
    Implicit conversion from cl_N to numeric considered harmful, part 6.

commit 5ea14a22768031a1cd4abce2926d5359c5d0c15f
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:27:07 2008 +0300

    tgamma, lgamma: convert to take cl_N as an argument; provide wrappers for GiNaC::numeric
    
    Implicit conversion from cl_N to numeric considered harmful, part 5.

commit 7bc327c75aaa3118de14dfcee59bcf0fd40e3f4a
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:26:52 2008 +0300

    Li2, zeta, sqrt, abs, gcd, etc.: explicitly convert return value to numeric.
    
    Implicit conversion from cl_N to numeric considered harmful, part 4.

commit 58aaaf83c55c5784e1d94c2a794af96d7769165b
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:26:23 2008 +0300

    elementary functions: explicitly convert return values from cl_N to numeric.
    
    Implicit conversion from cl_N to numeric considered harmful, part 3.

commit 6335b2cfb6f3f9ec339ff683bed415a5879d7909
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:25:55 2008 +0300

    inifcns_nstdsums.cpp: Lin_numeric takes cl_N as an argument instead of numeric.
    
    Implicit conversion from cl_N to numeric considered harmful, part 2.

commit 2406529f5ceb193a46b1b5a07a8810880a8ceceb
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Wed Mar 19 12:24:36 2008 +0300

    inifcns_nstdsums.cpp: S_num takes cl_N as an argument instead of numeric.
    
    Implicit conversion from cl_N to numeric considered harmful.
    
    Using GiNaC::numeric for numerical computations incurs significant
    overhead, so one might want to do these computations using proper CLN
    types. Unfortunately, it's not easy due to automatic conversion from
    cln::cl_N to GiNaC::numeric. Here is a simple example:
    
    cl_N x, y;
    // initialize them
    return sin(x) +  y*exp(y);
    
    The compiler complains about ambigously overloaded of functions, i.e.
    cl_N cln::sin(const cl_N&) versus numeric GiNaC::sin(const numeric&).
    
    Hence, I propose to disable *implicit* conversion from cl_N to numeric
    (this can be done by marking the numeric ctor as `explicit').
    
    However, this change happens to be a bit nontrivial, because that evil
    conversion is used in GiNaC itself. So, I decided to rewrite those fragments
    of code.

commit e20fd5e760136cf343f4d2d73d0f3dfc6573ac49
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Tue Jul 15 23:57:43 2008 +0200

    documentation: it is get_dim(), not get_dimension()
    
    This was misdocumented ever since GiNaC-0.8.0.

commit cb078dba2a491d80a34924b29bd8d3992c18b7fe
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Mon Jul 14 17:46:25 2008 +0400

    clifford_unit: fix possible bugs due to wrong operator[!=]= usage.

commit 37d324b137fcb61384203b711e91d8919535f237
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Wed Jun 25 11:28:11 2008 +0200

    Removed left-over debugging line.

commit 26c31eb89fe38c4d232f90b62c8acbeaaa0454f4
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Wed Jun 25 11:17:55 2008 +0200

    Make the behaviour of class function more consistent with respect to
    ncmul::eval(). [V.Kisil]

commit fd4fbeaa409cd807e4f2f7501d278e835e964d69
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Tue Jun 24 21:26:58 2008 +0200

    Improve heur_gcd() so it can handle rational polynomials, and add a test case.
    
    Previously heur_gcd() worked only with integer polynomials, and did not check
    if the inputs are indeed integer polynomials. That lead to an endless loop or
    a miscomputed gcd.
    
    [A.Sheplyakov]

commit 6850c16435de33396ccd505ff26b4d4574fa74cf
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Fri Apr 4 14:48:19 2008 +0200

    Fixed bug in mLi summation causing premature drop-out and made Nielsen polylog
    invalidate its lookup tables if precision has been changed.

commit f152bcaada41397cdf12d21fc2c4172d77ab7cb2
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Fri Apr 4 14:47:07 2008 +0200

    Added legacy tests for zeta and multiple polylog.

commit 1254f5ef941aa6ead793e843b637edc927f47c7d
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Dec 13 20:04:23 2006 +0000

    Check for fixed bug in multiple polylogs.

commit fb45203612dcfd2e30f6e7a43273597bcd13f026
Author: Jens Vollinga <jensv at nikhef.nl>
Date:   Thu Apr 3 11:56:57 2008 +0200

    Fixed bugs found by Jianqiang Zhao.

commit 3c85fea898265651ad22baa22aa002a819e5c536
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Thu Mar 27 23:56:32 2008 +0100

    Adjust for GiNaC 1.5.

commit 83a7ee99a947cbbf331018b803ad6be43a9ccd45
Merge: 4549628b93b6a795baf8f2dc836838acb88b4ffa 56a180a49e085b325c0e6e49a2e2db07c570ef7b
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Mar 27 11:16:11 2008 +0100

    Merge commit 'origin/master'

commit 4549628b93b6a795baf8f2dc836838acb88b4ffa
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Thu Mar 27 11:08:09 2008 +0100

    Fixed make distcheck issues.

commit 56a180a49e085b325c0e6e49a2e2db07c570ef7b
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Thu Mar 27 00:50:19 2008 +0100

    Update debian/changelog in anticipation of release.
    
    In reality, I'm testing the post-receive hook.

commit 67467d256b44f5e08498ca81c946d9ffaa25d1e2
Merge: da211dc876958abc2563de16aff673296053505e 3bcd3124f2ebfec57e84c59a6b380b0681776072
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Thu Mar 27 00:05:38 2008 +0100

    Merge git://www.ginac.de/ginac

commit 3bcd3124f2ebfec57e84c59a6b380b0681776072
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Wed Mar 26 13:33:55 2008 +0100

    Small improvement to VPATH fix.

commit dbc0d24eb31cb6229e172b062fd102990fb3062a
Author: Jens Vollinga <jensv at balin.nikhef.nl>
Date:   Wed Mar 26 13:09:00 2008 +0100

    Fixed info-generation problems with VPATH builds.

commit da211dc876958abc2563de16aff673296053505e
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Wed Mar 26 00:03:08 2008 +0100

    Update debian/ files.
    
    Use the files that were uploaded with GiNaC 1.4.1 in Debian.

commit 7d870583a6bf21a2ffb7b6f051b702064623892e
Author: Richard B. Kreckel <kreckel at ginac.de>
Date:   Tue Mar 25 22:59:52 2008 +0100

    Happy new year!
    
    Updated all copyright notices.

commit d7c5ca75b0fc9e58a8676681e3801869e47ad911
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Mar 18 09:45:25 2008 +0300

    move rotate_left() function away from the public header.

commit 090348bcd9ac2104e1e387430aecd5c8b7289633
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Mar 18 09:24:56 2008 +0300

    INSTALL: libreadline is not mandatory; ginsh builds just fine without it.

commit 433e73f28bef23bd1e3135613f91c283aca97c59
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Mar 18 09:04:12 2008 +0300

    update the compiler info; tell users to avoid GCC 4.3.0

commit 3cb110c5ca2330a0a155660f32d42e3d0ebc0db1
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Tue Mar 4 12:46:59 2008 +0300

    symbol.cpp: shut up useless warnings
    
    ../../sw/ginac/ginac/symbol.h: In constructor 'GiNaC::symbol::symbol()':
    ../../sw/ginac/ginac/symbol.h:112: warning: 'GiNaC::symbol::ret_type_tinfo' will be initialized after
    ../../sw/ginac/ginac/symbol.h:110: warning:   'unsigned int GiNaC::symbol::domain'
    ../../sw/ginac/ginac/symbol.cpp:47: warning:   when initialized here
    ../../sw/ginac/ginac/symbol.h: In constructor 'GiNaC::symbol::symbol(const std::string&, unsigned int)':
    ../../sw/ginac/ginac/symbol.h:112: warning: 'GiNaC::symbol::ret_type_tinfo' will be initialized after
    ../../sw/ginac/ginac/symbol.h:110: warning:   'unsigned int GiNaC::symbol::domain'
    ../../sw/ginac/ginac/symbol.cpp:75: warning:   when initialized here
    ../../sw/ginac/ginac/symbol.h: In constructor 'GiNaC::symbol::symbol(const std::string&, unsigned int, const void*, unsigned int)':
    
    The warnings are a bit silly, but they can hide more useful ones.

commit c3c748381bda4f81b68e50db2eed440c19f24b85
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Thu Feb 28 10:11:50 2008 +0300

    check: indicate the test failures with non-zero exit code; split test programs.
    
    IMNSHO parsing the output of test programs in order to check if the
    tests passed is a bad idea (and it causes *real* problems, see e.g.
    http://www.ginac.de/pipermail/ginac-list/2008-February/001345.html).
    It's much simpler and cleaner to indicate the failure in a genuine
    *NIX way: exit with nonzero code.

commit 3a56e58f6a3e2dac83f12c254d0d7549bb886af4
Author: Richard Kreckel <kreckel at ginac.de>
Date:   Sat Feb 23 02:27:56 2008 +0000

    * Version 1.5.

commit f69a24a4fd6caf42ef773d1cef21562a8afa068a
Author: Richard Kreckel <kreckel at ginac.de>
Date:   Fri Feb 22 04:23:57 2008 +0000

    * Improved lsolve() of systems containing non-numeric coefficients.

commit 3c3275884e65193743d4b2bcd98637949791aef8
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Dec 28 17:51:16 2007 +0300

    kill spurious comma in flags.h

commit 37678db7297076f166969b92d5d96f1d46b7fdee
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Sat Dec 15 00:07:04 2007 +0300

    check/*_memleak.cpp: fix botched CVS commit[s].

commit eb207d1c42ae5aed9ed6d9695a4ff44f62d72540
Author: Alexei Sheplyakov <varg at theor.jinr.ru>
Date:   Fri Dec 14 17:31:06 2007 +0300

    Improve instructions for installing GiNaC from CVS.
    
    * prerequisites: mention libtool, flex, and bison.
    * installation: required software should be installed BEFORE generating
      the `configure' script.

commit 2ba3a7625b322bdd07dfae38a9a3843ac1df1461
Author: Richard Kreckel <Richard.Kreckel at uni-mainz.de>
Date:   Wed Dec 12 04:57:03 2007 +0000

    * Fix GCC 4.3 compilation issue by removing storage class of function coerce specializations [C++98 7.1.1-1].

commit 789b6b908fadc1139e9bc1a4611cc957ad11579b
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Thu Nov 22 02:40:31 2007 +0000

    Fixed memory leak program.

commit 48a6c5094dd4ff641d0875b1303cfa8b2b489da1
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:37:53 2007 +0000

    * Fixed module loading bug (occured if . was not in the library path).

commit e9ae06f2ddceabb66ff93bacc059d6fa0348beee
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:28:26 2007 +0000

    * Fixed broken preprocessor instruction [Sheplyakov].

commit f164fa76f440bf7a455ca65abaf0f031f715f076
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:20:44 2007 +0000

    * Fixed memory leak in ginac_yylex() [Sheplyakov].

commit 86fe62b1f98e61167e0f1012ff078a2f1547458f
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:19:50 2007 +0000

    Added small program that exhibits the memory leak in the ginac_yylex() [Sheplyakov].

commit e8b25d30502c630a181b1fa95f11b15a94a2bc74
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:14:32 2007 +0000

    * Deleted bogus try -- catch block in the ex::series() [Sheplyakov].

commit 0ad11afda76f83eb74b5868af6efd550bdfe52a1
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:13:13 2007 +0000

    * Added check for memory leak in {mul,power}::eval [Sheplyakov].

commit 7579c2252464254878cb301d409991527356d23e
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Nov 21 04:01:20 2007 +0000

    * Fixed macro checking for version of libreadline (Mac OS X) [Sheplyakov].

commit 39ad156482436e2c6e9cb3424520d80dab09180c
Author: Richard Kreckel <Richard.Kreckel at uni-mainz.de>
Date:   Tue Oct 16 06:19:15 2007 +0000

    * Fix optimization opportunities missed by Alexei's patch.

commit 2ae785e9cfce5067d4092ca6b5b92d2799867ca9
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Mon Oct 15 23:41:21 2007 +0000

    - Do not bother to rename indices if object has no indices at all [Sheplyakov].

commit a58e540b7d534d64c1c87cc253b3cf40bf58df06
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Mon Oct 15 23:40:57 2007 +0000

    - This helps mul::expand() and friends to recognize objects which have
    no indices at all [Sheplyakov].

commit da6a61ba2586263e46ade4b67dca121506c2bff9
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Mon Oct 15 23:40:30 2007 +0000

    - Apparently, in ~ 30% of calls to mul::expand the expression is monomial.
    Expanding monomials should be done as fast as possible [Sheplyakov].

commit 7d05f39c095dc51cc4526b17a5ab3280f8924219
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Mon Oct 15 23:39:42 2007 +0000

    - Partially solves performance regression in expand(), gcd(), etc [Sheplyakov].

commit 9fe3a96b35a68c4f6c16c21322161dbb26118ed0
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Mon Oct 15 23:39:01 2007 +0000

    - info(info_flags::has_indices) now works for sums and products. It
    returns true if the expression has indices (no matter dummy or free),
    and false otherwise [Sheplyakov].

commit a5196f57af6539d8a25a866ad9cf8d836dd8e3df
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Fri Sep 7 18:48:22 2007 +0000

    Improved CLN output [Sheplyakov].

commit 886ff58c2675aee6bd37469ce966924b40cc448d
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Sep 5 16:52:25 2007 +0000

    Added example for mystring class [Sheplyakov].

commit 85100a37f605d4c63fab87c3de4a7ba7bbbd041d
Author: Jens Vollinga <vollinga at thep.physik.uni-mainz.de>
Date:   Wed Sep 5 16:43:49 2007 +0000

    Removed reference to autogen.sh [Sheplyakov]

commit 4c23357ed68847190271224adf092fc37ff6e553
Author: Richard Kreckel <Richard.Kreckel at uni-mainz.de>
Date:   Wed Sep 5 05:25:12 2007 +0000

    * Adjust to files used for rolling Debian's 1.4.0-1 GiNaC packages.

commit eed9352ec69b68db0c5095376746ccf139c5d03a
Author: Richard Kreckel <Richard.Kreckel at uni-mainz.de>
Date:   Wed Sep 5 04:42:37 2007 +0000

    Put entire GiNaC documentation into @dircategory 'Mathematics' for info.

-----------------------------------------------------------------------


hooks/post-receive
--
GiNaC -- a C++ library for symbolic computations


More information about the GiNaC-devel mailing list