Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mpfrcx for openSUSE:Factory checked 
in at 2021-05-08 22:07:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mpfrcx (Old)
 and      /work/SRC/openSUSE:Factory/.mpfrcx.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mpfrcx"

Sat May  8 22:07:28 2021 rev:2 rq:891330 version:0.6.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/mpfrcx/mpfrcx.changes    2020-09-22 
21:14:27.320101276 +0200
+++ /work/SRC/openSUSE:Factory/.mpfrcx.new.2988/mpfrcx.changes  2021-05-08 
22:08:37.645428248 +0200
@@ -1,0 +2,6 @@
+Fri May  7 14:28:21 UTC 2021 - Jan Engelhardt <jeng...@inai.de>
+
+- Update to release 0.6.1
+  * No changelog was provided.
+
+-------------------------------------------------------------------

Old:
----
  mpfrcx-0.6.tar.gz
  mpfrcx-0.6.tar.gz.asc

New:
----
  mpfrcx-0.6.1.tar.gz
  mpfrcx-0.6.1.tar.gz.asc

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

Other differences:
------------------
++++++ mpfrcx.spec ++++++
--- /var/tmp/diff_new_pack.6KWbnf/_old  2021-05-08 22:08:38.081426360 +0200
+++ /var/tmp/diff_new_pack.6KWbnf/_new  2021-05-08 22:08:38.081426360 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package mpfrcx
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 Name:           mpfrcx
 %define lname  libmpfrcx1
-Version:        0.6
+Version:        0.6.1
 Release:        0
 Summary:        Multi-precision floating-point arithmetic of univariate 
polynomials
 License:        LGPL-3.0-or-later

++++++ mpfrcx-0.6.tar.gz -> mpfrcx-0.6.1.tar.gz ++++++
++++ 14350 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/mpfrcx-0.6/NEWS new/mpfrcx-0.6.1/NEWS
--- old/mpfrcx-0.6/NEWS 2020-07-27 18:34:11.000000000 +0200
+++ new/mpfrcx-0.6.1/NEWS       2021-04-26 17:21:19.000000000 +0200
@@ -1,3 +1,12 @@
+Changes in version 0.6.1:
+   - Bugs
+     * In mpfrcx_tower_decomposition, correct the check whether a relative
+       minimal polynomial is real or the complex conjugate of another one.
+     * In mpfrcx_tower_decomposition and mpcx_tower_decomposition, prevent
+       its arguments from being modified by the recursion; for the former
+       function, this could cause access to non-initialised variables and
+       was a real bug.
+
 Changes in version 0.6:
    - new functions mpfrx_eval and mpcx_eval for evaluating polynomials
      in a single argument using a Horner scheme; this complements the
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/mpfrcx-0.6/README new/mpfrcx-0.6.1/README
--- old/mpfrcx-0.6/README       2020-07-24 13:09:20.000000000 +0200
+++ new/mpfrcx-0.6.1/README     2020-08-18 16:03:49.000000000 +0200
@@ -18,8 +18,8 @@
 
 1. In the directory of the MPFRCX archive, type
 
-      tar xzf mpfrcx-0.6.tar.gz
-      cd mpfrcx-0.6
+      tar xzf mpfrcx-0.6.1.tar.gz
+      cd mpfrcx-0.6.1
       ./configure
       make
 
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/mpfrcx-0.6/config.h.in new/mpfrcx-0.6.1/config.h.in
--- old/mpfrcx-0.6/config.h.in  2020-08-18 15:16:44.000000000 +0200
+++ new/mpfrcx-0.6.1/config.h.in        2021-04-29 12:09:02.000000000 +0200
@@ -10,9 +10,6 @@
    to 0 otherwise. */
 #undef HAVE_MALLOC
 
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
 /* Define to 1 if your system has a GNU libc compatible `realloc' function,
    and to 0 otherwise. */
 #undef HAVE_REALLOC
