def __call__(self, x, im=None): """ Construct an element. EXAMPLES:: sage: CIF(2) # indirect doctest 2 sage: CIF(CIF.0) 1*I sage: CIF('1+I') 1 + 1*I sage: CIF(2,3) 2 + 3*I sage: CIF(pi, e) 3.141592653589794? + 2.718281828459046?*I sage: ComplexIntervalField(100)(CIF(RIF(2,3))) 3.? """ if im is None: if isinstance(x, complex_interval.ComplexIntervalFieldElement): if x.parent() is self: return x else: return complex_interval.ComplexIntervalFieldElement( self, x) elif isinstance(x, complex_double.ComplexDoubleElement): return complex_interval.ComplexIntervalFieldElement( 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_interval.ComplexIntervalFieldElement( 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_interval.ComplexIntervalFieldElement( self, re, im) try: return x._complex_mpfi_(self) except AttributeError: pass try: return x._complex_mpfr_field_(self) except AttributeError: pass return complex_interval.ComplexIntervalFieldElement(self, x, im)
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_interval.ComplexIntervalFieldElement( self, z.cos(), z.sin()) x._set_multiplicative_order(n) return x
def gen(self, n=0): """ Return the generator of the complex (interval) field. EXAMPLES:: sage: CIF.0 1*I sage: CIF.gen(0) 1*I """ if n != 0: raise IndexError("n must be 0") return complex_interval.ComplexIntervalFieldElement(self, 0, 1)
def zeta(self, n=2): r""" Return a primitive `n`-th root of unity. .. TODO:: Implement :class:`ComplexIntervalFieldElement` multiplicative order and set this output to have multiplicative order ``n``. INPUT: - ``n`` -- an integer (default: 2) OUTPUT: A complex `n`-th root of unity. EXAMPLES:: sage: CIF.zeta(2) -1 sage: CIF.zeta(5) 0.309016994374948? + 0.9510565162951536?*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_interval.ComplexIntervalFieldElement( self, z.cos(), z.sin()) # Uncomment after implemented #x._set_multiplicative_order( n ) return x
def gen(self, n=0): if n != 0: raise IndexError, "n must be 0" return complex_interval.ComplexIntervalFieldElement(self, 0, 1)