Skip to content

Commit 2e9479e

Browse files
sebergrossbar
andauthored
DOC: Clean up errstate handling in our tests (numpy#23813)
* TST: Clean up errstate handling in our tests It is plausible that this doesn't fix everything, but it fixes at least most. Co-authored-by: Ross Barnowski <[email protected]>
1 parent d32856e commit 2e9479e

File tree

2 files changed

+34
-25
lines changed

2 files changed

+34
-25
lines changed

numpy/core/_add_newdocs.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4808,7 +4808,8 @@
48084808
48094809
Examples
48104810
--------
4811-
>>> np.geterrobj() # first get the defaults
4811+
>>> orig_errobj = np.geterrobj()[:] # get a copy of the errobj
4812+
>>> orig_errobj
48124813
[8192, 521, None]
48134814
48144815
>>> def err_handler(type, flag):
@@ -4818,7 +4819,7 @@
48184819
>>> old_err = np.seterr(divide='raise')
48194820
>>> old_handler = np.seterrcall(err_handler)
48204821
>>> np.geterrobj()
4821-
[8192, 521, <function err_handler at 0x91dcaac>]
4822+
[20000, 522, <function err_handler at 0x...>]
48224823
48234824
>>> old_err = np.seterr(all='ignore')
48244825
>>> np.base_repr(np.geterrobj()[1], 8)
@@ -4827,6 +4828,7 @@
48274828
... invalid='print')
48284829
>>> np.base_repr(np.geterrobj()[1], 8)
48294830
'4351'
4831+
>>> old_errobj = np.seterrobj(orig_errobj) # restore the error state
48304832
48314833
""")
48324834

@@ -4871,8 +4873,8 @@
48714873
48724874
Examples
48734875
--------
4874-
>>> old_errobj = np.geterrobj() # first get the defaults
4875-
>>> old_errobj
4876+
>>> orig_errobj = np.geterrobj()[:] # get a copy of the errobj
4877+
>>> orig_errobj
48764878
[8192, 521, None]
48774879
48784880
>>> def err_handler(type, flag):
@@ -4883,9 +4885,10 @@
48834885
>>> np.base_repr(12, 8) # int for divide=4 ('print') and over=1 ('warn')
48844886
'14'
48854887
>>> np.geterr()
4886-
{'over': 'warn', 'divide': 'print', 'invalid': 'ignore', 'under': 'ignore'}
4888+
{'divide': 'print', 'over': 'warn', 'under': 'ignore', 'invalid': 'ignore'}
48874889
>>> np.geterrcall() is err_handler
48884890
True
4891+
>>> old_errobj = np.seterrobj(orig_errobj) # restore the original state
48894892
48904893
""")
48914894

