Esempio n. 1
0
    def __call__(self, *args, **kwds):
        if args and kwds:
            raise TypeError("You can pass either positional or keyword "
                            "arguments, but not both.")
        elif len(args or kwds) != self.dimension:
            raise TypeError("You must pass exactly {} "
                            "value(s) ({} given).".format(self.dimension,
                                                          len(args or kwds)))
        elif not args and tuple(sorted(iterkeys(kwds))) != self.letters:
            diff_set = set(iterkeys(kwds)) - set(self.letters)
            diff_joint = "', '".join(diff_set)
            raise TypeError("Invalid letter(s): '{}'".format(diff_joint))

        if args:
            for i, l in enumerate(self.letters):
                kwds[l] = args[i]

        if any(not isinstance(v, numbers.Number) for v in itervalues(kwds)):
            sorted_list = sorted(v for v in itervalues(kwds)\
                                 if not isinstance(v, numbers.Number))
            inv_joint = "', '".join(sorted_list)
            raise TypeError("Invalid value for letter(s): "
                            "'{}'".format(inv_joint))

        if not self:
            return 0
        elif self.is_constant():
            return sum(m[0] for m in self._monomials)

        return sum(c * functools.reduce(operator.mul,
                                        (kwds[x] ** l[x] for x in l), 1)\
                   for c, l in self._monomials)
Esempio n. 2
0
 def is_square(m):
     if m[0] < 0:
         return False
     sqrt_c = m[0] ** 0.5
     is_square_c = sqrt_c == int(sqrt_c)
     is_square_l = all(not d % 2 for d in itervalues(m[1]))
     return is_square_c and is_square_l
Esempio n. 3
0
 def is_square(m):
     sqrt_c = abs(m[0]) ** 0.5
     is_square_c = sqrt_c == int(sqrt_c)
     is_square_l = all(not d % 2 for d in itervalues(m[1]))
     return is_square_c and is_square_l
Esempio n. 4
0
    def all_monomial_degrees(self):
        if not self:
            return ()

        return tuple(sum(itervalues(m[1])) for m in self._monomials)