def is_cyclotomic(f): """Returns ``True`` if ``f`` is a cyclotomic polnomial. """ if not f.lev: return dup_zz_cyclotomic_p(f.rep, f.dom) else: return False
def test_dup_zz_cyclotomic_p(): assert dup_zz_cyclotomic_p([1, -1], ZZ) == True assert dup_zz_cyclotomic_p([1, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 1, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 0, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 1, 1, 1, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, -1, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 1, 1, 1, 1, 1, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 0, 0, 0, 1], ZZ) == True assert dup_zz_cyclotomic_p([1, 0, 0, 1, 0, 0, 1], ZZ) == True assert dup_zz_cyclotomic_p([], ZZ) == False assert dup_zz_cyclotomic_p([1], ZZ) == False assert dup_zz_cyclotomic_p([1, 0], ZZ) == False assert dup_zz_cyclotomic_p([1, 2], ZZ) == False assert dup_zz_cyclotomic_p([3, 1], ZZ) == False assert dup_zz_cyclotomic_p([1, 0, -1], ZZ) == False f = [1, 0, 1, 0, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 1] assert dup_zz_cyclotomic_p(f, ZZ) == False g = [1, 0, 1, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 1, 0, 1] assert dup_zz_cyclotomic_p(g, ZZ) == True assert dup_zz_cyclotomic_p([QQ(1), QQ(1), QQ(1)], QQ) == True assert dup_zz_cyclotomic_p([QQ(1, 2), QQ(1), QQ(1)], QQ) == False
def test_dup_zz_cyclotomic_p(): assert dup_zz_cyclotomic_p([1,-1], ZZ) == True assert dup_zz_cyclotomic_p([1,1], ZZ) == True assert dup_zz_cyclotomic_p([1,1,1], ZZ) == True assert dup_zz_cyclotomic_p([1,0,1], ZZ) == True assert dup_zz_cyclotomic_p([1,1,1,1,1], ZZ) == True assert dup_zz_cyclotomic_p([1,-1,1], ZZ) == True assert dup_zz_cyclotomic_p([1,1,1,1,1,1,1], ZZ) == True assert dup_zz_cyclotomic_p([1,0,0,0,1], ZZ) == True assert dup_zz_cyclotomic_p([1,0,0,1,0,0,1], ZZ) == True assert dup_zz_cyclotomic_p([], ZZ) == False assert dup_zz_cyclotomic_p([1], ZZ) == False assert dup_zz_cyclotomic_p([1, 0], ZZ) == False assert dup_zz_cyclotomic_p([1, 2], ZZ) == False assert dup_zz_cyclotomic_p([3, 1], ZZ) == False assert dup_zz_cyclotomic_p([1, 0, -1], ZZ) == False f = [1, 0, 1, 0, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 1, 0, 1] assert dup_zz_cyclotomic_p(f, ZZ) == False g = [1, 0, 1, 0, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 1, 0, 1] assert dup_zz_cyclotomic_p(g, ZZ) == True assert dup_zz_cyclotomic_p([QQ(1),QQ(1),QQ(1)], QQ) == True assert dup_zz_cyclotomic_p([QQ(1,2),QQ(1),QQ(1)], QQ) == False