def test_constant_equality(self):
        """Test that Constant(1) is equal to other instances of 1."""
        to_test = [Polynomial(1), Monomial(1, 0), Constant(1), 1]

        for val in to_test:
            self.assertEqual(Constant(1), val)
 def test_calculate_zero_polynomial(self):
     """Test that calculations of zero polynomial values always give 0."""
     self.assertEqual(0, ZeroPolynomial().calculate(1))
     self.assertEqual(0, Constant(0).calculate(5))
     self.assertEqual(0, Monomial(0, 1).calculate(1.1))
 def test_monomial_vector(self):
     """Test _vector for Monomials."""
     m = Monomial(6, 5)
     self.assertEqual([0, 0, 0, 0, 0, 6], m._vector)
     m._vector = [0, 0, 0, 0]
     self.assertEqual(0, m.coefficient)
 def test_monomial_set_degree(self):
     """Test setting Monomial degree"""
     m = Monomial(6, 5)
     self.assertEqual(5, m.degree)
     m.degree = 4
     self.assertEqual(4, m.degree)
def get_cycle_index_sym(n: int) -> Polynomial:
    """
    Compute the cycle index
    of S_n, i.e. the symmetry
    group of n symbols.

    """
    if n < 0:
        raise ValueError("n should be a non-negative integer.")

    memo = {
        0:
        Polynomial([Monomial({}, Fraction(1, 1))]),
        1:
        Polynomial([Monomial({1: 1}, Fraction(1, 1))]),
        2:
        Polynomial([
            Monomial({1: 2}, Fraction(1, 2)),
            Monomial({2: 1}, Fraction(1, 2))
        ]),
        3:
        Polynomial([
            Monomial({1: 3}, Fraction(1, 6)),
            Monomial({
                1: 1,
                2: 1
            }, Fraction(1, 2)),
            Monomial({3: 1}, Fraction(1, 3)),
        ]),
        4:
        Polynomial([
            Monomial({1: 4}, Fraction(1, 24)),
            Monomial({
                2: 1,
                1: 2
            }, Fraction(1, 4)),
            Monomial({
                3: 1,
                1: 1
            }, Fraction(1, 3)),
            Monomial({2: 2}, Fraction(1, 8)),
            Monomial({4: 1}, Fraction(1, 4)),
        ]),
    }
    result = cycle_index_sym_helper(n, memo)
    return result