def _richcmp_(self, other, op): """ Compare this polynomial with other. Polynomials are first compared by degree, then in dictionary order starting with the coefficient of largest degree. EXAMPLES:: sage: R.<x> = PolynomialRing(ZZ, sparse=True) sage: 3*x^100 - 12 > 12*x + 5 True sage: 3*x^100 - 12 > 3*x^100 - x^50 + 5 True sage: 3*x^100 - 12 < 3*x^100 - x^50 + 5 False sage: x^100 + x^10 - 1 < x^100 + x^10 True sage: x^100 < x^100 - x^10 False TESTS:: sage: R.<x> = PolynomialRing(QQ, sparse=True) sage: 2*x^2^500 > x^2^500 True sage: Rd = PolynomialRing(ZZ, 'x', sparse=False) sage: Rs = PolynomialRing(ZZ, 'x', sparse=True) sage: for _ in range(100): ....: pd = Rd.random_element() ....: qd = Rd.random_element() ....: assert bool(pd < qd) == bool(Rs(pd) < Rs(qd)) """ d1 = self.degree() d2 = other.degree() # Special case constant polynomials if d1 <= 0 and d2 <= 0: return richcmp(self[0], other[0], op) # For different degrees, compare the degree if d1 != d2: return rich_to_bool_sgn(op, d1 - d2) degs = set(self.__coeffs) | set(other.__coeffs) for i in sorted(degs, reverse=True): x = self[i] y = other[i] res = richcmp_item(x, y, op) if res is not NotImplemented: return res return rich_to_bool(op, 0)