40
40
from . import matrix_generic_dense
41
41
from . import matrix_generic_sparse
42
42
43
- from . import matrix_modn_sparse
44
-
45
- from . import matrix_mod2_dense
46
- from . import matrix_gf2e_dense
47
-
48
- from . import matrix_integer_dense
49
- from . import matrix_integer_sparse
50
-
51
- from . import matrix_rational_dense
52
- from . import matrix_rational_sparse
53
-
54
- from . import matrix_polynomial_dense
55
- from . import matrix_mpolynomial_dense
56
-
57
43
# Sage imports
58
44
import sage .structure .coerce
59
45
from sage .structure .parent import Parent
60
46
from sage .structure .unique_representation import UniqueRepresentation
61
47
import sage .rings .integer as integer
62
- import sage .rings .number_field .all
63
- import sage .rings .finite_rings .integer_mod_ring
64
48
import sage .rings .finite_rings .finite_field_constructor
65
- import sage .rings .polynomial .multi_polynomial_ring_base
66
49
import sage .misc .latex as latex
67
50
import sage .modules .free_module
68
51
69
- from sage .misc .all import lazy_attribute
52
+ from sage .misc .lazy_attribute import lazy_attribute
70
53
71
54
from sage .categories .rings import Rings
72
55
from sage .categories .fields import Fields
@@ -209,25 +192,54 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation):
209
192
if implementation is None :
210
193
# Choose default implementation:
211
194
if R is sage .rings .integer_ring .ZZ :
212
- return matrix_integer_dense .Matrix_integer_dense
195
+ try :
196
+ from . import matrix_integer_dense
197
+ except ImportError :
198
+ pass
199
+ else :
200
+ return matrix_integer_dense .Matrix_integer_dense
213
201
214
- if R is sage .rings .rational_field .QQ :
215
- return matrix_rational_dense .Matrix_rational_dense
202
+ elif R is sage .rings .rational_field .QQ :
203
+ try :
204
+ from . import matrix_rational_dense
205
+ except ImportError :
206
+ pass
207
+ else :
208
+ return matrix_rational_dense .Matrix_rational_dense
216
209
217
- if R is sage .rings .real_double .RDF :
218
- from . import matrix_real_double_dense
219
- return matrix_real_double_dense .Matrix_real_double_dense
210
+ elif isinstance (R , sage .rings .abc .RealDoubleField ):
211
+ try :
212
+ from . import matrix_real_double_dense
213
+ except ImportError :
214
+ pass
215
+ else :
216
+ return matrix_real_double_dense .Matrix_real_double_dense
220
217
221
- if R is sage .rings .complex_double . CDF :
218
+ elif isinstance ( R , sage .rings .abc . ComplexDoubleField ) :
222
219
if implementation is None or implementation == 'numpy' :
223
- from . import matrix_complex_double_dense
224
- return matrix_complex_double_dense .Matrix_complex_double_dense
220
+ try :
221
+ from . import matrix_complex_double_dense
222
+ except ImportError :
223
+ pass
224
+ else :
225
+ return matrix_complex_double_dense .Matrix_complex_double_dense
225
226
226
- if sage .rings .finite_rings .finite_field_constructor .is_FiniteField (R ):
227
+ elif sage .rings .finite_rings .finite_field_constructor .is_FiniteField (R ):
227
228
if R .order () == 2 :
228
- return matrix_mod2_dense .Matrix_mod2_dense
229
+ try :
230
+ from . import matrix_mod2_dense
231
+ except ImportError :
232
+ pass
233
+ else :
234
+ return matrix_mod2_dense .Matrix_mod2_dense
235
+
229
236
if R .characteristic () == 2 and R .order () <= 65536 : # 65536 == 2^16
230
- return matrix_gf2e_dense .Matrix_gf2e_dense
237
+ try :
238
+ from . import matrix_gf2e_dense
239
+ except ImportError :
240
+ pass
241
+ else :
242
+ return matrix_gf2e_dense .Matrix_gf2e_dense
231
243
232
244
if (not R .is_prime_field ()) and R .order () < 256 :
233
245
try :
@@ -247,37 +259,67 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation):
247
259
from . import matrix_cyclo_dense
248
260
return matrix_cyclo_dense .Matrix_cyclo_dense
249
261
250
- from sage .symbolic .ring import SR
251
- if R is SR :
252
- from . import matrix_symbolic_dense
253
- return matrix_symbolic_dense .Matrix_symbolic_dense
262
+ try :
263
+ from sage .symbolic .ring import SR
264
+ except ImportError :
265
+ pass
266
+ else :
267
+ if R is SR :
268
+ try :
269
+ from . import matrix_symbolic_dense
270
+ except ImportError :
271
+ pass
272
+ else :
273
+ return matrix_symbolic_dense .Matrix_symbolic_dense
254
274
255
- from sage .rings .complex_arb import ComplexBallField
256
- if isinstance (R , ComplexBallField ):
257
- from . import matrix_complex_ball_dense
258
- return matrix_complex_ball_dense .Matrix_complex_ball_dense
275
+ if isinstance (R , sage .rings .abc .ComplexBallField ):
276
+ try :
277
+ from . import matrix_complex_ball_dense
278
+ except ImportError :
279
+ pass
280
+ else :
281
+ return matrix_complex_ball_dense .Matrix_complex_ball_dense
259
282
260
- if sage .rings .polynomial .polynomial_ring .is_PolynomialRing (R ) and R .base_ring () in _Fields :
261
- return matrix_polynomial_dense .Matrix_polynomial_dense
283
+ try :
284
+ from sage .rings .polynomial import polynomial_ring , multi_polynomial_ring_base
285
+ except ImportError :
286
+ pass
287
+ else :
288
+ if polynomial_ring .is_PolynomialRing (R ) and R .base_ring () in _Fields :
289
+ try :
290
+ from . import matrix_polynomial_dense
291
+ except ImportError :
292
+ pass
293
+ else :
294
+ return matrix_polynomial_dense .Matrix_polynomial_dense
262
295
263
- if sage .rings .polynomial .multi_polynomial_ring_base .is_MPolynomialRing (R ) and R .base_ring () in _Fields :
264
- return matrix_mpolynomial_dense .Matrix_mpolynomial_dense
296
+ elif multi_polynomial_ring_base .is_MPolynomialRing (R ) and R .base_ring () in _Fields :
297
+ try :
298
+ from . import matrix_mpolynomial_dense
299
+ except ImportError :
300
+ pass
301
+ else :
302
+ return matrix_mpolynomial_dense .Matrix_mpolynomial_dense
265
303
266
304
# The fallback
267
305
return matrix_generic_dense .Matrix_generic_dense
268
306
269
307
# Deal with request for a specific implementation
270
308
if implementation == 'flint' :
271
309
if R is sage .rings .integer_ring .ZZ :
310
+ from . import matrix_integer_dense
272
311
return matrix_integer_dense .Matrix_integer_dense
273
312
if R is sage .rings .rational_field .QQ :
313
+ from . import matrix_rational_dense
274
314
return matrix_rational_dense .Matrix_rational_dense
275
315
raise ValueError ("'flint' matrices are only available over the integers or the rationals" )
276
316
277
317
if implementation == 'm4ri' :
278
318
if R .is_field () and R .characteristic () == 2 and R .order () <= 65536 :
279
319
if R .order () == 2 :
320
+ from . import matrix_mod2_dense
280
321
return matrix_mod2_dense .Matrix_mod2_dense
322
+ from . import matrix_gf2e_dense
281
323
return matrix_gf2e_dense .Matrix_gf2e_dense
282
324
raise ValueError ("'m4ri' matrices are only available for fields of characteristic 2 and order <= 65536" )
283
325
@@ -326,14 +368,30 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation):
326
368
if implementation is not None :
327
369
raise ValueError ("cannot choose an implementation for sparse matrices" )
328
370
329
- if isinstance (R , sage .rings .abc .IntegerModRing ) and R .order () < matrix_modn_sparse .MAX_MODULUS :
330
- return matrix_modn_sparse .Matrix_modn_sparse
371
+ if isinstance (R , sage .rings .abc .IntegerModRing ):
372
+ try :
373
+ from . import matrix_modn_sparse
374
+ except ImportError :
375
+ pass
376
+ else :
377
+ if R .order () < matrix_modn_sparse .MAX_MODULUS :
378
+ return matrix_modn_sparse .Matrix_modn_sparse
331
379
332
380
if sage .rings .rational_field .is_RationalField (R ):
333
- return matrix_rational_sparse .Matrix_rational_sparse
381
+ try :
382
+ from . import matrix_rational_sparse
383
+ except ImportError :
384
+ pass
385
+ else :
386
+ return matrix_rational_sparse .Matrix_rational_sparse
334
387
335
388
if sage .rings .integer_ring .is_IntegerRing (R ):
336
- return matrix_integer_sparse .Matrix_integer_sparse
389
+ try :
390
+ from . import matrix_integer_sparse
391
+ except ImportError :
392
+ pass
393
+ else :
394
+ return matrix_integer_sparse .Matrix_integer_sparse
337
395
338
396
# the fallback
339
397
return matrix_generic_sparse .Matrix_generic_sparse
@@ -2457,8 +2515,8 @@ def test_trivial_matrices_inverse(ring, sparse=True, implementation=None, checkr
2457
2515
2458
2516
2459
2517
# Fix unpickling Matrix_modn_dense and Matrix_integer_2x2
2460
- from sage .matrix .matrix_modn_dense_double import Matrix_modn_dense_double
2461
- from sage .matrix .matrix_integer_dense import Matrix_integer_dense
2518
+ lazy_import ( ' sage.matrix.matrix_modn_dense_double' , ' Matrix_modn_dense_double' )
2519
+ lazy_import ( ' sage.matrix.matrix_integer_dense' , ' Matrix_integer_dense' )
2462
2520
from sage .misc .persist import register_unpickle_override
2463
2521
def _MatrixSpace_ZZ_2x2 ():
2464
2522
from sage .rings .integer_ring import ZZ
@@ -2471,5 +2529,6 @@ def _MatrixSpace_ZZ_2x2():
2471
2529
'MatrixSpace_ZZ_2x2_class' , MatrixSpace )
2472
2530
register_unpickle_override ('sage.matrix.matrix_integer_2x2' ,
2473
2531
'MatrixSpace_ZZ_2x2' , _MatrixSpace_ZZ_2x2 )
2532
+ lazy_import ('sage.matrix.matrix_gf2e_dense' , 'unpickle_matrix_gf2e_dense_v0' )
2474
2533
register_unpickle_override ('sage.matrix.matrix_mod2e_dense' ,
2475
- 'unpickle_matrix_mod2e_dense_v0' , matrix_gf2e_dense . unpickle_matrix_gf2e_dense_v0 )
2534
+ 'unpickle_matrix_mod2e_dense_v0' , unpickle_matrix_gf2e_dense_v0 )
0 commit comments