| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # Test Matrix/DomainMatrix interaction.
- from sympy import GF, ZZ, QQ, EXRAW
- from sympy.polys.matrices import DomainMatrix, DM
- from sympy import (
- Matrix,
- MutableMatrix,
- ImmutableMatrix,
- SparseMatrix,
- MutableDenseMatrix,
- ImmutableDenseMatrix,
- MutableSparseMatrix,
- ImmutableSparseMatrix,
- )
- from sympy import symbols, S, sqrt
- from sympy.testing.pytest import raises
- x, y = symbols('x y')
- MATRIX_TYPES = (
- Matrix,
- MutableMatrix,
- ImmutableMatrix,
- SparseMatrix,
- MutableDenseMatrix,
- ImmutableDenseMatrix,
- MutableSparseMatrix,
- ImmutableSparseMatrix,
- )
- IMMUTABLE = (
- ImmutableMatrix,
- ImmutableDenseMatrix,
- ImmutableSparseMatrix,
- )
- def DMs(items, domain):
- return DM(items, domain).to_sparse()
- def test_Matrix_rep_domain():
- for Mat in MATRIX_TYPES:
- M = Mat([[1, 2], [3, 4]])
- assert M._rep == DMs([[1, 2], [3, 4]], ZZ)
- assert (M / 2)._rep == DMs([[(1,2), 1], [(3,2), 2]], QQ)
- if not isinstance(M, IMMUTABLE):
- M[0, 0] = x
- assert M._rep == DMs([[x, 2], [3, 4]], EXRAW)
- M = Mat([[S(1)/2, 2], [3, 4]])
- assert M._rep == DMs([[(1,2), 2], [3, 4]], QQ)
- if not isinstance(M, IMMUTABLE):
- M[0, 0] = x
- assert M._rep == DMs([[x, 2], [3, 4]], EXRAW)
- dM = DMs([[1, 2], [3, 4]], ZZ)
- assert Mat._fromrep(dM)._rep == dM
- # XXX: This is not intended. Perhaps it should be coerced to EXRAW?
- # The private _fromrep method is never called like this but perhaps it
- # should be guarded.
- #
- # It is not clear how to integrate domains other than ZZ, QQ and EXRAW with
- # the rest of Matrix or if the public type for this needs to be something
- # different from Matrix somehow.
- K = QQ.algebraic_field(sqrt(2))
- dM = DM([[1, 2], [3, 4]], K)
- assert Mat._fromrep(dM)._rep.domain == K
- def test_Matrix_to_DM():
- M = Matrix([[1, 2], [3, 4]])
- assert M.to_DM() == DMs([[1, 2], [3, 4]], ZZ)
- assert M.to_DM() is not M._rep
- assert M.to_DM(field=True) == DMs([[1, 2], [3, 4]], QQ)
- assert M.to_DM(domain=QQ) == DMs([[1, 2], [3, 4]], QQ)
- assert M.to_DM(domain=QQ[x]) == DMs([[1, 2], [3, 4]], QQ[x])
- assert M.to_DM(domain=GF(3)) == DMs([[1, 2], [0, 1]], GF(3))
- M = Matrix([[1, 2], [3, 4]])
- M[0, 0] = x
- assert M._rep.domain == EXRAW
- M[0, 0] = 1
- assert M.to_DM() == DMs([[1, 2], [3, 4]], ZZ)
- M = Matrix([[S(1)/2, 2], [3, 4]])
- assert M.to_DM() == DMs([[QQ(1,2), 2], [3, 4]], QQ)
- M = Matrix([[x, 2], [3, 4]])
- assert M.to_DM() == DMs([[x, 2], [3, 4]], ZZ[x])
- assert M.to_DM(field=True) == DMs([[x, 2], [3, 4]], ZZ.frac_field(x))
- M = Matrix([[1/x, 2], [3, 4]])
- assert M.to_DM() == DMs([[1/x, 2], [3, 4]], ZZ.frac_field(x))
- M = Matrix([[1, sqrt(2)], [3, 4]])
- K = QQ.algebraic_field(sqrt(2))
- sqrt2 = K.from_sympy(sqrt(2)) # XXX: Maybe K(sqrt(2)) should work
- M_K = DomainMatrix([[K(1), sqrt2], [K(3), K(4)]], (2, 2), K)
- assert M.to_DM() == DMs([[1, sqrt(2)], [3, 4]], EXRAW)
- assert M.to_DM(extension=True) == M_K.to_sparse()
- # Options cannot be used with the domain parameter
- M = Matrix([[1, 2], [3, 4]])
- raises(TypeError, lambda: M.to_DM(domain=QQ, field=True))
|