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)
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
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
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)
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)
def gen(self, n=0): if n != 0: raise IndexError, "n must be 0" return complex_number.ComplexNumber(self, 0, 1)