class TestMonomial(unittest.TestCase):
    def setUp(self):
        self.mon_1 = Monomial(5, 2, 'x')
        self.mon_2 = Monomial(3, 4, 'x')

    def test_str(self):
        self.assertEqual(str(self.mon_1), "5*x^2")
        self.assertNotEqual(str(self.mon_1), str(self.mon_2))

    def test_add(self):
        mon_3 = Monomial(12, 2, 'x')
        self.assertEqual(str(self.mon_1 + mon_3), "17*x^2")

    def test_eq(self):
        self.assertFalse(self.mon_1 == self.mon_2)
        self.assertTrue(self.mon_1 == Monomial(5, 2, 'x'))

    def test_lt(self):
        self.assertTrue(self.mon_1 < self.mon_2)
        self.assertFalse(self.mon_2 < self.mon_1)

    def test_gt(self):
        self.assertFalse(self.mon_1 > self.mon_2)
        self.assertTrue(self.mon_2 > self.mon_1)

    def test_hash(self):
        self.assertEqual(self.mon_1.__hash__(), Monomial(5, 2, 'x').__hash__())
        self.assertNotEqual(self.mon_1.__hash__(), self.mon_2.__hash__())

    def test_derivative(self):
        dev = Monomial(10, 1, 'x')
        self.assertEqual(self.mon_1.derivative(), dev)
        self.assertNotEqual(self.mon_2.derivative(), dev)
Exemplo n.º 2
0
    def test_when_power_equals_one_then_return_the_same_coeff_and_power_0(
            self):
        monomial = Monomial(5, 1)

        expected = Monomial(5, 0)

        self.assertEqual(monomial.find_derivative(), expected)
Exemplo n.º 3
0
    def __call__(self, element):
        """
        >>> from polynomial import *
        >>> R = PolynomialRing(QQ, 'xyz')
        >>> x, y, z = R.variables()
        >>> R(2)
        2*1
        >>> R(Monomial(R, (4, 3, 2))) # this fails since monomial is not imported at the top-level in PolynomialRing 
        x^4*y^3*z^2
        """
        from polynomial import Polynomial
        from mod import Mod
        from rational import Rational
        from monomial import Monomial

        if isinstance(element, Polynomial):
            if element.ring is self:
                return element
            else:
                for i in range(len(element.monomials)):
                    element.monomials[i].ring = self
                return Polynomial(self, element.monomials,
                                  [self(coeff) for coeff in element.coeffs])
        elif isinstance(element, Monomial):
            return Polynomial(self, [element], [self.coeff_ring(1)])
        elif isinstance(element, Mod) or isinstance(
                element, Rational) or isinstance(element, int):
            return Polynomial(
                self, [Monomial(self, tuple([0 for var in self.var_list]))],
                [self.coeff_ring(element)])
Exemplo n.º 4
0
 def __pow__(self, power):
     """
     >>> from polynomial import *
     >>> R = PolynomialRing(QQ, 'xyz')
     >>> x, y, z = R.variables()
     >>> x**2
     x^2
     >>> 
     x^4*z^2 + 2*x^4*z + x^4
     >>> Polynomial(R, [Monomial(R, (2, 0, 0)), Monomial(R, (2, 0, 1))], [1, 1])**0
     1
     >>> Polynomial(R, [Monomial(R, (2, 0, 0)), Monomial(R, (2, 0, 1))], [1, 1])**1
     x^2*z + x^2
     >>> Polynomial(R, [Monomial(R, (0, 1, 0)), Monomial(R, (1, 0, 0))], [1, 1])**3
     x^3 + 3*x^2*y + 3*x*y^2 + y^3
     >>> Polynomial(R, [Monomial(R, (1, 1, 1))], [1])**5
     x^5*y^5*z^5
     """
     i = 0
     x = Polynomial(self.ring, self.monomials, self.coeffs)
     if power == 0:
         return Polynomial(self.ring, [Monomial(self.ring, (0, 0, 0))], [1]) 
     elif power == 1:
         return self
     else:
         for i in range(power-1):
             x = x * self
         return x
Exemplo n.º 5
0
 def cast_value(self):
     if self.ttype is TokenType.number:
         self.value = Monomial(Variables(''), Numbers(int(self.value)))
         self.ttype = TokenType.monomial
     elif self.ttype is TokenType.results:
         if self.value == '[last]':
             if not helpers.history:
                 raise InvalidHistoryCallException
             self.value = len(helpers.history) - 1
             return
         self.value = int(self.value[1:-1])
         if self.value >= len(helpers.history):
             raise InvalidHistoryCallException
     elif self.ttype is TokenType.symbol:
         self.value = Monomial(Variables(self.value), Numbers(1))
         self.ttype = TokenType.monomial
