@@ -19,6 +19,13 @@ def test_fmpz():
1919 assert flint .fmpz () == flint .fmpz (0 )
2020 L = [0 , 1 , 2 , 3 , 2 ** 31 - 1 , 2 ** 31 , 2 ** 63 - 1 , 2 ** 63 , 2 ** 64 - 1 , 2 ** 64 ]
2121 L += [- x for x in L ]
22+ for i in L :
23+ f = flint .fmpz (i )
24+ assert int (f ) == i
25+ assert flint .fmpz (f ) == f
26+ assert flint .fmpz (str (i )) == f
27+ raises (lambda : flint .fmpz ("qwe" ), ValueError )
28+ raises (lambda : flint .fmpz ([]), TypeError )
2229 for s in L :
2330 for t in L :
2431 for ltype in (flint .fmpz , int , long ):
@@ -42,6 +49,7 @@ def test_fmpz():
4249 assert (ltype (s ) >= rtype (t )) == (s >= t )
4350 if 0 <= t < 10 :
4451 assert (ltype (s ) ** rtype (t )) == (s ** t )
52+ assert flint .fmpz (2 ) != []
4553 assert + flint .fmpz (0 ) == 0
4654 assert + flint .fmpz (1 ) == 1
4755 assert + flint .fmpz (- 1 ) == - 1
@@ -55,6 +63,18 @@ def test_fmpz():
5563 assert isinstance (int (flint .fmpz (2 )), int )
5664 assert long (flint .fmpz (2 )) == 2
5765 assert isinstance (long (flint .fmpz (2 )), long )
66+ l = [1 , 2 , 3 ]
67+ l [flint .fmpz (1 )] = - 2
68+ assert l == [1 , - 2 , 3 ]
69+ d = {flint .fmpz (2 ): 3 }
70+ d [flint .fmpz (2 )] = - 1
71+ assert d == {flint .fmpz (2 ): - 1 }
72+ assert flint .fmpz (2 ).bit_length () == 2
73+ assert flint .fmpz (- 2 ).bit_length () == 2
74+ assert flint .fmpz (2 ).height_bits () == 2
75+ assert flint .fmpz (- 2 ).height_bits () == 2
76+ assert flint .fmpz (2 ).height_bits (signed = True ) == 2
77+ assert flint .fmpz (- 2 ).height_bits (signed = True ) == - 2
5878 ctx .pretty = False
5979 assert repr (flint .fmpz (0 )) == "fmpz(0)"
6080 assert repr (flint .fmpz (- 27 )) == "fmpz(-27)"
@@ -63,6 +83,97 @@ def test_fmpz():
6383 assert repr (flint .fmpz (- 27 )) == "-27"
6484 assert bool (flint .fmpz (0 )) == False
6585 assert bool (flint .fmpz (1 )) == True
86+ bigstr = '1' * 100
87+ big = flint .fmpz (bigstr )
88+ assert big .str () == bigstr
89+ assert big .str (condense = 10 ) == '1111111111{...80 digits...}1111111111'
90+ raises (lambda : pow (flint .fmpz (2 ), 2 , 3 ), NotImplementedError )
91+ assert flint .fmpz (6 ).gcd (flint .fmpz (9 )) == 3
92+ assert flint .fmpz (6 ).gcd (9 ) == 3
93+ raises (lambda : flint .fmpz (2 ).gcd ('asd' ), TypeError )
94+ assert flint .fmpz (6 ).lcm (flint .fmpz (9 )) == 18
95+ assert flint .fmpz (6 ).lcm (9 ) == 18
96+ raises (lambda : flint .fmpz (2 ).lcm ('asd' ), TypeError )
97+ assert flint .fmpz (25 ).factor () == [(5 , 2 )]
98+ n = flint .fmpz (10 ** 100 + 1 )
99+ assert n .factor () == [
100+ (73 , 1 ), (137 , 1 ), (401 , 1 ), (1201 , 1 ), (1601 , 1 ), (1676321 , 1 ), (5964848081 , 1 ),
101+ (129694419029057750551385771184564274499075700947656757821537291527196801 , 1 )]
102+
103+ assert n .factor (trial_limit = 100 ) == [
104+ (73 , 1 ), (137 , 1 ), (401 , 1 ),
105+ (2493516234411471571047384039650897753117456334167082044912715710972543643391271845384040149601 , 1 )]
106+ assert n .factor_smooth () == [
107+ (73 , 1 ), (137 , 1 ), (401 , 1 ), (1201 , 1 ), (1601 , 1 ),
108+ (1296814508839693536173209832765271992846610925502473758289451540212712414540699659186801 , 1 )]
109+ T , F , VE , OE = True , False , ValueError , OverflowError
110+ cases = [
111+ # (f, [f(-1), f(0), f(1), f(2), ... f(10)]),
112+ (lambda n : flint .fmpz (n ).is_prime (),
113+ [0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ]),
114+ (lambda n : flint .fmpz (n ).is_probable_prime (),
115+ [0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ]),
116+ (lambda n : flint .fmpz (n ).is_perfect_power (),
117+ [T , T , T , F , F , T , F , F , F , T , T , F ]),
118+ (lambda n : flint .fmpz (n ).partitions_p (),
119+ [0 , 1 , 1 , 2 , 3 , 5 , 7 , 11 , 15 , 22 , 30 , 42 ]),
120+ (lambda n : flint .fmpz (n ).moebius_mu (),
121+ [1 , 0 , 1 , - 1 , - 1 , 0 , - 1 , 1 , - 1 , 0 , 0 , 1 ]),
122+ (lambda n : flint .fmpz .fac_ui (n ),
123+ [OE , 1 , 1 , 2 , 6 , 24 , 120 , 720 , 5040 , 40320 , 362880 , 3628800 ]),
124+ (lambda n : flint .fmpz .primorial_ui (n ),
125+ [OE , 1 , 1 , 2 , 6 , 6 , 30 , 30 , 210 , 210 , 210 , 210 , 2310 , 2310 ]),
126+ (lambda n : flint .fmpz .fib_ui (n ),
127+ [OE , 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 ]),
128+ (lambda n : flint .fmpz (n ).rising (0 ),
129+ [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ]),
130+ (lambda n : flint .fmpz (n ).rising (1 ),
131+ [- 1 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]),
132+ (lambda n : flint .fmpz (n ).rising (2 ),
133+ [0 , 0 , 2 , 6 , 12 , 20 , 30 , 42 , 56 , 72 , 90 , 110 ]),
134+ (lambda n : flint .fmpz .bin_uiui (n , 0 ),
135+ [OE , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ]),
136+ (lambda n : flint .fmpz .bin_uiui (n , 1 ),
137+ [OE , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]),
138+ (lambda n : flint .fmpz .bin_uiui (n , 2 ),
139+ [OE , 0 , 0 , 1 , 3 , 6 , 10 , 15 , 21 , 28 , 36 , 45 ]),
140+ (lambda n : flint .fmpz .bell_number (n ),
141+ [OE , 1 , 1 , 2 , 5 , 15 , 52 , 203 , 877 , 4140 , 21147 , 115975 ]),
142+ (lambda n : flint .fmpz .euler_number (n ),
143+ [OE , 1 , 0 , - 1 , 0 , 5 , 0 , - 61 , 0 , 1385 , 0 , - 50521 ]),
144+ (lambda n : flint .fmpz .stirling_s1 (n , 1 ),
145+ [OE , 0 , 1 , - 1 , 2 , - 6 , 24 , - 120 , 720 , - 5040 , 40320 , - 362880 ]),
146+ (lambda n : flint .fmpz .stirling_s2 (n , 2 ),
147+ [OE , 0 , 0 , 1 , 3 , 7 , 15 , 31 , 63 , 127 , 255 , 511 ]),
148+ (lambda n : flint .fmpz (n ).divisor_sigma (2 ),
149+ [1 , 0 , 1 , 5 , 10 , 21 , 26 , 50 , 50 , 85 , 91 , 130 ]),
150+ (lambda n : flint .fmpz (n ).euler_phi (),
151+ [0 , 0 , 1 , 1 , 2 , 2 , 4 , 2 , 6 , 4 , 6 , 4 ]),
152+ (lambda n : flint .fmpz (n ).isqrt (),
153+ [VE , 0 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 3 , 3 ]),
154+ (lambda n : flint .fmpz (n ).sqrtrem (),
155+ [VE , (0 , 0 ), (1 , 0 ), (1 , 1 ), (1 , 2 ), (2 , 0 ), (2 , 1 ), (2 , 2 ), (2 , 3 ), (2 , 4 ), (3 , 0 ), (3 , 1 )]),
156+ (lambda n : flint .fmpz (n ).sqrtmod (11 ),
157+ [VE , 0 , 1 , VE , 5 , 2 , 4 , VE , VE , VE , 3 , VE ]),
158+ (lambda n : flint .fmpz (n ).root (3 ),
159+ [VE , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 ]),
160+ (lambda n : flint .fmpz (n ).jacobi (3 ),
161+ [- 1 , 0 , 1 , - 1 , 0 , 1 , - 1 , 0 , 1 , - 1 , 0 , 1 ]),
162+ (lambda n : flint .fmpz (2 ).jacobi (n ),
163+ [1 , 1 , 1 , - 1 , - 1 , - 1 , - 1 , 1 , 1 , 1 , 1 , - 1 ]),
164+ ]
165+ is_exception = lambda v : isinstance (v , type ) and issubclass (v , Exception )
166+
167+ for func , values in cases :
168+ for n , val in enumerate (values , - 1 ):
169+ if is_exception (val ):
170+ raises (lambda : func (n ), val )
171+ else :
172+ assert func (n ) == val
173+
174+ raises (lambda : flint .fmpz (1 ).root (- 1 ), ValueError )
175+ raises (lambda : flint .fmpz (1 ).jacobi ('bad' ), TypeError )
176+
66177
67178def test_fmpz_poly ():
68179 Z = flint .fmpz_poly
0 commit comments