Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ginac for openSUSE:Factory checked 
in at 2024-01-03 12:23:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ginac (Old)
 and      /work/SRC/openSUSE:Factory/.ginac.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ginac"

Wed Jan  3 12:23:48 2024 rev:15 rq:1135586 version:1.8.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/ginac/ginac.changes      2023-06-16 
16:55:44.066022543 +0200
+++ /work/SRC/openSUSE:Factory/.ginac.new.28375/ginac.changes   2024-01-03 
12:23:50.552966115 +0100
@@ -1,0 +2,13 @@
+Thu Dec 28 08:36:20 UTC 2023 - jun wang <[email protected]>
+
+- Update to version 1.8.7
+  * Fix series expansion of polynomial(x)^n for small and large n.
+  * Fix bugs in internal parser from strings.
+  * Make ginsh evaluate line-by-line in non-interactive mode.
+  * Several build fixes. 
+  * remove obsolete patch ginac-doc-latex-symbol-error.patch
+    becuase it has applied into source code
+  * update patch ginac-fix-makeindex.patch because one line
+    changed
+
+-------------------------------------------------------------------

Old:
----
  ginac-1.8.6.tar.bz2
  ginac-doc-latex-symbol-error.patch

New:
----
  ginac-1.8.7.tar.bz2

BETA DEBUG BEGIN:
  Old:  * Several build fixes. 
  * remove obsolete patch ginac-doc-latex-symbol-error.patch
    becuase it has applied into source code
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ginac.spec ++++++
--- /var/tmp/diff_new_pack.u95SpC/_old  2024-01-03 12:23:51.208990092 +0100
+++ /var/tmp/diff_new_pack.u95SpC/_new  2024-01-03 12:23:51.212990238 +0100
@@ -38,7 +38,7 @@
 
 %define library_version 11
 Name:           %{srcname}%{?pkg_suffix}
-Version:        1.8.6
+Version:        1.8.7
 Release:        0
 Summary:        C++ library for symbolic calculations
 License:        GPL-2.0-only
@@ -48,8 +48,6 @@
 Patch0:         ginac-fix-makeindex.patch
 # PATCH-FIX-UPSTREAM ginac-cmake-install-doc.patch [email protected] -- 
Install man and other documentation files when cmake is used for building
 Patch1:         ginac-cmake-install-doc.patch
-# PATCH-FIX-UPSTREAM ginac-doc-latex-symbol-error.patch [email protected] 
-- Change a math symbol to get pdflatex to build reference.pdf correctly
-Patch2:         ginac-doc-latex-symbol-error.patch
 BuildRequires:  bison
 BuildRequires:  cln-devel
 BuildRequires:  cmake

++++++ ginac-1.8.6.tar.bz2 -> ginac-1.8.7.tar.bz2 ++++++
++++ 1602 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/AUTHORS new/ginac-1.8.7/AUTHORS
--- old/ginac-1.8.6/AUTHORS     2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/AUTHORS     2023-02-12 00:40:49.000000000 +0100
@@ -1,5 +1,5 @@
-Contacing the developers
-------------------------
+Contacting the developers
+-------------------------
 
 If you have found a bug, have a patch or a question, or would like to
 make a suggestion please send email to one of our public mailing lists
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/GiNaC.spec new/ginac-1.8.7/GiNaC.spec
--- old/ginac-1.8.6/GiNaC.spec  2023-02-08 20:23:47.000000000 +0100
+++ new/ginac-1.8.7/GiNaC.spec  2023-08-12 18:10:13.000000000 +0200
@@ -1,5 +1,5 @@
 %define name ginac
-%define version 1.8.6
+%define version 1.8.7
 %define release 1
 
 Summary: C++ library for symbolic calculations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/Makefile.am new/ginac-1.8.7/Makefile.am
--- old/ginac-1.8.6/Makefile.am 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/Makefile.am 2023-08-12 18:09:13.000000000 +0200
@@ -17,7 +17,7 @@
              cmake/modules/FindGiNaC.cmake \
              cmake/modules/FindLibDL.cmake
 
-BUILD_HELPERS = scripts/yaptu.py scripts/fixupind.py
+BUILD_HELPERS = scripts/yaptu.py
 
 # All the rest of the distributed files
 EXTRA_DIST = ginac.pc GiNaC.spec $(BUILD_HELPERS) $(CMAKE_FILES)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/NEWS new/ginac-1.8.7/NEWS
--- old/ginac-1.8.6/NEWS        2023-02-08 20:11:12.000000000 +0100
+++ new/ginac-1.8.7/NEWS        2023-08-12 17:40:31.000000000 +0200
@@ -1,5 +1,11 @@
 This file records noteworthy changes.
 
+1.8.7 (12 August 2023)
+* Fix series expansion of polynomial(x)^n for small and large n.
+* Fix bugs in internal parser from strings.
+* Make ginsh evaluate line-by-line in non-interactive mode.
+* Several build fixes.
+
 1.8.6 (8 February 2023)
 * Fix wrong numeric info on transcendental functions.
 * Fix crash of evaluation of binomial(n, k) with negative integer n, k.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/check/exam_parser.cpp new/ginac-1.8.7/check/exam_parser.cpp
--- old/ginac-1.8.6/check/exam_parser.cpp       2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/check/exam_parser.cpp       2023-06-20 22:23:55.000000000 
+0200
@@ -98,6 +98,104 @@
        }
 }
 
