test_domainscalar.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. from sympy.testing.pytest import raises
  2. from sympy.core.symbol import S
  3. from sympy.polys import ZZ, QQ
  4. from sympy.polys.matrices.domainscalar import DomainScalar
  5. from sympy.polys.matrices.domainmatrix import DomainMatrix
  6. def test_DomainScalar___new__():
  7. raises(TypeError, lambda: DomainScalar(ZZ(1), QQ))
  8. raises(TypeError, lambda: DomainScalar(ZZ(1), 1))
  9. def test_DomainScalar_new():
  10. A = DomainScalar(ZZ(1), ZZ)
  11. B = A.new(ZZ(4), ZZ)
  12. assert B == DomainScalar(ZZ(4), ZZ)
  13. def test_DomainScalar_repr():
  14. A = DomainScalar(ZZ(1), ZZ)
  15. assert repr(A) in {'1', 'mpz(1)'}
  16. def test_DomainScalar_from_sympy():
  17. expr = S(1)
  18. B = DomainScalar.from_sympy(expr)
  19. assert B == DomainScalar(ZZ(1), ZZ)
  20. def test_DomainScalar_to_sympy():
  21. B = DomainScalar(ZZ(1), ZZ)
  22. expr = B.to_sympy()
  23. assert expr.is_Integer and expr == 1
  24. def test_DomainScalar_to_domain():
  25. A = DomainScalar(ZZ(1), ZZ)
  26. B = A.to_domain(QQ)
  27. assert B == DomainScalar(QQ(1), QQ)
  28. def test_DomainScalar_convert_to():
  29. A = DomainScalar(ZZ(1), ZZ)
  30. B = A.convert_to(QQ)
  31. assert B == DomainScalar(QQ(1), QQ)
  32. def test_DomainScalar_unify():
  33. A = DomainScalar(ZZ(1), ZZ)
  34. B = DomainScalar(QQ(2), QQ)
  35. A, B = A.unify(B)
  36. assert A.domain == B.domain == QQ
  37. def test_DomainScalar_add():
  38. A = DomainScalar(ZZ(1), ZZ)
  39. B = DomainScalar(QQ(2), QQ)
  40. assert A + B == DomainScalar(QQ(3), QQ)
  41. raises(TypeError, lambda: A + 1.5)
  42. def test_DomainScalar_sub():
  43. A = DomainScalar(ZZ(1), ZZ)
  44. B = DomainScalar(QQ(2), QQ)
  45. assert A - B == DomainScalar(QQ(-1), QQ)
  46. raises(TypeError, lambda: A - 1.5)
  47. def test_DomainScalar_mul():
  48. A = DomainScalar(ZZ(1), ZZ)
  49. B = DomainScalar(QQ(2), QQ)
  50. dm = DomainMatrix([[ZZ(1), ZZ(2)], [ZZ(3), ZZ(4)]], (2, 2), ZZ)
  51. assert A * B == DomainScalar(QQ(2), QQ)
  52. assert A * dm == dm
  53. assert B * 2 == DomainScalar(QQ(4), QQ)
  54. raises(TypeError, lambda: A * 1.5)
  55. def test_DomainScalar_floordiv():
  56. A = DomainScalar(ZZ(-5), ZZ)
  57. B = DomainScalar(QQ(2), QQ)
  58. assert A // B == DomainScalar(QQ(-5, 2), QQ)
  59. C = DomainScalar(ZZ(2), ZZ)
  60. assert A // C == DomainScalar(ZZ(-3), ZZ)
  61. raises(TypeError, lambda: A // 1.5)
  62. def test_DomainScalar_mod():
  63. A = DomainScalar(ZZ(5), ZZ)
  64. B = DomainScalar(QQ(2), QQ)
  65. assert A % B == DomainScalar(QQ(0), QQ)
  66. C = DomainScalar(ZZ(2), ZZ)
  67. assert A % C == DomainScalar(ZZ(1), ZZ)
  68. raises(TypeError, lambda: A % 1.5)
  69. def test_DomainScalar_divmod():
  70. A = DomainScalar(ZZ(5), ZZ)
  71. B = DomainScalar(QQ(2), QQ)
  72. assert divmod(A, B) == (DomainScalar(QQ(5, 2), QQ), DomainScalar(QQ(0), QQ))
  73. C = DomainScalar(ZZ(2), ZZ)
  74. assert divmod(A, C) == (DomainScalar(ZZ(2), ZZ), DomainScalar(ZZ(1), ZZ))
  75. raises(TypeError, lambda: divmod(A, 1.5))
  76. def test_DomainScalar_pow():
  77. A = DomainScalar(ZZ(-5), ZZ)
  78. B = A**(2)
  79. assert B == DomainScalar(ZZ(25), ZZ)
  80. raises(TypeError, lambda: A**(1.5))
  81. def test_DomainScalar_pos():
  82. A = DomainScalar(QQ(2), QQ)
  83. B = DomainScalar(QQ(2), QQ)
  84. assert +A == B
  85. def test_DomainScalar_eq():
  86. A = DomainScalar(QQ(2), QQ)
  87. assert A == A
  88. B = DomainScalar(ZZ(-5), ZZ)
  89. assert A != B
  90. C = DomainScalar(ZZ(2), ZZ)
  91. assert A != C
  92. D = [1]
  93. assert A != D
  94. def test_DomainScalar_isZero():
  95. A = DomainScalar(ZZ(0), ZZ)
  96. assert A.is_zero() == True
  97. B = DomainScalar(ZZ(1), ZZ)
  98. assert B.is_zero() == False
  99. def test_DomainScalar_isOne():
  100. A = DomainScalar(ZZ(1), ZZ)
  101. assert A.is_one() == True
  102. B = DomainScalar(ZZ(0), ZZ)
  103. assert B.is_one() == False