Initialisation du repository de Beta
This commit is contained in:
commit
14985f6dbb
9469 changed files with 1903273 additions and 0 deletions
|
|
@ -0,0 +1,113 @@
|
|||
# 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))
|
||||
Loading…
Add table
Add a link
Reference in a new issue