+// Check that two strings parse to equal expressions.
+static int check_eq(ostream &err_str, parser &reader, const char *expr1, const 
char *expr2)
+{
+       const string srep1(expr1);
+       const string srep2(expr2);
+       ex e1, e2;
+       try{ e1 = reader(srep1); } catch (const exception &e) {
+               err_str << "\"" << srep1 << "\" failed to parse: "
+                       << e.what() << endl;
+               return 1;
+       }
+       try{ e2 = reader(srep2); } catch (const exception &e) {
+               err_str << "\"" << srep2 << "\" failed to parse: "
+                       << e.what() << endl;
+               return 1;
+       }
+       if (!(e1-e2).expand().is_zero()) {
+               err_str << "\"" << srep1 << "\" was misparsed as \""
+                       << e1 << "\"" << endl;
+               return 1;
+       }
+       return 0;
+}
+
+// Tests for the interaction of the '^' operator with
+// the unary '+' and the unary '-' operators
+static int check5(ostream& err_str)
+{
+       parser reader;
+       return
+               +check_eq(err_str, reader, "3^2+1", "10")
+               +check_eq(err_str, reader, "3^+2-1", "8")
+               +check_eq(err_str, reader, "3^-2+1", "10/9")
+               +check_eq(err_str, reader, "3^-2/5", "1/45")
+               +check_eq(err_str, reader, "3^-2*5", "5/9")
+               +check_eq(err_str, reader, "3^-2-5", "-44/9")
+               +check_eq(err_str, reader, "3^(-2)+1", "10/9")
+               +check_eq(err_str, reader, "(3)^(-2)+1", "10/9")
+               +check_eq(err_str, reader, "+3^2+1", "10")
+               +check_eq(err_str, reader, "+3^+2+1", "10")
+               +check_eq(err_str, reader, "+3^-2+1", "10/9")
+               +check_eq(err_str, reader, "+3^-2/5", "1/45")
+               +check_eq(err_str, reader, "+3^-2*5", "5/9")
+               +check_eq(err_str, reader, "+3^-2-5", "-44/9")
+               +check_eq(err_str, reader, "-3^2+1", "-8")
+               +check_eq(err_str, reader, "-3^+2+1", "-8")
+               +check_eq(err_str, reader, "-3^-2+1", "8/9")
+               +check_eq(err_str, reader, "-3^-2/3", "-1/27")
+               +check_eq(err_str, reader, "1+2^3^4", "1+(2^81)")
+               +check_eq(err_str, reader, "2^3^4+1", "1+(2^81)")
+               +check_eq(err_str, reader, "2^+3^4+1", "1+(2^81)")
+               +check_eq(err_str, reader, "2^3^+4+1", "1+(2^81)");
+}
+
+// Tests for the interaction of the '*' operator with
+// the unary '+' and the unary '-' operators
+static int check6(ostream& err_str)
+{
+       parser reader;
+       return
+               +check_eq(err_str, reader, "3*+2-1", "5")
+               +check_eq(err_str, reader, "3*2+1", "7")
+               +check_eq(err_str, reader, "3*+2+1", "7")
+               +check_eq(err_str, reader, "3*-2+1", "-5")
+               +check_eq(err_str, reader, "3*-2/5", "-6/5")
+               +check_eq(err_str, reader, "3*-2*5", "-30")
+               +check_eq(err_str, reader, "3*-2-5", "-11")
+               +check_eq(err_str, reader, "3*(-2)+1", "-5")
+               +check_eq(err_str, reader, "(3)*(-2)+1", "-5")
+               +check_eq(err_str, reader, "+3*2+1", "7")
+               +check_eq(err_str, reader, "+3*+2+1", "7")
+               +check_eq(err_str, reader, "+3*-2+1", "-5")
+               +check_eq(err_str, reader, "+3*-2/5", "-6/5")
+               +check_eq(err_str, reader, "+3*-2*5", "-30")
+               +check_eq(err_str, reader, "+3*-2-5", "-11")
+               +check_eq(err_str, reader, "-3*2+1", "-5")
+               +check_eq(err_str, reader, "-3*+2+1", "-5")
+               +check_eq(err_str, reader, "-3*-2+1", "7")
+               +check_eq(err_str, reader, "-3*-2/3", "2")
+               +check_eq(err_str, reader, "1+2*3*4", "25")
+               +check_eq(err_str, reader, "2*3*4+1", "25")
+               +check_eq(err_str, reader, "2*+3*4+1", "25")
+               +check_eq(err_str, reader, "2*3*+4+1", "25");
+}
+
+// Tests for nested unary + and unary -
+static int check7(ostream& err_str)
+{
+       parser reader;
+       return
+               +check_eq(err_str, reader, "+1", "1")
+               +check_eq(err_str, reader, "++1", "1")
+               +check_eq(err_str, reader, "+-+1", "-1")
+               +check_eq(err_str, reader, "+-+-1", "1")
+               +check_eq(err_str, reader, "+-+-+1", "1")
+               +check_eq(err_str, reader, "100++--+1+10", "111");
+}
+
 int main(int argc, char** argv)
 {
        cout << "examining old parser bugs" << flush;
@@ -107,6 +205,9 @@
        errors += check2(err_str);  cout << '.' << flush;
        errors += check3(err_str);  cout << '.' << flush;
        errors += check4(err_str);  cout << '.' << flush;
+       errors += check5(err_str);  cout << '.' << flush;
+       errors += check6(err_str);  cout << '.' << flush;
+       errors += check7(err_str);  cout << '.' << flush;
        if (errors) {
                cout << "Yes, unfortunately:" << endl;
                cout << err_str.str();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/check/exam_pseries.cpp new/ginac-1.8.7/check/exam_pseries.cpp
--- old/ginac-1.8.6/check/exam_pseries.cpp      2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/check/exam_pseries.cpp      2023-08-06 19:01:10.000000000 
+0200
@@ -390,6 +390,24 @@
        return result;
 }
 
+// Test expansion of powers of polynomials.
+static unsigned exam_series15()
+{
+       unsigned result = 0;
+
+       ex e = pow(x + pow(x,2), 2);
+
+       result += check_series(e, 0, Order(1), 0);
+       result += check_series(e, 0, Order(x), 1);
+       result += check_series(e, 0, Order(pow(x,2)), 2);
+       result += check_series(e, 0, pow(x,2) + Order(pow(x,3)), 3);
+       result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + Order(pow(x,4)), 
4);
+       result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + pow(x,4), 5);
+       result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + pow(x,4), 6);
+
+       return result;
+}
+
 unsigned exam_pseries()
 {
        unsigned result = 0;
@@ -410,6 +428,7 @@
        result += exam_series12();  cout << '.' << flush;
        result += exam_series13();  cout << '.' << flush;
        result += exam_series14();  cout << '.' << flush;
+       result += exam_series15();  cout << '.' << flush;
        
        return result;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/config/test-driver new/ginac-1.8.7/config/test-driver
--- old/ginac-1.8.6/config/test-driver  2018-10-12 20:59:28.000000000 +0200
+++ new/ginac-1.8.7/config/test-driver  2023-08-12 17:38:26.000000000 +0200
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -42,11 +42,13 @@
 {
   cat <<END
 Usage:
-  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
-              [--expect-failure={yes|no}] [--color-tests={yes|no}]
-              [--enable-hard-errors={yes|no}] [--]
+  test-driver --test-name NAME --log-file PATH --trs-file PATH
+              [--expect-failure {yes|no}] [--color-tests {yes|no}]
+              [--enable-hard-errors {yes|no}] [--]
               TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
 The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
 END
 }
 
@@ -103,8 +105,14 @@
 trap "st=141; $do_exit" 13
 trap "st=143; $do_exit" 15
 
-# Test script is run here.
-"$@" >$log_file 2>&1
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+case "$1" in
+  *.sh) sh "$@" >>"$log_file" 2>&1 ;;
+  *)    "$@" >>"$log_file" 2>&1 ;;
+esac
 estatus=$?
 
 if test $enable_hard_errors = no && test $estatus -eq 99; then
