test_orderings.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. """Tests of monomial orderings. """
  2. from sympy.polys.orderings import (
  3. monomial_key, lex, grlex, grevlex, ilex, igrlex,
  4. LexOrder, InverseOrder, ProductOrder, build_product_order,
  5. )
  6. from sympy.abc import x, y, z, t
  7. from sympy.core import S
  8. from sympy.testing.pytest import raises
  9. def test_lex_order():
  10. assert lex((1, 2, 3)) == (1, 2, 3)
  11. assert str(lex) == 'lex'
  12. assert lex((1, 2, 3)) == lex((1, 2, 3))
  13. assert lex((2, 2, 3)) > lex((1, 2, 3))
  14. assert lex((1, 3, 3)) > lex((1, 2, 3))
  15. assert lex((1, 2, 4)) > lex((1, 2, 3))
  16. assert lex((0, 2, 3)) < lex((1, 2, 3))
  17. assert lex((1, 1, 3)) < lex((1, 2, 3))
  18. assert lex((1, 2, 2)) < lex((1, 2, 3))
  19. assert lex.is_global is True
  20. assert lex == LexOrder()
  21. assert lex != grlex
  22. def test_grlex_order():
  23. assert grlex((1, 2, 3)) == (6, (1, 2, 3))
  24. assert str(grlex) == 'grlex'
  25. assert grlex((1, 2, 3)) == grlex((1, 2, 3))
  26. assert grlex((2, 2, 3)) > grlex((1, 2, 3))
  27. assert grlex((1, 3, 3)) > grlex((1, 2, 3))
  28. assert grlex((1, 2, 4)) > grlex((1, 2, 3))
  29. assert grlex((0, 2, 3)) < grlex((1, 2, 3))
  30. assert grlex((1, 1, 3)) < grlex((1, 2, 3))
  31. assert grlex((1, 2, 2)) < grlex((1, 2, 3))
  32. assert grlex((2, 2, 3)) > grlex((1, 2, 4))
  33. assert grlex((1, 3, 3)) > grlex((1, 2, 4))
  34. assert grlex((0, 2, 3)) < grlex((1, 2, 2))
  35. assert grlex((1, 1, 3)) < grlex((1, 2, 2))
  36. assert grlex((0, 1, 1)) > grlex((0, 0, 2))
  37. assert grlex((0, 3, 1)) < grlex((2, 2, 1))
  38. assert grlex.is_global is True
  39. def test_grevlex_order():
  40. assert grevlex((1, 2, 3)) == (6, (-3, -2, -1))
  41. assert str(grevlex) == 'grevlex'
  42. assert grevlex((1, 2, 3)) == grevlex((1, 2, 3))
  43. assert grevlex((2, 2, 3)) > grevlex((1, 2, 3))
  44. assert grevlex((1, 3, 3)) > grevlex((1, 2, 3))
  45. assert grevlex((1, 2, 4)) > grevlex((1, 2, 3))
  46. assert grevlex((0, 2, 3)) < grevlex((1, 2, 3))
  47. assert grevlex((1, 1, 3)) < grevlex((1, 2, 3))
  48. assert grevlex((1, 2, 2)) < grevlex((1, 2, 3))
  49. assert grevlex((2, 2, 3)) > grevlex((1, 2, 4))
  50. assert grevlex((1, 3, 3)) > grevlex((1, 2, 4))
  51. assert grevlex((0, 2, 3)) < grevlex((1, 2, 2))
  52. assert grevlex((1, 1, 3)) < grevlex((1, 2, 2))
  53. assert grevlex((0, 1, 1)) > grevlex((0, 0, 2))
  54. assert grevlex((0, 3, 1)) < grevlex((2, 2, 1))
  55. assert grevlex.is_global is True
  56. def test_InverseOrder():
  57. ilex = InverseOrder(lex)
  58. igrlex = InverseOrder(grlex)
  59. assert ilex((1, 2, 3)) > ilex((2, 0, 3))
  60. assert igrlex((1, 2, 3)) < igrlex((0, 2, 3))
  61. assert str(ilex) == "ilex"
  62. assert str(igrlex) == "igrlex"
  63. assert ilex.is_global is False
  64. assert igrlex.is_global is False
  65. assert ilex != igrlex
  66. assert ilex == InverseOrder(LexOrder())
  67. def test_ProductOrder():
  68. P = ProductOrder((grlex, lambda m: m[:2]), (grlex, lambda m: m[2:]))
  69. assert P((1, 3, 3, 4, 5)) > P((2, 1, 5, 5, 5))
  70. assert str(P) == "ProductOrder(grlex, grlex)"
  71. assert P.is_global is True
  72. assert ProductOrder((grlex, None), (ilex, None)).is_global is None
  73. assert ProductOrder((igrlex, None), (ilex, None)).is_global is False
  74. def test_monomial_key():
  75. assert monomial_key() == lex
  76. assert monomial_key('lex') == lex
  77. assert monomial_key('grlex') == grlex
  78. assert monomial_key('grevlex') == grevlex
  79. raises(ValueError, lambda: monomial_key('foo'))
  80. raises(ValueError, lambda: monomial_key(1))
  81. M = [x, x**2*z**2, x*y, x**2, S.One, y**2, x**3, y, z, x*y**2*z, x**2*y**2]
  82. assert sorted(M, key=monomial_key('lex', [z, y, x])) == \
  83. [S.One, x, x**2, x**3, y, x*y, y**2, x**2*y**2, z, x*y**2*z, x**2*z**2]
  84. assert sorted(M, key=monomial_key('grlex', [z, y, x])) == \
  85. [S.One, x, y, z, x**2, x*y, y**2, x**3, x**2*y**2, x*y**2*z, x**2*z**2]
  86. assert sorted(M, key=monomial_key('grevlex', [z, y, x])) == \
  87. [S.One, x, y, z, x**2, x*y, y**2, x**3, x**2*y**2, x**2*z**2, x*y**2*z]
  88. def test_build_product_order():
  89. assert build_product_order((("grlex", x, y), ("grlex", z, t)), [x, y, z, t])((4, 5, 6, 7)) == \
  90. ((9, (4, 5)), (13, (6, 7)))
  91. assert build_product_order((("grlex", x, y), ("grlex", z, t)), [x, y, z, t]) == \
  92. build_product_order((("grlex", x, y), ("grlex", z, t)), [x, y, z, t])