test_repmatrix.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from sympy.testing.pytest import raises
  2. from sympy.matrices.exceptions import NonSquareMatrixError, NonInvertibleMatrixError
  3. from sympy import Matrix, Rational
  4. def test_lll():
  5. A = Matrix([[1, 0, 0, 0, -20160],
  6. [0, 1, 0, 0, 33768],
  7. [0, 0, 1, 0, 39578],
  8. [0, 0, 0, 1, 47757]])
  9. L = Matrix([[ 10, -3, -2, 8, -4],
  10. [ 3, -9, 8, 1, -11],
  11. [ -3, 13, -9, -3, -9],
  12. [-12, -7, -11, 9, -1]])
  13. T = Matrix([[ 10, -3, -2, 8],
  14. [ 3, -9, 8, 1],
  15. [ -3, 13, -9, -3],
  16. [-12, -7, -11, 9]])
  17. assert A.lll() == L
  18. assert A.lll_transform() == (L, T)
  19. assert T * A == L
  20. def test_matrix_inv_mod():
  21. A = Matrix(2, 1, [1, 0])
  22. raises(NonSquareMatrixError, lambda: A.inv_mod(2))
  23. A = Matrix(2, 2, [1, 0, 0, 0])
  24. raises(NonInvertibleMatrixError, lambda: A.inv_mod(2))
  25. A = Matrix(2, 2, [1, 2, 3, 4])
  26. Ai = Matrix(2, 2, [1, 1, 0, 1])
  27. assert A.inv_mod(3) == Ai
  28. A = Matrix(2, 2, [1, 0, 0, 1])
  29. assert A.inv_mod(2) == A
  30. A = Matrix(3, 3, [1, 2, 3, 4, 5, 6, 7, 8, 9])
  31. raises(NonInvertibleMatrixError, lambda: A.inv_mod(5))
  32. A = Matrix(3, 3, [5, 1, 3, 2, 6, 0, 2, 1, 1])
  33. Ai = Matrix(3, 3, [6, 8, 0, 1, 5, 6, 5, 6, 4])
  34. assert A.inv_mod(9) == Ai
  35. A = Matrix(3, 3, [1, 6, -3, 4, 1, -5, 3, -5, 5])
  36. Ai = Matrix(3, 3, [4, 3, 3, 1, 2, 5, 1, 5, 1])
  37. assert A.inv_mod(6) == Ai
  38. A = Matrix(3, 3, [1, 6, 1, 4, 1, 5, 3, 2, 5])
  39. Ai = Matrix(3, 3, [6, 0, 3, 6, 6, 4, 1, 6, 1])
  40. assert A.inv_mod(7) == Ai
  41. A = Matrix([[1, 2], [3, Rational(3,4)]])
  42. raises(ValueError, lambda: A.inv_mod(2))
  43. A = Matrix([[1, 2], [3, 4]])
  44. raises(TypeError, lambda: A.inv_mod(Rational(1, 2)))
  45. # https://github.com/sympy/sympy/issues/27663
  46. M = Matrix([
  47. [2, 3, 1, 4],
  48. [1, 5, 3, 2],
  49. [3, 2, 4, 1],
  50. [4, 1, 2, 5],
  51. ])
  52. assert M.inv_mod(26) == Matrix([
  53. [7, 21, 10, 10],
  54. [1, 7, 19, 3],
  55. [14, 1, 15, 1],
  56. [25, 23, 3, 12],
  57. ])