@@ -126,7 +134,7 @@
 # know whether the test passed or failed simply by looking at the '.log'
 # file, without the need of also peaking into the corresponding '.trs'
 # file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>$log_file
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
 
 # Report outcome to console.
 echo "${col}${res}${std}: $test_name"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/configure.ac new/ginac-1.8.7/configure.ac
--- old/ginac-1.8.6/configure.ac        2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/configure.ac        2023-02-11 15:24:37.000000000 +0100
@@ -74,7 +74,7 @@
 AC_PATH_PROG(MAKEINDEX, makeindex, "")
 AC_PATH_PROG(MAKEINFO, makeinfo, "")
 AC_PATH_PROG(DVIPS, dvips, "")
-AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z $"PDFLATEX" -o -z 
"$MAKEINDEX" -o -z "$DVIPS" \)])
+AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z "$PDFLATEX" -o -z 
"$MAKEINDEX" -o -z "$DVIPS" \)])
 AC_PATH_PROG(FIG2DEV, fig2dev, "")
 AM_CONDITIONAL(CONFIG_FIG2DEV, [test ! -z "$FIG2DEV"])
 AS_IF([test -z "$FIG2DEV" -o -z "$MAKEINFO"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/doc/CMakeLists.txt new/ginac-1.8.7/doc/CMakeLists.txt
--- old/ginac-1.8.6/doc/CMakeLists.txt  2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/doc/CMakeLists.txt  2023-02-11 18:25:46.000000000 +0100
@@ -35,7 +35,6 @@
        set(_idx ${_dirname}/${_basename}.idx)
        set(_ind ${_dirname}/${_basename}.ind)
        set(_pdf ${_dirname}/${_basename}.pdf)
-       set(_fixupind ${CMAKE_SOURCE_DIR}/scripts/fixupind.py)
        add_custom_command(
                OUTPUT ${_idx}
                COMMAND ${PDFLATEX_COMPILER} ${texfile}
@@ -45,7 +44,6 @@
        add_custom_command(
                OUTPUT ${_ind}
                COMMAND ${MAKEINDEX_COMPILER} ${_idx}
-               COMMAND ${PYTHON} ${_fixupind} ${_idx}
                WORKING_DIRECTORY ${_dirname}
                DEPENDS ${texfile} ${_idx}
                COMMENT "MAKEINDEX ${_basename}.idx")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/doc/reference/Makefile.am 
new/ginac-1.8.7/doc/reference/Makefile.am
--- old/ginac-1.8.6/doc/reference/Makefile.am   2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/doc/reference/Makefile.am   2023-02-11 18:25:54.000000000 
+0100
@@ -53,7 +53,6 @@
                cd pdflatex; \
          ${PDFLATEX} reference.tex ;\
          ${MAKEINDEX} reference.idx ;\
-         ${PYTHON} $(abs_top_srcdir)/scripts/fixupind.py reference.ind; \
          ${PDFLATEX} reference.tex
 
 reference.dvi: latex latex/reference.dvi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/doc/tutorial/ginac.info new/ginac-1.8.7/doc/tutorial/ginac.info
--- old/ginac-1.8.6/doc/tutorial/ginac.info     2023-02-08 20:24:55.000000000 
+0100
+++ new/ginac-1.8.7/doc/tutorial/ginac.info     2023-08-12 18:10:31.000000000 
+0200
@@ -5,7 +5,7 @@
 * ginac: (ginac).                   C++ library for symbolic computation.
 END-INFO-DIR-ENTRY
 
-This is a tutorial that documents GiNaC 1.8.6, an open framework for
+This is a tutorial that documents GiNaC 1.8.7, an open framework for
 symbolic computation within the C++ programming language.
 
 Copyright (C) 1999-2023 Johannes Gutenberg University Mainz, Germany
@@ -25,7 +25,7 @@
 GiNaC
 *****
 
-This is a tutorial that documents GiNaC 1.8.6, an open framework for
+This is a tutorial that documents GiNaC 1.8.7, an open framework for
 symbolic computation within the C++ programming language.
 
 * Menu:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/doc/tutorial/stamp-vti new/ginac-1.8.7/doc/tutorial/stamp-vti
--- old/ginac-1.8.6/doc/tutorial/stamp-vti      2023-02-08 20:24:55.000000000 
+0100
+++ new/ginac-1.8.7/doc/tutorial/stamp-vti      2023-08-12 18:10:30.000000000 
+0200
@@ -1,4 +1,4 @@
 @set UPDATED 1 January 2023
 @set UPDATED-MONTH January 2023
-@set EDITION 1.8.6
-@set VERSION 1.8.6
+@set EDITION 1.8.7
+@set VERSION 1.8.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/doc/tutorial/version.texi 
new/ginac-1.8.7/doc/tutorial/version.texi
--- old/ginac-1.8.6/doc/tutorial/version.texi   2023-02-08 20:24:55.000000000 
+0100
+++ new/ginac-1.8.7/doc/tutorial/version.texi   2023-08-12 18:10:30.000000000 
+0200
@@ -1,4 +1,4 @@
 @set UPDATED 1 January 2023
 @set UPDATED-MONTH January 2023
-@set EDITION 1.8.6
-@set VERSION 1.8.6
+@set EDITION 1.8.7
+@set VERSION 1.8.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/clifford.h new/ginac-1.8.7/ginac/clifford.h
--- old/ginac-1.8.6/ginac/clifford.h    2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/clifford.h    2023-02-11 23:24:55.000000000 +0100
@@ -306,7 +306,7 @@
  *  if e contains at least one, otherwise returns -1 
  *
  *  @param e Expression to be processed
- *  @ignore_ONE defines if clifford_ONE should be ignored in the search*/
+ *  @param ignore_ONE defines if clifford_ONE should be ignored in the search 
*/
 int clifford_max_label(const ex & e, bool ignore_ONE = false);
 
 /** Calculation of the norm in the Clifford algebra. */
@@ -321,9 +321,14 @@
  *  @param mu Index (must be of class varidx or a derived class)
  *  @param metr Metric (should be indexed, tensmetric or a derived class, or a 
matrix)
  *  @param rl Representation label
- *  @param e Clifford unit object
  *  @return Clifford vector with given components */
 ex lst_to_clifford(const ex & v, const ex & mu,  const ex & metr, unsigned 
char rl = 0);
+
+/** List or vector conversion into the Clifford vector.
+ *
+ *  @param v List or vector of coordinates
+ *  @param e Clifford unit object
+ *  @return Clifford vector with given components */
 ex lst_to_clifford(const ex & v, const ex & e);
 
 /** An inverse function to lst_to_clifford(). For given Clifford vector 
extracts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/ex.cpp new/ginac-1.8.7/ginac/ex.cpp
--- old/ginac-1.8.6/ginac/ex.cpp        2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/ex.cpp        2023-02-11 23:22:26.000000000 +0100
@@ -70,6 +70,8 @@
        bp->dbgprinttree();
 }
 
+/** Expand an expression.
+ *  @param options  see GiNaC::expand_options */
 ex ex::expand(unsigned options) const
 {
        if (options == 0 && (bp->flags & status_flags::expanded)) // The 
"expanded" flag only covers the standard options; someone might want to 
re-expand with different options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/excompiler.h new/ginac-1.8.7/ginac/excompiler.h
--- old/ginac-1.8.6/ginac/excompiler.h  2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/excompiler.h  2023-02-11 22:38:05.000000000 +0100
@@ -65,7 +65,8 @@
  * C code equivalent in double precision. The function pointer has type 
FUNCP_2P.
  *
  * @param expr Expression to be compiled
- * @param sym Symbol from the expression to become the function parameter
+ * @param sym1 Symbol from the expression to become the first function 
parameter
+ * @param sym2 Symbol from the expression to become the second function 
parameter
  * @param fp Returned function pointer
  * @param filename Name of the intermediate source code and so-file. If
  * supplied, these intermediate files will not be deleted
@@ -76,8 +77,8 @@
  * Takes an expression and produces a function pointer to the compiled and 
linked
  * C code equivalent in double precision. The function pointer has type 
FUNCP_CUBA.
  *
- * @param expr Expression to be compiled
- * @param sym Symbol from the expression to become the function parameter
+ * @param exprs List of expression to be compiled
+ * @param syms Symbols from the expression to become the function parameters
  * @param fp Returned function pointer
  * @param filename Name of the intermediate source code and so-file. If
  * supplied, these intermediate files will not be deleted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/factor.cpp new/ginac-1.8.7/ginac/factor.cpp
--- old/ginac-1.8.6/ginac/factor.cpp    2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/factor.cpp    2023-02-12 11:20:14.000000000 +0100
@@ -2394,7 +2394,7 @@
                ctx.vn = ctx.pp.collect(x).lcoeff(x);
                ctx.vnlst = put_factors_into_vec(factor(ctx.vn));
 
-               ctx.modulus = (ctx.vnlst.size() > 3) ? ctx.vnlst.size() : 3;
+               ctx.modulus = (ctx.vnlst.size() > 3) ? ctx.vnlst.size() : 
numeric(3);
 
                ctx_in_x.push_back(ctx);
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/factor.h new/ginac-1.8.7/ginac/factor.h
--- old/ginac-1.8.6/ginac/factor.h      2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/factor.h      2023-02-11 22:43:26.000000000 +0100
@@ -36,7 +36,7 @@
  *  functions or polynomials inside function arguments.
  *
  *  @param[in] poly    expression to factorize
- *  @param[in] option  options to influence the factorization
+ *  @param[in] options see GiNaC::factor_options
  *  @return            factorized expression
  */
 extern ex factor(const ex& poly, unsigned options = 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/idx.h new/ginac-1.8.7/ginac/idx.h
--- old/ginac-1.8.6/ginac/idx.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/idx.h 2023-02-11 23:03:52.000000000 +0100
@@ -41,8 +41,7 @@
        /** Construct index with given value and dimension.
         *
         *  @param v Value of index (numeric or symbolic)
-        *  @param dim Dimension of index space (numeric or symbolic)
-        *  @return newly constructed index */
+        *  @param dim Dimension of index space (numeric or symbolic) */
        explicit idx(const ex & v, const ex & dim);
 
        // functions overriding virtual functions from base classes
@@ -119,8 +118,7 @@
         *
         *  @param v Value of index (numeric or symbolic)
         *  @param dim Dimension of index space (numeric or symbolic)
-        *  @param covariant Make covariant index (default is contravariant)
-        *  @return newly constructed index */
+        *  @param covariant Make covariant index (default is contravariant) */
        varidx(const ex & v, const ex & dim, bool covariant = false);
 
        // functions overriding virtual functions from base classes
@@ -169,8 +167,7 @@
         *  @param v Value of index (numeric or symbolic)
         *  @param dim Dimension of index space (numeric or symbolic)
         *  @param covariant Make covariant index (default is contravariant)
-        *  @param dotted Make covariant dotted (default is undotted)
-        *  @return newly constructed index */
+        *  @param dotted Make covariant dotted (default is undotted) */
        spinidx(const ex & v, const ex & dim = 2, bool covariant = false, bool 
dotted = false);
 
        // functions overriding virtual functions from base classes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/indexed.h new/ginac-1.8.7/ginac/indexed.h
--- old/ginac-1.8.6/ginac/indexed.h     2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/indexed.h     2023-02-11 22:47:19.000000000 +0100
@@ -48,23 +48,20 @@
 public:
        /** Construct indexed object with no index.
         *
-        *  @param b Base expression
-        *  @return newly constructed indexed object */
+        *  @param b Base expression */
        indexed(const ex & b);
 
        /** Construct indexed object with one index. The index must be of class 
idx.
         *
         *  @param b Base expression
-        *  @param i1 The index
-        *  @return newly constructed indexed object */
+        *  @param i1 The index */
        indexed(const ex & b, const ex & i1);
 
        /** Construct indexed object with two indices. The indices must be of 
class idx.
         *
         *  @param b Base expression
         *  @param i1 First index
-        *  @param i2 Second index
-        *  @return newly constructed indexed object */
+        *  @param i2 Second index */
        indexed(const ex & b, const ex & i1, const ex & i2);
 
        /** Construct indexed object with three indices. The indices must be of 
class idx.
@@ -72,8 +69,7 @@
         *  @param b Base expression
         *  @param i1 First index
         *  @param i2 Second index
-        *  @param i3 Third index
-        *  @return newly constructed indexed object */
+        *  @param i3 Third index */
        indexed(const ex & b, const ex & i1, const ex & i2, const ex & i3);
 
        /** Construct indexed object with four indices. The indices must be of 
class idx.
@@ -82,8 +78,7 @@
         *  @param i1 First index
         *  @param i2 Second index
         *  @param i3 Third index
-        *  @param i4 Fourth index
-        *  @return newly constructed indexed object */
+        *  @param i4 Fourth index */
        indexed(const ex & b, const ex & i1, const ex & i2, const ex & i3, 
const ex & i4);
 
        /** Construct indexed object with two indices and a specified symmetry. 
The
@@ -92,8 +87,7 @@
         *  @param b Base expression
         *  @param symm Symmetry of indices
         *  @param i1 First index
-        *  @param i2 Second index
-        *  @return newly constructed indexed object */
+        *  @param i2 Second index */
        indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & 
i2);
 
        /** Construct indexed object with three indices and a specified 
symmetry.
@@ -103,8 +97,7 @@
         *  @param symm Symmetry of indices
         *  @param i1 First index
         *  @param i2 Second index
-        *  @param i3 Third index
-        *  @return newly constructed indexed object */
+        *  @param i3 Third index */
        indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & 
i2, const ex & i3);
 
        /** Construct indexed object with four indices and a specified 
symmetry. The
@@ -115,16 +108,14 @@
         *  @param i1 First index
         *  @param i2 Second index
         *  @param i3 Third index
-        *  @param i4 Fourth index
-        *  @return newly constructed indexed object */
+        *  @param i4 Fourth index */
        indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & 
i2, const ex & i3, const ex & i4);
 
        /** Construct indexed object with a specified vector of indices. The 
indices
         *  must be of class idx.
         *
         *  @param b Base expression
-        *  @param iv Vector of indices
-        *  @return newly constructed indexed object */
+        *  @param iv Vector of indices */
        indexed(const ex & b, const exvector & iv);
 
        /** Construct indexed object with a specified vector of indices and
@@ -132,8 +123,7 @@
         *
         *  @param b Base expression
         *  @param symm Symmetry of indices
-        *  @param iv Vector of indices
-        *  @return newly constructed indexed object */
+        *  @param iv Vector of indices */
        indexed(const ex & b, const symmetry & symm, const exvector & iv);
 
        // internal constructors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/inifcns.cpp new/ginac-1.8.7/ginac/inifcns.cpp
--- old/ginac-1.8.6/ginac/inifcns.cpp   2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/inifcns.cpp   2023-08-06 19:44:38.000000000 +0200
@@ -1021,6 +1021,20 @@
        return Order(x).hold();
 }
 
+static ex Order_power(const ex & x, const ex & e)
+{
+       // Order(x)^e -> Order(x^e) for positive integer e
+       if (is_exactly_a<numeric>(e) && e.info(info_flags::posint))
+               return Order(pow(x, e));
+       // NB: For negative exponents, the above could be wrong.
+       // This is because series() produces Order(x^n) to denote the order 
where
+       // it gave up. So, Order(x^n) can also be an x^(n+1) term if the x^n 
term
+       // vanishes. In this situation, 1/Order(x^n) can also be a x^(-n-1) 
term.
+       // Transforming it to Order(x^-n) would miss that.
+
+       return power(Order(x), e).hold();
+}
+
 static ex Order_expl_derivative(const ex & arg, const symbol & s)
 {
        return Order(arg.diff(s));
@@ -1032,7 +1046,8 @@
                          expl_derivative_func(Order_expl_derivative).
                          conjugate_func(Order_conjugate).
                          real_part_func(Order_real_part).
-                         imag_part_func(Order_imag_part));
+                         imag_part_func(Order_imag_part).
+                         power_func(Order_power));
 
 //////////
 // Solve linear system
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/normal.cpp new/ginac-1.8.7/ginac/normal.cpp
--- old/ginac-1.8.6/ginac/normal.cpp    2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/normal.cpp    2023-02-11 22:43:50.000000000 +0100
@@ -1428,6 +1428,7 @@
  *  @param cb pointer to expression that will receive the cofactor of b, or 
