summaryrefslogtreecommitdiff
path: root/numpy/core/numeric.py
diff options
context:
space:
mode:
authorTim Hochberg <tim_hochberg@local>2006-04-20 21:04:52 +0000
committerTim Hochberg <tim_hochberg@local>2006-04-20 21:04:52 +0000
commit73bff2a400a2453bc387f2ed882c9ded88d89c12 (patch)
tree7ed80523a1d8b51dabd950a5b05669d5593c3d3f /numpy/core/numeric.py
parent4a4caf019b292e4fa8c7da77fe1104dbbe0b7eb3 (diff)
downloadnumpy-73bff2a400a2453bc387f2ed882c9ded88d89c12.tar.gz
Tweaks to Travis's recent addition of thread local semantics to setting of errors. Most important is that I disabled the optimization in the "default" case since it appeared broken when there were multiple threads and it didn't seem to have a significant performance impact. Added comments on how to fix it if that turns out to be desirable.
Diffstat (limited to 'numpy/core/numeric.py')
-rw-r--r--numpy/core/numeric.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py
index af4f3e6f8..f57527990 100644
--- a/numpy/core/numeric.py
+++ b/numpy/core/numeric.py
@@ -413,19 +413,24 @@ for key in _errdict.keys():
_errdict_rev[_errdict[key]] = key
del key
-def seterr(divide="ignore", over="ignore", under="ignore",
- invalid="ignore"):
+def seterr(divide=None, over=None, under=None, invalid=None):
+
+ pyvals = umath.geterrobj()
+ old = geterr()
+
+ if divide is None: divide = old['divide']
+ if over is None: over = old['over']
+ if under is None: under = old['under']
+ if invalid is None: invalid = old['invalid']
maskvalue = ((_errdict[divide] << SHIFT_DIVIDEBYZERO) +
(_errdict[over] << SHIFT_OVERFLOW ) +
(_errdict[under] << SHIFT_UNDERFLOW) +
(_errdict[invalid] << SHIFT_INVALID))
- pyvals = umath.geterrobj()
- old = pyvals[:]
pyvals[1] = maskvalue
umath.seterrobj(pyvals)
- return ufunc_values_obj(old)
+ return old
def geterr():
maskvalue = umath.geterrobj()[1]
@@ -446,10 +451,10 @@ def setbufsize(size):
raise ValueError, "Very big buffers.. %s" % size
pyvals = umath.geterrobj()
- old = pyvals[:]
+ old = getbufsize()
pyvals[0] = size
umath.seterrobj(pyvals)
- return ufunc_values_obj(old)
+ return old
def getbufsize():
return umath.geterrobj()[0]
@@ -458,10 +463,10 @@ def seterrcall(func):
if not callable(func):
raise ValueError, "Only callable can be used as callback"
pyvals = umath.geterrobj()
- old = pyvals[:]
+ old = geterrcall()
pyvals[2] = func
umath.seterrobj(pyvals)
- return ufunc_values_obj(old)
+ return old
def geterrcall():
return umath.geterrobj()[2]