numpy/core/_ufunc_config.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,11 @@ def seterr(all=None, divide=None, over=None, under=None, invalid=None):
8585
8686
Examples
8787
--------
88-
>>> old_settings = np.seterr(all='ignore') #seterr to known value
89-
>>> np.seterr(over='raise')
90-
{'divide': 'ignore', 'over': 'ignore', 'under': 'ignore', 'invalid': 'ignore'}
91-
>>> np.seterr(**old_settings) # reset to default
92-
{'divide': 'ignore', 'over': 'raise', 'under': 'ignore', 'invalid': 'ignore'}
93-
88+
>>> orig_settings = np.seterr(all='ignore') # seterr to known value
9489
>>> np.int16(32000) * np.int16(3)
9590
30464
91+
>>> np.seterr(over='raise')
92+
{'divide': 'ignore', 'over': 'ignore', 'under': 'ignore', 'invalid': 'ignore'}
9693
>>> old_settings = np.seterr(all='warn', over='raise')
9794
>>> np.int16(32000) * np.int16(3)
9895
Traceback (most recent call last):
@@ -104,6 +101,8 @@ def seterr(all=None, divide=None, over=None, under=None, invalid=None):
104101
{'divide': 'print', 'over': 'print', 'under': 'print', 'invalid': 'print'}
105102
>>> np.int16(32000) * np.int16(3)
106103
30464
104+
>>> np.seterr(**orig_settings) # restore original
105+
{'divide': 'print', 'over': 'print', 'under': 'print', 'invalid': 'print'}
107106
108107
"""
109108

@@ -155,14 +154,18 @@ def geterr():
155154
--------
156155
>>> np.geterr()
157156
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
158-
>>> np.arange(3.) / np.arange(3.)
157+
>>> np.arange(3.) / np.arange(3.) # doctest: +SHOW_WARNINGS
159158
array([nan, 1., 1.])
159+
RuntimeWarning: invalid value encountered in divide
160160
161-
>>> oldsettings = np.seterr(all='warn', over='raise')
161+
>>> oldsettings = np.seterr(all='warn', invalid='raise')
162162
>>> np.geterr()
163-
{'divide': 'warn', 'over': 'raise', 'under': 'warn', 'invalid': 'warn'}
163+
{'divide': 'warn', 'over': 'warn', 'under': 'warn', 'invalid': 'raise'}
164164
>>> np.arange(3.) / np.arange(3.)
165-
array([nan, 1., 1.])
165+
Traceback (most recent call last):
166+
...
167+
FloatingPointError: invalid value encountered in divide
168+
>>> oldsettings = np.seterr(**oldsettings) # restore original
166169
167170
"""
168171
maskvalue = umath.geterrobj()[1]
@@ -267,16 +270,16 @@ def seterrcall(func):
267270
... print("Floating point error (%s), with flag %s" % (type, flag))
268271
...
269272
270-
>>> saved_handler = np.seterrcall(err_handler)
271-
>>> save_err = np.seterr(all='call')
273+
>>> orig_handler = np.seterrcall(err_handler)
274+
>>> orig_err = np.seterr(all='call')
272275
273276
>>> np.array([1, 2, 3]) / 0.0
274277
Floating point error (divide by zero), with flag 1
275278
array([inf, inf, inf])
276279
277-
>>> np.seterrcall(saved_handler)
280+
>>> np.seterrcall(orig_handler)
278281
<function err_handler at 0x...>
279-
>>> np.seterr(**save_err)
282+
>>> np.seterr(**orig_err)
280283
{'divide': 'call', 'over': 'call', 'under': 'call', 'invalid': 'call'}
281284
282285
Log error message:
@@ -294,9 +297,9 @@ def seterrcall(func):
294297
LOG: Warning: divide by zero encountered in divide
295298
array([inf, inf, inf])
296299
297-
>>> np.seterrcall(saved_handler)
298-
<numpy.core.numeric.Log object at 0x...>
299-
>>> np.seterr(**save_err)
300+
>>> np.seterrcall(orig_handler)
301+
<numpy.Log object at 0x...>
302+
>>> np.seterr(**orig_err)
300303
{'divide': 'log', 'over': 'log', 'under': 'log', 'invalid': 'log'}
301304
302305
"""
@@ -341,17 +344,19 @@ def geterrcall():
341344
--------
342345
>>> np.geterrcall() # we did not yet set a handler, returns None
343346
344-
>>> oldsettings = np.seterr(all='call')
347+
>>> orig_settings = np.seterr(all='call')
345348
>>> def err_handler(type, flag):
346349
... print("Floating point error (%s), with flag %s" % (type, flag))
347-
>>> oldhandler = np.seterrcall(err_handler)
350+
>>> old_handler = np.seterrcall(err_handler)
348351
>>> np.array([1, 2, 3]) / 0.0
349352
Floating point error (divide by zero), with flag 1
350353
array([inf, inf, inf])
351354
352355
>>> cur_handler = np.geterrcall()
353356
>>> cur_handler is err_handler
354357
True
358+
>>> old_settings = np.seterr(**orig_settings) # restore original
359+
>>> old_handler = np.seterrcall(None) # restore original
355360
356361
"""
357362
return umath.geterrobj()[2]
@@ -404,7 +409,7 @@ class errstate(contextlib.ContextDecorator):
404409
405410
>>> np.arange(3) / 0.
406411
array([nan, inf, inf])
407-
>>> with np.errstate(divide='warn'):
412+
>>> with np.errstate(divide='ignore'):
408413
... np.arange(3) / 0.
409414
array([nan, inf, inf])
410415
@@ -420,6 +425,7 @@ class errstate(contextlib.ContextDecorator):
420425
421426
>>> np.geterr()
422427
{'divide': 'ignore', 'over': 'ignore', 'under': 'ignore', 'invalid': 'ignore'}
428+
>>> olderr = np.seterr(**olderr) # restore original state
423429
424430
"""
425431

0 commit comments

Comments
 (0)