nullptr
  *  @param check_args  check whether a and b are polynomials with rational
  *         coefficients (defaults to "true")
+ *  @param options  see GiNaC::gcd_options
  *  @return the GCD as a new expression */
 ex gcd(const ex &a, const ex &b, ex *ca, ex *cb, bool check_args, unsigned 
options)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/numeric.cpp new/ginac-1.8.7/ginac/numeric.cpp
--- old/ginac-1.8.6/ginac/numeric.cpp   2023-02-08 00:02:38.000000000 +0100
+++ new/ginac-1.8.7/ginac/numeric.cpp   2023-02-12 00:09:38.000000000 +0100
@@ -2139,7 +2139,7 @@
 /** The Binomial coefficients.  It computes the binomial coefficients.  For
  *  integer n and k and positive n this is the number of ways of choosing k
  *  objects from n distinct objects.  If n is a negative integer, the formula
- *  binomial(n,k) == (-1)^k*binomial(k-n-1,k) (if k≥0)
+ *  binomial(n,k) == (-1)^k*binomial(k-n-1,k) (if k>=0)
  *  binomial(n,k) == (-1)^(n-k)*binomial(-k-1,n-k) (otherwise)
  *  is used to compute the result. */
 const numeric binomial(const numeric &n, const numeric &k)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/parser/parse_binop_rhs.cpp 
