From d4cd3de84870f5290faa86c86d63d7a423330165 Mon Sep 17 00:00:00 2001 From: Anton Chernyatevich Date: Thu, 8 Feb 2024 06:27:02 +0200 Subject: [PATCH 1/2] Fix eval multiple. Refactor backend --- arrayfire_wrapper/_backend.py | 17 +++++------------ .../lib/create_and_modify_array/manage_array.py | 6 +++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/arrayfire_wrapper/_backend.py b/arrayfire_wrapper/_backend.py index 88ebb94..ed3864d 100644 --- a/arrayfire_wrapper/_backend.py +++ b/arrayfire_wrapper/_backend.py @@ -49,20 +49,13 @@ def _get_backend_path_config() -> _BackendPathConfig: platform_name = platform.system() cuda_found = False - # try to use user provided AF_PATH if explicitly set - try: - af_path = Path(os.environ["AF_PATH"]) - af_is_user_path = True - except KeyError: - af_path = None - af_is_user_path = False + # Try to use user provided AF_PATH if explicitly set + af_path = os.environ.get("AF_PATH", None) + af_is_user_path = af_path is not None - try: - cuda_path = Path(os.environ["CUDA_PATH"]) - except KeyError: - cuda_path = None + cuda_path = os.environ.get("CUDA_PATH", None) - # try to find default arrayfire installation paths + # Try to find default arrayfire installation paths if platform_name == _SupportedPlatforms.windows.value or _SupportedPlatforms.is_cygwin(platform_name): if platform_name == _SupportedPlatforms.windows.value: # HACK Supressing crashes caused by missing dlls diff --git a/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py b/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py index 6a567df..557f162 100644 --- a/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py +++ b/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py @@ -93,7 +93,11 @@ def eval_multiple(num: int, /, *arrs: AFArray) -> None: """ source: https://arrayfire.org/docs/group__c__api__mat.htm#ga9e08f4cda2471a477d2fa91c2356f72c """ - call_from_clib(eval_multiple.__name__, ctypes.c_int(num), ctypes.pointer(arrs)) + arrays = (ctypes.c_void_p * num)() + for i, arr in enumerate(arrs): + arrays[i] = arr + + call_from_clib(eval_multiple.__name__, ctypes.c_int(num), ctypes.pointer(arrays)) return None From dfbb4ef0878a906484bc9b12a1281294fc59c4f9 Mon Sep 17 00:00:00 2001 From: Anton Chernyatevich Date: Thu, 8 Feb 2024 06:31:44 +0200 Subject: [PATCH 2/2] Fix to list comprehaension --- .../lib/create_and_modify_array/manage_array.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py b/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py index 557f162..1171161 100644 --- a/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py +++ b/arrayfire_wrapper/lib/create_and_modify_array/manage_array.py @@ -93,11 +93,9 @@ def eval_multiple(num: int, /, *arrs: AFArray) -> None: """ source: https://arrayfire.org/docs/group__c__api__mat.htm#ga9e08f4cda2471a477d2fa91c2356f72c """ - arrays = (ctypes.c_void_p * num)() - for i, arr in enumerate(arrs): - arrays[i] = arr + ctypes_arrs = (ctypes.c_void_p * num)(*[arr for arr in arrs]) - call_from_clib(eval_multiple.__name__, ctypes.c_int(num), ctypes.pointer(arrays)) + call_from_clib(eval_multiple.__name__, ctypes.c_int(num), ctypes.pointer(ctypes_arrs)) return None