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 ()); }