new/ginac-1.8.7/ginac/parser/parse_binop_rhs.cpp
--- old/ginac-1.8.6/ginac/parser/parse_binop_rhs.cpp    2022-12-31 
19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/parser/parse_binop_rhs.cpp    2023-06-20 
22:23:55.000000000 +0200
@@ -114,6 +114,18 @@
        }
 }
 
+/// unary_expr: [+-] expression
+ex parser::parse_unary_expr()
+{
+       // Parse a binary expression with the priority of exponentiation
+       // or higher. Ignore the overall sign, because parse_primary()
+       // handles it for us.
+       get_next_tok(); // Skip [+-]
+       ex lhs = parse_primary();
+       ex e = parse_binop_rhs(get_tok_prec('^'), lhs);
+       return e;
+}
+
 extern const numeric* _num_1_p;
 
 static ex make_minus_expr(const exvector& args)
@@ -137,6 +149,16 @@
        return dynallocate<mul>(args[0], rest);
 }
 
+static ex make_power_expr(const exvector& args)
+{
+       size_t n = args.size();
+       ex p = pow(args[n - 2], args[n - 1]);
+       for (size_t i = n - 2; i > 0; i--) {
+               p = pow(args[i - 1], p);
+       }
+       return p;
+}
+
 static ex make_binop_expr(const int binop, const exvector& args)
 {
        switch (binop) {
@@ -149,11 +171,7 @@
                case '/':
                        return make_divide_expr(args);
                case '^':
-                       if (args.size() != 2)
-                               throw std::invalid_argument(
-                                               std::string(__func__) 
-                                               + ": power should have exactly 
2 operands");
-                       return pow(args[0], args[1]);
+                       return make_power_expr(args);
                default:
                        throw std::invalid_argument(
                                        std::string(__func__) 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/parser/parser.cpp new/ginac-1.8.7/ginac/parser/parser.cpp
--- old/ginac-1.8.6/ginac/parser/parser.cpp     2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/ginac/parser/parser.cpp     2023-06-20 22:23:55.000000000 
+0200
@@ -27,6 +27,7 @@
 #include "mul.h"
 #include "constant.h"
 #include "function.h"
+#include "operators.h"
 
 #include <cstdint> // for uintptr_t
 #include <sstream>
@@ -144,27 +145,6 @@
        return list;
 }
 
-extern const ex _ex0;
-
-/// unary_expr: [+-] expression
-ex parser::parse_unary_expr()
-{
-       // Unlike most other parse_* method this one does NOT consume
-       // current token so parse_binop_rhs() knows what kind of operator
-       // is being parsed.
-       
-       // There are different kinds of expressions which need to be handled:
-       // -a+b 
-       // -(a) 
-       // +a
-       // +(a)
-       // Delegate the work to parse_binop_rhs(), otherwise we end up
-       // duplicating it here. 
-       ex lhs = _ex0; // silly trick
-       ex e = parse_binop_rhs(0, lhs);
-       return e;
-}
-
 /// primary: identifier_expr | number_expr | paren_expr | unary_expr 
 ex parser::parse_primary() 
 {
@@ -178,6 +158,7 @@
                case '{': 
                         return parse_lst_expr();
                case '-':
+                        return -parse_unary_expr();
                case '+':
                         return parse_unary_expr();
                case lexer::token_type::literal:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/pseries.cpp new/ginac-1.8.7/ginac/pseries.cpp
--- old/ginac-1.8.6/ginac/pseries.cpp   2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/pseries.cpp   2023-08-06 19:45:09.000000000 +0200
@@ -66,8 +66,7 @@
  *  non-terminating series.
  *
  *  @param rel_  expansion variable and point (must hold a relational)
- *  @param ops_  vector of {coefficient, power} pairs (coefficient must not be 
zero)
- *  @return newly constructed pseries */
+ *  @param ops_  vector of {coefficient, power} pairs (coefficient must not be 
zero) */
 pseries::pseries(const ex &rel_, const epvector &ops_)
   : seq(ops_)
 {
@@ -993,8 +992,8 @@
        // which can easily be solved given the starting value c_0 = (a_0)^p.
        // For the more general case where the leading coefficient of A(x) is 
not
        // a constant, just consider A2(x) = A(x)*x^m, with some integer m and
-       // repeat the above derivation.  The leading power of C2(x) = A2(x)^2 is
-       // then of course x^(p*m) but the recurrence formula still holds.
+       // repeat the above derivation.  The leading power of C2(x) = A2(x)^p is
+       // then of course a_0^p*x^(p*m) but the recurrence formula still holds.
        
        if (seq.empty()) {
                // as a special case, handle the empty (zero) series honoring 
the
@@ -1006,16 +1005,27 @@
                else
                        return *this;
        }
-       
-       const int ldeg = ldegree(var);
-       if (!(p*ldeg).is_integer())
+
+       const int base_ldeg = ldegree(var);
+       if (!(p*base_ldeg).is_integer())
                throw std::runtime_error("pseries::power_const(): trying to 
assemble a Puiseux series");
+       int new_ldeg = (p*base_ldeg).to_int();
+
+       const int base_deg = degree(var);
+       int new_deg = deg;
+       if (p.is_pos_integer()) {
+               // No need to compute beyond p*base_deg.
+               new_deg = std::min((p*base_deg).to_int(), deg);
+       }
 
        // adjust number of coefficients
-       int numcoeff = deg - (p*ldeg).to_int();
+       int numcoeff = new_deg - new_ldeg;
+       if (new_deg < deg)
+               numcoeff += 1;
+
        if (numcoeff <= 0) {
-               epvector epv { expair(Order(_ex1), deg) };
-               return dynallocate<pseries>(relational(var,point), 
std::move(epv));
+               return dynallocate<pseries>(relational(var, point),
+                                           epvector{{Order(_ex1), deg}});
        }
        
        // O(x^n)^(-m) is undefined
@@ -1025,33 +1035,35 @@
        // Compute coefficients of the powered series
        exvector co;
        co.reserve(numcoeff);
-       co.push_back(pow(coeff(var, ldeg), p));
+       co.push_back(pow(coeff(var, base_ldeg), p));
        for (int i=1; i<numcoeff; ++i) {
                ex sum = _ex0;
                for (int j=1; j<=i; ++j) {
-                       ex c = coeff(var, j + ldeg);
+                       ex c = coeff(var, j + base_ldeg);
                        if (is_order_function(c)) {
                                co.push_back(Order(_ex1));
                                break;
                        } else
                                sum += (p * j - (i - j)) * co[i - j] * c;
                }
-               co.push_back(sum / coeff(var, ldeg) / i);
+               co.push_back(sum / coeff(var, base_ldeg) / i);
        }
        
        // Construct new series (of non-zero coefficients)
        epvector new_seq;
        bool higher_order = false;
        for (int i=0; i<numcoeff; ++i) {
-               if (!co[i].is_zero())
-                       new_seq.emplace_back(expair(co[i], p * ldeg + i));
+               if (!co[i].is_zero()) {
+                       new_seq.emplace_back(expair(co[i], new_ldeg + i));
+               }
                if (is_order_function(co[i])) {
                        higher_order = true;
                        break;
                }
        }
-       if (!higher_order)
-               new_seq.emplace_back(expair(Order(_ex1), p * ldeg + numcoeff));
+       if (!higher_order && new_deg == deg) {
+               new_seq.emplace_back(expair{Order(_ex1), new_deg});
+       }
 
        return pseries(relational(var,point), std::move(new_seq));
 }
@@ -1151,7 +1163,8 @@
 
        if (!(real_ldegree*numexp).is_integer())
                throw std::runtime_error("pseries::power_const(): trying to 
assemble a Puiseux series");
-       ex e = basis.series(r, (order + real_ldegree*(1-numexp)).to_int(), 
options);
+       int extra_terms = (real_ldegree*(1-numexp)).to_int();
+       ex e = basis.series(r, order + std::max(0, extra_terms), options);
        
        ex result;
        try {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac/version.h new/ginac-1.8.7/ginac/version.h
--- old/ginac-1.8.6/ginac/version.h     2023-02-08 20:00:21.000000000 +0100
+++ new/ginac-1.8.7/ginac/version.h     2023-08-12 17:42:15.000000000 +0200
@@ -30,7 +30,7 @@
 #define GINACLIB_MINOR_VERSION 8
 
 /* Micro version of GiNaC */
-#define GINACLIB_MICRO_VERSION 6
+#define GINACLIB_MICRO_VERSION 7
 
 // GiNaC library version information. It has very little to do with GiNaC
 // version number. In particular, library version is OS dependent. 
@@ -56,7 +56,7 @@
 //  * change matrix inverse to use default argument (twice)
 //  * check for interfaces marked as deprecated
 #define GINAC_LT_CURRENT  12
-#define GINAC_LT_REVISION 5
+#define GINAC_LT_REVISION 6
 #define GINAC_LT_AGE      1
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginac.pc new/ginac-1.8.7/ginac.pc
--- old/ginac-1.8.6/ginac.pc    2023-02-08 20:23:47.000000000 +0100
+++ new/ginac-1.8.7/ginac.pc    2023-08-12 18:10:13.000000000 +0200
@@ -5,7 +5,7 @@
 
 Name: GiNaC
 Description: C++ library for symbolic calculations
-Version: 1.8.6
+Version: 1.8.7
 Requires: cln >= 1.2.2
 Libs: -L${libdir} -lginac -Wl,-rpath -Wl,${libdir}
 Cflags: -I${includedir}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginsh/ginsh_lexer.cpp new/ginac-1.8.7/ginsh/ginsh_lexer.cpp
--- old/ginac-1.8.6/ginsh/ginsh_lexer.cpp       2023-02-08 20:24:48.000000000 
+0100
+++ new/ginac-1.8.7/ginsh/ginsh_lexer.cpp       2023-08-12 18:10:30.000000000 
+0200
@@ -2171,8 +2171,16 @@
                        YY_FATAL_ERROR("input in flex scanner failed");
                result = n;
 #endif
-       } else if (((result = fread(buf, 1, max_size, yyin)) == 0) && 
ferror(yyin))
-               YY_FATAL_ERROR("input in flex scanner failed");
+       } else {
+               int c = '*', n;
+               for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != 
'\n'; ++n)
+                       buf[n] = (char)c;
+               if (c == '\n')
+                       buf[n++] = (char)c;
+               if (c == EOF && ferror(yyin))
+                       YY_FATAL_ERROR("input in flex scanner failed");
+               result = n;
+       }
 
        return result;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/ginsh/ginsh_lexer.lpp new/ginac-1.8.7/ginsh/ginsh_lexer.lpp
--- old/ginac-1.8.6/ginsh/ginsh_lexer.lpp       2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/ginsh/ginsh_lexer.lpp       2023-06-21 20:41:54.000000000 
+0200
@@ -203,8 +203,16 @@
                        YY_FATAL_ERROR("input in flex scanner failed");
                result = n;
 #endif
-       } else if (((result = fread(buf, 1, max_size, yyin)) == 0) && 
ferror(yyin))
-               YY_FATAL_ERROR("input in flex scanner failed");
+       } else {
+               int c = '*', n;
+               for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != 
'\n'; ++n)
+                       buf[n] = (char)c;
+               if (c == '\n')
+                       buf[n++] = (char)c;
+               if (c == EOF && ferror(yyin))
+                       YY_FATAL_ERROR("input in flex scanner failed");
+               result = n;
+       }
 
        return result;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/m4/ax_cxx_compile_stdcxx.m4 
new/ginac-1.8.7/m4/ax_cxx_compile_stdcxx.m4
--- old/ginac-1.8.6/m4/ax_cxx_compile_stdcxx.m4 2022-12-31 19:47:20.000000000 
+0100
+++ new/ginac-1.8.7/m4/ax_cxx_compile_stdcxx.m4 2023-08-12 17:32:38.000000000 
+0200
@@ -43,7 +43,7 @@
 #   and this notice are preserved.  This file is offered as-is, without any
 #   warranty.
 
-#serial 15
+#serial 18
 
 dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
 dnl  (serial version number 13).
@@ -104,9 +104,18 @@
     dnl HP's aCC needs +std=c++11 according to:
     dnl 
http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
     dnl Cray's crayCC needs "-h std=c++11"
+    dnl MSVC needs -std:c++NN for C++17 and later (default is C++14)
     for alternative in ${ax_cxx_compile_alternatives}; do
-      for switch in -std=c++${alternative} +std=c++${alternative} "-h 
std=c++${alternative}"; do
-        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h 
std=c++${alternative}" MSVC; do
+        if test x"$switch" = xMSVC; then
+          dnl AS_TR_SH maps both `:` and `=` to `_` so -std:c++17 would collide
+          dnl with -std=c++17.  We suffix the cache variable name with _MSVC to
+          dnl avoid this.
+          switch=-std:c++${alternative}
+          cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_${switch}_MSVC])
+        else
+          cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+        fi
         AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
                        $cachevar,
           [ac_save_CXX="$CXX"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/m4/lib-link.m4 new/ginac-1.8.7/m4/lib-link.m4
--- old/ginac-1.8.6/m4/lib-link.m4      2023-02-08 20:20:49.000000000 +0100
+++ new/ginac-1.8.7/m4/lib-link.m4      2023-08-12 17:37:07.000000000 +0200
@@ -224,7 +224,7 @@
     additional_libdir3=
   fi
   dnl Search the library and its dependencies in $additional_libdir and
-  dnl $LDFLAGS. Using breadth-first-seach.
+  dnl $LDFLAGS. Use breadth-first search.
   LIB[]NAME=
   LTLIB[]NAME=
   INC[]NAME=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/m4/libtool.m4 new/ginac-1.8.7/m4/libtool.m4
--- old/ginac-1.8.6/m4/libtool.m4       2022-12-19 21:12:39.000000000 +0100
+++ new/ginac-1.8.7/m4/libtool.m4       2023-08-12 17:34:17.000000000 +0200
@@ -1,6 +1,6 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
-#   Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+#   Copyright (C) 1996-2001, 2003-2019, 2021-2023 Free Software
 #   Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
@@ -1368,7 +1368,7 @@
   ;;
 
 x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*)
   # Find out what ABI is being produced by ac_compile, and set linker
   # options accordingly.  Note that the listed cases only cover the
   # situations where additional linker options are needed (such as when
