diff --git a/pyopencl/array.py b/pyopencl/array.py index 39b7f2f014b06dedb8fea0792ca2ea7d909ff3e0..9d34763b79c93ecdf618d19998a885f29bc3d273 100644 --- a/pyopencl/array.py +++ b/pyopencl/array.py @@ -38,6 +38,7 @@ from pyopencl.compyte.array import ( c_contiguous_strides as _c_contiguous_strides, ArrayFlags as _ArrayFlags, get_common_dtype as _get_common_dtype_base) +from pyopencl.compyte.dtypes import DTypeDict as _DTypeDict from pyopencl.characterize import has_double_support @@ -66,7 +67,7 @@ def _create_vector_types(): from pyopencl.tools import get_or_register_dtype vec.types = {} - vec.type_to_scalar_and_count = {} + vec.type_to_scalar_and_count = _DTypeDict() counts = [2, 3, 4, 8, 16] @@ -98,10 +99,18 @@ def _create_vector_types(): if len(titles) < len(names): titles.extend((len(names)-len(titles))*[None]) - dtype = np.dtype(dict( - names=names, - formats=[base_type]*padded_count, - titles=titles)) + try: + dtype = np.dtype(dict( + names=names, + formats=[base_type]*padded_count, + titles=titles)) + except NotImplementedError: + try: + dtype = np.dtype([((n, title), base_type) + for (n, title) in zip(names, titles)]) + except TypeError: + dtype = np.dtype([(n, base_type) for (n, title) + in zip(names, titles)]) get_or_register_dtype(name, dtype) @@ -136,9 +145,8 @@ def _create_vector_types(): vec.type_to_scalar_and_count[dtype] = np.dtype(base_type), count try: - # Not yet implemented in pypy as of 5/2014 _create_vector_types() -except NotImplementedError: +except: pass # }}}