Exemplo n.º 6
0
    def __add_monomials(self, monomials):
        for monomial in monomials:
            monomial = monomial.split('x^')

            if monomial[0] != '0':
                self.__polynomial.append(
                    Monomial(int(monomial[0]), int(monomial[1])))
        self.__polynomial.sort(reverse=True)
Exemplo n.º 7
0
 def random_monomial(self, degree):
     """
     Returns a random monomial of degree <= 'degree'
     """
     from monomial import Monomial
     while True:
         m = [randint(0, degree) for i in range(self._num_vars)]
         if sum(m) <= degree:
             return Monomial(self, tuple(m))
Exemplo n.º 8
0
 def __split_token(token: str) -> list:
     found = False
     results = []
     for i in range(len(token)):
         try:
             if token[i] == '/' and \
                     parse_type(token[:i]) is TokenType.number and \
                     parse_type(token[i + 1:]) is TokenType.number:
                 results.append(Token(
                     item=Monomial(Variables(''),
                                   Numbers(int(token[:i]),
                                           int(token[i + 1:])),
                                   ),
                     ttype=TokenType.monomial,
                 ))
                 found = True
         except InvalidTypeException:
             pass
         try:
             if parse_type(token[:i]) is TokenType.symbol and \
                     parse_type(token[i:]) is TokenType.number:
                 results.append(Token(
                     item=Monomial(Variables(token[:i]),
                                   Numbers(int(token[i:]))),
                     ttype=TokenType.monomial,
                 ))
                 found = True
             elif parse_type(token[:i]) is TokenType.number and \
                     parse_type(token[i:]) is TokenType.symbol:
                 results.append(Token(
                     item=Monomial(Variables(token[i:]),
                                   Numbers(int(token[:i]))),
                     ttype=TokenType.monomial,
                 ))
                 found = True
         except InvalidTypeException:
             continue
     if found:
         return results
     results.append(Token(token))
     return results
Exemplo n.º 9
0
 def variables(self):
     """
     Creates pointers to polynomial variables
     >>> R = PolynomialRing(QQ, 'xyz')
     >>> x, y, z = R.variables()
     >>> x**2 + y**2
     x^2 + y^2
     >>> R = PolynomialRing(QQ, 'x')
     >>> x = R.variables()
     >>> x
     x
     """
     from polynomial import Polynomial
     from monomial import Monomial
     variables = []
     if self.num_vars() == 1:
         return Polynomial(self, [Monomial(self, (1, ))], [1])
     for i in range(len(self.var_list)):
         degree = [0 for j in range(self.num_vars())]
         degree[i] = 1
         variables.append(
             Polynomial(self, [Monomial(self, tuple(degree))], [1]))
     return tuple(variables)
Exemplo n.º 10
0
def createMonomials():
    '''
	Função que cria todos os monômios até grau 2
	Os monômios são criados levando em conta o número do atributo 
	e o sinal de menos para indicar barrado
	Ex:
	Para o monômio ~X2 tem-se o vetor [-2]
	Para o monômio ~X1X3 tem-se o vetor [-1, 3]
	'''

    for i in range(1, nAttributes + 1):
        hypothesis.append(Monomial([i]))
        hypothesis.append(Monomial([-i]))

    for i in range(1, nAttributes):
        for j in range(i + 1, nAttributes + 1):
            hypothesis.append(Monomial([i, j]))
            hypothesis.append(Monomial([-i, j]))
            hypothesis.append(Monomial([i, -j]))
            hypothesis.append(Monomial([-i, -j]))
Exemplo n.º 11
0
    def test_when_negative_coeff_and_power_then_return_derivative(self):
        monomial = Monomial(-3, -2)

        expected = Monomial(6, -3)

        self.assertEqual(monomial.find_derivative(), expected)
Exemplo n.º 12
0
    def test_when_coeff_equals_negative_1_then_print_only_minus(self):
        monomial = Monomial(-1, 5)

        expected = '-x^5'

        self.assertEqual(str(monomial), expected)
Exemplo n.º 13
0
    def test_when_coeff_equals_0_then_return_empty_string(self):
        monomial = Monomial(0, 5)

        expected = ''

        self.assertEqual(str(monomial), expected)
