]> granicus.if.org Git - python/commitdiff
Merged revisions 59245-59254 via svnmerge from
authorChristian Heimes <christian@cheimes.de>
Sat, 1 Dec 2007 12:22:32 +0000 (12:22 +0000)
committerChristian Heimes <christian@cheimes.de>
Sat, 1 Dec 2007 12:22:32 +0000 (12:22 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r59245 | georg.brandl | 2007-11-30 23:04:45 +0100 (Fri, 30 Nov 2007) | 2 lines

  Move lchmod() docs to correct place, and add versionadded tags.
........
  r59249 | christian.heimes | 2007-11-30 23:36:10 +0100 (Fri, 30 Nov 2007) | 2 lines

  Backport of -r59242:59246 from py3k
  Fixed problem with regrtest caused by the additional of objects to _abcoll.
........
  r59253 | christian.heimes | 2007-12-01 02:03:20 +0100 (Sat, 01 Dec 2007) | 1 line

  Although pyconfig.h claims that WIN32 is obsolete it is still required for the locale module. locale.getdefaultlocale() fails silently w/o the WIN32 macro.
........
  r59254 | christian.heimes | 2007-12-01 12:20:10 +0100 (Sat, 01 Dec 2007) | 3 lines

  Feature #1534
  Added PyFloat_GetMax(), PyFloat_GetMin() and PyFloat_GetInfo() to the float API.
  Added a dictionary sys.float_info with information about the internal floating point type to the sys module.
........

Doc/c-api/concrete.rst
Doc/library/os.rst
Doc/library/sys.rst
Include/floatobject.h
Lib/test/regrtest.py
Lib/test/test_sys.py
Objects/floatobject.c
PC/pyconfig.h
PCbuild9/pythoncore.vcproj
Python/sysmodule.c

index b6cc60e9ac20ae830059c918d74caef031245b9c..2f4863a3d71ae8eaa9bd50f06f6a4e649ac00b97 100644 (file)
@@ -499,6 +499,23 @@ Floating Point Objects
    without error checking.
 
 
+.. cfunction:: PyObject* PyFloat_GetInfo(void)
+
+   Return a :ctype:`PyDictObject` object which contains information about the
+   precision, minimum and maximum values of a float. It's a thin wrapper
+   around the header file :file:`float.h`.
+
+
+.. cfunction:: double PyFloat_GetMax(void)
+
+   Return the maximum representable finite float *DBL_MAX* as C :ctype:`double`.
+
+
+.. cfunction:: double PyFloat_GetMin(void)
+
+   Return the minimum normalized positive float *DBL_MIN* as C :ctype:`double`.
+
+
 .. _complexobjects:
 
 Complex Number Objects
index bd8480c416787e83e8f69a6846ad24d1e3d592ec..1b5eb4976f8b978f2709e0d48a48a7549cad0a22 100644 (file)
@@ -422,6 +422,8 @@ by file descriptors.
    Change the mode of the file given by *fd* to the numeric *mode*.  See the docs
    for :func:`chmod` for possible values of *mode*.  Availability: Unix.
 
+   .. versionadded:: 2.6
+
 
 .. function:: fchown(fd, uid, gid)
 
@@ -429,6 +431,8 @@ by file descriptors.
    and *gid*.  To leave one of the ids unchanged, set it to -1.
    Availability: Unix.
 
+   .. versionadded:: 2.6
+
 
 .. function:: fdatasync(fd)
 
@@ -488,13 +492,6 @@ by file descriptors.
    tty(-like) device, else ``False``. Availability: Macintosh, Unix.
 
 
-.. function:: lchmod(path, mode)
-
-   Change the mode of *path* to the numeric *mode*. If path is a symlink, this
-   affects the symlink rather than the target. See the docs for :func:`chmod`
-   for possible values of *mode*.  Availability: Unix.
-
-
 .. function:: lseek(fd, pos, how)
 
    Set the current position of file descriptor *fd* to position *pos*, modified by
@@ -800,6 +797,15 @@ Files and Directories
    follow symbolic links. Availability: Unix.
 
 
+.. function:: lchmod(path, mode)
+
+   Change the mode of *path* to the numeric *mode*. If path is a symlink, this
+   affects the symlink rather than the target. See the docs for :func:`chmod`
+   for possible values of *mode*.  Availability: Unix.
+
+   .. versionadded:: 2.6
+
+
 .. function:: lchown(path, uid, gid)
 
    Change the owner and group id of *path* to the numeric *uid* and gid. This
index 94e4eb936ecfa38d5b16ce43d4b12580769f6a34..33de4f6aaf7776c7808c975acfee4c0213d02510 100644 (file)
@@ -184,6 +184,48 @@ always available.
    error occurs.
 
 
+.. data:: float_info
+
+   A dict holding information about the float type. It contains low level
+   information about the precision and internal representation. Please study
+   your system's :file:`float.h` for more information.
+
+   +---------------------+--------------------------------------------------+
+   | key                 |  explanation                                     |
+   +=====================+==================================================+
+   | :const:`epsilon`    | Difference between 1 and the next representable  |
+   |                     | floating point number                            |
+   +---------------------+--------------------------------------------------+
+   | :const:`dig`        | digits (see :file:`float.h`)                     |
+   +---------------------+--------------------------------------------------+
+   | :const:`mant_dig`   | mantissa digits (see :file:`float.h`)            |
+   +---------------------+--------------------------------------------------+
+   | :const:`max`        | maximum representable finite float               |
+   +---------------------+--------------------------------------------------+
+   | :const:`max_exp`    | maximum int e such that radix**(e-1) is in the   |
+   |                     | range of finite representable floats             |
+   +---------------------+--------------------------------------------------+
+   | :const:`max_10_exp` | maximum int e such that 10**e is in the          |
+   |                     | range of finite representable floats             |
+   +---------------------+--------------------------------------------------+
+   | :const:`min`        | Minimum positive normalizer float                |
+   +---------------------+--------------------------------------------------+
+   | :const:`min_exp`    | minimum int e such that radix**(e-1) is a        |
+   |                     | normalized float                                 |
+   +---------------------+--------------------------------------------------+
+   | :const:`min_10_exp` | minimum int e such that 10**e is a normalized    |
+   |                     | float                                            |
+   +---------------------+--------------------------------------------------+
+   | :const:`radix`      | radix of exponent                                |
+   +---------------------+--------------------------------------------------+
+   | :const:`rounds`     | addition rounds (see :file:`float.h`)            |
+   +---------------------+--------------------------------------------------+
+
+   .. note::
+
+      The information in the table is simplified.
+
+
 .. function:: getcheckinterval()
 
    Return the interpreter's "check interval"; see :func:`setcheckinterval`.
index 56598146ae070130a7bcd87a2c30f7f9ab2a9c92..3ec5af582bbd49509ba85f9ead75791a88d115e0 100644 (file)
@@ -21,6 +21,10 @@ PyAPI_DATA(PyTypeObject) PyFloat_Type;
 #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
 #define PyFloat_CheckExact(op) (Py_Type(op) == &PyFloat_Type)
 
+PyAPI_FUNC(double) PyFloat_GetMax(void);
+PyAPI_FUNC(double) PyFloat_GetMin(void);
+PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void);
+
 /* Return Python float from string PyObject. */
 PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*);
 
