/ test / test_mpz_functions.txt
test_mpz_functions.txt
  1  MPZ Related Functions
  2  =====================
  3  
  4      >>> import gmpy2 as G
  5      >>> from gmpy2 import mpz, mpq, mpfr
  6      >>> a = mpz(123)
  7      >>> b = mpz(456)
  8  
  9  Test gmpy2.add
 10  --------------
 11      >>> G.add(a, b)
 12      mpz(579)
 13      >>> G.add(a, 456)
 14      mpz(579)
 15      >>> G.add(123, 456)
 16      mpz(579)
 17      >>> G.add(123, b)
 18      mpz(579)
 19  
 20  Test gmpy2.bincoef
 21  ------------------
 22  
 23      >>> for i in range(10):
 24      ...     print(G.bincoef(10,i))
 25      ...
 26      1
 27      10
 28      45
 29      120
 30      210
 31      252
 32      210
 33      120
 34      45
 35      10
 36  
 37  Test gmpy2.bit_clear
 38  --------------------
 39  
 40      >>> a.bit_clear(0)
 41      mpz(122)
 42  
 43  Test gmpy2.bit_flip
 44  -------------------
 45      >>> bin(a)
 46      '0b1111011'
 47      >>> bin(a.bit_flip(1))
 48      '0b1111001'
 49      >>> bin(a.bit_flip(2))
 50      '0b1111111'
 51  
 52  Test gmpy2.bit_length
 53  ---------------------
 54  
 55      >>> G.mpz(0).bit_length()
 56      0
 57      >>> G.mpz(12345).bit_length()
 58      14
 59  
 60  Test gmpy2.bit_mask
 61  -------------------
 62  
 63      >>> G.bit_mask(9)
 64      mpz(511)
 65  
 66  Test gmpy2.bit_scan0
 67  --------------------
 68  
 69      >>> [a.bit_scan0(j) for j in range(33)]
 70      [2, 2, 2, 7, 7, 7, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
 71      >>> n=G.mpz(-(7+6*16+5*256+7*4092))
 72      >>> [n.bit_scan0(j) for j in range(18)]
 73      [1, 1, 3, 3, 6, 6, 6, 8, 8, 10, 10, 12, 12, 13, 14, -1, None, None]
 74      >>> del n
 75  
 76  Test gmpy2.bit_scan1
 77  --------------------
 78  
 79      >>> [a.bit_scan1(j) for j in range(10)]
 80      [0, 1, 3, 3, 4, 5, 6, None, None, None]
 81      >>> n=G.mpz(-(7+6*16+5*256+7*4092))
 82      >>> [n.bit_scan1(j) for j in range(33)]
 83      [0, 2, 2, 4, 4, 5, 7, 7, 9, 9, 11, 11, 15, 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
 84      >>> del n
 85  
 86  Test gmpy2.bit_set
 87  ------------------
 88  
 89      >>> a.bit_set(20)
 90      mpz(1048699)
 91  
 92  Test gmpy2.bit_test
 93  -------------------
 94  
 95      >>> [a.bit_test(i) for i in range(8)]
 96      [True, True, False, True, True, True, True, False]
 97      >>> [b.bit_test(i) for i in range(10)]
 98      [False, False, False, True, False, False, True, True, True, False]
 99  
100  Test gmpy2.c_div
101  ----------------
102  
103      >>> G.c_div(b,64)
104      mpz(8)
105      >>> G.c_div(b,-64)
106      mpz(-7)
107      >>> G.c_div(-b,64)
108      mpz(-7)
109      >>> G.c_div(-b,-64)
110      mpz(8)
111  
112  Test gmpy2.c_div_2exp
113  ---------------------
114  
115      >>> G.c_div_2exp(b, 6)
116      mpz(8)
117      >>> G.c_div_2exp(b, -6)
118      Traceback (most recent call last):
119        File "<stdin>", line 1, in <module>
120      OverflowError: can't convert negative value to unsigned int
121      >>> G.c_div_2exp(-b, 6)
122      mpz(-7)
123  
124  Test gmpy2.c_divmod
125  -------------------
126  
127      >>> G.c_divmod(b,64)
128      (mpz(8), mpz(-56))
129      >>> G.c_divmod(b,-64)
130      (mpz(-7), mpz(8))
131      >>> G.c_divmod(-b,64)
132      (mpz(-7), mpz(-8))
133      >>> G.c_divmod(-b,-64)
134      (mpz(8), mpz(56))
135      >>> G.c_divmod(17,5)
136      (mpz(4), mpz(-3))
137      >>> G.c_divmod(-17,5)
138      (mpz(-3), mpz(-2))
139      >>> G.c_divmod(17,-5)
140      (mpz(-3), mpz(2))
141      >>> G.c_divmod(-17,-5)
142      (mpz(4), mpz(3))
143      >>> G.c_divmod(b, 4.0)
144      Traceback (most recent call last):
145        File "<stdin>", line 1, in <module>
146      TypeError: c_divmod() requires 'mpz','mpz' arguments
147      >>> G.c_divmod('a', b)
148      Traceback (most recent call last):
149        File "<stdin>", line 1, in <module>
150      TypeError: c_divmod() requires 'mpz','mpz' arguments
151      >>> G.c_divmod(b)
152      Traceback (most recent call last):
153        File "<stdin>", line 1, in <module>
154      TypeError: c_divmod() requires 'mpz','mpz' arguments
155  
156  Test gmpy2.c_divmod_2exp
157  ------------------------
158  
159      >>> G.c_divmod_2exp(b, 6)
160      (mpz(8), mpz(-56))
161      >>> G.c_divmod_2exp(-b, 6)
162      (mpz(-7), mpz(-8))
163  
164  Test gmpy2.c_mod
165  ----------------
166  
167      >>> G.c_mod(b,64)
168      mpz(-56)
169      >>> G.c_mod(b,-64)
170      mpz(8)
171      >>> G.c_mod(-b,64)
172      mpz(-8)
173      >>> G.c_mod(-b,-64)
174      mpz(56)
175  
176  Test gmpy2.c_mod_2exp
177  ---------------------
178  
179      >>> G.c_mod_2exp(b, 6)
180      mpz(-56)
181      >>> G.c_mod_2exp(-b, 6)
182      mpz(-8)
183  
184  Test gmpy2.comb
185  ---------------
186  
187      >>> G.comb(3,-1)
188      Traceback (most recent call last):
189        ...
190      ValueError: binomial coefficient with negative k
191      >>> G.comb(8,4)
192      mpz(70)
193  
194  Test gmpy2.divexact
195  -------------------
196  
197      >>> aa=G.mpz('1234567912345678912345679')
198      >>> bb=G.mpz('789789789789789789789789')
199      >>> cc=aa*bb
200      >>> print(G.divexact(cc,aa))
201      789789789789789789789789
202      >>> del aa,bb,cc
203  
204  Test gmpy2.divm
205  ---------------
206  
207      >>> G.divm(b,a,20)
208      mpz(12)
209      >>> G.divm(a,b,100)
210      Traceback (innermost last):
211        ...
212      ZeroDivisionError: not invertible
213      >>> G.divm(6,12,14)
214      mpz(4)
215      >>> G.divm(0,1,2)
216      mpz(0)
217      >>> G.divm(4,8,20)
218      mpz(3)
219  
220  Test gmpy2.f_div
221  ----------------
222  
223  Test gmpy2.f_div_2exp
224  ---------------------
225  
226  Test gmpy2.f_divmod
227  -------------------
228  
229      >>> G.f_divmod(17,5)
230      (mpz(3), mpz(2))
231      >>> G.f_divmod(-17,5)
232      (mpz(-4), mpz(3))
233      >>> G.f_divmod(17,-5)
234      (mpz(-4), mpz(-3))
235      >>> G.f_divmod(-17,-5)
236      (mpz(3), mpz(-2))
237      >>> G.f_divmod(b,64)
238      (mpz(7), mpz(8))
239      >>> G.f_divmod(-b,64)
240      (mpz(-8), mpz(56))
241      >>> G.f_divmod(b,-64)
242      (mpz(-8), mpz(-56))
243      >>> G.f_divmod(-b,-64)
244      (mpz(7), mpz(-8))
245  
246  Test gmpy2.f_divmod_2exp
247  ------------------------
248  
249      >>> G.f_divmod_2exp(b,6)
250      (mpz(7), mpz(8))
251      >>> G.f_divmod_2exp(-b,6)
252      (mpz(-8), mpz(56))
253  
254  Test gmpy2.f_mod
255  ----------------
256  
257  Test gmpy2.f_mod_2exp
258  ---------------------
259  
260      >>> G.f_mod_2exp(a,5)
261      mpz(27)
262      >>> G.f_mod_2exp(b,5)
263      mpz(8)
264      >>> G.f_mod_2exp(b,5) == (b%32)
265      True
266      >>> G.f_mod_2exp(a,5) == (a%32)
267      True
268  
269  Test gmpy2.fac
270  --------------
271  
272      >>> G.fac(7)
273      mpz(5040)
274  
275  Test gmpy2.fib
276  --------------
277  
278      >>> G.fib(17)
279      mpz(1597)
280  
281  Test gmpy2.fib2
282  ---------------
283  
284      >>> G.fib2(17)
285      (mpz(1597), mpz(987))
286  
287  Test gmpy2.gcd
288  --------------
289  
290      >>> G.gcd(a,b)
291      mpz(3)
292  
293  Test gmpy2.gcdext
294  -----------------
295  
296      >>> temp=G.gcdext(a,b)
297      >>> temp[0]==a*temp[1]+b*temp[2]
298      True
299      >>> temp=G.gcdext(123,456)
300      >>> temp[0]==a*temp[1]+b*temp[2]
301      True
302      >>> del temp
303  
304  Test gmpy2.hamdist
305  ------------------
306  
307      >>> G.hamdist(a,b)
308      6
309      >>> G.hamdist(3)
310      Traceback (innermost last):
311        ...
312      TypeError: hamdist() requires 'mpz','mpz' arguments
313      >>> G.hamdist(a)
314      Traceback (innermost last):
315        ...
316      TypeError: hamdist() requires 'mpz','mpz' arguments
317      >>> G.hamdist(a, 3, 4)
318      Traceback (innermost last):
319        ...
320      TypeError: hamdist() requires 'mpz','mpz' arguments
321  
322  Test gmpy2.invert
323  -----------------
324  
325      >>> G.invert(a,100)
326      mpz(87)
327      >>> G.invert(b,100)
328      mpz(0)
329      >>> G.invert(3)
330      Traceback (innermost last):
331        ...
332      TypeError: invert() requires 'mpz','mpz' arguments
333      >>> G.invert()
334      Traceback (innermost last):
335        ...
336      TypeError: invert() requires 'mpz','mpz' arguments
337  
338  Test gmpy2.iroot
339  ----------------
340  
341      >>> for i in range(5):
342      ...    print(G.iroot(a,i+1),G.iroot(b,i+1))
343      ...
344      (mpz(123), True) (mpz(456), True)
345      (mpz(11), False) (mpz(21), False)
346      (mpz(4), False) (mpz(7), False)
347      (mpz(3), False) (mpz(4), False)
348      (mpz(2), False) (mpz(3), False)
349      >>> G.iroot(9,2)
350      (mpz(3), True)
351  
352  Test gmpy2.iroot_rem
353  --------------------
354  
355      >>> G.iroot_rem(a,2)
356      (mpz(11), mpz(2))
357      >>> G.iroot_rem(a,3)
358      (mpz(4), mpz(59))
359      >>> G.iroot_rem(a*a)
360      Traceback (most recent call last):
361        ...
362      TypeError: iroot_rem() requires 'mpz','int' arguments
363      >>> G.iroot_rem(a*a,2)
364      (mpz(123), mpz(0))
365  
366  Test gmpy2.is_even
367  ------------------
368  
369      >>> G.is_even(a)
370      False
371      >>> G.is_even(b)
372      True
373  
374  Test gmpy2.is_odd
375  -----------------
376  
377      >>> G.is_odd(a)
378      True
379      >>> G.is_odd(b)
380      False
381  
382  Test gmpy2.is_power
383  -------------------
384  
385      >>> G.is_power()
386      Traceback (most recent call last):
387        File "<stdin>", line 1, in <module>
388      TypeError: is_power() takes exactly one argument (0 given)    >>> a.is_power()
389      >>> G.is_power(99*99*99)
390      True
391      >>> G.is_power(99*98)
392      False
393  
394  Test gmpy2.is_prime
395  -------------------
396  
397      >>> G.is_prime(3,-3)
398      Traceback (most recent call last):
399        ...
400      ValueError: repetition count for is_prime must be positive
401      >>> G.is_prime(12345)
402      False
403      >>> G.is_prime(80**81 + 81**80)
404      True
405  
406  Test gmpy2.is_square
407  --------------------
408  
409      >>> a.is_square()
410      False
411      >>> G.is_square(99*99)
412      True
413      >>> G.is_square(99*99*99)
414      False
415      >>> G.is_square(0)
416      True
417      >>> G.is_square(-1)
418      False
419  
420  Test gmpy2.isqrt
421  ----------------
422  
423      >>> print(G.isqrt(a))
424      11
425      >>> print(G.isqrt(b))
426      21
427      >>> G.isqrt(-1)
428      Traceback (most recent call last):
429        ...
430      ValueError: isqrt() of negative number
431  
432  Test gmpy2.isqrt_rem
433  --------------------
434  
435      >>> print(G.isqrt_rem(a))
436      (mpz(11), mpz(2))
437      >>> print(G.isqrt_rem(b))
438      (mpz(21), mpz(15))
439      >>> G.isqrt_rem(-1)
440      Traceback (most recent call last):
441        ...
442      ValueError: isqrt_rem() of negative number
443  
444  Test gmpy2.jacobi
445  -----------------
446  
447      >>> G.jacobi(10,3)
448      1
449      >>> G.jacobi(10,-3)
450      Traceback (most recent call last):
451        ...
452      ValueError: jacobi's y must be odd prime > 0
453      >>> G.jacobi(3)
454      Traceback (innermost last):
455        ...
456      TypeError: jacobi() requires 'mpz','mpz' arguments
457      >>> G.jacobi()
458      Traceback (innermost last):
459        ...
460      TypeError: jacobi() requires 'mpz','mpz' arguments
461  
462  Test gmpy2.kronecker
463  --------------------
464  
465      >>> G.kronecker(10,3)
466      1
467      >>> G.kronecker(10,-3)
468      1
469      >>> G.kronecker(3)
470      Traceback (innermost last):
471        ...
472      TypeError: kronecker() requires 'mpz','mpz' arguments
473      >>> G.kronecker()
474      Traceback (innermost last):
475        ...
476      TypeError: kronecker() requires 'mpz','mpz' arguments
477      >>> aaa = 10**20
478      >>> bbb = aaa+39
479      >>> G.jacobi(aaa,bbb)
480      1
481      >>> G.legendre(aaa,bbb)
482      1
483      >>> G.kronecker(aaa,bbb)
484      1
485      >>> del aaa,bbb
486  
487  Test gmpy2.lcm
488  --------------
489  
490      >>> G.lcm(a,b)
491      mpz(18696)
492  
493  Test gmpy2.legendre
494  -------------------
495  
496      >>> G.legendre(10,3)
497      1
498      >>> G.legendre(10,-3)
499      Traceback (most recent call last):
500        ...
501      ValueError: legendre's y must be odd and > 0
502      >>> G.legendre(3)
503      Traceback (innermost last):
504        ...
505      TypeError: legendre() requires 'mpz','mpz' arguments
506      >>> G.legendre()
507      Traceback (innermost last):
508        ...
509      TypeError: legendre() requires 'mpz','mpz' arguments
510  
511  Test gmpy2.lucas
512  ----------------
513  
514  Test gmpy2.lucas2
515  -----------------
516  
517  Test gmpy2.mul
518  --------------
519  
520  Test gmpy2.mul_2exp
521  -------------------
522  
523  Test gmpy2.next_prime
524  ---------------------
525  
526  Test gmpy2.numdigits
527  --------------------
528  
529      >>> G.numdigits(23)
530      2
531      >>> G.numdigits(23,2)
532      5
533      >>> G.numdigits(23,99)
534      Traceback (most recent call last):
535        ...
536      ValueError: base must be either 0 or in the interval 2 ... 62
537  
538  Test gmpy2.pack
539  ---------------
540  
541  Test gmpy2.popcount
542  -------------------
543  
544      >>> G.popcount(a)
545      6
546      >>> G.popcount(b)
547      4
548      >>> G.popcount(-7)
549      -1
550      >>> G.popcount(0)
551      0
552  
553  Test gmpy2.remove
554  -----------------
555  
556  gmpy2.remove factors out multiple copies of a factor from a larger integer.
557  The factor must be greater than or equal to 2.
558  
559      >>> G.remove(a,2)
560      (mpz(123), 0)
561      >>> G.remove(a,3)
562      (mpz(41), 1)
563      >>> G.remove(b,2)
564      (mpz(57), 3)
565      >>> G.remove(b,3)
566      (mpz(152), 1)
567      >>> G.remove(b,1)
568      Traceback (most recent call last):
569        File "<stdin>", line 1, in <module>
570      ValueError: factor must be > 1
571      >>> G.remove(b,0)
572      Traceback (most recent call last):
573        File "<stdin>", line 1, in <module>
574      ValueError: factor must be > 1
575      >>> G.remove(b,789)
576      (mpz(456), 0)
577      >>> G.remove(b,-3)
578      Traceback (most recent call last):
579        File "<stdin>", line 1, in <module>
580      ValueError: factor must be > 1
581      >>> G.remove(b,float('NaN'))
582      Traceback (most recent call last):
583        File "<stdin>", line 1, in <module>
584      TypeError: remove() requires 'mpz','mpz' arguments
585      >>> G.remove(3,-1)
586      Traceback (most recent call last):
587        ...
588      ValueError: factor must be > 1
589      >>> G.remove(3)
590      Traceback (innermost last):
591        ...
592      TypeError: remove() requires 'mpz','mpz' arguments
593      >>> G.remove()
594      Traceback (innermost last):
595        ...
596      TypeError: remove() requires 'mpz','mpz' arguments
597  
598  Test gmpy2.t_div
599  ----------------
600  
601  Test gmpy2.t_div_2exp
602  ---------------------
603  
604  Test gmpy2.t_divmod
605  -------------------
606  
607      >>> G.t_divmod(17,5)
608      (mpz(3), mpz(2))
609      >>> G.t_divmod(-17,5)
610      (mpz(-3), mpz(-2))
611      >>> G.t_divmod(17,-5)
612      (mpz(-3), mpz(2))
613      >>> G.t_divmod(-17,-5)
614      (mpz(3), mpz(-2))
615  
616  Test gmpy2.t_divmod_2exp
617  ------------------------
618  
619  Test gmpy2.t_mod
620  ----------------
621  
622  Test gmpy2.t_mod_2exp
623  ---------------------
624  
625  
626  
627