Exemplo n.º 14
0
    def test_when_power_is_one_then_print_only_x(self):
        monomial = Monomial(5, 1)

        expected = '5x'

        self.assertEqual(str(monomial), expected)
 def test_derivative(self):
     dev = Monomial(10, 1, 'x')
     self.assertEqual(self.mon_1.derivative(), dev)
     self.assertNotEqual(self.mon_2.derivative(), dev)
 def test_eq(self):
     self.assertFalse(self.mon_1 == self.mon_2)
     self.assertTrue(self.mon_1 == Monomial(5, 2, 'x'))
Exemplo n.º 17
0
    def test_create_polynomial(self):
        polynomial = Polynomial('5x^2-x-7')

        expected_monomials = [Monomial(5, 2), Monomial(-1, 1), Monomial(-7, 0)]

        self.assertEqual(polynomial.get_polynomial(), expected_monomials)
Exemplo n.º 18
0
    def test_when_power_equals_zero_then_return_empty_monomial(self):
        monomial = Monomial(5, 0)

        expected = Monomial(0, 0)

        self.assertEqual(monomial.find_derivative(), expected)
Exemplo n.º 19
0
    def test_when_coeff_is_less_than_negative_one_then_print_it(self):
        monomial = Monomial(-5, 10)

        expected = '-5x^10'

        self.assertEqual(str(monomial), expected)
Exemplo n.º 20
0
    def test_when_power_is_less_than_zero_then_print_it(self):
        monomial = Monomial(5, -5)

        expected = '5x^-5'

        self.assertEqual(str(monomial), expected)
Exemplo n.º 21
0
    def test_when_power_is_greater_than_one_then_print_it(self):
        monomial = Monomial(5, 5)

        expected = '5x^5'

        self.assertEqual(str(monomial), expected)
Exemplo n.º 22
0
    def test_when_coeff_equals_1_then_dont_print_it(self):
        monomial = Monomial(1, 5)

        expected = 'x^5'

        self.assertEqual(str(monomial), expected)
 def setUp(self):
     self.mon_1 = Monomial(5, 2, 'x')
     self.mon_2 = Monomial(3, 4, 'x')
Exemplo n.º 24
0
    print(Monomial(91, 5))


test_monomial_string_representation()

print('This program allows to perform basic arithmetic with two')
print('monomials, assuming that conditions are complied.')
print('')

print('*** MONOMIAL 1 ***')
print('Write the coefficient 1: ', end='')
c1 = float(input())
print('Write the exponent 1: ', end='')
e1 = int(input())
print('')
M1 = Monomial(c1, e1)

print('*** MONOMIAL 2 ***')
print('Write the coefficient 2: ', end='')
c2 = float(input())
print('Write the exponent 2: ', end='')
e2 = int(input())
print('')
M2 = Monomial(c2, e2)

monomial_sum = None
monomial_difference = None
monomial_product = None
monomial_quotient = None

# Monomial addition: M1 + M2
 def test_add(self):
     mon_3 = Monomial(12, 2, 'x')
     self.assertEqual(str(self.mon_1 + mon_3), "17*x^2")
Exemplo n.º 26
0
def test_monomial_string_representation():
    """Prints monomials to test __str__ method."""
    print(Monomial(0, 0))
    print(Monomial(0, 1))
    print(Monomial(0, 5))
    print(Monomial(1, 0))
    print(Monomial(1, 1))
    print(Monomial(1, 5))
    print(Monomial(7.5, 0))
    print(Monomial(7.5, 1))
    print(Monomial(7.5, 5))
    print(Monomial(-0, 0))
    print(Monomial(-0, 1))
    print(Monomial(-0, 5))
    print(Monomial(-1, 0))
    print(Monomial(-1, 1))
    print(Monomial(-1, 5))
    print(Monomial(-7.5, 0))
    print(Monomial(-7.5, 1))
    print(Monomial(-7.5, 5))
    print(Monomial(91, 0))
    print(Monomial(91, 1))
    print(Monomial(91, 5))
 def test_hash(self):
     self.assertEqual(self.mon_1.__hash__(), Monomial(5, 2, 'x').__hash__())
     self.assertNotEqual(self.mon_1.__hash__(), self.mon_2.__hash__())
Exemplo n.º 28
0
    def test_when_coeff_is_greater_than_one_then_print_it(self):
        monomial = Monomial(5, 10)

        expected = '5x^10'

        self.assertEqual(str(monomial), expected)
Exemplo n.º 29
0
    def test_when_positive_coeff_and_power_then_return_derivative(self):
        monomial = Monomial(3, 2)

        expected = Monomial(6, 1)

        self.assertEqual(monomial.find_derivative(), expected)
Exemplo n.º 30
0
    def test_when_power_is_zero_then_print_only_coeff(self):
        monomial = Monomial(5, 0)

        expected = '5'

        self.assertEqual(str(monomial), expected)