[Numpy-discussion] Re: seterr changes

Albert Strasheim fullung at gmail.com
Sat Apr 22 10:53:05 EDT 2006


Hello all

I was just wondering if someone could provide some example code that would
cause an error if invalid is set to 'raise'?

I also noticed that seterr returns the old values. Is this really useful?
Consider its use in an IPython session:

In [184]: N.geterr()
Out[184]: {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore',
'under': 'ignore'}

In [185]: N.seterr(over='raise')
Out[185]: {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore',
'under': 'ignore'}

I think the following pattern would make sense, but it seems it doesn't work
at present:
 
old=N.geterr()
N.seterr(over='raise')
# so some calculations that might overflow
N.seterr(old)

This currently causes the following error:

Traceback (most recent call last):
  File "<ipython console>", line 1, in ?
  File "C:\Python24\Lib\site-packages\numpy\core\numeric.py", line 426, in
seterr
    maskvalue = ((_errdict[divide] << SHIFT_DIVIDEBYZERO) +
TypeError: dict objects are unhashable

Is this intended? I think it would be useful to be able to restore all the
error states in one go.

Regards,

Albert

> -----Original Message-----
> From: numpy-discussion-admin at lists.sourceforge.net [mailto:numpy-
> discussion-admin at lists.sourceforge.net] On Behalf Of Travis Oliphant
> Sent: 22 April 2006 04:50
> To: tim.hochberg at ieee.org; numpy-discussion
> Subject: [Numpy-discussion] Re: seterr changes
> 
> Tim Hochberg wrote:
> >
> > Hi Travis et al,
> >
> > I started looking at your seterr changes.
> Thank you very much for the help on this.  I'm not an expert on threaded
> code by any means.  In fact, as you clearly point out, I don't eat and
> drink what will work under threaded environments and what wont.  Clearly
> global variables are problematic.  That is the problem with the
> update_use_defaults bit, right?   This is the way it was being managed
> before and I just changed names a bit to use PyThreadState_GetDict for
> the dictionary (it seems possible to use only from C until Python 2.4).
> 
> I say if it only buys 5% on small arrays then it's not worth it as there
> are other fish to fry to make up for that 5% and I agree that tracking
> down threading problems due to a fanagled global variable is sticky.  I
> did not think about the threading issues deeply enough.
> 
> > I'm also curious about the seterr interface. It returns
> > ufunc_values_obj. I'm wasn't sure how one is supposed to pass that
> > back in to seterr,  so I modified seterr to instead return a
> > dictionary. I also modified it so that the seterr function itself has
> > no defaults (or rather they're all None). Instead, any unspecified
> > values are taken from the current error state. Thus
> > seterr(divide="warn") changes only the divide state, leaving the other
> > entries alone.
> Returning an object is a late-in-the-game idea and should be critiqued.
> It can be passed to seterr (an attribute check grabs the actual list ---
> did you want to change it to a dictionary?).  Doesn't a small list have
> faster access than a small dictionary?
> 
> I'll look over your commits and comment later if I think of anything...
> 
> I'm thrilled with your work.
> 
> Best,
> 
> -Travis





More information about the NumPy-Discussion mailing list