obj.type.vtabslot_cname, self.member)
else:
return self.member
+ elif obj.type.is_complex:
+ return "__Pyx_%s_PART(%s)" % (self.member.upper(), obj_code)
else:
return "%s%s%s" % (obj_code, self.op, self.member)
is_complex = 1
to_py_function = "__pyx_PyObject_from_complex"
+ has_attributes = 1
+ scope = None
def __init__(self, real_type):
self.real_type = real_type
return (src_type.is_complex and self.real_type.assignable_from_resolved_type(src_type.real_type)
or src_type.is_numeric and self.real_type.assignable_from_resolved_type(src_type)
or src_type is error_type)
+
+ def attributes_known(self):
+ if self.scope is None:
+ import Symtab
+ self.scope = Symtab.StructOrUnionScope(self.specalization_name())
+ self.scope.declare_var("real", self.real_type, None, "real")
+ self.scope.declare_var("imag", self.real_type, None, "imag")
+ return True
def create_declaration_utility_code(self, env):
# This must always be run, because a single CComplexType instance can be shared
>>> test_literal()
(5j, (1-2.5j))
+
+ >>> test_real_imag(1-3j)
+ (1.0, -3.0)
+ >>> test_real_imag(5)
+ (5.0, 0.0)
+ >>> test_real_imag(1.5j)
+ (0.0, 1.5)
+
+ >>> test_real_imag_assignment(1, 2)
+ (1+2j)
+ >>> test_real_imag_assignment(1.5, -3.5)
+ (1.5-3.5j)
"""
-#cdef extern from "complex.h":
-# pass
+cdef extern from "complex.h":
+ pass
cimport cython
def test_literal():
return 5j, 1-2.5j
+def test_real_imag(double complex z):
+ return z.real, z.imag
+
+def test_real_imag_assignment(object a, double b):
+ cdef double complex z
+ z.real = a
+ z.imag = b
+ return z