index 020220755df1b2ea5a6f963c38d568c802d2dabe..f4569abc072385cef994f61b62633a7090bb6379 100755 (executable)
@@ -699,10 +699,12 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
     fs = warnings.filters[:]
     ps = copy_reg.dispatch_table.copy()
     pic = sys.path_importer_cache.copy()
-    abcs = {obj: obj._abc_registry.copy()
-            for abc in [getattr(_abcoll, a) for a in _abcoll.__all__
-                        if issubclass(getattr(_abcoll, a), _Abstract)]
-            for obj in abc.__subclasses__() + [abc]}
+    abcs = {}
+    for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
+        if not isinstance(abc, _Abstract):
+            continue
+        for obj in abc.__subclasses__() + [abc]:
+            abcs[obj] = obj._abc_registry.copy()
 
     if indirect_test:
         def run_the_test():
index 9a285c5ebf61139ebe003934f04e35c3d983c119..767f3a803d339c73e575b230bdbd9a12a51cae68 100644 (file)
@@ -279,6 +279,8 @@ class SysModuleTest(unittest.TestCase):
         self.assert_(isinstance(sys.copyright, str))
         self.assert_(isinstance(sys.exec_prefix, str))
         self.assert_(isinstance(sys.executable, str))
+        self.assert_(isinstance(sys.float_info, dict))
+        self.assertEqual(len(sys.float_info), 11)
         self.assert_(isinstance(sys.hexversion, int))
         self.assert_(isinstance(sys.maxint, int))
         self.assert_(isinstance(sys.maxunicode, int))
