sagemath/sagemath-ntl9.patch
2015-09-26 16:50:29 -06:00

223 lines
7.5 KiB
Diff

--- ./src/c_lib/include/ntl_wrap.h.orig 2015-02-16 17:15:08.000000000 -0700
+++ ./src/c_lib/include/ntl_wrap.h 2015-09-25 13:51:18.989444339 -0600
@@ -35,7 +35,7 @@ using namespace NTL;
EXTERN void del_charstar(char*);
-EXTERN void setup_NTL_error_callback(void (*function)(const char*, void*), void* context);
+EXTERN void setup_NTL_error_callback(void (*function)(const char*));
//////// ZZ //////////
--- ./src/c_lib/src/ntl_wrap.cpp.orig 2015-02-16 17:15:08.000000000 -0700
+++ ./src/c_lib/src/ntl_wrap.cpp 2015-09-25 13:49:54.636142928 -0600
@@ -12,9 +12,9 @@ void del_charstar(char* a) {
}
-void setup_NTL_error_callback(void (*function)(const char*, void*), void* context)
+void setup_NTL_error_callback(void (*function)(const char*))
{
- NTL::SetErrorCallbackFunction(function, context);
+ NTL::ErrorMsgCallback = function;
}
--- ./src/c_lib/src/stdsage.c.orig 2015-02-16 17:15:08.000000000 -0700
+++ ./src/c_lib/src/stdsage.c 2015-09-25 13:50:22.081963425 -0600
@@ -36,7 +36,7 @@ void init_global_empty_tuple(void) {
We raise a RuntimeError and then call sig_error() such that the
exception will be seen by sig_on().
*/
-void global_NTL_error_callback(const char* s, void* context)
+void global_NTL_error_callback(const char* s)
{
PyErr_SetString(PyExc_RuntimeError, s);
sig_error();
@@ -49,7 +49,7 @@ void init_csage() {
init_global_empty_tuple();
init_memory_functions();
setup_sage_signal_handler();
- setup_NTL_error_callback(global_NTL_error_callback, NULL);
+ setup_NTL_error_callback(global_NTL_error_callback);
}
/* This is called once for every single module that links in stdsage */
--- ./src/sage/rings/bernmm/bernmm-test.cpp.orig 2015-02-16 17:15:12.000000000 -0700
+++ ./src/sage/rings/bernmm/bernmm-test.cpp 2015-09-26 09:19:00.830399741 -0600
@@ -70,7 +70,7 @@ void bern_naive(mpq_t* res, long n)
*/
int testcase__bern_modp_powg(long p, long k, mpq_t b)
{
- double pinv = 1 / ((double) p);
+ mulmod_t pinv = PrepMulMod(p);
// compute B_k mod p using _bern_modp_powg()
long x = _bern_modp_powg(p, pinv, k);
@@ -147,7 +147,7 @@ int test__bern_modp_powg()
*/
int testcase__bern_modp_pow2(long p, long k)
{
- double pinv = 1 / ((double) p);
+ mulmod_t pinv = PrepMulMod(p);
if (PowerMod(2, k, p, pinv) == 1)
return 1;
--- ./src/sage/rings/bernmm/bern_modp.cpp.orig 2015-02-16 17:15:12.000000000 -0700
+++ ./src/sage/rings/bernmm/bern_modp.cpp 2015-09-26 14:15:34.862360481 -0600
@@ -43,14 +43,14 @@ namespace bernmm {
pinv = 1 / ((double) p)
g = a multiplicative generator of GF(p), in [0, p)
*/
-long bernsum_powg(long p, double pinv, long k, long g)
+long bernsum_powg(long p, mulmod_t pinv, long k, long g)
{
long half_gm1 = (g + ((g & 1) ? 0 : p) - 1) / 2; // (g-1)/2 mod p
long g_to_jm1 = 1;
long g_to_km1 = PowerMod(g, k-1, p, pinv);
long g_to_km1_to_j = g_to_km1;
long sum = 0;
- double g_pinv = ((double) g) / ((double) p);
+ muldivrem_t g_pinv = PrepMulDivRem(g, p);
mulmod_precon_t g_to_km1_pinv = PrepMulModPrecon(g_to_km1, p, pinv);
for (long j = 1; j <= (p-1)/2; j++)
@@ -224,7 +224,7 @@ public:
#error Number of bits in a long must be divisible by TABLE_LG_SIZE
#endif
-long bernsum_pow2(long p, double pinv, long k, long g, long n)
+long bernsum_pow2(long p, mulmod_t pinv, long k, long g, long n)
{
// In the main summation loop we accumulate data into the _tables_ array;
// tables[y][z] contributes to the final answer with a weight of
@@ -481,7 +481,7 @@ long PrepRedc(long n)
(See bernsum_pow2() for code comments; we only add comments here where
something is different from bernsum_pow2())
*/
-long bernsum_pow2_redc(long p, double pinv, long k, long g, long n)
+long bernsum_pow2_redc(long p, mulmod_t pinv, long k, long g, long n)
{
long pinv2 = PrepRedc(p);
long F = (1L << (ULONG_BITS/2)) % p;
@@ -655,7 +655,7 @@ long bernsum_pow2_redc(long p, double pi
Algorithm: uses bernsum_powg() to compute the main sum.
*/
-long _bern_modp_powg(long p, double pinv, long k)
+long _bern_modp_powg(long p, mulmod_t pinv, long k)
{
Factorisation F(p-1);
long g = primitive_root(p, pinv, F);
@@ -685,7 +685,7 @@ long _bern_modp_powg(long p, double pinv
Algorithm: uses bernsum_pow2() (or bernsum_pow2_redc() if p is small
enough) to compute the main sum.
*/
-long _bern_modp_pow2(long p, double pinv, long k)
+long _bern_modp_pow2(long p, mulmod_t pinv, long k)
{
Factorisation F(p-1);
long g = primitive_root(p, pinv, F);
@@ -717,7 +717,7 @@ long _bern_modp_pow2(long p, double pinv
2 <= k <= p-3, k even
pinv = 1 / ((double) p)
*/
-long _bern_modp(long p, double pinv, long k)
+long _bern_modp(long p, mulmod_t pinv, long k)
{
if (PowerMod(2, k, p, pinv) != 1)
// 2^k != 1 mod p, so we use the faster version
@@ -765,7 +765,7 @@ long bern_modp(long p, long k)
if (m == 0)
return -1;
- double pinv = 1 / ((double) p);
+ mulmod_t pinv = PrepMulMod(p);
long x = _bern_modp(p, pinv, m); // = B_m/m mod p
return MulMod(x, k, p, pinv);
}
--- ./src/sage/rings/bernmm/bern_modp.h.orig 2015-02-16 17:15:12.000000000 -0700
+++ ./src/sage/rings/bernmm/bern_modp.h 2015-09-26 09:19:28.365229754 -0600
@@ -12,6 +12,7 @@
#ifndef BERNMM_BERN_MODP_H
#define BERNMM_BERN_MODP_H
+#include <NTL/ZZ.h>
namespace bernmm {
@@ -29,8 +30,8 @@ long bern_modp(long p, long k);
/*
Exported for testing.
*/
-long _bern_modp_powg(long p, double pinv, long k);
-long _bern_modp_pow2(long p, double pinv, long k);
+long _bern_modp_powg(long p, NTL::mulmod_t pinv, long k);
+long _bern_modp_pow2(long p, NTL::mulmod_t pinv, long k);
};
--- ./src/sage/rings/bernmm/bern_modp_util.cpp.orig 2015-02-16 17:15:12.000000000 -0700
+++ ./src/sage/rings/bernmm/bern_modp_util.cpp 2015-09-26 09:19:57.474935651 -0600
@@ -20,7 +20,7 @@ NTL_CLIENT;
namespace bernmm {
-long PowerMod(long a, long ee, long n, double ninv)
+long PowerMod(long a, long ee, long n, mulmod_t ninv)
{
long x, y;
@@ -89,7 +89,7 @@ PrimeTable::PrimeTable(long bound)
}
-long order(long x, long p, double pinv, const Factorisation& F)
+long order(long x, long p, mulmod_t pinv, const Factorisation& F)
{
// in the loop below, m is always some multiple of the order of x
long m = p - 1;
@@ -113,7 +113,7 @@ long order(long x, long p, double pinv,
-long primitive_root(long p, double pinv, const Factorisation& F)
+long primitive_root(long p, mulmod_t pinv, const Factorisation& F)
{
if (p == 2)
return 1;
--- ./src/sage/rings/bernmm/bern_modp_util.h.orig 2015-02-16 17:15:12.000000000 -0700
+++ ./src/sage/rings/bernmm/bern_modp_util.h 2015-09-26 09:20:26.423623021 -0600
@@ -17,6 +17,7 @@
#include <vector>
#include <cassert>
#include <climits>
+#include <NTL/ZZ.h>
#if ULONG_MAX == 4294967295U
@@ -39,7 +40,7 @@ namespace bernmm {
(Implementation is adapted from ZZ.c in NTL 5.4.1.)
*/
-long PowerMod(long a, long ee, long n, double ninv);
+long PowerMod(long a, long ee, long n, NTL::mulmod_t ninv);
/*
@@ -123,13 +124,13 @@ long next_prime(long p);
/*
Computes order of x mod p, given the factorisation F of p-1.
*/
-long order(long x, long p, double pinv, const Factorisation& F);
+long order(long x, long p, NTL::mulmod_t pinv, const Factorisation& F);
/*
Finds the smallest primitive root mod p, given the factorisation F of p-1.
*/
-long primitive_root(long p, double pinv, const Factorisation& F);
+long primitive_root(long p, NTL::mulmod_t pinv, const Factorisation& F);
}; // end namespace