diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index dd5283fd7d6509ef7dd3db6db2d755137d91a669..fc22b8dacf5affd4af87a521e80427133c800883 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -219,7 +219,7 @@ class Program(object): def _build_and_catch_errors(self, build_func, options, source=None): try: return build_func() - except _cl.RuntimeError, e: + except _cl.RuntimeError as e: what = e.what if options: what = what + "\n(options: %s)" % " ".join(options) @@ -418,7 +418,7 @@ def _add_functionality(): err = None try: self._build(options=options, devices=devices) - except Error, e: + except Error as e: what = e.what + "\n\n" + (75*"="+"\n").join( "Build on %s:\n\n%s" % (dev, log) for dev, log in self._get_build_logs()) @@ -537,7 +537,7 @@ def _add_functionality(): self.set_arg(i, pack(arg_type_char, arg)) else: self.set_arg(i, arg) - except LogicError, e: + except LogicError as e: if i is not None: advice = "" from pyopencl.array import Array @@ -742,7 +742,7 @@ def create_some_context(interactive=None, answers=None): def cc_print(s): if interactive: - print s + print(s) def get_input(prompt): if answers: diff --git a/pyopencl/_cffi.py b/pyopencl/_cffi.py index e58364adaf81de6bdd408721d29dd6d43e2a4f78..e48ad1ae28d978f8cbf79b1f0774847f357f328b 100644 --- a/pyopencl/_cffi.py +++ b/pyopencl/_cffi.py @@ -137,7 +137,7 @@ def _get_wrapcl_so_names(): yield os.path.join(current_directory, "_wrapcl" + ext) from distutils.sysconfig import get_config_var - yield os.path.join(current_directory, "_wrapcl" + get_config_var('SO')) + yield os.path.join(current_directory, "_wrapcl" + get_config_var('EXT_SUFFIX')) def _import_library(): diff --git a/pyopencl/cache.py b/pyopencl/cache.py index 9a6a2cf6aee63b20f75c2a2242436f34aba3e61c..594b9e921f19f1f692e04fbf27f6bd7d993898a2 100644 --- a/pyopencl/cache.py +++ b/pyopencl/cache.py @@ -470,6 +470,14 @@ def _create_built_program_from_source_cached(ctx, src, options, devices, cache_d def create_built_program_from_source_cached(ctx, src, options=[], devices=None, cache_dir=None): + # FIXME REMOVE + if cache_dir is not False: + prg, already_built = _create_built_program_from_source_cached( + ctx, src, options, devices, cache_dir) + else: + prg = _cl._Program(ctx, src) + already_built = False + # FIXME END REMOVE try: if cache_dir is not False: prg, already_built = _create_built_program_from_source_cached( diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index 583f6b926593ffd1b838668a3794ef96b8457da9..b3a77f3c5e7018f34a9a9c0a0d06081c67c67de9 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -99,6 +99,9 @@ class _CArrays(_CArray): def _generic_info_to_python(info): type_ = _ffi.string(info.type) + if sys.version_info >= (3,): + type_ = type_.decode() + value = _ffi.cast(type_, info.value) if info.opaque_class != _lib.CLASS_NONE: @@ -128,12 +131,22 @@ def _generic_info_to_python(info): return ci(value) if type_ == 'char*': ret = _ffi.string(value) + if sys.version_info >= (3,): + ret = ret.decode() elif type_.startswith('char*['): ret = map(_ffi.string, value) + if sys.version_info >= (3,): + ret = [s.decode() for s in ret] _lib.pyopencl_free_pointer_array(info.value, len(value)) elif type_.endswith(']'): if type_.startswith('char['): - ret = ''.join(a[0] for a in value) + # This is usually a CL binary, which may contain NUL characters + # that should be preserved. + if sys.version_info < (3,): + ret = ''.join(a[0] for a in value) + else: + ret = bytes(_ffi.buffer(value)) + elif type_.startswith('generic_info['): ret = list(map(_generic_info_to_python, value)) elif type_.startswith('cl_image_format['): @@ -257,14 +270,19 @@ class channel_type(_NoInit): @_ffi.callback('void(const char*, const char* name, long value)') def _constant_callback(type_, name, value): s_type = _ffi.string(type_) + s_name = _ffi.string(name) + + if sys.version_info >= (3,): + s_type = s_type.decode() + s_name = s_name.decode() + _constants.setdefault(s_type, {}) - _constants[s_type][_ffi.string(name)] = value + _constants[s_type][s_name] = value + _lib.populate_constants(_constant_callback) for type_, d in _constants.iteritems(): - if sys.version_info >= (3,): - type_ = type_.decode() - locals()[type_] = type(type_, (_NoInit,), d) + locals()[type_] = x = type(type_, (_NoInit,), d) # }}} diff --git a/setup.py b/setup.py index a6a220a656e56adc394c643778dfc579e5223af4..763d5a2c185727366e0314223abd58bb423a4278 100644 --- a/setup.py +++ b/setup.py @@ -203,8 +203,6 @@ def main(): 'Programming Language :: C++', 'Programming Language :: Python', 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.4', - 'Programming Language :: Python :: 2.5', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3',