index 3ef44f63955e886694f6e29914ed50029786e25c..d3b7c9efecfbf07cfea36312cb28aced50ae4697 100644 (file)
@@ -9,6 +9,7 @@
 #include "formatter_unicode.h"
 
 #include <ctype.h>
+#include <float.h>
 
 #if !defined(__STDC__)
 extern double fmod(double, double);
@@ -48,6 +49,52 @@ fill_free_list(void)
        return p + N_FLOATOBJECTS - 1;
 }
 
+double
+PyFloat_GetMax(void)
+{
+       return DBL_MAX;
+}
+
+double
+PyFloat_GetMin(void)
+{
+       return DBL_MIN;
+}
+
+PyObject *
+PyFloat_GetInfo(void)
+{
+       PyObject *d, *tmp;
+
+#define SET_FLOAT_CONST(d, key, const) \
+       tmp = PyFloat_FromDouble(const); \
+       if (tmp == NULL) return NULL; \
+       if (PyDict_SetItemString(d, key, tmp)) return NULL; \
+       Py_DECREF(tmp)
+#define SET_INT_CONST(d, key, const) \
+       tmp = PyInt_FromLong(const); \
+       if (tmp == NULL) return NULL; \
+       if (PyDict_SetItemString(d, key, tmp)) return NULL; \
+       Py_DECREF(tmp)
+
+       d = PyDict_New();
+
+       SET_FLOAT_CONST(d, "max", DBL_MAX);
+       SET_INT_CONST(d, "max_exp", DBL_MAX_EXP);
+       SET_INT_CONST(d, "max_10_exp", DBL_MAX_10_EXP);
+       SET_FLOAT_CONST(d, "min", DBL_MIN);
+       SET_INT_CONST(d, "min_exp", DBL_MIN_EXP);
+       SET_INT_CONST(d, "min_10_exp", DBL_MIN_10_EXP);
+       SET_INT_CONST(d, "dig", DBL_DIG);
+       SET_INT_CONST(d, "mant_dig", DBL_MANT_DIG);
+       SET_FLOAT_CONST(d, "epsilon", DBL_EPSILON);
+       SET_INT_CONST(d, "radix", FLT_RADIX);
+       SET_INT_CONST(d, "rounds", FLT_ROUNDS);
+
+       return d;
+}
+
+
 PyObject *
 PyFloat_FromDouble(double fval)
 {
index 26ef629028bc785a1ca8693c5da37b0bf6de9cb6..58beaa808ff7430497838b7e121f61619a9ec112 100644 (file)
@@ -23,9 +23,11 @@ compiler specific".  Therefore, these should be very rare.
 
 
 NOTE: The following symbols are deprecated:
-NT, WIN32, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT
+NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT
 MS_CORE_DLL.
 
+WIN32 is still required for the locale module.
+
 */
 
 #ifdef _WIN32_WCE
index 1df98d4f8b63e6f079b159388a67a39fcb781dd4..16d16d0e98081ad593103ea99d37b986325912e5 100644 (file)
@@ -44,7 +44,7 @@
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
                                InlineFunctionExpansion="0"
                                EnableIntrinsicFunctions="false"
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="3"
                        />
                        <Tool
                                InlineFunctionExpansion="0"
                                EnableIntrinsicFunctions="false"
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
                                AdditionalOptions="/Zm200 "
                                AdditionalIncludeDirectories="..\Python;..\Modules\zlib"
-                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED"
+                               PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
                                RuntimeLibrary="2"
                        />
                        <Tool
index 2fcba5471c245eda7c7794d0e93b6f01803e8926..6f68e00ff612b5e98bba472e7e91ff6422da6750 100644 (file)
@@ -1082,6 +1082,8 @@ _PySys_Init(void)
                            PyInt_FromLong(PyInt_GetMax()));
        SET_SYS_FROM_STRING("maxsize",
                            PyInt_FromSsize_t(PY_SSIZE_T_MAX));
+       SET_SYS_FROM_STRING("float_info",
+                           PyFloat_GetInfo());
        SET_SYS_FROM_STRING("maxunicode",
                            PyInt_FromLong(PyUnicode_GetMax()));
        SET_SYS_FROM_STRING("builtin_module_names",