Example #1
0
    def _element_constructor_(self, x):
        """
        EXAMPLES::
        
            sage: CC((1,2))
            1.00000000000000 + 2.00000000000000*I
        """
        if not isinstance(x, (real_mpfr.RealNumber, tuple)):
            if isinstance(x, complex_double.ComplexDoubleElement):
                return complex_number.ComplexNumber(self, x.real(), x.imag())
            elif isinstance(x, str):
                # TODO: this is probably not the best and most
                # efficient way to do this.  -- Martin Albrecht
                return complex_number.ComplexNumber(self,
                            sage_eval(x.replace(' ',''), locals={"I":self.gen(),"i":self.gen()}))

            late_import()
            if isinstance(x, NumberFieldElement_quadratic) and list(x.parent().polynomial()) == [1, 0, 1]:
                (re, im) = list(x)
                return complex_number.ComplexNumber(self, re, im)

            try:
                return self(x.sage())
            except:
                pass
            try:
                return x._complex_mpfr_field_( self )
            except AttributeError:
                pass
        return complex_number.ComplexNumber(self, x)
Example #2
0
    def zeta(self, n=2):
        """
        Return a primitive `n`-th root of unity.

        INPUT:

        -  ``n`` - an integer (default: 2)

        OUTPUT: a complex `n`-th root of unity.

        EXAMPLES::

            sage: C = ComplexField()
            sage: C.zeta(2)
            -1.00000000000000
            sage: C.zeta(5)
            0.309016994374947 + 0.951056516295154*I
        """
        from integer import Integer
        n = Integer(n)
        if n == 1:
            x = self(1)
        elif n == 2:
            x = self(-1)
        elif n >= 3:
            # Use De Moivre
            # e^(2*pi*i/n) = cos(2pi/n) + i *sin(2pi/n)
            RR = self._real_field()
            pi = RR.pi()
            z = 2 * pi / n
            x = complex_number.ComplexNumber(self, z.cos(), z.sin())
        x._set_multiplicative_order(n)
        return x
Example #3
0
 def zeta(self, n=2):
     """
     Return a primitive `n`-th root of unity.
     
     INPUT:
     
     
     -  ``n`` - an integer (default: 2)
     
     
     OUTPUT: a complex n-th root of unity.
     """
     from integer import Integer
     n = Integer(n)
     if n == 1:
         x = self(1)
     elif n == 2:
         x = self(-1)
     elif n >= 3:
         # Use De Moivre
         # e^(2*pi*i/n) = cos(2pi/n) + i *sin(2pi/n)
         RR = self._real_field()
         pi = RR.pi()
         z = 2*pi/n
         x = complex_number.ComplexNumber(self, z.cos(), z.sin())
     x._set_multiplicative_order( n )
     return x
Example #4
0
    def _element_constructor_(self, x):
        """
        Construct a complex number.

        EXAMPLES::

            sage: CC((1,2)) # indirect doctest
            1.00000000000000 + 2.00000000000000*I

        Check that :trac:`14989` is fixed::

            sage: QQi = NumberField(x^2+1, 'i', embedding=CC(0,1))
            sage: i = QQi.order(QQi.gen()).gen(1)
            sage: CC(i)
            1.00000000000000*I

        """
        if not isinstance(x, (real_mpfr.RealNumber, tuple)):
            if isinstance(x, complex_double.ComplexDoubleElement):
                return complex_number.ComplexNumber(self, x.real(), x.imag())
            elif isinstance(x, str):
                # TODO: this is probably not the best and most
                # efficient way to do this.  -- Martin Albrecht
                return complex_number.ComplexNumber(
                    self,
                    sage_eval(x.replace(' ', ''),
                              locals={
                                  "I": self.gen(),
                                  "i": self.gen()
                              }))

            late_import()
            if isinstance(x, NumberFieldElement_quadratic):
                if isinstance(x.parent(), NumberField_quadratic) and list(
                        x.parent().polynomial()) == [1, 0, 1]:
                    (re, im) = list(x)
                    return complex_number.ComplexNumber(self, re, im)

            try:
                return self(x.sage())
            except (AttributeError, TypeError):
                pass
            try:
                return x._complex_mpfr_field_(self)
            except AttributeError:
                pass
        return complex_number.ComplexNumber(self, x)
Example #5
0
    def gen(self, n=0):
        """
        Return the generator of the complex field.

        EXAMPLES::

            sage: ComplexField().gen(0)
            1.00000000000000*I
        """
        if n != 0:
            raise IndexError("n must be 0")
        return complex_number.ComplexNumber(self, 0, 1)
Example #6
0
 def gen(self, n=0):
     if n != 0:
         raise IndexError, "n must be 0"
     return complex_number.ComplexNumber(self, 0, 1)