@@ -20,6 +17,9 @@
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
@@ -74,7 +74,9 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
 /* Version number of package */
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/mpfrcx-0.6/configure.ac new/mpfrcx-0.6.1/configure.ac
--- old/mpfrcx-0.6/configure.ac 2020-08-18 15:11:34.000000000 +0200
+++ new/mpfrcx-0.6.1/configure.ac       2021-04-29 12:17:11.000000000 +0200
@@ -1,7 +1,7 @@
 /*
 configure.ac
 
-Copyright (C) 2009, 2010, 2011, 2012, 2013, 2017, 2018, 2020 Andreas Enge
+Copyright (C) 2009, 2010, 2011, 2012, 2013, 2017, 2018, 2020, 2021 Andreas Enge
 
 This file is part of the MPFRCX Library.
 
@@ -23,7 +23,7 @@
 
 
 AC_PREREQ(2.61)
-AC_INIT(mpfrcx, 0.6, andreas.e...@inria.fr)
+AC_INIT(mpfrcx, 0.6.1, andreas.e...@inria.fr)
 AC_CONFIG_SRCDIR([src/mpfrcx-impl.h])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_HEADER([config.h])
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/mpfrcx-0.6/doc/mpfrcx.info new/mpfrcx-0.6.1/doc/mpfrcx.info
--- old/mpfrcx-0.6/doc/mpfrcx.info      2020-08-18 15:19:28.000000000 +0200
+++ new/mpfrcx-0.6.1/doc/mpfrcx.info    2021-04-29 12:13:02.000000000 +0200
@@ -2,10 +2,10 @@
 
 This manual is for MPFRCX, a library for the arithmetic of polynomials
 with multiple precision real or complex floating point coefficients,
-version 0.6 of August 2020.
+version 0.6.1 of April 2021.
 
-   Copyright ?? 2007, 2008, 2009, 2010, 2011, 2012, 2017, 2018, 2020
-Andreas Enge
+   Copyright ?? 2007, 2008, 2009, 2010, 2011, 2012, 2017, 2018, 2020,
+2021 Andreas Enge
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -23,7 +23,7 @@
 ******
 
 This manual documents how to install and use the Multiple Precision Real
-and Complex Polynomial Library, version 0.6 as of August 2020.
+and Complex Polynomial Library, version 0.6.1 as of April 2021.
 
 * Menu:
 
@@ -81,9 +81,9 @@
 
    Here are the steps needed to install the library on Unix systems:
 
-  1. ???tar xzf mpfrcx-0.6.tar.gz???
+  1. ???tar xzf mpfrcx-0.6.1.tar.gz???
 
-  2. ???cd mpfrcx-0.6???
+  2. ???cd mpfrcx-0.6.1???
 
   3. ???./configure???
 
@@ -792,6 +792,14 @@
 group; then L_0=K, so that alongside the extension L/Q, we have also
 decomposed the Galois extension L/K.
 
+   For the decomposition to work, we furthermore assume an ordering of
+the Galois group elements (g_0, ..., g_{h-1}) (or, more precisely, of
+the complex embeddings (x_0, ..., x_{h-1}) this ordering induces) that
+is compatible with the decomposition series: g_0= id, and the first
+|H_{i-1}| entries are the concatenation of the |H_{i-1}|/|H_i| cosets of
+length |H_i| of H_i in H_{i-1}.  (This implies that in particular the
+first |H_i| entries contain H_i itself.)
+
    Galois field towers are stored in variables of type ???mpcx_tower_t???;
 again, pointers to modifiable or unmodifiable towers exist, of types
 ???mpcx_tower_ptr??? and ???mpcx_tower_srcptr???, respectively.  The type is
@@ -1086,11 +1094,11 @@
                                                               (line  16)
 * mpcx_t:                                MPFRCX Basics.       (line  25)
 * mpcx_tower_clear:                      Functions for Galois Field Towers.
-                                                              (line  76)
+                                                              (line  84)
 * mpcx_tower_decomposition:              Functions for Galois Field Towers.
-                                                              (line  79)
+                                                              (line  87)
 * mpcx_tower_init:                       Functions for Galois Field Towers.
-                                                              (line  69)
+                                                              (line  77)
 * mpcx_tree_clear:                       Tree Based Functions.
                                                               (line  29)
 * mpcx_tree_get_root:                    Tree Based Functions.
@@ -1114,7 +1122,7 @@
 * mpfrcx_subproducttree_from_roots:      Tree Based Functions.
                                                               (line 186)
 * mpfrcx_tower_decomposition:            Functions for Galois Field Towers.
-                                                              (line 145)
+                                                              (line 153)
 * mpfrx_add:                             Basic Polynomial Arithmetic.
                                                               (line   6)
 * mpfrx_clear:                           Initialisation Functions.
@@ -1180,9 +1188,9 @@
                                                               (line  15)
 * mpfrx_t:                               MPFRCX Basics.       (line  14)
 * mpfrx_tower_clear:                     Functions for Galois Field Towers.
-                                                              (line 142)
+                                                              (line 150)
 * mpfrx_tower_init:                      Functions for Galois Field Towers.
-                                                              (line 140)
+                                                              (line 148)
 * mpfrx_tree_clear:                      Tree Based Functions.
                                                               (line  28)
 * mpfrx_tree_get_root:                   Tree Based Functions.
@@ -1677,28 +1685,28 @@
 
 
 Tag Table:
-Node: Top791
-Node: Copying1526
-Node: Introduction to MPFRCX2202
-Node: Installing MPFRCX2559
-Node: Reporting Bugs5996
-Node: MPFRCX Basics7070
-Node: Functions10218
-Node: Initialisation Functions10901
-Node: Assignment Functions12371
-Node: Simultaneous Init & Assign13472
-Node: Access Functions13904
-Node: Comparison and Miscellaneous Functions15926
-Node: I/O Functions17653
-Node: Basic Polynomial Arithmetic18801
-Node: Higher Level Functions21186
-Node: Tree Based Functions22114
-Node: Functions for Galois Field Towers33450
-Node: Contributors42256
-Node: References42505
-Node: Concept Index43665
-Node: Function Index46159
-Node: GNU Free Documentation License59504
+Node: Top798
+Node: Copying1534
+Node: Introduction to MPFRCX2210
+Node: Installing MPFRCX2567
+Node: Reporting Bugs6008
+Node: MPFRCX Basics7082
+Node: Functions10230
+Node: Initialisation Functions10913
+Node: Assignment Functions12383
+Node: Simultaneous Init & Assign13484
+Node: Access Functions13916
+Node: Comparison and Miscellaneous Functions15938
+Node: I/O Functions17665
+Node: Basic Polynomial Arithmetic18813
+Node: Higher Level Functions21198
+Node: Tree Based Functions22126
+Node: Functions for Galois Field Towers33462
+Node: Contributors42733
+Node: References42982
+Node: Concept Index44142
+Node: Function Index46636
+Node: GNU Free Documentation License59981
 
 End Tag Table
 
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/mpfrcx-0.6/doc/mpfrcx.texi new/mpfrcx-0.6.1/doc/mpfrcx.texi
--- old/mpfrcx-0.6/doc/mpfrcx.texi      2020-08-18 15:19:24.000000000 +0200
+++ new/mpfrcx-0.6.1/doc/mpfrcx.texi    2021-04-29 12:10:38.000000000 +0200
@@ -14,7 +14,7 @@
 with multiple precision real or complex floating point coefficients,
 version @value{VERSION} of @value{UPDATED-MONTH}.
 
-Copyright @copyright{} 2007, 2008, 2009, 2010, 2011, 2012, 2017, 2018, 2020 
Andreas Enge
+Copyright @copyright{} 2007, 2008, 2009, 2010, 2011, 2012, 2017, 2018, 2020, 
2021 Andreas Enge
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -823,6 +823,15 @@
 @math{L_0=K}, so that alongside the extension @math{L/Q}, we have also
 decomposed the Galois extension @math{L/K}.
 
+For the decomposition to work, we furthermore assume an ordering of the
+Galois group elements @math{(g_0, ..., g_{h-1})} (or, more precisely, of
+the complex embeddings @math{(x_0, ..., x_{h-1})} this ordering induces)
+that is compatible with the decomposition series:
+@math{g_0=} id, and the first @math{|H_{i-1}|} entries are the concatenation
+of the @math{|H_{i-1}|/|H_i|} cosets of length @math{|H_i|} of @math{H_i}
+in @math{H_{i-1}}. (This implies that in particular the first @math{|H_i|}
+entries contain @math{H_i} itself.)
+
 Galois field towers are stored in variables of type
 @code{mpcx_tower_t}; again, pointers to modifiable or unmodifiable
 towers exist, of types @code{mpcx_tower_ptr} and @code{mpcx_tower_srcptr},
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/mpfrcx-0.6/doc/stamp-vti new/mpfrcx-0.6.1/doc/stamp-vti
--- old/mpfrcx-0.6/doc/stamp-vti        2020-08-18 15:19:27.000000000 +0200
+++ new/mpfrcx-0.6.1/doc/stamp-vti      2021-04-29 12:26:23.000000000 +0200
@@ -1,4 +1,4 @@
-@set UPDATED 18 August 2020
-@set UPDATED-MONTH August 2020
-@set EDITION 0.6
-@set VERSION 0.6
+@set UPDATED 29 April 2021
+@set UPDATED-MONTH April 2021
+@set EDITION 0.6.1
+@set VERSION 0.6.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/mpfrcx-0.6/doc/version.texi new/mpfrcx-0.6.1/doc/version.texi
--- old/mpfrcx-0.6/doc/version.texi     2020-08-18 15:19:27.000000000 +0200
+++ new/mpfrcx-0.6.1/doc/version.texi   2021-04-29 12:13:02.000000000 +0200
@@ -1,4 +1,4 @@
-@set UPDATED 18 August 2020
-@set UPDATED-MONTH August 2020
-@set EDITION 0.6
-@set VERSION 0.6
+@set UPDATED 29 April 2021
+@set UPDATED-MONTH April 2021
+@set EDITION 0.6.1
+@set VERSION 0.6.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/mpfrcx-0.6/src/Makefile.am new/mpfrcx-0.6.1/src/Makefile.am
--- old/mpfrcx-0.6/src/Makefile.am      2020-08-18 15:14:44.000000000 +0200
+++ new/mpfrcx-0.6.1/src/Makefile.am    2021-04-29 12:08:46.000000000 +0200
@@ -1,6 +1,6 @@
 ## src/Makefile.am -- Process this file with automake to produce Makefile.in
 lib_LTLIBRARIES = libmpfrcx.la
-libmpfrcx_la_LDFLAGS = -version-info 3:0:2
+libmpfrcx_la_LDFLAGS = -version-info 3:1:2
 
 F_COPYSOURCES = \
    f_init.c f_clear.c f_realloc.c f_set.c f_init_set.c f_mv.c f_swap.c \
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/mpfrcx-0.6/src/c_tower.c new/mpfrcx-0.6.1/src/c_tower.c
--- old/mpfrcx-0.6/src/c_tower.c        2018-05-24 10:38:20.000000000 +0200
+++ new/mpfrcx-0.6.1/src/c_tower.c      2021-04-26 17:21:19.000000000 +0200
@@ -4,7 +4,7 @@
 functions working with towers of abelian extensions of \Q (\sqrt D),
 where D is a negative discriminant
 
-Copyright (C) 2017, 2018 Andreas Enge
+Copyright (C) 2017, 2018, 2021 Andreas Enge
 Copyright (C) 2017 Jared Asuncion (INRIA)
 
 This file is part of the MPFRCX Library.
@@ -186,7 +186,8 @@
       defining the levels-1 relative extensions from the top and V contains
       a polynomial defining the first absolute extension.
       All precisions should be the same; practically we take it from V.
-   */
+      This function modifies roots in preparation for recursive calls. */
+
 {
    int i, j, m, n, found;
    mpfr_prec_t prec;
@@ -283,11 +284,27 @@
       that of twr.
       Compute the absolute and relative field representations in twr. */
 {
+   mpfr_prec_t prec;
+   mpc_t *r;
+   int i;
+
    if (twr->levels == 1)
       mpcx_reconstruct_from_roots (twr->W [0][0], roots, twr->d [0]);
-   else
+   else {
+      /* Copy roots and make sure that all its entries are initialised,
+         since they are accessed and overwritten during recursion. */
+      prec = mpcx_get_prec (twr->W [0][0]);
+      r = (mpc_t *) malloc (twr->deg * sizeof (mpc_t));
+      for (i = 0; i < twr->deg; i++) {
+         mpc_init2 (r [i], prec);
+         mpc_set (r [i], roots [i], MPC_RNDNN);
+      }
       mpcx_tower_decomposition_rec (twr->levels, twr->d,
-         twr->W, twr->W [0][0], roots);
+         twr->W, twr->W [0][0], r);
+      for (i = 0; i < twr->deg; i++)
+         mpc_clear (r [i]);
+      free (r);
+   }
 }
 
 /**************************************************************************/
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/mpfrcx-0.6/src/f_tower.c new/mpfrcx-0.6.1/src/f_tower.c
--- old/mpfrcx-0.6/src/f_tower.c        2018-05-24 10:37:00.000000000 +0200
+++ new/mpfrcx-0.6.1/src/f_tower.c      2021-04-26 17:21:19.000000000 +0200
@@ -4,7 +4,7 @@
 functions working with towers of the real subfields of abelian extensions
 of \Q (\sqrt D), where D is a negative discriminant
 
