From c33b95eca533f370dd50b46c5d510ded73d016da Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 30 Aug 2012 16:10:33 -0500 Subject: [PATCH] Better parsing in create_some_context. (integers work if they're intended as substrings of dev/plat names) --- pyopencl/__init__.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 48a09351..95e9283c 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -688,33 +688,39 @@ def create_some_context(interactive=True, answers=None): if not answer: platform = platforms[0] else: + platform = None try: - choice = int(answer) + int_choice = int(answer) except ValueError: + pass + else: + if 0 <= int_choice < len(platforms): + platform = platforms[int_choice] + + if platform is None: answer = answer.lower() - platform = None for i, pf in enumerate(platforms): if answer in pf.name.lower(): platform = pf if platform is None: raise RuntimeError("input did not match any platform") - else: - platform = platforms[choice] - devices = platform.get_devices() def parse_device(choice): try: - choice = int(choice) + int_choice = int(choice) except ValueError: - choice = choice.lower() - for i, dev in enumerate(devices): - if choice in dev.name.lower(): - return dev - raise RuntimeError("input did not match any platform") + pass else: - return devices[choice] + if 0 <= int_choice < len(devices): + return devices[int_choice] + + choice = choice.lower() + for i, dev in enumerate(devices): + if choice in dev.name.lower(): + return dev + raise RuntimeError("input did not match any platform") if not devices: raise Error("no devices found") -- GitLab