[Numpy-discussion] np.nan and ``is``
Fri Sep 19 21:51:44 CDT 2008
On Sep 19, 2008, at 10:04 PM, Christian Heimes wrote:
> Andrew Dalke wrote:
>> There are a few things that Python-the-language guarantees are
>> objects which can be compared correctly with "is".
> The empty tuple () and all interned strings are also guaranteed to be
Where's the guarantee? As far as I know it's not part of
Python-the-language, and I thought it was only an implementation
detail of CPython.
#if PyTuple_MAXSAVESIZE > 0
/* empty tuples are used all over the place and applications
* rely on the fact that an empty tuple is a singleton. */
free_list = NULL;
but that doesn't hold under Jython 2.2a1:
Jython 2.2a1 on java1.4.2_16 (JIT: null)
Type "copyright", "credits" or "license" for more information.
>>> () is ()
>>> 1 is 1
> String interning is used to optimize code on C level. It's
> much faster to compare memory addresses than objects. All strings
> can be
> interned through the builtin function intern like s = intern(s). For
> Python 3.x the function was moved in the the sys module and changed to
> support str which are PyUnicode objects.
"intern" being listed in the documentation under
2.2 Non-essential Built-in Functions
There are several built-in functions that are no longer
essential to learn, know or use in modern Python programming.
They have been kept here to maintain backwards compatibility
with programs written for older versions of Python.
Again, I think this is only an aspect of the CPython implementation.
> The Python core makes no difference between quiet NaNs and signaling
Based on my limited readings just now, it seems that that's the general
"""Standard C only adopted Quiet NaNs. It did not adopt Signaling
NaNs because it was believed that they are of too limited
utility for the amount of work required."""
"Signaling NaNs have fallen out of favor. No exceptions get raised
"""There were questions about if signalling NaNs should continue
required in the revised standard. In the end it appears they will
be left in."""
> We were discussion the possibility of a NaN singleton during
> our revamp of Python's IEEE 754 and math support for Python 2.6 and
> But we decided against it because the extra code and cost wasn't worth
> the risks. Instead I added isnan() and isinf() to the math module.
I couldn't find that thread. What are the advantages of converting
all NaNs to a singleton? All I can come up with are disadvantages.
BTW, another place to look is the Decimal module
>>> import decimal
Looking at the decimal docs now I see a "canonical()" method which
The result has the same value as the operand but always
uses a canonical encoding. The definition of canonical
is implementation-defined; if more than one internal
encoding for a given NaN, Infinity, or finite number
is possible then one ‘preferred’ encoding is deemed
canonical. This operation then returns the value using
that preferred encoding.
More information about the Numpy-discussion