Commit e2a70313 authored by Stefan Behnel's avatar Stefan Behnel

Re-allow None as argument in "parallel(num_threads=None)", seems to be explicitly allowed.

But at least detect and disallow duplicate keyword arguments to parallel() and prange().
parent 227fdb1e
...@@ -8016,11 +8016,17 @@ class ParallelStatNode(StatNode, ParallelNode): ...@@ -8016,11 +8016,17 @@ class ParallelStatNode(StatNode, ParallelNode):
if self.kwargs: if self.kwargs:
# Try to find num_threads and chunksize keyword arguments # Try to find num_threads and chunksize keyword arguments
pairs = [] pairs = []
seen = set()
for dictitem in self.kwargs.key_value_pairs: for dictitem in self.kwargs.key_value_pairs:
if dictitem.key.value in seen:
error(self.pos, "Duplicate keyword argument found: %s" % dictitem.key.value)
seen.add(dictitem.key.value)
if dictitem.key.value == 'num_threads': if dictitem.key.value == 'num_threads':
self.num_threads = dictitem.value if not dictitem.value.is_none:
self.num_threads = dictitem.value
elif self.is_prange and dictitem.key.value == 'chunksize': elif self.is_prange and dictitem.key.value == 'chunksize':
self.chunksize = dictitem.value if not dictitem.value.is_none:
self.chunksize = dictitem.value
else: else:
pairs.append(dictitem) pairs.append(dictitem)
......
...@@ -149,9 +149,6 @@ with nogil, cython.parallel.parallel(): ...@@ -149,9 +149,6 @@ with nogil, cython.parallel.parallel():
with cython.parallel.parallel(): with cython.parallel.parallel():
pass pass
with nogil, cython.parallel.parallel(num_threads=None):
pass
_ERRORS = u""" _ERRORS = u"""
3:8: cython.parallel.parallel is not a module 3:8: cython.parallel.parallel is not a module
...@@ -187,6 +184,4 @@ _ERRORS = u""" ...@@ -187,6 +184,4 @@ _ERRORS = u"""
139:62: Chunksize not valid for the schedule runtime 139:62: Chunksize not valid for the schedule runtime
145:70: Calling gil-requiring function not allowed without gil 145:70: Calling gil-requiring function not allowed without gil
149:33: Nested parallel with blocks are disallowed 149:33: Nested parallel with blocks are disallowed
152:49: Cannot assign None to int
152:49: Coercion from Python not allowed without the GIL
""" """
...@@ -9,12 +9,18 @@ with nogil, parallel(num_threads=None): ...@@ -9,12 +9,18 @@ with nogil, parallel(num_threads=None):
pass pass
# invalid # invalid
with nogil, parallel(num_threads=None, num_threads=None):
pass
with nogil, parallel(num_threads=0): with nogil, parallel(num_threads=0):
pass pass
with nogil, parallel(num_threads=i): with nogil, parallel(num_threads=i):
pass pass
with nogil, parallel(num_threads=2, num_threads=2):
pass
with nogil, parallel(num_threads=2): with nogil, parallel(num_threads=2):
for i in prange(10, num_threads=2): for i in prange(10, num_threads=2):
pass pass
...@@ -28,7 +34,9 @@ for i in prange(10, nogil=True, num_threads=2): ...@@ -28,7 +34,9 @@ for i in prange(10, nogil=True, num_threads=2):
pass pass
_ERRORS = u""" _ERRORS = u"""
e_invalid_num_threads.pyx:12:20: argument to num_threads must be greater than 0 12:20: Duplicate keyword argument found: num_threads
e_invalid_num_threads.pyx:19:19: num_threads already declared in outer section 15:20: argument to num_threads must be greater than 0
e_invalid_num_threads.pyx:23:19: num_threads must be declared in the parent parallel section 21:20: Duplicate keyword argument found: num_threads
25:19: num_threads already declared in outer section
29:19: num_threads must be declared in the parent parallel section
""" """
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment