Path: blob/master/sage/modules/vector_complex_double_dense.pyx
4036 views
r"""1Dense complex double vectors using a NumPy backend.23EXAMPLES::45sage: v = vector(CDF,[(1,-1), (2,pi), (3,5)])6sage: v7(1.0 - 1.0*I, 2.0 + 3.14159265359*I, 3.0 + 5.0*I)8sage: type(v)9<type 'sage.modules.vector_complex_double_dense.Vector_complex_double_dense'>10sage: parent(v)11Vector space of dimension 3 over Complex Double Field12sage: v[0] = 513sage: v14(5.0, 2.0 + 3.14159265359*I, 3.0 + 5.0*I)15sage: loads(dumps(v)) == v16True1718TESTS::1920sage: v = vector(CDF, [2, 2])21sage: v - v22(0.0, 0.0)23sage: (v - v).norm()240.02526AUTHORS:2728-- Jason Grout, Oct 2008: switch to NumPy backend, factored out29Vector_double_dense class30"""3132##############################################################################33# Copyright (C) 2008 Jason Grout <[email protected]>34# Distributed under the terms of the GNU General Public License (GPL)35# The full text of the GPL is available at:36# http://www.gnu.org/licenses/37##############################################################################38from sage.rings.complex_double import CDF3940cimport numpy as cnumpy4142numpy=None4344cdef class Vector_complex_double_dense(vector_double_dense.Vector_double_dense):45"""46Vectors over the Complex Double Field. These are supposed to be47fast vector operations using C doubles. Most operations are48implemented using numpy which will call the underlying BLAS, if49needed, on the system.5051EXAMPLES:52sage: v = vector(CDF,[(1,-1), (2,pi), (3,5)])53sage: v54(1.0 - 1.0*I, 2.0 + 3.14159265359*I, 3.0 + 5.0*I)55sage: v*v56-21.8696044011 + 40.5663706144*I57"""58def __cinit__(self, parent, entries, coerce=True, copy=True):59global numpy60if numpy is None:61import numpy62self._numpy_dtype = numpy.dtype('complex128')63self._python_dtype = complex64self._numpy_dtypeint = cnumpy.NPY_CDOUBLE65# TODO: Make ComplexDoubleElement instead of CDF for speed66self._sage_dtype = CDF67self.__create_vector__()68return6970def __reduce__(self):71"""72Pickling7374EXAMPLE:75sage: a = vector(CDF, range(9))76sage: loads(dumps(a)) == a77True78"""79return (unpickle_v1, (self._parent, self.list(), self._degree, self._is_mutable))808182# For backwards compatibility, we must keep the function unpickle_v083def unpickle_v0(parent, entries, degree):84"""85Create a complex double vector containing the entries.8687EXAMPLE:88sage: v = vector(CDF, [1,2,3])89sage: w = sage.modules.vector_complex_double_dense.unpickle_v0(v.parent(), list(v), v.degree())90sage: v == w91True92"""93return unpickle_v1(parent, entries, degree)9495def unpickle_v1(parent, entries, degree, is_mutable=None):96"""97Create a complex double vector with the given parent, entries,98degree, and mutability.99100EXAMPLE:101sage: v = vector(CDF, [1,2,3])102sage: w = sage.modules.vector_complex_double_dense.unpickle_v1(v.parent(), list(v), v.degree(), v.is_mutable())103sage: v == w104True105"""106cdef Vector_complex_double_dense v = Vector_complex_double_dense(parent, entries)107if is_mutable is not None:108v._is_mutable = is_mutable109return v110111112113114