@@ -1383,7 +1383,7 @@
          x86_64-*kfreebsd*-gnu)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
-         x86_64-*linux*)
+         x86_64-*linux*|x86_64-gnu*)
            case `$FILECMD conftest.o` in
              *x86-64*)
                LD="${LD-ld} -m elf32_x86_64"
@@ -1412,7 +1412,7 @@
          x86_64-*kfreebsd*-gnu)
            LD="${LD-ld} -m elf_x86_64_fbsd"
            ;;
-         x86_64-*linux*)
+         x86_64-*linux*|x86_64-gnu*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
          powerpcle-*linux*)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ginac-1.8.6/scripts/fixupind.py new/ginac-1.8.7/scripts/fixupind.py
--- old/ginac-1.8.6/scripts/fixupind.py 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/scripts/fixupind.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-
-# encoding: utf-8
-# TeX Live 2012 seems to dislike files produces by doxygen (1.8.x.y)
-# In particular, makeindex(1) program creates invalid index entries like
-# \hyperpage{NNN_}
-# (note the trailing underscore in the page number). This breaks automatic
-# builds and is very annoying. Hence this script. It replaces (broken)
-# \hyperpage{NNN_} with \hyperpage{NNN}.
-# Note: this is an ugly work around, a proper fix is welcome.
-import sys, os, re
-
-def fixupind(fname):
-       """ Fix \\hyperpage{NNN_} entries in the ind file @var{fname} """
-       tmpout = fname + '.tmp'
-       inp = open(fname)
-       out = open(tmpout, 'wt')
-       rx = re.compile('(hyperpage)[{]([0-9]+)[_][}]')
-       for line in inp:
-               out.write(re.sub(rx, '\\1{\\2}', line))
-       out.flush()
-       out.close()
-       inp.close()
-       os.rename(tmpout, fname)
-
-if __name__ == '__main__':
-       if len(sys.argv) <= 1:
-               sys.exit(1)
-       fixupind(sys.argv[1])
-       sys.exit(0)
-

++++++ ginac-fix-makeindex.patch ++++++
--- /var/tmp/diff_new_pack.u95SpC/_old  2024-01-03 12:23:51.829012752 +0100
+++ /var/tmp/diff_new_pack.u95SpC/_new  2024-01-03 12:23:51.833012898 +0100
@@ -10,5 +10,5 @@
 +      set(_idx ${_basename}.idx)
        set(_ind ${_dirname}/${_basename}.ind)
        set(_pdf ${_dirname}/${_basename}.pdf)
-       set(_fixupind ${CMAKE_SOURCE_DIR}/scripts/fixupind.py)
+       add_custom_command(
 

Reply via email to