Exemplo n.º 1
0
 def __rpow__(self, other):
     if other == 1 or other == 0:
         return other
     elif isinstance(other, int) and other < 0:
         raise ValueError("Cannot raise negative integer to Ordinal power")
     else:
         ordinals = []
         for term in self.terms:
             if len(term) > 1:
                 a = Ordinal([term])
                 b = self._raise_lower_index_to_single_term_power()
             else:
                 a = term[0]
                 b = other ** a
             ordinals.append(b)
         return product(ordinals)
Exemplo n.º 2
0
 def __pow__(self, other):
     if isinstance(other, int):
         if other > 0:
             return self._raise_to_integer_power(other)
         elif other == 0:
             return 1
         else:
             raise ValueError("Cannot raise Ordinal to negative integer power")
     else:
         ordinals = []
         for term in other.terms:
             if len(term) > 1:
                 a = Ordinal([term])
                 b = self._raise_ordinal_to_single_term_power(a)
             else:
                 a = term[0]
                 b = self._raise_to_integer_power(a)
             ordinals.append(b)
         return product(ordinals)
Exemplo n.º 3
0
    def _raise_to_integer_power(self, n):
        # naive approach: repeated multiplication (this
        # does not scale well).

        # TODO: find a formula for finite powers of ordinals.
        return product(self for _ in range(n))