@@ -254,6 +254,17 @@ PARI stack size set to 8000000 bytes, maximum size set to ...
254
254
... pari. binomial( 2** 100, 2** 22)
255
255
... except AlarmInterrupt:
256
256
... pass
257
+
258
+ Test that changing the stack size using ``default`` works properly:
259
+
260
+ >>> pari. default( "parisizemax", 2** 23)
261
+ >>> pari = cypari2. Pari( ) # clear stack
262
+ >>> a = pari( 1)
263
+ >>> pari. default( "parisizemax", 2** 29)
264
+ >>> a + a
265
+ 2
266
+ >>> pari. default( "parisizemax")
267
+ 536870912
257
268
"""
258
269
259
270
# *****************************************************************************
@@ -270,7 +281,7 @@ import sys
270
281
from libc.stdio cimport *
271
282
cimport cython
272
283
273
- from cysignals.signals cimport sig_check, sig_on, sig_off
284
+ from cysignals.signals cimport sig_check, sig_on, sig_off, sig_error
274
285
275
286
from .string_utils cimport to_string, to_bytes
276
287
from .paridecl cimport *
@@ -522,6 +533,14 @@ cdef class Pari(Pari_auto):
522
533
global factor_proven
523
534
factor_proven = 1
524
535
536
+ # Monkey-patch default(parisize) and default(parisizemax)
537
+ ep = pari_is_default(" parisize" )
538
+ if ep:
539
+ ep.value = < void * > patched_parisize
540
+ ep = pari_is_default(" parisizemax" )
541
+ if ep:
542
+ ep.value = < void * > patched_parisizemax
543
+
525
544
def __init__ (self , size_t size = 8000000 , size_t sizemax = 0 , unsigned long maxprime = 500000 ):
526
545
"""
527
546
(Re)-Initialize the PARI system.
@@ -1385,6 +1404,25 @@ cdef long get_var(v) except -2:
1385
1404
return varno
1386
1405
1387
1406
1407
+ # Monkey-patched versions of default(parisize) and default(parisizemax).
1408
+ # We need to call move_gens_to_heap(-1) before reallocating the PARI
1409
+ # stack. The monkey-patching is set up in PariInstance.__cinit__
1410
+ cdef GEN patched_parisize(const char * v, long flag):
1411
+ try :
1412
+ move_gens_to_heap(- 1 )
1413
+ except :
1414
+ sig_error()
1415
+ return sd_parisize(v, flag)
1416
+
1417
+
1418
+ cdef GEN patched_parisizemax(const char * v, long flag):
1419
+ try :
1420
+ move_gens_to_heap(- 1 )
1421
+ except :
1422
+ sig_error()
1423
+ return sd_parisizemax(v, flag)
1424
+
1425
+
1388
1426
IF HAVE_PLOT_SVG:
1389
1427
cdef void get_plot_ipython(PARI_plot* T):
1390
1428
# Values copied from src/graph/plotsvg.c in PARI sources
0 commit comments