def test_sdp_pow(): f = sdp_from_dict({(1,): 2, (0,): 3}, O_grlex) assert sdp_pow(f, 0, 0, O_grlex, ZZ) == sdp_one(0, ZZ) assert sdp_pow(f, 1, 0, O_grlex, ZZ) == f assert sdp_pow(f, 2, 0, O_grlex, ZZ) == \ sdp_from_dict({(2,): 4, (1,): 12, (0,): 9}, O_grlex) assert sdp_pow(f, 3, 0, O_grlex, ZZ) == \ sdp_from_dict({(3,): 8, (2,): 36, (1,): 54, (0,): 27}, O_grlex) assert sdp_pow(f, 4, 0, O_grlex, ZZ) == \ sdp_from_dict({(4,): 16, (3,): 96, (2,): 216, (1,): 216, (0,): 81}, O_grlex) assert sdp_pow(f, 5, 0, O_grlex, ZZ) == \ sdp_from_dict({(5,): 32, (4,): 240, (3,): 720, (2,): 1080, (1,): 810, (0,): 243}, O_grlex) f = sdp_from_dict({(3,1,0): 1, (1,2,0): -2, (0,0,1): -3, (0,0,0): 1}, O_grlex) g = sdp_from_dict({(6,2,0): 1, (4,3,0): -4, (2,4,0): 4, (3,1,1): -6, (3,1,0): 2, (1,2,1): 12, (1,2,0): -4, (0,0,2): 9, (0,0,1): -6, (0,0,0): 1}, O_grlex) assert sdp_pow(f, 2, 2, O_grlex, ZZ) == g raises(ValueError, "sdp_pow(f, -2, 2, O_grlex, ZZ)")
def test_sdp_pow(): f = sdp_from_dict({(1, ): 2, (0, ): 3}, O_grlex) assert sdp_pow(f, 0, 0, O_grlex, ZZ) == sdp_one(0, ZZ) assert sdp_pow(f, 1, 0, O_grlex, ZZ) == f assert sdp_pow(f, 2, 0, O_grlex, ZZ) == \ sdp_from_dict({(2,): 4, (1,): 12, (0,): 9}, O_grlex) assert sdp_pow(f, 3, 0, O_grlex, ZZ) == \ sdp_from_dict({(3,): 8, (2,): 36, (1,): 54, (0,): 27}, O_grlex) assert sdp_pow(f, 4, 0, O_grlex, ZZ) == \ sdp_from_dict({(4,): 16, (3,): 96, (2,): 216, (1,): 216, (0,): 81}, O_grlex) assert sdp_pow(f, 5, 0, O_grlex, ZZ) == \ sdp_from_dict({(5,): 32, (4,): 240, (3,): 720, (2,): 1080, (1,): 810, (0,): 243}, O_grlex) f = sdp_from_dict( { (3, 1, 0): 1, (1, 2, 0): -2, (0, 0, 1): -3, (0, 0, 0): 1 }, O_grlex) g = sdp_from_dict( { (6, 2, 0): 1, (4, 3, 0): -4, (2, 4, 0): 4, (3, 1, 1): -6, (3, 1, 0): 2, (1, 2, 1): 12, (1, 2, 0): -4, (0, 0, 2): 9, (0, 0, 1): -6, (0, 0, 0): 1 }, O_grlex) assert sdp_pow(f, 2, 2, O_grlex, ZZ) == g raises(ValueError, "sdp_pow(f, -2, 2, O_grlex, ZZ)")
def test_sdp_groebner(): f = sdp_from_dict({(1,2): QQ(2,), (2,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,3): QQ(2), (1,1): QQ(1), (0,0): QQ(-1)}, O_lex) a = sdp_from_dict({(1,0): QQ(1,1)}, O_lex) b = sdp_from_dict({(0,3): QQ(1,1), (0,0): QQ(-1,2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [a, b] f = sdp_from_dict({(2,1): QQ(2,), (0,2): QQ(1)}, O_lex) g = sdp_from_dict({(3,0): QQ(2), (1,1): QQ(1), (0,0): QQ(-1)}, O_lex) a = sdp_from_dict({(0,1): QQ(1,1)}, O_lex) b = sdp_from_dict({(3,0): QQ(1,1), (0,0): QQ(-1,2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [b, a] f = sdp_from_dict({(0,0,2): QQ(-1), (1,0,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,0,3): QQ(-1), (0,1,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [f, g] f = sdp_from_dict({(3,0): QQ(1), (1,1): QQ(-2)}, O_grlex) g = sdp_from_dict({(2,1): QQ(1), (0,2): QQ(-2), (1,0): QQ(1)}, O_grlex) a = sdp_from_dict({(2,0): QQ(1)}, O_grlex) b = sdp_from_dict({(1,1): QQ(1)}, O_grlex) c = sdp_from_dict({(0,2): QQ(1), (1, 0): QQ(-1,2)}, O_grlex) assert sdp_groebner((f, g), 1, O_grlex, QQ) == [a, b, c] f = sdp_from_dict({(2,0,0): -QQ(1), (0,1,0): QQ(1)}, O_lex) g = sdp_from_dict({(3,0,0): -QQ(1), (0,0,1): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(2,0,0): QQ(1), (0,1,0): -QQ(1)}, O_lex), sdp_from_dict({(1,1,0): QQ(1), (0,0,1): -QQ(1)}, O_lex), sdp_from_dict({(1,0,1): QQ(1), (0,2,0): -QQ(1)}, O_lex), sdp_from_dict({(0,3,0): QQ(1), (0,0,2): -QQ(1)}, O_lex), ] f = sdp_from_dict({(2,0,0): -QQ(1), (0,1,0): QQ(1)}, O_grlex) g = sdp_from_dict({(3,0,0): -QQ(1), (0,0,1): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(0,3,0): QQ(1), (0,0,2): -QQ(1)}, O_grlex), sdp_from_dict({(2,0,0): QQ(1), (0,1,0): -QQ(1)}, O_grlex), sdp_from_dict({(1,1,0): QQ(1), (0,0,1): -QQ(1)}, O_grlex), sdp_from_dict({(1,0,1): QQ(1), (0,2,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(2,0,0): -QQ(1), (0,0,1): QQ(1)}, O_lex) g = sdp_from_dict({(3,0,0): -QQ(1), (0,1,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(2,0,0): QQ(1), (0,0,1): -QQ(1)}, O_lex), sdp_from_dict({(1,1,0): QQ(1), (0,0,2): -QQ(1)}, O_lex), sdp_from_dict({(1,0,1): QQ(1), (0,1,0): -QQ(1)}, O_lex), sdp_from_dict({(0,2,0): QQ(1), (0,0,3): -QQ(1)}, O_lex), ] f = sdp_from_dict({(2,0,0): -QQ(1), (0,0,1): QQ(1)}, O_grlex) g = sdp_from_dict({(3,0,0): -QQ(1), (0,1,0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(0,0,3): QQ(1), (0,2,0): -QQ(1)}, O_grlex), sdp_from_dict({(2,0,0): QQ(1), (0,0,1): -QQ(1)}, O_grlex), sdp_from_dict({(1,1,0): QQ(1), (0,0,2): -QQ(1)}, O_grlex), sdp_from_dict({(1,0,1): QQ(1), (0,1,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(0,2,0): -QQ(1), (1,0,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,3,0): -QQ(1), (0,0,1): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(1,0,0): QQ(1), (0,2,0): -QQ(1)}, O_lex), sdp_from_dict({(0,3,0): QQ(1), (0,0,1): -QQ(1)}, O_lex), ] f = sdp_from_dict({(0,2,0): -QQ(1), (1,0,0): QQ(1)}, O_grlex) g = sdp_from_dict({(0,3,0): -QQ(1), (0,0,1): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(2,0,0): QQ(1), (0,1,1): -QQ(1)}, O_grlex), sdp_from_dict({(1,1,0): QQ(1), (0,0,1): -QQ(1)}, O_grlex), sdp_from_dict({(0,2,0): QQ(1), (1,0,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(0,0,2): -QQ(1), (1,0,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,0,3): -QQ(1), (0,1,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(1,0,0): QQ(1), (0,0,2): -QQ(1)}, O_lex), sdp_from_dict({(0,1,0): QQ(1), (0,0,3): -QQ(1)}, O_lex), ] f = sdp_from_dict({(0,0,2): -QQ(1), (1,0,0): QQ(1)}, O_grlex) g = sdp_from_dict({(0,0,3): -QQ(1), (0,1,0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(2,0,0): QQ(1), (0,1,1): -QQ(1)}, O_grlex), sdp_from_dict({(1,0,1): QQ(1), (0,1,0): -QQ(1)}, O_grlex), sdp_from_dict({(0,0,2): QQ(1), (1,0,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(0,2,0): -QQ(1), (0,0,1): QQ(1)}, O_lex) g = sdp_from_dict({(0,3,0): -QQ(1), (1,0,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(1,0,0): QQ(1), (0,1,1): -QQ(1)}, O_lex), sdp_from_dict({(0,2,0): QQ(1), (0,0,1): -QQ(1)}, O_lex), ] f = sdp_from_dict({(0,2,0): -QQ(1), (0,0,1): QQ(1)}, O_grlex) g = sdp_from_dict({(0,3,0): -QQ(1), (1,0,0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(0,0,3): QQ(1), (2,0,0): -QQ(1)}, O_grlex), sdp_from_dict({(1,1,0): QQ(1), (0,0,2): -QQ(1)}, O_grlex), sdp_from_dict({(0,2,0): QQ(1), (0,0,1): -QQ(1)}, O_grlex), sdp_from_dict({(0,1,1): QQ(1), (1,0,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(0,0,2): -QQ(1), (0,1,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,0,3): -QQ(1), (1,0,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({(1,0,0): QQ(1), (0,0,3): -QQ(1)}, O_lex), sdp_from_dict({(0,1,0): QQ(1), (0,0,2): -QQ(1)}, O_lex), ] f = sdp_from_dict({(0,0,2): -QQ(1), (0,1,0): QQ(1)}, O_grlex) g = sdp_from_dict({(0,0,3): -QQ(1), (1,0,0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({(0,3,0): QQ(1), (2,0,0): -QQ(1)}, O_grlex), sdp_from_dict({(1,0,1): QQ(1), (0,2,0): -QQ(1)}, O_grlex), sdp_from_dict({(0,1,1): QQ(1), (1,0,0): -QQ(1)}, O_grlex), sdp_from_dict({(0,0,2): QQ(1), (0,1,0): -QQ(1)}, O_grlex), ] f = sdp_from_dict({(2,2): QQ(4), (1,1): QQ(4), (0,0): QQ(1)}, O_lex) g = sdp_from_dict({(2,0): QQ(1), (0,2): QQ(1), (0,0):-QQ(1)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [ sdp_from_dict({(1,0): QQ(1,1), (0,7): QQ(-4,1), (0,5): QQ(8,1), (0,3): QQ(-7,1), (0,1): QQ(3,1)}, O_lex), sdp_from_dict({(0,8): QQ(1,1), (0,6): QQ(-2,1), (0,4): QQ(3,2), (0,2): QQ(-1,2), (0,0): QQ(1,16)}, O_lex), ] raises(DomainError, "sdp_groebner([], 1, O_lex, ZZ)")
def test_sdp_div(): f = sdp_from_dict({(2,1): 4, (1,1): -2, (1,0): 4, (0,1): -2, (0,0): 8}, O_grlex) assert sdp_div(f, [sdp_from_dict({(0,0): 2}, O_grlex)], 1, O_grlex, ZZ) == \ ([sdp_from_dict({(2,1): 2, (1,1): -1, (1,0): 2, (0,1): -1, (0,0): 4}, O_grlex)], []) assert sdp_div(f, [sdp_from_dict({(0,1): 2}, O_grlex)], 1, O_grlex, ZZ) == \ ([sdp_from_dict({(2,0): 2, (1,0): -1, (0,0): -1}, O_grlex)], sdp_from_dict({(1,0): 4, (0,0): 8}, O_grlex)) f = sdp_from_dict({(1,0): 1, (0,0): -1}, O_grlex) g = sdp_from_dict({(0,1): 1, (0,0): -1}, O_grlex) assert sdp_div(f, [g], 1, O_grlex, ZZ) == ([[]], f) f = sdp_from_dict({(3,): 1, (2,): -12, (0,): -42}, O_grlex) g = sdp_from_dict({(1,): 1, (0,): -3}, O_grlex) q = sdp_from_dict({(2,): 1, (1,): -9, (0,): -27}, O_grlex) r = sdp_from_dict({(0,): -123}, O_grlex) assert sdp_div(f, [g], 0, O_grlex, ZZ) == ([q], r) f = sdp_from_dict({(2,): QQ(1), (1,): QQ(2), (0,): QQ(2)}, O_grlex) g = sdp_from_dict({(0,): QQ(1)}, O_grlex) h = sdp_from_dict({(0,): QQ(2)}, O_grlex) q = sdp_from_dict({(2,): QQ(1,2), (1,): QQ(1), (0,): QQ(1)}, O_grlex) assert sdp_div(f, [g], 0, O_grlex, QQ) == ([f], []) assert sdp_div(f, [h], 0, O_grlex, QQ) == ([q], []) f = sdp_from_dict({(1,2): 1, (0,0): 1}, O_grlex) G = [sdp_from_dict({(1,1): 1, (0,0): 1}, O_grlex), sdp_from_dict({(0,1): 1, (0,0): 1}, O_grlex)] Q = [sdp_from_dict({(0,1): 1}, O_grlex), sdp_from_dict({(0,0): -1}, O_grlex)] r = sdp_from_dict({(0,0): 2}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r) f = sdp_from_dict({(2,1): 1, (1,2): 1, (0,2): 1}, O_grlex) G = [sdp_from_dict({(1,1): 1, (0,0): -1}, O_grlex), sdp_from_dict({(0,2): 1, (0,0): -1}, O_grlex)] Q = [sdp_from_dict({(1,0): 1, (0,1): 1}, O_grlex), sdp_from_dict({(0,0): 1}, O_grlex)] r = sdp_from_dict({(1,0): 1, (0,1): 1, (0,0): 1}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r) G = [sdp_from_dict({(0,2): 1, (0,0): -1}, O_grlex), sdp_from_dict({(1,1): 1, (0,0): -1}, O_grlex)] Q = [sdp_from_dict({(1,0): 1, (0,0): 1}, O_grlex), sdp_from_dict({(1,0): 1}, O_grlex)] r = sdp_from_dict({(1,0): 2, (0,0): 1}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r)
def test_sdp_groebner(): f = sdp_from_dict({(1, 2): QQ(2, ), (2, 0): QQ(1)}, O_lex) g = sdp_from_dict({(0, 3): QQ(2), (1, 1): QQ(1), (0, 0): QQ(-1)}, O_lex) a = sdp_from_dict({(1, 0): QQ(1, 1)}, O_lex) b = sdp_from_dict({(0, 3): QQ(1, 1), (0, 0): QQ(-1, 2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [a, b] f = sdp_from_dict({(2, 1): QQ(2, ), (0, 2): QQ(1)}, O_lex) g = sdp_from_dict({(3, 0): QQ(2), (1, 1): QQ(1), (0, 0): QQ(-1)}, O_lex) a = sdp_from_dict({(0, 1): QQ(1, 1)}, O_lex) b = sdp_from_dict({(3, 0): QQ(1, 1), (0, 0): QQ(-1, 2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [b, a] f = sdp_from_dict({(0, 0, 2): QQ(-1), (1, 0, 0): QQ(1)}, O_lex) g = sdp_from_dict({(0, 0, 3): QQ(-1), (0, 1, 0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [f, g] f = sdp_from_dict({(3, 0): QQ(1), (1, 1): QQ(-2)}, O_grlex) g = sdp_from_dict({(2, 1): QQ(1), (0, 2): QQ(-2), (1, 0): QQ(1)}, O_grlex) a = sdp_from_dict({(2, 0): QQ(1)}, O_grlex) b = sdp_from_dict({(1, 1): QQ(1)}, O_grlex) c = sdp_from_dict({(0, 2): QQ(1), (1, 0): QQ(-1, 2)}, O_grlex) assert sdp_groebner((f, g), 1, O_grlex, QQ) == [a, b, c] f = sdp_from_dict({(2, 0, 0): -QQ(1), (0, 1, 0): QQ(1)}, O_lex) g = sdp_from_dict({(3, 0, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (2, 0, 0): QQ(1), (0, 1, 0): -QQ(1) }, O_lex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_lex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 2, 0): -QQ(1) }, O_lex), sdp_from_dict({ (0, 3, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_lex), ] f = sdp_from_dict({(2, 0, 0): -QQ(1), (0, 1, 0): QQ(1)}, O_grlex) g = sdp_from_dict({(3, 0, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (0, 3, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_grlex), sdp_from_dict({ (2, 0, 0): QQ(1), (0, 1, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 2, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(2, 0, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_lex) g = sdp_from_dict({(3, 0, 0): -QQ(1), (0, 1, 0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (2, 0, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_lex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_lex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 1, 0): -QQ(1) }, O_lex), sdp_from_dict({ (0, 2, 0): QQ(1), (0, 0, 3): -QQ(1) }, O_lex), ] f = sdp_from_dict({(2, 0, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_grlex) g = sdp_from_dict({(3, 0, 0): -QQ(1), (0, 1, 0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (0, 0, 3): QQ(1), (0, 2, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (2, 0, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 1, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(0, 2, 0): -QQ(1), (1, 0, 0): QQ(1)}, O_lex) g = sdp_from_dict({(0, 3, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (1, 0, 0): QQ(1), (0, 2, 0): -QQ(1) }, O_lex), sdp_from_dict({ (0, 3, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_lex), ] f = sdp_from_dict({(0, 2, 0): -QQ(1), (1, 0, 0): QQ(1)}, O_grlex) g = sdp_from_dict({(0, 3, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (2, 0, 0): QQ(1), (0, 1, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 2, 0): QQ(1), (1, 0, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(0, 0, 2): -QQ(1), (1, 0, 0): QQ(1)}, O_lex) g = sdp_from_dict({(0, 0, 3): -QQ(1), (0, 1, 0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (1, 0, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_lex), sdp_from_dict({ (0, 1, 0): QQ(1), (0, 0, 3): -QQ(1) }, O_lex), ] f = sdp_from_dict({(0, 0, 2): -QQ(1), (1, 0, 0): QQ(1)}, O_grlex) g = sdp_from_dict({(0, 0, 3): -QQ(1), (0, 1, 0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (2, 0, 0): QQ(1), (0, 1, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 1, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 0, 2): QQ(1), (1, 0, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(0, 2, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_lex) g = sdp_from_dict({(0, 3, 0): -QQ(1), (1, 0, 0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (1, 0, 0): QQ(1), (0, 1, 1): -QQ(1) }, O_lex), sdp_from_dict({ (0, 2, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_lex), ] f = sdp_from_dict({(0, 2, 0): -QQ(1), (0, 0, 1): QQ(1)}, O_grlex) g = sdp_from_dict({(0, 3, 0): -QQ(1), (1, 0, 0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (0, 0, 3): QQ(1), (2, 0, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 1, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 2, 0): QQ(1), (0, 0, 1): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 1, 1): QQ(1), (1, 0, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(0, 0, 2): -QQ(1), (0, 1, 0): QQ(1)}, O_lex) g = sdp_from_dict({(0, 0, 3): -QQ(1), (1, 0, 0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 2, O_lex, QQ) == [ sdp_from_dict({ (1, 0, 0): QQ(1), (0, 0, 3): -QQ(1) }, O_lex), sdp_from_dict({ (0, 1, 0): QQ(1), (0, 0, 2): -QQ(1) }, O_lex), ] f = sdp_from_dict({(0, 0, 2): -QQ(1), (0, 1, 0): QQ(1)}, O_grlex) g = sdp_from_dict({(0, 0, 3): -QQ(1), (1, 0, 0): QQ(1)}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, QQ) == [ sdp_from_dict({ (0, 3, 0): QQ(1), (2, 0, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (1, 0, 1): QQ(1), (0, 2, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 1, 1): QQ(1), (1, 0, 0): -QQ(1) }, O_grlex), sdp_from_dict({ (0, 0, 2): QQ(1), (0, 1, 0): -QQ(1) }, O_grlex), ] f = sdp_from_dict({(2, 2): QQ(4), (1, 1): QQ(4), (0, 0): QQ(1)}, O_lex) g = sdp_from_dict({(2, 0): QQ(1), (0, 2): QQ(1), (0, 0): -QQ(1)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [ sdp_from_dict( { (1, 0): QQ(1, 1), (0, 7): QQ(-4, 1), (0, 5): QQ(8, 1), (0, 3): QQ(-7, 1), (0, 1): QQ(3, 1) }, O_lex), sdp_from_dict( { (0, 8): QQ(1, 1), (0, 6): QQ(-2, 1), (0, 4): QQ(3, 2), (0, 2): QQ(-1, 2), (0, 0): QQ(1, 16) }, O_lex), ] raises(DomainError, "sdp_groebner([], 1, O_lex, ZZ)")
def test_sdp_div(): f = sdp_from_dict({ (2, 1): 4, (1, 1): -2, (1, 0): 4, (0, 1): -2, (0, 0): 8 }, O_grlex) assert sdp_div(f, [sdp_from_dict({(0,0): 2}, O_grlex)], 1, O_grlex, ZZ) == \ ([sdp_from_dict({(2,1): 2, (1,1): -1, (1,0): 2, (0,1): -1, (0,0): 4}, O_grlex)], []) assert sdp_div(f, [sdp_from_dict({(0,1): 2}, O_grlex)], 1, O_grlex, ZZ) == \ ([sdp_from_dict({(2,0): 2, (1,0): -1, (0,0): -1}, O_grlex)], sdp_from_dict({(1,0): 4, (0,0): 8}, O_grlex)) f = sdp_from_dict({(1, 0): 1, (0, 0): -1}, O_grlex) g = sdp_from_dict({(0, 1): 1, (0, 0): -1}, O_grlex) assert sdp_div(f, [g], 1, O_grlex, ZZ) == ([[]], f) f = sdp_from_dict({(3, ): 1, (2, ): -12, (0, ): -42}, O_grlex) g = sdp_from_dict({(1, ): 1, (0, ): -3}, O_grlex) q = sdp_from_dict({(2, ): 1, (1, ): -9, (0, ): -27}, O_grlex) r = sdp_from_dict({(0, ): -123}, O_grlex) assert sdp_div(f, [g], 0, O_grlex, ZZ) == ([q], r) f = sdp_from_dict({(2, ): QQ(1), (1, ): QQ(2), (0, ): QQ(2)}, O_grlex) g = sdp_from_dict({(0, ): QQ(1)}, O_grlex) h = sdp_from_dict({(0, ): QQ(2)}, O_grlex) q = sdp_from_dict({(2, ): QQ(1, 2), (1, ): QQ(1), (0, ): QQ(1)}, O_grlex) assert sdp_div(f, [g], 0, O_grlex, QQ) == ([f], []) assert sdp_div(f, [h], 0, O_grlex, QQ) == ([q], []) f = sdp_from_dict({(1, 2): 1, (0, 0): 1}, O_grlex) G = [ sdp_from_dict({ (1, 1): 1, (0, 0): 1 }, O_grlex), sdp_from_dict({ (0, 1): 1, (0, 0): 1 }, O_grlex) ] Q = [ sdp_from_dict({(0, 1): 1}, O_grlex), sdp_from_dict({(0, 0): -1}, O_grlex) ] r = sdp_from_dict({(0, 0): 2}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r) f = sdp_from_dict({(2, 1): 1, (1, 2): 1, (0, 2): 1}, O_grlex) G = [ sdp_from_dict({ (1, 1): 1, (0, 0): -1 }, O_grlex), sdp_from_dict({ (0, 2): 1, (0, 0): -1 }, O_grlex) ] Q = [ sdp_from_dict({ (1, 0): 1, (0, 1): 1 }, O_grlex), sdp_from_dict({(0, 0): 1}, O_grlex) ] r = sdp_from_dict({(1, 0): 1, (0, 1): 1, (0, 0): 1}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r) G = [ sdp_from_dict({ (0, 2): 1, (0, 0): -1 }, O_grlex), sdp_from_dict({ (1, 1): 1, (0, 0): -1 }, O_grlex) ] Q = [ sdp_from_dict({ (1, 0): 1, (0, 0): 1 }, O_grlex), sdp_from_dict({(1, 0): 1}, O_grlex) ] r = sdp_from_dict({(1, 0): 2, (0, 0): 1}, O_grlex) assert sdp_div(f, G, 1, O_grlex, ZZ) == (Q, r)
def test_sdp_groebner(): f = sdp_from_dict({(1,2): QQ(2,), (2,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,3): QQ(2), (1,1): QQ(1), (0,0): QQ(-1)}, O_lex) a = sdp_from_dict({(1,0): QQ(1,1)}, O_lex) b = sdp_from_dict({(0,3): QQ(1,1), (0,0): QQ(-1,2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [a, b] f = sdp_from_dict({(2,1): QQ(2,), (0,2): QQ(1)}, O_lex) g = sdp_from_dict({(3,0): QQ(2), (1,1): QQ(1), (0,0): QQ(-1)}, O_lex) a = sdp_from_dict({(0,1): QQ(1,1)}, O_lex) b = sdp_from_dict({(3,0): QQ(1,1), (0,0): QQ(-1,2)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [b, a] f = sdp_from_dict({(0,0,2): QQ(-1), (1,0,0): QQ(1)}, O_lex) g = sdp_from_dict({(0,0,3): QQ(-1), (0,1,0): QQ(1)}, O_lex) assert sdp_groebner((f, g), 1, O_lex, QQ) == [f, g] f = sdp_from_dict({(3,0): QQ(1), (1,1): QQ(-2)}, O_grlex) g = sdp_from_dict({(2,1): QQ(1), (0,2): QQ(-2), (1,0): QQ(1)}, O_grlex) a = sdp_from_dict({(2,0): QQ(1)}, O_grlex) b = sdp_from_dict({(1,1): QQ(1)}, O_grlex) c = sdp_from_dict({(0,2): QQ(1), (1, 0): QQ(-1,2)}, O_grlex) assert sdp_groebner((f, g), 1, O_grlex, QQ) == [a, b, c] f = sdp_from_dict({(2,0,0): -1, (0,1,0): 1}, O_lex) g = sdp_from_dict({(3,0,0): -1, (0,0,1): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(2,0,0): 1, (0,1,0): -1}, O_lex), sdp_from_dict({(1,1,0): 1, (0,0,1): -1}, O_lex), sdp_from_dict({(1,0,1): 1, (0,2,0): -1}, O_lex), sdp_from_dict({(0,3,0): 1, (0,0,2): -1}, O_lex), ] f = sdp_from_dict({(2,0,0): -1, (0,1,0): 1}, O_grlex) g = sdp_from_dict({(3,0,0): -1, (0,0,1): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(0,3,0): 1, (0,0,2): -1}, O_grlex), sdp_from_dict({(2,0,0): 1, (0,1,0): -1}, O_grlex), sdp_from_dict({(1,1,0): 1, (0,0,1): -1}, O_grlex), sdp_from_dict({(1,0,1): 1, (0,2,0): -1}, O_grlex), ] f = sdp_from_dict({(2,0,0): -1, (0,0,1): 1}, O_lex) g = sdp_from_dict({(3,0,0): -1, (0,1,0): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(2,0,0): 1, (0,0,1): -1}, O_lex), sdp_from_dict({(1,1,0): 1, (0,0,2): -1}, O_lex), sdp_from_dict({(1,0,1): 1, (0,1,0): -1}, O_lex), sdp_from_dict({(0,2,0): 1, (0,0,3): -1}, O_lex), ] f = sdp_from_dict({(2,0,0): -1, (0,0,1): 1}, O_grlex) g = sdp_from_dict({(3,0,0): -1, (0,1,0): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(0,0,3): 1, (0,2,0): -1}, O_grlex), sdp_from_dict({(2,0,0): 1, (0,0,1): -1}, O_grlex), sdp_from_dict({(1,1,0): 1, (0,0,2): -1}, O_grlex), sdp_from_dict({(1,0,1): 1, (0,1,0): -1}, O_grlex), ] f = sdp_from_dict({(0,2,0): -1, (1,0,0): 1}, O_lex) g = sdp_from_dict({(0,3,0): -1, (0,0,1): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(1,0,0): 1, (0,2,0): -1}, O_lex), sdp_from_dict({(0,3,0): 1, (0,0,1): -1}, O_lex), ] f = sdp_from_dict({(0,2,0): -1, (1,0,0): 1}, O_grlex) g = sdp_from_dict({(0,3,0): -1, (0,0,1): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(2,0,0): 1, (0,1,1): -1}, O_grlex), sdp_from_dict({(1,1,0): 1, (0,0,1): -1}, O_grlex), sdp_from_dict({(0,2,0): 1, (1,0,0): -1}, O_grlex), ] f = sdp_from_dict({(0,0,2): -1, (1,0,0): 1}, O_lex) g = sdp_from_dict({(0,0,3): -1, (0,1,0): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(1,0,0): 1, (0,0,2): -1}, O_lex), sdp_from_dict({(0,1,0): 1, (0,0,3): -1}, O_lex), ] f = sdp_from_dict({(0,0,2): -1, (1,0,0): 1}, O_grlex) g = sdp_from_dict({(0,0,3): -1, (0,1,0): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(2,0,0): 1, (0,1,1): -1}, O_grlex), sdp_from_dict({(1,0,1): 1, (0,1,0): -1}, O_grlex), sdp_from_dict({(0,0,2): 1, (1,0,0): -1}, O_grlex), ] f = sdp_from_dict({(0,2,0): -1, (0,0,1): 1}, O_lex) g = sdp_from_dict({(0,3,0): -1, (1,0,0): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(1,0,0): 1, (0,1,1): -1}, O_lex), sdp_from_dict({(0,2,0): 1, (0,0,1): -1}, O_lex), ] f = sdp_from_dict({(0,2,0): -1, (0,0,1): 1}, O_grlex) g = sdp_from_dict({(0,3,0): -1, (1,0,0): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(0,0,3): 1, (2,0,0): -1}, O_grlex), sdp_from_dict({(1,1,0): 1, (0,0,2): -1}, O_grlex), sdp_from_dict({(0,2,0): 1, (0,0,1): -1}, O_grlex), sdp_from_dict({(0,1,1): 1, (1,0,0): -1}, O_grlex), ] f = sdp_from_dict({(0,0,2): -1, (0,1,0): 1}, O_lex) g = sdp_from_dict({(0,0,3): -1, (1,0,0): 1}, O_lex) assert sdp_groebner((f, g), 2, O_lex, ZZ) == [ sdp_from_dict({(1,0,0): 1, (0,0,3): -1}, O_lex), sdp_from_dict({(0,1,0): 1, (0,0,2): -1}, O_lex), ] f = sdp_from_dict({(0,0,2): -1, (0,1,0): 1}, O_grlex) g = sdp_from_dict({(0,0,3): -1, (1,0,0): 1}, O_grlex) assert sdp_groebner((f, g), 2, O_grlex, ZZ) == [ sdp_from_dict({(0,3,0): 1, (2,0,0): -1}, O_grlex), sdp_from_dict({(1,0,1): 1, (0,2,0): -1}, O_grlex), sdp_from_dict({(0,1,1): 1, (1,0,0): -1}, O_grlex), sdp_from_dict({(0,0,2): 1, (0,1,0): -1}, O_grlex), ]