-Copyright (C) 2018 Andreas Enge
+Copyright (C) 2018, 2021 Andreas Enge
 
 This file is part of the MPFRCX Library.
 
@@ -131,7 +131,9 @@
       each other; orbits in bijection with themselves lead to real
       elementary symmetric functions as generators of the subfields, the
       other orbits lead to elementary symmetric generators that are complex
-      conjugates of each other. */
+      conjugates of each other.
+      This function modifies roots and conjugates in preparation for
+      recursive calls. */
 
 {
    int i, j, m, n, found;
@@ -157,7 +159,9 @@
    mpfrx_init (Ur, m+1, prec); /* temporary variable for the real U [i] */
    local_conj = (int *) malloc (m * sizeof (int));
    for (i = 0; i < n; i++) {
-      if (conjugates [m*i] == m*i) {
+      /* The polynomial is real when the complex conjugate of the first root
+         is in the same group of m roots. */
+      if (conjugates [m*i] >= m*i && conjugates [m*i] < m*(i+1)) {
          mpcx_init (U [i], m+1, prec);
          for (j = 0; j < m; j++)
             local_conj [j] = conjugates [m*i+j] - m*i;
@@ -252,12 +256,34 @@
       mpfrx_tower_decomposition_rec. */
 
 {
+   mpfr_prec_t prec;
+   mpc_t *r;
+   int *c;
+   int i;
+
    if (twr->levels == 1)
       mpfrcx_reconstruct_from_roots (twr->W [0][0], roots, conjugates,
          twr->d [0]);
-   else
+   else {
+      /* Copy roots and conjugates, which are destroyed by the recursive
+         function, and make sure that all entries of the roots array are
+         initialised, since they may be accessed during recursion. */
+      prec = mpfrx_get_prec (twr->W [0][0]);
+      r = (mpc_t *) malloc (twr->deg * sizeof (mpc_t));
+      c = (int *) malloc (twr->deg * sizeof (int));
+      for (i = 0; i < twr->deg; i++) {
+         c [i] = conjugates [i];
+         mpc_init2 (r [i], prec);
+         if (c [i] >= i)
+            mpc_set (r [i], roots [i], MPC_RNDNN);
+      }
       mpfrcx_tower_decomposition_rec (twr->levels, twr->d,
-         twr->W, twr->W [0][0], roots, conjugates);
+         twr->W, twr->W [0][0], r, c);
+      for (i = 0; i < twr->deg; i++)
+         mpc_clear (r [i]);
+      free (r);
+      free (c);
+   }
 }
 
 /**************************************************************************/
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/mpfrcx-0.6/src/get_version.c new/mpfrcx-0.6.1/src/get_version.c
--- old/mpfrcx-0.6/src/get_version.c    2020-08-18 15:11:49.000000000 +0200
+++ new/mpfrcx-0.6.1/src/get_version.c  2021-04-29 12:26:01.000000000 +0200
@@ -3,7 +3,7 @@
 
 MPFRCX version
 
-Copyright (C) 2010, 2011, 2012, 2013, 2018, 2020 Andreas Enge
+Copyright (C) 2010, 2011, 2012, 2013, 2018, 2020, 2021 Andreas Enge
 
 This file is part of the MPFRCX Library.
 
@@ -26,5 +26,5 @@
 #include "mpfrcx-impl.h"
 
 const char * mpfrcx_get_version (void) {
-  return "0.6";
+  return "0.6.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/mpfrcx-0.6/src/mpfrcx.h new/mpfrcx-0.6.1/src/mpfrcx.h
--- old/mpfrcx-0.6/src/mpfrcx.h 2020-08-18 15:12:01.000000000 +0200
+++ new/mpfrcx-0.6.1/src/mpfrcx.h       2021-04-29 12:24:33.000000000 +0200
@@ -3,7 +3,7 @@
 
 include file for polynomials over mpfr and mpc
 
-Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2017, 2018, 2020 Andreas Enge
+Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2017, 2018, 2020, 2021 
Andreas Enge
 
 This file is part of the MPFRCX Library.
 
@@ -38,8 +38,8 @@
 
 #define MPFRCX_VERSION_MAJOR      0
 #define MPFRCX_VERSION_MINOR      6
-#define MPFRCX_VERSION_PATCHLEVEL 0
-#define MPFRCX_VERSION_STRING     "0.6"
+#define MPFRCX_VERSION_PATCHLEVEL 1
+#define MPFRCX_VERSION_STRING     "0.6.1"
 
 typedef struct {
    int size;
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/mpfrcx-0.6/tests/tf_tower.c new/mpfrcx-0.6.1/tests/tf_tower.c
--- old/mpfrcx-0.6/tests/tf_tower.c     2018-05-24 10:37:32.000000000 +0200
+++ new/mpfrcx-0.6.1/tests/tf_tower.c   2021-04-26 17:00:54.000000000 +0200
@@ -1,7 +1,7 @@
 /*
 test file for tree functions
 
-Copyright (C) 2018 Andreas Enge
+Copyright (C) 2018, 2021 Andreas Enge
 
 This file is part of the MPFRCX Library.
 
@@ -58,6 +58,8 @@
 /**************************************************************************/
 
 static int example1 (void) {
+   /* The example comes from a Weber class invariant for D=-1820 as
+      described in Jared Asuncion's master thesis. */
 
    int i, j, k;
    mpfr_prec_t prec = 128;
@@ -125,11 +127,10 @@
    for (j = 0; j < 3; j++)
       ok = ok && mpfrx_get_deg (twr->W [2][j]) == 9;
 
-   /* Check whether the result is an integral polynomial without
-      imaginary part and with the correct real part. */
+   /* Check whether the result is the correct integral polynomial. */
    for (i = 0; i < 3; i++)
       for (j = 0; j <= (i == 0 ? 0 : d [i]); j++)
-         for (k = 0; k <= mpcx_get_deg (twr->W [i][j]); k++) {
+         for (k = 0; k <= mpfrx_get_deg (twr->W [i][j]); k++) {
             coeff = mpfrx_get_coeff (twr->W [i][j], k);
             ok = ok && real_get_si (&z, coeff)
                     && z == W [i][j][k];
@@ -175,8 +176,7 @@
    mpfrx_tower_init (twr, 1, d, prec);
    mpfrcx_tower_decomposition (twr, roots, conjugates);
 
-   /* Check whether the result is an integral polynomial without
-      imaginary part and with the correct real part. */
+   /* Check whether the result is the correct integral polynomial. */
    ok = 1;
    for (k = 0; k < 4; k++) {
       coeff = mpfrx_get_coeff (twr->W [0][0], k);
@@ -196,7 +196,81 @@
 
 /**************************************************************************/
 
+static int example3 (void) {
+   /* The example comes from the double eta class invariant of level
+      2*73 for D=-1087, which exposed a bug in release 0.6. */
+
+   int i, j, k;
+   mpfr_prec_t prec = 19;
+   mpc_t *roots;
+   int *conjugates;
+   int deg = 9, d [2] = { 3, 3 };
+   int ok;
+   mpfrx_tower_t twr;
+   mpfr_ptr coeff;
+   long int z;
+   const long int W [2][4][4]
+      = {{{ -11, 4, -9, 1},
+          { 0, 0, 0, 0},
+          { 0, 0, 0, 0},
+          { 0, 0, 0, 0}},
+         {{ 42, -12, 31, 0},
+          { -19, 18, 32, 0},
+          { 33, -8, 9, 0},
+          { 4, -18, 3, 0}}};
+
+   roots = (mpc_t *) malloc (6 * sizeof (mpc_t));
+   mpc_init2 (roots [0], prec);
+   for (i = 2; i < 6; i++)
+      mpc_init2 (roots [i], prec);
+   conjugates = (int *) malloc (deg * sizeof (int));
+   conjugates [0] = 1;
+   conjugates [1] = 0;
+   conjugates [2] = 2;
+   conjugates [3] = 6;
+   conjugates [4] = 8;
+   conjugates [5] = 7;
+   conjugates [6] = 3;
+   conjugates [7] = 5;
+   conjugates [8] = 4;
+
+   mpc_set_str (roots [0], "(-3.738129 3.388008)", 10, MPC_RNDNN);
+   mpc_set_str (roots [2], "-1.209091", 10, MPC_RNDNN);
+   mpc_set_str (roots [3], "(5.316985e-2 1.612884e-2)", 10, MPC_RNDNN);
+   mpc_set_str (roots [4], "(-1.551620 1.628727)", 10, MPC_RNDNN);
+   mpc_set_str (roots [5], "(1.341080 -5.305252e-1)", 10, MPC_RNDNN);
+
+   mpfrx_tower_init (twr, 2, d, prec);
+   mpfrcx_tower_decomposition (twr, roots, conjugates);
+
+   /* Check the degrees. */
+   ok = mpfrx_get_deg (twr->W [0][0]) == 3;
+   for (j = 0; j <= 3; j++)
+      ok = ok && mpfrx_get_deg (twr->W [1][j]) == 2;
+
+   /* Check whether the result is the correct integral polynomial. */
+   for (i = 0; i < 2; i++)
+      for (j = 0; j <= (i == 0 ? 0 : d [i]); j++)
+         for (k = 0; k <= mpfrx_get_deg (twr->W [i][j]); k++) {
+            coeff = mpfrx_get_coeff (twr->W [i][j], k);
+            ok = ok && real_get_si (&z, coeff)
+                    && z == W [i][j][k];
+      }
+
+   mpfrx_tower_clear (twr);
+
+   mpc_clear (roots [0]);
+   for (i = 2; i < 6; i++)
+      mpc_clear (roots [i]);
+   free (roots);
+   free (conjugates);
+
+   return (ok);
+}
+
+/**************************************************************************/
+
 int main (void){
-   return !(example1 () && example2 ());
+   return !(example1 () && example2 () && example3 ());
 }
 

Reply via email to