summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--generic/tclCompile.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 7bbfaf8..e7af153 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclFreeCompileEnv): Tip 280's new field
+ extCmdMapPtr was not being freed [Bug 1705778, leak #1].
+
2007-04-23 Kevin B. Kenny <kennykb@acm.org>
* generic/tclEnv.c (ReplaceString): Clear memory correctly when
@@ -10,6 +15,7 @@
All three of these issues reported under [Bug 1705778] - detected with
the existing test suite, no new regression tests required.
+>>>>>>> 1.3453
2007-04-22 Miguel Sofer <msofer@users.sf.net>
* generic/tclVar.c (TclDeleteNamespaceVars): fixed access to freed
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index 5a3633d..690da17 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclCompile.c,v 1.115 2007/04/10 14:47:10 dkf Exp $
+ * RCS: @(#) $Id: tclCompile.c,v 1.116 2007/04/23 18:01:41 msofer Exp $
*/
#include "tclInt.h"
@@ -994,6 +994,9 @@ TclFreeCompileEnv(
if (envPtr->mallocedAuxDataArray) {
ckfree((char *) envPtr->auxDataArrayPtr);
}
+ if (envPtr->extCmdMapPtr) {
+ ckfree((char *) envPtr->extCmdMapPtr);
+ }
}
/*
href='#n1214'>1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 10765 10766 10767 10768 10769 10770 10771 10772 10773 10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 10802 10803 10804 10805 10806 10807 10808 10809 10810 10811 10812 10813 10814 10815 10816 10817 10818 10819 10820 10821 10822 10823 10824 10825 10826 10827 10828 10829 10830 10831 10832 10833 10834 10835 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 10850 10851 10852 10853 10854 10855 10856 10857 10858 10859 10860 10861 10862 10863 10864 10865 10866 10867 10868 10869 10870 10871 10872 10873 10874 10875 10876 10877 10878 10879 10880 10881 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 10920 10921 10922 10923 10924 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 10935 10936 10937 10938 10939 10940 10941 10942 10943 10944 10945 10946 10947 10948 10949 10950 10951 10952 10953 10954 10955 10956 10957 10958 10959 10960 10961 10962 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 10988 10989 10990 10991 10992 10993 10994 10995 10996 10997 10998 10999 11000 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11019 11020 11021 11022 11023 11024 11025 11026 11027 11028 11029 11030 11031 11032 11033 11034 11035 11036 11037 11038 11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 11087 11088 11089 11090 11091 11092 11093 11094 11095 11096 11097 11098 11099 11100 11101 11102 11103 11104 11105 11106 11107 11108 11109 11110 11111 11112 11113 11114 11115 11116 11117 11118 11119 11120 11121 11122 11123 11124 11125 11126 11127 11128 11129 11130 11131 11132 11133 11134 11135 11136 11137 11138 11139 11140 11141 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 11190 11191 11192 11193 11194 11195 11196 11197 11198 11199 11200 11201 11202 11203 11204 11205 11206 11207 11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 11218 11219 11220 11221 11222 11223 11224 11225 11226 11227 11228 11229 11230 11231 11232 11233 11234 11235 11236 11237 11238 11239 11240 11241 11242 11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 11286 11287 11288 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 11312 11313 11314 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 11338 11339 11340 11341 11342 11343 11344 11345 11346 11347 11348 11349 11350 11351 11352 11353 11354 11355 11356 11357 11358 11359 11360 11361 11362 11363 11364 11365 11366 11367 11368 11369 11370 11371 11372 11373 11374 11375 11376 11377 11378 11379 11380 11381 11382 11383 11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 11407 11408 11409 11410 11411 11412 11413 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 11439 11440 11441 11442 11443 11444 11445 11446 11447 11448 11449 11450 11451 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 11484 11485 11486 11487 11488 11489 11490 11491 11492 11493 11494 11495 11496 11497 11498 11499 11500 11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 11515 11516 11517 11518 11519 11520 11521 11522 11523 11524 11525 11526 11527 11528 11529 11530 11531 11532 11533 11534 11535 11536 11537 11538 11539 11540 11541 11542 11543 11544 11545 11546 11547 11548 11549 11550 11551 11552 11553 11554 11555 11556 11557 11558 11559 11560 11561 11562 11563 11564 11565 11566 11567 11568 11569 11570 11571 11572 11573 11574 11575 11576 11577 11578 11579 11580 11581 11582 11583 11584 11585 11586 11587 11588 11589 11590 11591 11592 11593 11594 11595 11596 11597 11598 11599 11600 11601 11602 11603 11604 11605 11606 11607 11608 11609 11610 11611 11612 11613 11614 11615 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 11634 11635 11636 11637 11638 11639 11640 11641 11642 11643 11644 11645 11646 11647 11648 11649 11650 11651 11652 11653 11654 11655 11656 11657 11658 11659 11660 11661 11662 11663 11664 11665 11666 11667 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 11700 11701 11702 11703 11704 11705 11706 11707 11708 11709 11710 11711 11712 11713 11714 11715 11716 11717 11718 11719 11720 11721 11722 11723 11724 11725 11726 11727 11728 11729 11730 11731 11732 11733 11734 11735 11736 11737 11738 11739 11740 11741 11742 11743 11744 11745 11746 11747 11748 11749 11750 11751 11752 11753 11754 11755 11756 11757 11758 11759 11760 11761 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 11787 11788 11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 11893 11894 11895 11896 11897 11898 11899 11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 11965 11966 11967 11968 11969 11970 11971 11972 11973 11974 11975 11976 11977 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 11998 11999 12000 12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 13224 13225 13226 13227 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 13280 13281 13282 13283 13284 13285 13286 13287 13288 13289 13290 13291 13292 13293 13294 13295 13296 13297 13298 13299 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 13320 13321 13322 13323 13324 13325 13326 13327 13328 13329 13330 13331 13332 13333 13334 13335 13336 13337 13338 13339 13340 13341 13342 13343 13344 13345 13346 13347 13348 13349 13350 13351 13352 13353 13354 13355 13356 13357 13358 13359 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 13377 13378 13379 13380 13381 13382 13383 13384 13385 13386 13387 13388 13389 13390 13391 13392 13393 13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 13408 13409 13410 13411 13412 13413 13414 13415 13416 13417 13418 13419 13420 13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 13435 13436 13437 13438 13439 13440 13441 13442 13443 13444 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 13614 13615 13616 13617 13618 13619 13620 13621 13622 13623 13624 13625 13626 13627 13628 13629 13630 13631 13632 13633 13634 13635 13636 13637 13638 13639 13640 13641 13642 13643 13644 13645 13646 13647 13648 13649 13650 13651 13652 13653 13654 13655 13656 13657 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 13690 13691 13692 13693 13694 13695 13696 13697 13698 13699 13700 13701 13702 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 13713 13714 13715 13716 13717 13718 13719 13720 13721 13722 13723 13724 13725 13726 13727 13728 13729 13730 13731 13732 13733 13734 13735 13736 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 13802 13803 13804 13805 13806 13807 13808 13809 13810 13811 13812 13813 13814 13815 13816 13817 13818 13819 13820 13821 13822 13823 13824 13825 13826 13827 13828 13829 13830 13831 13832 13833 13834 13835 13836 13837 13838 13839 13840 13841 13842 13843 13844 13845 13846 13847 13848 13849 13850 13851 13852 13853 13854 13855 13856 13857 13858 13859 13860 13861 13862 13863 13864 13865 13866 13867 13868 13869 13870 13871 13872 13873 13874 13875 13876 13877 13878 13879 13880 13881 13882 13883 13884 13885 13886 13887 13888 13889 13890 13891 13892 13893 13894 13895 13896 13897 13898 13899 13900 13901 13902 13903 13904 13905 13906 13907 13908 13909 13910 13911 13912 13913 13914 13915 13916 13917 13918 13919 13920 13921 13922 13923 13924 13925 13926 13927 13928 13929 13930 13931 13932 13933 13934 13935 13936 13937 13938 13939 13940 13941 13942 13943 13944 13945 13946 13947 13948 13949 13950 13951 13952 13953 13954 13955 13956 13957 13958 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 14547 14548 14549 14550 14551 14552 14553 14554 14555 14556 14557 14558 14559 14560 14561 14562 14563 14564 14565 14566 14567 14568 14569 14570 14571 14572 14573 14574 14575 14576 14577 14578 14579 14580 14581 14582 14583 14584 14585 14586 14587 14588 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 14604 14605 14606 14607 14608 14609 14610 14611 14612 14613 14614 14615 14616 14617 14618 14619 14620 14621 14622 14623 14624 14625 14626 14627 14628 14629 14630 14631 14632 14633 14634 14635 14636 14637 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14648 14649 14650 14651 14652 14653 14654 14655 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 14682 14683 14684 14685 14686 14687 14688 14689 14690 14691 14692 14693 14694 14695 14696 14697 14698 14699 14700 14701 14702 14703 14704 14705 14706 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 14737 14738 14739 14740 14741 14742 14743 14744 14745 14746 14747 14748 14749 14750 14751 14752 14753 14754 14755 14756 14757 14758 14759 14760 14761 14762 14763 14764 14765 14766 14767 14768 14769 14770 14771 14772 14773 14774 14775 14776 14777 14778 14779 14780 14781 14782 14783 14784 14785 14786 14787 14788 14789 14790 14791 14792 14793 14794 14795 14796 14797 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989 15990 15991 15992 15993 15994 15995 15996 15997 15998 15999 16000 16001 16002 16003 16004 16005 16006 16007 16008 16009 16010 16011 16012 16013 16014 16015 16016 16017 16018 16019 16020 16021 16022 16023 16024 16025 16026 16027 16028 16029 16030 16031 16032 16033 16034 16035 16036 16037 16038 16039 16040 16041 16042 16043 16044 16045 16046 16047 16048 16049 16050 16051 16052 16053 16054 16055 16056 16057 16058 16059 16060 16061 16062 16063 16064 16065 16066 16067 16068 16069 16070 16071 16072 16073 16074 16075 16076 16077 16078 16079 16080 16081 16082 16083 16084 16085 16086 16087 16088 16089 16090 16091 16092 16093 16094 16095 16096 16097 16098 16099 16100 16101 16102 16103 16104 16105 16106 16107 16108 16109 16110 16111 16112 16113 16114 16115 16116 16117 16118 16119 16120 16121 16122 16123 16124 16125 16126 16127 16128 16129 16130 16131 16132 16133 16134 16135 16136 16137 16138 16139 16140 16141 16142 16143 16144 16145 16146 16147 16148 16149 16150 16151 16152 16153 16154 16155 16156 16157 16158 16159 16160 16161 16162 16163 16164 16165 16166 16167 16168 16169 16170 16171 16172 16173 16174 16175 16176 16177 16178 16179 16180 16181 16182 16183 16184 16185 16186 16187 16188 16189 16190 16191 16192 16193 16194 16195 16196 16197 16198 16199 16200 16201 16202 16203 16204 16205 16206 16207 16208 16209 16210 16211 16212 16213 16214 16215 16216 16217 16218 16219 16220 16221 16222 16223 16224 16225 16226 16227 16228 16229 16230 16231 16232 16233 16234 16235 16236 16237 16238 16239 16240 16241 16242 16243 16244 16245 16246 16247 16248 16249 16250 16251 16252 16253 16254 16255 16256 16257 16258 16259 16260 16261 16262 16263 16264 16265 16266 16267 16268 16269 16270 16271 16272 16273 16274 16275 16276 16277 16278 16279 16280 16281 16282 16283 16284 16285 16286 16287 16288 16289 16290 16291 16292 16293 16294 16295 16296 16297 16298 16299 16300 16301 16302 16303 16304 16305 16306 16307 16308 16309 16310 16311 16312 16313 16314 16315 16316 16317 16318 16319 16320 16321 16322 16323 16324 16325 16326 16327 16328 16329 16330 16331 16332 16333 16334 16335 16336 16337 16338 16339 16340 16341 16342 16343 16344 16345 16346 16347 16348 16349 16350 16351 16352 16353 16354 16355 16356 16357 16358 16359 16360 16361 16362 16363 16364 16365 16366 16367 16368 16369 16370 16371 16372 16373 16374 16375 16376 16377 16378 16379 16380 16381 16382 16383 16384 16385 16386 16387 16388 16389 16390 16391 16392 16393 16394 16395 16396 16397 16398 16399 16400 16401 16402 16403 16404 16405 16406 16407 16408 16409 16410 16411 16412 16413 16414 16415 16416 16417 16418 16419 16420 16421 16422 16423 16424 16425 16426 16427 16428 16429 16430 16431 16432 16433 16434 16435 16436 16437 16438 16439 16440 16441 16442 16443 16444 16445 16446 16447 16448 16449 16450 16451 16452 16453 16454 16455 16456 16457 16458 16459 16460 16461 16462 16463 16464 16465 16466 16467 16468 16469 16470 16471 16472 16473 16474 16475 16476 16477 16478 16479 16480 16481 16482 16483 16484 16485 16486 16487 16488 16489 16490 16491 16492 16493 16494 16495 16496 16497 16498 16499 16500 16501 16502 16503 16504 16505 16506 16507 16508 16509 16510 16511 16512 16513 16514 16515 16516 16517 16518 16519 16520 16521 16522 16523 16524 16525 16526 16527 16528 16529 16530 16531 16532 16533 16534 16535 16536 16537 16538 16539 16540 16541 16542 16543 16544 16545 16546 16547 16548 16549 16550 16551 16552 16553 16554 16555 16556 16557 16558 16559 16560 16561 16562 16563 16564 16565 16566 16567 16568 16569 16570 16571 16572 16573 16574 16575 16576 16577 16578 16579 16580 16581 16582 16583 16584 16585 16586 16587 16588 16589 16590 16591 16592 16593 16594 16595 16596 16597 16598 16599 16600 16601 16602 16603 16604 16605 16606 16607 16608 16609 16610 16611 16612 16613 16614 16615 16616 16617 16618 16619 16620 16621 16622 16623 16624 16625 16626 16627 16628 16629 16630 16631 16632 16633 16634 16635 16636 16637 16638 16639 16640 16641 16642 16643 16644 16645 16646 16647 16648 16649 16650 16651 16652 16653 16654 16655 16656 16657 16658 16659 16660 16661 16662 16663 16664 16665 16666 16667 16668 16669 16670 16671 16672 16673 16674 16675 16676 16677 16678 16679 16680 16681 16682 16683 16684 16685 16686 16687 16688 16689 16690 16691 16692 16693 16694 16695 16696 16697 16698 16699 16700 16701 16702 16703 16704 16705 16706 16707 16708 16709 16710 16711 16712 16713 16714 16715 16716 16717 16718 16719 16720 16721 16722 16723 16724 16725 16726 16727 16728 16729 16730 16731 16732 16733 16734 16735 16736 16737 16738 16739 16740 16741 16742 16743 16744 16745 16746 16747 16748 16749 16750 16751 16752 16753 16754 16755 16756 16757 16758 16759 16760 16761 16762 16763 16764 16765 16766 16767 16768 16769 16770 16771 16772 16773 16774 16775 16776 16777 16778 16779 16780 16781 16782 16783 16784 16785 16786 16787 16788 16789 16790 16791 16792 16793 16794 16795 16796 16797 16798 16799 16800 16801 16802 16803 16804 16805 16806 16807 16808 16809 16810 16811 16812 16813 16814 16815 16816 16817 16818 16819 16820 16821 16822 16823 16824 16825 16826 16827 16828 16829 16830 16831 16832 16833 16834 16835 16836 16837 16838 16839 16840 16841 16842 16843 16844 16845 16846 16847 16848 16849 16850 16851 16852 16853 16854 16855 16856 16857 16858 16859 16860 16861 16862 16863 16864 16865 16866 16867 16868 16869 16870 16871 16872 16873 16874 16875 16876 16877 16878 16879 16880 16881 16882 16883 16884 16885 16886 16887 16888 16889 16890 16891 16892 16893 16894 16895 16896 16897 16898 16899 16900 16901 16902 16903 16904 16905 16906 16907 16908 16909 16910 16911 16912 16913 16914 16915 16916 16917 16918 16919 16920 16921 16922 16923 16924 16925 16926 16927 16928 16929 16930 16931 16932 16933 16934 16935 16936 16937 16938 16939 16940 16941 16942 16943 16944 16945 16946 16947 16948 16949 16950 16951 16952 16953 16954 16955 16956 16957 16958 16959 16960 16961 16962 16963 16964 16965 16966 16967 16968 16969 16970 16971 16972 16973 16974 16975 16976 16977 16978 16979 16980 16981 16982 16983 16984 16985 16986 16987 16988 16989 16990 16991 16992 16993 16994 16995 16996 16997 16998 16999 17000 17001 17002 17003 17004 17005 17006 17007 17008 17009 17010 17011 17012 17013 17014 17015 17016 17017 17018 17019 17020 17021 17022 17023 17024 17025 17026 17027 17028 17029 17030 17031 17032 17033 17034 17035 17036 17037 17038 17039 17040 17041 17042 17043 17044 17045 17046 17047 17048 17049 17050 17051 17052 17053 17054 17055 17056 17057 17058 17059 17060 17061 17062 17063 17064 17065 17066 17067 17068 17069 17070 17071 17072 17073 17074 17075 17076 17077 17078 17079 17080 17081 17082 17083 17084 17085 17086 17087 17088 17089 17090 17091 17092 17093 17094 17095 17096 17097 17098 17099 17100 17101 17102 17103 17104 17105 17106 17107 17108 17109 17110 17111 17112 17113 17114 17115 17116 17117 17118 17119 17120 17121 17122 17123 17124 17125 17126 17127 17128 17129 17130 17131 17132 17133 17134 17135 17136 17137 17138 17139 17140 17141 17142 17143 17144 17145 17146 17147 17148 17149 17150 17151 17152 17153 17154 17155 17156 17157 17158 17159 17160 17161 17162 17163 17164 17165 17166 17167 17168 17169 17170 17171 17172 17173 17174 17175 17176 17177 17178 17179 17180 17181 17182 17183 17184 17185 17186 17187 17188 17189 17190 17191 17192 17193 17194 17195 17196 17197 17198 17199 17200 17201 17202 17203 17204 17205 17206 17207 17208 17209 17210 17211 17212 17213 17214 17215 17216 17217 17218 17219 17220 17221 17222 17223 17224 17225 17226 17227 17228 17229 17230 17231 17232 17233 17234 17235 17236 17237 17238 17239 17240 17241 17242 17243 17244 17245 17246 17247 17248 17249 17250 17251 17252 17253 17254 17255 17256 17257 17258 17259 17260 17261 17262 17263 17264 17265 17266 17267 17268 17269 17270 17271 17272 17273 17274 17275 17276 17277 17278 17279 17280 17281 17282 17283 17284 17285 17286 17287 17288 17289 17290 17291 17292 17293 17294 17295 17296 17297 17298 17299 17300 17301 17302 17303 17304 17305 17306 17307 17308 17309 17310 17311 17312 17313 17314 17315 17316 17317 17318 17319 17320 17321 17322 17323 17324 17325 17326 17327 17328 17329 17330 17331 17332 17333 17334 17335 17336 17337 17338 17339 17340 17341 17342 17343 17344 17345 17346 17347 17348 17349 17350 17351 17352 17353 17354 17355 17356 17357 17358 17359 17360 17361 17362 17363 17364 17365 17366 17367 17368 17369 17370 17371 17372 17373 17374 17375 17376 17377 17378 17379 17380 17381 17382 17383 17384 17385 17386 17387 17388 17389 17390 17391 17392 17393 17394 17395 17396 17397 17398 17399 17400 17401 17402 17403 17404 17405 17406 17407 17408 17409 17410 17411 17412 17413 17414 17415 17416 17417 17418 17419 17420 17421 17422 17423 17424 17425 17426 17427 17428 17429 17430 17431 17432 17433 17434 17435 17436 17437 17438 17439 17440 17441 17442 17443 17444 17445 17446 17447 17448 17449 17450 17451 17452 17453 17454 17455 17456 17457 17458 17459 17460 17461 17462 17463 17464 17465 17466 17467 17468 17469 17470 17471 17472 17473 17474 17475 17476 17477 17478 17479 17480 17481 17482 17483 17484 17485 17486 17487 17488 17489 17490 17491 17492 17493 17494 17495 17496 17497 17498 17499 17500 17501 17502 17503 17504 17505 17506 17507 17508 17509 17510 17511 17512 17513 17514 17515 17516 17517 17518 17519 17520 17521 17522 17523 17524 17525 17526 17527 17528 17529 17530 17531 17532 17533 17534 17535 17536 17537 17538 17539 17540 17541 17542 17543 17544 17545 17546 17547 17548 17549 17550 17551 17552 17553 17554 17555 17556 17557 17558 17559 17560 17561 17562 17563 17564 17565 17566 17567 17568 17569 17570 17571 17572 17573 17574 17575 17576 17577 17578 17579 17580 17581 17582 17583 17584 17585 17586 17587 17588 17589 17590 17591 17592 17593 17594 17595 17596 17597 17598 17599 17600 17601 17602 17603 17604 17605 17606 17607 17608 17609 17610 17611 17612 17613 17614 17615 17616 17617 17618 17619 17620 17621 17622 17623 17624 17625 17626 17627 17628 17629 17630 17631 17632 17633 17634 17635 17636 17637 17638 17639 17640 17641 17642 17643 17644 17645 17646 17647 17648 17649 17650 17651 17652 17653 17654 17655 17656 17657 17658 17659 17660 17661 17662 17663 17664 17665 17666 17667 17668 17669 17670 17671 17672 17673 17674 17675 17676 17677 17678 17679 17680 17681 17682 17683 17684 17685 17686 17687 17688 17689 17690 17691 17692 17693 17694 17695 17696 17697 17698 17699 17700 17701 17702 17703 17704 17705 17706 17707 17708 17709 17710 17711 17712 17713 17714 17715 17716 17717 17718 17719 17720 17721 17722 17723 17724 17725 17726 17727 17728 17729 17730 17731 17732 17733 17734 17735 17736 17737 17738 17739 17740 17741 17742 17743 17744 17745 17746 17747 17748 17749 17750 17751 17752 17753 17754 17755 17756 17757 17758 17759 17760 17761 17762 17763 17764 17765 17766 17767 17768 17769 17770 17771 17772 17773 17774 17775 17776 17777 17778 17779 17780 17781 17782 17783 17784 17785 17786 17787 17788 17789 17790 17791 17792 17793 17794 17795 17796 17797 17798 17799 17800 17801 17802 17803 17804 17805 17806 17807 17808 17809 17810 17811 17812 17813 17814 17815 17816 17817 17818 17819 17820 17821 17822 17823 17824 17825 17826 17827 17828 17829 17830 17831 17832 17833 17834 17835 17836 17837 17838 17839 17840 17841 17842 17843 17844 17845 17846 17847 17848 17849 17850 17851 17852 17853 17854 17855 17856 17857 17858 17859 17860 17861 17862 17863 17864 17865 17866 17867 17868 17869 17870 17871 17872 17873 17874 17875 17876 17877 17878 17879 17880 17881 17882 17883 17884 17885 17886 17887 17888 17889 17890 17891 17892 17893 17894 17895 17896 17897 17898 17899 17900 17901 17902 17903 17904 17905 17906 17907 17908 17909 17910 17911 17912 17913 17914 17915 17916 17917 17918 17919 17920 17921 17922 17923 17924 17925 17926 17927 17928 17929 17930 17931 17932 17933 17934 17935 17936 17937 17938 17939 17940 17941 17942 17943 17944 17945 17946 17947 17948 17949 17950 17951 17952 17953 17954 17955 17956 17957 17958 17959 17960 17961 17962 17963 17964 17965 17966 17967 17968 17969 17970 17971 17972 17973 17974 17975 17976 17977 17978 17979 17980 17981 17982 17983 17984 17985 17986 17987 17988 17989 17990 17991 17992 17993 17994 17995 17996 17997 17998 17999 18000 18001 18002 18003 18004 18005 18006 18007 18008 18009 18010 18011 18012 18013 18014 18015 18016 18017 18018 18019 18020 18021 18022 18023 18024 18025 18026 18027 18028 18029 18030 18031 18032 18033 18034 18035 18036 18037 18038 18039 18040 18041 18042 18043 18044 18045 18046 18047 18048 18049 18050 18051 18052 18053 18054 18055 18056 18057 18058 18059 18060 18061 18062 18063 18064 18065 18066 18067 18068 18069 18070 18071 18072 18073 18074 18075 18076 18077 18078 18079 18080 18081 18082 18083 18084 18085 18086 18087 18088 18089 18090 18091 18092 18093 18094 18095 18096 18097 18098 18099 18100 18101 18102 18103 18104 18105 18106 18107 18108 18109 18110 18111 18112 18113 18114 18115 18116 18117 18118 18119 18120 18121 18122 18123 18124 18125 18126 18127 18128 18129 18130 18131 18132 18133 18134 18135 18136 18137 18138 18139 18140 18141 18142 18143 18144 18145 18146 18147 18148 18149 18150 18151 18152 18153 18154 18155 18156 18157 18158 18159 18160 18161 18162 18163 18164 18165 18166 18167 18168 18169 18170 18171 18172 18173 18174 18175 18176 18177 18178 18179 18180 18181 18182 18183 18184 18185 18186 18187 18188 18189 18190 18191 18192 18193 18194 18195 18196 18197 18198 18199 18200 18201 18202 18203 18204 18205 18206 18207 18208 18209 18210 18211 18212 18213 18214 18215 18216 18217 18218 18219 18220 18221 18222 18223 18224 18225 18226 18227 18228 18229 18230 18231 18232 18233 18234 18235 18236 18237 18238 18239 18240 18241 18242 18243 18244 18245 18246 18247 18248 18249 18250 18251 18252 18253 18254 18255 18256 18257 18258 18259 18260 18261 18262 18263 18264 18265 18266 18267 18268 18269 18270 18271 18272 18273 18274 18275 18276 18277 18278 18279 18280 18281 18282 18283 18284 18285 18286 18287 18288 18289 18290 18291 18292 18293 18294 18295 18296 18297 18298 18299 18300 18301 18302 18303 18304 18305 18306 18307 18308 18309 18310 18311 18312 18313 18314 18315 18316 18317 18318 18319 18320 18321 18322 18323 18324 18325 18326 18327 18328 18329 18330 18331 18332 18333 18334 18335 18336 18337 18338 18339 18340 18341 18342 18343 18344 18345 18346 18347 18348 18349 18350 18351 18352 18353 18354 18355 18356 18357 18358 18359 18360 18361 18362 18363 18364 18365 18366 18367 18368 18369 18370 18371 18372 18373 18374 18375 18376 18377 18378 18379 18380 18381 18382 18383 18384 18385 18386 18387 18388 18389 18390 18391 18392 18393 18394 18395 18396 18397 18398 18399 18400 18401 18402 18403 18404 18405 18406 18407 18408 18409 18410 18411 18412 18413 18414 18415 18416 18417 18418 18419 18420 18421 18422 18423 18424 18425 18426 18427 18428 18429 18430 18431 18432 18433 18434 18435 18436 18437 18438 18439 18440 18441 18442 18443 18444 18445 18446 18447 18448 18449 18450 18451 18452 18453 18454 18455 18456 18457 18458 18459 18460 18461 18462 18463 18464 18465 18466 18467 18468 18469 18470 18471 18472 18473 18474 18475 18476 18477 18478 18479 18480 18481 18482 18483 18484 18485 18486 18487 18488 18489 18490 18491 18492 18493 18494 18495 18496 18497 18498 18499 18500 18501 18502 18503 18504 18505 18506 18507 18508 18509 18510 18511 18512 18513 18514 18515 18516 18517 18518 18519 18520 18521 18522 18523 18524 18525 18526 18527 18528 18529 18530 18531 18532 18533 18534 18535 18536 18537 18538 18539 18540 18541 18542 18543 18544 18545 18546 18547 18548 18549 18550 18551 18552 18553 18554 18555 18556 18557 18558 18559 18560 18561 18562 18563 18564 18565 18566 18567 18568 18569 18570 18571 18572 18573 18574 18575 18576 18577 18578 18579 18580 18581 18582 18583 18584 18585 18586 18587 18588 18589 18590 18591 18592 18593 18594 18595 18596 18597 18598 18599 18600 18601 18602 18603 18604 18605 18606 18607 18608 18609 18610 18611 18612 18613 18614 18615 18616 18617 18618 18619 18620 18621 18622 18623 18624 18625 18626 18627 18628 18629 18630 18631 18632 18633 18634 18635 18636 18637 18638 18639 18640 18641 18642 18643 18644 18645 18646 18647 18648 18649 18650 18651 18652 18653 18654 18655 18656 18657 18658 18659 18660 18661 18662 18663 18664 18665 18666 18667 18668 18669 18670 18671 18672 18673 18674 18675 18676 18677 18678 18679 18680 18681 18682 18683 18684 18685 18686 18687 18688 18689 18690 18691 18692 18693 18694 18695 18696 18697 18698 18699 18700 18701 18702 18703 18704 18705 18706 18707 18708 18709 18710 18711 18712 18713 18714 18715 18716 18717 18718 18719 18720 18721 18722 18723 18724 18725 18726 18727 18728 18729 18730 18731 18732 18733 18734 18735 18736 18737 18738 18739 18740 18741 18742 18743 18744 18745 18746 18747 18748 18749 18750 18751 18752 18753 18754 18755 18756 18757 18758 18759 18760 18761 18762 18763 18764 18765 18766 18767 18768 18769 18770 18771 18772 18773 18774 18775 18776 18777 18778 18779 18780 18781 18782 18783 18784 18785 18786 18787 18788 18789 18790 18791 18792 18793 18794 18795 18796 18797 18798 18799 18800 18801 18802 18803 18804 18805 18806 18807 18808 18809 18810 18811 18812 18813 18814 18815 18816 18817 18818 18819 18820 18821 18822 18823 18824 18825 18826 18827
Python History
--------------

This file contains the release messages for previous Python releases.
As you read on you go back to the dark ages of Python's history.
(Note: news about 2.5c2 and later 2.5 releases is in the Misc/NEWS
file of the release25-maint branch.)


======================================================================


What's New in Python 3.0 final
==============================

*Release date: 03-Dec-2008*

Core and Builtins
-----------------

- Issue #3996: On Windows, the PyOS_CheckStack function would cause the
  interpreter to abort ("Fatal Python error: Could not reset the stack!")
  instead of throwing a MemoryError.

- Issue #3689: The list reversed iterator now supports __length_hint__
  instead of __len__.  Behavior now matches other reversed iterators.

- Issue #4367: Python would segfault during compiling when the unicodedata
  module couldn't be imported and \N escapes were present.

- Fix build failure of _cursesmodule.c building with -D_FORTIFY_SOURCE=2.

Library
-------

- Issue #4387: binascii now refuses to accept str as binary input.

- Issue #4073: Add 2to3 support to build_scripts, refactor that support
  in build_py.

- IDLE would print a "Unhandled server exception!" message when internal
  debugging is enabled.

- Issue #4455: IDLE failed to display the windows list when two windows have
  the same title.

- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
  exception.

- Issue #4433: Fixed an access violation when garbage collecting
  _ctypes.COMError instances.

- Issue #4429: Fixed UnicodeDecodeError in ctypes.

- Issue #4373: Corrected a potential reference leak in the pickle module and
  silenced a false positive ref leak in distutils.tests.test_build_ext.

- Issue #4382: dbm.dumb did not specify the expected file encoding for opened
  files.

- Issue #4383: When IDLE cannot make the connection to its subprocess, it would
  fail to properly display the error message.

Build
-----

- Issue #4407: Fix source file that caused the compileall step in Windows installer
  to fail.

Docs
----

- Issue #4449: Fixed multiprocessing examples

- Issue #3799: Document that dbm.gnu and dbm.ndbm will accept string arguments
  for keys and values which will be converted to bytes before committal.


What's New in Python 3.0 release candidate 3?
=============================================

*Release date: 20-Nov-2008*


Core and Builtins
-----------------

- Issue #4349: sys.path included a non-existent platform directory because of a
  faulty Makefile.

- Issue #3327: Don't overallocate in the modules_by_index list.

- Issue #1721812:  Binary set operations and copy() returned the input type
  instead of the appropriate base type.  This was incorrect because set
  subclasses would be created without their __init__() method being called.
  The corrected behavior brings sets into line with lists and dicts.

- Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
  True, even when x doesn't compare equal to itself.  This was a regression
  from 2.6.

- Issue #3705: Command-line arguments were not correctly decoded when the
  terminal does not use UTF8.

Library
-------

- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if
  the ctypes module is not present.

- FileIO's mode attribute now always includes ``"b"``.

- Issue #3799: Fix dbm.dumb to accept strings as well as bytes for keys. String
  keys are now written out in UTF-8.

- Issue #4338: Fix distutils upload command.

- Issue #4354: Fix distutils register command.

- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.

- Issue #4307: The named tuple that ``inspect.getfullargspec()`` returns now
  uses ``kwonlydefaults`` instead of ``kwdefaults``.

- Issue #4298: Fix a segfault when pickle.loads is passed a ill-formed input.

- Issue #4283: Fix a left-over "iteritems" call in distutils.

Build
-----

- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".

- Issue #4289: Remove Cancel button from AdvancedDlg.

- Issue #1656675: Register a drop handler for .py* files on Windows.

Tools/Demos
-----------

- Demos of the socketserver module now work with Python 3.


What's New in Python 3.0 release candidate 2
============================================

*Release date: 05-Nov-2008*

Core and Builtins
-----------------

- Issue #4211: The __path__ attribute of frozen packages is now a list instead
  of a string as required by PEP 302.

- Issue #3727: Fixed poplib.

- Issue #3714: Fixed nntplib by using bytes where appropriate.

- Issue #1210: Fixed imaplib and its documentation.

- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()`` 
  method on file objects with closefd=False. The file descriptor is still
  kept open but the file object behaves like a closed file. The ``FileIO``
  object also got a new readonly attribute ``closefd``.

- Issue #3626: On cygwin, starting python with a non-existent script name
  would not display anything if the file name is only 1 character long.

- Issue #4176: Fixed a crash when pickling an object which ``__reduce__``
  method does not return iterators for the 4th and 5th items.

- Issue #3723: Fixed initialization of subinterpreters.

- Issue #4213: The file system encoding is now normalized by the
  codec subsystem, for example UTF-8 is turned into utf-8.

- Issue #4200: Changed the atexit module to store its state in its
  PyModuleDef atexitmodule. This fixes a bug with multiple subinterpeters.

- Issue #4237: io.FileIO() was raising invalid warnings caused by
  insufficient initialization of PyFileIOObject struct members.

- Issue #4170: Pickling a collections.defaultdict object would crash the
  interpreter.

- Issue #4146: Compilation on OpenBSD has been restored.

- Issue #3574: compile() incorrectly handled source code encoded as Latin-1.

- Issues #2384 and #3975: Tracebacks were not correctly printed when the
  source file contains a ``coding:`` header: the wrong line was displayed, and
  the encoding was not respected.

- Issue #3740: Null-initialize module state.

- Issue #3946: PyObject_CheckReadBuffer crashed on a memoryview object.

- Issue #1688: On Windows, the input() prompt was not correctly displayed if it
  contains non-ascii characters.

- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default.

Library
-------

- Issue #3664: The pickle module could segfault if a subclass of Pickler fails
  to call the base __init__ method.

- Issue #3725: telnetlib now works completely in bytes.

- Issue #4072: Restore build_py_2to3.

- Issue #4014: Don't claim that Python has an Alpha release status, in addition
  to claiming it is Mature.

- Issue #3187: Add sys.setfilesystemencoding.

- Issue #3187: Better support for "undecodable" filenames.  Code by Victor
  Stinner, with small tweaks by GvR.

- Issue #3965: Allow repeated calls to turtle.Screen, by making it a
  true singleton object.

- Issue #3911: ftplib.FTP.makeport() could give invalid port numbers.

- Issue #3929: When the database cannot be opened, dbm.open() would incorrectly
  raise a TypeError: "'tuple' object is not callable" instead of the expected
  dbm.error.

- Bug #3884: Make the turtle module toplevel again.

- Issue #3547: Fixed ctypes structures bitfields of varying integer
  sizes.

Extension Modules
-----------------

- Issue #3659: Subclasses of str didn't work as SQL parameters.

Build
-----

- Issue #4120: Exclude manifest from extension modules in VS2008.

- Issue #4091: Install pythonxy.dll in system32 again.

- Issue #4018: Disable "for me" installations on Vista.

- Issue #4204: Fixed module build errors on FreeBSD 4.

Tools/Demos
-----------

- Issue #3717: Fix Demo/embed/demo.c.

- Issue #4072: Add a distutils demo for build_py_2to3.


What's New in Python 3.0 release candidate 1
============================================

*Release date: 17-Sep-2008*

Core and Builtins
-----------------

- Issue #3827: memoryview lost its size attribute in favor of using len(view).

- Issue #3813: could not lanch python.exe via symbolic link on cygwin.

- Issue #3705: fix crash when given a non-ascii value on the command line for
  the "-c" and "-m" parameters. Now the behaviour is as expected under Linux,
  although under Windows it fails at a later point.

- Issue #3279: Importing site at interpreter was failing silently because the
  site module uses the open builtin which was not initialized at the time.

- Issue #3660: Corrected a reference leak in str.encode() when the encoder
  does not return a bytes object.

- Issue #3774: Added a few more checks in PyTokenizer_FindEncoding to handle
  error conditions.

- Issue #3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being
  tokenized by either a file path or file pointer for the benefit of
  PyTokenizer_FindEncoding().

- Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. On
  these systems, the mbstowcs() function is slightly buggy and must be
  replaced with strlen() for the purpose of counting of number of wide
  characters needed to represent the multi-byte character string.

- Issue #3697: "Fatal Python error: Cannot recover from stack overflow"
  could be easily encountered under Windows in debug mode when exercising
  the recursion limit checking code, due to bogus handling of recursion
  limit when USE_STACKCHEK was enabled.

- Issue 3639: The _warnings module could segfault the interpreter when
  unexpected types were passed in as arguments.

- Issue #3712: The memoryview object had a reference leak and didn't support
  cyclic garbage collection.

- Issue #3668: Fix a memory leak with the "s*" argument parser in
  PyArg_ParseTuple and friends, which occurred when the argument for "s*" 
  was correctly parsed but parsing of subsequent arguments failed.

- Issue #3611: An exception __context__ could be cleared in a complex pattern
  involving a __del__ method re-raising an exception.

- Issue #2534: speed up isinstance() and issubclass() by 50-70%, so as to 
  match Python 2.5 speed despite the __instancecheck__ / __subclasscheck__
  mechanism. In the process, fix a bug where isinstance() and issubclass(),
  when given a tuple of classes as second argument, were looking up
  __instancecheck__ / __subclasscheck__ on the tuple rather than on each
  type object.

- Issue #3663: Py_None was decref'd when printing SyntaxErrors.

- Issue #3651: Fix various memory leaks when using the buffer
  interface, or when the "s#" code of PyArg_ParseTuple is given a
  bytes object.

- Issue #3657: Fix uninitialized memory read when pickling longs.
  Found by valgrind.

- Apply security patches from Apple.

- Fix crashes on memory allocation failure found with failmalloc.

- Fix memory leaks found with valgrind and update suppressions file.

- Fix compiler warnings in opt mode which would lead to invalid memory reads.

- Fix problem using wrong name in decimal module reported by pychecker.

- Issue #3650: Fixed a reference leak in bytes.split('x').

- bytes(o) now tries to use o.__bytes__() before using fallbacks.

- Issue #1204: The configure script now tests for additional libraries
  that may be required when linking against readline.  This fixes issues
  with x86_64 builds on some platforms (a few Linux flavors and OpenBSD).

C API
-----

- PyObject_Bytes and PyBytes_FromObject were added.

Library
-------

- Issue #3756: make re.escape() handle bytes as well as str.

- Issue #3800: fix filter() related bug in formatter.py.

- Issue #874900: fix behaviour of threading module after a fork.

- Issue #3535: zipfile couldn't read some zip files larger than 2GB.

- Issue #3776: Deprecate the bsddb package for removal in 3.0.

- Issue #3762: platform.architecture() fails if python is lanched via
  its symbolic link.

- Issue #3660: fix a memory leak in the C accelerator of the pickle module.

- Issue #3160: the "bdist_wininst" distutils command didn't work.

- Issue #1658: tkinter changes dict size during iteration in both
    tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText.

- The bsddb module (and therefore the dbm.bsd module) has been removed.
  It is now maintained outside of the standard library at
  http://www.jcea.es/programacion/pybsddb.htm.

- Issue 600362:  Relocated parse_qs() and parse_qsl(), from the cgi module
  to the urlparse one.  Added a DeprecationWarning in the old module, it
  will be deprecated in the future.

- Issue #3719: platform.architecture() fails if there are spaces in the
  path to the Python binary.

- Issue 3602: As part of the merge of r66135, make the parameters on
  warnings.catch_warnings() keyword-only. Also remove a DeprecationWarning.

- The deprecation warnings for the camelCase threading API names were removed.

- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing 
  SEM_VALUE_MAX.

Extension Modules
-----------------

- Issue #3782: os.write() must not accept unicode strings.

- Issue #2975: When compiling several extension modules with Visual Studio 2008
  from the same python interpreter, some environment variables would grow
  without limit.

- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
  exploitation of poor argument checking.

- bsddb code updated to version 4.7.3pre2. This code is the same than
  Python 2.6 one, since the intention is to keep an unified 2.x/3.x codebase.
  The Python code is automatically translated using "2to3". Please, do not
  update this code in Python 3.0 by hand. Update the 2.6 one and then
  do "2to3".

- The _bytesio and _stringio modules are now compiled into the python binary.

- Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of
  mutable bytearray objects where they should have been using immutable bytes.

- Issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to
  return bytes objects instead of bytearray objects.


Tools/Demos
-----------

- Fix Misc/gdbinit so it works.


Build
-----

- Issue #3812: Failed to build python if configure --without-threads.

- Issue #3791: Remove the bsddb module from the Windows installer, and the
  core bsddb library from the Windows build files.


What's new in Python 3.0b3?
===========================

*Release date: 20-Aug-2008*

Core and Builtins
-----------------

- Issue #3653: Fix a segfault when sys.excepthook was called with invalid
  arguments.

- Issue #2394: implement more of the memoryview API, with the caveat that
  only one-dimensional contiguous buffers are supported and exercised right
  now. Slicing, slice assignment and comparison (equality and inequality)
  have been added. Also, the tolist() method has been implemented, but only
  for byte buffers. Finally, the API has been updated to return bytes objects
  wherever it used to return bytearrays.

- Issue #3560: clean up the new C PyMemoryView API so that naming is
  internally consistent; add macros PyMemoryView_GET_BASE() and
  PyMemoryView_GET_BUFFER() to access useful properties of a memory views
  without relying on a particular implementation; remove the ill-named
  PyMemoryView() function (PyMemoryView_GET_BUFFER() can be used instead).

- ctypes function pointers that are COM methods have a boolean True
  value again.

- Issue #1819: function calls with several named parameters are now on
  average 35% faster (as measured by pybench).

- The undocumented C APIs PyUnicode_AsString() and
  PyUnicode_AsStringAndSize() were made private to the interpreter, in
  order to be able to refine their interfaces for Python 3.1.

  If you need to access the UTF-8 representation of a Unicode object
  as bytes string, please use PyUnicode_AsUTF8String() instead.

- Issue #3460: PyUnicode_Join() implementation is 10% to 80% faster thanks
  to Python 3.0's stricter semantics which allow to avoid successive
  reallocations of the result string (this also affects str.join()).


Library
-------

- Issue #1276: Added temporary aliases for CJK Mac encodings to resolve
  a build problem on MacOS with CJK locales.  It adds four temporary
  mappings to existing legacy codecs that are virtually compatible
  with Mac encodings.  They will be replaced by codecs correctly
  implemented in 3.1.

- Issue #3614: Corrected a typo in xmlrpc.client, leading to a NameError
  "global name 'header' is not defined".

- Issue #2834: update the regular expression library to match the unicode
  standards of py3k. In other words, mixing bytes and unicode strings
  (be it as pattern, search string or replacement string) raises a TypeError.
  Moreover, the re.UNICODE flag is enabled automatically for unicode patterns,
  and can be disabled by specifying a new re.ASCII flag; as for bytes
  patterns, ASCII matching is the only option and trying to specify re.UNICODE
  for such patterns raises a ValueError.

- Issue #3300: make urllib.parse.[un]quote() default to UTF-8.
  Code contributed by Matt Giuca.  quote() now encodes the input
  before quoting, unquote() decodes after unquoting.  There are
  new arguments to change the encoding and errors settings.
  There are also new APIs to skip the encode/decode steps.
  [un]quote_plus() are also affected.

- Issue #2235: numbers.Number now blocks inheritance of the default id()
  based hash because that hash mechanism is not correct for numeric types.
  All concrete numeric types that inherit from Number (rather than just
  registering with it) must explicitly provide a hash implementation in
  order for their instances to be hashable.

- Issue #2676: in the email package, content-type parsing was hanging on
  pathological input because of quadratic or exponential behaviour of a
  regular expression.

- Issue #3476: binary buffered reading through the new "io" library is now
  thread-safe.

- Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to
  menu entries were not deleted.

- Remove the TarFileCompat class from tarfile.py.

- Issue #2491: os.fdopen is now almost an alias for the built-in open(), and
  accepts the same parameters.  It just checks that its first argument is an
  integer.

- Issue #3394: zipfile.writestr sets external attributes when passed a
  file name rather than a ZipInfo instance, so files are extracted with
  mode 0600 rather than 000 under Unix.

- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
  asking for a specific length.

Extension Modules
-----------------

- Bug #3542: Support Unicode strings in _msi module.

What's new in Python 3.0b2?
===========================

*Release date: 17-Jul-2008*

Core and Builtins
-----------------

- Issue #3008: the float type has a new instance method 'float.hex'
  and a new class method 'float.fromhex' to convert floating-point
  numbers to and from hexadecimal strings, respectively.

- Issue #3083: Add alternate (#) formatting for bin, oct, hex output
  for str.format().  This adds the prefix 0b, 0o, or 0x, respectively.

- Issue #3280: like chr(), the "%c" format now accepts unicode code points
  beyond the Basic Multilingual Plane (above 0xffff) on all configurations. On
  "narrow Unicode" builds, the result is a string of 2 code units, forming a
  UTF-16 surrogate pair.

- Issue #3282: str.isprintable() should return False for undefined
  Unicode characters.

- Issue #3236: Return small longs from PyLong_FromString.

- Exception tracebacks now support exception chaining.

Library
-------

- Removed the sunaudio module. Use sunau instead.

- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
  api functions without holding the GIL, which could lead to a fatal
  error when they failed.

- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.

- Removed "ast" function aliases from the parser module.

- Issue #3313: Fixed a crash when a failed dlopen() call does not set
  a valid dlerror() message.

- Issue #3258: Fixed a crash when a ctypes POINTER type to an
  incomplete structure was created.

- Issue #2683: Fix inconsistency in subprocess.Popen.communicate(): the
  argument now must be a bytes object in any case.

- Issue #3145: help("modules whatever") failed when trying to load the source
  code of every single module of the standard library, including invalid files
  used in the test suite.

- The gettext library now consistently uses Unicode strings for message ids
  and message strings, and ``ugettext()`` and the like don't exist anymore.

- The traceback module has been expanded to handle chained exceptions.

C API
-----

- Issue #3247: the function Py_FindMethod was removed. Modern types should
  use the tp_methods slot instead.

Tools/Demos
-----------

- The Mac/Demos directory has been removed.

- All of the Mac scripts have been removed (including BuildApplet.py).


What's new in Python 3.0b1?
===========================

*Release date: 18-Jun-2008*

Core and Builtins
-----------------

- Issue #3211: warnings.warn_explicit() did not guard against its 'registry'
  argument being anything other than a dict or None. Also fixed a bug in error
  handling when 'message' and 'category' were both set to None, triggering a
  bus error.

- Issue #3100: Corrected a crash on deallocation of a subclassed weakref which
  holds the last (strong) reference to its referent.

- Issue #2630: implement PEP 3138. repr() now returns printable
  Unicode characters unescaped, to get an ASCII-only representation
  of an object use ascii().

- Issue #1342: On windows, Python could not start when installed in a
  directory with non-ascii characters.

- Implement PEP 3121: new module initialization and finalization API.

- Removed the already-defunct ``-t`` option.

- Issue #2957: Corrected a ValueError "recursion limit exceeded", when
  unmarshalling many code objects, which happens when importing a
  large .pyc file (~1000 functions).

- Issue #2963: fix merging oversight that disabled method cache for
  all types.

- Issue #2964: fix a missing INCREF in instancemethod_descr_get.

- Issue #2895: Don't crash when given bytes objects as keyword names.

- Issue #2798: When parsing arguments with PyArg_ParseTuple, the "s"
  code now allows any unicode string and returns a utf-8 encoded
  buffer, just like the "s#" code already does.  The "z" code was
  corrected as well.

- Issue #2863: generators now have a ``gen.__name__`` attribute that
  equals ``gen.gi_code.co_name``, like ``func.__name___`` that equals
  ``func.func_code.co_name``.  The repr() of a generator now also
  contains this name.

- Issue #2831: enumerate() now has a ``start`` argument.

- Issue #2801: fix bug in the float.is_integer method where a
  ValueError was sometimes incorrectly raised.

- The ``--with-toolbox-glue`` option (and the associated
  pymactoolbox.h) have been removed.

- Issue #2196: hasattr() now lets exceptions which do not inherit
  Exception (KeyboardInterrupt, and SystemExit) propagate instead of
  ignoring them.

- #3021 Exception reraising sematics have been significantly improved.  However,
  f_exc_type, f_exc_value, and f_exc_traceback cannot be accessed from Python
  code anymore.

- Three of PyNumberMethods' members, nb_coerce, nb_hex, and nb_oct, have been
  removed.

Extension Modules
-----------------

- Renamed ``_winreg`` module to ``winreg``.

- Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the
  platform.

- Support for Windows 9x has been removed from the winsound module.

- Issue #2870: cmathmodule.c compile error.

Library
-------

- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
  symtable.Symbol have been removed.

- Patch #3133: http.server.CGIHTTPRequestHandler did not work on windows.

- a new ``urllib`` package was created.  It consists of code from
  ``urllib``, ``urllib2``, ``urlparse``, and ``robotparser``.  The old
  modules have all been removed.  The new package has five submodules:
  ``urllib.parse``, ``urllib.request``, ``urllib.response``,
  ``urllib.error``, and ``urllib.robotparser``.  The
  ``urllib.request.urlopen()`` function uses the url opener from
  ``urllib2``.  (Note that the unittests have not been renamed for the
  beta, but they will be renamed in the future.)

- rfc822 has been removed in favor of the email package.

- mimetools has been removed in favor of the email package.

- Patch #2849: Remove use of rfc822 module from standard library.

- Added C optimized implementation of io.StringIO.

- The ``pickle`` module is now automatically use an optimized C
  implementation of Pickler and Unpickler when available. The
  ``cPickle`` module is no longer needed.

- Removed the ``htmllib`` and ``sgmllib`` modules.

- The deprecated ``SmartCookie`` and ``SimpleCookie`` classes have
  been removed from ``http.cookies``.

- The ``commands`` module has been removed. Its getoutput() and
  getstatusoutput() functions have been moved to the ``subprocess`` module.

- The ``http`` package was created; it contains the old ``httplib``
  as ``http.client``, ``Cookie`` as ``http.cookies``, ``cookielib``
  as ``http.cookiejar``, and the content of the three ``HTTPServer``
  modules as ``http.server``.

- The ``xmlrpc`` package was created; it contains the old
  ``xmlrpclib`` module as ``xmlrpc.client`` and the content of
  the old ``SimpleXMLRPCServer`` and ``DocXMLRPCServer`` modules
  as ``xmlrpc.server``.

- The ``dbm`` package was created, containing the old modules
  ``anydbm`` and ``whichdb`` in its ``__init__.py``, and having
  ``dbm.gnu`` (was ``gdbm``), ``dbm.bsd`` (was ``dbhash``),
  ``dbm.ndbm`` (was ``dbm``) and ``dbm.dumb`` (was ``dumbdbm``)
  as submodules.

- The ``repr`` module has been renamed to ``reprlib``.

- The ``statvfs`` module has been removed.

- Issue #1713041: fix pprint's handling of maximum depth.

- Issue #2250: Exceptions raised during evaluation of names in
  rlcompleter's ``Completer.complete()`` method are now caught and
  ignored.

- Patch #2659: Added ``break_on_hyphens`` option to textwrap's
  ``TextWrapper`` class.

- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
  large to fit in a C long.  ldexp(x, n) now returns a zero (with
  suitable sign) if n is large and negative; previously, it raised
  OverflowError.

- The ``ConfigParser`` module has been renamed to ``configparser``.

- Issue #2865: webbrowser.open() works again in a KDE environment.

- The ``multifile`` module has been removed.

- The ``SocketServer`` module has been renamed to ``socketserver``.

- Fixed the ``__all__`` setting on ``collections`` to include
  ``UserList`` and ``UserString``.

- The sre module has been removed.

- The Queue module has been renamed to queue.

- The copy_reg module has been renamed to copyreg.

- The mhlib module has been removed.

- The ihooks module has been removed.

- The fpformat module has been removed.

- The dircache module has been removed.

- The Canvas module has been removed.

- The Decimal module gained the magic methods __round__, __ceil__,
  __floor__ and __trunc__, to give support for round, math.ceil,
  math.floor and math.trunc.

- The user module has been removed.

- The mutex module has been removed.

- The imputil module has been removed.

- os.path.walk has been removed in favor of os.walk.

- pdb gained the "until" command.

- The test.test_support module has been renamed to test.support.

- The threading module API was renamed to be PEP 8 compliant.  The
  old names are still present, but will be removed in the near future.

Tools/Demos
-----------

- The bgen tool has been removed.

Build
-----


What's New in Python 3.0a5?
===========================

*Release date: 08-May-2008*

Core and Builtins
-----------------

- Fixed misbehaviour of PyLong_FromSsize_t on systems where
  sizeof(size_t) > sizeof(long).

- Issue #2221: Corrected a SystemError "error return without exception
  set", when the code executed by exec() raises an exception, and
  sys.stdout.flush() also raises an error.

- Bug #2565: The repr() of type objects now calls them 'class', not
  'type' - whether they are builtin types or not.

- The command line processing was converted to pass Unicode strings
  through as unmodified as possible; as a consequence, the C API
  related to command line arguments was changed to use wchar_t.

- All backslashes in raw strings are interpreted literally.  This
  means that '\u' and '\U' escapes are not treated specially.

Extension Modules
-----------------

Library
-------

- ctypes objects now support the PEP3118 buffer interface.

- Issue #2682: ctypes callback functions now longer contain a cyclic
  reference to themselves.

- Issue #2058: Remove the buf attribute and add __slots__ to the
  TarInfo class in order to reduce tarfile's memory usage.

- Bug #2606: Avoid calling .sort() on a dict_keys object.

- The bundled libffi copy is now in sync with the recently released
  libffi3.0.5 version, apart from some small changes to
  Modules/_ctypes/libffi/configure.ac.

Build
-----

- Issue #1496032: On alpha, use -mieee when gcc is the compiler.

- "make install" is now an alias for "make altinstall", to prevent
  accidentally overwriting a Python 2.x installation.  Use "make
  fullinstall" to force Python 3.0 to be installed as "python".

- Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when
  gcc is used as compiler.


What's New in Python 3.0a4?
===========================

*Release date: 02-Apr-2008*

Core and Builtins
-----------------

- Bug #2301: Don't try decoding the source code into the original
  encoding for syntax errors.

Extension Modules
-----------------

- The dl module was removed, use the ctypes module instead.

- Use wchar_t functions in _locale module.

Library
-------

- The class distutils.commands.build_py.build_py_2to3 can be used as a
  build_py replacement to automatically run 2to3 on modules that are
  going to be installed.

- A new pickle protocol (protocol 3) is added with explicit support
  for bytes.  This is the default protocol.  It intentionally cannot
  be unpickled by Python 2.x.

- When a pickle written by Python 2.x contains an (8-bit) str
  instance, this is now decoded to a (Unicode) str instance.  The
  encoding used to do this defaults to ASCII, but can be overridden
  via two new keyword arguments to the Unpickler class.  Previously
  this would create bytes instances, which is usually wrong: str
  instances are often used to pickle attribute names etc., and text is
  more common than binary data anyway.

- Default to ASCII as the locale.getpreferredencoding, if the POSIX
  system doesn't support CODESET and LANG isn't set or doesn't allow
  deduction of an encoding.

- Issue #1202: zlib.crc32 and zlib.adler32 now return an unsigned
  value.

- Issue #719888: Updated tokenize to use a bytes API.  generate_tokens
  has been renamed tokenize and now works with bytes rather than
  strings.  A new detect_encoding function has been added for
  determining source file encoding according to PEP-0263.  Token
  sequences returned by tokenize always start with an ENCODING token
  which specifies the encoding used to decode the file.  This token is
  used to encode the output of untokenize back to bytes.


What's New in Python 3.0a3?
===========================

*Release date: 29-Feb-2008*

Core and Builtins
-----------------

- Issue #2282: io.TextIOWrapper was not overriding seekable() from
  io.IOBase.

- Issue #2115: Important speedup in setting __slot__ attributes.  Also
  prevent a possible crash: an Abstract Base Class would try to access
  a slot on a registered virtual subclass.

- Fixed repr() and str() of complex numbers with infinity or nan as
  real or imaginary part.

- Clear all free list during a gc.collect() of the highest generation
  in order to allow pymalloc to free more arenas. Python may give back
  memory to the OS earlier.

- Issue #2045: Fix an infinite recursion triggered when printing a
  subclass of collections.defaultdict, if its default_factory is set
  to a bound method.

- Fixed a minor memory leak in dictobject.c. The content of the free
  list was not freed on interpreter shutdown.

- Limit free list of method and builtin function objects to 256
  entries each.

- Patch #1953: Added ``sys._compact_freelists()`` and the C API
  functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList``
  to compact the internal free lists of pre-allocted ints and floats.

- Bug #1983: Fixed return type of fork(), fork1() and forkpty() calls.
  Python expected the return type int but the fork familie returns
  pi_t.

- Issue #1678380: Fix a bug that identifies 0j and -0j when they
  appear in the same code unit.

- Issue #2025: Added tuple.count() and tuple.index() methods to comply
  with the collections.Sequence API.

- Fixed multiple reinitialization of the Python interpreter. The small
  int list in longobject.c has caused a seg fault during the third
  finalization.

- Issue #1973: bytes.fromhex('') raised SystemError.

- Issue #1771: remove cmp parameter from sorted() and list.sort().

- Issue #1969: split and rsplit in bytearray are inconsistent.

- map() no longer accepts None for the first argument.  Use zip()
  instead.

- Issue #1769: Now int("- 1") is not allowed any more.

- Object/longobject.c: long(float('nan')) raises an OverflowError
  instead of returning 0.

- Issue #1762972: __file__ points to the source file instead of the
  pyc/pyo file if the py file exists.

- Issue #1393: object_richcompare() returns NotImplemented instead of
  False if the objects aren't equal, to give the other side a chance.

- Issue #1692: Interpreter was not displaying location of SyntaxError.

- Improve some exception messages when Windows fails to load an
  extension module.  Now we get for example '%1 is not a valid Win32
  application' instead of 'error code 193'.  Also use Unicode strings
  to deal with non-English locales.

- Issue #1587: Added instancemethod wrapper for PyCFunctions. The
  Python C API has gained a new type *PyInstanceMethod_Type* and the
  functions *PyInstanceMethod_Check(o)*, *PyInstanceMethod_New(func)*
  and *PyInstanceMethod_Function(im)*.

- Constants gc.DEBUG_OBJECT and gc.DEBUG_INSTANCE have been removed
  from the gc module; gc.DEBUG_COLLECTABLE or gc.DEBUG_UNCOLLECTABLE
  are now enough to print the corresponding list of objects considered
  by the garbage collector.

- Issue #1573: Improper use of the keyword-only syntax makes the
  parser crash.

- Issue #1564: The set implementation should special-case PyUnicode
  instead of PyString.

- Patch #1031213: Decode source line in SyntaxErrors back to its
  original source encoding.

- inspect.getsource() includes the decorators again.

- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a
  mountpoint.

- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
  the first chunk fed to the decoder started with a BOM, but was
  longer than 3 bytes.

Extension Modules
-----------------

- Code for itertools ifilter(), imap(), and izip() moved to bultins
  and renamed to filter(), map(), and zip().  Also, renamed
  izip_longest() to zip_longest() and ifilterfalse() to filterfalse().

- Issue #1762972: Readded the reload() function as imp.reload().

- Bug #2111: mmap segfaults when trying to write a block opened with
  PROT_READ.

- Issue #2063: correct order of utime and stime in os.times() result
  on Windows.

Library
-------

- Weakref dictionaries now inherit from MutableMapping.

- Created new UserDict class in collections module.  This one inherits
  from and complies with the MutableMapping ABC.  Also, moved
  UserString and UserList to the collections module.  The
  MutableUserString class was removed.

- Removed UserDict.DictMixin.  Replaced all its uses with
  collections.MutableMapping.

- Issue #1703: getpass() should flush after writing prompt.

- Issue #1585: IDLE uses non-existent xrange() function.

- Issue #1578: Problems in win_getpass.

Build
-----

- Renamed --enable-unicode configure flag to --with-wide-unicode,
  since Unicode strings can't be disabled anymore.

C API
-----

- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE,
  Py_TYPE and Py_REFCNT.

- New API PyImport_ImportModuleNoBlock(), works like
  PyImport_ImportModule() but won't block on the import lock
  (returning an error instead).


What's New in Python 3.0a2?
===========================

*Release date: 07-Dec-2007*

(Note: this list is incomplete.)

Core and Builtins
-----------------

- str8 now has the same construction signature as bytes.

- Comparisons between str and str8 now return False/True for ==/!=.
  sqlite3 returns str8 when recreating on object from it's __conform__
  value.  The struct module returns str8 for all string-related
  formats.  This was true before this change, but becomes more
  apparent thanks to string comparisons always being False.

- Replaced `PyFile_FromFile()` with `PyFile_FromFd(fd, name. mode,
  buffer, encoding, newline)`.

- Fixed `imp.find_module()` to obey the -*- coding: -*- header.

- Changed `__file__` and `co_filename` to unicode. The path names are decoded
  with `Py_FileSystemDefaultEncoding` and a new API method
  `PyUnicode_DecodeFSDefault(char*)` was added.

- io.open() and _fileio.FileIO have grown a new argument closefd. A
  false value disables the closing of the file descriptor.

- Added a new option -b to issues warnings (-bb for errors) about
  certain operations between bytes/buffer and str like str(b'') and
  comparison.

- The standards streams sys.stdin, stdout and stderr may be None when
  the when the C runtime library returns an invalid file descriptor
  for the streams (fileno(stdin) < 0). For now this happens only for
  Windows GUI apps and scripts started with `pythonw.exe`.

- Added PCbuild9 directory for VS 2008.

- Renamed structmember.h WRITE_RESTRICTED to PY_WRITE_RESTRICTED to
  work around a name clash with VS 2008 on Windows.

- Unbound methods are gone for good. ClassObject.method returns an
  ordinary function object, instance.method still returns a bound
  method object.  The API of bound methods is cleaned up, too. The
  im_class attribute is removed and im_func + im_self are renamed to
  __func__ and __self__. The factory PyMethod_New takes only func and
  instance as argument.

- intobject.h is no longer included by Python.h. The remains were
  moved to longobject.h. It still exists to define several aliases
  from PyInt to PyLong functions.

- Removed sys.maxint, use sys.maxsize instead.

Extension Modules
-----------------

- The `hotshot` profiler has been removed; use `cProfile` instead.

Library
-------

- When loading an external file using testfile(), the passed-in
  encoding argument was being ignored if __loader__ is defined and
  forcing the source to be UTF-8.

- The methods `os.tmpnam()`, `os.tempnam()` and `os.tmpfile()` have
  been removed in favor of the tempfile module.

- Removed the 'new' module.

- Removed all types from the 'types' module that are easily accessable
  through builtins.


What's New in Python 3.0a1?
===========================

*Release date: 31-Aug-2007*

Core and Builtins
-----------------

- PEP 3131: Support non-ASCII identifiers.

- PEP 3120: Change default encoding to UTF-8.

- PEP 3123: Use proper C inheritance for PyObject.

- Removed the __oct__ and __hex__ special methods and added a bin()
  builtin function.

- PEP 3127: octal literals now start with "0o". Old-style octal
  literals are invalid. There are binary literals with a prefix of
  "0b".  This also affects int(x, 0).

- None, True, False are now keywords.

- PEP 3119: isinstance() and issubclass() can be overridden.

- Remove BaseException.message.

- Remove tuple parameter unpacking (PEP 3113).

- Remove the f_restricted attribute from frames.  This naturally leads
  to the removal of PyEval_GetRestricted() and PyFrame_IsRestricted().

- PEP 3132 was accepted. That means that you can do ``a, *b =
  range(5)`` to assign 0 to a and [1, 2, 3, 4] to b.

- range() now returns an iterator rather than a list.  Floats are not
  allowed.  xrange() is no longer defined.

- Patch #1660500: hide iteration variable in list comps, add set comps
  and use common code to handle compilation of iterative expressions.

- By default, != returns the opposite of ==, unless the latter returns
  NotImplemented.

- Patch #1680961: sys.exitfunc has been removed and replaced with a
  private C-level API.

- PEP 3115: new metaclasses: the metaclass is now specified as a
  keyword arg in the class statement, which can now use the full
  syntax of a parameter list. Also, the metaclass can implement a
  __prepare__ function which will be called to create the dictionary
  for the new class namespace.

- The long-deprecated argument "pend" of PyFloat_FromString() has been
  removed.

- The dir() function has been extended to call the __dir__() method on
  its argument, if it exists. If not, it will work like before. This
  allows customizing the output of dir() in the presence of a
  __getattr__().

- Removed support for __members__ and __methods__.

- Removed indexing/slicing on BaseException.

- input() became raw_input(): the name input() now implements the
  functionality formerly known as raw_input(); the name raw_input() is
  no longer defined.

- Classes listed in an 'except' clause must inherit from
  BaseException.

- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
  and .keys(), .items(), .values() return dict views, which behave
  like sets.

- PEP 3105: print is now a function.  Also (not in the PEP) the
  'softspace' attribute of files is now gone (since print() doesn't
  use it).  A side effect of this change is that you can get
  incomplete output lines in interactive sessions:

  >>> print(42, end="")
  42>>>

  We may be able to fix this after the I/O library rewrite.

- PEP 3102: keyword-only arguments.

- Int/Long unification is complete.  The 'long' built-in type and
  literals with trailing 'L' or 'l' have been removed.  Performance
  may be sub-optimal (haven't really benchmarked).

- 'except E, V' must now be spelled as 'except E as V' and deletes V
  at the end of the except clause; V must be a simple name.

- Added function annotations per PEP 3107.

- Added nonlocal declaration from PEP 3104:

  >>> def f(x):
  ...     def inc():
  ...         nonlocal x
  ...         x += 1
  ...         return x
  ...     return inc
  ...
  >>> inc = f(0)
  >>> inc()
  1
  >>> inc()
  2

- Moved intern() to sys.intern().

- exec is now a function.

- Renamed nb_nonzero to nb_bool and __nonzero__ to __bool__.

- Classic classes are a thing of the past.  All classes are new style.

- Exceptions *must* derive from BaseException.

- Integer division always returns a float.  The -Q option is no more.
  All the following are gone:

  * PyNumber_Divide and PyNumber_InPlaceDivide
  * __div__, __rdiv__, and __idiv__
  * nb_divide, nb_inplace_divide
  * operator.div, operator.idiv, operator.__div__, operator.__idiv__
    (Only __truediv__ and __floordiv__ remain, not sure how to handle
    them if we want to re-use __div__ and friends.  If we do, it will
    make it harder to write code for both 2.x and 3.x.)

- 'as' and 'with' are keywords.

- Absolute import is the default behavior for 'import foo' etc.

- Removed support for syntax: backticks (ie, `x`), <>.

- Removed these Python builtins: apply(), callable(), coerce(),
  execfile(), file(), reduce(), reload().

- Removed these Python methods: {}.has_key.

- Removed these opcodes: BINARY_DIVIDE, INPLACE_DIVIDE, UNARY_CONVERT.

- Remove C API support for restricted execution.

- zip(), map() and filter() now return iterators, behaving like their
  itertools counterparts.  This also affect map()'s behavior on
  sequences of unequal length -- it now stops after the shortest one
  is exhausted.

- Additions: set literals, set comprehensions, ellipsis literal.

- Added class decorators per PEP 3129.


Extension Modules
-----------------

- Removed the imageop module.  Obsolete long with its unit tests
  becoming useless from the removal of rgbimg and imgfile.

- Removed these attributes from the operator module: div, idiv,
  __div__, __idiv__, isCallable, sequenceIncludes.

- Removed these attributes from the sys module: exc_clear(), exc_type,
  exc_value, exc_traceback.


Library
-------

- Removed the compiler package.  Use of the _ast module and (an
  eventual) AST -> bytecode mechanism.

- Removed these modules: audiodev, Bastion, bsddb185, exceptions,
  linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha,
  stringold, strop, sunaudiodev, timing, xmllib.

- Moved the toaiff module to Tools/Demos.

- Removed obsolete IRIX modules: al/AL, cd/CD, cddb, cdplayer, cl/CL,
  DEVICE, ERRNO, FILE, fl/FL, flp, fm, GET, gl/GL, GLWS, IN, imgfile,
  IOCTL, jpeg, panel, panelparser, readcd, sgi, sv/SV, torgb, WAIT.

- Removed obsolete functions: commands.getstatus(), os.popen*().

- Removed functions in the string module that are also string methods;
  Remove string.{letters, lowercase, uppercase}.

- Removed support for long obsolete platforms: plat-aix3, plat-irix5.

- Removed xmlrpclib.SlowParser.  It was based on xmllib.

- Patch #1680961: atexit has been reimplemented in C.

- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.

Build
-----

C API
-----

- Removed these Python slots: __coerce__, __div__, __idiv__, __rdiv__.

- Removed these C APIs: PyNumber_Coerce(), PyNumber_CoerceEx(),
  PyMember_Get, PyMember_Set.

- Removed these C slots/fields: nb_divide, nb_inplace_divide.

- Removed these macros: staticforward, statichere, PyArg_GetInt,
  PyArg_NoArgs, _PyObject_Del.

- Removed these typedefs: intargfunc, intintargfunc, intobjargproc,
  intintobjargproc, getreadbufferproc, getwritebufferproc,
  getsegcountproc, getcharbufferproc, memberlist.

Tests
-----

- Removed test.testall as test.regrtest replaces it.

Documentation
-------------

Mac
---

- The cfmfile module was removed.

Platforms
---------

- Support for BeOS and AtheOS was removed (according to PEP 11).

- Support for RiscOS, Irix, Tru64 was removed (alledgedly).

Tools/Demos
-----------


What's New in Python 2.5 release candidate 1?
=============================================

*Release date: 17-AUG-2006*

Core and builtins
-----------------

- Unicode objects will no longer raise an exception when being
  compared equal or unequal to a string and a UnicodeDecodeError
  exception occurs, e.g. as result of a decoding failure.

  Instead, the equal (==) and unequal (!=) comparison operators will
  now issue a UnicodeWarning and interpret the two objects as
  unequal. The UnicodeWarning can be filtered as desired using
  the warning framework, e.g. silenced completely, turned into an
  exception, logged, etc.

  Note that compare operators other than equal and unequal will still
  raise UnicodeDecodeError exceptions as they've always done.

- Fix segfault when doing string formatting on subclasses of long.

- Fix bug related to __len__ functions using values > 2**32 on 64-bit machines
  with new-style classes.

- Fix bug related to __len__ functions returning negative values with
  classic classes.

- Patch #1538606, Fix __index__() clipping.  There were some problems
  discovered with the API and how integers that didn't fit into Py_ssize_t
  were handled.  This patch attempts to provide enough alternatives
  to effectively use __index__.

- Bug #1536021: __hash__ may now return long int; the final hash
  value is obtained by invoking hash on the long int.

- Bug #1536786: buffer comparison could emit a RuntimeWarning.

- Bug #1535165: fixed a segfault in input() and raw_input() when
  sys.stdin is closed.

- On Windows, the PyErr_Warn function is now exported from
  the Python dll again.

- Bug #1191458: tracing over for loops now produces a line event
  on each iteration.  Fixing this problem required changing the .pyc
  magic number.  This means that .pyc files generated before 2.5c1
  will be regenerated.

- Bug #1333982: string/number constants were inappropriately stored
  in the byte code and co_consts even if they were not used, ie
  immediately popped off the stack.

- Fixed a reference-counting problem in property().


Library
-------

- Fix a bug in the ``compiler`` package that caused invalid code to be
  generated for generator expressions.

- The distutils version has been changed to 2.5.0. The change to
  keep it programmatically in sync with the Python version running
  the code (introduced in 2.5b3) has been reverted. It will continue
  to be maintained manually as static string literal.

- If the Python part of a ctypes callback function returns None,
  and this cannot be converted to the required C type, an exception is
  printed with PyErr_WriteUnraisable.  Before this change, the C
  callback returned arbitrary values to the calling code.

- The __repr__ method of a NULL ctypes.py_object() no longer raises
  an exception.

- uuid.UUID now has a bytes_le attribute. This returns the UUID in
  little-endian byte order for Windows. In addition, uuid.py gained some
  workarounds for clocks with low resolution, to stop the code yielding
  duplicate UUIDs.

- Patch #1540892: site.py Quitter() class attempts to close sys.stdin
  before raising SystemExit, allowing IDLE to honor quit() and exit().

- Bug #1224621: make tabnanny recognize IndentationErrors raised by tokenize.

- Patch #1536071: trace.py should now find the full module name of a
  file correctly even on Windows.

- logging's atexit hook now runs even if the rest of the module has
  already been cleaned up.

- Bug #1112549, fix DoS attack on cgi.FieldStorage.

- Bug #1531405, format_exception no longer raises an exception if
  str(exception) raised an exception.

- Fix a bug in the ``compiler`` package that caused invalid code to be
  generated for nested functions.


Extension Modules
-----------------

- Patch #1511317: don't crash on invalid hostname (alias) info.

- Patch #1535500: fix segfault in BZ2File.writelines and make sure it
  raises the correct exceptions.

- Patch # 1536908: enable building ctypes on OpenBSD/AMD64.  The
  '-no-stack-protector' compiler flag for OpenBSD has been removed.

- Patch #1532975 was applied, which fixes Bug #1533481: ctypes now
  uses the _as_parameter_ attribute when objects are passed to foreign
  function calls.  The ctypes version number was changed to 1.0.1.

- Bug #1530559, struct.pack raises TypeError where it used to convert.
  Passing float arguments to struct.pack when integers are expected
  now triggers a DeprecationWarning.


Tests
-----

- test_socketserver should now work on cygwin and not fail sporadically
  on other platforms.

- test_mailbox should now work on cygwin versions 2006-08-10 and later.

- Bug #1535182: really test the xreadlines() method of bz2 objects.

- test_threading now skips testing alternate thread stack sizes on
  platforms that don't support changing thread stack size.


Documentation
-------------

- Patch #1534922: unittest docs were corrected and enhanced.


Build
-----

- Bug #1535502, build _hashlib on Windows, and use masm assembler
  code in OpenSSL.

- Bug #1534738, win32 debug version of _msi should be _msi_d.pyd.

- Bug #1530448, ctypes build failure on Solaris 10 was fixed.


C API
-----

- New API for Unicode rich comparisons: PyUnicode_RichCompare()

- Bug #1069160.  Internal correctness changes were made to
  ``PyThreadState_SetAsyncExc()``.  A test case was added, and
  the documentation was changed to state that the return value
  is always 1 (normal) or 0 (if the specified thread wasn't found).


What's New in Python 2.5 beta 3?
================================

*Release date: 03-AUG-2006*

Core and builtins
-----------------

- _PyWeakref_GetWeakrefCount() now returns a Py_ssize_t; it previously
  returned a long (see PEP 353).

- Bug #1515471: string.replace() accepts character buffers again.

- Add PyErr_WarnEx() so C code can pass the stacklevel to warnings.warn().
  This provides the proper warning for struct.pack().
  PyErr_Warn() is now deprecated in favor of PyErr_WarnEx().

- Patch #1531113: Fix augmented assignment with yield expressions.
  Also fix a SystemError when trying to assign to yield expressions.

- Bug #1529871: The speed enhancement patch #921466 broke Python's compliance
  with PEP 302.  This was fixed by adding an ``imp.NullImporter`` type that is
  used in ``sys.path_importer_cache`` to cache non-directory paths and avoid
  excessive filesystem operations during imports.

- Bug #1521947: When checking for overflow, ``PyOS_strtol()`` used some
  operations on signed longs that are formally undefined by C.
  Unfortunately, at least one compiler now cares about that, so complicated
  the code to make that compiler happy again.

- Bug #1524310: Properly report errors from FindNextFile in os.listdir.

- Patch #1232023: Stop including current directory in search
  path on Windows.

- Fix some potential crashes found with failmalloc.

- Fix warnings reported by Klocwork's static analysis tool.

- Bug #1512814, Fix incorrect lineno's when code within a function
  had more than 255 blank lines.

- Patch #1521179: Python now accepts the standard options ``--help`` and
  ``--version`` as well as ``/?`` on Windows.

- Bug #1520864: unpacking singleton tuples in a 'for' loop (for x, in) works
  again.  Fixing this problem required changing the .pyc magic number.
  This means that .pyc files generated before 2.5b3 will be regenerated.

- Bug #1524317:  Compiling Python ``--without-threads`` failed.
  The Python core compiles again, and, in a build without threads, the
  new ``sys._current_frames()`` returns a dictionary with one entry,
  mapping the faux "thread id" 0 to the current frame.

- Bug #1525447: build on MacOS X on a case-sensitive filesystem.


Library
-------

- Fix #1693149.  Now you can pass several modules separated by
  comma to trace.py in the same --ignore-module option.

- Correction of patch #1455898: In the mbcs decoder, set final=False
  for stream decoder, but final=True for the decode function.

- os.urandom no longer masks unrelated exceptions like SystemExit or
  KeyboardInterrupt.

- Bug #1525866: Don't copy directory stat times in
  shutil.copytree on Windows

- Bug #1002398: The documentation for os.path.sameopenfile now correctly
  refers to file descriptors, not file objects.

- The renaming of the xml package to xmlcore, and the import hackery done
  to make it appear at both names, has been removed.  Bug #1511497,
  #1513611, and probably others.

- Bug #1441397: The compiler module now recognizes module and function
  docstrings correctly as it did in Python 2.4.

- Bug #1529297:  The rewrite of doctest for Python 2.4 unintentionally
  lost that tests are sorted by name before being run.  This rarely
  matters for well-written tests, but can create baffling symptoms if
  side effects from one test to the next affect outcomes.  ``DocTestFinder``
  has been changed to sort the list of tests it returns.

- The distutils version has been changed to 2.5.0, and is now kept
  in sync with sys.version_info[:3].

- Bug #978833: Really close underlying socket in _socketobject.close.

- Bug #1459963: urllib and urllib2 now normalize HTTP header names with
  title().

- Patch #1525766: In pkgutil.walk_packages, correctly pass the onerror callback
  to recursive calls and call it with the failing package name.

- Bug #1525817: Don't truncate short lines in IDLE's tool tips.

- Patch #1515343: Fix printing of deprecated string exceptions with a
  value in the traceback module.

- Resync optparse with Optik 1.5.3: minor tweaks for/to tests.

- Patch #1524429: Use repr() instead of backticks in Tkinter again.

- Bug #1520914: Change time.strftime() to accept a zero for any position in its
  argument tuple.  For arguments where zero is illegal, the value is forced to
  the minimum value that is correct.  This is to support an undocumented but
  common way people used  to fill in inconsequential information in the time
  tuple pre-2.4.

- Patch #1220874: Update the binhex module for Mach-O.

- The email package has improved RFC 2231 support, specifically for
  recognizing the difference between encoded (name*0*=<blah>) and non-encoded
  (name*0=<blah>) parameter continuations.  This may change the types of
  values returned from email.message.Message.get_param() and friends.
  Specifically in some cases where non-encoded continuations were used,
  get_param() used to return a 3-tuple of (None, None, string) whereas now it
  will just return the string (since non-encoded continuations don't have
  charset and language parts).

  Also, whereas % values were decoded in all parameter continuations, they are
  now only decoded in encoded parameter parts.

- Bug #1517990: IDLE keybindings on MacOS X now work correctly

- Bug #1517996: IDLE now longer shows the default Tk menu when a
  path browser, class browser or debugger is the frontmost window on MacOS X

- Patch #1520294: Support for getset and member descriptors in types.py,
  inspect.py, and pydoc.py.  Specifically, this allows for querying the type
  of an object against these built-in types and more importantly, for getting
  their docstrings printed in the interactive interpreter's help() function.


Extension Modules
-----------------

- Patch #1519025 and bug #926423: If a KeyboardInterrupt occurs during
  a socket operation on a socket with a timeout, the exception will be
  caught correctly.  Previously, the exception was not caught.

- Patch #1529514: The _ctypes extension is now compiled on more
  openbsd target platforms.

- The ``__reduce__()`` method of the new ``collections.defaultdict`` had
  a memory leak, affecting pickles and deep copies.

- Bug #1471938: Fix curses module build problem on Solaris 8; patch by
  Paul Eggert.

- Patch #1448199: Release interpreter lock in _winreg.ConnectRegistry.

- Patch #1521817: Index range checking on ctypes arrays containing
  exactly one element enabled again.  This allows iterating over these
  arrays, without the need to check the array size before.

- Bug #1521375: When the code in ctypes.util.find_library was
  run with root privileges, it could overwrite or delete
  /dev/null in certain cases; this is now fixed.

- Bug #1467450: On Mac OS X 10.3, RTLD_GLOBAL is now used as the
  default mode for loading shared libraries in ctypes.

- Because of a misspelled preprocessor symbol, ctypes was always
  compiled without thread support; this is now fixed.

- pybsddb Bug #1527939: bsddb module DBEnv dbremove and dbrename
  methods now allow their database parameter to be None as the
  sleepycat API allows.

- Bug #1526460: Fix socketmodule compile on NetBSD as it has a different
  bluetooth API compared with Linux and FreeBSD.

Tests
-----

- Bug #1501330: Change test_ossaudiodev to be much more tolerant in terms of
  how long the test file should take to play.  Now accepts taking 2.93 secs
  (exact time) +/- 10% instead of the hard-coded 3.1 sec.

- Patch #1529686: The standard tests ``test_defaultdict``, ``test_iterlen``,
  ``test_uuid`` and ``test_email_codecs`` didn't actually run any tests when
  run via ``regrtest.py``. Now they do.

Build
-----

- Bug #1439538: Drop usage of test -e in configure as it is not portable.

Mac
---

- PythonLauncher now works correctly when the path to the script contains
  characters that are treated specially by the shell (such as quotes).

- Bug #1527397: PythonLauncher now launches scripts with the working directory
  set to the directory that contains the script instead of the user home
  directory. That latter was an implementation accident and not what users
  expect.


What's New in Python 2.5 beta 2?
================================

*Release date: 11-JUL-2006*

Core and builtins
-----------------

- Bug #1441486: The literal representation of -(sys.maxint - 1)
  again evaluates to a int object, not a long.

- Bug #1501934: The scope of global variables that are locally assigned
  using augmented assignment is now correctly determined.

- Bug #927248: Recursive method-wrapper objects can now safely
  be released.

- Bug #1417699: Reject locale-specific decimal point in float()
  and atof().

- Bug #1511381: codec_getstreamcodec() in codec.c is corrected to
  omit a default "error" argument for NULL pointer.  This allows
  the parser to take a codec from cjkcodecs again.

- Bug #1519018: 'as' is now validated properly in import statements.

- On 64 bit systems, int literals that use less than 64 bits are
  now ints rather than longs.

- Bug #1512814, Fix incorrect lineno's when code at module scope
  started after line 256.

- New function ``sys._current_frames()`` returns a dict mapping thread
  id to topmost thread stack frame.  This is for expert use, and is
  especially useful for debugging application deadlocks.  The functionality
  was previously available in Fazal Majid's ``threadframe`` extension
  module, but it wasn't possible to do this in a wholly threadsafe way from
  an extension.

Library
-------

- Bug #1257728: Mention Cygwin in distutils error message about a missing
  VS 2003.

- Patch #1519566: Update turtle demo, make begin_fill idempotent.

- Bug #1508010: msvccompiler now requires the DISTUTILS_USE_SDK
  environment variable to be set in order to the SDK environment
  for finding the compiler, include files, etc.

- Bug #1515998: Properly generate logical ids for files in bdist_msi.

- warnings.py now ignores ImportWarning by default

- string.Template() now correctly handles tuple-values. Previously,
  multi-value tuples would raise an exception and single-value tuples would
  be treated as the value they contain, instead.

- Bug #822974: Honor timeout in telnetlib.{expect,read_until}
  even if some data are received.

- Bug #1267547: Put proper recursive setup.py call into the
  spec file generated by bdist_rpm.

- Bug #1514693: Update turtle's heading when switching between
  degrees and radians.

- Reimplement turtle.circle using a polyline, to allow correct
  filling of arcs.

- Bug #1514703: Only setup canvas window in turtle when the canvas
  is created.

- Bug #1513223: .close() of a _socketobj now releases the underlying
  socket again, which then gets closed as it becomes unreferenced.

- Bug #1504333: Make sgmllib support angle brackets in quoted
  attribute values.

- Bug #853506: Fix IPv6 address parsing in unquoted attributes in
  sgmllib ('[' and ']' were not accepted).

- Fix a bug in the turtle module's end_fill function.

- Bug #1510580: The 'warnings' module improperly required that a Warning
  category be either a types.ClassType and a subclass of Warning.  The proper
  check is just that it is a subclass with Warning as the documentation states.

- The compiler module now correctly compiles the new try-except-finally
  statement (bug #1509132).

- The wsgiref package is now installed properly on Unix.

- A bug was fixed in logging.config.fileConfig() which caused a crash on
  shutdown when fileConfig() was called multiple times.

- The sqlite3 module did cut off data from the SQLite database at the first
  null character before sending it to a custom converter. This has been fixed
  now.

Extension Modules
-----------------

- #1494314: Fix a regression with high-numbered sockets in 2.4.3. This
  means that select() on sockets > FD_SETSIZE (typically 1024) work again.
  The patch makes sockets use poll() internally where available.

- Assigning None to pointer type fields in ctypes structures possible
  overwrote the wrong fields, this is fixed now.

- Fixed a segfault in _ctypes when ctypes.wintypes were imported
  on non-Windows platforms.

- Bug #1518190: The ctypes.c_void_p constructor now accepts any
  integer or long, without range checking.

- Patch #1517790: It is now possible to use custom objects in the ctypes
  foreign function argtypes sequence as long as they provide a from_param
  method, no longer is it required that the object is a ctypes type.

- The '_ctypes' extension module now works when Python is configured
  with the --without-threads option.

- Bug #1513646: os.access on Windows now correctly determines write
  access, again.

- Bug #1512695: cPickle.loads could crash if it was interrupted with
  a KeyboardInterrupt.

- Bug #1296433: parsing XML with a non-default encoding and
  a CharacterDataHandler could crash the interpreter in pyexpat.

- Patch #1516912: improve Modules support for OpenVMS.

Build
-----

- Automate Windows build process for the Win64 SSL module.

- 'configure' now detects the zlib library the same way as distutils.
  Previously, the slight difference could cause compilation errors of the
  'zlib' module on systems with more than one version of zlib.

- The MSI compileall step was fixed to also support a TARGETDIR
  with spaces in it.

- Bug #1517388: sqlite3.dll is now installed on Windows independent
  of Tcl/Tk.

- Bug #1513032: 'make install' failed on FreeBSD 5.3 due to lib-old
  trying to be installed even though it's empty.

Tests
-----

- Call os.waitpid() at the end of tests that spawn child processes in order
  to minimize resources (zombies).

Documentation
-------------

- Cover ImportWarning, PendingDeprecationWarning and simplefilter() in the
  documentation for the warnings module.

- Patch #1509163: MS Toolkit Compiler no longer available.

- Patch #1504046: Add documentation for xml.etree.


What's New in Python 2.5 beta 1?
================================

*Release date: 20-JUN-2006*

Core and builtins
-----------------

- Patch #1507676: Error messages returned by invalid abstract object operations
  (such as iterating over an integer) have been improved and now include the
  type of the offending object to help with debugging.

- Bug #992017: A classic class that defined a __coerce__() method that returned
  its arguments swapped would infinitely recurse and segfault the interpreter.

- Fix the socket tests so they can be run concurrently.

- Removed 5 integers from C frame objects (PyFrameObject).
  f_nlocals, f_ncells, f_nfreevars, f_stack_size, f_restricted.

- Bug #532646: object.__call__() will continue looking for the __call__
  attribute on objects until one without one is found.  This leads to recursion
  when you take a class and set its __call__ attribute to an instance of the
  class.  Originally fixed for classic classes, but this fix is for new-style.
  Removes the infinite_rec_3 crasher.

- The string and unicode methods startswith() and endswith() now accept
  a tuple of prefixes/suffixes to look for. Implements RFE #1491485.

- Buffer objects, at the C level, never used the char buffer
  implementation even when the char buffer for the wrapped object was
  explicitly requested (originally returned the read or write buffer).
  Now a TypeError is raised if the char buffer is not present but is
  requested.

- Patch #1346214: Statements like "if 0: suite" are now again optimized
  away like they were in Python 2.4.

- Builtin exceptions are now full-blown new-style classes instead of
  instances pretending to be classes, which speeds up exception handling
  by about 80% in comparison to 2.5a2.

- Patch #1494554: Update unicodedata.numeric and unicode.isnumeric to
  Unicode 4.1.

- Patch #921466: sys.path_importer_cache is now used to cache valid and
  invalid file paths for the built-in import machinery which leads to
  fewer open calls on startup.

- Patch #1442927: ``long(str, base)`` is now up to 6x faster for non-power-
  of-2 bases.  The largest speedup is for inputs with about 1000 decimal
  digits.  Conversion from non-power-of-2 bases remains quadratic-time in
  the number of input digits (it was and remains linear-time for bases
  2, 4, 8, 16 and 32).

- Bug #1334662: ``int(string, base)`` could deliver a wrong answer
  when ``base`` was not 2, 4, 8, 10, 16 or 32, and ``string`` represented
  an integer close to ``sys.maxint``.  This was repaired by patch
  #1335972, which also gives a nice speedup.

- Patch #1337051: reduced size of frame objects.

- PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.

- Patch #876206: function call speedup by retaining allocated frame
  objects.

- Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.

- Patch #1488312, Fix memory alignment problem on SPARC in unicode

- Bug #1487966: Fix SystemError with conditional expression in assignment

- WindowsError now has two error code attributes: errno, which carries
  the error values from errno.h, and winerror, which carries the error
  values from winerror.h. Previous versions put the winerror.h values
  (from GetLastError()) into the errno attribute.

- Patch #1475845: Raise IndentationError for unexpected indent.

- Patch #1479181: split open() and file() from being aliases for each other.

- Patch #1497053 & bug #1275608: Exceptions occurring in ``__eq__()``
  methods were always silently ignored by dictionaries when comparing keys.
  They are now passed through (except when using the C API function
  ``PyDict_GetItem()``, whose semantics did not change).

- Bug #1456209: In some obscure cases it was possible for a class with a
  custom ``__eq__()`` method to confuse dict internals when class instances
  were used as a dict's keys and the ``__eq__()`` method mutated the dict.
  No, you don't have any code that did this ;-)

Extension Modules
-----------------

- Bug #1295808: expat symbols should be namespaced in pyexpat

- Patch #1462338: Upgrade pyexpat to expat 2.0.0

- Change binascii.hexlify to accept a read-only buffer instead of only a char
  buffer and actually follow its documentation.

- Fixed a potentially invalid memory access of CJKCodecs' shift-jis decoder.

- Patch #1478788 (modified version): The functional extension module has
  been renamed to _functools and a functools Python wrapper module added.
  This provides a home for additional function related utilities that are
  not specifically about functional programming. See PEP 309.

- Patch #1493701: performance enhancements for struct module.

- Patch #1490224: time.altzone is now set correctly on Cygwin.

- Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.

- Patch #1454481: thread stack size is now tunable at runtime for thread
  enabled builds on Windows and systems with Posix threads support.

- On Win32, os.listdir now supports arbitrarily-long Unicode path names
  (up to the system limit of 32K characters).

- Use Win32 API to implement os.{access,chdir,chmod,mkdir,remove,rename,rmdir,utime}.
  As a result, these functions now raise WindowsError instead of OSError.

- ``time.clock()`` on Win64 should use the high-performance Windows
  ``QueryPerformanceCounter()`` now (as was already the case on 32-bit
  Windows platforms).

- Calling Tk_Init twice is refused if the first call failed as that
  may deadlock.

- bsddb: added the DB_ARCH_REMOVE flag and fixed db.DBEnv.log_archive() to
  accept it without potentially using an uninitialized pointer.

- bsddb: added support for the DBEnv.log_stat() and DBEnv.lsn_reset() methods
  assuming BerkeleyDB >= 4.0 and 4.4 respectively.  [pybsddb project SF
  patch numbers 1494885 and 1494902]

- bsddb: added an interface for the BerkeleyDB >= 4.3 DBSequence class.
  [pybsddb project SF patch number 1466734]

- bsddb: fix DBCursor.pget() bug with keyword argument names when no data
  parameter is supplied.  [SF pybsddb bug #1477863]

- bsddb: the __len__ method of a DB object has been fixed to return correct
  results.  It could previously incorrectly return 0 in some cases.
  Fixes SF bug 1493322 (pybsddb bug 1184012).

- bsddb: the bsddb.dbtables Modify method now raises the proper error and
  aborts the db transaction safely when a modifier callback fails.
  Fixes SF python patch/bug #1408584.

- bsddb: multithreaded DB access using the simple bsddb module interface
  now works reliably.  It has been updated to use automatic BerkeleyDB
  deadlock detection and the bsddb.dbutils.DeadlockWrap wrapper to retry
  database calls that would previously deadlock. [SF python bug #775414]

- Patch #1446489: add support for the ZIP64 extensions to zipfile.

- Patch #1506645: add Python wrappers for the curses functions
  is_term_resized, resize_term and resizeterm.

Library
-------

- Patch #815924: Restore ability to pass type= and icon= in tkMessageBox
  functions.

- Patch #812986: Update turtle output even if not tracing.

- Patch #1494750: Destroy master after deleting children in
  Tkinter.BaseWidget.

- Patch #1096231: Add ``default`` argument to Tkinter.Wm.wm_iconbitmap.

- Patch #763580: Add name and value arguments to Tkinter variable
  classes.

- Bug #1117556: SimpleHTTPServer now tries to find and use the system's
  mime.types file for determining MIME types.

- Bug #1339007: Shelf objects now don't raise an exception in their
  __del__ method when initialization failed.

- Patch #1455898: The MBCS codec now supports the incremental mode for
  double-byte encodings.

- ``difflib``'s ``SequenceMatcher.get_matching_blocks()`` was changed to
  guarantee that adjacent triples in the return list always describe
  non-adjacent blocks.  Previously, a pair of matching blocks could end
  up being described by multiple adjacent triples that formed a partition
  of the matching pair.

- Bug #1498146: fix optparse to handle Unicode strings in option help,
  description, and epilog.

- Bug #1366250: minor optparse documentation error.

- Bug #1361643: fix textwrap.dedent() so it handles tabs appropriately;
  clarify docs.

- The wsgiref package has been added to the standard library.

- The functions update_wrapper() and wraps() have been added to the functools
  module. These make it easier to copy relevant metadata from the original
  function when writing wrapper functions.

- The optional ``isprivate`` argument to ``doctest.testmod()``, and the
  ``doctest.is_private()`` function, both deprecated in 2.4, were removed.

- Patch #1359618: Speed up charmap encoder by using a trie structure
  for lookup.

- The functions in the ``pprint`` module now sort dictionaries by key
  before computing the display.  Before 2.5, ``pprint`` sorted a dictionary
  if and only if its display required more than one line, although that
  wasn't documented.  The new behavior increases predictability; e.g.,
  using ``pprint.pprint(a_dict)`` in a doctest is now reliable.

- Patch #1497027: try HTTP digest auth before basic auth in urllib2
  (thanks for J. J. Lee).

- Patch #1496206: improve urllib2 handling of passwords with respect to
  default HTTP and HTTPS ports.

- Patch #1080727: add "encoding" parameter to doctest.DocFileSuite.

- Patch #1281707: speed up gzip.readline.

- Patch #1180296: Two new functions were added to the locale module:
  format_string() to get the effect of  "format % items" but locale-aware,
  and currency() to format a monetary number with currency sign.

- Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.

- Patch #1488881: add support for external file objects in bz2 compressed
  tarfiles.

- Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.

- Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.

- Patch #1478292. ``doctest.register_optionflag(name)`` shouldn't create a
  new flag when ``name`` is already the name of an option flag.

- Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler
  package.

- Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.

- Patch #1470846: fix urllib2 ProxyBasicAuthHandler.

- Bug #1472827: correctly escape newlines and tabs in attribute values in
  the saxutils.XMLGenerator class.


Build
-----

- Bug #1502728: Correctly link against librt library on HP-UX.

- OpenBSD 3.9 is supported now.

- Patch #1492356: Port to Windows CE.

- Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.

- Patch #1471883: Add --enable-universalsdk.

C API
-----

Tests
-----

Tools
-----

Documentation
-------------



What's New in Python 2.5 alpha 2?
=================================

*Release date: 27-APR-2006*

Core and builtins
-----------------

- Bug #1465834: 'bdist_wininst preinstall script support' was fixed
  by converting these apis from macros into exported functions again:

    PyParser_SimpleParseFile PyParser_SimpleParseString PyRun_AnyFile
    PyRun_AnyFileEx PyRun_AnyFileFlags PyRun_File PyRun_FileEx
    PyRun_FileFlags PyRun_InteractiveLoop PyRun_InteractiveOne
    PyRun_SimpleFile PyRun_SimpleFileEx PyRun_SimpleString
    PyRun_String Py_CompileString

- Under COUNT_ALLOCS, types are not necessarily immortal anymore.

- All uses of PyStructSequence_InitType have been changed to initialize
  the type objects only once, even if the interpreter is initialized
  multiple times.

- Bug #1454485, array.array('u') could crash the interpreter.  This was
  due to PyArgs_ParseTuple(args, 'u#', ...) trying to convert buffers (strings)
  to unicode when it didn't make sense.  'u#' now requires a unicode string.

- Py_UNICODE is unsigned.  It was always documented as unsigned, but
  due to a bug had a signed value in previous versions.

- Patch #837242: ``id()`` of any Python object always gives a positive
  number now, which might be a long integer. ``PyLong_FromVoidPtr`` and
  ``PyLong_AsVoidPtr`` have been changed accordingly.  Note that it has
  never been correct to implement a ``__hash()__`` method that returns the
  ``id()`` of an object:

      def __hash__(self):
          return id(self)  # WRONG

  because a hash result must be a (short) Python int but it was always
  possible for ``id()`` to return a Python long.  However, because ``id()``
  could return negative values before, on a 32-bit box an ``id()`` result
  was always usable as a hash value before this patch.  That's no longer
  necessarily so.

- Python on OS X 10.3 and above now uses dlopen() (via dynload_shlib.c)
  to load extension modules and now provides the dl module. As a result,
  sys.setdlopenflags() now works correctly on these systems. (SF patch
  #1454844)

- Patch #1463867: enhanced garbage collection to allow cleanup of cycles
  involving generators that have paused outside of any ``try`` or ``with``
  blocks.  (In 2.5a1, a paused generator that was part of a reference
  cycle could not be garbage collected, regardless of whether it was
  paused in a ``try`` or ``with`` block.)

Extension Modules
-----------------

- Patch #1191065: Fix preprocessor problems on systems where recvfrom
  is a macro.

- Bug #1467952: os.listdir() now correctly raises an error if readdir()
  fails with an error condition.

- Fixed bsddb.db.DBError derived exceptions so they can be unpickled.

- Bug #1117761: bsddb.*open() no longer raises an exception when using
  the cachesize parameter.

- Bug #1149413: bsddb.*open() no longer raises an exception when using
  a temporary db (file=None) with the 'n' flag to truncate on open.

- Bug #1332852: bsddb module minimum BerkeleyDB version raised to 3.3
  as older versions cause excessive test failures.

- Patch #1062014: AF_UNIX sockets under Linux have a special
  abstract namespace that is now fully supported.

Library
-------

- Bug #1223937: subprocess.CalledProcessError reports the exit status
  of the process using the returncode attribute, instead of
  abusing errno.

- Patch #1475231: ``doctest`` has a new ``SKIP`` option, which causes
  a doctest to be skipped (the code is not run, and the expected output
  or exception is ignored).

- Fixed contextlib.nested to cope with exceptions being raised and
  caught inside exit handlers.

- Updated optparse module to Optik 1.5.1 (allow numeric constants in
  hex, octal, or binary; add ``append_const`` action; keep going if
  gettext cannot be imported; added ``OptionParser.destroy()`` method;
  added ``epilog`` for better help generation).

- Bug #1473760: ``tempfile.TemporaryFile()`` could hang on Windows, when
  called from a thread spawned as a side effect of importing a module.

- The pydoc module now supports documenting packages contained in
  .zip or .egg files.

- The pkgutil module now has several new utility functions, such
  as ``walk_packages()`` to support working with packages that are either
  in the filesystem or zip files.

- The mailbox module can now modify and delete messages from
  mailboxes, in addition to simply reading them.  Thanks to Gregory
  K. Johnson for writing the code, and to the 2005 Google Summer of
  Code for funding his work.

- The ``__del__`` method of class ``local`` in module ``_threading_local``
  returned before accomplishing any of its intended cleanup.

- Patch #790710: Add breakpoint command lists in pdb.

- Patch #1063914: Add Tkinter.Misc.clipboard_get().

- Patch #1191700: Adjust column alignment in bdb breakpoint lists.

- SimpleXMLRPCServer relied on the fcntl module, which is unavailable on
  Windows. Bug #1469163.

- The warnings, linecache, inspect, traceback, site, and doctest modules
  were updated to work correctly with modules imported from zipfiles or
  via other PEP 302 __loader__ objects.

- Patch #1467770: Reduce usage of subprocess._active to processes which
  the application hasn't waited on.

- Patch #1462222: Fix Tix.Grid.

- Fix exception when doing glob.glob('anything*/')

- The pstats.Stats class accepts an optional stream keyword argument to
  direct output to an alternate file-like object.

Build
-----

- The Makefile now has a reindent target, which runs reindent.py on
  the library.

- Patch #1470875: Building Python with MS Free Compiler

- Patch #1161914: Add a python-config script.

- Patch #1324762:Remove ccpython.cc; replace --with-cxx with
  --with-cxx-main. Link with C++ compiler only if --with-cxx-main was
  specified. (Can be overridden by explicitly setting LINKCC.) Decouple
  CXX from --with-cxx-main, see description in README.

- Patch #1429775: Link extension modules with the shared libpython.

- Fixed a libffi build problem on MIPS systems.

- ``PyString_FromFormat``, ``PyErr_Format``, and ``PyString_FromFormatV``
  now accept formats "%u" for unsigned ints, "%lu" for unsigned longs,
  and "%zu" for unsigned integers of type ``size_t``.

Tests
-----

- test_contextlib now checks contextlib.nested can cope with exceptions
  being raised and caught inside exit handlers.

- test_cmd_line now checks operation of the -m and -c command switches

- The test_contextlib test in 2.5a1 wasn't actually run unless you ran
  it separately and by hand.  It also wasn't cleaning up its changes to
  the current Decimal context.

- regrtest.py now has a -M option to run tests that test the new limits of
  containers, on 64-bit architectures. Running these tests is only sensible
  on 64-bit machines with more than two gigabytes of memory. The argument
  passed is the maximum amount of memory for the tests to use.

Tools
-----

- Added the Python benchmark suite pybench to the Tools/ directory;
  contributed by Marc-Andre Lemburg.

Documentation
-------------

- Patch #1473132: Improve docs for ``tp_clear`` and ``tp_traverse``.

- PEP 343: Added Context Types section to the library reference
  and attempted to bring other PEP 343 related documentation into
  line with the implementation and/or python-dev discussions.

- Bug #1337990: clarified that ``doctest`` does not support examples
  requiring both expected output and an exception.


What's New in Python 2.5 alpha 1?
=================================

*Release date: 05-APR-2006*

Core and builtins
-----------------

- PEP 338: -m command line switch now delegates to runpy.run_module
  allowing it to support modules in packages and zipfiles

- On Windows, .DLL is not an accepted file name extension for
  extension modules anymore; extensions are only found if they
  end in .PYD.

- Bug #1421664: sys.stderr.encoding is now set to the same value as
  sys.stdout.encoding.

- __import__ accepts keyword arguments.

- Patch #1460496: round() now accepts keyword arguments.

- Fixed bug #1459029 - unicode reprs were double-escaped.

- Patch #1396919: The system scope threads are reenabled on FreeBSD
  5.4 and later versions.

- Bug #1115379: Compiling a Unicode string with an encoding declaration
  now gives a SyntaxError.

- Previously, Python code had no easy way to access the contents of a
  cell object. Now, a ``cell_contents`` attribute has been added
  (closes patch #1170323).

- Patch #1123430: Python's small-object allocator now returns an arena to
  the system ``free()`` when all memory within an arena becomes unused
  again.  Prior to Python 2.5, arenas (256KB chunks of memory) were never
  freed.  Some applications will see a drop in virtual memory size now,
  especially long-running applications that, from time to time, temporarily
  use a large number of small objects.  Note that when Python returns an
  arena to the platform C's ``free()``, there's no guarantee that the
  platform C library will in turn return that memory to the operating system.
  The effect of the patch is to stop making that impossible, and in tests it
  appears to be effective at least on Microsoft C and gcc-based systems.
  Thanks to Evan Jones for hard work and patience.

- Patch #1434038: property() now uses the getter's docstring if there is
  no "doc" argument given. This makes it possible to legitimately use
  property() as a decorator to produce a read-only property.

- PEP 357, patch 1436368: add an __index__ method to int/long and a matching
  nb_index slot to the PyNumberMethods struct.  The slot is consulted instead
  of requiring an int or long in slicing and a few other contexts, enabling
  other objects (e.g. Numeric Python's integers) to be used as slice indices.

- Fixed various bugs reported by Coverity's Prevent tool.

- PEP 352, patch #1104669: Make exceptions new-style objects.  Introduced the
  new exception base class, BaseException, which has a new message attribute.
  KeyboardInterrupt and SystemExit to directly inherit from BaseException now.
  Raising a string exception now raises a DeprecationWarning.

- Patch #1438387, PEP 328: relative and absolute imports. Imports can now be
  explicitly relative, using 'from .module import name' to mean 'from the same
  package as this module is in. Imports without dots still default to the
  old relative-then-absolute, unless 'from __future__ import
  absolute_import' is used.

- Properly check if 'warnings' raises an exception (usually when a filter set
  to "error" is triggered) when raising a warning for raising string
  exceptions.

- CO_GENERATOR_ALLOWED is no longer defined. This behavior is the default.
  The name was removed from Include/code.h.

- PEP 308: conditional expressions were added: (x if cond else y).

- Patch 1433928:
  - The copy module now "copies" function objects (as atomic objects).
  - dict.__getitem__ now looks for a __missing__ hook before raising
    KeyError.

- PEP 343: with statement implemented. Needs ``from __future__ import
  with_statement``. Use of 'with' as a variable will generate a warning.
  Use of 'as' as a variable will also generate a warning (unless it's
  part of an import statement).
  The following objects have __context__ methods:
  - The built-in file type.
  - The thread.LockType type.
  - The following types defined by the threading module:
    Lock, RLock, Condition, Semaphore, BoundedSemaphore.
  - The decimal.Context class.

- Fix the encodings package codec search function to only search
  inside its own package. Fixes problem reported in patch #1433198.

  Note: Codec packages should implement and register their own
  codec search function. PEP 100 has the details.

- PEP 353: Using ``Py_ssize_t`` as the index type.

- ``PYMALLOC_DEBUG`` builds now add ``4*sizeof(size_t)`` bytes of debugging
  info to each allocated block, since the ``Py_ssize_t`` changes (PEP 353)
  now allow Python to make use of memory blocks exceeding 2**32 bytes for
  some purposes on 64-bit boxes.  A ``PYMALLOC_DEBUG`` build was limited
  to 4-byte allocations before.

- Patch #1400181, fix unicode string formatting to not use the locale.
  This is how string objects work.  u'%f' could use , instead of .
  for the decimal point.  Now both strings and unicode always use periods.

- Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8.
  configure would break checking curses.h.

- Bug #959576: The pwd module is now built in. This allows Python to be
  built on UNIX platforms without $HOME set.

- Bug #1072182, fix some potential problems if characters are signed.

- Bug #889500, fix line number on SyntaxWarning for global declarations.

- Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.

- Support for converting hex strings to floats no longer works.
  This was not portable.  float('0x3') now raises a ValueError.

- Patch #1382163: Expose Subversion revision number to Python.  New C API
  function Py_GetBuildNumber().  New attribute sys.subversion.  Build number
  is now displayed in interactive prompt banner.

- Implementation of PEP 341 - Unification of try/except and try/finally.
  "except" clauses can now be written together with a "finally" clause in
  one try statement instead of two nested ones.  Patch #1355913.

- Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec
  now encodes backslash correctly.

- Patch #1350409: Work around signal handling bug in Visual Studio 2005.

- Bug #1281408: Py_BuildValue now works correctly even with unsigned longs
  and long longs.

- SF Bug #1350188, "setdlopenflags" leads to crash upon "import"
  It was possible for dlerror() to return a NULL pointer, so
  it will now use a default error message in this case.

- Replaced most Unicode charmap codecs with new ones using the
  new Unicode translate string feature in the built-in charmap
  codec; the codecs were created from the mapping tables available
  at ftp.unicode.org and contain a few updates (e.g. the Mac OS
  encodings now include a mapping for the Apple logo)

- Added a few more codecs for Mac OS encodings

- Sped up some Unicode operations.

- A new AST parser implementation was completed. The abstract
  syntax tree is available for read-only (non-compile) access
  to Python code; an _ast module was added.

- SF bug #1167751: fix incorrect code being produced for generator expressions.
  The following code now raises a SyntaxError:  foo(a = i for i in range(10))

- SF Bug #976608: fix SystemError when mtime of an imported file is -1.

- SF Bug #887946: fix segfault when redirecting stdin from a directory.
  Provide a warning when a directory is passed on the command line.

- Fix segfault with invalid coding.

- SF bug #772896: unknown encoding results in MemoryError.

- All iterators now have a Boolean value of True.  Formerly, some iterators
  supported a __len__() method which evaluated to False when the iterator
  was empty.

- On 64-bit platforms, when __len__() returns a value that cannot be
  represented as a C int, raise OverflowError.

- test__locale is skipped on OS X < 10.4 (only partial locale support is
  present).

- SF bug #893549: parsing keyword arguments was broken with a few format
  codes.

- Changes donated by Elemental Security to make it work on AIX 5.3
  with IBM's 64-bit compiler (SF patch #1284289).  This also closes SF
  bug #105470: test_pwd fails on 64bit system (Opteron).

- Changes donated by Elemental Security to make it work on HP-UX 11 on
  Itanium2 with HP's 64-bit compiler (SF patch #1225212).

- Disallow keyword arguments for type constructors that don't use them
  (fixes bug #1119418).

- Forward UnicodeDecodeError into SyntaxError for source encoding errors.

- SF bug #900092: When tracing (e.g. for hotshot), restore 'return' events for
  exceptions that cause a function to exit.

- The implementation of set() and frozenset() was revised to use its
  own internal data structure.  Memory consumption is reduced by 1/3
  and there are modest speed-ups as well.  The API is unchanged.

- SF bug #1238681:  freed pointer is used in longobject.c:long_pow().

- SF bug #1229429: PyObject_CallMethod failed to decrement some
  reference counts in some error exit cases.

- SF bug #1185883:  Python's small-object memory allocator took over
  a block managed by the platform C library whenever a realloc specified
  a small new size.  However, there's no portable way to know then how
  much of the address space following the pointer is valid, so there's no
  portable way to copy data from the C-managed block into Python's
  small-object space without risking a memory fault.  Python's small-object
  realloc now leaves such blocks under the control of the platform C
  realloc.

- SF bug #1232517: An overflow error was not detected properly when
  attempting to convert a large float to an int in os.utime().

- SF bug #1224347: hex longs now print with lowercase letters just
  like their int counterparts.

- SF bug #1163563: the original fix for bug #1010677 ("thread Module
  Breaks PyGILState_Ensure()") broke badly in the case of multiple
  interpreter states; back out that fix and do a better job (see
  http://mail.python.org/pipermail/python-dev/2005-June/054258.html
  for a longer write-up of the problem).

- SF patch #1180995: marshal now uses a binary format by default when
  serializing floats.

- SF patch #1181301: on platforms that appear to use IEEE 754 floats,
  the routines that promise to produce IEEE 754 binary representations
  of floats now simply copy bytes around.

- bug #967182: disallow opening files with 'wU' or 'aU' as specified by PEP
  278.

- patch #1109424: int, long, float, complex, and unicode now check for the
  proper magic slot for type conversions when subclassed.  Previously the
  magic slot was ignored during conversion.  Semantics now match the way
  subclasses of str always behaved.  int/long/float, conversion of an instance
  to the base class has been moved to the proper nb_* magic slot and out of
  PyNumber_*().
  Thanks Walter D�rwald.

- Descriptors defined in C with a PyGetSetDef structure, where the setter is
  NULL, now raise an AttributeError when attempting to set or delete the
  attribute.  Previously a TypeError was raised, but this was inconsistent
  with the equivalent pure-Python implementation.

- It is now safe to call PyGILState_Release() before
  PyEval_InitThreads() (note that if there is reason to believe there
  are multiple threads around you still must call PyEval_InitThreads()
  before using the Python API; this fix is for extension modules that
  have no way of knowing if Python is multi-threaded yet).

- Typing Ctrl-C whilst raw_input() was waiting in a build with threads
  disabled caused a crash.

- Bug #1165306: instancemethod_new allowed the creation of a method
  with im_class == im_self == NULL, which caused a crash when called.

- Move exception finalisation later in the shutdown process - this
  fixes the crash seen in bug #1165761

- Added two new builtins, any() and all().

- Defining a class with empty parentheses is now allowed
  (e.g., ``class C(): pass`` is no longer a syntax error).
  Patch #1176012 added support to the 'parser' module and 'compiler' package
  (thanks to logistix for that added support).

- Patch #1115086: Support PY_LONGLONG in structmember.

- Bug #1155938: new style classes did not check that __init__() was
  returning None.

- Patch #802188: Report characters after line continuation character
  ('\') with a specific error message.

- Bug #723201: Raise a TypeError for passing bad objects to 'L' format.

- Bug #1124295: the __name__ attribute of file objects was
  inadvertently made inaccessible in restricted mode.

- Bug #1074011: closing sys.std{out,err} now causes a flush() and
  an ferror() call.

- min() and max() now support key= arguments with the same meaning as in
  list.sort().

- The peephole optimizer now performs simple constant folding in expressions:
      (2+3) --> (5).

- set and frozenset objects can now be marshalled.  SF #1098985.

- Bug #1077106: Poor argument checking could cause memory corruption
  in calls to os.read().

- The parser did not complain about future statements in illegal
  positions.  It once again reports a syntax error if a future
  statement occurs after anything other than a doc string.

- Change the %s format specifier for str objects so that it returns a
  unicode instance if the argument is not an instance of basestring and
  calling __str__ on the argument returns a unicode instance.

- Patch #1413181:  changed ``PyThreadState_Delete()`` to forget about the
  current thread state when the auto-GIL-state machinery knows about
  it (since the thread state is being deleted, continuing to remember it
  can't help, but can hurt if another thread happens to get created with
  the same thread id).

Extension Modules
-----------------

- Patch #1380952: fix SSL objects timing out on consecutive read()s

- Patch #1309579: wait3 and wait4 were added to the posix module.

- Patch #1231053: The audioop module now supports encoding/decoding of alaw.
  In addition, the existing ulaw code was updated.

- RFE #567972: Socket objects' family, type and proto properties are
  now exposed via new attributes.

- Everything under lib-old was removed.  This includes the following modules:
    Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep,
    lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse,
    util, whatsound, whrandom, zmod

- The following modules were removed:  regsub, reconvert, regex, regex_syntax.

- re and sre were swapped, so help(re) provides full help.  importing sre
  is deprecated.  The undocumented re.engine variable no longer exists.

- Bug #1448490: Fixed a bug that ISO-2022 codecs could not handle
  SS2 (single-shift 2) escape sequences correctly.

- The unicodedata module was updated to the 4.1 version of the Unicode
  database. The 3.2 version is still available as unicodedata.db_3_2_0
  for applications that require this specific version (such as IDNA).

- The timing module is no longer built by default.  It was deprecated
  in PEP 4 in Python 2.0 or earlier.

- Patch 1433928: Added a new type, defaultdict, to the collections module.
  This uses the new __missing__ hook behavior added to dict (see above).

- Bug #854823: socketmodule now builds on Sun platforms even when
  INET_ADDRSTRLEN is not defined.

- Patch #1393157: os.startfile() now has an optional argument to specify
  a "command verb" to invoke on the file.

- Bug #876637, prevent stack corruption when socket descriptor
  is larger than FD_SETSIZE.

- Patch #1407135, bug #1424041: harmonize mmap behavior of anonymous memory.
  mmap.mmap(-1, size) now returns anonymous memory in both Unix and Windows.
  mmap.mmap(0, size) should not be used on Windows for anonymous memory.

- Patch #1422385: The nis module now supports access to domains other
  than the system default domain.

- Use Win32 API to implement os.stat/fstat. As a result, subsecond timestamps
  are reported, the limit on path name lengths is removed, and stat reports
  WindowsError now (instead of OSError).

- Add bsddb.db.DBEnv.set_tx_timestamp allowing time based database recovery.

- Bug #1413192, fix seg fault in bsddb if a transaction was deleted
  before the env.

- Patch #1103116: Basic AF_NETLINK support.

- Bug #1402308, (possible) segfault when using mmap.mmap(-1, ...)

- Bug #1400822, _curses over{lay,write} doesn't work when passing 6 ints.
  Also fix ungetmouse() which did not accept arguments properly.
  The code now conforms to the documented signature.

- Bug #1400115, Fix segfault when calling curses.panel.userptr()
  without prior setting of the userptr.

- Fix 64-bit problems in bsddb.

- Patch #1365916: fix some unsafe 64-bit mmap methods.

- Bug #1290333: Added a workaround for cjkcodecs' _codecs_cn build
  problem on AIX.

- Bug #869197: os.setgroups rejects long integer arguments

- Bug #1346533, select.poll() doesn't raise an error if timeout > sys.maxint

- Bug #1344508, Fix UNIX mmap leaking file descriptors

- Patch #1338314, Bug #1336623: fix tarfile so it can extract
  REGTYPE directories from tarfiles written by old programs.

- Patch #1407992, fixes broken bsddb module db associate when using
  BerkeleyDB 3.3, 4.0 or 4.1.

- Get bsddb module to build with BerkeleyDB version 4.4

- Get bsddb module to build with BerkeleyDB version 3.2

- Patch #1309009, Fix segfault in pyexpat when the XML document is in latin_1,
  but Python incorrectly assumes it is in UTF-8 format

- Fix parse errors in the readline module when compiling without threads.

- Patch #1288833: Removed thread lock from socket.getaddrinfo on
  FreeBSD 5.3 and later versions which got thread-safe getaddrinfo(3).

- Patches #1298449 and #1298499: Add some missing checks for error
  returns in cStringIO.c.

- Patch #1297028: fix segfault if call type on MultibyteCodec,
  MultibyteStreamReader, or MultibyteStreamWriter

- Fix memory leak in posix.access().

- Patch #1213831: Fix typo in unicodedata._getcode.

- Bug #1007046: os.startfile() did not accept unicode strings encoded in
  the file system encoding.

- Patch #756021: Special-case socket.inet_aton('255.255.255.255') for
  platforms that don't have inet_aton().

- Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets.

- Bug #1191043: Fix bz2.BZ2File.(x)readlines for files containing one
  line without newlines.

- Bug #728515: mmap.resize() now resizes the file on Unix as it did
  on Windows.

- Patch #1180695: Add nanosecond stat resolution, and st_gen,
  st_birthtime for FreeBSD.

- Patch #1231069: The fcntl.ioctl function now uses the 'I' code for
  the request code argument, which results in more C-like behaviour
  for large or negative values.

- Bug #1234979: For the argument of thread.Lock.acquire, the Windows
  implementation treated all integer values except 1 as false.

- Bug #1194181: bz2.BZ2File didn't handle mode 'U' correctly.

- Patch #1212117: os.stat().st_flags is now accessible as a attribute
  if available on the platform.

- Patch #1103951: Expose O_SHLOCK and O_EXLOCK in the posix module if
  available on the platform.

- Bug #1166660: The readline module could segfault if hook functions
  were set in a different thread than that which called readline.

- collections.deque objects now support a remove() method.

- operator.itemgetter() and operator.attrgetter() now support retrieving
  multiple fields.  This provides direct support for sorting on multiple
  keys (primary, secondary, etc).

- os.access now supports Unicode path names on non-Win32 systems.

- Patches #925152, #1118602: Avoid reading after the end of the buffer
  in pyexpat.GetInputContext.

- Patches #749830, #1144555: allow UNIX mmap size to default to current
  file size.

- Added functional.partial().  See PEP309.

- Patch #1093585: raise a ValueError for negative history items in readline.
  {remove_history,replace_history}

- The spwd module has been added, allowing access to the shadow password
  database.

- stat_float_times is now True.

- array.array objects are now picklable.

- the cPickle module no longer accepts the deprecated None option in the
  args tuple returned by __reduce__().

- itertools.islice() now accepts None for the start and step arguments.
  This allows islice() to work more readily with slices:
      islice(s.start, s.stop, s.step)

- datetime.datetime() now has a strptime class method which can be used to
  create datetime object using a string and format.

- Patch #1117961: Replace the MD5 implementation from RSA Data Security Inc
  with the implementation from http://sourceforge.net/projects/libmd5-rfc/.

Library
-------

- Patch #1388073: Numerous __-prefixed attributes of unittest.TestCase have
  been renamed to have only a single underscore prefix.  This was done to
  make subclassing easier.

- PEP 338: new module runpy defines a run_module function to support
  executing modules which provide access to source code or a code object
  via the PEP 302 import mechanisms.

- The email module's parsedate_tz function now sets the daylight savings
  flag to -1 (unknown) since it can't tell from the date whether it should
  be set.

- Patch #624325: urlparse.urlparse() and urlparse.urlsplit() results
  now sport attributes that provide access to the parts of the result.

- Patch #1462498: sgmllib now handles entity and character references
  in attribute values.

- Added the sqlite3 package. This is based on pysqlite2.1.3, and provides
  a DB-API interface in the standard library. You'll need sqlite 3.0.8 or
  later to build this - if you have an earlier version, the C extension
  module will not be built.

- Bug #1460340: ``random.sample(dict)`` failed in various ways.  Dicts
  aren't officially supported here, and trying to use them will probably
  raise an exception some day.  But dicts have been allowed, and "mostly
  worked", so support for them won't go away without warning.

- Bug #1445068: getpass.getpass() can now be given an explicit stream
  argument to specify where to write the prompt.

- Patch #1462313, bug #1443328: the pickle modules now can handle classes
  that have __private names in their __slots__.

- Bug #1250170: mimetools now handles socket.gethostname() failures gracefully.

- patch #1457316: "setup.py upload" now supports --identity to select the
  key to be used for signing the uploaded code.

- Queue.Queue objects now support .task_done() and .join() methods
  to make it easier to monitor when daemon threads have completed
  processing all enqueued tasks.  Patch #1455676.

- popen2.Popen objects now preserve the command in a .cmd attribute.

- Added the ctypes ffi package.

- email 4.0 package now integrated.  This is largely the same as the email 3.0
  package that was included in Python 2.3, except that PEP 8 module names are
  now used (e.g. mail.message instead of email.Message).  The MIME classes
  have been moved to a subpackage (e.g. email.mime.text instead of
  email.MIMEText).  The old names are still supported for now.  Several
  deprecated Message methods have been removed and lots of bugs have been
  fixed.  More details can be found in the email package documentation.

- Patches #1436130/#1443155: codecs.lookup() now returns a CodecInfo object
  (a subclass of tuple) that provides incremental decoders and encoders
  (a way to use stateful codecs without the stream API). Python functions
  codecs.getincrementaldecoder() and codecs.getincrementalencoder() as well
  as C functions PyCodec_IncrementalEncoder() and PyCodec_IncrementalDecoder()
  have been added.

- Patch #1359365: Calling next() on a closed StringIO.String object raises
  a ValueError instead of a StopIteration now (like file and cString.String do).
  cStringIO.StringIO.isatty() will raise a ValueError now if close() has been
  called before (like file and StringIO.StringIO do).

- A regrtest option -w was added to re-run failed tests in verbose mode.

- Patch #1446372: quit and exit can now be called from the interactive
  interpreter to exit.

- The function get_count() has been added to the gc module, and gc.collect()
  grew an optional 'generation' argument.

- A library msilib to generate Windows Installer files, and a distutils
  command bdist_msi have been added.

- PEP 343: new module contextlib.py defines decorator @contextmanager
  and helpful context managers nested() and closing().

- The compiler package now supports future imports after the module docstring.

- Bug #1413790: zipfile now sanitizes absolute archive names that are
  not allowed by the specs.

- Patch #1215184: FileInput now can be given an opening hook which can
  be used to control how files are opened.

- Patch #1212287: fileinput.input() now has a mode parameter for
  specifying the file mode input files should be opened with.

- Patch #1215184: fileinput now has a fileno() function for getting the
  current file number.

- Patch #1349274: gettext.install() now optionally installs additional
  translation functions other than _() in the builtins namespace.

- Patch #1337756: fileinput now accepts Unicode filenames.

- Patch #1373643: The chunk module can now read chunks larger than
  two gigabytes.

- Patch #1417555: SimpleHTTPServer now returns Last-Modified headers.

- Bug #1430298: It is now possible to send a mail with an empty
  return address using smtplib.

- Bug #1432260: The names of lambda functions are now properly displayed
  in pydoc.

- Patch #1412872: zipfile now sets the creator system to 3 (Unix)
  unless the system is Win32.

- Patch #1349118: urllib now supports user:pass@ style proxy
  specifications, raises IOErrors when proxies for unsupported protocols
  are defined, and uses the https proxy on https redirections.

- Bug #902075: urllib2 now supports 'host:port' style proxy specifications.

- Bug #1407902: Add support for sftp:// URIs to urlparse.

- Bug #1371247: Update Windows locale identifiers in locale.py.

- Bug #1394565: SimpleHTTPServer now doesn't choke on query parameters
  any more.

- Bug #1403410: The warnings module now doesn't get confused
  when it can't find out the module name it generates a warning for.

- Patch #1177307: Added a new codec utf_8_sig for UTF-8 with a BOM signature.

- Patch #1157027: cookielib mishandles RFC 2109 cookies in Netscape mode

- Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise
  LoadError as documented, instead of IOError.  For compatibility,
  LoadError subclasses IOError.

- Added the hashlib module.  It provides secure hash functions for MD5 and
  SHA1, 224, 256, 384, and 512.  Note that recent developments make the
  historic MD5 and SHA1 unsuitable for cryptographic-strength applications.
  In <http://mail.python.org/pipermail/python-dev/2005-December/058850.html>
  Ronald L. Rivest offered this advice for Python:

      "The consensus of researchers in this area (at least as
      expressed at the NIST Hash Function Workshop 10/31/05),
      is that SHA-256 is a good choice for the time being, but
      that research should continue, and other alternatives may
      arise from this research.  The larger SHA's also seem OK."

- Added a subset of Fredrik Lundh's ElementTree package.  Available
  modules are xml.etree.ElementTree, xml.etree.ElementPath, and
  xml.etree.ElementInclude, from ElementTree 1.2.6.

- Patch #1162825: Support non-ASCII characters in IDLE window titles.

- Bug #1365984: urllib now opens "data:" URLs again.

- Patch #1314396: prevent deadlock for threading.Thread.join() when an exception
  is raised within the method itself on a previous call (e.g., passing in an
  illegal argument)

- Bug #1340337: change time.strptime() to always return ValueError when there
  is an error in the format string.

- Patch #754022: Greatly enhanced webbrowser.py (by Oleg Broytmann).

- Bug #729103: pydoc.py: Fix docother() method to accept additional
  "parent" argument.

- Patch #1300515: xdrlib.py: Fix pack_fstring() to really use null bytes
  for padding.

- Bug #1296004: httplib.py: Limit maximal amount of data read from the
  socket to avoid a MemoryError on Windows.

- Patch #1166948: locale.py: Prefer LC_ALL, LC_CTYPE and LANG over LANGUAGE
  to get the correct encoding.

- Patch #1166938: locale.py: Parse LANGUAGE as a colon separated list of
  languages.

- Patch #1268314: Cache lines in StreamReader.readlines for performance.

- Bug #1290505: Fix clearing the regex cache for time.strptime().

- Bug #1167128: Fix size of a symlink in a tarfile to be 0.

- Patch #810023: Fix off-by-one bug in urllib.urlretrieve reporthook
  functionality.

- Bug #1163178: Make IDNA return an empty string when the input is empty.

- Patch #848017: Make Cookie more RFC-compliant. Use CRLF as default output
  separator and do not output trailing semicolon.

- Patch #1062060: urllib.urlretrieve() now raises a new exception, named
  ContentTooShortException, when the actually downloaded size does not
  match the Content-Length header.

- Bug #1121494: distutils.dir_utils.mkpath now accepts Unicode strings.

- Bug #1178484: Return complete lines from codec stream readers
  even if there is an exception in later lines, resulting in
  correct line numbers for decoding errors in source code.

- Bug #1192315: Disallow negative arguments to clear() in pdb.

- Patch #827386: Support absolute source paths in msvccompiler.py.

- Patch #1105730: Apply the new implementation of commonprefix in posixpath
  to ntpath, macpath, os2emxpath and riscospath.

- Fix a problem in Tkinter introduced by SF patch #869468: delete bogus
  __hasattr__ and __delattr__ methods on class Tk that were breaking
  Tkdnd.

- Bug #1015140: disambiguated the term "article id" in nntplib docs and
  docstrings to either "article number" or "message id".

- Bug #1238170: threading.Thread.__init__ no longer has "kwargs={}" as a
  parameter, but uses the usual "kwargs=None".

- textwrap now processes text chunks at O(n) speed instead of O(n**2).
  Patch #1209527 (Contributed by Connelly).

- urllib2 has now an attribute 'httpresponses' mapping from HTTP status code
  to W3C name (404 -> 'Not Found'). RFE #1216944.

- Bug #1177468: Don't cache the /dev/urandom file descriptor for os.urandom,
  as this can cause problems with apps closing all file descriptors.

- Bug #839151: Fix an attempt to access sys.argv in the warnings module;
  it can be missing in embedded interpreters

- Bug #1155638: Fix a bug which affected HTTP 0.9 responses in httplib.

- Bug #1100201: Cross-site scripting was possible on BaseHTTPServer via
  error messages.

- Bug #1108948: Cookie.py produced invalid JavaScript code.

- The tokenize module now detects and reports indentation errors.
  Bug #1224621.

- The tokenize module has a new untokenize() function to support a full
  roundtrip from lexed tokens back to Python source code.  In addition,
  the generate_tokens() function now accepts a callable argument that
  terminates by raising StopIteration.

- Bug #1196315: fix weakref.WeakValueDictionary constructor.

- Bug #1213894: os.path.realpath didn't resolve symlinks that were the first
  component of the path.

- Patch #1120353: The xmlrpclib module provides better, more transparent,
  support for datetime.{datetime,date,time} objects.  With use_datetime set
  to True, applications shouldn't have to fiddle with the DateTime wrapper
  class at all.

- distutils.commands.upload was added to support uploading distribution
  files to PyPI.

- distutils.commands.register now encodes the data as UTF-8 before posting
  them to PyPI.

- decimal operator and comparison methods now return NotImplemented
  instead of raising a TypeError when interacting with other types.  This
  allows other classes to implement __radd__ style methods and have them
  work as expected.

- Bug #1163325:  Decimal infinities failed to hash.  Attempting to
  hash a NaN raised an InvalidOperation instead of a TypeError.

- Patch #918101: Add tarfile open mode r|* for auto-detection of the
  stream compression; add, for symmetry reasons, r:* as a synonym of r.

- Patch #1043890: Add extractall method to tarfile.

- Patch #1075887: Don't require MSVC in distutils if there is nothing
  to build.

- Patch #1103407: Properly deal with tarfile iterators when untarring
  symbolic links on Windows.

- Patch #645894: Use getrusage for computing the time consumption in
  profile.py if available.

- Patch #1046831: Use get_python_version where appropriate in sysconfig.py.

- Patch #1117454: Remove code to special-case cookies without values
  in LWPCookieJar.

- Patch #1117339: Add cookielib special name tests.

- Patch #1112812: Make bsddb/__init__.py more friendly for modulefinder.

- Patch #1110248: SYNC_FLUSH the zlib buffer for GZipFile.flush.

- Patch #1107973: Allow to iterate over the lines of a tarfile.ExFileObject.

- Patch #1104111: Alter setup.py --help and --help-commands.

- Patch #1121234: Properly cleanup _exit and tkerror commands.

- Patch #1049151: xdrlib now unpacks booleans as True or False.

- Fixed bug in a NameError bug in cookielib.  Patch #1116583.

- Applied a security fix to SimpleXMLRPCserver (PSF-2005-001).  This
  disables recursive traversal through instance attributes, which can
  be exploited in various ways.

- Bug #1222790: in SimpleXMLRPCServer, set the reuse-address and close-on-exec
  flags on the HTTP listening socket.

- Bug #792570: SimpleXMLRPCServer had problems if the request grew too large.
  Fixed by reading the HTTP body in chunks instead of one big socket.read().

- Patches #893642, #1039083: add allow_none, encoding arguments to
  constructors of SimpleXMLRPCServer and CGIXMLRPCRequestHandler.

- Bug #1110478: Revert os.environ.update to do putenv again.

- Bug #1103844: fix distutils.install.dump_dirs() with negated options.

- os.{SEEK_SET, SEEK_CUR, SEEK_END} have been added for convenience.

- Enhancements to the csv module:

  + Dialects are now validated by the underlying C code, better
    reflecting its capabilities, and improving its compliance with
    PEP 305.
  + Dialect parameter parsing has been re-implemented to improve error
    reporting.
  + quotechar=None and quoting=QUOTE_NONE now work the way PEP 305
    dictates.
  + the parser now removes the escapechar prefix from escaped characters.
  + when quoting=QUOTE_NONNUMERIC, the writer now tests for numeric
    types, rather than any object that can be represented as a numeric.
  + when quoting=QUOTE_NONNUMERIC, the reader now casts unquoted fields
    to floats.
  + reader now allows \r characters to be quoted (previously it only allowed
    \n to be quoted).
  + writer doublequote handling improved.
  + Dialect classes passed to the module are no longer instantiated by
    the module before being parsed (the former validation scheme required
    this, but the mechanism was unreliable).
  + The dialect registry now contains instances of the internal
    C-coded dialect type, rather than references to python objects.
  + the internal c-coded dialect type is now immutable.
  + register_dialect now accepts the same keyword dialect specifications
    as the reader and writer, allowing the user to register dialects
    without first creating a dialect class.
  + a configurable limit to the size of parsed fields has been added -
    previously, an unmatched quote character could result in the entire
    file being read into the field buffer before an error was reported.
  + A new module method csv.field_size_limit() has been added that sets
    the parser field size limit (returning the former limit). The initial
    limit is 128kB.
  + A line_num attribute has been added to the reader object, which tracks
    the number of lines read from the source iterator. This is not
    the same as the number of records returned, as records can span
    multiple lines.
  + reader and writer objects were not being registered with the cyclic-GC.
    This has been fixed.

- _DummyThread objects in the threading module now delete self.__block that is
  inherited from _Thread since it uses up a lock allocated by 'thread'.  The
  lock primitives tend to be limited in number and thus should not be wasted on
  a _DummyThread object.  Fixes bug #1089632.

- The imghdr module now detects Exif files.

- StringIO.truncate() now correctly adjusts the size attribute.
  (Bug #951915).

- locale.py now uses an updated locale alias table (built using
  Tools/i18n/makelocalealias.py, a tool to parse the X11 locale
  alias file); the encoding lookup was enhanced to use Python's
  encoding alias table.

- moved deprecated modules to Lib/lib-old:  whrandom, tzparse, statcache.

- the pickle module no longer accepts the deprecated None option in the
  args tuple returned by __reduce__().

- optparse now optionally imports gettext.  This allows its use in setup.py.

- the pickle module no longer uses the deprecated bin parameter.

- the shelve module no longer uses the deprecated binary parameter.

- the pstats module no longer uses the deprecated ignore() method.

- the filecmp module no longer uses the deprecated use_statcache argument.

- unittest.TestCase.run() and unittest.TestSuite.run() can now be successfully
  extended or overridden by subclasses.  Formerly, the subclassed method would
  be ignored by the rest of the module.  (Bug #1078905).

- heapq.nsmallest() and heapq.nlargest() now support key= arguments with
  the same meaning as in list.sort().

- Bug #1076985: ``codecs.StreamReader.readline()`` now calls ``read()`` only
  once when a size argument is given. This prevents a buffer overflow in the
  tokenizer with very long source lines.

- Bug #1083110: ``zlib.decompress.flush()`` would segfault if called
  immediately after creating the object, without any intervening
  ``.decompress()`` calls.

- The reconvert.quote function can now emit triple-quoted strings.  The
  reconvert module now has some simple documentation.

- ``UserString.MutableString`` now supports negative indices in
  ``__setitem__`` and ``__delitem__``

- Bug #1149508: ``textwrap`` now handles hyphenated numbers (eg. "2004-03-05")
  correctly.

- Partial fixes for SF bugs #1163244 and #1175396: If a chunk read by
  ``codecs.StreamReader.readline()`` has a trailing "\r", read one more
  character even if the user has passed a size parameter to get a proper
  line ending. Remove the special handling of a "\r\n" that has been split
  between two lines.

- Bug #1251300: On UCS-4 builds the "unicode-internal" codec will now complain
  about illegal code points. The codec now supports PEP 293 style error
  handlers.

- Bug #1235646: ``codecs.StreamRecoder.next()`` now reencodes the data it reads
  from the input stream, so that the output is a byte string in the correct
  encoding instead of a unicode string.

- Bug #1202493: Fixing SRE parser to handle '{}' as perl does, rather than
  considering it exactly like a '*'.

- Bug #1245379: Add "unicode-1-1-utf-7" as an alias for "utf-7" to
  ``encodings.aliases``.

- ` uu.encode()`` and ``uu.decode()`` now support unicode filenames.

- Patch #1413711: Certain patterns of differences were making difflib
  touch the recursion limit.

- Bug #947906: An object oriented interface has been added to the calendar
  module. It's possible to generate HTML calendar now and the module can be
  called as a script (e.g. via ``python -mcalendar``). Localized month and
  weekday names can be ouput (even if an exotic encoding is used) using
  special classes that use unicode.

Build
-----

- Fix test_float, test_long, and test_struct failures on Tru64 with gcc
  by using -mieee gcc option.

- Patch #1432345: Make python compile on DragonFly.

- Build support for Win64-AMD64 was added.

- Patch #1428494: Prefer linking against ncursesw over ncurses library.

- Patch #881820: look for openpty and forkpty also in libbsd.

- The sources of zlib are now part of the Python distribution (zlib 1.2.3).
  The zlib module is now built in on Windows.

- Use -xcode=pic32 for CCSHARED on Solaris with SunPro.

- Bug #1189330: configure did not correctly determine the necessary
  value of LINKCC if python was built with GCC 4.0.

- Upgrade Windows build to zlib 1.2.3 which eliminates a potential security
  vulnerability in zlib 1.2.1 and 1.2.2.

- EXTRA_CFLAGS has been introduced as an environment variable to hold compiler
  flags that change binary compatibility.  Changes were also made to
  distutils.sysconfig to also use the environment variable when used during
  compilation of the interpreter and of C extensions through distutils.

- SF patch 1171735: Darwin 8's headers are anal about POSIX compliance,
  and linking has changed (prebinding is now deprecated, and libcc_dynamic
  no longer exists). This configure patch makes things right.

- Bug #1158607: Build with --disable-unicode again.

- spwdmodule.c is built only if either HAVE_GETSPNAM or HAVE_HAVE_GETSPENT is
  defined.  Discovered as a result of not being able to build on OS X.

- setup.py now uses the directories specified in LDFLAGS using the -L option
  and in CPPFLAGS using the -I option for adding library and include
  directories, respectively, for compiling extension modules against.  This has
  led to the core being compiled using the values in CPPFLAGS.  It also removes
  the need for the special-casing of both DarwinPorts and Fink for darwin since
  the proper directories can be specified in LDFLAGS (``-L/sw/lib`` for Fink,
  ``-L/opt/local/lib`` for DarwinPorts) and CPPFLAGS (``-I/sw/include`` for
  Fink, ``-I/opt/local/include`` for DarwinPorts).

- Test in configure.in that checks for tzset no longer dependent on tm->tm_zone
  to exist in the struct (not required by either ISO C nor the UNIX 2 spec).
  Tests for sanity in tzname when HAVE_TZNAME defined were also defined.
  Closes bug #1096244.  Thanks Gregory Bond.

C API
-----

- ``PyMem_{Del, DEL}`` and ``PyMem_{Free, FREE}`` no longer map to
  ``PyObject_{Free, FREE}``.  They map to the system ``free()`` now.  If memory
  is obtained via the ``PyObject_`` family, it must be released via the
  ``PyObject_`` family, and likewise for the ``PyMem_`` family.  This has
  always been officially true, but when Python's small-object allocator was
  introduced, an attempt was made to cater to a few extension modules
  discovered at the time that obtained memory via ``PyObject_New`` but
  released it via ``PyMem_DEL``.  It's years later, and if such code still
  exists it will fail now (probably with segfaults, but calling wrong
  low-level memory management functions can yield many symptoms).

- Added a C API for set and frozenset objects.

- Removed PyRange_New().

- Patch #1313939: PyUnicode_DecodeCharmap() accepts a unicode string as the
  mapping argument now. This string is used as a mapping table. Byte values
  greater than the length of the string and 0xFFFE are treated as undefined
  mappings.


Tests
-----

- In test_os, st_?time is now truncated before comparing it with ST_?TIME.

- Patch #1276356: New resource "urlfetch" is implemented.  This enables
  even impatient people to run tests that require remote files.


Documentation
-------------

- Bug #1402224: Add warning to dl docs about crashes.

- Bug #1396471: Document that Windows' ftell() can return invalid
  values for text files with UNIX-style line endings.

- Bug #1274828: Document os.path.splitunc().

- Bug #1190204: Clarify which directories are searched by site.py.

- Bug #1193849: Clarify os.path.expanduser() documentation.

- Bug #1243192: re.UNICODE and re.LOCALE affect \d, \D, \s and \S.

- Bug #755617: Document the effects of os.chown() on Windows.

- Patch #1180012: The documentation for modulefinder is now in the library reference.

- Patch #1213031: Document that os.chown() accepts argument values of -1.

- Bug #1190563: Document os.waitpid() return value with WNOHANG flag.

- Bug #1175022: Correct the example code for property().

- Document the IterableUserDict class in the UserDict module.
  Closes bug #1166582.

- Remove all latent references for "Macintosh" that referred to semantics for
  Mac OS 9 and change to reflect the state for OS X.
  Closes patch #1095802.  Thanks Jack Jansen.

Mac
---


New platforms
-------------

- FreeBSD 7 support is added.


Tools/Demos
-----------

- Created Misc/Vim/vim_syntax.py to auto-generate a python.vim file in that
  directory for syntax highlighting in Vim.  Vim directory was added and placed
  vimrc to it (was previous up a level).

- Added two new files to Tools/scripts: pysource.py, which recursively
  finds Python source files, and findnocoding.py, which finds Python
  source files that need an encoding declaration.
  Patch #784089, credits to Oleg Broytmann.

- Bug #1072853: pindent.py used an uninitialized variable.

- Patch #1177597: Correct Complex.__init__.

- Fixed a display glitch in Pynche, which could cause the right arrow to
  wiggle over by a pixel.


What's New in Python 2.4 final?
===============================

*Release date: 30-NOV-2004*

Core and builtins
-----------------

- Bug 875692: Improve signal handling, especially when using threads, by
  forcing an early re-execution of PyEval_EvalFrame() "periodic" code when
  things_to_do is not cleared by Py_MakePendingCalls().


What's New in Python 2.4 (release candidate 1)
==============================================

*Release date: 18-NOV-2004*

Core and builtins
-----------------

- Bug 1061968:  Fixes in 2.4a3 to address thread bug 1010677 reintroduced
  the years-old thread shutdown race bug 225673.  Numeric history lesson
  aside, all bugs in all three reports are fixed now.


Library
-------

- Bug 1052242: If exceptions are raised by an atexit handler function an
  attempt is made to execute the remaining handlers.  The last exception
  raised is re-raised.

- ``doctest``'s new support for adding ``pdb.set_trace()`` calls to
  doctests was broken in a dramatic but shallow way.  Fixed.

- Bug 1065388:  ``calendar``'s ``day_name``, ``day_abbr``, ``month_name``,
  and ``month_abbr`` attributes emulate sequences of locale-correct
  spellings of month and day names.  Because the locale can change at
  any time, the correct spelling is recomputed whenever one of these is
  indexed.  In the worst case, the index may be a slice object, so these
  recomputed every day or month name each time they were indexed.  This is
  much slower than necessary in the usual case, when the index is just an
  integer.  In that case, only the single spelling needed is recomputed
  now; and, when the index is a slice object, only the spellings needed
  by the slice are recomputed now.

- Patch 1061679: Added ``__all__`` to pickletools.py.

Build
-----

- Bug 1034277 / Patch 1035255: Remove compilation of core against CoreServices
  and CoreFoundation on OS X.  Involved removing PyMac_GetAppletScriptFile()
  which has no known users.  Thanks Bob Ippolito.

C API
-----

- The PyRange_New() function is deprecated.


What's New in Python 2.4 beta 2?
================================

*Release date: 03-NOV-2004*

License
-------

The Python Software Foundation changed the license under which Python
is released, to remove Python version numbers.  There were no other
changes to the license.  So, for example, wherever the license for
Python 2.3 said "Python 2.3", the new license says "Python".  The
intent is to make it possible to refer to the PSF license in a more
durable way.  For example, some people say they're confused by that
the Open Source Initiative's entry for the Python Software Foundation
License::

      http://www.opensource.org/licenses/PythonSoftFoundation.php

says "Python 2.1.1" all over it, wondering whether it applies only
to Python 2.1.1.

The official name of the new license is the Python Software Foundation
License Version 2.

Core and builtins
-----------------

- Bug #1055820 Cyclic garbage collection was not protecting against that
  calling a live weakref to a piece of cyclic trash could resurrect an
  insane mutation of the trash if any Python code ran during gc (via
  running a dead object's __del__ method, running another callback on a
  weakref to a dead object, or via any Python code run in any other thread
  that managed to obtain the GIL while a __del__ or callback was running
  in the thread doing gc).  The most likely symptom was "impossible"
  ``AttributeError`` exceptions, appearing seemingly at random, on weakly
  referenced objects.  The cure was to clear all weakrefs to unreachable
  objects before allowing any callbacks to run.

- Bug #1054139 _PyString_Resize() now invalidates its cached hash value.

Extension Modules
-----------------

- Bug #1048870:  the compiler now generates distinct code objects for
  functions with identical bodies.  This was producing confusing
  traceback messages which pointed to the function where the code
  object was first defined rather than the function being executed.

Library
-------

- Patch #1056967 changes the semantics of Template.safe_substitute() so that
  no ValueError is raised on an 'invalid' match group.  Now the delimiter is
  returned.

- Bug #1052503 pdb.runcall() was not passing along keyword arguments.

- Bug #902037: XML.sax.saxutils.prepare_input_source() now combines relative
  paths with a base path before checking os.path.isfile().

- The whichdb module can now be run from the command line.

- Bug #1045381: time.strptime() can now infer the date using %U or %W (week of
  the year) when the day of the week and year are also specified.

- Bug #1048816: fix bug in Ctrl-K at start of line in curses.textpad.Textbox

- Bug #1017553: fix bug in tarfile.filemode()

- Patch #737473: fix bug that old source code is shown in tracebacks even if
  the source code is updated and reloaded.

Build
-----

- Patch #1044395: --enable-shared is allowed in FreeBSD also.

What's New in Python 2.4 beta 1?
================================

*Release date: 15-OCT-2004*

Core and builtins
-----------------

- Patch #975056: Restartable signals were not correctly disabled on
  BSD systems. Consistently use PyOS_setsig() instead of signal().

- The internal portable implementation of thread-local storage (TLS), used
  by the ``PyGILState_Ensure()``/``PyGILState_Release()`` API, was not
  thread-correct.  This could lead to a variety of problems, up to and
  including segfaults.  See bug 1041645 for an example.

- Added a command line option, -m module, which searches sys.path for the
  module and then runs it.  (Contributed by Nick Coghlan.)

- The bytecode optimizer now folds tuples of constants into a single
  constant.

- SF bug #513866:  Float/long comparison anomaly.  Prior to 2.4b1, when
  an integer was compared to a float, the integer was coerced to a float.
  That could yield spurious overflow errors (if the integer was very
  large), and to anomalies such as
  ``long(1e200)+1 == 1e200 == long(1e200)-1``.  Coercion to float is no
  longer performed, and cases like ``long(1e200)-1 < 1e200``,
  ``long(1e200)+1 > 1e200`` and ``(1 << 20000) > 1e200`` are computed
  correctly now.

Extension modules
-----------------

- ``collections.deque`` objects didn't play quite right with garbage
  collection, which could lead to a segfault in a release build, or
  an assert failure in a debug build.  Also, added overflow checks,
  better detection of mutation during iteration, and shielded deque
  comparisons from unusual subclass overrides of the __iter__() method.

Library
-------

- Patch 1046644: distutils build_ext grew two new options - --swig for
  specifying the swig executable to use, and --swig-opts to specify
  options to pass to swig. --swig-opts="-c++" is the new way to spell
  --swig-cpp.

- Patch 983206: distutils now obeys environment variable LDSHARED, if
  it is set.

- Added Peter Astrand's subprocess.py module.  See PEP 324 for details.

- time.strptime() now properly escapes timezones and all other locale-specific
  strings for regex-specific symbols.  Was breaking under Japanese Windows when
  the timezone was specified as "Tokyo (standard time)".
  Closes bug #1039270.

- Updates for the email package:

  + email.Utils.formatdate() grew a 'usegmt' argument for HTTP support.
  + All deprecated APIs that in email 2.x issued warnings have been removed:
    _encoder argument to the MIMEText constructor, Message.add_payload(),
    Utils.dump_address_pair(), Utils.decode(), Utils.encode()
  + New deprecations: Generator.__call__(), Message.get_type(),
    Message.get_main_type(), Message.get_subtype(), the 'strict' argument to
    the Parser constructor.  These will be removed in email 3.1.
  + Support for Python earlier than 2.3 has been removed (see PEP 291).
  + All defect classes have been renamed to end in 'Defect'.
  + Some FeedParser fixes; also a MultipartInvariantViolationDefect will be
    added to messages that claim to be multipart but really aren't.
  + Updates to documentation.

- re's findall() and finditer() functions now take an optional flags argument
  just like the compile(), search(), and match() functions.  Also, documented
  the previously existing start and stop parameters for the findall() and
  finditer() methods of regular expression objects.

- rfc822 Messages now support iterating over the headers.

- The (undocumented) tarfile.Tarfile.membernames has been removed;
  applications should use the getmember function.

- httplib now offers symbolic constants for the HTTP status codes.

- SF bug #1028306:  Trying to compare a ``datetime.date`` to a
  ``datetime.datetime`` mistakenly compared only the year, month and day.
  Now it acts like a mixed-type comparison:  ``False`` for ``==``,
  ``True`` for ``!=``, and raises ``TypeError`` for other comparison
  operators.  Because datetime is a subclass of date, comparing only the
  base class (date) members can still be done, if that's desired, by
  forcing using of the approprate date method; e.g.,
  ``a_date.__eq__(a_datetime)`` is true if and only if the year, month
  and day members of ``a_date`` and ``a_datetime`` are equal.

- bdist_rpm now supports command line options --force-arch,
  {pre,post}-install,  {pre,post}-uninstall, and
  {prep,build,install,clean,verify}-script.

- SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support
  decoding incomplete input (when the input stream is temporarily exhausted).
  ``codecs.StreamReader`` now implements buffering, which enables proper
  readline support for the UTF-16 decoders. ``codecs.StreamReader.read()``
  has a new argument ``chars`` which specifies the number of characters to
  return. ``codecs.StreamReader.readline()`` and
  ``codecs.StreamReader.readlines()`` have a new argument ``keepends``.
  Trailing "\n"s will be stripped from the lines if ``keepends`` is false.

- The documentation for doctest is greatly expanded, and now covers all
  the new public features (of which there are many).

- ``doctest.master`` was put back in, and ``doctest.testmod()`` once again
  updates it.  This isn't good, because every ``testmod()`` call
  contributes to bloating the "hidden" state of ``doctest.master``, but
  some old code apparently relies on it.  For now, all we can do is
  encourage people to stitch doctests together via doctest's unittest
  integration features instead.

- httplib now handles ipv6 address/port pairs.

- SF bug #1017864: ConfigParser now correctly handles default keys,
  processing them with ``ConfigParser.optionxform`` when supplied,
  consistent with the handling of config file entries and runtime-set
  options.

- SF bug #997050: Document, test, & check for non-string values in
  ConfigParser.  Moved the new string-only restriction added in
  rev. 1.65 to the SafeConfigParser class, leaving existing
  ConfigParser & RawConfigParser behavior alone, and documented the
  conditions under which non-string values work.

Build
-----

- Building on darwin now includes /opt/local/include and /opt/local/lib for
  building extension modules.  This is so as to include software installed as
  a DarwinPorts port <http://darwinports.opendarwin.org/>

- pyport.h now defines a Py_IS_NAN macro.  It works as-is when the
  platform C computes true for ``x != x`` if and only if X is a NaN.
  Other platforms can override the default definition with a platform-
  specific spelling in that platform's pyconfig.h.  You can also override
  pyport.h's default Py_IS_INFINITY definition now.

C API
-----

- SF patch 1044089:  New function ``PyEval_ThreadsInitialized()`` returns
  non-zero if PyEval_InitThreads() has been called.

- The undocumented and unused extern int ``_PyThread_Started`` was removed.

- The C API calls ``PyInterpreterState_New()`` and ``PyThreadState_New()``
  are two of the very few advertised as being safe to call without holding
  the GIL.  However, this wasn't true in a debug build, as bug 1041645
  demonstrated.  In a debug build, Python redirects the ``PyMem`` family
  of calls to Python's small-object allocator, to get the benefit of
  its extra debugging capabilities.  But Python's small-object allocator
  isn't threadsafe, relying on the GIL to avoid the expense of doing its
  own locking.  ``PyInterpreterState_New()`` and ``PyThreadState_New()``
  call the platform ``malloc()`` directly now, regardless of build type.

- PyLong_AsUnsignedLong[Mask] now support int objects as well.

- SF patch #998993: ``PyUnicode_DecodeUTF8Stateful`` and
  ``PyUnicode_DecodeUTF16Stateful`` have been added, which implement stateful
  decoding.

Tests
-----

- test__locale ported to unittest

Mac
---

- ``plistlib`` now supports non-dict root objects.  There is also a new
  interface for reading and writing plist files: ``readPlist(pathOrFile)``
  and ``writePlist(rootObject, pathOrFile)``

Tools/Demos
-----------

- The text file comparison scripts ``ndiff.py`` and ``diff.py`` now
  read the input files in universal-newline mode.  This spares them
  from consuming a great deal of time to deduce the useless result that,
  e.g., a file with Windows line ends and a file with Linux line ends
  have no lines in common.


What's New in Python 2.4 alpha 3?
=================================

*Release date: 02-SEP-2004*

Core and builtins
-----------------

- SF patch #1007189: ``from ... import ...`` statements now allow the name
  list to be surrounded by parentheses.

- Some speedups for long arithmetic, thanks to Trevor Perrin.  Gradeschool
  multiplication was sped a little by optimizing the C code.  Gradeschool
  squaring was sped by about a factor of 2, by exploiting that about half
  the digit products are duplicates in a square.  Because exponentiation
  uses squaring often, this also speeds long power.  For example, the time
  to compute 17**1000000 dropped from about 14 seconds to 9 on my box due
  to this much.  The cutoff for Karatsuba multiplication was raised,
  since gradeschool multiplication got quicker, and the cutoff was
  aggressively small regardless.  The exponentiation algorithm was switched
  from right-to-left to left-to-right, which is more efficient for small
  bases.  In addition, if the exponent is large, the algorithm now does
  5 bits (instead of 1 bit) at a time.  That cut the time to compute
  17**1000000 on my box in half again, down to about 4.5 seconds.

- OverflowWarning is no longer generated.  PEP 237 scheduled this to
  occur in Python 2.3, but since OverflowWarning was disabled by default,
  nobody realized it was still being generated.  On the chance that user
  code is still using them, the Python builtin OverflowWarning, and
  corresponding C API PyExc_OverflowWarning, will exist until Python 2.5.

- Py_InitializeEx has been added.

- Fix the order of application of decorators.  The proper order is bottom-up;
  the first decorator listed is the last one called.

- SF patch #1005778.  Fix a seg fault if the list size changed while
  calling list.index().  This could happen if a rich comparison function
  modified the list.

- The ``func_name`` (a.k.a. ``__name__``) attribute of user-defined
  functions is now writable.

- code_new (a.k.a new.code()) now checks its arguments sufficiently
  carefully that passing them on to PyCode_New() won't trigger calls
  to Py_FatalError() or PyErr_BadInternalCall().  It is still the case
  that the returned code object might be entirely insane.

- Subclasses of string can no longer be interned.  The semantics of
  interning were not clear here -- a subclass could be mutable, for
  example -- and had bugs.  Explicitly interning a subclass of string
  via intern() will raise a TypeError.  Internal operations that attempt
  to intern a string subclass will have no effect.

- Bug 1003935:  xrange() could report bogus OverflowErrors.  Documented
  what xrange() intends, and repaired tests accordingly.

Extension modules
-----------------

- difflib now supports HTML side-by-side diff.

- os.urandom has been added for systems that support sources of random
  data.

- Patch 1012740:  truncate() on a writable cStringIO now resets the
  position to the end of the stream.  This is consistent with the original
  StringIO module and avoids inadvertently resurrecting data that was
  supposed to have been truncated away.

- Added socket.socketpair().

- Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber
  members to xml.parsers.expat.XMLParser object.

- The mpz, rotor, and xreadlines modules, all deprecated in earlier
  versions of Python, have now been removed.

Library
-------

- Patch #934356: if a module defines __all__, believe that rather than using
  heuristics for filtering out imported names.

- Patch #941486: added os.path.lexists(), which returns True for broken
  symlinks, unlike os.path.exists().

- the random module now uses os.urandom() for seeding if it is available.
  Added a new generator based on os.urandom().

- difflib and diff.py can now generate HTML.

- bdist_rpm now includes version and release in the BuildRoot, and
  replaces - by ``_`` in version and release.

- distutils build/build_scripts now has an -e option to specify the
  path to the Python interpreter for installed scripts.

- PEP 292 classes Template and SafeTemplate are added to the string module.

- tarfile now generates GNU tar files by default.

- HTTPResponse has now a getheaders method.

- Patch #1006219: let inspect.getsource handle '@' decorators. Thanks Simon
  Percivall.

- logging.handlers.SMTPHandler.date_time has been removed;
  the class now uses email.Utils.formatdate to generate the time stamp.

- A new function tkFont.nametofont was added to return an existing
  font. The Font class constructor now has an additional exists argument
  which, if True, requests to return/configure an existing font, rather
  than creating a new one.

- Updated the decimal package's min() and max() methods to match the
  latest revision of the General Decimal Arithmetic Specification.
  Quiet NaNs are ignored and equal values are sorted based on sign
  and exponent.

- The decimal package's Context.copy() method now returns deep copies.

- Deprecated sys.exitfunc in favor of the atexit module.  The sys.exitfunc
  attribute will be kept around for backwards compatibility and atexit
  will just become the one preferred way to do it.

- patch #675551: Add get_history_item and replace_history_item functions
  to the readline module.

- bug #989672: pdb.doc and the help messages for the help_d and help_u methods
  of the pdb.Pdb class gives have been corrected. d(own) goes to a newer
  frame, u(p) to an older frame, not the other way around.

- bug #990669: os.path.realpath() will resolve symlinks before normalizing the
  path, as normalizing the path may alter the meaning of the path if it
  contains symlinks.

- bug #851123: shutil.copyfile will raise an exception when trying to copy a
  file onto a link to itself. Thanks Gregory Ball.

- bug #570300: Fix inspect to resolve file locations using os.path.realpath()
  so as to properly list all functions in a module when the module itself is
  reached through a symlink.  Thanks Johannes Gijsbers.

- doctest refactoring continued.  See the docs for details.  As part of
  this effort, some old and little- (never?) used features are now
  deprecated:  the Tester class, the module is_private() function, and the
  isprivate argument to testmod().  The Tester class supplied a feeble
  "by hand" way to combine multiple doctests, if you knew exactly what
  you were doing.  The newer doctest features for unittest integration
  already did a better job of that, are stronger now than ever, and the
  new DocTestRunner class is a saner foundation if you want to do it by
  hand.  The "private name" filtering gimmick was a mistake from the
  start, and testmod() changed long ago to ignore it by default.  If
  you want to filter out tests, the new DocTestFinder class can be used
  to return a list of all doctests, and you can filter that list by
  any computable criteria before passing it to a DocTestRunner instance.

- Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)).

Tools/Demos
-----------

- IDLE's shortcut keys for windows are now case insensitive so that
  Control-V works the same as Control-v.

- pygettext.py: Generate POT-Creation-Date header in ISO format.

Build
-----

- Backward incompatibility:  longintrepr.h now triggers a compile-time
  error if SHIFT (the number of bits in a Python long "digit") isn't
  divisible by 5.  This new requirement allows simple code for the new
  5-bits-at-a-time long_pow() implementation.  If necessary, the
  restriction could be removed (by complicating long_pow(), or by
  falling back to the 1-bit-at-a-time algorithm), but there are no
  plans to do so.

- bug #991962: When building with --disable-toolbox-glue on Darwin no
  attempt to build Mac-specific modules occurs.

- The --with-tsc flag to configure to enable VM profiling with the
  processor's timestamp counter now works on PPC platforms.

- patch #1006629: Define _XOPEN_SOURCE to 500 on Solaris 8/9 to match
  GCC's definition and avoid redefinition warnings.

- Detect pthreads support (provided by gnu pth pthread emulation) on
  GNU/k*BSD systems.

- bug #1005737, #1007249: Fixed several build problems and warnings
  found on old/legacy C compilers of HP-UX, IRIX and Tru64.

C API
-----

..

Documentation
-------------

- patch #1005936, bug #1009373: fix index entries which contain
  an underscore when viewed with Acrobat.

- bug #990669: os.path.normpath may alter the meaning of a path if
  it contains symbolic links. This has been documented in a comment
  since 1992, but is now in the library reference as well.

New platforms
-------------

- FreeBSD 6 is now supported.

Tests
-----

..

Windows
-------

- Boosted the stack reservation for python.exe and pythonw.exe from
  the default 1MB to 2MB.  Stack frames under VC 7.1 for 2.4 are enough
  bigger than under VC 6.0 for 2.3.4 that deeply recursive progams
  within the default sys.getrecursionlimit() default value of 1000 were
  able to suffer undetected C stack overflows.  The standard test program
  test_compiler was one such program.  If a Python process on Windows
  "just vanishes" without a trace, and without an error message of any
  kind, but with an exit code of 128, undetected stack overflow may be
  the problem.

Mac
---

..


What's New in Python 2.4 alpha 2?
=================================

*Release date: 05-AUG-2004*

Core and builtins
-----------------

- Patch #980695:  Implements efficient string concatenation for statements
  of the form s=s+t and s+=t.  This will vary across implementations.
  Accordingly, the str.join() method is strongly preferred for performance
  sensitive code.

- PEP-0318, Function Decorators have been added to the language. These are
  implemented using the Java-style @decorator syntax, like so::

     @staticmethod
     def foo(bar):

  (The PEP needs to be updated to reflect the current state)

- When importing a module M raises an exception, Python no longer leaves M
  in sys.modules.  Before 2.4a2 it did, and a subsequent import of M would
  succeed, picking up a module object from sys.modules reflecting as much
  of the initialization of M as completed before the exception was raised.
  Subsequent imports got no indication that M was in a partially-
  initialized state, and the importers could get into arbitrarily bad
  trouble as a result (the M they got was in an unintended state,
  arbitrarily far removed from M's author's intent).  Now subsequent
  imports of M will continue raising exceptions (but if, for example, the
  source code for M is edited between import attempts, then perhaps later
  attempts will succeed, or raise a different exception).

  This can break existing code, but in such cases the code was probably
  working before by accident.  In the Python source, the only case of
  breakage discovered was in a test accidentally relying on a damaged
  module remaining in sys.modules.  Cases are also known where tests
  deliberately provoking import errors remove damaged modules from
  sys.modules themselves, and such tests will break now if they do an
  unconditional del sys.modules[M].

- u'%s' % obj will now try obj.__unicode__() first and fallback to
  obj.__str__() if no __unicode__ method can be found.

- Patch #550732: Add PyArg_VaParseTupleAndKeywords().  Analogous to
  PyArg_VaParse().  Both are now documented.  Thanks Greg Chapman.

- Allow string and unicode return types from .encode()/.decode()
  methods on string and unicode objects.  Added unicode.decode()
  which was missing for no apparent reason.

- An attempt to fix the mess that is Python's behaviour with
  signal handlers and threads, complicated by readline's behaviour.
  It's quite possible that there are still bugs here.

- Added C macros Py_CLEAR and Py_VISIT to ease the implementation of
  types that support garbage collection.

- Compiler now treats None as a constant.

- The type of values returned by __int__, __float__, __long__,
  __oct__, and __hex__ are now checked.  Returning an invalid type
  will cause a TypeError to be raised.  This matches the behavior of
  Jython.

- Implemented bind_textdomain_codeset() in locale module.

- Added a workaround for proper string operations in BSDs.  str.split
  and str.is* methods can now work correctly with UTF-8 locales.

- Bug #989185: unicode.iswide() and unicode.width() is dropped and
  the East Asian Width support is moved to unicodedata extension
  module.

- Patch #941229: The source code encoding in interactive mode
  now refers sys.stdin.encoding not just ISO-8859-1 anymore.  This
  allows for non-latin-1 users to write unicode strings directly.

Extension modules
-----------------

- cpickle now supports the same keyword arguments as pickle.

Library
-------

- Added new codecs and aliases for ISO_8859-11, ISO_8859-16 and
  TIS-620

- Thanks to Edward Loper, doctest has been massively refactored, and
  many new features were added.  Full docs will appear later.  For now
  the doctest module comments and new test cases give good coverage.
  The refactoring provides many hook points for customizing behavior
  (such as how to report errors, and how to compare expected to actual
  output).  New features include a <BLANKLINE> marker for expected
  output containing blank lines, options to produce unified or context
  diffs when actual output doesn't match expectations, an option to
  normalize whitespace before comparing, and an option to use an
  ellipsis to signify "don't care" regions of output.

- Tkinter now supports the wish -sync and -use options.

- The following methods in time support passing of None: ctime(), gmtime(),
  and localtime().  If None is provided, the current time is used (the
  same as when the argument is omitted).
  [SF bug 658254, patch 663482]

- nntplib does now allow to ignore a .netrc file.

- urllib2 now recognizes Basic authentication even if other authentication
  schemes are offered.

- Bug #1001053.  wave.open() now accepts unicode filenames.

- gzip.GzipFile has a new fileno() method, to retrieve the handle of the
  underlying file object (provided it has a fileno() method).  This is
  needed if you want to use os.fsync() on a GzipFile.

- imaplib has two new methods: deleteacl and myrights.

- nntplib has two new methods: description and descriptions. They
  use a more RFC-compliant way of getting a newsgroup description.

- Bug #993394.  Fix a possible red herring of KeyError in 'threading' being
  raised during interpreter shutdown from a registered function with atexit
  when dummy_threading is being used.

- Bug #857297/Patch #916874.  Fix an error when extracting a hard link
  from a tarfile.

- Patch #846659.  Fix an error in tarfile.py when using
  GNU longname/longlink creation.

- The obsolete FCNTL.py has been deleted.  The built-in fcntl module
  has been available (on platforms that support fcntl) since Python
  1.5a3, and all FCNTL.py did is export fcntl's names, after generating
  a deprecation warning telling you to use fcntl directly.

- Several new unicode codecs are added: big5hkscs, euc_jis_2004,
  iso2022_jp_2004, shift_jis_2004.

- Bug #788520.  Queue.{get, get_nowait, put, put_nowait} have new
  implementations, exploiting Conditions (which didn't exist at the time
  Queue was introduced).  A minor semantic change is that the Full and
  Empty exceptions raised by non-blocking calls now occur only if the
  queue truly was full or empty at the instant the queue was checked (of
  course the Queue may no longer be full or empty by the time a calling
  thread sees those exceptions, though).  Before, the exceptions could
  also be raised if it was "merely inconvenient" for the implementation
  to determine the true state of the Queue (because the Queue was locked
  by some other method in progress).

- Bugs #979794 and #980117: difflib.get_grouped_opcodes() now handles the
  case of comparing two empty lists.  This affected both context_diff() and
  unified_diff(),

- Bug #980938: smtplib now prints debug output to sys.stderr.

- Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by
  returning the last point in the path that was not part of any loop.  Thanks
  AM Kuchling.

- Bug #980327: ntpath not handles compressing erroneous slashes between the
  drive letter and the rest of the path.  Also clearly handles UNC addresses now
  as well.  Thanks Paul Moore.

- bug #679953: zipfile.py should now work for files over 2 GB.  The packed data
  for file sizes (compressed and uncompressed) was being stored as signed
  instead of unsigned.

- decimal.py now only uses signals in the IBM spec.  The other conditions are
  no longer part of the public API.

- codecs module now has two new generic APIs: encode() and decode()
  which don't restrict the return types (unlike the unicode and
  string methods of the same name).

- Non-blocking SSL sockets work again; they were broken in Python 2.3.
  SF patch 945642.

- doctest unittest integration improvements:

  o Improved the unitest test output for doctest-based unit tests

  o Can now pass setUp and tearDown functions when creating
    DocTestSuites.

- The threading module has a new class, local, for creating objects
  that provide thread-local data.

- Bug #990307: when keep_empty_values is True, cgi.parse_qsl()
  no longer returns spurious empty fields.

- Implemented bind_textdomain_codeset() in gettext module.

- Introduced in gettext module the l*gettext() family of functions,
  which return translation strings encoded in the preferred encoding,
  as informed by locale module's getpreferredencoding().

- optparse module (and tests) upgraded to Optik 1.5a1.  Changes:

  - Add expansion of default values in help text: the string
    "%default" in an option's help string is expanded to str() of
    that option's default value, or "none" if no default value.

  - Bug #955889: option default values that happen to be strings are
    now processed in the same way as values from the command line; this
    allows generation of nicer help when using custom types.  Can
    be disabled with parser.set_process_default_values(False).

  - Bug #960515: don't crash when generating help for callback
    options that specify 'type', but not 'dest' or 'metavar'.

  - Feature #815264: change the default help format for short options
    that take an argument from e.g. "-oARG" to "-o ARG"; add
    set_short_opt_delimiter() and set_long_opt_delimiter() methods to
    HelpFormatter to allow (slight) customization of the formatting.

  - Patch #736940: internationalize Optik: all built-in user-
    targeted literal strings are passed through gettext.gettext().  (If
    you want translations (.po files), they're not included with Python
    -- you'll find them in the Optik source distribution from
    http://optik.sourceforge.net/ .)

  - Bug #878453: respect $COLUMNS environment variable for
    wrapping help output.

  - Feature #988122: expand "%prog" in the 'description' passed
    to OptionParser, just like in the 'usage' and 'version' strings.
    (This is *not* done in the 'description' passed to OptionGroup.)

C API
-----

- PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx():  if an
  error occurs while loading the module, these now delete the module's
  entry from sys.modules.  All ways of loading modules eventually call
  one of these, so this is an error-case change in semantics for all
  ways of loading modules.  In rare cases, a module loader may wish
  to keep a module object in sys.modules despite that the module's
  code cannot be executed.  In such cases, the module loader must
  arrange to reinsert the name and module object in sys.modules.
  PyImport_ReloadModule() has been changed to reinsert the original
  module object into sys.modules if the module reload fails, so that
  its visible semantics have not changed.

- A large pile of datetime field-extraction macros is now documented,
  thanks to Anthony Tuininga (patch #986010).

Documentation
-------------

- Improved the tutorial on creating types in C.

  - point out the importance of reassigning data members before
    assigning their values

  - correct my misconception about return values from visitprocs. Sigh.

  - mention the labor saving Py_VISIT and Py_CLEAR macros.

- Major rewrite of the math module docs, to address common confusions.

Tests
-----

- The test data files for the decimal test suite are now installed on
  platforms that use the Makefile.

- SF patch 995225:  The test file testtar.tar accidentally contained
  CVS keywords (like $Id$), which could cause spurious failures in
  test_tarfile.py depending on how the test file was checked out.


What's New in Python 2.4 alpha 1?
=================================

*Release date: 08-JUL-2004*

Core and builtins
-----------------

- weakref.ref is now the type object also known as
  weakref.ReferenceType; it can be subclassed like any other new-style
  class.  There's less per-entry overhead in WeakValueDictionary
  objects now (one object instead of three).

- Bug #951851: Python crashed when reading import table of certain
  Windows DLLs.

- Bug #215126.  The locals argument to eval(), execfile(), and exec now
  accept any mapping type.

- marshal now shares interned strings. This change introduces
  a new .pyc magic.

- Bug #966623. classes created with type() in an exec(, {}) don't
  have a __module__, but code in typeobject assumed it would always
  be there.

- Python no longer relies on the LC_NUMERIC locale setting to be
  the "C" locale; as a result, it no longer tries to prevent changing
  the LC_NUMERIC category.

- Bug #952807:  Unpickling pickled instances of subclasses of
  datetime.date, datetime.datetime and datetime.time could yield insane
  objects.  Thanks to Jiwon Seo for a fix.

- Bug #845802: Python crashes when __init__.py is a directory.

- Unicode objects received two new methods: iswide() and width().
  These query East Asian width information, as specified in Unicode
  TR11.

- Improved the tuple hashing algorithm to give fewer collisions in
  common cases.  Fixes bug  #942952.

- Implemented generator expressions (PEP 289).  Coded by Jiwon Seo.

- Enabled the profiling of C extension functions (and builtins) - check
  new documentation and modified profile and bdb modules for more details

- Set file.name to the object passed to open (instead of a new string)

- Moved tracebackobject into traceback.h and renamed to PyTracebackObject

- Optimized the byte coding for multiple assignments like "a,b=b,a" and
  "a,b,c=1,2,3".  Improves their speed by 25% to 30%.

- Limit the nested depth of a tuple for the second argument to isinstance()
  and issubclass() to the recursion limit of the interpreter.
  Fixes bug  #858016 .

- Optimized dict iterators, creating separate types for each
  and having them reveal their length.  Also optimized the
  methods:  keys(), values(), and items().

- Implemented a newcode opcode, LIST_APPEND, that simplifies
  the generated bytecode for list comprehensions and further
  improves their performance (about 35%).

- Implemented rich comparisons for floats, which seems to make
  comparisons involving NaNs somewhat less surprising when the
  underlying C compiler actually implements C99 semantics.

- Optimized list.extend() to save memory and no longer create
  intermediate sequences.  Also, extend() now pre-allocates the
  needed memory whenever the length of the iterable is known in
  advance -- this halves the time to extend the list.

- Optimized list resize operations to make fewer calls to the system
  realloc().  Significantly speeds up list appends, list pops,
  list comprehensions, and the list constructor (when the input iterable
  length is not known).

- Changed the internal list over-allocation scheme.  For larger lists,
  overallocation ranged between 3% and 25%.  Now, it is a constant 12%.
  For smaller lists (n<8), overallocation was upto eight elements.  Now,
  the overallocation is no more than three elements -- this improves space
  utilization for applications that have large numbers of small lists.

- Most list bodies now get re-used rather than freed.  Speeds up list
  instantiation and deletion by saving calls to malloc() and free().

- The dict.update() method now accepts all the same argument forms
  as the dict() constructor.  This now includes item lists and/or
  keyword arguments.

- Support for arbitrary objects supporting the read-only buffer
  interface as the co_code field of code objects (something that was
  only possible to create from C code) has been removed.

- Made omitted callback and None equivalent for weakref.ref() and
  weakref.proxy(); the None case wasn't handled correctly in all
  cases.

- Fixed problem where PyWeakref_NewRef() and PyWeakref_NewProxy()
  assumed that initial existing entries in an object's weakref list
  would not be removed while allocating a new weakref object.  Since
  GC could be invoked at that time, however, that assumption was
  invalid.  In a truly obscure case of GC being triggered during
  creation for a new weakref object for an referent which already
  has a weakref without a callback which is only referenced from
  cyclic trash, a memory error can occur.  This consistently created a
  segfault in a debug build, but provided less predictable behavior in
  a release build.

- input() built-in function now respects compiler flags such as
  __future__ statements.  SF patch 876178.

- Removed PendingDeprecationWarning from apply().  apply() remains
  deprecated, but the nuisance warning will not be issued.

- At Python shutdown time (Py_Finalize()), 2.3 called cyclic garbage
  collection twice, both before and after tearing down modules.  The
  call after tearing down modules has been disabled, because too much
  of Python has been torn down then for __del__ methods and weakref
  callbacks to execute sanely.  The most common symptom was a sequence
  of uninformative messages on stderr when Python shut down, produced
  by threads trying to raise exceptions, but unable to report the nature
  of their problems because too much of the sys module had already been
  destroyed.

- Removed FutureWarnings related to hex/oct literals and conversions
  and left shifts.  (Thanks to Kalle Svensson for SF patch 849227.)
  This addresses most of the remaining semantic changes promised by
  PEP 237, except for repr() of a long, which still shows the trailing
  'L'.  The PEP appears to promise warnings for operations that
  changed semantics compared to Python 2.3, but this is not
  implemented; we've suffered through enough warnings related to
  hex/oct literals and I think it's best to be silent now.

- For str and unicode objects, the ljust(), center(), and rjust()
  methods now accept an optional argument specifying a fill
  character other than a space.

- When method objects have an attribute that can be satisfied either
  by the function object or by the method object, the function
  object's attribute usually wins.  Christian Tismer pointed out that
  that this is really a mistake, because this only happens for special
  methods (like __reduce__) where the method object's version is
  really more appropriate than the function's attribute.  So from now
  on, all method attributes will have precedence over function
  attributes with the same name.

- Critical bugfix, for SF bug 839548:  if a weakref with a callback,
  its callback, and its weakly referenced object, all became part of
  cyclic garbage during a single run of garbage collection, the order
  in which they were torn down was unpredictable.  It was possible for
  the callback to see partially-torn-down objects, leading to immediate
  segfaults, or, if the callback resurrected garbage objects, to
  resurrect insane objects that caused segfaults (or other surprises)
  later.  In one sense this wasn't surprising, because Python's cyclic gc
  had no knowledge of Python's weakref objects.  It does now.  When
  weakrefs with callbacks become part of cyclic garbage now, those
  weakrefs are cleared first.  The callbacks don't trigger then,
  preventing the problems.  If you need callbacks to trigger, then just
  as when cyclic gc is not involved, you need to write your code so
  that weakref objects outlive the objects they weakly reference.

- Critical bugfix, for SF bug 840829:  if cyclic garbage collection
  happened to occur during a weakref callback for a new-style class
  instance, subtle memory corruption was the result (in a release build;
  in a debug build, a segfault occurred reliably very soon after).
  This has been repaired.

- Compiler flags set in PYTHONSTARTUP are now active in __main__.

- Added two built-in types, set() and frozenset().

- Added a reversed() built-in function that returns a reverse iterator
  over a sequence.

- Added a sorted() built-in function that returns a new sorted list
  from any iterable.

- CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr.

- list.sort() now supports three keyword arguments:  cmp, key, and reverse.
  The key argument can be a function of one argument that extracts a
  comparison key from the original record:  mylist.sort(key=str.lower).
  The reverse argument is a boolean value and if True will change the
  sort order as if the comparison arguments were reversed.  In addition,
  the documentation has been amended to provide a guarantee that all sorts
  starting with Py2.3 are guaranteed to be stable (the relative order of
  records with equal keys is unchanged).

- Added test whether wchar_t is signed or not. A signed wchar_t is not
  usable as internal unicode type base for Py_UNICODE since the
  unicode implementation assumes an unsigned type.

- Fixed a bug in the cache of length-one Unicode strings that could
  lead to a seg fault.  The specific problem occurred when an earlier,
  non-fatal error left an uninitialized Unicode object in the
  freelist.

- The % formatting operator now supports '%F' which is equivalent to
  '%f'.  This has always been documented but never implemented.

- complex(obj) could leak a little memory if obj wasn't a string or
  number.

- zip() with no arguments now returns an empty list instead of raising
  a TypeError exception.

- obj.__contains__() now returns True/False instead of 1/0.  SF patch
  820195.

- Python no longer tries to be smart about recursive comparisons.
  When comparing containers with cyclic references to themselves it
  will now just hit the recursion limit.  See SF patch 825639.

- str and unicode built-in types now have an rsplit() method that is
  same as split() except that it scans the string from the end
  working towards the beginning.  See SF feature request 801847.

- Fixed a bug in object.__reduce_ex__ when using protocol 2.  Failure
  to clear the error when attempts to get the __getstate__ attribute
  fail caused intermittent errors and odd behavior.

- buffer objects based on other objects no longer cache a pointer to
  the data and the data length.  Instead, the appropriate tp_as_buffer
  method is called as necessary.

- fixed: if a file is opened with an explicit buffer size >= 1, repeated
  close() calls would attempt to free() the buffer already free()ed on
  the first call.


Extension modules
-----------------

- Added socket.getservbyport(), and make the second argument in
  getservbyname() and getservbyport() optional.

- time module code that deals with input POSIX timestamps will now raise
  ValueError if more than a second is lost in precision when the
  timestamp is cast to the platform C time_t type.  There's no chance
  that the platform will do anything sensible with the result in such
  cases.  This includes ctime(), localtime() and gmtime().  Assorted
  fromtimestamp() and utcfromtimestamp() methods in the datetime module
  were also protected.  Closes bugs #919012 and 975996.

- fcntl.ioctl now warns if the mutate flag is not specified.

- nt now properly allows to refer to UNC roots, e.g. in nt.stat().

- the weakref module now supports additional objects:  array.array,
  sre.pattern_objects, file objects, and sockets.

- operator.isMappingType() and operator.isSequenceType() now give
  fewer false positives.

- socket.sslerror is now a subclass of socket.error .  Also added
  socket.error to the socket module's C API.

- Bug #920575: A problem where the _locale module segfaults on
  nl_langinfo(ERA) caused by GNU libc's illegal NULL return is fixed.

- array objects now support the copy module.  Also, their resizing
  scheme has been updated to match that used for list objects.  This improves
  the performance (speed and memory usage) of append() operations.
  Also, array.array() and array.extend() now accept any iterable argument
  for repeated appends without needing to create another temporary array.

- cStringIO.writelines() now accepts any iterable argument and writes
  the lines one at a time rather than joining them and writing once.
  Made a parallel change to StringIO.writelines().  Saves memory and
  makes suitable for use with generator expressions.

- time.strftime() now checks that the values in its time tuple argument
  are within the proper boundaries to prevent possible crashes from the
  platform's C library implementation of strftime().  Can possibly
  break code that uses values outside the range that didn't cause
  problems previously (such as sitting day of year to 0).  Fixes bug
  #897625.

- The socket module now supports Bluetooth sockets, if the
  system has <bluetooth/bluetooth.h>

- Added a collections module containing a new datatype, deque(),
  offering high-performance, thread-safe, memory friendly appends
  and pops on either side of the deque.

- Several modules now take advantage of collections.deque() for
  improved performance:  Queue, mutex, shlex, threading, and pydoc.

- The operator module has two new functions, attrgetter() and
  itemgetter() which are useful for creating fast data extractor
  functions for map(), list.sort(), itertools.groupby(), and
  other functions that expect a function argument.

- socket.SHUT_{RD,WR,RDWR} was added.

- os.getsid was added.

- The pwd module incorrectly advertised its struct type as
  struct_pwent; this has been renamed to struct_passwd.  (The old name
  is still supported for backwards compatibility.)

- The xml.parsers.expat module now provides Expat 1.95.7.

- socket.IPPROTO_IPV6 was added.

- readline.clear_history was added.

- select.select() now accepts sequences for its first three arguments.

- cStringIO now supports the f.closed attribute.

- The signal module now exposes SIGRTMIN and SIGRTMAX (if available).

- curses module now supports use_default_colors().  [patch #739124]

- Bug #811028: ncurses.h breakage on FreeBSD/MacOS X

- Bug #814613: INET_ADDRSTRLEN fix needed for all compilers on SGI

- Implemented non-recursive SRE matching scheme (#757624).

- Implemented (?(id/name)yes|no) support in SRE (#572936).

- random.seed() with no arguments or None uses time.time() as a default
  seed.  Modified to match Py2.2 behavior and use fractional seconds so
  that successive runs are more likely to produce different sequences.

- random.Random has a new method, getrandbits(k), which returns an int
  with k random bits.  This method is now an optional part of the API
  for user defined generators.  Any generator that defines genrandbits()
  can now use randrange() for ranges with a length >= 2**53.  Formerly,
  randrange would return only even numbers for ranges that large (see
  SF bug #812202).  Generators that do not define genrandbits() now
  issue a warning when randrange() is called with a range that large.

- itertools has a new function, groupby() for aggregating iterables
  into groups sharing the same key (as determined by a key function).
  It offers some of functionality of SQL's groupby keyword and of
  the Unix uniq filter.

- itertools now has a new tee() function which produces two independent
  iterators from a single iterable.

- itertools.izip() with no arguments now returns an empty iterator instead
  of raising a TypeError exception.

- Fixed #853061: allow BZ2Compressor.compress() to receive an empty string
  as parameter.

Library
-------

- Added a new module: cProfile, a C profiler with the same interface as the
  profile module.  cProfile avoids some of the drawbacks of the hotshot
  profiler and provides a bit more information than the other two profilers.
  Based on "lsprof" (patch #1212837).

- Bug #1266283: The new function "lexists" is now in os.path.__all__.

- Bug #981530: Fix UnboundLocalError in shutil.rmtree().  This affects
  the documented behavior: the function passed to the onerror()
  handler can now also be os.listdir.

- Bug #754449: threading.Thread objects no longer mask exceptions raised during
  interpreter shutdown with another exception from attempting to handle the
  original exception.

- Added decimal.py per PEP 327.

- Bug #981299: rsync is now a recognized protocol in urlparse that uses a
  "netloc" portion of a URL.

- Bug #919012: shutil.move() will not try to move a directory into itself.
  Thanks Johannes Gijsbers.

- Bug #934282: pydoc.stripid() is now case-insensitive.  Thanks Robin Becker.

- Bug #823209:  cmath.log() now takes an optional base argument so that its
  API matches math.log().

- Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
  that generate a -debuginfo.rpm

- os.path.devnull has been added for all supported platforms.

- Fixed #877165: distutils now picks the right C++ compiler command
  on cygwin and mingw32.

- urllib.urlopen().readline() now handles HTTP/0.9 correctly.

- refactored site.py into functions.  Also wrote regression tests for the
  module.

- The distutils install command now supports the --home option and
  installation scheme for all platforms.

- asyncore.loop now has a repeat count parameter that defaults to
  looping forever.

- The distutils sdist command now ignores all .svn directories, in
  addition to CVS and RCS directories.  .svn directories hold
  administrative files for the Subversion source control system.

- Added a new module: cookielib.  Automatic cookie handling for HTTP
  clients.  Also, support for cookielib has been added to urllib2, so
  urllib2.urlopen() can transparently handle cookies.

- stringprep.py now uses built-in set() instead of sets.Set().

- Bug #876278: Unbounded recursion in modulefinder

- Bug #780300: Swap public and system ID in LexicalHandler.startDTD.
  Applications relying on the wrong order need to be corrected.

- Bug #926075: Fixed a bug that returns a wrong pattern object
  for a string or unicode object in sre.compile() when a different
  type pattern with the same value exists.

- Added countcallers arg to trace.Trace class (--trackcalls command line arg
  when run from the command prompt).

- Fixed a caching bug in platform.platform() where the argument of 'terse' was
  not taken into consideration when caching value.

- Added two new command-line arguments for profile (output file and
  default sort).

- Added global runctx function to profile module

- Add hlist missing entryconfigure and entrycget methods.

- The ptcp154 codec was added for Kazakh character set support.

- Support non-anonymous ftp URLs in urllib2.

- The encodings package will now apply codec name aliases
  first before starting to try the import of the codec module.
  This simplifies overriding built-in codecs with external
  packages, e.g. the included CJK codecs with the JapaneseCodecs
  package, by adjusting the aliases dictionary in encodings.aliases
  accordingly.

- base64 now supports RFC 3548 Base16, Base32, and Base64 encoding and
  decoding standards.

- urllib2 now supports processors.  A processor is a handler that
  implements an xxx_request or xxx_response method.  These methods are
  called for all requests.

- distutils compilers now compile source files in the same order as
  they are passed to the compiler.

- pprint.pprint() and pprint.pformat() now have additional parameters
  indent, width and depth.

- Patch #750542: pprint now will pretty print subclasses of list, tuple
  and dict too, as long as they don't overwrite __repr__().

- Bug #848614: distutils' msvccompiler fails to find the MSVC6
  compiler because of incomplete registry entries.

- httplib.HTTP.putrequest now offers to omit the implicit Accept-Encoding.

- Patch #841977: modulefinder didn't find extension modules in packages

- imaplib.IMAP4.thread was added.

- Plugged a minor hole in tempfile.mktemp() due to the use of
  os.path.exists(), switched to using os.lstat() directly if possible.

- bisect.py and heapq.py now have underlying C implementations
  for better performance.

- heapq.py has two new functions, nsmallest() and nlargest().

- traceback.format_exc has been added (similar to print_exc but it returns
  a string).

- xmlrpclib.MultiCall has been added.

- poplib.POP3_SSL has been added.

- tmpfile.mkstemp now returns an absolute path even if dir is relative.

- urlparse is RFC 2396 compliant.

- The fieldnames argument to the csv module's DictReader constructor is now
  optional.  If omitted, the first row of the file will be used as the
  list of fieldnames.

- encodings.bz2_codec was added for access to bz2 compression
  using "a long string".encode('bz2')

- Various improvements to unittest.py, realigned with PyUnit CVS.

- dircache now passes exceptions to the caller, instead of returning
  empty lists.

- The bsddb module and dbhash module now support the iterator and
  mapping protocols which make them more substitutable for dictionaries
  and shelves.

- The csv module's DictReader and DictWriter classes now accept keyword
  arguments.  This was an omission in the initial implementation.

- The email package handles some RFC 2231 parameters with missing
  CHARSET fields better.  It also includes a patch to parameter
  parsing when semicolons appear inside quotes.

- sets.py now runs under Py2.2.  In addition, the argument restrictions
  for most set methods (but not the operators) have been relaxed to
  allow any iterable.

- _strptime.py now has a behind-the-scenes caching mechanism for the most
  recent TimeRE instance used along with the last five unique directive
  patterns.  The overall module was also made more thread-safe.

- random.cunifvariate() and random.stdgamma() were deprecated in Py2.3
  and removed in Py2.4.

- Bug #823328: urllib2.py's HTTP Digest Auth support works again.

- Patch #873597: CJK codecs are imported into rank of default codecs.

Tools/Demos
-----------

- A hotshotmain script was added to the Tools/scripts directory that
  makes it easy to run a script under control of the hotshot profiler.

- The db2pickle and pickle2db scripts can now dump/load gdbm files.

- The file order on the command line of the pickle2db script was reversed.
  It is now [ picklefile ] dbfile.  This provides better symmetry with
  db2pickle.  The file arguments to both scripts are now source followed by
  destination in situations where both files are given.

- The pydoc script will display a link to the module documentation for
  modules determined to be part of the core distribution.  The documentation
  base directory defaults to http://www.python.org/doc/current/lib/ but can
  be changed by setting the PYTHONDOCS environment variable.

- texcheck.py now detects double word errors.

- md5sum.py mistakenly opened input files in text mode by default, a
  silent and dangerous change from previous releases.  It once again
  opens input files in binary mode by default.  The -t and -b flags
  remain for compatibility with the 2.3 release, but -b is the default
  now.

- py-electric-colon now works when pending-delete/delete-selection mode is
  in effect

- py-help-at-point is no longer bound to the F1 key - it's still bound to
  C-c C-h

- Pynche was fixed to not crash when there is no ~/.pynche file and no
  -d option was given.

Build
-----

- Bug #978645: Modules/getpath.c now builds properly in --disable-framework
  build under OS X.

- Profiling using gprof is now available if Python is configured with
  --enable-profiling.

- Profiling the VM using the Pentium TSC is now possible if Python
  is configured --with-tsc.

- In order to find libraries, setup.py now also looks in /lib64, for use
  on AMD64.

- Bug #934635: Fixed a bug where the configure script couldn't detect
  getaddrinfo() properly if the KAME stack had SCTP support.

- Support for missing ANSI C header files (limits.h, stddef.h, etc) was
  removed.

- Systems requiring the D4, D6 or D7 variants of pthreads are no longer
  supported (see PEP 11).

- Universal newline support can no longer be disabled (see PEP 11).

- Support for DGUX, SunOS 4, IRIX 4 and Minix was removed (see PEP 11).

- Support for systems requiring --with-dl-dld or --with-sgi-dl was removed
  (see PEP 11).

- Tests for sizeof(char) were removed since ANSI C mandates that
  sizeof(char) must be 1.

C API
-----

- Thanks to Anthony Tuininga, the datetime module now supplies a C API
  containing type-check macros and constructors.  See new docs in the
  Python/C API Reference Manual for details.

- Private function _PyTime_DoubleToTimet added, to convert a Python
  timestamp (C double) to platform time_t with some out-of-bounds
  checking.  Declared in new header file timefuncs.h.  It would be
  good to expose some other internal timemodule.c functions there.

- New public functions PyEval_EvaluateFrame and PyGen_New to expose
  generator objects.

- New public functions Py_IncRef() and Py_DecRef(), exposing the
  functionality of the Py_XINCREF() and Py_XDECREF macros. Useful for
  runtime dynamic embedding of Python.  See patch #938302, by Bob
  Ippolito.

- Added a new macro, PySequence_Fast_ITEMS, which retrieves a fast sequence's
  underlying array of PyObject pointers.  Useful for high speed looping.

- Created a new method flag, METH_COEXIST, which causes a method to be loaded
  even if already defined by a slot wrapper.  This allows a __contains__
  method, for example, to co-exist with a defined sq_contains slot.  This
  is helpful because the PyCFunction can take advantage of optimized calls
  whenever METH_O or METH_NOARGS flags are defined.

- Added a new function, PyDict_Contains(d, k) which is like
  PySequence_Contains() but is specific to dictionaries and executes
  about 10% faster.

- Added three new macros: Py_RETURN_NONE, Py_RETURN_TRUE, and Py_RETURN_FALSE.
  Each return the singleton they mention after Py_INCREF()ing them.

- Added a new function, PyTuple_Pack(n, ...) for constructing tuples from a
  variable length argument list of Python objects without having to invoke
  the more complex machinery of Py_BuildValue().  PyTuple_Pack(3, a, b, c)
  is equivalent to Py_BuildValue("(OOO)", a, b, c).

Windows
-------

- The _winreg module could segfault when reading very large registry
  values, due to unchecked alloca() calls (SF bug 851056).  The fix is
  uses either PyMem_Malloc(n) or PyString_FromStringAndSize(NULL, n),
  as appropriate, followed by a size check.

- file.truncate() could misbehave if the file was open for update
  (modes r+, rb+, w+, wb+), and the most recent file operation before
  the truncate() call was an input operation.  SF bug 801631.


What's New in Python 2.3 final?
===============================

*Release date: 29-Jul-2003*

IDLE
----

- Bug 778400:  IDLE hangs when selecting "Edit with IDLE" from explorer.
  This was unique to Windows, and was fixed by adding an -n switch to
  the command the Windows installer creates to execute "Edit with IDLE"
  context-menu actions.

- IDLE displays a new message upon startup:  some "personal firewall"
  kinds of programs (for example, ZoneAlarm) open a dialog of their
  own when any program opens a socket.  IDLE does use sockets, talking
  on the computer's internal loopback interface.  This connection is not
  visible on any external interface and no data is sent to or received
  from the Internet.  So, if you get such a dialog when opening IDLE,
  asking whether to let pythonw.exe talk to address 127.0.0.1, say yes,
  and rest assured no communication external to your machine is taking
  place.  If you don't allow it, IDLE won't be able to start.


What's New in Python 2.3 release candidate 2?
=============================================

*Release date: 24-Jul-2003*

Core and builtins
-----------------

- It is now possible to import from zipfiles containing additional
  data bytes before the zip compatible archive.  Zipfiles containing a
  comment at the end are still unsupported.

Extension modules
-----------------

- A longstanding bug in the parser module's initialization could cause
  fatal internal refcount confusion when the module got initialized more
  than once.  This has been fixed.

- Fixed memory leak in pyexpat; using the parser's ParseFile() method
  with open files that aren't instances of the standard file type
  caused an instance of the bound .read() method to be leaked on every
  call.

- Fixed some leaks in the locale module.

Library
-------

- Lib/encodings/rot_13.py when used as a script, now more properly
  uses the first Python interpreter on your path.

- Removed caching of TimeRE (and thus LocaleTime) in _strptime.py to
  fix a locale related bug in the test suite.  Although another patch
  was needed to actually fix the problem, the cache code was not
  restored.

IDLE
----

- Calltips patches.

Build
-----

- For MacOSX, added -mno-fused-madd to BASECFLAGS to fix test_coercion
  on Panther (OSX 10.3).

C API
-----

Windows
-------

- The tempfile module could do insane imports on Windows if PYTHONCASEOK
  was set, making temp file creation impossible.  Repaired.

- Add a patch to workaround pthread_sigmask() bugs in Cygwin.

Mac
---

- Various fixes to pimp.

- Scripts runs with pythonw no longer had full window manager access.

- Don't force boot-disk-only install, for reasons unknown it causes
  more problems than it solves.


What's New in Python 2.3 release candidate 1?
=============================================

*Release date: 18-Jul-2003*

Core and builtins
-----------------

- The new function sys.getcheckinterval() returns the last value set
  by sys.setcheckinterval().

- Several bugs in the symbol table phase of the compiler have been
  fixed.  Errors could be lost and compilation could fail without
  reporting an error.  SF patch 763201.

- The interpreter is now more robust about importing the warnings
  module.  In an executable generated by freeze or similar programs,
  earlier versions of 2.3 would fail if the warnings module could
  not be found on the file system.  Fixes SF bug 771097.

- A warning about assignments to module attributes that shadow
  builtins, present in earlier releases of 2.3, has been removed.

- It is not possible to create subclasses of built-in types like str
  and tuple that define an itemsize.  Earlier releases of Python 2.3
  allowed this by mistake, leading to crashes and other problems.

- The thread_id is now initialized to 0 in a non-thread build.  SF bug
  770247.

- SF bug 762891: "del p[key]" on proxy object no longer raises SystemError.

Extension modules
-----------------

- weakref.proxy() can now handle "del obj[i]" for proxy objects
  defining __delitem__.  Formerly, it generated a SystemError.

- SSL no longer crashes the interpreter when the remote side disconnects.

- On Unix the mmap module can again be used to map device files.

- time.strptime now exclusively uses the Python implementation
  contained within the _strptime module.

- The print slot of weakref proxy objects was removed, because it was
  not consistent with the object's repr slot.

- The mmap module only checks file size for regular files, not
  character or block devices.  SF patch 708374.

- The cPickle Pickler garbage collection support was fixed to traverse
  the find_class attribute, if present.

- There are several fixes for the bsddb3 wrapper module.

  bsddb3 no longer crashes if an environment is closed before a cursor
  (SF bug 763298).

  The DB and DBEnv set_get_returns_none function was extended to take
  a level instead of a boolean flag.  The new level 2 means that in
  addition, cursor.set()/.get() methods return None instead of raising
  an exception.

  A typo was fixed in DBCursor.join_item(), preventing a crash.

Library
-------

- distutils now supports MSVC 7.1

- doctest now examines all docstrings by default.  Previously, it would
  skip over functions with private names (as indicated by the underscore
  naming convention).  The old default created too much of a risk that
  user tests were being skipped inadvertently.  Note, this change could
  break code in the unlikely case that someone had intentionally put
  failing tests in the docstrings of private functions.  The breakage
  is easily fixable by specifying the old behavior when calling testmod()
  or Tester().

- There were several fixes to the way dumbdbms are closed.  It's vital
  that a dumbdbm database be closed properly, else the on-disk data
  and directory files can be left in mutually inconsistent states.
  dumbdbm.py's _Database.__del__() method attempted to close the
  database properly, but a shutdown race in _Database._commit() could
  prevent this from working, so that a program trusting __del__() to
  get the on-disk files in synch could be badly surprised.  The race
  has been repaired.  A sync() method was also added so that shelve
  can guarantee data is written to disk.

  The close() method can now be called more than once without complaint.

- The classes in threading.py are now new-style classes.  That they
  weren't before was an oversight.

- The urllib2 digest authentication handlers now define the correct
  auth_header.  The earlier versions would fail at runtime.

- SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods
  when there are no lines.

- SF bug 763637: fix exception in Tkinter with after_cancel
  which could occur with Tk 8.4

- SF bug 770601: CGIHTTPServer.py now passes the entire environment
  to child processes.

- SF bug 765238: add filter to fnmatch's __all__.

- SF bug 748201: make time.strptime() error messages more helpful.

- SF patch 764470: Do not dump the args attribute of a Fault object in
  xmlrpclib.

- SF patch 549151: urllib and urllib2 now redirect POSTs on 301
  responses.

- SF patch 766650: The whichdb module was fixed to recognize dbm files
  generated by gdbm on OS/2 EMX.

- SF bugs 763047 and 763052: fixes bug of timezone value being left as
  -1 when ``time.tzname[0] == time.tzname[1] and not time.daylight``
  is true when it should only when time.daylight is true.

- SF bug 764548: re now allows subclasses of str and unicode to be
  used as patterns.

- SF bug 763637: In Tkinter, change after_cancel() to handle tuples
  of varying sizes.  Tk 8.4 returns a different number of values
  than Tk 8.3.

- SF bug 763023: difflib.ratio() did not catch zero division.

- The Queue module now has an __all__ attribute.

Tools/Demos
-----------

- See Lib/idlelib/NEWS.txt for IDLE news.

- SF bug 753592: webchecker/wsgui now handles user supplied directories.

- The trace.py script has been removed.  It is now in the standard library.

Build
-----

- Python now compiles with -fno-strict-aliasing if possible (SF bug 766696).

- The socket module compiles on IRIX 6.5.10.

- An irix64 system is treated the same way as an irix6 system (SF
  patch 764560).

- Several definitions were missing on FreeBSD 5.x unless the
  __BSD_VISIBLE symbol was defined.  configure now defines it as
  needed.

C API
-----

- Unicode objects now support mbcs as a built-in encoding, so the C
  API can use it without deferring to the encodings package.

Windows
-------

- The Windows implementation of PyThread_start_new_thread() never
  checked error returns from Windows functions correctly.  As a result,
  it could claim to start a new thread even when the Microsoft
  _beginthread() function failed (due to "too many threads" -- this is
  on the order of thousands when it happens).  In these cases, the
  Python exception ::

      thread.error: can't start new thread

  is raised now.

- SF bug 766669: Prevent a GPF on interpreter exit when sockets are in
  use.  The interpreter now calls WSACleanup() from Py_Finalize()
  instead of from DLL teardown.

Mac
---

- Bundlebuilder now inherits default values in the right way.  It was
  previously possible for app bundles to get a type of "BNDL" instead
  of "APPL."  Other improvements include, a --build-id option to
  specify the CFBundleIdentifier and using the --python option to set
  the executable in the bundle.

- Fixed two bugs in MacOSX framework handling.

- pythonw did not allow user interaction in 2.3rc1, this has been fixed.

- Python is now compiled with -mno-fused-madd, making all tests pass
  on Panther.

What's New in Python 2.3 beta 2?
================================

*Release date: 29-Jun-2003*

Core and builtins
-----------------

- A program can now set the environment variable PYTHONINSPECT to some
  string value in Python, and cause the interpreter to enter the
  interactive prompt at program exit, as if Python had been invoked
  with the -i option.

- list.index() now accepts optional start and stop arguments.  Similar
  changes were made to UserList.index(). SF feature request 754014.

- SF patch 751998 fixes an unwanted side effect of the previous fix
  for SF bug 742860 (the next item).

- SF bug 742860: "WeakKeyDictionary __delitem__ uses iterkeys".  This
  wasn't threadsafe, was very inefficient (expected time O(len(dict))
  instead of O(1)), and could raise a spurious RuntimeError if another
  thread mutated the dict during __delitem__, or if a comparison function
  mutated it.  It also neglected to raise KeyError when the key wasn't
  present; didn't raise TypeError when the key wasn't of a weakly
  referencable type; and broke various more-or-less obscure dict
  invariants by using a sequence of equality comparisons over the whole
  set of dict keys instead of computing the key's hash code to narrow
  the search to those keys with the same hash code.  All of these are
  considered to be bugs.  A new implementation of __delitem__ repairs all
  that, but note that fixing these bugs may change visible behavior in
  code relying (whether intentionally or accidentally) on old behavior.

- SF bug 734869: Fixed a compiler bug that caused a fatal error when
  compiling a list comprehension that contained another list comprehension
  embedded in a lambda expression.

- SF bug 705231:  builtin pow() no longer lets the platform C pow()
  raise -1.0 to integer powers, because (at least) glibc gets it wrong
  in some cases.  The result should be -1.0 if the power is odd and 1.0
  if the power is even, and any float with a sufficiently large exponent
  is (mathematically) an exact even integer.

- SF bug 759227: A new-style class that implements __nonzero__() must
  return a bool or int (but not an int subclass) from that method.  This
  matches the restriction on classic classes.

- The encoding attribute has been added for file objects, and set to
  the terminal encoding on Unix and Windows.

- The softspace attribute of file objects became read-only by oversight.
  It's writable again.

- Reverted a 2.3 beta 1 change to iterators for subclasses of list and
  tuple.  By default, the iterators now access data elements directly
  instead of going through __getitem__.  If __getitem__ access is
  preferred, then __iter__ can be overridden.

- SF bug 735247: The staticmethod and super types participate in
  garbage collection. Before this change, it was possible for leaks to
  occur in functions with non-global free variables that used these types.

Extension modules
-----------------

- the socket module has a new exception, socket.timeout, to allow
  timeouts to be handled separately from other socket errors.

- SF bug 751276: cPickle has fixed to propagate exceptions raised in
  user code.  In earlier versions, cPickle caught and ignored any
  exception when it performed operations that it expected to raise
  specific exceptions like AttributeError.

- cPickle Pickler and Unpickler objects now participate in garbage
  collection.

- mimetools.choose_boundary() could return duplicate strings at times,
  especially likely on Windows.  The strings returned are now guaranteed
  unique within a single program run.

- thread.interrupt_main() raises KeyboardInterrupt in the main thread.
  dummy_thread has also been modified to try to simulate the behavior.

- array.array.insert() now treats negative indices as being relative
  to the end of the array, just like list.insert() does. (SF bug #739313)

- The datetime module classes datetime, time, and timedelta are now
  properly subclassable.

- _tkinter.{get|set}busywaitinterval was added.

- itertools.islice() now accepts stop=None as documented.
  Fixes SF bug #730685.

- the bsddb185 module is built in one restricted instance -
  /usr/include/db.h exists and defines HASHVERSION to be 2.  This is true
  for many BSD-derived systems.


Library
-------

- Some happy doctest extensions from Jim Fulton have been added to
  doctest.py.  These are already being used in Zope3.  The two
  primary ones:

  doctest.debug(module, name) extracts the doctests from the named object
  in the given module, puts them in a temp file, and starts pdb running
  on that file.  This is great when a doctest fails.

  doctest.DocTestSuite(module=None) returns a synthesized unittest
  TestSuite instance, to be run by the unittest framework, which
  runs all the doctests in the module.  This allows writing tests in
  doctest style (which can be clearer and shorter than writing tests
  in unittest style), without losing unittest's powerful testing
  framework features (which doctest lacks).

- For compatibility with doctests created before 2.3, if an expected
  output block consists solely of "1" and the actual output block
  consists solely of "True", it's accepted as a match; similarly
  for "0" and "False".  This is quite un-doctest-like, but is practical.
  The behavior can be disabled by passing the new doctest module
  constant DONT_ACCEPT_TRUE_FOR_1 to the new optionflags optional
  argument.

- ZipFile.testzip() now only traps BadZipfile exceptions.  Previously,
  a bare except caught to much and reported all errors as a problem
  in the archive.

- The logging module now has a new function, makeLogRecord() making
  LogHandler easier to interact with DatagramHandler and SocketHandler.

- The cgitb module has been extended to support plain text display (SF patch
  569574).

- A brand new version of IDLE (from the IDLEfork project at
  SourceForge) is now included as Lib/idlelib.  The old Tools/idle is
  no more.

- Added a new module: trace (documentation missing).  This module used
  to be distributed in Tools/scripts.  It uses sys.settrace() to trace
  code execution -- either function calls or individual lines.  It can
  generate tracing output during execution or a post-mortem report of
  code coverage.

- The threading module has new functions settrace() and setprofile()
  that cooperate with the functions of the same name in the sys
  module.  A function registered with the threading module will
  be used for all threads it creates.  The new trace module uses this
  to provide tracing for code running in threads.

- copy.py: applied SF patch 707900, fixing bug 702858, by Steven
  Taschuk.  Copying a new-style class that had a reference to itself
  didn't work.  (The same thing worked fine for old-style classes.)
  Builtin functions are now treated as atomic, fixing bug #746304.

- difflib.py has two new functions:  context_diff() and unified_diff().

- More fixes to urllib (SF 549151): (a) When redirecting, always use
  GET.  This is common practice and more-or-less sanctioned by the
  HTTP standard. (b) Add a handler for 307 redirection, which becomes
  an error for POST, but a regular redirect for GET and HEAD

- Added optional 'onerror' argument to os.walk(), to control error
  handling.

- inspect.is{method|data}descriptor was added, to allow pydoc display
  __doc__ of data descriptors.

- Fixed socket speed loss caused by use of the _socketobject wrapper class
  in socket.py.

- timeit.py now checks the current directory for imports.

- urllib2.py now knows how to order proxy classes, so the user doesn't
  have to insert it in front of other classes, nor do dirty tricks like
  inserting a "dummy" HTTPHandler after a ProxyHandler when building an
  opener with proxy support.

- Iterators have been added for dbm keys.

- random.Random objects can now be pickled.

Tools/Demos
-----------

- pydoc now offers help on keywords and topics.

- Tools/idle is gone; long live Lib/idlelib.

- diff.py prints file diffs in context, unified, or ndiff formats,
  providing a command line interface to difflib.py.

- texcheck.py is a new script for making a rough validation of Python LaTeX
  files.

Build
-----

- Setting DESTDIR during 'make install' now allows specifying a
  different root directory.

C API
-----

- PyType_Ready():  If a type declares that it participates in gc
  (Py_TPFLAGS_HAVE_GC), and its base class does not, and its base class's
  tp_free slot is the default _PyObject_Del, and type does not define
  a tp_free slot itself, _PyObject_GC_Del is assigned to type->tp_free.
  Previously _PyObject_Del was inherited, which could at best lead to a
  segfault.  In addition, if even after this magic the type's tp_free
  slot is _PyObject_Del or NULL, and the type is a base type
  (Py_TPFLAGS_BASETYPE), TypeError is raised:  since the type is a base
  type, its dealloc function must call type->tp_free, and since the type
  is gc'able, tp_free must not be NULL or _PyObject_Del.

- PyThreadState_SetAsyncExc(): A new API (deliberately accessible only
  from C) to interrupt a thread by sending it an exception.  It is
  intentional that you have to write your own C extension to call it
  from Python.


New platforms
-------------

None this time.

Tests
-----

- test_imp rewritten so that it doesn't raise RuntimeError if run as a
  side effect of being imported ("import test.autotest").

Windows
-------

- The Windows installer ships with Tcl/Tk 8.4.3 (upgraded from 8.4.1).

- The installer always suggested that Python be installed on the C:
  drive, due to a hardcoded "C:" generated by the Wise installation
  wizard.  People with machines where C: is not the system drive
  usually want Python installed on whichever drive is their system drive
  instead.  We removed the hardcoded "C:", and two testers on machines
  where C: is not the system drive report that the installer now
  suggests their system drive.  Note that you can always select the
  directory you want in the "Select Destination Directory" dialog --
  that's what it's for.

Mac
---

- There's a new module called "autoGIL", which offers a mechanism to
  automatically release the Global Interpreter Lock when an event loop
  goes to sleep, allowing other threads to run. It's currently only
  supported on OSX, in the Mach-O version.
- The OSA modules now allow direct access to properties of the
  toplevel application class (in AppleScript terminology).
- The Package Manager can now update itself.

SourceForge Bugs and Patches Applied
------------------------------------

430160, 471893, 501716, 542562, 549151, 569574, 595837, 596434,
598163, 604210, 604716, 610332, 612627, 614770, 620190, 621891,
622042, 639139, 640236, 644345, 649742, 649742, 658233, 660022,
661318, 661676, 662807, 662923, 666219, 672855, 678325, 682347,
683486, 684981, 685773, 686254, 692776, 692959, 693094, 696777,
697989, 700827, 703666, 708495, 708604, 708901, 710733, 711902,
713722, 715782, 718286, 719359, 719367, 723136, 723831, 723962,
724588, 724767, 724767, 725942, 726150, 726446, 726869, 727051,
727719, 727719, 727805, 728277, 728563, 728656, 729096, 729103,
729293, 729297, 729300, 729317, 729395, 729622, 729817, 730170,
730296, 730594, 730685, 730826, 730963, 731209, 731403, 731504,
731514, 731626, 731635, 731643, 731644, 731644, 731689, 732124,
732143, 732234, 732284, 732284, 732479, 732761, 732783, 732951,
733667, 733781, 734118, 734231, 734869, 735051, 735293, 735527,
735613, 735694, 736962, 736962, 737970, 738066, 739313, 740055,
740234, 740301, 741806, 742126, 742741, 742860, 742860, 742911,
744041, 744104, 744238, 744687, 744877, 745055, 745478, 745525,
745620, 746012, 746304, 746366, 746801, 746953, 747348, 747667,
747954, 748846, 748849, 748973, 748975, 749191, 749210, 749759,
749831, 749911, 750008, 750092, 750542, 750595, 751038, 751107,
751276, 751451, 751916, 751941, 751956, 751998, 752671, 753451,
753602, 753617, 753845, 753925, 754014, 754340, 754447, 755031,
755087, 755147, 755245, 755683, 755987, 756032, 756996, 757058,
757229, 757818, 757821, 757822, 758112, 758910, 759227, 759889,
760257, 760703, 760792, 761104, 761337, 761519, 761830, 762455


What's New in Python 2.3 beta 1?
================================

*Release date: 25-Apr-2003*

Core and builtins
-----------------

- New format codes B, H, I, k and K have been implemented for
  PyArg_ParseTuple and PyBuild_Value.

- New built-in function sum(seq, start=0) returns the sum of all the
  items in iterable object seq, plus start (items are normally numbers,
  and cannot be strings).

- bool() called without arguments now returns False rather than
  raising an exception.  This is consistent with calling the
  constructors for the other built-in types -- called without argument
  they all return the false value of that type.  (SF patch #724135)

- In support of PEP 269 (making the pgen parser generator accessible
  from Python), some changes to the pgen code structure were made; a
  few files that used to be linked only with pgen are now linked with
  Python itself.

- The repr() of a weakref object now shows the __name__ attribute of
  the referenced object, if it has one.

- super() no longer ignores data descriptors, except __class__.  See
  the thread started at
  http://mail.python.org/pipermail/python-dev/2003-April/034338.html

- list.insert(i, x) now interprets negative i as it would be
  interpreted by slicing, so negative values count from the end of the
  list.  This was the only place where such an interpretation was not
  placed on a list index.

- range() now works even if the arguments are longs with magnitude
  larger than sys.maxint, as long as the total length of the sequence
  fits.  E.g., range(2**100, 2**101, 2**100) is the following list:
  [1267650600228229401496703205376L].  (SF patch #707427.)

- Some horridly obscure problems were fixed involving interaction
  between garbage collection and old-style classes with "ambitious"
  getattr hooks.  If an old-style instance didn't have a __del__ method,
  but did have a __getattr__ hook, and the instance became reachable
  only from an unreachable cycle, and the hook resurrected or deleted
  unreachable objects when asked to resolve "__del__", anything up to
  a segfault could happen.  That's been repaired.

- dict.pop now takes an optional argument specifying a default
  value to return if the key is not in the dict.  If a default is not
  given and the key is not found, a KeyError will still be raised.
  Parallel changes were made to UserDict.UserDict and UserDict.DictMixin.
  [SF patch #693753] (contributed by Michael Stone.)

- sys.getfilesystemencoding() was added to expose
  Py_FileSystemDefaultEncoding.

- New function sys.exc_clear() clears the current exception.  This is
  rarely needed, but can sometimes be useful to release objects
  referenced by the traceback held in sys.exc_info()[2].  (SF patch
  #693195.)

- On 64-bit systems, a dictionary could contain duplicate long/int keys
  if the key value was larger than 2**32.  See SF bug #689659.

- Fixed SF bug #663074. The codec system was using global static
  variables to store internal data. As a result, any attempts to use the
  unicode system with multiple active interpreters, or successive
  interpreter executions, would fail.

- "%c" % u"a" now returns a unicode string instead of raising a
  TypeError. u"%c" % 0xffffffff now raises a OverflowError instead
  of a ValueError to be consistent with "%c" % 256. See SF patch #710127.

Extension modules
-----------------

- The socket module now provides the functions inet_pton and inet_ntop
  for converting between string and packed representation of IP
  addresses.  There is also a new module variable, has_ipv6, which is
  True iff the current Python has IPv6 support.  See SF patch #658327.

- Tkinter wrappers around Tcl variables now pass objects directly
  to Tcl, instead of first converting them to strings.

- The .*? pattern in the re module is now special-cased to avoid the
  recursion limit.  (SF patch #720991 -- many thanks to Gary Herron
  and Greg Chapman.)

- New function sys.call_tracing() allows pdb to debug code
  recursively.

- New function gc.get_referents(obj) returns a list of objects
  directly referenced by obj.  In effect, it exposes what the object's
  tp_traverse slot does, and can be helpful when debugging memory
  leaks.

- The iconv module has been removed from this release.

- The platform-independent routines for packing floats in IEEE formats
  (struct.pack's <f, >f, <d, and >d codes; pickle and cPickle's protocol 1
  pickling of floats) ignored that rounding can cause a carry to
  propagate.  The worst consequence was that, in rare cases, <f and >f
  could produce strings that, when unpacked again, were a factor of 2
  away from the original float.  This has been fixed.  See SF bug
  #705836.

- New function time.tzset() provides access to the C library tzset()
  function, if supported.  (SF patch #675422.)

- Using createfilehandler, deletefilehandler, createtimerhandler functions
  on Tkinter.tkinter (_tkinter module) no longer crashes the interpreter.
  See SF bug #692416.

- Modified the fcntl.ioctl() function to allow modification of a passed
  mutable buffer (for details see the reference documentation).

- Made user requested changes to the itertools module.
  Subsumed the times() function into repeat().
  Added chain() and cycle().

- The rotor module is now deprecated; the encryption algorithm it uses
  is not believed to be secure, and including crypto code with Python
  has implications for exporting and importing it in various countries.

- The socket module now always uses the _socketobject wrapper class, even on
  platforms which have dup(2).  The makefile() method is built directly
  on top of the socket without duplicating the file descriptor, allowing
  timeouts to work properly.

Library
-------

- New generator function os.walk() is an easy-to-use alternative to
  os.path.walk().  See os module docs for details.  os.path.walk()
  isn't deprecated at this time, but may become deprecated in a
  future release.

- Added new module "platform" which provides a wide range of tools
  for querying platform dependent features.

- netrc now allows ASCII punctuation characters in passwords.

- shelve now supports the optional writeback argument, and exposes
  pickle protocol versions.

- Several methods of nntplib.NNTP have grown an optional file argument
  which specifies a file where to divert the command's output
  (already supported by the body() method).  (SF patch #720468)

- The self-documenting XML server library DocXMLRPCServer was added.

- Support for internationalized domain names has been added through
  the 'idna' and 'punycode' encodings, the 'stringprep' module, the
  'mkstringprep' tool, and enhancements to the socket and httplib
  modules.

- htmlentitydefs has two new dictionaries: name2codepoint maps
  HTML entity names to Unicode codepoints (as integers).
  codepoint2name is the reverse mapping. See SF patch #722017.

- pdb has a new command, "debug", which lets you step through
  arbitrary code from the debugger's (pdb) prompt.

- unittest.failUnlessEqual and its equivalent unittest.assertEqual now
  return 'not a == b' rather than 'a != b'.  This gives the desired
  result for classes that define __eq__ without defining __ne__.

- sgmllib now supports SGML marked sections, in particular the
  MS Office extensions.

- The urllib module now offers support for the iterator protocol.
  SF patch 698520 contributed by Brett Cannon.

- New module timeit provides a simple framework for timing the
  execution speed of expressions and statements.

- sets.Set objects now support mixed-type __eq__ and __ne__, instead
  of raising TypeError.  If x is a Set object and y is a non-Set object,
  x == y is False, and x != y is True.  This is akin to the change made
  for mixed-type comparisons of datetime objects in 2.3a2; more info
  about the rationale is in the NEWS entry for that.  See also SF bug
  report <http://www.python.org/sf/693121>.

- On Unix platforms, if os.listdir() is called with a Unicode argument,
  it now returns Unicode strings.  (This behavior was added earlier
  to the Windows NT/2k/XP version of os.listdir().)

- Distutils: both 'py_modules' and 'packages' keywords can now be specified
  in core.setup().  Previously you could supply one or the other, but
  not both of them.  (SF patch #695090 from Bernhard Herzog)

- New csv package makes it easy to read/write CSV files.

- Module shlex has been extended to allow posix-like shell parsings,
  including a split() function for easy spliting of quoted strings and
  commands. An iterator interface was also implemented.

Tools/Demos
-----------

- New script combinerefs.py helps analyze new PYTHONDUMPREFS output.
  See the module docstring for details.

Build
-----

- Fix problem building on OSF1 because the compiler only accepted
  preprocessor directives that start in column 1.  (SF bug #691793.)

C API
-----

- Added PyGC_Collect(), equivalent to calling gc.collect().

- PyThreadState_GetDict() was changed not to raise an exception or
  issue a fatal error when no current thread state is available.  This
  makes it possible to print dictionaries when no thread is active.

- LONG_LONG was renamed to PY_LONG_LONG.  Extensions that use this and
  need compatibility with previous versions can use this:

    #ifndef  PY_LONG_LONG
    #define  PY_LONG_LONG  LONG_LONG
    #endif

- Added PyObject_SelfIter() to fill the tp_iter slot for the
  typical case where the method returns its self argument.

- The extended type structure used for heap types (new-style
  classes defined by Python code using a class statement) is now
  exported from object.h as PyHeapTypeObject.  (SF patch #696193.)

New platforms
-------------

None this time.

Tests
-----

- test_timeout now requires -u network to be passed to regrtest to run.
  See SF bug #692988.

Windows
-------

- os.fsync() now exists on Windows, and calls the Microsoft _commit()
  function.

- New function winsound.MessageBeep() wraps the Win32 API
  MessageBeep().

Mac
---

- os.listdir() now returns Unicode strings on MacOS X when called with
  a Unicode argument. See the general news item under "Library".

- A new method MacOS.WMAvailable() returns true if it is safe to access
  the window manager, false otherwise.

- EasyDialogs dialogs are now movable-modal, and if the application is
  currently in the background they will ask to be moved to the foreground
  before displaying.

- OSA Scripting support has improved a lot, and gensuitemodule.py can now
  be used by mere mortals. The documentation is now also more or less
  complete.

- The IDE (in a framework build) now includes introductory documentation
  in Apple Help Viewer format.


What's New in Python 2.3 alpha 2?
=================================

*Release date: 19-Feb-2003*

Core and builtins
-----------------

- Negative positions returned from PEP 293 error callbacks are now
  treated as being relative to the end of the input string. Positions
  that are out of bounds raise an IndexError.

- sys.path[0] (the directory from which the script is loaded) is now
  turned into an absolute pathname, unless it is the empty string.
  (SF patch #664376.)

- Finally fixed the bug in compile() and exec where a string ending
  with an indented code block but no newline would raise SyntaxError.
  This would have been a four-line change in parsetok.c...  Except
  codeop.py depends on this behavior, so a compilation flag had to be
  invented that causes the tokenizer to revert to the old behavior;
  this required extra changes to 2 .h files, 2 .c files, and 2 .py
  files.  (Fixes SF bug #501622.)

- If a new-style class defines neither __new__ nor __init__, its
  constructor would ignore all arguments.  This is changed now: the
  constructor refuses arguments in this case.  This might break code
  that worked under Python 2.2.  The simplest fix is to add a no-op
  __init__: ``def __init__(self, *args, **kw): pass``.

- Through a bytecode optimizer bug (and I bet you didn't even know
  Python *had* a bytecode optimizer :-), "unsigned" hex/oct constants
  with a leading minus sign would come out with the wrong sign.
  ("Unsigned" hex/oct constants are those with a face value in the
  range sys.maxint+1 through sys.maxint*2+1, inclusive; these have
  always been interpreted as negative numbers through sign folding.)
  E.g. 0xffffffff is -1, and -(0xffffffff) is 1, but -0xffffffff would
  come out as -4294967295.  This was the case in Python 2.2 through
  2.2.2 and 2.3a1, and in Python 2.4 it will once again have that
  value, but according to PEP 237 it really needs to be 1 now.  This
  will be backported to Python 2.2.3 a well.  (SF #660455)

- int(s, base) sometimes sign-folds hex and oct constants; it only
  does this when base is 0 and s.strip() starts with a '0'.  When the
  sign is actually folded, as in int("0xffffffff", 0) on a 32-bit
  machine, which returns -1, a FutureWarning is now issued; in Python
  2.4, this will return 4294967295L, as do int("+0xffffffff", 0) and
  int("0xffffffff", 16) right now.  (PEP 347)

- super(X, x): x may now be a proxy for an X instance, i.e.
  issubclass(x.__class__, X) but not issubclass(type(x), X).

- isinstance(x, X): if X is a new-style class, this is now equivalent
  to issubclass(type(x), X) or issubclass(x.__class__, X).  Previously
  only type(x) was tested.  (For classic classes this was already the
  case.)

- compile(), eval() and the exec statement now fully support source code
  passed as unicode strings.

- int subclasses can be initialized with longs if the value fits in an int.
  See SF bug #683467.

- long(string, base) takes time linear in len(string) when base is a power
  of 2 now.  It used to take time quadratic in len(string).

- filter returns now Unicode results for Unicode arguments.

- raw_input can now return Unicode objects.

- List objects' sort() method now accepts None as the comparison function.
  Passing None is semantically identical to calling sort() with no
  arguments.

- Fixed crash when printing a subclass of str and __str__ returned self.
  See SF bug #667147.

- Fixed an invalid RuntimeWarning and an undetected error when trying
  to convert a long integer into a float which couldn't fit.
  See SF bug #676155.

- Function objects now have a __module__ attribute that is bound to
  the name of the module in which the function was defined.  This
  applies for C functions and methods as well as functions and methods
  defined in Python.  This attribute is used by pickle.whichmodule(),
  which changes the behavior of whichmodule slightly.  In Python 2.2
  whichmodule() returns "__main__" for functions that are not defined
  at the top-level of a module (examples: methods, nested functions).
  Now whichmodule() will return the proper module name.

Extension modules
-----------------

- operator.isNumberType() now checks that the object has a nb_int or
  nb_float slot, rather than simply checking whether it has a non-NULL
  tp_as_number pointer.

- The imp module now has ways to acquire and release the "import
  lock": imp.acquire_lock() and imp.release_lock().  Note: this is a
  reentrant lock, so releasing the lock only truly releases it when
  this is the last release_lock() call.  You can check with
  imp.lock_held().  (SF bug #580952 and patch #683257.)

- Change to cPickle to match pickle.py (see below and PEP 307).

- Fix some bugs in the parser module.  SF bug #678518.

- Thanks to Scott David Daniels, a subtle bug in how the zlib
  extension implemented flush() was fixed.  Scott also rewrote the
  zlib test suite using the unittest module.  (SF bug #640230 and
  patch #678531.)

- Added an itertools module containing high speed, memory efficient
  looping constructs inspired by tools from Haskell and SML.

- The SSL module now handles sockets with a timeout set correctly (SF
  patch #675750, fixing SF bug #675552).

- os/posixmodule has grown the sysexits.h constants (EX_OK and friends).

- Fixed broken threadstate swap in readline that could cause fatal
  errors when a readline hook was being invoked while a background
  thread was active.  (SF bugs #660476 and #513033.)

- fcntl now exposes the strops.h I_* constants.

- Fix a crash on Solaris that occurred when calling close() on
  an mmap'ed file which was already closed.  (SF patch #665913)

- Fixed several serious bugs in the zipimport implementation.

- datetime changes:

  The date class is now properly subclassable.  (SF bug #720908)

  The datetime and datetimetz classes have been collapsed into a single
  datetime class, and likewise the time and timetz classes into a single
  time class.  Previously, a datetimetz object with tzinfo=None acted
  exactly like a datetime object, and similarly for timetz.  This wasn't
  enough of a difference to justify distinct classes, and life is simpler
  now.

  today() and now() now round system timestamps to the closest
  microsecond <http://www.python.org/sf/661086>.  This repairs an
  irritation most likely seen on Windows systems.

  In dt.astimezone(tz), if tz.utcoffset(dt) returns a duration,
  ValueError is raised if tz.dst(dt) returns None (2.3a1 treated it
  as 0 instead, but a tzinfo subclass wishing to participate in
  time zone conversion has to take a stand on whether it supports
  DST; if you don't care about DST, then code dst() to return 0 minutes,
  meaning that DST is never in effect).

  The tzinfo methods utcoffset() and dst() must return a timedelta object
  (or None) now.  In 2.3a1 they could also return an int or long, but that
  was an unhelpfully redundant leftover from an earlier version wherein
  they couldn't return a timedelta.  TOOWTDI.

  The example tzinfo class for local time had a bug.  It was replaced
  by a later example coded by Guido.

  datetime.astimezone(tz) no longer raises an exception when the
  input datetime has no UTC equivalent in tz.  For typical "hybrid" time
  zones (a single tzinfo subclass modeling both standard and daylight
  time), this case can arise one hour per year, at the hour daylight time
  ends.  See new docs for details.  In short, the new behavior mimics
  the local wall clock's behavior of repeating an hour in local time.

  dt.astimezone() can no longer be used to convert between naive and aware
  datetime objects.  If you merely want to attach, or remove, a tzinfo
  object, without any conversion of date and time members, use
  dt.replace(tzinfo=whatever) instead, where "whatever" is None or a
  tzinfo subclass instance.

  A new method tzinfo.fromutc(dt) can be overridden in tzinfo subclasses
  to give complete control over how a UTC time is to be converted to
  a local time.  The default astimezone() implementation calls fromutc()
  as its last step, so a tzinfo subclass can affect that too by overriding
  fromutc().  It's expected that the default fromutc() implementation will
  be suitable as-is for "almost all" time zone subclasses, but the
  creativity of political time zone fiddling appears unbounded -- fromutc()
  allows the highly motivated to emulate any scheme expressible in Python.

  datetime.now():  The optional tzinfo argument was undocumented (that's
  repaired), and its name was changed to tz ("tzinfo" is overloaded enough
  already).  With a tz argument, now(tz) used to return the local date
  and time, and attach tz to it, without any conversion of date and time
  members.  This was less than useful.  Now now(tz) returns the current
  date and time as local time in tz's time zone, akin to ::

      tz.fromutc(datetime.utcnow().replace(tzinfo=utc))

  where "utc" is an instance of a tzinfo subclass modeling UTC.  Without
  a tz argument, now() continues to return the current local date and time,
  as a naive datetime object.

  datetime.fromtimestamp():  Like datetime.now() above, this had less than
  useful behavior when the optional tinzo argument was specified.  See
  also SF bug report <http://www.python.org/sf/660872>.

  date and datetime comparison:  In order to prevent comparison from
  falling back to the default compare-object-addresses strategy, these
  raised TypeError whenever they didn't understand the other object type.
  They still do, except when the other object has a "timetuple" attribute,
  in which case they return NotImplemented now.  This gives other
  datetime objects (e.g., mxDateTime) a chance to intercept the
  comparison.

  date, time, datetime and timedelta comparison:  When the exception
  for mixed-type comparisons in the last paragraph doesn't apply, if
  the comparison is == then False is returned, and if the comparison is
  != then True is returned.  Because dict lookup and the "in" operator
  only invoke __eq__, this allows, for example, ::

      if some_datetime in some_sequence:

  and ::

      some_dict[some_timedelta] = whatever

  to work as expected, without raising TypeError just because the
  sequence is heterogeneous, or the dict has mixed-type keys.  [This
  seems like a good idea to implement for all mixed-type comparisons
  that don't want to allow falling back to address comparison.]

  The constructors building a datetime from a timestamp could raise
  ValueError if the platform C localtime()/gmtime() inserted "leap
  seconds".  Leap seconds are ignored now.  On such platforms, it's
  possible to have timestamps that differ by a second, yet where
  datetimes constructed from them are equal.

  The pickle format of date, time and datetime objects has changed
  completely.  The undocumented pickler and unpickler functions no
  longer exist.  The undocumented __setstate__() and __getstate__()
  methods no longer exist either.

Library
-------

- The logging module was updated slightly; the WARN level was renamed
  to WARNING, and the matching function/method warn() to warning().

- The pickle and cPickle modules were updated with a new pickling
  protocol (documented by pickletools.py, see below) and several
  extensions to the pickle customization API (__reduce__, __setstate__
  etc.).  The copy module now uses more of the pickle customization
  API to copy objects that don't implement __copy__ or __deepcopy__.
  See PEP 307 for details.

- The distutils "register" command now uses http://www.python.org/pypi
  as the default repository.  (See PEP 301.)

- the platform dependent path related variables sep, altsep,
  pathsep, curdir, pardir and defpath are now defined in the platform
  dependent path modules (e.g. ntpath.py) rather than os.py, so these
  variables are now available via os.path.  They continue to be
  available from the os module.
  (see <http://www.python.org/sf/680789>).

- array.array was added to the types repr.py knows about (see
  <http://www.python.org/sf/680789>).

- The new pickletools.py contains lots of documentation about pickle
  internals, and supplies some helpers for working with pickles, such as
  a symbolic pickle disassembler.

- xmlrpclib.py now supports the built-in boolean type.

- py_compile has a new 'doraise' flag and a new PyCompileError
  exception.

- SimpleXMLRPCServer now supports CGI through the CGIXMLRPCRequestHandler
  class.

- The sets module now raises TypeError in __cmp__, to clarify that
  sets are not intended to be three-way-compared; the comparison
  operators are overloaded as subset/superset tests.

- Bastion.py and rexec.py are disabled.  These modules are not safe in
  Python 2.2. or 2.3.

- realpath is now exported when doing ``from poxixpath import *``.
  It is also exported for ntpath, macpath, and os2emxpath.
  See SF bug #659228.

- New module tarfile from Lars Gustäbel provides a comprehensive interface
  to tar archive files with transparent gzip and bzip2 compression.
  See SF patch #651082.

- urlparse can now parse imap:// URLs.  See SF feature request #618024.

- Tkinter.Canvas.scan_dragto() provides an optional parameter to support
  the gain value which is passed to Tk.  SF bug# 602259.

- Fix logging.handlers.SysLogHandler protocol when using UNIX domain sockets.
  See SF patch #642974.

- The dospath module was deleted.  Use the ntpath module when manipulating
  DOS paths from other platforms.

Tools/Demos
-----------

- Two new scripts (db2pickle.py and pickle2db.py) were added to the
  Tools/scripts directory to facilitate conversion from the old bsddb module
  to the new one.  While the user-visible API of the new module is
  compatible with the old one, it's likely that the version of the
  underlying database library has changed.  To convert from the old library,
  run the db2pickle.py script using the old version of Python to convert it
  to a pickle file.  After upgrading Python, run the pickle2db.py script
  using the new version of Python to reconstitute your database.  For
  example:

    % python2.2 db2pickle.py -h some.db > some.pickle
    % python2.3 pickle2db.py -h some.db.new < some.pickle

  Run the scripts without any args to get a usage message.


Build
-----

- The audio driver tests (test_ossaudiodev.py and
  test_linuxaudiodev.py) are no longer run by default.  This is
  because they don't always work, depending on your hardware and
  software.  To run these tests, you must use an invocation like ::

    ./python Lib/test/regrtest.py -u audio test_ossaudiodev

- On systems which build using the configure script, compiler flags which
  used to be lumped together using the OPT flag have been split into two
  groups, OPT and BASECFLAGS.  OPT is meant to carry just optimization- and
  debug-related flags like "-g" and "-O3".  BASECFLAGS is meant to carry
  compiler flags that are required to get a clean compile.  On some
  platforms (many Linux flavors in particular) BASECFLAGS will be empty by
  default.  On others, such as Mac OS X and SCO, it will contain required
  flags.  This change allows people building Python to override OPT without
  fear of clobbering compiler flags which are required to get a clean build.

- On Darwin/Mac OS X platforms, /sw/lib and /sw/include are added to the
  relevant search lists in setup.py.  This allows users building Python to
  take advantage of the many packages available from the fink project
  <http://fink.sf.net/>.

- A new Makefile target, scriptsinstall, installs a number of useful scripts
  from the Tools/scripts directory.

C API
-----

- PyEval_GetFrame() is now declared to return a ``PyFrameObject *``
  instead of a plain ``PyObject *``.  (SF patch #686601.)

- PyNumber_Check() now checks that the object has a nb_int or nb_float
  slot, rather than simply checking whether it has a non-NULL
  tp_as_number pointer.

- A C type that inherits from a base type that defines tp_as_buffer
  will now inherit the tp_as_buffer pointer if it doesn't define one.
  (SF #681367)

- The PyArg_Parse functions now issue a DeprecationWarning if a float
  argument is provided when an integer is specified (this affects the 'b',
  'B', 'h', 'H', 'i', and 'l' codes).  Future versions of Python will
  raise a TypeError.

Tests
-----

- Several tests weren't being run from regrtest.py (test_timeout.py,
  test_tarfile.py, test_netrc.py, test_multifile.py,
  test_importhooks.py and test_imp.py).  Now they are.  (Note to
  developers: please read Lib/test/README when creating a new test, to
  make sure to do it right!  All tests need to use either unittest or
  pydoc.)

- Added test_posix.py, a test suite for the posix module.

- Added test_hexoct.py, a test suite for hex/oct constant folding.

Windows
-------

- The timeout code for socket connect() didn't work right; this has
  now been fixed.  test_timeout.py should pass (at least most of the
  time).

- distutils' msvccompiler class now passes the preprocessor options to
  the resource compiler.  See SF patch #669198.

- The bsddb module now ships with Sleepycat's 4.1.25.NC, the latest
  release without strong cryptography.

- sys.path[0], if it contains a directory name, is now always an
  absolute pathname. (SF patch #664376.)

- The new logging package is now installed by the Windows installer.  It
  wasn't in 2.3a1 due to oversight.

Mac
---

- There are new dialogs EasyDialogs.AskFileForOpen, AskFileForSave
  and AskFolder. The old macfs.StandardGetFile and friends are deprecated.

- Most of the standard library now uses pathnames or FSRefs in preference
  of FSSpecs, and use the underlying Carbon.File and Carbon.Folder modules
  in stead of macfs. macfs will probably be deprecated in the future.

- Type Carbon.File.FSCatalogInfo and supporting methods have been implemented.
  This also makes macfs.FSSpec.SetDates() work again.

- There is a new module pimp, the package install manager for Python, and
  accompanying applet PackageManager. These allow you to easily download
  and install pretested extension packages either in source or binary
  form. Only in MacPython-OSX.

- Applets are now built with bundlebuilder in MacPython-OSX, which should make
  them more robust and also provides a path towards BuildApplication. The
  downside of this change is that applets can no longer be run from the
  Terminal window, this will hopefully be fixed in the 2.3b1.


What's New in Python 2.3 alpha 1?
=================================

*Release date: 31-Dec-2002*

Type/class unification and new-style classes
--------------------------------------------

- One can now assign to __bases__ and __name__ of new-style classes.

- dict() now accepts keyword arguments so that dict(one=1, two=2)
  is the equivalent of {"one": 1, "two": 2}.  Accordingly,
  the existing (but undocumented) 'items' keyword argument has
  been eliminated.  This means that dict(items=someMapping) now has
  a different meaning than before.

- int() now returns a long object if the argument is outside the
  integer range, so int("4" * 1000), int(1e200) and int(1L<<1000) will
  all return long objects instead of raising an OverflowError.

- Assignment to __class__ is disallowed if either the old or the new
  class is a statically allocated type object (such as defined by an
  extension module).  This prevents anomalies like 2.__class__ = bool.

- New-style object creation and deallocation have been sped up
  significantly; they are now faster than classic instance creation
  and deallocation.

- The __slots__ variable can now mention "private" names, and the
  right thing will happen (e.g. __slots__ = ["__foo"]).

- The built-ins slice() and buffer() are now callable types.  The
  types classobj (formerly class), code, function, instance, and
  instancemethod (formerly instance-method), which have no built-in
  names but are accessible through the types module, are now also
  callable.  The type dict-proxy is renamed to dictproxy.

- Cycles going through the __class__ link of a new-style instance are
  now detected by the garbage collector.

- Classes using __slots__ are now properly garbage collected.
  [SF bug 519621]

- Tightened the __slots__ rules: a slot name must be a valid Python
  identifier.

- The constructor for the module type now requires a name argument and
  takes an optional docstring argument.  Previously, this constructor
  ignored its arguments.  As a consequence, deriving a class from a
  module (not from the module type) is now illegal; previously this
  created an unnamed module, just like invoking the module type did.
  [SF bug 563060]

- A new type object, 'basestring', is added.  This is a common base type
  for 'str' and 'unicode', and can be used instead of
  types.StringTypes, e.g. to test whether something is "a string":
  isinstance(x, basestring) is True for Unicode and 8-bit strings.  This
  is an abstract base class and cannot be instantiated directly.

- Changed new-style class instantiation so that when C's __new__
  method returns something that's not a C instance, its __init__ is
  not called.  [SF bug #537450]

- Fixed super() to work correctly with class methods.  [SF bug #535444]

- If you try to pickle an instance of a class that has __slots__ but
  doesn't define or override __getstate__, a TypeError is now raised.
  This is done by adding a bozo __getstate__ to the class that always
  raises TypeError.  (Before, this would appear to be pickled, but the
  state of the slots would be lost.)

Core and builtins
-----------------

- Import from zipfiles is now supported.  The name of a zipfile placed
  on sys.path causes the import statement to look for importable Python
  modules (with .py, pyc and .pyo extensions) and packages inside the
  zipfile.  The zipfile import follows the specification (though not
  the sample implementation) of PEP 273.  The semantics of __path__ are
  compatible with those that have been implemented in Jython since
  Jython 2.1.

- PEP 302 has been accepted.  Although it was initially developed to
  support zipimport, it offers a new, general import hook mechanism.
  Several new variables have been added to the sys module:
  sys.meta_path, sys.path_hooks, and sys.path_importer_cache; these
  make extending the import statement much more convenient than
  overriding the __import__ built-in function.  For a description of
  these, see PEP 302.

- A frame object's f_lineno attribute can now be written to from a
  trace function to change which line will execute next.  A command to
  exploit this from pdb has been added.  [SF patch #643835]

- The _codecs support module for codecs.py was turned into a built-in
  module to assure that at least the built-in codecs are available
  to the Python parser for source code decoding according to PEP 263.

- issubclass now supports a tuple as the second argument, just like
  isinstance does. ``issubclass(X, (A, B))`` is equivalent to
  ``issubclass(X, A) or issubclass(X, B)``.

- Thanks to Armin Rigo, the last known way to provoke a system crash
  by cleverly arranging for a comparison function to mutate a list
  during a list.sort() operation has been fixed.  The effect of
  attempting to mutate a list, or even to inspect its contents or
  length, while a sort is in progress, is not defined by the language.
  The C implementation of Python 2.3 attempts to detect mutations,
  and raise ValueError if one occurs, but there's no guarantee that
  all mutations will be caught, or that any will be caught across
  releases or implementations.

- Unicode file name processing for Windows (PEP 277) is implemented.
  All platforms now have an os.path.supports_unicode_filenames attribute,
  which is set to True on Windows NT/2000/XP, and False elsewhere.

- Codec error handling callbacks (PEP 293) are implemented.
  Error handling in unicode.encode or str.decode can now be customized.

- A subtle change to the semantics of the built-in function intern():
  interned strings are no longer immortal.  You must keep a reference
  to the return value intern() around to get the benefit.

- Use of 'None' as a variable, argument or attribute name now
  issues a SyntaxWarning.  In the future, None may become a keyword.

- SET_LINENO is gone.  co_lnotab is now consulted to determine when to
  call the trace function.  C code that accessed f_lineno should call
  PyCode_Addr2Line instead (f_lineno is still there, but only kept up
  to date when there is a trace function set).

- There's a new warning category, FutureWarning.  This is used to warn
  about a number of situations where the value or sign of an integer
  result will change in Python 2.4 as a result of PEP 237 (integer
  unification).  The warnings implement stage B0 mentioned in that
  PEP.  The warnings are about the following situations:

    - Octal and hex literals without 'L' prefix in the inclusive range
      [0x80000000..0xffffffff]; these are currently negative ints, but
      in Python 2.4 they will be positive longs with the same bit
      pattern.

    - Left shifts on integer values that cause the outcome to lose
      bits or have a different sign than the left operand.  To be
      precise: x<<n where this currently doesn't yield the same value
      as long(x)<<n; in Python 2.4, the outcome will be long(x)<<n.

    - Conversions from ints to string that show negative values as
      unsigned ints in the inclusive range [0x80000000..0xffffffff];
      this affects the functions hex() and oct(), and the string
      formatting codes %u, %o, %x, and %X.  In Python 2.4, these will
      show signed values (e.g. hex(-1) currently returns "0xffffffff";
      in Python 2.4 it will return "-0x1").

- The bits manipulated under the cover by sys.setcheckinterval() have
  been changed.  Both the check interval and the ticker used to be
  per-thread values.  They are now just a pair of global variables.
  In addition, the default check interval was boosted from 10 to 100
  bytecode instructions.  This may have some effect on systems that
  relied on the old default value.  In particular, in multi-threaded
  applications which try to be highly responsive, response time will
  increase by some (perhaps imperceptible) amount.

- When multiplying very large integers, a version of the so-called
  Karatsuba algorithm is now used.  This is most effective if the
  inputs have roughly the same size.  If they both have about N digits,
  Karatsuba multiplication has O(N**1.58) runtime (the exponent is
  log_base_2(3)) instead of the previous O(N**2).  Measured results may
  be better or worse than that, depending on platform quirks.  Besides
  the O() improvement in raw instruction count, the Karatsuba algorithm
  appears to have much better cache behavior on extremely large integers
  (starting in the ballpark of a million bits).  Note that this is a
  simple implementation, and there's no intent here to compete with,
  e.g., GMP.  It gives a very nice speedup when it applies, but a package
  devoted to fast large-integer arithmetic should run circles around it.

- u'%c' will now raise a ValueError in case the argument is an
  integer outside the valid range of Unicode code point ordinals.

- The tempfile module has been overhauled for enhanced security.  The
  mktemp() function is now deprecated; new, safe replacements are
  mkstemp() (for files) and mkdtemp() (for directories), and the
  higher-level functions NamedTemporaryFile() and TemporaryFile().
  Use of some global variables in this module is also deprecated; the
  new functions have keyword arguments to provide the same
  functionality.  All Lib, Tools and Demo modules that used the unsafe
  interfaces have been updated to use the safe replacements.  Thanks
  to Zack Weinberg!

- When x is an object whose class implements __mul__ and __rmul__,
  1.0*x would correctly invoke __rmul__, but 1*x would erroneously
  invoke __mul__.  This was due to the sequence-repeat code in the int
  type.  This has been fixed now.

- Previously, "str1 in str2" required str1 to be a string of length 1.
  This restriction has been relaxed to allow str1 to be a string of
  any length.  Thus "'el' in 'hello world'" returns True now.

- File objects are now their own iterators.  For a file f, iter(f) now
  returns f (unless f is closed), and f.next() is similar to
  f.readline() when EOF is not reached; however, f.next() uses a
  readahead buffer that messes up the file position, so mixing
  f.next() and f.readline() (or other methods) doesn't work right.
  Calling f.seek() drops the readahead buffer, but other operations
  don't.  It so happens that this gives a nice additional speed boost
  to "for line in file:"; the xreadlines method and corresponding
  module are now obsolete.  Thanks to Oren Tirosh!

- Encoding declarations (PEP 263, phase 1) have been implemented.  A
  comment of the form "# -*- coding: <encodingname> -*-" in the first
  or second line of a Python source file indicates the encoding.

- list.sort() has a new implementation.  While cross-platform results
  may vary, and in data-dependent ways, this is much faster on many
  kinds of partially ordered lists than the previous implementation,
  and reported to be just as fast on randomly ordered lists on
  several major platforms.  This sort is also stable (if A==B and A
  precedes B in the list at the start, A precedes B after the sort too),
  although the language definition does not guarantee stability.  A
  potential drawback is that list.sort() may require temp space of
  len(list)*2 bytes (``*4`` on a 64-bit machine).  It's therefore possible
  for list.sort() to raise MemoryError now, even if a comparison function
  does not.  See <http://www.python.org/sf/587076> for full details.

- All standard iterators now ensure that, once StopIteration has been
  raised, all future calls to next() on the same iterator will also
  raise StopIteration.  There used to be various counterexamples to
  this behavior, which could caused confusion or subtle program
  breakage, without any benefits.  (Note that this is still an
  iterator's responsibility; the iterator framework does not enforce
  this.)

- Ctrl+C handling on Windows has been made more consistent with
  other platforms.  KeyboardInterrupt can now reliably be caught,
  and Ctrl+C at an interactive prompt no longer terminates the
  process under NT/2k/XP (it never did under Win9x).  Ctrl+C will
  interrupt time.sleep() in the main thread, and any child processes
  created via the popen family (on win2k; we can't make win9x work
  reliably) are also interrupted (as generally happens on for Linux/Unix.)
  [SF bugs 231273, 439992 and 581232]

- sys.getwindowsversion() has been added on Windows.  This
  returns a tuple with information about the version of Windows
  currently running.

- Slices and repetitions of buffer objects now consistently return
  a string.  Formerly, strings would be returned most of the time,
  but a buffer object would be returned when the repetition count
  was one or when the slice range was all inclusive.

- Unicode objects in sys.path are no longer ignored but treated
  as directory names.

- Fixed string.startswith and string.endswith built-in methods
  so they accept negative indices.  [SF bug 493951]

- Fixed a bug with a continue inside a try block and a yield in the
  finally clause.  [SF bug 567538]

- Most built-in sequences now support "extended slices", i.e. slices
  with a third "stride" parameter.  For example, "hello world"[::-1]
  gives "dlrow olleh".

- A new warning PendingDeprecationWarning was added to provide
  direction on features which are in the process of being deprecated.
  The warning will not be printed by default.  To see the pending
  deprecations, use -Walways::PendingDeprecationWarning::
  as a command line option or warnings.filterwarnings() in code.

- Deprecated features of xrange objects have been removed as
  promised.  The start, stop, and step attributes and the tolist()
  method no longer exist.  xrange repetition and slicing have been
  removed.

- New built-in function enumerate(x), from PEP 279.  Example:
  enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c").
  The argument can be an arbitrary iterable object.

- The assert statement no longer tests __debug__ at runtime.  This means
  that assert statements cannot be disabled by assigning a false value
  to __debug__.

- A method zfill() was added to str and unicode, that fills a numeric
  string to the left with zeros.  For example,
  "+123".zfill(6) -> "+00123".

- Complex numbers supported divmod() and the // and % operators, but
  these make no sense.  Since this was documented, they're being
  deprecated now.

- String and unicode methods lstrip(), rstrip() and strip() now take
  an optional argument that specifies the characters to strip.  For
  example, "Foo!!!?!?!?".rstrip("?!") -> "Foo".

- There's a new dictionary constructor (a class method of the dict
  class), dict.fromkeys(iterable, value=None).  It constructs a
  dictionary with keys taken from the iterable and all values set to a
  single value.  It can be used for building sets and for removing
  duplicates from sequences.

- Added a new dict method pop(key).  This removes and returns the
  value corresponding to key.  [SF patch #539949]

- A new built-in type, bool, has been added, as well as built-in
  names for its two values, True and False.  Comparisons and sundry
  other operations that return a truth value have been changed to
  return a bool instead.  Read PEP 285 for an explanation of why this
  is backward compatible.

- Fixed two bugs reported as SF #535905: under certain conditions,
  deallocating a deeply nested structure could cause a segfault in the
  garbage collector, due to interaction with the "trashcan" code;
  access to the current frame during destruction of a local variable
  could access a pointer to freed memory.

- The optional object allocator ("pymalloc") has been enabled by
  default.  The recommended practice for memory allocation and
  deallocation has been streamlined.  A header file is included,
  Misc/pymemcompat.h, which can be bundled with 3rd party extensions
  and lets them use the same API with Python versions from 1.5.2
  onwards.

- PyErr_Display will provide file and line information for all exceptions
  that have an attribute print_file_and_line, not just SyntaxErrors.

- The UTF-8 codec will now encode and decode Unicode surrogates
  correctly and without raising exceptions for unpaired ones.

- Universal newlines (PEP 278) is implemented.  Briefly, using 'U'
  instead of 'r' when opening a text file for reading changes the line
  ending convention so that any of '\r', '\r\n', and '\n' is
  recognized (even mixed in one file); all three are converted to
  '\n', the standard Python line end character.

- file.xreadlines() now raises a ValueError if the file is closed:
  Previously, an xreadlines object was returned which would raise
  a ValueError when the xreadlines.next() method was called.

- sys.exit() inadvertently allowed more than one argument.
  An exception will now be raised if more than one argument is used.

- Changed evaluation order of dictionary literals to conform to the
  general left to right evaluation order rule. Now {f1(): f2()} will
  evaluate f1 first.

- Fixed bug #521782: when a file was in non-blocking mode, file.read()
  could silently lose data or wrongly throw an unknown error.

- The sq_repeat, sq_inplace_repeat, sq_concat and sq_inplace_concat
  slots are now always tried after trying the corresponding nb_* slots.
  This fixes a number of minor bugs (see bug #624807).

- Fix problem with dynamic loading on 64-bit AIX (see bug #639945).

Extension modules
-----------------

- Added three operators to the operator module:
    operator.pow(a,b) which is equivalent to:  a**b.
    operator.is_(a,b) which is equivalent to:  a is b.
    operator.is_not(a,b) which is equivalent to:  a is not b.

- posix.openpty now works on all systems that have /dev/ptmx.

- A module zipimport exists to support importing code from zip
  archives.

- The new datetime module supplies classes for manipulating dates and
  times.  The basic design came from the Zope "fishbowl process", and
  favors practical commercial applications over calendar esoterica.  See

      http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage

- _tkinter now returns Tcl objects, instead of strings. Objects which
  have Python equivalents are converted to Python objects, other objects
  are wrapped. This can be configured through the wantobjects method,
  or Tkinter.wantobjects.

- The PyBSDDB wrapper around the Sleepycat Berkeley DB library has
  been added as the package bsddb.  The traditional bsddb module is
  still available in source code, but not built automatically anymore,
  and is now named bsddb185.  This supports Berkeley DB versions from
  3.0 to 4.1.  For help converting your databases from the old module (which
  probably used an obsolete version of Berkeley DB) to the new module, see
  the db2pickle.py and pickle2db.py scripts described in the Tools/Demos
  section above.

- unicodedata was updated to Unicode 3.2. It supports normalization
  and names for Hangul syllables and CJK unified ideographs.

- resource.getrlimit() now returns longs instead of ints.

- readline now dynamically adjusts its input/output stream if
  sys.stdin/stdout changes.

- The _tkinter module (and hence Tkinter) has dropped support for
  Tcl/Tk 8.0 and 8.1.  Only Tcl/Tk versions 8.2, 8.3 and 8.4 are
  supported.

- cPickle.BadPickleGet is now a class.

- The time stamps in os.stat_result are floating point numbers
  after stat_float_times has been called.

- If the size passed to mmap.mmap() is larger than the length of the
  file on non-Windows platforms, a ValueError is raised. [SF bug 585792]

- The xreadlines module is slated for obsolescence.

- The strptime function in the time module is now always available (a
  Python implementation is used when the C library doesn't define it).

- The 'new' module is no longer an extension, but a Python module that
  only exists for backwards compatibility.  Its contents are no longer
  functions but callable type objects.

- The bsddb.*open functions can now take 'None' as a filename.
  This will create a temporary in-memory bsddb that won't be
  written to disk.

- posix.getloadavg, posix.lchown, posix.killpg, posix.mknod, and
  posix.getpgid have been added where available.

- The locale module now exposes the C library's gettext interface. It
  also has a new function getpreferredencoding.

- A security hole ("double free") was found in zlib-1.1.3, a popular
  third party compression library used by some Python modules.  The
  hole was quickly plugged in zlib-1.1.4, and the Windows build of
  Python now ships with zlib-1.1.4.

- pwd, grp, and resource return enhanced tuples now, with symbolic
  field names.

- array.array is now a type object. A new format character
  'u' indicates Py_UNICODE arrays. For those, .tounicode and
  .fromunicode methods are available. Arrays now support __iadd__
  and __imul__.

- dl now builds on every system that has dlfcn.h.  Failure in case
  of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open
  is called.

- The sys module acquired a new attribute, api_version, which evaluates
  to the value of the PYTHON_API_VERSION macro with which the
  interpreter was compiled.

- Fixed bug #470582: sre module would return a tuple (None, 'a', 'ab')
  when applying the regular expression '^((a)c)?(ab)$' on 'ab'. It now
  returns (None, None, 'ab'), as expected. Also fixed handling of
  lastindex/lastgroup match attributes in similar cases. For example,
  when running the expression r'(a)(b)?b' over 'ab', lastindex must be
  1, not 2.

- Fixed bug #581080: sre scanner was not checking the buffer limit
  before increasing the current pointer. This was creating an infinite
  loop in the search function, once the pointer exceeded the buffer
  limit.

- The os.fdopen function now enforces a file mode starting with the
  letter 'r', 'w' or 'a', otherwise a ValueError is raised. This fixes
  bug #623464.

- The linuxaudiodev module is now deprecated; it is being replaced by
  ossaudiodev.  The interface has been extended to cover a lot more of
  OSS (see www.opensound.com), including most DSP ioctls and the
  OSS mixer API.  Documentation forthcoming in 2.3a2.

Library
-------

- imaplib.py now supports SSL (Tino Lange and Piers Lauder).

- Freeze's modulefinder.py has been moved to the standard library;
  slightly improved so it will issue less false missing submodule
  reports (see sf path #643711 for details).  Documentation will follow
  with Python 2.3a2.

- os.path exposes getctime.

- unittest.py now has two additional methods called assertAlmostEqual()
  and failIfAlmostEqual().  They implement an approximate comparison
  by rounding the difference between the two arguments and comparing
  the result to zero.  Approximate comparison is essential for
  unit tests of floating point results.

- calendar.py now depends on the new datetime module rather than
  the time module.  As a result, the range of allowable dates
  has been increased.

- pdb has a new 'j(ump)' command to select the next line to be
  executed.

- The distutils created windows installers now can run a
  postinstallation script.

- doctest.testmod can now be called without argument, which means to
  test the current module.

- When canceling a server that implemented threading with a keyboard
  interrupt, the server would shut down but not terminate (waiting on
  client threads). A new member variable, daemon_threads, was added to
  the ThreadingMixIn class in SocketServer.py to make it explicit that
  this behavior needs to be controlled.

- A new module, optparse, provides a fancy alternative to getopt for
  command line parsing.  It is a slightly modified version of Greg
  Ward's Optik package.

- UserDict.py now defines a DictMixin class which defines all dictionary
  methods for classes that already have a minimum mapping interface.
  This greatly simplifies writing classes that need to be substitutable
  for dictionaries (such as the shelve module).

- shelve.py now subclasses from UserDict.DictMixin.  Now shelve supports
  all dictionary methods.  This eases the transition to persistent
  storage for scripts originally written with dictionaries in mind.

- shelve.open and the various classes in shelve.py now accept an optional
  binary flag, which defaults to False.  If True, the values stored in the
  shelf are binary pickles.

- A new package, logging, implements the logging API defined by PEP
  282.  The code is written by Vinay Sajip.

- StreamReader, StreamReaderWriter and StreamRecoder in the codecs
  modules are iterators now.

- gzip.py now handles files exceeding 2GB.  Files over 4GB also work
  now (provided the OS supports it, and Python is configured with large
  file support), but in that case the underlying gzip file format can
  record only the least-significant 32 bits of the file size, so that
  some tools working with gzipped files may report an incorrect file
  size.

- xml.sax.saxutils.unescape has been added, to replace entity references
  with their entity value.

- Queue.Queue.{put,get} now support an optional timeout argument.

- Various features of Tk 8.4 are exposed in Tkinter.py. The multiple
  option of tkFileDialog is exposed as function askopenfile{,name}s.

- Various configure methods of Tkinter have been stream-lined, so that
  tag_configure, image_configure, window_configure now return a
  dictionary when invoked with no argument.

- Importing the readline module now no longer has the side effect of
  calling setlocale(LC_CTYPE, "").  The initial "C" locale, or
  whatever locale is explicitly set by the user, is preserved.  If you
  want repr() of 8-bit strings in your preferred encoding to preserve
  all printable characters of that encoding, you have to add the
  following code to your $PYTHONSTARTUP file or to your application's
  main():

    import locale
    locale.setlocale(locale.LC_CTYPE, "")

- shutil.move was added. shutil.copytree now reports errors as an
  exception at the end, instead of printing error messages.

- Encoding name normalization was generalized to not only
  replace hyphens with underscores, but also all other non-alphanumeric
  characters (with the exception of the dot which is used for Python
  package names during lookup). The aliases.py mapping was updated
  to the new standard.

- mimetypes has two new functions: guess_all_extensions() which
  returns a list of all known extensions for a mime type, and
  add_type() which adds one mapping between a mime type and
  an extension to the database.

- New module: sets, defines the class Set that implements a mutable
  set type using the keys of a dict to represent the set.  There's
  also a class ImmutableSet which is useful when you need sets of sets
  or when you need to use sets as dict keys, and a class BaseSet which
  is the base class of the two.

- Added random.sample(population,k) for random sampling without replacement.
  Returns a k length list of unique elements chosen from the population.

- random.randrange(-sys.maxint-1, sys.maxint) no longer raises
  OverflowError.  That is, it now accepts any combination of 'start'
  and 'stop' arguments so long as each is in the range of Python's
  bounded integers.

- Thanks to Raymond Hettinger, random.random() now uses a new core
  generator.  The Mersenne Twister algorithm is implemented in C,
  threadsafe, faster than the previous generator, has an astronomically
  large period (2**19937-1), creates random floats to full 53-bit
  precision, and may be the most widely tested random number generator
  in existence.

  The random.jumpahead(n) method has different semantics for the new
  generator.  Instead of jumping n steps ahead, it uses n and the
  existing state to create a new state.  This means that jumpahead()
  continues to support multi-threaded code needing generators of
  non-overlapping sequences.  However, it will break code which relies
  on jumpahead moving a specific number of steps forward.

  The attributes random.whseed and random.__whseed have no meaning for
  the new generator.  Code using these attributes should switch to a
  new class, random.WichmannHill which is provided for backward
  compatibility and to make an alternate generator available.

- New "algorithms" module: heapq, implements a heap queue.  Thanks to
  Kevin O'Connor for the code and François Pinard for an entertaining
  write-up explaining the theory and practical uses of heaps.

- New encoding for the Palm OS character set: palmos.

- binascii.crc32() and the zipfile module had problems on some 64-bit
  platforms.  These have been fixed.  On a platform with 8-byte C longs,
  crc32() now returns a signed-extended 4-byte result, so that its value
  as a Python int is equal to the value computed a 32-bit platform.

- xml.dom.minidom.toxml and toprettyxml now take an optional encoding
  argument.

- Some fixes in the copy module: when an object is copied through its
  __reduce__ method, there was no check for a __setstate__ method on
  the result [SF patch 565085]; deepcopy should treat instances of
  custom metaclasses the same way it treats instances of type 'type'
  [SF patch 560794].

- Sockets now support timeout mode.  After s.settimeout(T), where T is
  a float expressing seconds, subsequent operations raise an exception
  if they cannot be completed within T seconds.  To disable timeout
  mode, use s.settimeout(None).  There's also a module function,
  socket.setdefaulttimeout(T), which sets the default for all sockets
  created henceforth.

- getopt.gnu_getopt was added.  This supports GNU-style option
  processing, where options can be mixed with non-option arguments.

- Stop using strings for exceptions.  String objects used for
  exceptions are now classes deriving from Exception.  The objects
  changed were: Tkinter.TclError, bdb.BdbQuit, macpath.norm_error,
  tabnanny.NannyNag, and xdrlib.Error.

- Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE,
  BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte
  Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and
  big endian systems were added to the codecs module. The old names
  BOM32_* and BOM64_* were off by a factor of 2.

- Added conversion functions math.degrees() and math.radians().

- math.log() now takes an optional argument:  math.log(x[, base]).

- ftplib.retrlines() now tests for callback is None rather than testing
  for False.  Was causing an error when given a callback object which
  was callable but also returned len() as zero.  The change may
  create new breakage if the caller relied on the undocumented behavior
  and called with callback set to [] or some other False value not
  identical to None.

- random.gauss() uses a piece of hidden state used by nothing else,
  and the .seed() and .whseed() methods failed to reset it.  In other
  words, setting the seed didn't completely determine the sequence of
  results produced by random.gauss().  It does now.  Programs repeatedly
  mixing calls to a seed method with calls to gauss() may see different
  results now.

- The pickle.Pickler class grew a clear_memo() method to mimic that
  provided by cPickle.Pickler.

- difflib's SequenceMatcher class now does a dynamic analysis of
  which elements are so frequent as to constitute noise.  For
  comparing files as sequences of lines, this generally works better
  than the IS_LINE_JUNK function, and function ndiff's linejunk
  argument defaults to None now as a result.  A happy benefit is
  that SequenceMatcher may run much faster now when applied
  to large files with many duplicate lines (for example, C program
  text with lots of repeated "}" and "return NULL;" lines).

- New Text.dump() method in Tkinter module.

- New distutils commands for building packagers were added to
  support pkgtool on Solaris and swinstall on HP-UX.

- distutils now has a new abstract binary packager base class
  command/bdist_packager, which simplifies writing packagers.
  This will hopefully provide the missing bits to encourage
  people to submit more packagers, e.g. for Debian, FreeBSD
  and other systems.

- The UTF-16, -LE and -BE stream readers now raise a
  NotImplementedError for all calls to .readline(). Previously, they
  used to just produce garbage or fail with an encoding error --
  UTF-16 is a 2-byte encoding and the C lib's line reading APIs don't
  work well with these.

- compileall now supports quiet operation.

- The BaseHTTPServer now implements optional HTTP/1.1 persistent
  connections.

- socket module: the SSL support was broken out of the main
  _socket module C helper and placed into a new _ssl helper
  which now gets imported by socket.py if available and working.

- encodings package: added aliases for all supported IANA character
  sets

- ftplib: to safeguard the user's privacy, anonymous login will use
  "anonymous@" as default password, rather than the real user and host
  name.

- webbrowser: tightened up the command passed to os.system() so that
  arbitrary shell code can't be executed because a bogus URL was
  passed in.

- gettext.translation has an optional fallback argument, and
  gettext.find an optional all argument. Translations will now fallback
  on a per-message basis. The module supports plural forms, by means
  of gettext.[d]ngettext and Translation.[u]ngettext.

- distutils bdist commands now offer a --skip-build option.

- warnings.warn now accepts a Warning instance as first argument.

- The xml.sax.expatreader.ExpatParser class will no longer create
  circular references by using itself as the locator that gets passed
  to the content handler implementation.  [SF bug #535474]

- The email.Parser.Parser class now properly parses strings regardless
  of their line endings, which can be any of \r, \n, or \r\n (CR, LF,
  or CRLF).  Also, the Header class's constructor default arguments
  has changed slightly so that an explicit maxlinelen value is always
  honored, and so unicode conversion error handling can be specified.

- distutils' build_ext command now links C++ extensions with the C++
  compiler available in the Makefile or CXX environment variable, if
  running under \*nix.

- New module bz2: provides a comprehensive interface for the bz2 compression
  library.  It implements a complete file interface, one-shot (de)compression
  functions, and types for sequential (de)compression.

- New pdb command 'pp' which is like 'p' except that it pretty-prints
  the value of its expression argument.

- Now bdist_rpm distutils command understands a verify_script option in
  the config file, including the contents of the referred filename in
  the "%verifyscript" section of the rpm spec file.

- Fixed bug #495695: webbrowser module would run graphic browsers in a
  unix environment even if DISPLAY was not set. Also, support for
  skipstone browser was included.

- Fixed bug #636769: rexec would run unallowed code if subclasses of
  strings were used as parameters for certain functions.

Tools/Demos
-----------

- pygettext.py now supports globbing on Windows, and accepts module
  names in addition to accepting file names.

- The SGI demos (Demo/sgi) have been removed.  Nobody thought they
  were interesting any more.  (The SGI library modules and extensions
  are still there; it is believed that at least some of these are
  still used and useful.)

- IDLE supports the new encoding declarations (PEP 263); it can also
  deal with legacy 8-bit files if they use the locale's encoding. It
  allows non-ASCII strings in the interactive shell and executes them
  in the locale's encoding.

- freeze.py now produces binaries which can import shared modules,
  unlike before when this failed due to missing symbol exports in
  the generated binary.

Build
-----

- On Unix, IDLE is now installed automatically.

- The fpectl module is not built by default; it's dangerous or useless
  except in the hands of experts.

- The public Python C API will generally be declared using PyAPI_FUNC
  and PyAPI_DATA macros, while Python extension module init functions
  will be declared with PyMODINIT_FUNC.  DL_EXPORT/DL_IMPORT macros
  are deprecated.

- A bug was fixed that could cause COUNT_ALLOCS builds to segfault, or
  get into infinite loops, when a new-style class got garbage-collected.
  Unfortunately, to avoid this, the way COUNT_ALLOCS works requires
  that new-style classes be immortal in COUNT_ALLOCS builds.  Note that
  COUNT_ALLOCS is not enabled by default, in either release or debug
  builds, and that new-style classes are immortal only in COUNT_ALLOCS
  builds.

- Compiling out the cyclic garbage collector is no longer an option.
  The old symbol WITH_CYCLE_GC is now ignored, and Python.h arranges
  that it's always defined (for the benefit of any extension modules
  that may be conditionalizing on it).  A bonus is that any extension
  type participating in cyclic gc can choose to participate in the
  Py_TRASHCAN mechanism now too; in the absence of cyclic gc, this used
  to require editing the core to teach the trashcan mechanism about the
  new type.

- According to Annex F of the current C standard,

    The Standard C macro HUGE_VAL and its float and long double analogs,
    HUGE_VALF and HUGE_VALL, expand to expressions whose values are
    positive infinities.

  Python only uses the double HUGE_VAL, and only to #define its own symbol
  Py_HUGE_VAL.  Some platforms have incorrect definitions for HUGE_VAL.
  pyport.h used to try to worm around that, but the workarounds triggered
  other bugs on other platforms, so we gave up.  If your platform defines
  HUGE_VAL incorrectly, you'll need to #define Py_HUGE_VAL to something
  that works on your platform.  The only instance of this I'm sure about
  is on an unknown subset of Cray systems, described here:

  http://www.cray.com/swpubs/manuals/SN-2194_2.0/html-SN-2194_2.0/x3138.htm

  Presumably 2.3a1 breaks such systems.  If anyone uses such a system, help!

- The configure option --without-doc-strings can be used to remove the
  doc strings from the built-in functions and modules; this reduces the
  size of the executable.

- The universal newlines option (PEP 278) is on by default.  On Unix
  it can be disabled by passing --without-universal-newlines to the
  configure script.  On other platforms, remove
  WITH_UNIVERSAL_NEWLINES from pyconfig.h.

- On Unix, a shared libpython2.3.so can be created with --enable-shared.

- All uses of the CACHE_HASH, INTERN_STRINGS, and DONT_SHARE_SHORT_STRINGS
  preprocessor symbols were eliminated.  The internal decisions they
  controlled stopped being experimental long ago.

- The tools used to build the documentation now work under Cygwin as
  well as Unix.

- The bsddb and dbm module builds have been changed to try and avoid version
  skew problems and disable linkage with Berkeley DB 1.85 unless the
  installer knows what s/he's doing.  See the section on building these
  modules in the README file for details.

C API
-----

- PyNumber_Check() now returns true for string and unicode objects.
  This is a result of these types having a partially defined
  tp_as_number slot.  (This is not a feature, but an indication that
  PyNumber_Check() is not very useful to determine numeric behavior.
  It may be deprecated.)

- The string object's layout has changed: the pointer member
  ob_sinterned has been replaced by an int member ob_sstate.  On some
  platforms (e.g. most 64-bit systems) this may change the offset of
  the ob_sval member, so as a precaution the API_VERSION has been
  incremented.  The apparently unused feature of "indirect interned
  strings", supported by the ob_sinterned member, is gone.  Interned
  strings are now usually mortal; there is a new API,
  PyString_InternImmortal() that creates immortal interned strings.
  (The ob_sstate member can only take three values; however, while
  making it a char saves a few bytes per string object on average, in
  it also slowed things down a bit because ob_sval was no longer
  aligned.)

- The Py_InitModule*() functions now accept NULL for the 'methods'
  argument.  Modules without global functions are becoming more common
  now that factories can be types rather than functions.

- New C API PyUnicode_FromOrdinal() which exposes unichr() at C
  level.

- New functions PyErr_SetExcFromWindowsErr() and
  PyErr_SetExcFromWindowsErrWithFilename(). Similar to
  PyErr_SetFromWindowsErrWithFilename() and
  PyErr_SetFromWindowsErr(), but they allow to specify
  the exception type to raise. Available on Windows.

- Py_FatalError() is now declared as taking a const char* argument.  It
  was previously declared without const.  This should not affect working
  code.

- Added new macro PySequence_ITEM(o, i) that directly calls
  sq_item without rechecking that o is a sequence and without
  adjusting for negative indices.

- PyRange_New() now raises ValueError if the fourth argument is not 1.
  This is part of the removal of deprecated features of the xrange
  object.

- PyNumber_Coerce() and PyNumber_CoerceEx() now also invoke the type's
  coercion if both arguments have the same type but this type has the
  CHECKTYPES flag set.  This is to better support proxies.

- The type of tp_free has been changed from "``void (*)(PyObject *)``" to
  "``void (*)(void *)``".

- PyObject_Del, PyObject_GC_Del are now functions instead of macros.

- A type can now inherit its metatype from its base type.  Previously,
  when PyType_Ready() was called, if ob_type was found to be NULL, it
  was always set to &PyType_Type; now it is set to base->ob_type,
  where base is tp_base, defaulting to &PyObject_Type.

- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.

- The PyCore_* family of APIs have been removed.

- The "u#" parser marker will now pass through Unicode objects as-is
  without going through the buffer API.

- The enumerators of cmp_op have been renamed to use the prefix ``PyCmp_``.

- An old #define of ANY as void has been removed from pyport.h.  This
  hasn't been used since Python's pre-ANSI days, and the #define has
  been marked as obsolete since then.  SF bug 495548 says it created
  conflicts with other packages, so keeping it around wasn't harmless.

- Because Python's magic number scheme broke on January 1st, we decided
  to stop Python development.  Thanks for all the fish!

- Some of us don't like fish, so we changed Python's magic number
  scheme to a new one. See Python/import.c for details.

New platforms
-------------

- OpenVMS is now supported.

- AtheOS is now supported.

- the EMX runtime environment on OS/2 is now supported.

- GNU/Hurd is now supported.

Tests
-----

- The regrtest.py script's -u option now provides a way to say "allow
  all resources except this one."  For example, to allow everything
  except bsddb, give the option '-uall,-bsddb'.

Windows
-------

- The Windows distribution now ships with version 4.0.14 of the
  Sleepycat Berkeley database library.  This should be a huge
  improvement over the previous Berkeley DB 1.85, which had many
  bugs.
  XXX What are the licensing issues here?
  XXX If a user has a database created with a previous version of
  XXX     Python, what must they do to convert it?
  XXX I'm still not sure how to link this thing (see PCbuild/readme.txt).
  XXX The version # is likely to change before 2.3a1.

- The Windows distribution now ships with a Secure Sockets Library (SLL)
   module (_ssl.pyd)

- The Windows distribution now ships with Tcl/Tk version 8.4.1 (it
  previously shipped with Tcl/Tk 8.3.2).

- When Python is built under a Microsoft compiler, sys.version now
  includes the compiler version number (_MSC_VER).  For example, under
  MSVC 6, sys.version contains the substring "MSC v.1200 ".  1200 is
  the value of _MSC_VER under MSVC 6.

- Sometimes the uninstall executable (UNWISE.EXE) vanishes.  One cause
  of that has been fixed in the installer (disabled Wise's "delete in-
  use files" uninstall option).

- Fixed a bug in urllib's proxy handling in Windows.  [SF bug #503031]

- The installer now installs Start menu shortcuts under (the local
  equivalent of) "All Users" when doing an Admin install.

- file.truncate([newsize]) now works on Windows for all newsize values.
  It used to fail if newsize didn't fit in 32 bits, reflecting a
  limitation of MS _chsize (which is no longer used).

- os.waitpid() is now implemented for Windows, and can be used to block
  until a specified process exits.  This is similar to, but not exactly
  the same as, os.waitpid() on POSIX systems.  If you're waiting for
  a specific process whose pid was obtained from one of the spawn()
  functions, the same Python os.waitpid() code works across platforms.
  See the docs for details.  The docs were changed to clarify that
  spawn functions return, and waitpid requires, a process handle on
  Windows (not the same thing as a Windows process id).

- New tempfile.TemporaryFile implementation for Windows:  this doesn't
  need a TemporaryFileWrapper wrapper anymore, and should be immune
  to a nasty problem:  before 2.3, if you got a temp file on Windows, it
  got wrapped in an object whose close() method first closed the
  underlying file, then deleted the file.  This usually worked fine.
  However, the spawn family of functions on Windows create (at a low C
  level) the same set of open files in the spawned process Q as were
  open in the spawning process P.  If a temp file f was among them, then
  doing f.close() in P first closed P's C-level file handle on f, but Q's
  C-level file handle on f remained open, so the attempt in P to delete f
  blew up with a "Permission denied" error (Windows doesn't allow
  deleting open files).  This was surprising, subtle, and difficult to
  work around.

- The os module now exports all the symbolic constants usable with the
  low-level os.open() on Windows:  the new constants in 2.3 are
  O_NOINHERIT, O_SHORT_LIVED, O_TEMPORARY, O_RANDOM and O_SEQUENTIAL.
  The others were also available in 2.2:  O_APPEND, O_BINARY, O_CREAT,
  O_EXCL, O_RDONLY, O_RDWR, O_TEXT, O_TRUNC and O_WRONLY.  Contrary
  to Microsoft docs, O_SHORT_LIVED does not seem to imply O_TEMPORARY
  (so specify both if you want both; note that neither is useful unless
  specified with O_CREAT too).

Mac
----

- Mac/Relnotes is gone, the release notes are now here.

- Python (the OSX-only, unix-based version, not the OS9-compatible CFM
  version) now fully supports unicode strings as arguments to various file
  system calls, eg. open(), file(), os.stat() and os.listdir().

- The current naming convention for Python on the Macintosh is that MacPython
  refers to the unix-based OSX-only version, and MacPython-OS9 refers to the
  CFM-based version that runs on both OS9 and OSX.

- All MacPython-OS9 functionality is now available in an OSX unix build,
  including the Carbon modules, the IDE, OSA support, etc. A lot of this
  will only work correctly in a framework build, though, because you cannot
  talk to the window manager unless your application is run from a .app
  bundle. There is a command line tool "pythonw" that runs your script
  with an interpreter living in such a .app bundle, this interpreter should
  be used to run any Python script using the window manager (including
  Tkinter or wxPython scripts).

- Most of Mac/Lib has moved to Lib/plat-mac, which is again used both in
  MacPython-OSX and MacPython-OS9. The only modules remaining in Mac/Lib
  are specifically for MacPython-OS9 (CFM support, preference resources, etc).

- A new utility PythonLauncher will start a Python interpreter when a .py or
  .pyw script is double-clicked in the Finder. By default .py scripts are
  run with a normal Python interpreter in a Terminal window and .pyw
  files are run with a window-aware pythonw interpreter without a Terminal
  window, but all this can be customized.

- MacPython-OS9 is now Carbon-only, so it runs on Mac OS 9 or Mac OS X and
  possibly on Mac OS 8.6 with the right CarbonLib installed, but not on earlier
  releases.

- Many tools such as BuildApplet.py and gensuitemodule.py now support a command
  line interface too.

- All the Carbon classes are now PEP253 compliant, meaning that you can
  subclass them from Python. Most of the attributes have gone, you should
  now use the accessor function call API, which is also what Apple's
  documentation uses. Some attributes such as grafport.visRgn are still
  available for convenience.

- New Carbon modules File (implementing the APIs in Files.h and Aliases.h)
  and Folder (APIs from Folders.h). The old macfs built-in module is
  gone, and replaced by a Python wrapper around the new modules.

- Pathname handling should now be fully consistent: MacPython-OSX always uses
  unix pathnames and MacPython-OS9 always uses colon-separated Mac pathnames
  (also when running on Mac OS X).

- New Carbon modules Help and AH give access to the Carbon Help Manager.
  There are hooks in the IDE to allow accessing the Python documentation
  (and Apple's Carbon and Cocoa documentation) through the Help Viewer.
  See Mac/OSX/README for converting the Python documentation to a
  Help Viewer compatible form and installing it.

- OSA support has been redesigned and the generated Python classes now
  mirror the inheritance defined by the underlying OSA classes.

- MacPython no longer maps both \r and \n to \n on input for any text file.
  This feature has been replaced by universal newline support (PEP278).

- The default encoding for Python sourcefiles in MacPython-OS9 is no longer
  mac-roman (or whatever your local Mac encoding was) but "ascii", like on
  other platforms. If you really need sourcefiles with Mac characters in them
  you can change this in site.py.


What's New in Python 2.2 final?
===============================

*Release date: 21-Dec-2001*

Type/class unification and new-style classes
--------------------------------------------

- pickle.py, cPickle: allow pickling instances of new-style classes
  with a custom metaclass.

Core and builtins
-----------------

- weakref proxy object: when comparing, unwrap both arguments if both
  are proxies.

Extension modules
-----------------

- binascii.b2a_base64(): fix a potential buffer overrun when encoding
  very short strings.

- cPickle: the obscure "fast" mode was suspected of causing stack
  overflows on the Mac.  Hopefully fixed this by setting the recursion
  limit much smaller.  If the limit is too low (it only affects
  performance), you can change it by defining PY_CPICKLE_FAST_LIMIT
  when compiling cPickle.c (or in pyconfig.h).

Library
-------

- dumbdbm.py: fixed a dumb old bug (the file didn't get synched at
  close or delete time).

- rfc822.py: fixed a bug where the address '<>' was converted to None
  instead of an empty string (also fixes the email.Utils module).

- xmlrpclib.py: version 1.0.0; uses precision for doubles.

- test suite: the pickle and cPickle tests were not executing any code
  when run from the standard regression test.

Tools/Demos
-----------

Build
-----

C API
-----

New platforms
-------------

Tests
-----

Windows
-------

- distutils package: fixed broken Windows installers (bdist_wininst).

- tempfile.py: prevent mysterious warnings when TemporaryFileWrapper
  instances are deleted at process exit time.

- socket.py: prevent mysterious warnings when socket instances are
  deleted at process exit time.

- posixmodule.c: fix a Windows crash with stat() of a filename ending
  in backslash.

Mac
----

- The Carbon toolbox modules have been upgraded to Universal Headers
  3.4, and experimental CoreGraphics and CarbonEvents modules have
  been added.  All only for framework-enabled MacOSX.


What's New in Python 2.2c1?
===========================

*Release date: 14-Dec-2001*

Type/class unification and new-style classes
--------------------------------------------

- Guido's tutorial introduction to the new type/class features has
  been extensively updated.  See

      http://www.python.org/2.2/descrintro.html

  That remains the primary documentation in this area.

- Fixed a leak: instance variables declared with __slots__ were never
  deleted!

- The "delete attribute" method of descriptor objects is called
  __delete__, not __del__.  In previous releases, it was mistakenly
  called __del__, which created an unfortunate overloading condition
  with finalizers.  (The "get attribute" and "set attribute" methods
  are still called __get__ and __set__, respectively.)

- Some subtle issues with the super built-in were fixed:

  (a) When super itself is subclassed, its __get__ method would still
      return an instance of the base class (i.e., of super).

  (b) super(C, C()).__class__ would return C rather than super.  This
      is confusing.  To fix this, I decided to change the semantics of
      super so that it only applies to code attributes, not to data
      attributes.  After all, overriding data attributes is not
      supported anyway.

  (c) The __get__ method didn't check whether the argument was an
      instance of the type used in creation of the super instance.

- Previously, hash() of an instance of a subclass of a mutable type
  (list or dictionary) would return some value, rather than raising
  TypeError.  This has been fixed.  Also, directly calling
  dict.__hash__ and list.__hash__ now raises the same TypeError
  (previously, these were the same as object.__hash__).

- New-style objects now support deleting their __dict__.  This is for
  all intents and purposes equivalent to assigning a brand new empty
  dictionary, but saves space if the object is not used further.

Core and builtins
-----------------

- -Qnew now works as documented in PEP 238:  when -Qnew is passed on
  the command line, all occurrences of "/" use true division instead
  of classic division.  See the PEP for details.  Note that "all"
  means all instances in library and 3rd-party modules, as well as in
  your own code.  As the PEP says, -Qnew is intended for use only in
  educational environments with control over the libraries in use.
  Note that test_coercion.py in the standard Python test suite fails
  under -Qnew; this is expected, and won't be repaired until true
  division becomes the default (in the meantime, test_coercion is
  testing the current rules).

- complex() now only allows the first argument to be a string
  argument, and raises TypeError if either the second arg is a string
  or if the second arg is specified when the first is a string.

Extension modules
-----------------

- gc.get_referents was renamed to gc.get_referrers.

Library
-------

- Functions in the os.spawn() family now release the global interpreter
  lock around calling the platform spawn.  They should always have done
  this, but did not before 2.2c1.  Multithreaded programs calling
  an os.spawn function with P_WAIT will no longer block all Python threads
  until the spawned program completes.  It's possible that some programs
  relies on blocking, although more likely by accident than by design.

- webbrowser defaults to netscape.exe on OS/2 now.

- Tix.ResizeHandle exposes detach_widget, hide, and show.

- The charset alias windows_1252 has been added.

- types.StringTypes is a tuple containing the defined string types;
  usually this will be (str, unicode), but if Python was compiled
  without Unicode support it will be just (str,).

- The pulldom and minidom modules were synchronized to PyXML.

Tools/Demos
-----------

- A new script called Tools/scripts/google.py was added, which fires
  off a search on Google.

Build
-----

- Note that release builds of Python should arrange to define the
  preprocessor symbol NDEBUG on the command line (or equivalent).
  In the 2.2 pre-release series we tried to define this by magic in
  Python.h instead, but it proved to cause problems for extension
  authors.  The Unix, Windows and Mac builds now all define NDEBUG in
  release builds via cmdline (or equivalent) instead.  Ports to
  other platforms should do likewise.

- It is no longer necessary to use --with-suffix when building on a
  case-insensitive file system (such as Mac OS X HFS+). In the build
  directory an extension is used, but not in the installed python.

C API
-----

- New function PyDict_MergeFromSeq2() exposes the built-in dict
  constructor's logic for updating a dictionary from an iterable object
  producing key-value pairs.

- PyArg_ParseTupleAndKeywords() requires that the number of entries in
  the keyword list equal the number of argument specifiers.  This
  wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even
  dump core in some bad cases.  This has been repaired.  As a result,
  PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that
  previously went unchallenged.

New platforms
-------------

Tests
-----

Windows
-------

Mac
----

- In unix-Python on Mac OS X (and darwin) sys.platform is now "darwin",
  without any trailing digits.

- Changed logic for finding python home in Mac OS X framework Pythons.
  Now sys.executable points to the executable again, in stead of to
  the shared library. The latter is used only for locating the python
  home.


What's New in Python 2.2b2?
===========================

*Release date: 16-Nov-2001*

Type/class unification and new-style classes
--------------------------------------------

- Multiple inheritance mixing new-style and classic classes in the
  list of base classes is now allowed, so this works now:

      class Classic: pass
      class Mixed(Classic, object): pass

  The MRO (method resolution order) for each base class is respected
  according to its kind, but the MRO for the derived class is computed
  using new-style MRO rules if any base class is a new-style class.
  This needs to be documented.

- The new built-in dictionary() constructor, and dictionary type, have
  been renamed to dict.  This reflects a decade of common usage.

- dict() now accepts an iterable object producing 2-sequences.  For
  example, dict(d.items()) == d for any dictionary d.  The argument,
  and the elements of the argument, can be any iterable objects.

- New-style classes can now have a __del__ method, which is called
  when the instance is deleted (just like for classic classes).

- Assignment to object.__dict__ is now possible, for objects that are
  instances of new-style classes that have a __dict__ (unless the base
  class forbids it).

- Methods of built-in types now properly check for keyword arguments
  (formerly these were silently ignored).  The only built-in methods
  that take keyword arguments are __call__, __init__ and __new__.

- The socket function has been converted to a type; see below.

Core and builtins
-----------------

- Assignment to __debug__ raises SyntaxError at compile-time.  This
  was promised when 2.1c1 was released as "What's New in Python 2.1c1"
  (see below) says.

- Clarified the error messages for unsupported operands to an operator
  (like 1 + '').

Extension modules
-----------------

- mmap has a new keyword argument, "access", allowing a uniform way for
  both Windows and Unix users to create read-only, write-through and
  copy-on-write memory mappings.  This was previously possible only on
  Unix.  A new keyword argument was required to support this in a
  uniform way because the mmap() signatures had diverged across
  platforms.  Thanks to Jay T Miller for repairing this!

- By default, the gc.garbage list now contains only those instances in
  unreachable cycles that have __del__ methods; in 2.1 it contained all
  instances in unreachable cycles.  "Instances" here has been generalized
  to include instances of both new-style and old-style classes.

- The socket module defines a new method for socket objects,
  sendall().  This is like send() but may make multiple calls to
  send() until all data has been sent.  Also, the socket function has
  been converted to a subclassable type, like list and tuple (etc.)
  before it; socket and SocketType are now the same thing.

- Various bugfixes to the curses module.  There is now a test suite
  for the curses module (you have to run it manually).

- binascii.b2a_base64 no longer places an arbitrary restriction of 57
  bytes on its input.

Library
-------

- tkFileDialog exposes a Directory class and askdirectory
  convenience function.

- Symbolic group names in regular expressions must be unique.  For
  example, the regexp r'(?P<abc>)(?P<abc>)' is not allowed, because a
  single name can't mean both "group 1" and "group 2" simultaneously.
  Python 2.2 detects this error at regexp compilation time;
  previously, the error went undetected, and results were
  unpredictable.  Also in sre, the pattern.split(), pattern.sub(), and
  pattern.subn() methods have been rewritten in C.  Also, an
  experimental function/method finditer() has been added, which works
  like findall() but returns an iterator.

- Tix exposes more commands through the classes DirSelectBox,
  DirSelectDialog, ListNoteBook, Meter, CheckList, and the
  methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog,
  tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions.

- Traceback objects are now scanned by cyclic garbage collection, so
  cycles created by casual use of sys.exc_info() no longer cause
  permanent memory leaks (provided garbage collection is enabled).

- mimetypes.py has optional support for non-standard, but commonly
  found types.  guess_type() and guess_extension() now accept an
  optional 'strict' flag, defaulting to true, which controls whether
  recognize non-standard types or not.  A few non-standard types we
  know about have been added.  Also, when run as a script, there are
  new -l and -e options.

- statcache is now deprecated.

- email.Utils.formatdate() now produces the preferred RFC 2822 style
  dates with numeric timezones (it used to produce obsolete dates
  hard coded to "GMT" timezone).  An optional 'localtime' flag is
  added to produce dates in the local timezone, with daylight savings
  time properly taken into account.

- In pickle and cPickle, instead of masking errors in load() by
  transforming them into SystemError, we let the original exception
  propagate out.  Also, implement support for __safe_for_unpickling__
  in pickle, as it already was supported in cPickle.

Tools/Demos
-----------

Build
-----

- The dbm module is built using libdb1 if available.  The bsddb module
  is built with libdb3 if available.

- Misc/Makefile.pre.in has been removed by BDFL pronouncement.

C API
-----

- New function PySequence_Fast_GET_SIZE() returns the size of a non-
  NULL result from PySequence_Fast(), more quickly than calling
  PySequence_Size().

- New argument unpacking function PyArg_UnpackTuple() added.

- New functions PyObject_CallFunctionObjArgs() and
  PyObject_CallMethodObjArgs() have been added to make it more
  convenient and efficient to call functions and methods from C.

- PyArg_ParseTupleAndKeywords() no longer masks errors, so it's
  possible that this will propagate errors it didn't before.

- New function PyObject_CheckReadBuffer(), which returns true if its
  argument supports the single-segment readable buffer interface.

New platforms
-------------

- We've finally confirmed that this release builds on HP-UX 11.00,
  *with* threads, and passes the test suite.

- Thanks to a series of patches from Michael Muller, Python may build
  again under OS/2 Visual Age C++.

- Updated RISCOS port by Dietmar Schwertberger.

Tests
-----

- Added a test script for the curses module.  It isn't run automatically;
  regrtest.py must be run with '-u curses' to enable it.

Windows
-------

Mac
----

- PythonScript has been moved to unsupported and is slated to be
  removed completely in the next release.

- It should now be possible to build applets that work on both OS9 and
  OSX.

- The core is now linked with CoreServices not Carbon; as a side
  result, default 8bit encoding on OSX is now ASCII.

- Python should now build on OSX 10.1.1


What's New in Python 2.2b1?
===========================

*Release date: 19-Oct-2001*

Type/class unification and new-style classes
--------------------------------------------

- New-style classes are now always dynamic (except for built-in and
  extension types).  There is no longer a performance penalty, and I
  no longer see another reason to keep this baggage around.  One relic
  remains: the __dict__ of a new-style class is a read-only proxy; you
  must set the class's attribute to modify it.  As a consequence, the
  __defined__ attribute of new-style types no longer exists, for lack
  of need: there is once again only one __dict__ (although in the
  future a __cache__ may be resurrected with a similar function, if I
  can prove that it actually speeds things up).

- C.__doc__ now works as expected for new-style classes (in 2.2a4 it
  always returned None, even when there was a class docstring).

- doctest now finds and runs docstrings attached to new-style classes,
  class methods, static methods, and properties.

Core and builtins
-----------------

- A very subtle syntactical pitfall in list comprehensions was fixed.
  For example: [a+b for a in 'abc', for b in 'def'].  The comma in
  this example is a mistake.  Previously, this would silently let 'a'
  iterate over the singleton tuple ('abc',), yielding ['abcd', 'abce',
  'abcf'] rather than the intended ['ad', 'ae', 'af', 'bd', 'be',
  'bf', 'cd', 'ce', 'cf'].  Now, this is flagged as a syntax error.
  Note that [a for a in <singleton>] is a convoluted way to say
  [<singleton>] anyway, so it's not like any expressiveness is lost.

- getattr(obj, name, default) now only catches AttributeError, as
  documented, rather than returning the default value for all
  exceptions (which could mask bugs in a __getattr__ hook, for
  example).

- Weak reference objects are now part of the core and offer a C API.
  A bug which could allow a core dump when binary operations involved
  proxy reference has been fixed.  weakref.ReferenceError is now a
  built-in exception.

- unicode(obj) now behaves more like str(obj), accepting arbitrary
  objects, and calling a __unicode__ method if it exists.
  unicode(obj, encoding) and unicode(obj, encoding, errors) still
  require an 8-bit string or character buffer argument.

- isinstance() now allows any object as the first argument and a
  class, a type or something with a __bases__ tuple attribute for the
  second argument.  The second argument may also be a tuple of a
  class, type, or something with __bases__, in which case isinstance()
  will return true if the first argument is an instance of any of the
  things contained in the second argument tuple.  E.g.

  isinstance(x, (A, B))

  returns true if x is an instance of A or B.

Extension modules
-----------------

- thread.start_new_thread() now returns the thread ID (previously None).

- binascii has now two quopri support functions, a2b_qp and b2a_qp.

- readline now supports setting the startup_hook and the
  pre_event_hook, and adds the add_history() function.

- os and posix supports chroot(), setgroups() and unsetenv() where
  available.  The stat(), fstat(), statvfs() and fstatvfs() functions
  now return "pseudo-sequences" -- the various fields can now be
  accessed as attributes (e.g. os.stat("/").st_mtime) but for
  backwards compatibility they also behave as a fixed-length sequence.
  Some platform-specific fields (e.g. st_rdev) are only accessible as
  attributes.

- time: localtime(), gmtime() and strptime() now return a
  pseudo-sequence similar to the os.stat() return value, with
  attributes like tm_year etc.

- Decompression objects in the zlib module now accept an optional
  second parameter to decompress() that specifies the maximum amount
  of memory to use for the uncompressed data.

- optional SSL support in the socket module now exports OpenSSL
  functions RAND_add(), RAND_egd(), and RAND_status().  These calls
  are useful on platforms like Solaris where OpenSSL does not
  automatically seed its PRNG.  Also, the keyfile and certfile
  arguments to socket.ssl() are now optional.

- posixmodule (and by extension, the os module on POSIX platforms) now
  exports O_LARGEFILE, O_DIRECT, O_DIRECTORY, and O_NOFOLLOW.

Library
-------

- doctest now excludes functions and classes not defined by the module
  being tested, thanks to Tim Hochberg.

- HotShot, a new profiler implemented using a C-based callback, has
  been added.  This substantially reduces the overhead of profiling,
  but it is still quite preliminary.  Support modules and
  documentation will be added in upcoming releases (before 2.2 final).

- profile now produces correct output in situations where an exception
  raised in Python is cleared by C code (e.g. hasattr()).  This used
  to cause wrong output, including spurious claims of recursive
  functions and attribution of time spent to the wrong function.

  The code and documentation for the derived OldProfile and HotProfile
  profiling classes was removed.  The code hasn't worked for years (if
  you tried to use them, they raised exceptions).  OldProfile
  intended to reproduce the behavior of the profiler Python used more
  than 7 years ago, and isn't interesting anymore.  HotProfile intended
  to provide a faster profiler (but producing less information), and
  that's a worthy goal we intend to meet via a different approach (but
  without losing information).

- Profile.calibrate() has a new implementation that should deliver
  a much better system-specific calibration constant.  The constant can
  now be specified in an instance constructor, or as a Profile class or
  instance variable, instead of by editing profile.py's source code.
  Calibration must still be done manually (see the docs for the profile
  module).

  Note that Profile.calibrate() must be overridden by subclasses.
  Improving the accuracy required exploiting detailed knowledge of
  profiler internals; the earlier method abstracted away the details
  and measured a simplified model instead, but consequently computed
  a constant too small by a factor of 2 on some modern machines.

- quopri's encode and decode methods take an optional header parameter,
  which indicates whether output is intended for the header 'Q'
  encoding.

- The SocketServer.ThreadingMixIn class now closes the request after
  finish_request() returns.  (Not when it errors out though.)

- The nntplib module's NNTP.body() method has grown a 'file' argument
  to allow saving the message body to a file.

- The email package has added a class email.Parser.HeaderParser which
  only parses headers and does not recurse into the message's body.
  Also, the module/class MIMEAudio has been added for representing
  audio data (contributed by Anthony Baxter).

- ftplib should be able to handle files > 2GB.

- ConfigParser.getboolean() now also interprets TRUE, FALSE, YES, NO,
  ON, and OFF.

- xml.dom.minidom NodeList objects now support the length attribute
  and item() method as required by the DOM specifications.

Tools/Demos
-----------

- Demo/dns was removed.  It no longer serves any purpose; a package
  derived from it is now maintained by Anthony Baxter, see
  http://PyDNS.SourceForge.net.

- The freeze tool has been made more robust, and two new options have
  been added: -X and -E.

Build
-----

- configure will use CXX in LINKCC if CXX is used to build main() and
  the system requires to link a C++ main using the C++ compiler.

C API
-----

- The documentation for the tp_compare slot is updated to require that
  the return value must be -1, 0, 1; an arbitrary number <0 or >0 is
  not correct.  This is not yet enforced but will be enforced in
  Python 2.3; even later, we may use -2 to indicate errors and +2 for
  "NotImplemented".  Right now, -1 should be used for an error return.

- PyLong_AsLongLong() now accepts int (as well as long) arguments.
  Consequently, PyArg_ParseTuple's 'L' code also accepts int (as well
  as long) arguments.

- PyThread_start_new_thread() now returns a long int giving the thread
  ID, if one can be calculated; it returns -1 for error, 0 if no
  thread ID is calculated (this is an incompatible change, but only
  the thread module used this API).  This code has only really been
  tested on Linux and Windows; other platforms please beware (and
  report any bugs or strange behavior).

- PyUnicode_FromEncodedObject() no longer accepts Unicode objects as
  input.

New platforms
-------------

Tests
-----

Windows
-------

- Installer:  If you install IDLE, and don't disable file-extension
  registration, a new "Edit with IDLE" context (right-click) menu entry
  is created for .py and .pyw files.

- The signal module now supports SIGBREAK on Windows, thanks to Steven
  Scott.  Note that SIGBREAK is unique to Windows.  The default SIGBREAK
  action remains to call Win32 ExitProcess().  This can be changed via
  signal.signal().  For example::

      # Make Ctrl+Break raise KeyboardInterrupt, like Python's default Ctrl+C
      # (SIGINT) behavior.
      import signal
      signal.signal(signal.SIGBREAK, signal.default_int_handler)

      try:
          while 1:
              pass
      except KeyboardInterrupt:
          # We get here on Ctrl+C or Ctrl+Break now; if we had not changed
          # SIGBREAK, only on Ctrl+C (and Ctrl+Break would terminate the
          # program without the possibility for any Python-level cleanup).
          print "Clean exit"


What's New in Python 2.2a4?
===========================

*Release date: 28-Sep-2001*

Type/class unification and new-style classes
--------------------------------------------

- pydoc and inspect are now aware of new-style classes;
  e.g. help(list) at the interactive prompt now shows proper
  documentation for all operations on list objects.

- Applications using Jim Fulton's ExtensionClass module can now safely
  be used with Python 2.2.  In particular, Zope 2.4.1 now works with
  Python 2.2 (as well as with Python 2.1.1).  The Demo/metaclass
  examples also work again.  It is hoped that Gtk and Boost also work
  with 2.2a4 and beyond.  (If you can confirm this, please write
  webmaster@python.org; if there are still problems, please open a bug
  report on SourceForge.)

- property() now takes 4 keyword arguments:  fget, fset, fdel and doc.
  These map to read-only attributes 'fget', 'fset', 'fdel', and '__doc__'
  in the constructed property object.  fget, fset and fdel weren't
  discoverable from Python in 2.2a3.  __doc__ is new, and allows to
  associate a docstring with a property.

- Comparison overloading is now more completely implemented.  For
  example, a str subclass instance can properly be compared to a str
  instance, and it can properly overload comparison.  Ditto for most
  other built-in object types.

- The repr() of new-style classes has changed; instead of <type
  'M.Foo'> a new-style class is now rendered as <class 'M.Foo'>,
  *except* for built-in types, which are still rendered as <type
  'Foo'> (to avoid upsetting existing code that might parse or
  otherwise rely on repr() of certain type objects).

- The repr() of new-style objects is now always <Foo object at XXX>;
  previously, it was sometimes <Foo instance at XXX>.

- For new-style classes, what was previously called __getattr__ is now
  called __getattribute__.  This method, if defined, is called for
  *every* attribute access.  A new __getattr__ hook more similar to the
  one in classic classes is defined which is called only if regular
  attribute access raises AttributeError; to catch *all* attribute
  access, you can use __getattribute__ (for new-style classes).  If
  both are defined, __getattribute__ is called first, and if it raises
  AttributeError, __getattr__ is called.

- The __class__ attribute of new-style objects can be assigned to.
  The new class must have the same C-level object layout as the old
  class.

- The built-in file type can be subclassed now.  In the usual pattern,
  "file" is the name of the built-in type, and file() is a new built-in
  constructor, with the same signature as the built-in open() function.
  file() is now the preferred way to open a file.

- Previously, __new__ would only see sequential arguments passed to
  the type in a constructor call; __init__ would see both sequential
  and keyword arguments.  This made no sense whatsoever any more, so
  now both __new__ and __init__ see all arguments.

- Previously, hash() applied to an instance of a subclass of str or
  unicode always returned 0.  This has been repaired.

- Previously, an operation on an instance of a subclass of an
  immutable type (int, long, float, complex, tuple, str, unicode),
  where the subtype didn't override the operation (and so the
  operation was handled by the built-in type), could return that
  instance instead a value of the base type.  For example, if s was of
  a str subclass type, s[:] returned s as-is.  Now it returns a str
  with the same value as s.

- Provisional support for pickling new-style objects has been added.

Core
----

- file.writelines() now accepts any iterable object producing strings.

- PyUnicode_FromEncodedObject() now works very much like
  PyObject_Str(obj) in that it tries to use __str__/tp_str
  on the object if the object is not a string or buffer. This
  makes unicode() behave like str() when applied to non-string/buffer
  objects.

- PyFile_WriteObject now passes Unicode objects to the file's write
  method. As a result, all file-like objects which may be the target
  of a print statement must support Unicode objects, i.e. they must
  at least convert them into ASCII strings.

- Thread scheduling on Solaris should be improved; it is no longer
  necessary to insert a small sleep at the start of a thread in order
  to let other runnable threads be scheduled.

Library
-------

- StringIO.StringIO instances and cStringIO.StringIO instances support
  read character buffer compatible objects for their .write() methods.
  These objects are converted to strings and then handled as such
  by the instances.

- The "email" package has been added.  This is basically a port of the
  mimelib package <http://sf.net/projects/mimelib> with API changes
  and some implementations updated to use iterators and generators.

- difflib.ndiff() and difflib.Differ.compare() are generators now.  This
  restores the ability of Tools/scripts/ndiff.py to start producing output
  before the entire comparison is complete.

- StringIO.StringIO instances and cStringIO.StringIO instances support
  iteration just like file objects (i.e. their .readline() method is
  called for each iteration until it returns an empty string).

- The codecs module has grown four new helper APIs to access
  built-in codecs: getencoder(), getdecoder(), getreader(),
  getwriter().

- SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer)
  simplifies writing XML RPC servers.

- os.path.realpath(): a new function that returns the absolute pathname
  after interpretation of symbolic links.  On non-Unix systems, this
  is an alias for os.path.abspath().

- operator.indexOf() (PySequence_Index() in the C API) now works with any
  iterable object.

- smtplib now supports various authentication and security features of
  the SMTP protocol through the new login() and starttls() methods.

- hmac: a new module implementing keyed hashing for message
  authentication.

- mimetypes now recognizes more extensions and file types.  At the
  same time, some mappings not sanctioned by IANA were removed.

- The "compiler" package has been brought up to date to the state of
  Python 2.2 bytecode generation.  It has also been promoted from a
  Tool to a standard library package.  (Tools/compiler still exists as
  a sample driver.)

Build
-----

- Large file support (LFS) is now automatic when the platform supports
  it; no more manual configuration tweaks are needed.  On Linux, at
  least, it's possible to have a system whose C library supports large
  files but whose kernel doesn't; in this case, large file support is
  still enabled but doesn't do you any good unless you upgrade your
  kernel or share your Python executable with another system whose
  kernel has large file support.

- The configure script now supplies plausible defaults in a
  cross-compilation environment.  This doesn't mean that the supplied
  values are always correct, or that cross-compilation now works
  flawlessly -- but it's a first step (and it shuts up most of
  autoconf's warnings about AC_TRY_RUN).

- The Unix build is now a bit less chatty, courtesy of the parser
  generator.  The build is completely silent (except for errors) when
  using "make -s", thanks to a -q option to setup.py.

C API
-----

- The "structmember" API now supports some new flag bits to deny read
  and/or write access to attributes in restricted execution mode.

New platforms
-------------

- Compaq's iPAQ handheld, running the "familiar" Linux distribution
  (http://familiar.handhelds.org).

Tests
-----

- The "classic" standard tests, which work by comparing stdout to
  an expected-output file under Lib/test/output/, no longer stop at
  the first mismatch.  Instead the test is run to completion, and a
  variant of ndiff-style comparison is used to report all differences.
  This is much easier to understand than the previous style of reporting.

- The unittest-based standard tests now use regrtest's test_main()
  convention, instead of running as a side-effect of merely being
  imported.  This allows these tests to be run in more natural and
  flexible ways as unittests, outside the regrtest framework.

- regrtest.py is much better integrated with unittest and doctest now,
  especially in regard to reporting errors.

Windows
-------

- Large file support now also works for files > 4GB, on filesystems
  that support it (NTFS under Windows 2000).  See "What's New in
  Python 2.2a3" for more detail.


What's New in Python 2.2a3?
===========================

*Release Date: 07-Sep-2001*

Core
----

- Conversion of long to float now raises OverflowError if the long is too
  big to represent as a C double.

- The 3-argument builtin pow() no longer allows a third non-None argument
  if either of the first two arguments is a float, or if both are of
  integer types and the second argument is negative (in which latter case
  the arguments are converted to float, so this is really the same
  restriction).

- The builtin dir() now returns more information, and sometimes much
  more, generally naming all attributes of an object, and all attributes
  reachable from the object via its class, and from its class's base
  classes, and so on from them too.  Example:  in 2.2a2, dir([]) returned
  an empty list.  In 2.2a3,

  >>> dir([])
  ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
   '__eq__', '__ge__', '__getattr__', '__getitem__', '__getslice__',
   '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__',
   '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__repr__',
   '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__',
   'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
   'reverse', 'sort']

  dir(module) continues to return only the module's attributes, though.

- Overflowing operations on plain ints now return a long int rather
  than raising OverflowError.  This is a partial implementation of PEP
  237.  You can use -Wdefault::OverflowWarning to enable a warning for
  this situation, and -Werror::OverflowWarning to revert to the old
  OverflowError exception.

- A new command line option, -Q<arg>, is added to control run-time
  warnings for the use of classic division.  (See PEP 238.)  Possible
  values are -Qold, -Qwarn, -Qwarnall, and -Qnew.  The default is
  -Qold, meaning the / operator has its classic meaning and no
  warnings are issued.  Using -Qwarn issues a run-time warning about
  all uses of classic division for int and long arguments; -Qwarnall
  also warns about classic division for float and complex arguments
  (for use with fixdiv.py).
  [Note:  the remainder of this item (preserved below) became
  obsolete in 2.2c1 -- -Qnew has global effect in 2.2] ::

    Using -Qnew is questionable; it turns on new division by default, but
    only in the __main__ module.  You can usefully combine -Qwarn or
    -Qwarnall and -Qnew: this gives the __main__ module new division, and
    warns about classic division everywhere else.

- Many built-in types can now be subclassed.  This applies to int,
  long, float, str, unicode, and tuple.  (The types complex, list and
  dictionary can also be subclassed; this was introduced earlier.)
  Note that restrictions apply when subclassing immutable built-in
  types: you can only affect the value of the instance by overloading
  __new__.  You can add mutable attributes, and the subclass instances
  will have a __dict__ attribute, but you cannot change the "value"
  (as implemented by the base class) of an immutable subclass instance
  once it is created.

- The dictionary constructor now takes an optional argument, a
  mapping-like object, and initializes the dictionary from its
  (key, value) pairs.

- A new built-in type, super, has been added.  This facilitates making
  "cooperative super calls" in a multiple inheritance setting.  For an
  explanation, see http://www.python.org/2.2/descrintro.html#cooperation

- A new built-in type, property, has been added.  This enables the
  creation of "properties".  These are attributes implemented by
  getter and setter functions (or only one of these for read-only or
  write-only attributes), without the need to override __getattr__.
  See http://www.python.org/2.2/descrintro.html#property

- The syntax of floating-point and imaginary literals has been
  liberalized, to allow leading zeroes.  Examples of literals now
  legal that were SyntaxErrors before:

      00.0    0e3   0100j   07.5   00000000000000000008.

- An old tokenizer bug allowed floating point literals with an incomplete
  exponent, such as 1e and 3.1e-.  Such literals now raise SyntaxError.

Library
-------

- telnetlib includes symbolic names for the options, and support for
  setting an option negotiation callback. It also supports processing
  of suboptions.

- The new C standard no longer requires that math libraries set errno to
  ERANGE on overflow.  For platform libraries that exploit this new
  freedom, Python's overflow-checking was wholly broken.  A new overflow-
  checking scheme attempts to repair that, but may not be reliable on all
  platforms (C doesn't seem to provide anything both useful and portable
  in this area anymore).

- Asynchronous timeout actions are available through the new class
  threading.Timer.

- math.log and math.log10 now return sensible results for even huge
  long arguments.  For example, math.log10(10 ** 10000) ~= 10000.0.

- A new function, imp.lock_held(), returns 1 when the import lock is
  currently held.  See the docs for the imp module.

- pickle, cPickle and marshal on 32-bit platforms can now correctly read
  dumps containing ints written on platforms where Python ints are 8 bytes.
  When read on a box where Python ints are 4 bytes, such values are
  converted to Python longs.

- In restricted execution mode (using the rexec module), unmarshalling
  code objects is no longer allowed.  This plugs a security hole.

- unittest.TestResult instances no longer store references to tracebacks
  generated by test failures. This prevents unexpected dangling references
  to objects that should be garbage collected between tests.

Tools
-----

- Tools/scripts/fixdiv.py has been added which can be used to fix
  division operators as per PEP 238.

Build
-----

- If you are an adventurous person using Mac OS X you may want to look at
  Mac/OSX. There is a Makefile there that will build Python as a real Mac
  application, which can be used for experimenting with Carbon or Cocoa.
  Discussion of this on pythonmac-sig, please.

C API
-----

- New function PyObject_Dir(obj), like Python __builtin__.dir(obj).

- Note that PyLong_AsDouble can fail!  This has always been true, but no
  callers checked for it.  It's more likely to fail now, because overflow
  errors are properly detected now.  The proper way to check::

      double x = PyLong_AsDouble(some_long_object);
      if (x == -1.0 && PyErr_Occurred()) {
              /* The conversion failed. */
      }

- The GC API has been changed.  Extensions that use the old API will still
  compile but will not participate in GC.  To upgrade an extension
  module:

    - rename Py_TPFLAGS_GC to PyTPFLAGS_HAVE_GC

    - use PyObject_GC_New or PyObject_GC_NewVar to allocate objects and
      PyObject_GC_Del to deallocate them

    - rename PyObject_GC_Init to PyObject_GC_Track and PyObject_GC_Fini
      to PyObject_GC_UnTrack

    - remove PyGC_HEAD_SIZE from object size calculations

    - remove calls to PyObject_AS_GC and PyObject_FROM_GC

- Two new functions: PyString_FromFormat() and PyString_FromFormatV().
  These can be used safely to construct string objects from a
  sprintf-style format string (similar to the format string supported
  by PyErr_Format()).

New platforms
-------------

- Stephen Hansen contributed patches sufficient to get a clean compile
  under Borland C (Windows), but he reports problems running it and ran
  out of time to complete the port.  Volunteers?  Expect a MemoryError
  when importing the types module; this is probably shallow, and
  causing later failures too.

Tests
-----

Windows
-------

- Large file support is now enabled on Win32 platforms as well as on
  Win64.  This means that, for example, you can use f.tell() and f.seek()
  to manipulate files larger than 2 gigabytes (provided you have enough
  disk space, and are using a Windows filesystem that supports large
  partitions).  Windows filesystem limits:  FAT has a 2GB (gigabyte)
  filesize limit, and large file support makes no difference there.
  FAT32's limit is 4GB, and files >= 2GB are easier to use from Python now.
  NTFS has no practical limit on file size, and files of any size can be
  used from Python now.

- The w9xpopen hack is now used on Windows NT and 2000 too when COMPSPEC
  points to command.com (patch from Brian Quinlan).


What's New in Python 2.2a2?
===========================

*Release Date: 22-Aug-2001*

Build
-----

- Tim Peters developed a brand new Windows installer using Wise 8.1,
  generously donated to us by Wise Solutions.

- configure supports a new option --enable-unicode, with the values
  ucs2 and ucs4 (new in 2.2a1). With --disable-unicode, the Unicode
  type and supporting code is completely removed from the interpreter.

- A new configure option --enable-framework builds a Mac OS X framework,
  which "make frameworkinstall" will install. This provides a starting
  point for more mac-like functionality, join pythonmac-sig@python.org
  if you are interested in helping.

- The NeXT platform is no longer supported.

- The 'new' module is now statically linked.

Tools
-----

- The new Tools/scripts/cleanfuture.py can be used to automatically
  edit out obsolete future statements from Python source code.  See
  the module docstring for details.

Tests
-----

- regrtest.py now knows which tests are expected to be skipped on some
  platforms, allowing to give clearer test result output.  regrtest
  also has optional --use/-u switch to run normally disabled tests
  which require network access or consume significant disk resources.

- Several new tests in the standard test suite, with special thanks to
  Nick Mathewson.

Core
----

- The floor division operator // has been added as outlined in PEP
  238.  The / operator still provides classic division (and will until
  Python 3.0) unless "from __future__ import division" is included, in
  which case the / operator will provide true division.  The operator
  module provides truediv() and floordiv() functions.  Augmented
  assignment variants are included, as are the equivalent overloadable
  methods and C API methods.  See the PEP for a full discussion:
  <http://python.sf.net/peps/pep-0238.html>

- Future statements are now effective in simulated interactive shells
  (like IDLE).  This should "just work" by magic, but read Michael
  Hudson's "Future statements in simulated shells" PEP 264 for full
  details:  <http://python.sf.net/peps/pep-0264.html>.

- The type/class unification (PEP 252-253) was integrated into the
  trunk and is not so tentative any more (the exact specification of
  some features is still tentative).  A lot of work has done on fixing
  bugs and adding robustness and features (performance still has to
  come a long way).

- Warnings about a mismatch in the Python API during extension import
  now use the Python warning framework (which makes it possible to
  write filters for these warnings).

- A function's __dict__ (aka func_dict) will now always be a
  dictionary.  It used to be possible to delete it or set it to None,
  but now both actions raise TypeErrors.  It is still legal to set it
  to a dictionary object.  Getting func.__dict__ before any attributes
  have been assigned now returns an empty dictionary instead of None.

- A new command line option, -E, was added which disables the use of
  all environment variables, or at least those that are specifically
  significant to Python.  Usually those have a name starting with
  "PYTHON".  This was used to fix a problem where the tests fail if
  the user happens to have PYTHONHOME or PYTHONPATH pointing to an
  older distribution.

Library
-------

- New class Differ and new functions ndiff() and restore() in difflib.py.
  These package the algorithms used by the popular Tools/scripts/ndiff.py,
  for programmatic reuse.

- New function xml.sax.saxutils.quoteattr():  Quote an XML attribute
  value using the minimal quoting required for the value; more
  reliable than using xml.sax.saxutils.escape() for attribute values.

- Readline completion support for cmd.Cmd was added.

- Calling os.tempnam() or os.tmpnam() generate RuntimeWarnings.

- Added function threading.BoundedSemaphore()

- Added Ka-Ping Yee's cgitb.py module.

- The 'new' module now exposes the CO_xxx flags.

- The gc module offers the get_referents function.

New platforms
-------------

C API
-----

- Two new APIs PyOS_snprintf() and PyOS_vsnprintf() were added
  which provide a cross-platform implementations for the
  relatively new snprintf()/vsnprintf() C lib APIs. In contrast to
  the standard sprintf() and vsprintf() C lib APIs, these versions
  apply bounds checking on the used buffer which enhances protection
  against buffer overruns.

- Unicode APIs now use name mangling to assure that mixing interpreters
  and extensions using different Unicode widths is rendered next to
  impossible. Trying to import an incompatible Unicode-aware extension
  will result in an ImportError.  Unicode extensions writers must make
  sure to check the Unicode width compatibility in their extensions by
  using at least one of the mangled Unicode APIs in the extension.

- Two new flags METH_NOARGS and METH_O are available in method definition
  tables to simplify implementation of methods with no arguments and a
  single untyped argument. Calling such methods is more efficient than
  calling corresponding METH_VARARGS methods. METH_OLDARGS is now
  deprecated.

Windows
-------

- "import module" now compiles module.pyw if it exists and nothing else
  relevant is found.


What's New in Python 2.2a1?
===========================

*Release date: 18-Jul-2001*

Core
----

- TENTATIVELY, a large amount of code implementing much of what's
  described in PEP 252 (Making Types Look More Like Classes) and PEP
  253 (Subtyping Built-in Types) was added.  This will be released
  with Python 2.2a1.  Documentation will be provided separately
  through http://www.python.org/2.2/.  The purpose of releasing this
  with Python 2.2a1 is to test backwards compatibility.  It is
  possible, though not likely, that a decision is made not to release
  this code as part of 2.2 final, if any serious backwards
  incompatibilities are found during alpha testing that cannot be
  repaired.

- Generators were added; this is a new way to create an iterator (see
  below) using what looks like a simple function containing one or
  more 'yield' statements.  See PEP 255.  Since this adds a new
  keyword to the language, this feature must be enabled by including a
  future statement: "from __future__ import generators" (see PEP 236).
  Generators will become a standard feature in a future release
  (probably 2.3).  Without this future statement, 'yield' remains an
  ordinary identifier, but a warning is issued each time it is used.
  (These warnings currently don't conform to the warnings framework of
  PEP 230; we intend to fix this in 2.2a2.)

- The UTF-16 codec was modified to be more RFC compliant. It will now
  only remove BOM characters at the start of the string and then
  only if running in native mode (UTF-16-LE and -BE won't remove a
  leading BMO character).

- Strings now have a new method .decode() to complement the already
  existing .encode() method. These two methods provide direct access
  to the corresponding decoders and encoders of the registered codecs.

  To enhance the usability of the .encode() method, the special
  casing of Unicode object return values was dropped (Unicode objects
  were auto-magically converted to string using the default encoding).

  Both methods will now return whatever the codec in charge of the
  requested encoding returns as object, e.g. Unicode codecs will
  return Unicode objects when decoding is requested ("äöü".decode("latin-1")
  will return u"äöü"). This enables codec writer to create codecs
  for various simple to use conversions.

  New codecs were added to demonstrate these new features (the .encode()
  and .decode() columns indicate the type of the returned objects):

  +---------+-----------+-----------+-----------------------------+
  |Name     | .encode() | .decode() | Description                 |
  +=========+===========+===========+=============================+
  |uu       | string    | string    | UU codec (e.g. for email)   |
  +---------+-----------+-----------+-----------------------------+
  |base64   | string    | string    | base64 codec                |
  +---------+-----------+-----------+-----------------------------+
  |quopri   | string    | string    | quoted-printable codec      |
  +---------+-----------+-----------+-----------------------------+
  |zlib     | string    | string    | zlib compression            |
  +---------+-----------+-----------+-----------------------------+
  |hex      | string    | string    | 2-byte hex codec            |
  +---------+-----------+-----------+-----------------------------+
  |rot-13   | string    | Unicode   | ROT-13 Unicode charmap codec|
  +---------+-----------+-----------+-----------------------------+

- Some operating systems now support the concept of a default Unicode
  encoding for file system operations.  Notably, Windows supports 'mbcs'
  as the default.  The Macintosh will also adopt this concept in the medium
  term, although the default encoding for that platform will be other than
  'mbcs'.

  On operating system that support non-ASCII filenames, it is common for
  functions that return filenames (such as os.listdir()) to return Python
  string objects pre-encoded using the default file system encoding for
  the platform.  As this encoding is likely to be different from Python's
  default encoding, converting this name to a Unicode object before passing
  it back to the Operating System would result in a Unicode error, as Python
  would attempt to use its default encoding (generally ASCII) rather than
  the default encoding for the file system.

  In general, this change simply removes surprises when working with
  Unicode and the file system, making these operations work as you expect,
  increasing the transparency of Unicode objects in this context.
  See [????] for more details, including examples.

- Float (and complex) literals in source code were evaluated to full
  precision only when running from a .py file; the same code loaded from a
  .pyc (or .pyo) file could suffer numeric differences starting at about the
  12th significant decimal digit.  For example, on a machine with IEEE-754
  floating arithmetic,

      x = 9007199254740992.0
      print long(x)

  printed 9007199254740992 if run directly from .py, but 9007199254740000
  if from a compiled (.pyc or .pyo) file.  This was due to marshal using
  str(float) instead of repr(float) when building code objects.  marshal
  now uses repr(float) instead, which should reproduce floats to full
  machine precision (assuming the platform C float<->string I/O conversion
  functions are of good quality).

  This may cause floating-point results to change in some cases, and
  usually for the better, but may also cause numerically unstable
  algorithms to break.

- The implementation of dicts suffers fewer collisions, which has speed
  benefits.  However, the order in which dict entries appear in dict.keys(),
  dict.values() and dict.items() may differ from previous releases for a
  given dict.  Nothing is defined about this order, so no program should
  rely on it.  Nevertheless, it's easy to write test cases that rely on the
  order by accident, typically because of printing the str() or repr() of a
  dict to an "expected results" file.  See Lib/test/test_support.py's new
  sortdict(dict) function for a simple way to display a dict in sorted
  order.

- Many other small changes to dicts were made, resulting in faster
  operation along the most common code paths.

- Dictionary objects now support the "in" operator: "x in dict" means
  the same as dict.has_key(x).

- The update() method of dictionaries now accepts generic mapping
  objects.  Specifically the argument object must support the .keys()
  and __getitem__() methods.  This allows you to say, for example,
  {}.update(UserDict())

- Iterators were added; this is a generalized way of providing values
  to a for loop.  See PEP 234.  There's a new built-in function iter()
  to return an iterator.  There's a new protocol to get the next value
  from an iterator using the next() method (in Python) or the
  tp_iternext slot (in C).  There's a new protocol to get iterators
  using the __iter__() method (in Python) or the tp_iter slot (in C).
  Iterating (i.e. a for loop) over a dictionary generates its keys.
  Iterating over a file generates its lines.

- The following functions were generalized to work nicely with iterator
  arguments::

    map(), filter(), reduce(), zip()
    list(), tuple() (PySequence_Tuple() and PySequence_Fast() in C API)
    max(), min()
    join() method of strings
    extend() method of lists
    'x in y' and 'x not in y' (PySequence_Contains() in C API)
    operator.countOf() (PySequence_Count() in C API)
    right-hand side of assignment statements with multiple targets, such as ::
        x, y, z = some_iterable_object_returning_exactly_3_values

- Accessing module attributes is significantly faster (for example,
  random.random or os.path or yourPythonModule.yourAttribute).

- Comparing dictionary objects via == and != is faster, and now works even
  if the keys and values don't support comparisons other than ==.

- Comparing dictionaries in ways other than == and != is slower:  there were
  insecurities in the dict comparison implementation that could cause Python
  to crash if the element comparison routines for the dict keys and/or
  values mutated the dicts.  Making the code bulletproof slowed it down.

- Collisions in dicts are resolved via a new approach, which can help
  dramatically in bad cases.  For example, looking up every key in a dict
  d with d.keys() == [i << 16 for i in range(20000)] is approximately 500x
  faster now.  Thanks to Christian Tismer for pointing out the cause and
  the nature of an effective cure (last December! better late than never).

- repr() is much faster for large containers (dict, list, tuple).


Library
-------

- The constants ascii_letters, ascii_lowercase. and ascii_uppercase
  were added to the string module.  These a locale-independent
  constants, unlike letters, lowercase, and uppercase.  These are now
  use in appropriate locations in the standard library.

- The flags used in dlopen calls can now be configured using
  sys.setdlopenflags and queried using sys.getdlopenflags.

- Fredrik Lundh's xmlrpclib is now a standard library module.  This
  provides full client-side XML-RPC support.  In addition,
  Demo/xmlrpc/ contains two server frameworks (one SocketServer-based,
  one asyncore-based).  Thanks to Eric Raymond for the documentation.

- The xrange() object is simplified: it no longer supports slicing,
  repetition, comparisons, efficient 'in' checking, the tolist()
  method, or the start, stop and step attributes.  See PEP 260.

- A new function fnmatch.filter to filter lists of file names was added.

- calendar.py uses month and day names based on the current locale.

- strop is now *really* obsolete (this was announced before with 1.6),
  and issues DeprecationWarning when used (except for the four items
  that are still imported into string.py).

- Cookie.py now sorts key+value pairs by key in output strings.

- pprint.isrecursive(object) didn't correctly identify recursive objects.
  Now it does.

- pprint functions now much faster for large containers (tuple, list, dict).

- New 'q' and 'Q' format codes in the struct module, corresponding to C
  types "long long" and "unsigned long long" (on Windows, __int64).  In
  native mode, these can be used only when the platform C compiler supports
  these types (when HAVE_LONG_LONG is #define'd by the Python config
  process), and then they inherit the sizes and alignments of the C types.
  In standard mode, 'q' and 'Q' are supported on all platforms, and are
  8-byte integral types.

- The site module installs a new built-in function 'help' that invokes
  pydoc.help.  It must be invoked as 'help()'; when invoked as 'help',
  it displays a message reminding the user to use 'help()' or
  'help(object)'.

Tests
-----

- New test_mutants.py runs dict comparisons where the key and value
  comparison operators mutate the dicts randomly during comparison.  This
  rapidly causes Python to crash under earlier releases (not for the faint
  of heart:  it can also cause Win9x to freeze or reboot!).

- New test_pprint.py verifies that pprint.isrecursive() and
  pprint.isreadable() return sensible results.  Also verifies that simple
  cases produce correct output.

C API
-----

- Removed the unused last_is_sticky argument from the internal
  _PyTuple_Resize().  If this affects you, you were cheating.

What's New in Python 2.1 (final)?
=================================

We only changed a few things since the last release candidate, all in
Python library code:

- A bug in the locale module was fixed that affected locales which
  define no grouping for numeric formatting.

- A few bugs in the weakref module's implementations of weak
  dictionaries (WeakValueDictionary and WeakKeyDictionary) were fixed,
  and the test suite was updated to check for these bugs.

- An old bug in the os.path.walk() function (introduced in Python
  2.0!) was fixed: a non-existent file would cause an exception
  instead of being ignored.

- Fixed a few bugs in the new symtable module found by Neil Norwitz's
  PyChecker.


What's New in Python 2.1c2?
===========================

A flurry of small changes, and one showstopper fixed in the nick of
time made it necessary to release another release candidate.  The list
here is the *complete* list of patches (except version updates):

Core

- Tim discovered a nasty bug in the dictionary code, caused by
  PyDict_Next() calling dict_resize(), and the GC code's use of
  PyDict_Next() violating an assumption in dict_items().  This was
  fixed with considerable amounts of band-aid, but the net effect is a
  saner and more robust implementation.

- Made a bunch of symbols static that were accidentally global.

Build and Ports

- The setup.py script didn't check for a new enough version of zlib
  (1.1.3 is needed).  Now it does.

- Changed "make clean" target to also remove shared libraries.

- Added a more general warning about the SGI Irix optimizer to README.

Library

- Fix a bug in urllib.basejoin("http://host", "../file.html") which
  omitted the slash between host and file.html.

- The mailbox module's _Mailbox class contained a completely broken
  and undocumented seek() method.  Ripped it out.

- Fixed a bunch of typos in various library modules (urllib2, smtpd,
  sgmllib, netrc, chunk) found by Neil Norwitz's PyChecker.

- Fixed a few last-minute bugs in unittest.

Extensions

- Reverted the patch to the OpenSSL code in socketmodule.c to support
  RAND_status() and the EGD, and the subsequent patch that tried to
  fix it for pre-0.9.5 versions; the problem with the patch is that on
  some systems it issues a warning whenever socket is imported, and
  that's unacceptable.

Tests

- Fixed the pickle tests to work with "import test.test_pickle".

- Tweaked test_locale.py to actually run the test Windows.

- In distutils/archive_util.py, call zipfile.ZipFile() with mode "w",
  not "wb" (which is not a valid mode at all).

- Fix pstats browser crashes.  Import readline if it exists to make
  the user interface nicer.

- Add "import thread" to the top of test modules that import the
  threading module (test_asynchat and test_threadedtempfile).  This
  prevents test failures caused by a broken threading module resulting
  from a previously caught failed import.

- Changed test_asynchat.py to set the SO_REUSEADDR option; this was
  needed on some platforms (e.g. Solaris 8) when the tests are run
  twice in succession.

- Skip rather than fail test_sunaudiodev if no audio device is found.


What's New in Python 2.1c1?
===========================

This list was significantly updated when 2.1c2 was released; the 2.1c1
release didn't mention most changes that were actually part of 2.1c1:

Legal

- Copyright was assigned to the Python Software Foundation (PSF) and a
  PSF license (very similar to the CNRI license) was added.

- The CNRI copyright notice was updated to include 2001.

Core

- After a public outcry, assignment to __debug__ is no longer illegal;
  instead, a warning is issued.  It will become illegal in 2.2.

- Fixed a core dump with "%#x" % 0, and changed the semantics so that
  "%#x" now always prepends "0x", even if the value is zero.

- Fixed some nits in the bytecode compiler.

- Fixed core dumps when calling certain kinds of non-functions.

- Fixed various core dumps caused by reference count bugs.

Build and Ports

- Use INSTALL_SCRIPT to install script files.

- New port: SCO Unixware 7, by Billy G. Allie.

- Updated RISCOS port.

- Updated BeOS port and notes.

- Various other porting problems resolved.

Library

- The TERMIOS and SOCKET modules are now truly obsolete and
  unnecessary.  Their symbols are incorporated in the termios and
  socket modules.

- Fixed some 64-bit bugs in pickle, cPickle, and struct, and added
  better tests for pickling.

- threading: make Condition.wait() robust against KeyboardInterrupt.

- zipfile: add support to zipfile to support opening an archive
  represented by an open file rather than a file name.  Fix bug where
  the archive was not properly closed.  Fixed a bug in this bugfix
  where flush() was called for a read-only file.

- imputil: added an uninstall() method to the ImportManager.

- Canvas: fixed bugs in lower() and tkraise() methods.

- SocketServer: API change (added overridable close_request() method)
  so that the TCP server can explicitly close the request.

- pstats: Eric Raymond added a simple interactive statistics browser,
  invoked when the module is run as a script.

- locale: fixed a problem in format().

- webbrowser: made it work when the BROWSER environment variable has a
  value like "/usr/bin/netscape".  Made it auto-detect Konqueror for
  KDE 2.  Fixed some other nits.

- unittest: changes to allow using a different exception than
  AssertionError, and added a few more function aliases.  Some other
  small changes.

- urllib, urllib2: fixed redirect problems and a coupleof other nits.

- asynchat: fixed a critical bug in asynchat that slipped through the
  2.1b2 release.  Fixed another rare bug.

- Fix some unqualified except: clauses (always a bad code example).

XML

- pyexpat: new API get_version_string().

- Fixed some minidom bugs.

Extensions

- Fixed a core dump in _weakref.  Removed the weakref.mapping()
  function (it adds nothing to the API).

- Rationalized the use of header files in the readline module, to make
  it compile (albeit with some warnings) with the very recent readline
  4.2, without breaking for earlier versions.

- Hopefully fixed a buffering problem in linuxaudiodev.

- Attempted a fix to make the OpenSSL support in the socket module
  work again with pre-0.9.5 versions of OpenSSL.

Tests

- Added a test case for asynchat and asyncore.

- Removed coupling between tests where one test failing could break
  another.

Tools

- Ping added an interactive help browser to pydoc, fixed some nits
  in the rest of the pydoc code, and added some features to his
  inspect module.

- An updated python-mode.el version 4.1 which integrates Ken
  Manheimer's pdbtrack.el.  This makes debugging Python code via pdb
  much nicer in XEmacs and Emacs.  When stepping through your program
  with pdb, in either the shell window or the *Python* window, the
  source file and line will be tracked by an arrow.  Very cool!

- IDLE: syntax warnings in interactive mode are changed into errors.

- Some improvements to Tools/webchecker (ignore some more URL types,
  follow some more links).

- Brought the Tools/compiler package up to date.


What's New in Python 2.1 beta 2?
================================

(Unlisted are many fixed bugs, more documentation, etc.)

Core language, builtins, and interpreter

- The nested scopes work (enabled by "from __future__ import
  nested_scopes") is completed; in particular, the future now extends
  into code executed through exec, eval() and execfile(), and into the
  interactive interpreter.

- When calling a base class method (e.g. BaseClass.__init__(self)),
  this is now allowed even if self is not strictly spoken a class
  instance (e.g. when using metaclasses or the Don Beaudry hook).

- Slice objects are now comparable but not hashable; this prevents
  dict[:] from being accepted but meaningless.

- Complex division is now calculated using less braindead algorithms.
  This doesn't change semantics except it's more likely to give useful
  results in extreme cases.  Complex repr() now uses full precision
  like float repr().

- sgmllib.py now calls handle_decl() for simple <!...> declarations.

- It is illegal to assign to the name __debug__, which is set when the
  interpreter starts.  It is effectively a compile-time constant.

- A warning will be issued if a global statement for a variable
  follows a use or assignment of that variable.

Standard library

- unittest.py, a unit testing framework by Steve Purcell (PyUNIT,
  inspired by JUnit), is now part of the standard library.  You now
  have a choice of two testing frameworks: unittest requires you to
  write testcases as separate code, doctest gathers them from
  docstrings.  Both approaches have their advantages and
  disadvantages.

- A new module Tix was added, which wraps the Tix extension library
  for Tk.  With that module, it is not necessary to statically link
  Tix with _tkinter, since Tix will be loaded with Tcl's "package
  require" command.  See Demo/tix/.

- tzparse.py is now obsolete.

- In gzip.py, the seek() and tell() methods are removed -- they were
  non-functional anyway, and it's better if callers can test for their
  existence with hasattr().

Python/C API

- PyDict_Next(): it is now safe to call PyDict_SetItem() with a key
  that's already in the dictionary during a PyDict_Next() iteration.
  This used to fail occasionally when a dictionary resize operation
  could be triggered that would rehash all the keys.  All other
  modifications to the dictionary are still off-limits during a
  PyDict_Next() iteration!

- New extended APIs related to passing compiler variables around.

- New abstract APIs PyObject_IsInstance(), PyObject_IsSubclass()
  implement isinstance() and issubclass().

- Py_BuildValue() now has a "D" conversion to create a Python complex
  number from a Py_complex C value.

- Extensions types which support weak references must now set the
  field allocated for the weak reference machinery to NULL themselves;
  this is done to avoid the cost of checking each object for having a
  weakly referencable type in PyObject_INIT(), since most types are
  not weakly referencable.

- PyFrame_FastToLocals() and PyFrame_LocalsToFast() copy bindings for
  free variables and cell variables to and from the frame's f_locals.

- Variants of several functions defined in pythonrun.h have been added
  to support the nested_scopes future statement.  The variants all end
  in Flags and take an extra argument, a PyCompilerFlags *; examples:
  PyRun_AnyFileExFlags(), PyRun_InteractiveLoopFlags().  These
  variants may be removed in Python 2.2, when nested scopes are
  mandatory.

Distutils

- the sdist command now writes a PKG-INFO file, as described in PEP 241,
  into the release tree.

- several enhancements to the bdist_wininst command from Thomas Heller
  (an uninstaller, more customization of the installer's display)

- from Jack Jansen: added Mac-specific code to generate a dialog for
  users to specify the command-line (because providing a command-line with
  MacPython is awkward).  Jack also made various fixes for the Mac
  and the Metrowerks compiler.

- added 'platforms' and 'keywords' to the set of metadata that can be
  specified for a distribution.

- applied patches from Jason Tishler to make the compiler class work with
  Cygwin.


What's New in Python 2.1 beta 1?
================================

Core language, builtins, and interpreter

- Following an outcry from the community about the amount of code
  broken by the nested scopes feature introduced in 2.1a2, we decided
  to make this feature optional, and to wait until Python 2.2 (or at
  least 6 months) to make it standard.  The option can be enabled on a
  per-module basis by adding "from __future__ import nested_scopes" at
  the beginning of a module (before any other statements, but after
  comments and an optional docstring).  See PEP 236 (Back to the
  __future__) for a description of the __future__ statement.  PEP 227
  (Statically Nested Scopes) has been updated to reflect this change,
  and to clarify the semantics in a number of endcases.

- The nested scopes code, when enabled, has been hardened, and most
  bugs and memory leaks in it have been fixed.

- Compile-time warnings are now generated for a number of conditions
  that will break or change in meaning when nested scopes are enabled:

  - Using "from...import *" or "exec" without in-clause in a function
    scope that also defines a lambda or nested function with one or
    more free (non-local) variables.  The presence of the import* or
    bare exec makes it impossible for the compiler to determine the
    exact set of local variables in the outer scope, which makes it
    impossible to determine the bindings for free variables in the
    inner scope.  To avoid the warning about import *, change it into
    an import of explicitly name object, or move the import* statement
    to the global scope; to avoid the warning about bare exec, use
    exec...in... (a good idea anyway -- there's a possibility that
    bare exec will be deprecated in the future).

  - Use of a global variable in a nested scope with the same name as a
    local variable in a surrounding scope.  This will change in
    meaning with nested scopes: the name in the inner scope will
    reference the variable in the outer scope rather than the global
    of the same name.  To avoid the warning, either rename the outer
    variable, or use a global statement in the inner function.

- An optional object allocator has been included.  This allocator is
  optimized for Python objects and should be faster and use less memory
  than the standard system allocator.  It is not enabled by default
  because of possible thread safety problems.  The allocator is only
  protected by the Python interpreter lock and it is possible that some
  extension modules require a thread safe allocator.  The object
  allocator can be enabled by providing the "--with-pymalloc" option to
  configure.

Standard library

- pyexpat now detects the expat version if expat.h defines it. A
  number of additional handlers are provided, which are only available
  since expat 1.95. In addition, the methods SetParamEntityParsing and
  GetInputContext of Parser objects are available with 1.95.x
  only. Parser objects now provide the ordered_attributes and
  specified_attributes attributes. A new module expat.model was added,
  which offers a number of additional constants if 1.95.x is used.

- xml.dom offers the new functions registerDOMImplementation and
  getDOMImplementation.

- xml.dom.minidom offers a toprettyxml method. A number of DOM
  conformance issues have been resolved. In particular, Element now
  has an hasAttributes method, and the handling of namespaces was
  improved.

- Ka-Ping Yee contributed two new modules: inspect.py, a module for
  getting information about live Python code, and pydoc.py, a module
  for interactively converting docstrings to HTML or text.
  Tools/scripts/pydoc, which is now automatically installed into
  <prefix>/bin, uses pydoc.py to display documentation; try running
  "pydoc -h" for instructions.  "pydoc -g" pops up a small GUI that
  lets you browse the module docstrings using a web browser.

- New library module difflib.py, primarily packaging the SequenceMatcher
  class at the heart of the popular ndiff.py file-comparison tool.

- doctest.py (a framework for verifying Python code examples in docstrings)
  is now part of the std library.

Windows changes

- A new entry in the Start menu, "Module Docs", runs "pydoc -g" -- a
  small GUI that lets you browse the module docstrings using your
  default web browser.

- Import is now case-sensitive.  PEP 235 (Import on Case-Insensitive
  Platforms) is implemented.  See

      http://python.sourceforge.net/peps/pep-0235.html

  for full details, especially the "Current Lower-Left Semantics" section.
  The new Windows import rules are simpler than before:

  A. If the PYTHONCASEOK environment variable exists, same as
     before:  silently accept the first case-insensitive match of any
     kind; raise ImportError if none found.

  B. Else search sys.path for the first case-sensitive match; raise
     ImportError if none found.

  The same rules have been implemented on other platforms with case-
  insensitive but case-preserving filesystems too (including Cygwin, and
  several flavors of Macintosh operating systems).

- winsound module:  Under Win9x, winsound.Beep() now attempts to simulate
  what it's supposed to do (and does do under NT and 2000) via direct
  port manipulation.  It's unknown whether this will work on all systems,
  but it does work on my Win98SE systems now and was known to be useless on
  all Win9x systems before.

- Build:  Subproject _test (effectively) renamed to _testcapi.

New platforms

- 2.1 should compile and run out of the box under MacOS X, even using HFS+.
  Thanks to Steven Majewski!

- 2.1 should compile and run out of the box on Cygwin.  Thanks to Jason
  Tishler!

- 2.1 contains new files and patches for RISCOS, thanks to Dietmar
  Schwertberger!  See RISCOS/README for more information -- it seems
  that because of the bizarre filename conventions on RISCOS, no port
  to that platform is easy.


What's New in Python 2.1 alpha 2?
=================================

Core language, builtins, and interpreter

- Scopes nest.  If a name is used in a function or class, but is not
  local, the definition in the nearest enclosing function scope will
  be used.  One consequence of this change is that lambda statements
  could reference variables in the namespaces where the lambda is
  defined.  In some unusual cases, this change will break code.

  In all previous version of Python, names were resolved in exactly
  three namespaces -- the local namespace, the global namespace, and
  the builtins namespace.  According to this old definition, if a
  function A is defined within a function B, the names bound in B are
  not visible in A.  The new rules make names bound in B visible in A,
  unless A contains a name binding that hides the binding in B.

  Section 4.1 of the reference manual describes the new scoping rules
  in detail.  The test script in Lib/test/test_scope.py demonstrates
  some of the effects of the change.

  The new rules will cause existing code to break if it defines nested
  functions where an outer function has local variables with the same
  name as globals or builtins used by the inner function.  Example:

    def munge(str):
        def helper(x):
            return str(x)
        if type(str) != type(''):
            str = helper(str)
        return str.strip()

  Under the old rules, the name str in helper() is bound to the
  built-in function str().  Under the new rules, it will be bound to
  the argument named str and an error will occur when helper() is
  called.

- The compiler will report a SyntaxError if "from ... import *" occurs
  in a function or class scope.  The language reference has documented
  that this case is illegal, but the compiler never checked for it.
  The recent introduction of nested scope makes the meaning of this
  form of name binding ambiguous.  In a future release, the compiler
  may allow this form when there is no possibility of ambiguity.

- repr(string) is easier to read, now using hex escapes instead of octal,
  and using \t, \n and \r instead of \011, \012 and \015 (respectively):

  >>> "\texample \r\n" + chr(0) + chr(255)
  '\texample \r\n\x00\xff'         # in 2.1
  '\011example \015\012\000\377'   # in 2.0

- Functions are now compared and hashed by identity, not by value, since
  the func_code attribute is writable.

- Weak references (PEP 205) have been added.  This involves a few
  changes in the core, an extension module (_weakref), and a Python
  module (weakref).  The weakref module is the public interface.  It
  includes support for "explicit" weak references, proxy objects, and
  mappings with weakly held values.

- A 'continue' statement can now appear in a try block within the body
  of a loop.  It is still not possible to use continue in a finally
  clause.

Standard library

- mailbox.py now has a new class, PortableUnixMailbox which is
  identical to UnixMailbox but uses a more portable scheme for
  determining From_ separators.  Also, the constructors for all the
  classes in this module have a new optional `factory' argument, which
  is a callable used when new message classes must be instantiated by
  the next() method.

- random.py is now self-contained, and offers all the functionality of
  the now-deprecated whrandom.py.  See the docs for details.  random.py
  also supports new functions getstate() and setstate(), for saving
  and restoring the internal state of the generator; and jumpahead(n),
  for quickly forcing the internal state to be the same as if n calls to
  random() had been made.  The latter is particularly useful for multi-
  threaded programs, creating one instance of the random.Random() class for
  each thread, then using .jumpahead() to force each instance to use a
  non-overlapping segment of the full period.

- random.py's seed() function is new.  For bit-for-bit compatibility with
  prior releases, use the whseed function instead.  The new seed function
  addresses two problems:  (1) The old function couldn't produce more than
  about 2**24 distinct internal states; the new one about 2**45 (the best
  that can be done in the Wichmann-Hill generator).  (2) The old function
  sometimes produced identical internal states when passed distinct
  integers, and there was no simple way to predict when that would happen;
  the new one guarantees to produce distinct internal states for all
  arguments in [0, 27814431486576L).

- The socket module now supports raw packets on Linux.  The socket
  family is AF_PACKET.

- test_capi.py is a start at running tests of the Python C API.  The tests
  are implemented by the new Modules/_testmodule.c.

- A new extension module, _symtable, provides provisional access to the
  internal symbol table used by the Python compiler.  A higher-level
  interface will be added on top of _symtable in a future release.

- Removed the obsolete soundex module.

- xml.dom.minidom now uses the standard DOM exceptions. Node supports
  the isSameNode method; NamedNodeMap the get method.

- xml.sax.expatreader supports the lexical handler property; it
  generates comment, startCDATA, and endCDATA events.

Windows changes

- Build procedure:  the zlib project is built in a different way that
  ensures the zlib header files used can no longer get out of synch with
  the zlib binary used.  See PCbuild\readme.txt for details.  Your old
  zlib-related directories can be deleted; you'll need to download fresh
  source for zlib and unpack it into a new directory.

- Build:  New subproject _test for the benefit of test_capi.py (see above).

- Build:  New subproject _symtable, for new DLL _symtable.pyd (a nascent
  interface to some Python compiler internals).

- Build:  Subproject ucnhash is gone, since the code was folded into the
  unicodedata subproject.

What's New in Python 2.1 alpha 1?
=================================

Core language, builtins, and interpreter

- There is a new Unicode companion to the PyObject_Str() API
  called PyObject_Unicode(). It behaves in the same way as the
  former, but assures that the returned value is an Unicode object
  (applying the usual coercion if necessary).

- The comparison operators support "rich comparison overloading" (PEP
  207).  C extension types can provide a rich comparison function in
  the new tp_richcompare slot in the type object.  The cmp() function
  and the C function PyObject_Compare() first try the new rich
  comparison operators before trying the old 3-way comparison.  There
  is also a new C API PyObject_RichCompare() (which also falls back on
  the old 3-way comparison, but does not constrain the outcome of the
  rich comparison to a Boolean result).

  The rich comparison function takes two objects (at least one of
  which is guaranteed to have the type that provided the function) and
  an integer indicating the opcode, which can be Py_LT, Py_LE, Py_EQ,
  Py_NE, Py_GT, Py_GE (for <, <=, ==, !=, >, >=), and returns a Python
  object, which may be NotImplemented (in which case the tp_compare
  slot function is used as a fallback, if defined).

  Classes can overload individual comparison operators by defining one
  or more of the methods__lt__, __le__, __eq__, __ne__, __gt__,
  __ge__.  There are no explicit "reflected argument" versions of
  these; instead, __lt__ and __gt__ are each other's reflection,
  likewise for__le__ and __ge__; __eq__ and __ne__ are their own
  reflection (similar at the C level).  No other implications are
  made; in particular, Python does not assume that == is the Boolean
  inverse of !=, or that < is the Boolean inverse of >=.  This makes
  it possible to define types with partial orderings.

  Classes or types that want to implement (in)equality tests but not
  the ordering operators (i.e. unordered types) should implement ==
  and !=, and raise an error for the ordering operators.

  It is possible to define types whose rich comparison results are not
  Boolean; e.g. a matrix type might want to return a matrix of bits
  for A < B, giving elementwise comparisons.  Such types should ensure
  that any interpretation of their value in a Boolean context raises
  an exception, e.g. by defining __nonzero__ (or the tp_nonzero slot
  at the C level) to always raise an exception.

- Complex numbers use rich comparisons to define == and != but raise
  an exception for <, <=, > and >=.  Unfortunately, this also means
  that cmp() of two complex numbers raises an exception when the two
  numbers differ.  Since it is not mathematically meaningful to compare
  complex numbers except for equality, I hope that this doesn't break
  too much code.

- The outcome of comparing non-numeric objects of different types is
  not defined by the language, other than that it's arbitrary but
  consistent (see the Reference Manual).  An implementation detail changed
  in 2.1a1 such that None now compares less than any other object.  Code
  relying on this new behavior (like code that relied on the previous
  behavior) does so at its own risk.

- Functions and methods now support getting and setting arbitrarily
  named attributes (PEP 232).  Functions have a new __dict__
  (a.k.a. func_dict) which hold the function attributes.  Methods get
  and set attributes on their underlying im_func.  It is a TypeError
  to set an attribute on a bound method.

- The xrange() object implementation has been improved so that
  xrange(sys.maxint) can be used on 64-bit platforms.  There's still a
  limitation that in this case len(xrange(sys.maxint)) can't be
  calculated, but the common idiom "for i in xrange(sys.maxint)" will
  work fine as long as the index i doesn't actually reach 2**31.
  (Python uses regular ints for sequence and string indices; fixing
  that is much more work.)

- Two changes to from...import:

  1) "from M import X" now works even if (after loading module M)
     sys.modules['M'] is not a real module; it's basically a getattr()
     operation with AttributeError exceptions changed into ImportError.

  2) "from M import *" now looks for M.__all__ to decide which names to
     import; if M.__all__ doesn't exist, it uses M.__dict__.keys() but
     filters out names starting with '_' as before.  Whether or not
     __all__ exists, there's no restriction on the type of M.

- File objects have a new method, xreadlines().  This is the fastest
  way to iterate over all lines in a file:

  for line in file.xreadlines():
      ...do something to line...

  See the xreadlines module (mentioned below) for how to do this for
  other file-like objects.

- Even if you don't use file.xreadlines(), you may expect a speedup on
  line-by-line input.  The file.readline() method has been optimized
  quite a bit in platform-specific ways:  on systems (like Linux) that
  support flockfile(), getc_unlocked(), and funlockfile(), those are
  used by default.  On systems (like Windows) without getc_unlocked(),
  a complicated (but still thread-safe) method using fgets() is used by
  default.

  You can force use of the fgets() method by #define'ing
  USE_FGETS_IN_GETLINE at build time (it may be faster than
  getc_unlocked()).

  You can force fgets() not to be used by #define'ing
  DONT_USE_FGETS_IN_GETLINE (this is the first thing to try if std test
  test_bufio.py fails -- and let us know if it does!).

- In addition, the fileinput module, while still slower than the other
  methods on most platforms, has been sped up too, by using
  file.readlines(sizehint).

- Support for run-time warnings has been added, including a new
  command line option (-W) to specify the disposition of warnings.
  See the description of the warnings module below.

- Extensive changes have been made to the coercion code.  This mostly
  affects extension modules (which can now implement mixed-type
  numerical operators without having to use coercion), but
  occasionally, in boundary cases the coercion semantics have changed
  subtly.  Since this was a terrible gray area of the language, this
  is considered an improvement.  Also note that __rcmp__ is no longer
  supported -- instead of calling __rcmp__, __cmp__ is called with
  reflected arguments.

- In connection with the coercion changes, a new built-in singleton
  object, NotImplemented is defined.  This can be returned for
  operations that wish to indicate they are not implemented for a
  particular combination of arguments.  From C, this is
  Py_NotImplemented.

- The interpreter accepts now bytecode files on the command line even
  if they do not have a .pyc or .pyo extension. On Linux, after executing

import imp,sys,string
magic = string.join(["\\x%.2x" % ord(c) for c in imp.get_magic()],"")
reg = ':pyc:M::%s::%s:' % (magic, sys.executable)
open("/proc/sys/fs/binfmt_misc/register","wb").write(reg)

  any byte code file can be used as an executable (i.e. as an argument
  to execve(2)).

- %[xXo] formats of negative Python longs now produce a sign
  character.  In 1.6 and earlier, they never produced a sign,
  and raised an error if the value of the long was too large
  to fit in a Python int.  In 2.0, they produced a sign if and
  only if too large to fit in an int.  This was inconsistent
  across platforms (because the size of an int varies across
  platforms), and inconsistent with hex() and oct().  Example:

  >>> "%x" % -0x42L
  '-42'      # in 2.1
  'ffffffbe' # in 2.0 and before, on 32-bit machines
  >>> hex(-0x42L)
  '-0x42L'   # in all versions of Python

  The behavior of %d formats for negative Python longs remains
  the same as in 2.0 (although in 1.6 and before, they raised
  an error if the long didn't fit in a Python int).

  %u formats don't make sense for Python longs, but are allowed
  and treated the same as %d in 2.1.  In 2.0, a negative long
  formatted via %u produced a sign if and only if too large to
  fit in an int.  In 1.6 and earlier, a negative long formatted
  via %u raised an error if it was too big to fit in an int.

- Dictionary objects have an odd new method, popitem().  This removes
  an arbitrary item from the dictionary and returns it (in the form of
  a (key, value) pair).  This can be useful for algorithms that use a
  dictionary as a bag of "to do" items and repeatedly need to pick one
  item.  Such algorithms normally end up running in quadratic time;
  using popitem() they can usually be made to run in linear time.

Standard library

- In the time module, the time argument to the functions strftime,
  localtime, gmtime, asctime and ctime is now optional, defaulting to
  the current time (in the local timezone).

- The ftplib module now defaults to passive mode, which is deemed a
  more useful default given that clients are often inside firewalls
  these days.  Note that this could break if ftplib is used to connect
  to a *server* that is inside a firewall, from outside; this is
  expected to be a very rare situation.  To fix that, you can call
  ftp.set_pasv(0).

- The module site now treats .pth files not only for path configuration,
  but also supports extensions to the initialization code: Lines starting
  with import are executed.

- There's a new module, warnings, which implements a mechanism for
  issuing and filtering warnings.  There are some new built-in
  exceptions that serve as warning categories, and a new command line
  option, -W, to control warnings (e.g. -Wi ignores all warnings, -We
  turns warnings into errors).  warnings.warn(message[, category])
  issues a warning message; this can also be called from C as
  PyErr_Warn(category, message).

- A new module xreadlines was added.  This exports a single factory
  function, xreadlines().  The intention is that this code is the
  absolutely fastest way to iterate over all lines in an open
  file(-like) object:

  import xreadlines
  for line in xreadlines.xreadlines(file):
      ...do something to line...

  This is equivalent to the previous the speed record holder using
  file.readlines(sizehint).  Note that if file is a real file object
  (as opposed to a file-like object), this is equivalent:

  for line in file.xreadlines():
      ...do something to line...

- The bisect module has new functions bisect_left, insort_left,
  bisect_right and insort_right.  The old names bisect and insort
  are now aliases for bisect_right and insort_right.  XXX_right
  and XXX_left methods differ in what happens when the new element
  compares equal to one or more elements already in the list:  the
  XXX_left methods insert to the left, the XXX_right methods to the
  right.  Code that doesn't care where equal elements end up should
  continue to use the old, short names ("bisect" and "insort").

- The new curses.panel module wraps the panel library that forms part
  of SYSV curses and ncurses.  Contributed by Thomas Gellekum.

- The SocketServer module now sets the allow_reuse_address flag by
  default in the TCPServer class.

- A new function, sys._getframe(), returns the stack frame pointer of
  the caller.  This is intended only as a building block for
  higher-level mechanisms such as string interpolation.

- The pyexpat module supports a number of new handlers, which are
  available only in expat 1.2. If invocation of a callback fails, it
  will report an additional frame in the traceback. Parser objects
  participate now in garbage collection. If expat reports an unknown
  encoding, pyexpat will try to use a Python codec; that works only
  for single-byte charsets. The parser type objects is exposed as
  XMLParserObject.

- xml.dom now offers standard definitions for symbolic node type and
  exception code constants, and a hierarchy of DOM exceptions. minidom
  was adjusted to use them.

- The conformance of xml.dom.minidom to the DOM specification was
  improved. It detects a number of additional error cases; the
  previous/next relationship works even when the tree is modified;
  Node supports the normalize() method; NamedNodeMap, DocumentType and
  DOMImplementation classes were added; Element supports the
  hasAttribute and hasAttributeNS methods; and Text supports the splitText
  method.

Build issues

- For Unix (and Unix-compatible) builds, configuration and building of
  extension modules is now greatly automated.  Rather than having to
  edit the Modules/Setup file to indicate which modules should be
  built and where their include files and libraries are, a
  distutils-based setup.py script now takes care of building most
  extension modules.  All extension modules built this way are built
  as shared libraries.  Only a few modules that must be linked
  statically are still listed in the Setup file; you won't need to
  edit their configuration.

- Python should now build out of the box on Cygwin.  If it doesn't,
  mail to Jason Tishler (jlt63 at users.sourceforge.net).

- Python now always uses its own (renamed) implementation of getopt()
  -- there's too much variation among C library getopt()
  implementations.

- C++ compilers are better supported; the CXX macro is always set to a
  C++ compiler if one is found.

Windows changes

- select module:  By default under Windows, a select() call
  can specify no more than 64 sockets.  Python now boosts
  this Microsoft default to 512.  If you need even more than
  that, see the MS docs (you'll need to #define FD_SETSIZE
  and recompile Python from source).

- Support for Windows 3.1, DOS and OS/2 is gone.  The Lib/dos-8x3
  subdirectory is no more!


What's New in Python 2.0?
=========================

Below is a list of all relevant changes since release 1.6.  Older
changes are in the file HISTORY.  If you are making the jump directly
from Python 1.5.2 to 2.0, make sure to read the section for 1.6 in the
HISTORY file!  Many important changes listed there.

Alternatively, a good overview of the changes between 1.5.2 and 2.0 is
the document "What's New in Python 2.0" by Kuchling and Moshe Zadka:
http://www.amk.ca/python/2.0/.

--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)

======================================================================

What's new in 2.0 (since release candidate 1)?
==============================================

Standard library

- The copy_reg module was modified to clarify its intended use: to
  register pickle support for extension types, not for classes.
  pickle() will raise a TypeError if it is passed a class.

- Fixed a bug in gettext's "normalize and expand" code that prevented
  it from finding an existing .mo file.

- Restored support for HTTP/0.9 servers in httplib.

- The math module was changed to stop raising OverflowError in case of
  underflow, and return 0 instead in underflow cases.  Whether Python
  used to raise OverflowError in case of underflow was platform-
  dependent (it did when the platform math library set errno to ERANGE
  on underflow).

- Fixed a bug in StringIO that occurred when the file position was not
  at the end of the file and write() was called with enough data to
  extend past the end of the file.

- Fixed a bug that caused Tkinter error messages to get lost on
  Windows.  The bug was fixed by replacing direct use of
  interp->result with Tcl_GetStringResult(interp).

- Fixed bug in urllib2 that caused it to fail when it received an HTTP
  redirect response.

- Several changes were made to distutils: Some debugging code was
  removed from util.  Fixed the installer used when an external zip
  program (like WinZip) is not found; the source code for this
  installer is in Misc/distutils.  check_lib() was modified to behave
  more like AC_CHECK_LIB by add other_libraries() as a parameter.  The
  test for whether installed modules are on sys.path was changed to
  use both normcase() and normpath().

- Several minor bugs were fixed in the xml package (the minidom,
  pulldom, expatreader, and saxutils modules).

- The regression test driver (regrtest.py) behavior when invoked with
  -l changed: It now reports a count of objects that are recognized as
  garbage but not freed by the garbage collector.

- The regression test for the math module was changed to test
  exceptional behavior when the test is run in verbose mode.  Python
  cannot yet guarantee consistent exception behavior across platforms,
  so the exception part of test_math is run only in verbose mode, and
  may fail on your platform.

Internals

- PyOS_CheckStack() has been disabled on Win64, where it caused
  test_sre to fail.

Build issues

- Changed compiler flags, so that gcc is always invoked with -Wall and
  -Wstrict-prototypes.  Users compiling Python with GCC should see
  exactly one warning, except if they have passed configure the
  --with-pydebug flag.  The expected warning is for getopt() in
  Modules/main.c.  This warning will be fixed for Python 2.1.

- Fixed configure to add -threads argument during linking on OSF1.

Tools and other miscellany

- The compiler in Tools/compiler was updated to support the new
  language features introduced in 2.0: extended print statement, list
  comprehensions, and augmented assignments.  The new compiler should
  also be backwards compatible with Python 1.5.2; the compiler will
  always generate code for the version of the interpreter it runs
  under.

What's new in 2.0 release candidate 1 (since beta 2)?
=====================================================

What is release candidate 1?

We believe that release candidate 1 will fix all known bugs that we
intend to fix for the 2.0 final release.  This release should be a bit
more stable than the previous betas.  We would like to see even more
widespread testing before the final release, so we are producing this
release candidate.  The final release will be exactly the same unless
any show-stopping (or brown bag) bugs are found by testers of the
release candidate.

All the changes since the last beta release are bug fixes or changes
to support building Python for specific platforms.

Core language, builtins, and interpreter

- A bug that caused crashes when __coerce__ was used with augmented
  assignment, e.g. +=, was fixed.

- Raise ZeroDivisionError when raising zero to a negative number,
  e.g. 0.0 ** -2.0.  Note that math.pow is unrelated to the built-in
  power operator and the result of math.pow(0.0, -2.0) will vary by
  platform.  On Linux, it raises a ValueError.

- A bug in Unicode string interpolation was fixed that occasionally
  caused errors with formats including "%%".  For example, the
  following expression "%% %s" % u"abc" no longer raises a TypeError.

- Compilation of deeply nested expressions raises MemoryError instead
  of SyntaxError, e.g. eval("[" * 50 + "]" * 50).

- In 2.0b2 on Windows, the interpreter wrote .pyc files in text mode,
  rendering them useless.  They are now written in binary mode again.

Standard library

- Keyword arguments are now accepted for most pattern and match object
  methods in SRE, the standard regular expression engine.

- In SRE, fixed error with negative lookahead and lookbehind that
  manifested itself as a runtime error in patterns like "(?<!abc)(def)".

- Several bugs in the Unicode handling and error handling in _tkinter
  were fixed.

- Fix memory management errors in Merge() and Tkapp_Call() routines.

- Several changes were made to cStringIO to make it compatible with
  the file-like object interface and with StringIO.  If operations are
  performed on a closed object, an exception is raised.  The truncate
  method now accepts a position argument and readline accepts a size
  argument.

- There were many changes made to the linuxaudiodev module and its
  test suite; as a result, a short, unexpected audio sample should now
  play when the regression test is run.

  Note that this module is named poorly, because it should work
  correctly on any platform that supports the Open Sound System
  (OSS).

  The module now raises exceptions when errors occur instead of
  crashing.  It also defines the AFMT_A_LAW format (logarithmic A-law
  audio) and defines a getptr() method that calls the
  SNDCTL_DSP_GETxPTR ioctl defined in the OSS Programmer's Guide.

- The library_version attribute, introduced in an earlier beta, was
  removed because it can not be supported with early versions of the C
  readline library, which provides no way to determine the version at
  compile-time.

- The binascii module is now enabled on Win64.

- tokenize.py no longer suffers "recursion depth" errors when parsing
  programs with very long string literals.

Internals

- Fixed several buffer overflow vulnerabilities in calculate_path(),
  which is called when the interpreter starts up to determine where
  the standard library is installed.  These vulnerabilities affect all
  previous versions of Python and can be exploited by setting very
  long values for PYTHONHOME or argv[0].  The risk is greatest for a
  setuid Python script, although use of the wrapper in
  Misc/setuid-prog.c will eliminate the vulnerability.

- Fixed garbage collection bugs in instance creation that were
  triggered when errors occurred during initialization.  The solution,
  applied in cPickle and in PyInstance_New(), is to call
  PyObject_GC_Init() after the initialization of the object's
  container attributes is complete.

- pyexpat adds definitions of PyModule_AddStringConstant and
  PyModule_AddObject if the Python version is less than 2.0, which
  provides compatibility with PyXML on Python 1.5.2.

- If the platform has a bogus definition for LONG_BIT (the number of
  bits in a long), an error will be reported at compile time.

- Fix bugs in _PyTuple_Resize() which caused hard-to-interpret garbage
  collection crashes and possibly other, unreported crashes.

- Fixed a memory leak in _PyUnicode_Fini().

Build issues

- configure now accepts a --with-suffix option that specifies the
  executable suffix.  This is useful for builds on Cygwin and Mac OS
  X, for example.

- The mmap.PAGESIZE constant is now initialized using sysconf when
  possible, which eliminates a dependency on -lucb for Reliant UNIX.

- The md5 file should now compile on all platforms.

- The select module now compiles on platforms that do not define
  POLLRDNORM and related constants.

- Darwin (Mac OS X):  Initial support for static builds on this
  platform.

- BeOS: A number of changes were made to the build and installation
  process.  ar-fake now operates on a directory of object files.
  dl_export.h is gone, and its macros now appear on the mwcc command
  line during build on PPC BeOS.

- Platform directory in lib/python2.0 is "plat-beos5" (or
  "plat-beos4", if building on BeOS 4.5), rather than "plat-beos".

- Cygwin: Support for shared libraries, Tkinter, and sockets.

- SunOS 4.1.4_JL: Fix test for directory existence in configure.

Tools and other miscellany

- Removed debugging prints from main used with freeze.

- IDLE auto-indent no longer crashes when it encounters Unicode
  characters.

What's new in 2.0 beta 2 (since beta 1)?
========================================

Core language, builtins, and interpreter

- Add support for unbounded ints in %d,i,u,x,X,o formats; for example
  "%d" % 2L**64 == "18446744073709551616".

- Add -h and -V command line options to print the usage message and
  Python version number and exit immediately.

- eval() and exec accept Unicode objects as code parameters.

- getattr() and setattr() now also accept Unicode objects for the
  attribute name, which are converted to strings using the default
  encoding before lookup.

- Multiplication on string and Unicode now does proper bounds
  checking; e.g. 'a' * 65536 * 65536 will raise ValueError, "repeated
  string is too long."

- Better error message when continue is found in try statement in a
  loop.


Standard library and extensions

- socket module: the OpenSSL code now adds support for RAND_status()
  and EGD (Entropy Gathering Device).

- array: reverse() method of array now works.  buffer_info() now does
  argument checking; it still takes no arguments.

- asyncore/asynchat: Included most recent version from Sam Rushing.

- cgi: Accept '&' or ';' as separator characters when parsing form data.

- CGIHTTPServer: Now works on Windows (and perhaps even Mac).

- ConfigParser: When reading the file, options spelled in upper case
  letters are now correctly converted to lowercase.

- copy: Copy Unicode objects atomically.

- cPickle: Fail gracefully when copy_reg can't be imported.

- cStringIO: Implemented readlines() method.

- dbm: Add get() and setdefault() methods to dbm object.  Add constant
  `library' to module that names the library used.  Added doc strings
  and method names to error messages.  Uses configure to determine
  which ndbm.h file to include; Berkeley DB's nbdm and GDBM's ndbm is
  now available options.

- distutils: Update to version 0.9.3.

- dl: Add several dl.RTLD_ constants.

- fpectl: Now supported on FreeBSD.

- gc: Add DEBUG_SAVEALL option.  When enabled all garbage objects
  found by the collector will be saved in gc.garbage.  This is useful
  for debugging a program that creates reference cycles.

- httplib: Three changes: Restore support for set_debuglevel feature
  of HTTP class.  Do not close socket on zero-length response.  Do not
  crash when server sends invalid content-length header.

- mailbox: Mailbox class conforms better to qmail specifications.

- marshal: When reading a short, sign-extend on platforms where shorts
  are bigger than 16 bits.  When reading a long, repair the unportable
  sign extension that was being done for 64-bit machines.  (It assumed
  that signed right shift sign-extends.)

- operator: Add contains(), invert(), __invert__() as aliases for
  __contains__(), inv(), and __inv__() respectively.

- os: Add support for popen2() and popen3() on all platforms where
  fork() exists.  (popen4() is still in the works.)

- os: (Windows only:) Add startfile() function that acts like double-
  clicking on a file in Explorer (or passing the file name to the
  DOS "start" command).

- os.path: (Windows, DOS:) Treat trailing colon correctly in
  os.path.join.  os.path.join("a:", "b") yields "a:b".

- pickle: Now raises ValueError when an invalid pickle that contains
  a non-string repr where a string repr was expected.  This behavior
  matches cPickle.

- posixfile: Remove broken __del__() method.

- py_compile: support CR+LF line terminators in source file.

- readline: Does not immediately exit when ^C is hit when readline and
  threads are configured.  Adds definition of rl_library_version.  (The
  latter addition requires GNU readline 2.2 or later.)

- rfc822: Domain literals returned by AddrlistClass method
  getdomainliteral() are now properly wrapped in brackets.

- site: sys.setdefaultencoding() should only be called in case the
  standard default encoding ("ascii") is changed. This saves quite a
  few cycles during startup since the first call to
  setdefaultencoding() will initialize the codec registry and the
  encodings package.

- socket: Support for size hint in readlines() method of object returned
  by makefile().

- sre: Added experimental expand() method to match objects.  Does not
  use buffer interface on Unicode strings.  Does not hang if group id
  is followed by whitespace.

- StringIO: Size hint in readlines() is now supported as documented.

- struct: Check ranges for bytes and shorts.

- urllib: Improved handling of win32 proxy settings. Fixed quote and
  quote_plus functions so that the always encode a comma.

- Tkinter: Image objects are now guaranteed to have unique ids.  Set
  event.delta to zero if Tk version doesn't support mousewheel.
  Removed some debugging prints.

- UserList: now implements __contains__().

- webbrowser: On Windows, use os.startfile() instead of os.popen(),
  which works around a bug in Norton AntiVirus 2000 that leads directly
  to a Blue Screen freeze.

- xml: New version detection code allows PyXML to override standard
  XML package if PyXML version is greater than 0.6.1.

- xml.dom: DOM level 1 support for basic XML.  Includes xml.dom.minidom
  (conventional DOM), and xml.dom.pulldom, which allows building the DOM
  tree only for nodes which are sufficiently interesting to a specific
  application.  Does not provide the HTML-specific extensions.  Still
  undocumented.

- xml.sax: SAX 2 support for Python, including all the handler
  interfaces needed to process XML 1.0 compliant XML.  Some
  documentation is already available.

- pyexpat: Renamed to xml.parsers.expat since this is part of the new,
  packagized XML support.


C API

- Add three new convenience functions for module initialization --
  PyModule_AddObject(), PyModule_AddIntConstant(), and
  PyModule_AddStringConstant().

- Cleaned up definition of NULL in C source code; all definitions were
  removed and add #error to Python.h if NULL isn't defined after
  #include of stdio.h.

- Py_PROTO() macros that were removed in 2.0b1 have been restored for
  backwards compatibility (at the source level) with old extensions.

- A wrapper API was added for signal() and sigaction().  Instead of
  either function, always use PyOS_getsig() to get a signal handler
  and PyOS_setsig() to set one.  A new convenience typedef
  PyOS_sighandler_t is defined for the type of signal handlers.

- Add PyString_AsStringAndSize() function that provides access to the
  internal data buffer and size of a string object -- or the default
  encoded version of a Unicode object.

- PyString_Size() and PyString_AsString() accept Unicode objects.

- The standard header <limits.h> is now included by Python.h (if it
  exists).  INT_MAX and LONG_MAX will always be defined, even if
  <limits.h> is not available.

- PyFloat_FromString takes a second argument, pend, that was
  effectively useless.  It is now officially useless but preserved for
  backwards compatibility.  If the pend argument is not NULL, *pend is
  set to NULL.

- PyObject_GetAttr() and PyObject_SetAttr() now accept Unicode objects
  for the attribute name.  See note on getattr() above.

- A few bug fixes to argument processing for Unicode.
  PyArg_ParseTupleAndKeywords() now accepts "es#" and "es".
  PyArg_Parse() special cases "s#" for Unicode objects; it returns a
  pointer to the default encoded string data instead of to the raw
  UTF-16.

- Py_BuildValue accepts B format (for bgen-generated code).


Internals

- On Unix, fix code for finding Python installation directory so that
  it works when argv[0] is a relative path.

- Added a true unicode_internal_encode() function and fixed the
  unicode_internal_decode function() to support Unicode objects directly
  rather than by generating a copy of the object.

- Several of the internal Unicode tables are much smaller now, and
  the source code should be much friendlier to weaker compilers.

- In the garbage collector: Fixed bug in collection of tuples.  Fixed
  bug that caused some instances to be removed from the container set
  while they were still live.  Fixed parsing in gc.set_debug() for
  platforms where sizeof(long) > sizeof(int).

- Fixed refcount problem in instance deallocation that only occurred
  when Py_REF_DEBUG was defined and Py_TRACE_REFS was not.

- On Windows, getpythonregpath is now protected against null data in
  registry key.

- On Unix, create .pyc/.pyo files with O_EXCL flag to avoid a race
  condition.


Build and platform-specific issues

- Better support of GNU Pth via --with-pth configure option.

- Python/C API now properly exposed to dynamically-loaded extension
  modules on Reliant UNIX.

- Changes for the benefit of SunOS 4.1.4 (really!).  mmapmodule.c:
  Don't define MS_SYNC to be zero when it is undefined.  Added missing
  prototypes in posixmodule.c.

- Improved support for HP-UX build.  Threads should now be correctly
  configured (on HP-UX 10.20 and 11.00).

- Fix largefile support on older NetBSD systems and OpenBSD by adding
  define for TELL64.


Tools and other miscellany

- ftpmirror: Call to main() is wrapped in if __name__ == "__main__".

- freeze: The modulefinder now works with 2.0 opcodes.

- IDLE:
  Move hackery of sys.argv until after the Tk instance has been
  created, which allows the application-specific Tkinter
  initialization to be executed if present; also pass an explicit
  className parameter to the Tk() constructor.


What's new in 2.0 beta 1?
=========================

Source Incompatibilities
------------------------

None.  Note that 1.6 introduced several incompatibilities with 1.5.2,
such as single-argument append(), connect() and bind(), and changes to
str(long) and repr(float).


Binary Incompatibilities
------------------------

- Third party extensions built for Python 1.5.x or 1.6 cannot be used
with Python 2.0; these extensions will have to be rebuilt for Python
2.0.

- On Windows, attempting to import a third party extension built for
Python 1.5.x or 1.6 results in an immediate crash; there's not much we
can do about this.  Check your PYTHONPATH environment variable!

- Python bytecode files (*.pyc and *.pyo) are not compatible between
releases.


Overview of Changes Since 1.6
-----------------------------

There are many new modules (including brand new XML support through
the xml package, and i18n support through the gettext module); a list
of all new modules is included below.  Lots of bugs have been fixed.

The process for making major new changes to the language has changed
since Python 1.6.  Enhancements must now be documented by a Python
Enhancement Proposal (PEP) before they can be accepted.

There are several important syntax enhancements, described in more
detail below:

  - Augmented assignment, e.g. x += 1

  - List comprehensions, e.g. [x**2 for x in range(10)]

  - Extended import statement, e.g. import Module as Name

  - Extended print statement, e.g. print >> file, "Hello"

Other important changes:

  - Optional collection of cyclical garbage

Python Enhancement Proposal (PEP)
---------------------------------

PEP stands for Python Enhancement Proposal.  A PEP is a design
document providing information to the Python community, or describing
a new feature for Python.  The PEP should provide a concise technical
specification of the feature and a rationale for the feature.

We intend PEPs to be the primary mechanisms for proposing new
features, for collecting community input on an issue, and for
documenting the design decisions that have gone into Python.  The PEP
author is responsible for building consensus within the community and
documenting dissenting opinions.

The PEPs are available at http://python.sourceforge.net/peps/.

Augmented Assignment
--------------------

This must have been the most-requested feature of the past years!
Eleven new assignment operators were added:

    += -= *= /= %= **= <<= >>= &= ^= |=

For example,

    A += B

is similar to

    A = A + B

except that A is evaluated only once (relevant when A is something
like dict[index].attr).

However, if A is a mutable object, A may be modified in place.  Thus,
if A is a number or a string, A += B has the same effect as A = A+B
(except A is only evaluated once); but if a is a list, A += B has the
same effect as A.extend(B)!

Classes and built-in object types can override the new operators in
order to implement the in-place behavior; the not-in-place behavior is
used automatically as a fallback when an object doesn't implement the
in-place behavior.  For classes, the method name is derived from the
method name for the corresponding not-in-place operator by inserting
an 'i' in front of the name, e.g. __iadd__ implements in-place
__add__.

Augmented assignment was implemented by Thomas Wouters.


List Comprehensions
-------------------

This is a flexible new notation for lists whose elements are computed
from another list (or lists).  The simplest form is:

    [<expression> for <variable> in <sequence>]

For example, [i**2 for i in range(4)] yields the list [0, 1, 4, 9].
This is more efficient than a for loop with a list.append() call.

You can also add a condition:

    [<expression> for <variable> in <sequence> if <condition>]

For example, [w for w in words if w == w.lower()] would yield the list
of words that contain no uppercase characters.  This is more efficient
than a for loop with an if statement and a list.append() call.

You can also have nested for loops and more than one 'if' clause.  For
example, here's a function that flattens a sequence of sequences::

    def flatten(seq):
        return [x for subseq in seq for x in subseq]

    flatten([[0], [1,2,3], [4,5], [6,7,8,9], []])

This prints

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

List comprehensions originated as a patch set from Greg Ewing; Skip
Montanaro and Thomas Wouters also contributed.  Described by PEP 202.


Extended Import Statement
-------------------------

Many people have asked for a way to import a module under a different
name.  This can be accomplished like this:

    import foo
    bar = foo
    del foo

but this common idiom gets old quickly.  A simple extension of the
import statement now allows this to be written as follows:

    import foo as bar

There's also a variant for 'from ... import':

    from foo import bar as spam

This also works with packages; e.g. you can write this:

    import test.regrtest as regrtest

Note that 'as' is not a new keyword -- it is recognized only in this
context (this is only possible because the syntax for the import
statement doesn't involve expressions).

Implemented by Thomas Wouters.  Described by PEP 221.


Extended Print Statement
------------------------

Easily the most controversial new feature, this extension to the print
statement adds an option to make the output go to a different file
than the default sys.stdout.

For example, to write an error message to sys.stderr, you can now
write:

    print >> sys.stderr, "Error: bad dog!"

As a special feature, if the expression used to indicate the file
evaluates to None, the current value of sys.stdout is used.  Thus:

    print >> None, "Hello world"

is equivalent to

    print "Hello world"

Design and implementation by Barry Warsaw.  Described by PEP 214.


Optional Collection of Cyclical Garbage
---------------------------------------

Python is now equipped with a garbage collector that can hunt down
cyclical references between Python objects.  It's no replacement for
reference counting; in fact, it depends on the reference counts being
correct, and decides that a set of objects belong to a cycle if all
their reference counts can be accounted for from their references to
each other.  This devious scheme was first proposed by Eric Tiedemann,
and brought to implementation by Neil Schemenauer.

There's a module "gc" that lets you control some parameters of the
garbage collection.  There's also an option to the configure script
that lets you enable or disable the garbage collection.  In 2.0b1,
it's on by default, so that we (hopefully) can collect decent user
experience with this new feature.  There are some questions about its
performance.  If it proves to be too much of a problem, we'll turn it
off by default in the final 2.0 release.


Smaller Changes
---------------

A new function zip() was added.  zip(seq1, seq2, ...) is equivalent to
map(None, seq1, seq2, ...) when the sequences have the same length;
i.e. zip([1,2,3], [10,20,30]) returns [(1,10), (2,20), (3,30)].  When
the lists are not all the same length, the shortest list wins:
zip([1,2,3], [10,20]) returns [(1,10), (2,20)].  See PEP 201.

sys.version_info is a tuple (major, minor, micro, level, serial).

Dictionaries have an odd new method, setdefault(key, default).
dict.setdefault(key, default) returns dict[key] if it exists; if not,
it sets dict[key] to default and returns that value.  Thus:

    dict.setdefault(key, []).append(item)

does the same work as this common idiom:

    if not dict.has_key(key):
        dict[key] = []
    dict[key].append(item)

There are two new variants of SyntaxError that are raised for
indentation-related errors: IndentationError and TabError.

Changed \x to consume exactly two hex digits; see PEP 223.  Added \U
escape that consumes exactly eight hex digits.

The limits on the size of expressions and file in Python source code
have been raised from 2**16 to 2**32.  Previous versions of Python
were limited because the maximum argument size the Python VM accepted
was 2**16.  This limited the size of object constructor expressions,
e.g. [1,2,3] or {'a':1, 'b':2}, and the size of source files.  This
limit was raised thanks to a patch by Charles Waldman that effectively
fixes the problem.  It is now much more likely that you will be
limited by available memory than by an arbitrary limit in Python.

The interpreter's maximum recursion depth can be modified by Python
programs using sys.getrecursionlimit and sys.setrecursionlimit.  This
limit is the maximum number of recursive calls that can be made by
Python code.  The limit exists to prevent infinite recursion from
overflowing the C stack and causing a core dump.  The default value is
1000.  The maximum safe value for a particular platform can be found
by running Tools/scripts/find_recursionlimit.py.

New Modules and Packages
------------------------

atexit - for registering functions to be called when Python exits.

imputil - Greg Stein's alternative API for writing custom import
hooks.

pyexpat - an interface to the Expat XML parser, contributed by Paul
Prescod.

xml - a new package with XML support code organized (so far) in three
subpackages: xml.dom, xml.sax, and xml.parsers.  Describing these
would fill a volume.  There's a special feature whereby a
user-installed package named _xmlplus overrides the standard
xmlpackage; this is intended to give the XML SIG a hook to distribute
backwards-compatible updates to the standard xml package.

webbrowser - a platform-independent API to launch a web browser.


Changed Modules
---------------

array -- new methods for array objects: count, extend, index, pop, and
remove

binascii -- new functions b2a_hex and a2b_hex that convert between
binary data and its hex representation

calendar -- Many new functions that support features including control
over which day of the week is the first day, returning strings instead
of printing them.  Also new symbolic constants for days of week,
e.g. MONDAY, ..., SUNDAY.

cgi -- FieldStorage objects have a getvalue method that works like a
dictionary's get method and returns the value attribute of the object.

ConfigParser -- The parser object has new methods has_option,
remove_section, remove_option, set, and write.  They allow the module
to be used for writing config files as well as reading them.

ftplib -- ntransfercmd(), transfercmd(), and retrbinary() all now
optionally support the RFC 959 REST command.

gzip -- readline and readlines now accept optional size arguments

httplib -- New interfaces and support for HTTP/1.1 by Greg Stein.  See
the module doc strings for details.

locale -- implement getdefaultlocale for Win32 and Macintosh

marshal -- no longer dumps core when marshaling deeply nested or
recursive data structures

os -- new functions isatty, seteuid, setegid, setreuid, setregid

os/popen2 -- popen2/popen3/popen4 support under Windows.  popen2/popen3
support under Unix.

os/pty -- support for openpty and forkpty

os.path -- fix semantics of os.path.commonprefix

smtplib -- support for sending very long messages

socket -- new function getfqdn()

readline -- new functions to read, write and truncate history files.
The readline section of the library reference manual contains an
example.

select -- add interface to poll system call

shutil -- new copyfileobj function

SimpleHTTPServer, CGIHTTPServer -- Fix problems with buffering in the
HTTP server.

Tkinter -- optimization of function flatten

urllib -- scans environment variables for proxy configuration,
e.g. http_proxy.

whichdb -- recognizes dumbdbm format


Obsolete Modules
----------------

None.  However note that 1.6 made a whole slew of modules obsolete:
stdwin, soundex, cml, cmpcache, dircache, dump, find, grep, packmail,
poly, zmod, strop, util, whatsound.


Changed, New, Obsolete Tools
----------------------------

None.


C-level Changes
---------------

Several cleanup jobs were carried out throughout the source code.

All C code was converted to ANSI C; we got rid of all uses of the
Py_PROTO() macro, which makes the header files a lot more readable.

Most of the portability hacks were moved to a new header file,
pyport.h; several other new header files were added and some old
header files were removed, in an attempt to create a more rational set
of header files.  (Few of these ever need to be included explicitly;
they are all included by Python.h.)

Trent Mick ensured portability to 64-bit platforms, under both Linux
and Win64, especially for the new Intel Itanium processor.  Mick also
added large file support for Linux64 and Win64.

The C APIs to return an object's size have been update to consistently
use the form PyXXX_Size, e.g. PySequence_Size and PyDict_Size.  In
previous versions, the abstract interfaces used PyXXX_Length and the
concrete interfaces used PyXXX_Size.  The old names,
e.g. PyObject_Length, are still available for backwards compatibility
at the API level, but are deprecated.

The PyOS_CheckStack function has been implemented on Windows by
Fredrik Lundh.  It prevents Python from failing with a stack overflow
on Windows.

The GC changes resulted in creation of two new slots on object,
tp_traverse and tp_clear.  The augmented assignment changes result in
the creation of a new slot for each in-place operator.

The GC API creates new requirements for container types implemented in
C extension modules.  See Include/objimpl.h for details.

PyErr_Format has been updated to automatically calculate the size of
the buffer needed to hold the formatted result string.  This change
prevents crashes caused by programmer error.

New C API calls: PyObject_AsFileDescriptor, PyErr_WriteUnraisable.

PyRun_AnyFileEx, PyRun_SimpleFileEx, PyRun_FileEx -- New functions
that are the same as their non-Ex counterparts except they take an
extra flag argument that tells them to close the file when done.

XXX There were other API changes that should be fleshed out here.


Windows Changes
---------------

New popen2/popen3/peopen4 in os module (see Changed Modules above).

os.popen is much more usable on Windows 95 and 98.  See Microsoft
Knowledge Base article Q150956.  The Win9x workaround described there
is implemented by the new w9xpopen.exe helper in the root of your
Python installation.  Note that Python uses this internally; it is not
a standalone program.

Administrator privileges are no longer required to install Python
on Windows NT or Windows 2000.  If you have administrator privileges,
Python's registry info will be written under HKEY_LOCAL_MACHINE.
Otherwise the installer backs off to writing Python's registry info
under HKEY_CURRENT_USER.  The latter is sufficient for all "normal"
uses of Python, but will prevent some advanced uses from working
(for example, running a Python script as an NT service, or possibly
from CGI).

[This was new in 1.6] The installer no longer runs a separate Tcl/Tk
installer; instead, it installs the needed Tcl/Tk files directly in the
Python directory.  If you already have a Tcl/Tk installation, this
wastes some disk space (about 4 Megs) but avoids problems with
conflicting Tcl/Tk installations, and makes it much easier for Python
to ensure that Tcl/Tk can find all its files.

[This was new in 1.6] The Windows installer now installs by default in
\Python20\ on the default volume, instead of \Program Files\Python-2.0\.


Updates to the changes between 1.5.2 and 1.6
--------------------------------------------

The 1.6 NEWS file can't be changed after the release is done, so here
is some late-breaking news:

New APIs in locale.py: normalize(), getdefaultlocale(), resetlocale(),
and changes to getlocale() and setlocale().

The new module is now enabled per default.

It is not true that the encodings codecs cannot be used for normal
strings: the string.encode() (which is also present on 8-bit strings
!) allows using them for 8-bit strings too, e.g. to convert files from
cp1252 (Windows) to latin-1 or vice-versa.

Japanese codecs are available from Tamito KAJIYAMA:
http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/


======================================================================


=======================================
==> Release 1.6 (September 5, 2000) <==
=======================================

What's new in release 1.6?
==========================

Below is a list of all relevant changes since release 1.5.2.


Source Incompatibilities
------------------------

Several small incompatible library changes may trip you up:

  - The append() method for lists can no longer be invoked with more
  than one argument.  This used to append a single tuple made out of
  all arguments, but was undocumented.  To append a tuple, use
  e.g. l.append((a, b, c)).

  - The connect(), connect_ex() and bind() methods for sockets require
  exactly one argument.  Previously, you could call s.connect(host,
  port), but this was undocumented. You must now write
  s.connect((host, port)).

  - The str() and repr() functions are now different more often.  For
  long integers, str() no longer appends a 'L'.  Thus, str(1L) == '1',
  which used to be '1L'; repr(1L) is unchanged and still returns '1L'.
  For floats, repr() now gives 17 digits of precision, to ensure no
  precision is lost (on all current hardware).

  - The -X option is gone.  Built-in exceptions are now always
  classes.  Many more library modules also have been converted to
  class-based exceptions.


Binary Incompatibilities
------------------------

- Third party extensions built for Python 1.5.x cannot be used with
Python 1.6; these extensions will have to be rebuilt for Python 1.6.

- On Windows, attempting to import a third party extension built for
Python 1.5.x results in an immediate crash; there's not much we can do
about this.  Check your PYTHONPATH environment variable!


Overview of Changes since 1.5.2
-------------------------------

For this overview, I have borrowed from the document "What's New in
Python 2.0" by Andrew Kuchling and Moshe Zadka:
http://www.amk.ca/python/2.0/ .

There are lots of new modules and lots of bugs have been fixed.  A
list of all new modules is included below.

Probably the most pervasive change is the addition of Unicode support.
We've added a new fundamental datatype, the Unicode string, a new
build-in function unicode(), an numerous C APIs to deal with Unicode
and encodings.  See the file Misc/unicode.txt for details, or
http://starship.python.net/crew/lemburg/unicode-proposal.txt.

Two other big changes, related to the Unicode support, are the
addition of string methods and (yet another) new regular expression
engine.

  - String methods mean that you can now say s.lower() etc. instead of
  importing the string module and saying string.lower(s) etc.  One
  peculiarity is that the equivalent of string.join(sequence,
  delimiter) is delimiter.join(sequence).  Use " ".join(sequence) for
  the effect of string.join(sequence); to make this more readable, try
  space=" " first.  Note that the maxsplit argument defaults in
  split() and replace() have changed from 0 to -1.

  - The new regular expression engine, SRE by Fredrik Lundh, is fully
  backwards compatible with the old engine, and is in fact invoked
  using the same interface (the "re" module).  You can explicitly
  invoke the old engine by import pre, or the SRE engine by importing
  sre.  SRE is faster than pre, and supports Unicode (which was the
  main reason to put effort in yet another new regular expression
  engine -- this is at least the fourth!).


Other Changes
-------------

Other changes that won't break code but are nice to know about:

Deleting objects is now safe even for deeply nested data structures.

Long/int unifications: long integers can be used in seek() calls, as
slice indexes.

String formatting (s % args) has a new formatting option, '%r', which
acts like '%s' but inserts repr(arg) instead of str(arg). (Not yet in
alpha 1.)

Greg Ward's "distutils" package is included: this will make
installing, building and distributing third party packages much
simpler.

There's now special syntax that you can use instead of the apply()
function.  f(*args, **kwds) is equivalent to apply(f, args, kwds).
You can also use variations f(a1, a2, *args, **kwds) and you can leave
one or the other out: f(*args), f(**kwds).

The built-ins int() and long() take an optional second argument to
indicate the conversion base -- of course only if the first argument
is a string.  This makes string.atoi() and string.atol() obsolete.
(string.atof() was already obsolete).

When a local variable is known to the compiler but undefined when
used, a new exception UnboundLocalError is raised.  This is a class
derived from NameError so code catching NameError should still work.
The purpose is to provide better diagnostics in the following example:
  x = 1
  def f():
      print x
      x = x+1
This used to raise a NameError on the print statement, which confused
even experienced Python programmers (especially if there are several
hundreds of lines of code between the reference and the assignment to
x :-).

You can now override the 'in' operator by defining a __contains__
method.  Note that it has its arguments backwards: x in a causes
a.__contains__(x) to be called.  That's why the name isn't __in__.

The exception AttributeError will have a more friendly error message,
e.g.: <code>'Spam' instance has no attribute 'eggs'</code>.  This may
<b>break code</b> that expects the message to be exactly the attribute
name.


New Modules in 1.6
------------------

UserString - base class for deriving from the string type.

distutils - tools for distributing Python modules.

robotparser - parse a robots.txt file, for writing web spiders.
(Moved from Tools/webchecker/.)

linuxaudiodev - audio for Linux.

mmap - treat a file as a memory buffer.  (Windows and Unix.)

sre - regular expressions (fast, supports unicode).  Currently, this
code is very rough.  Eventually, the re module will be reimplemented
using sre (without changes to the re API).

filecmp - supersedes the old cmp.py and dircmp.py modules.

tabnanny - check Python sources for tab-width dependance.  (Moved from
Tools/scripts/.)

urllib2 - new and improved but incompatible version of urllib (still
experimental).

zipfile - read and write zip archives.

codecs - support for Unicode encoders/decoders.

unicodedata - provides access to the Unicode 3.0 database.

_winreg - Windows registry access.

encodings - package which provides a large set of standard codecs --
currently only for the new Unicode support. It has a drop-in extension
mechanism which allows you to add new codecs by simply copying them
into the encodings package directory. Asian codec support will
probably be made available as separate distribution package built upon
this technique and the new distutils package.


Changed Modules
---------------

readline, ConfigParser, cgi, calendar, posix, readline, xmllib, aifc,
chunk, wave, random, shelve, nntplib - minor enhancements.

socket, httplib, urllib - optional OpenSSL support (Unix only).

_tkinter - support for 8.0 up to 8.3.  Support for versions older than
8.0 has been dropped.

string - most of this module is deprecated now that strings have
methods.  This no longer uses the built-in strop module, but takes
advantage of the new string methods to provide transparent support for
both Unicode and ordinary strings.


Changes on Windows
------------------

The installer no longer runs a separate Tcl/Tk installer; instead, it
installs the needed Tcl/Tk files directly in the Python directory.  If
you already have a Tcl/Tk installation, this wastes some disk space
(about 4 Megs) but avoids problems with conflincting Tcl/Tk
installations, and makes it much easier for Python to ensure that
Tcl/Tk can find all its files.  Note: the alpha installers don't
include the documentation.

The Windows installer now installs by default in \Python16\ on the
default volume, instead of \Program Files\Python-1.6\.


Changed Tools
-------------

IDLE - complete overhaul.  See the <a href="../idle/">IDLE home
page</a> for more information.  (Python 1.6 alpha 1 will come with
IDLE 0.6.)

Tools/i18n/pygettext.py - Python equivalent of xgettext(1).  A message
text extraction tool used for internationalizing applications written
in Python.


Obsolete Modules
----------------

stdwin and everything that uses it.  (Get Python 1.5.2 if you need
it. :-)

soundex.  (Skip Montanaro has a version in Python but it won't be
included in the Python release.)

cmp, cmpcache, dircmp.  (Replaced by filecmp.)

dump.  (Use pickle.)

find.  (Easily coded using os.walk().)

grep.  (Not very useful as a library module.)

packmail.  (No longer has any use.)

poly, zmod.  (These were poor examples at best.)

strop.  (No longer needed by the string module.)

util.  (This functionality was long ago built in elsewhere).

whatsound.  (Use sndhdr.)


Detailed Changes from 1.6b1 to 1.6
----------------------------------

- Slight changes to the CNRI license.  A copyright notice has been
added; the requirement to indicate the nature of modifications now
applies when making a derivative work available "to others" instead of
just "to the public"; the version and date are updated.  The new
license has a new handle.

- Added the Tools/compiler package.  This is a project led by Jeremy
Hylton to write the Python bytecode generator in Python.

- The function math.rint() is removed.

- In Python.h, "#define _GNU_SOURCE 1" was added.

- Version 0.9.1 of Greg Ward's distutils is included (instead of
version 0.9).

- A new version of SRE is included.  It is more stable, and more
compatible with the old RE module.  Non-matching ranges are indicated
by -1, not None.  (The documentation said None, but the PRE
implementation used -1; changing to None would break existing code.)

- The winreg module has been renamed to _winreg.  (There are plans for
a higher-level API called winreg, but this has not yet materialized in
a form that is acceptable to the experts.)

- The _locale module is enabled by default.

- Fixed the configuration line for the _curses module.

- A few crashes have been fixed, notably <file>.writelines() with a
list containing non-string objects would crash, and there were
situations where a lost SyntaxError could dump core.

- The <list>.extend() method now accepts an arbitrary sequence
argument.

- If __str__() or __repr__() returns a Unicode object, this is
converted to an 8-bit string.

- Unicode string comparisons is no longer aware of UTF-16
encoding peculiarities; it's a straight 16-bit compare.

- The Windows installer now installs the LICENSE file and no longer
registers the Python DLL version in the registry (this is no longer
needed).  It now uses Tcl/Tk 8.3.2.

- A few portability problems have been fixed, in particular a
compilation error involving socklen_t.

- The PC configuration is slightly friendlier to non-Microsoft
compilers.


======================================================================


======================================
==> Release 1.5.2 (April 13, 1999) <==
======================================

From 1.5.2c1 to 1.5.2 (final)
=============================

Tue Apr 13 15:44:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse: Bump version to 1.5.2 (final)

	* PCbuild/python15.dsp: Added shamodule.c

	* PC/config.c: Added sha module!

	* README, Include/patchlevel.h: Prepare for final release.

	* Misc/ACKS:
	More (Cameron Laird is honorary; the others are 1.5.2c1 testers).

	* Python/thread_solaris.h:
	While I can't really test this thoroughly, Pat Knight and the Solaris
	man pages suggest that the proper thing to do is to add THR_NEW_LWP to
	the flags on thr_create(), and that there really isn't a downside, so
	I'll do that.

	* Misc/ACKS:
	Bunch of new names who helped iron out the last wrinkles of 1.5.2.

	* PC/python_nt.rc:
	Bump the myusterious M$ version number from 1,5,2,1 to 1,5,2,3.
	(I can't even display this on NT, maybe Win/98 can?)

	* Lib/pstats.py:
	Fix mysterious references to jprofile that were in the source since
	its creation.  I'm assuming these were once valid references to "Jim
	Roskind's profile"...

	* Lib/Attic/threading_api.py:
	Removed; since long subsumed in Doc/lib/libthreading.tex

	* Modules/socketmodule.c:
	Put back __osf__ support for gethostbyname_r(); the real bug was that
	it was being used even without threads.  This of course might be an
	all-platform problem so now we only use the _r variant when we are
	using threads.

Mon Apr 12 22:51:20 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/cPickle.c:
	Fix accidentally reversed NULL test in load_mark().  Suggested by
	Tamito Kajiyama.  (This caused a bug only on platforms where malloc(0)
	returns NULL.)

	* README:
	Add note about popen2 problem on Linux noticed by Pablo Bleyer.

	* README: Add note about -D_REENTRANT for HP-UX 10.20.

	* Modules/Makefile.pre.in: 'clean' target should remove hassignal.

	* PC/Attic/vc40.mak, PC/readme.txt:
	Remove all VC++ info (except VC 1.5) from readme.txt;
	remove the VC++ 4.0 project file; remove the unused _tkinter extern defs.

	* README: Clarify PC build instructions (point to PCbuild).

	* Modules/zlibmodule.c: Cast added by Jack Jansen (for Mac port).

	* Lib/plat-sunos5/CDIO.py, Lib/plat-linux2/CDROM.py:
	Forgot to add this file.  CDROM device parameters.

	* Lib/gzip.py: Two different changes.

	1. Jack Jansen reports that on the Mac, the time may be negative, and
	solves this by adding a write32u() function that writes an unsigned
	long.

	2. On 64-bit platforms the CRC comparison fails; I've fixed this by
	casting both values to be compared to "unsigned long" i.e. modulo
	0x100000000L.

Sat Apr 10 18:42:02 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PC/Attic/_tkinter.def: No longer needed.

	* Misc/ACKS: Correct missed character in Andrew Dalke's name.

	* README: Add DEC Ultrix notes (from Donn Cave's email).

	* configure: The usual

	* configure.in:
	Quote a bunch of shell variables used in test, related to long-long.

	* Objects/fileobject.c, Modules/shamodule.c, Modules/regexpr.c:
	casts for picky compilers.

	* Modules/socketmodule.c:
	3-arg gethostbyname_r doesn't really work on OSF/1.

	* PC/vc15_w31/_.c, PC/vc15_lib/_.c, Tools/pynche/__init__.py:
	Avoid totally empty files.

Fri Apr  9 14:56:35 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/fixps.py: Use re instead of regex.
	Don't rewrite the file in place.
	(Reported by Andy Dustman.)

	* Lib/netrc.py, Lib/shlex.py: Get rid of #! line

Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse: Use the Tcl 8.0.5 installer.
	Add a variable %_TCL_% that makes it easier to switch to a different version.


======================================================================


From 1.5.2b2 to 1.5.2c1
=======================

Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse:
	Release 1.5.2c1.  Add IDLE and Uninstall to program group.
	Don't distribute zlib.dll.  Tweak some comments.

	* PCbuild/zlib.dsp: Now using static zlib 1.1.3

	* Lib/dos-8x3/userdict.py, Lib/dos-8x3/userlist.py, Lib/dos-8x3/test_zli.py, Lib/dos-8x3/test_use.py, Lib/dos-8x3/test_pop.py, Lib/dos-8x3/test_pic.py, Lib/dos-8x3/test_ntp.py, Lib/dos-8x3/test_gzi.py, Lib/dos-8x3/test_fcn.py, Lib/dos-8x3/test_cpi.py, Lib/dos-8x3/test_bsd.py, Lib/dos-8x3/posixfil.py, Lib/dos-8x3/mimetype.py, Lib/dos-8x3/nturl2pa.py, Lib/dos-8x3/compilea.py, Lib/dos-8x3/exceptio.py, Lib/dos-8x3/basehttp.py:
	The usual

	* Include/patchlevel.h: Release 1.5.2c1

	* README: Release 1.5.2c1.

	* Misc/NEWS: News for the 1.5.2c1 release.

	* Lib/test/test_strftime.py:
	On Windows, we suddenly find, strftime() may return "" for an
	unsupported format string.  (I guess this is because the logic for
	deciding whether to reallocate the buffer or not has been improved.)
	This caused the test code to crash on result[0].  Fix this by assuming
	an empty result also means the format is not supported.

	* Demo/tkinter/matt/window-creation-w-location.py:
	This demo imported some private code from Matt.  Make it cripple along.

	* Lib/lib-tk/Tkinter.py:
	Delete an accidentally checked-in feature that actually broke more
	than was worth it: when deleting a canvas item, it would try to
	automatically delete the bindings for that item.  Since there's
	nothing that says you can't reuse the tag and still have the bindings,
	this is not correct.  Also, it broke at least one demo
	(Demo/tkinter/matt/rubber-band-box-demo-1.py).

	* Python/thread_wince.h: Win/CE thread support by Mark Hammond.

Wed Apr  7 20:23:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Patch by Andrew Kuchling to unflush() (flush() for deflating).
	Without this, if inflate() returned Z_BUF_ERROR asking for more output
	space, we would report the error; now, we increase the buffer size and
	try again, just as for Z_OK.

	* Lib/test/test_gzip.py: Use binary mode for all gzip files we open.

	* Tools/idle/ChangeLog: New change log.

	* Tools/idle/README.txt, Tools/idle/NEWS.txt: New version.

	* Python/pythonrun.c:
	Alas, get rid of the Win specific hack to ask the user to press Return
	before exiting when an error happened.  This didn't work right when
	Python is invoked from a daemon.

	* Tools/idle/idlever.py: Version bump awaiting impending new release.
	(Not much has changed :-( )

	* Lib/lib-tk/Tkinter.py:
	lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
	so the preferred name for them is tag_lower, tag_raise
	(similar to tag_bind, and similar to the Text widget);
	unfortunately can't delete the old ones yet (maybe in 1.6)

	* Python/thread.c, Python/strtod.c, Python/mystrtoul.c, Python/import.c, Python/ceval.c:
	Changes by Mark Hammond for Windows CE.  Mostly of the form
	  #ifdef DONT_HAVE_header_H ... #endif around #include <header.h>.

	* Python/bltinmodule.c:
	Remove unused variable from complex_from_string() code.

	* Include/patchlevel.h:
	Add the possibility of a gamma release (release candidate).
	Add '+' to string version number to indicate we're beyond b2 now.

	* Modules/posixmodule.c: Add extern decl for fsync() for SunOS 4.x.

	* Lib/smtplib.py: Changes by Per Cederquist and The Dragon.

	Per writes:

	"""
	The application where Signum Support uses smtplib needs to be able to
	report good error messages to the user when sending email fails.  To
	help in diagnosing problems it is useful to be able to report the
	entire message sent by the server, not only the SMTP error code of the
	offending command.

	A lot of the functions in sendmail.py unfortunately discards the
	message, leaving only the code.  The enclosed patch fixes that
	problem.

	The enclosed patch also introduces a base class for exceptions that
	include an SMTP error code and error message, and make the code and
	message available on separate attributes, so that surrounding code can
	deal with them in whatever way it sees fit.  I've also added some
	documentation to the exception classes.

	The constructor will now raise an exception if it cannot connect to
	the SMTP server.

	The data() method will raise an SMTPDataError if it doesn't receive
	the expected 354 code in the middle of the exchange.

	According to section 5.2.10 of RFC 1123 a smtp client must accept "any
	text, including no text at all" after the error code.  If the response
	of a HELO command contains no text self.helo_resp will be set to the
	empty string ("").  The patch fixes the test in the sendmail() method
	so that helo_resp is tested against None; if it has the empty string
	as value the sendmail() method would invoke the helo() method again.

	The code no longer accepts a -1 reply from the ehlo() method in
	sendmail().

	[Text about removing SMTPRecipientsRefused deleted --GvR]
	"""

	and also:

	"""
	smtplib.py appends an extra blank line to the outgoing mail if the
	`msg' argument to the sendmail method already contains a trailing
	newline.  This patch should fix the problem.
	"""

	The Dragon writes:

	"""
		Mostly I just re-added the SMTPRecipientsRefused exception
	(the exeption object now has the appropriate info in it ) [Per had
	removed this in his patch --GvR] and tweaked the behavior of the
	sendmail method whence it throws the newly added SMTPHeloException (it
	was closing the connection, which it shouldn't.  whatever catches the
	exception should do that. )

		I pondered the change of the return values to tuples all around,
	and after some thinking I decided that regularizing the return values was
	too much of the Right Thing (tm) to not do.

		My one concern is that code expecting an integer & getting a tuple
	may fail silently.

	(i.e. if it's doing :

	      x.somemethod() >= 400:
	expecting an integer, the expression will always be true if it gets a
	tuple instead. )

		However, most smtplib code I've seen only really uses the
	sendmail() method, so this wouldn't bother it.  Usually code I've seen
	that calls the other methods usually only calls helo() and ehlo() for
	doing ESMTP, a feature which was not in the smtplib included with 1.5.1,
	and thus I would think not much code uses it yet.
	"""

Tue Apr  6 19:38:18 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_ntpath.py:
	Fix the tests now that splitdrive() no longer treats UNC paths special.
	(Some tests converted to splitunc() tests.)

	* Lib/ntpath.py:
	Withdraw the UNC support from splitdrive().  Instead, a new function
	splitunc() parses UNC paths.  The contributor of the UNC parsing in
	splitdrive() doesn't like it, but I haven't heard a good reason to
	keep it, and it causes some problems.  (I think there's a
	philosophical problem -- to me, the split*() functions are purely
	syntactical, and the fact that \\foo is not a valid path doesn't mean
	that it shouldn't be considered an absolute path.)

	Also (quite separately, but strangely related to the philosophical
	issue above) fix abspath() so that if win32api exists, it doesn't fail
	when the path doesn't actually exist -- if GetFullPathName() fails,
	fall back on the old strategy (join with getcwd() if necessary, and
	then use normpath()).

	* configure.in, configure, config.h.in, acconfig.h:
	For BeOS PowerPC.  Chris Herborth.

Mon Apr  5 21:54:14 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/timemodule.c:
	Jonathan Giddy notes, and Chris Lawrence agrees, that some comments on
	#else/#endif are wrong, and that #if HAVE_TM_ZONE should be #ifdef.

	* Misc/ACKS:
	Bunch of new contributors, including 9 who contributed to the Docs,
	reported by Fred.

Mon Apr  5 18:37:59 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/gzip.py:
	Oops, missed mode parameter to open().

	* Lib/gzip.py:
	Made the default mode 'rb' instead of 'r', for better cross-platform
	support.  (Based on comment on the documentation by Bernhard Reiter
	<bernhard@csd.uwm.edu>).

Fri Apr  2 22:18:25 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/dutree.py:
	For reasons I dare not explain, this script should always execute
	main() when imported (in other words, it is not usable as a module).

Thu Apr  1 15:32:30 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_cpickle.py: Jonathan Giddy write:

	In test_cpickle.py, the module os got imported, but the line to remove
	the temp file has gone missing.

Tue Mar 30 20:17:31 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/BaseHTTPServer.py: Per Cederqvist writes:

	If you send something like "PUT / HTTP/1.0" to something derived from
	BaseHTTPServer that doesn't define do_PUT, you will get a response
	that begins like this:

		HTTP/1.0 501 Unsupported method ('do_PUT')
		Server: SimpleHTTP/0.3 Python/1.5
		Date: Tue, 30 Mar 1999 18:53:53 GMT

	The server should complain about 'PUT' instead of 'do_PUT'.  This
	patch should fix the problem.

Mon Mar 29 20:33:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/smtplib.py: Patch by Per Cederqvist, who writes:

	"""
	 - It needlessly used the makefile() method for each response that is
	   read from the SMTP server.

	 - If the remote SMTP server closes the connection unexpectedly the
	   code raised an IndexError.  It now raises an SMTPServerDisconnected
	   exception instead.

	 - The code now checks that all lines in a multiline response actually
	   contains an error code.
	"""

	The Dragon approves.

Mon Mar 29 20:25:40 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/compileall.py:
	When run as a script, report failures in the exit code as well.
	Patch largely based on changes by Andrew Dalke, as discussed in the
	distutils-sig.

Mon Mar 29 20:23:41 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	Hack so that if a 302 or 301 redirect contains a relative URL, the
	right thing "just happens" (basejoin() with old URL).

	* Modules/cPickle.c:
	Protection against picling to/from closed (real) file.
	The problem was reported by Moshe Zadka.

	* Lib/test/test_cpickle.py:
	Test protection against picling to/from closed (real) file.

	* Modules/timemodule.c: Chris Lawrence writes:

	"""
	The GNU folks, in their infinite wisdom, have decided not to implement
	altzone in libc6; this would not be horrible, except that timezone
	(which is implemented) includes the current DST setting (i.e. timezone
	for Central is 18000 in summer and 21600 in winter).  So Python's
	timezone and altzone variables aren't set correctly during DST.

	Here's a patch relative to 1.5.2b2 that (a) makes timezone and altzone
	show the "right" thing on Linux (by using the tm_gmtoff stuff
	available in BSD, which is how the GLIBC manual claims things should
	be done) and (b) should cope with the southern hemisphere.  In pursuit
	of (b), I also took the liberty of renaming the "summer" and "winter"
	variables to "july" and "jan".  This patch should also make certain
	time calculations on Linux actually work right (like the tz-aware
	functions in the rfc822 module).

	(It's hard to find DST that's currently being used in the southern
	hemisphere; I tested using Africa/Windhoek.)
	"""

	* Lib/test/output/test_gzip:
	Jonathan Giddy discovered this file was missing.

	* Modules/shamodule.c:
	Avoid warnings from AIX compiler.  Reported by Vladimir (AIX is my
	middlename) Marangozov, patch coded by Greg Stein.

	* Tools/idle/ScriptBinding.py, Tools/idle/PyShell.py:
	At Tim Peters' recommendation, add a dummy flush() method to PseudoFile.

Sun Mar 28 17:55:32 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/ndiff.py: Tim Peters writes:

	I should have waited overnight <wink/sigh>.  Nothing wrong with the one I
	sent, but I couldn't resist going on to add new -r1 / -r2 cmdline options
	for recreating the original files from ndiff's output.  That's attached, if
	you're game!  Us Windows guys don't usually have a sed sitting around
	<wink>.

Sat Mar 27 13:34:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/ndiff.py: Tim Peters writes:

	Attached is a cleaned-up version of ndiff (added useful module
	docstring, now echo'ed in case of cmd line mistake); added -q option
	to suppress initial file identification lines; + other minor cleanups,
	& a slightly faster match engine.

Fri Mar 26 22:36:00 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Tools/scripts/dutree.py:
	During display, if EPIPE is raised, it's probably because a pager was
	killed.  Discard the error in that case, but propogate it otherwise.

Fri Mar 26 16:20:45 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_userlist, Lib/test/test_userlist.py:
	Test suite for UserList.

	* Lib/UserList.py: Use isinstance() where appropriate.
	Reformatted with 4-space indent.

Fri Mar 26 16:11:40 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>

	* Tools/pynche/PyncheWidget.py:
	Helpwin.__init__(): The text widget should get focus.

	* Tools/pynche/pyColorChooser.py:
	Removed unnecessary import `from PyncheWidget import PyncheWidget'

Fri Mar 26 15:32:05 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_userdict, Lib/test/test_userdict.py:
	Test suite for UserDict

	* Lib/UserDict.py: Improved a bunch of things.
	The constructor now takes an optional dictionary.
	Use isinstance() where appropriate.

Thu Mar 25 22:38:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_pickle, Lib/test/output/test_cpickle, Lib/test/test_pickle.py, Lib/test/test_cpickle.py:
	Basic regr tests for pickle/cPickle

	* Lib/pickle.py:
	Don't use "exec" in find_class().  It's slow, unnecessary, and (as AMK
	points out) it doesn't work in JPython Applets.

Thu Mar 25 21:50:27 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Lib/test/test_gzip.py:
	Added a simple test suite for gzip.  It simply opens a temp file,
	writes a chunk of compressed data, closes it, writes another chunk, and
	reads the contents back to verify that they are the same.

	* Lib/gzip.py:
	Based on a suggestion from bruce@hams.com, make a trivial change to
	allow using the 'a' flag as a mode for opening a GzipFile.  gzip
	files, surprisingly enough, can be concatenated and then decompressed;
	the effect is to concatenate the two chunks of data.

	If we support it on writing, it should also be supported on reading.
	This *wasn't* trivial, and required rearranging the code in the
	reading path, particularly the _read() method.

	Raise IOError instead of RuntimeError in two cases, 'Not a gzipped file'
	and 'Unknown compression method'

Thu Mar 25 21:25:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_b1.py:
	Add tests for float() and complex() with string args (Nick/Stephanie
	Lockwood).

Thu Mar 25 21:21:08 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Add an .unused_data attribute to decompressor objects.  If .unused_data
	is not an empty string, this means that you have arrived at the
	end of the stream of compressed data, and the contents of .unused_data are
	whatever follows the compressed stream.

Thu Mar 25 21:16:07 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Python/bltinmodule.c:
	Patch by Nick and Stephanie Lockwood to implement complex() with a string
	argument.  This closes TODO item 2.19.

Wed Mar 24 19:09:00 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/webchecker/wcnew.py: Added Samuel Bayer's new webchecker.
	Unfortunately his code breaks wcgui.py in a way that's not easy
	to fix.  I expect that this is a temporary situation --
	eventually Sam's changes will be merged back in.
	(The changes add a -t option to specify exceptions to the -x
	option, and explicit checking for #foo style fragment ids.)

	* Objects/dictobject.c:
	Vladimir Marangozov contributed updated comments.

	* Objects/bufferobject.c: Folded long lines.

	* Lib/test/output/test_sha, Lib/test/test_sha.py:
	Added Jeremy's test code for the sha module.

	* Modules/shamodule.c, Modules/Setup.in:
	Added Greg Stein and Andrew Kuchling's sha module.
	Fix comments about zlib version and URL.

	* Lib/test/test_bsddb.py: Remove the temp file when we're done.

	* Include/pythread.h: Conform to standard boilerplate.

	* configure.in, configure, BeOS/linkmodule, BeOS/ar-fake:
	Chris Herborth: the new compiler in R4.1 needs some new options to work...

	* Modules/socketmodule.c:
	Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
	data struct before calling gethostby{name,addr}_r(); (2) ignore the
	3/5/6 args determinations made by the configure script and switch on
	platform identifiers instead:

	AIX, OSF have 3 args
	Sun, SGI have 5 args
	Linux has 6 args

	On all other platforms, undef HAVE_GETHOSTBYNAME_R altogether.

	* Modules/socketmodule.c:
	Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.

	* Lib/mailbox.py:
	Add readlines() to _Subfile class.  Not clear who would need it, but
	Chris Lawrence sent me a broken version; this one is a tad simpler and
	more conforming to the standard.

Tue Mar 23 23:05:34 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/gzip.py: use struct instead of bit-manipulate in Python

Tue Mar 23 19:00:55 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/Makefile.pre.in:
	Add $(EXE) to various occurrences of python so it will work on Cygwin
	with egcs (after setting EXE=.exe).  Patch by Norman Vine.

	* configure, configure.in:
	Ack!  It never defined HAVE_GETHOSTBYNAME_R so that code was never tested!

Mon Mar 22 22:25:39 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Include/thread.h:
	Adding thread.h -- unused but for b/w compatibility.
	As requested by Bill Janssen.

	* configure.in, configure:
	Add code to test for all sorts of gethostbyname_r variants,
	donated by David Arnold.

	* config.h.in, acconfig.h:
	Add symbols for gethostbyname_r variants (sigh).

	* Modules/socketmodule.c: Clean up pass for the previous patches.

	- Use HAVE_GETHOSTBYNAME_R_6_ARG instead of testing for Linux and
	glibc2.

	- If gethostbyname takes 3 args, undefine HAVE_GETHOSTBYNAME_R --
	don't know what code should be used.

	- New symbol USE_GETHOSTBYNAME_LOCK defined iff the lock should be used.

	- Modify the gethostbyaddr() code to also hold on to the lock until
	after it is safe to release, overlapping with the Python lock.

	(Note: I think that it could in theory be possible that Python code
	executed while gethostbyname_lock is held could attempt to reacquire
	the lock -- e.g. in a signal handler or destructor.  I will simply say
	"don't do that then.")

	* Modules/socketmodule.c: Jonathan Giddy writes:

	Here's a patch to fix the race condition, which wasn't fixed by Rob's
	patch.  It holds the gethostbyname lock until the results are copied out,
	which means that this lock and the Python global lock are held at the same
	time.  This shouldn't be a problem as long as the gethostbyname lock is
	always acquired when the global lock is not held.

Mon Mar 22 19:25:30 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Fixed the flush() method of compression objects; the test for
	    the end of loop was incorrect, and failed when the flushmode != Z_FINISH.
	    Logic cleaned up and commented.

	* Lib/test/test_zlib.py:
	Added simple test for the flush() method of compression objects, trying the
	    different flush values Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH.

Mon Mar 22 15:28:08 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/shlex.py:
	Bug reported by Tobias Thelen: missing "self." in assignment target.

Fri Mar 19 21:50:11 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/arraymodule.c:
	Use an unsigned cast to avoid a warning in VC++.

	* Lib/dospath.py, Lib/ntpath.py:
	New code for split() by Tim Peters, behaves more like posixpath.split().

	* Objects/floatobject.c:
	Fix a problem with Vladimir's PyFloat_Fini code: clear the free list; if
	a block cannot be freed, add its free items back to the free list.
	This is necessary to avoid leaking when Python is reinitialized later.

	* Objects/intobject.c:
	Fix a problem with Vladimir's PyInt_Fini code: clear the free list; if
	a block cannot be freed, add its free items back to the free list, and
	add its valid ints back to the small_ints array if they are in range.
	This is necessary to avoid leaking when Python is reinitialized later.

	* Lib/types.py:
	Added BufferType, the type returned by the new builtin buffer().  Greg Stein.

	* Python/bltinmodule.c:
	New builtin buffer() creates a derived read-only buffer from any
	object that supports the buffer interface (e.g. strings, arrays).

	* Objects/bufferobject.c:
	Added check for negative offset for PyBuffer_FromObject and check for
	negative size for PyBuffer_FromMemory.  Greg Stein.

Thu Mar 18 15:10:44 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py: Sjoerd Mullender writes:

	If a filename on Windows starts with \\, it is converted to a URL
	which starts with ////.  If this URL is passed to urlparse.urlparse
	you get a path that starts with // (and an empty netloc).  If you pass
	the result back to urlparse.urlunparse, you get a URL that starts with
	//, which is parsed differently by urlparse.urlparse.  The fix is to
	add the (empty) netloc with accompanying slashes if the path in
	urlunparse starts with //.  Do this for all schemes that use a netloc.

	* Lib/nturl2path.py: Sjoerd Mullender writes:

	Pathnames of files on other hosts in the same domain
	(\\host\path\to\file) are not translated correctly to URLs and back.
	The URL should be something like file:////host/path/to/file.
	Note that a combination of drive letter and remote host is not
	possible.

Wed Mar 17 22:30:10 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py:
	Delete non-standard-conforming code in urljoin() that would use the
	netloc from the base url as the default netloc for the resulting url
	even if the schemes differ.

	Once upon a time, when the web was wild, this was a valuable hack
	because some people had a URL referencing an ftp server colocated with
	an http server without having the host in the ftp URL (so they could
	replicate it or change the hostname easily).

	More recently, after the file: scheme got added back to the list of
	schemes that accept a netloc, it turns out that this caused weirdness
	when joining an http: URL with a file: URL -- the resulting file: URL
	would always inherit the host from the http: URL because the file:
	scheme supports a netloc but in practice never has one.

	There are two reasons to get rid of the old, once-valuable hack,
	instead of removing the file: scheme from the uses_netloc list.  One,
	the RFC says that file: uses the netloc syntax, and does not endorse
	the old hack.  Two, neither netscape 4.5 nor IE 4.0 support the old
	hack.

	* Include/ceval.h, Include/abstract.h:
	Add DLL level b/w compat for PySequence_In and PyEval_CallObject

Tue Mar 16 21:54:50 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/lib-tk/Tkinter.py: Bug reported by Jim Robinson:

	An attempt to execute grid_slaves with arguments (0,0) results in
	*all* of the slaves being returned, not just the slave associated with
	row 0, column 0.  This is because the test for arguments in the method
	does not test to see if row (and column) does not equal None, but
	rather just whether is evaluates to non-false.  A value of 0 fails
	this test.

Tue Mar 16 14:17:48 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Modules/cmathmodule.c:
	Docstring fix:  acosh() returns the hyperbolic arccosine, not the
	hyperbolic cosine.  Problem report via David Ascher by one of his
	students.

Mon Mar 15 21:40:59 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* configure.in:
	Should test for gethost*by*name_r, not for gethostname_r (which
	doesn't exist and doesn't make sense).

	* Modules/socketmodule.c:
	Patch by Rob Riggs for Linux -- glibc2 has a different argument
	converntion for gethostbyname_r() etc. than Solaris!

	* Python/thread_pthread.h: Rob Riggs wrote:

	"""
	Spec says that on success pthread_create returns 0. It does not say
	that an error code will be < 0. Linux glibc2 pthread_create() returns
	ENOMEM (12) when one exceed process limits. (It looks like it should
	return EAGAIN, but that's another story.)

	For reference, see:
	http://www.opengroup.org/onlinepubs/7908799/xsh/pthread_create.html
	"""

	[I have a feeling that similar bugs were fixed before; perhaps someone
	could check that all error checks no check for != 0?]

	* Tools/bgen/bgen/bgenObjectDefinition.py:
	New mixin class that defines cmp and hash that use
	the ob_itself pointer.  This allows (when using the mixin)
	different Python objects pointing to the same C object and
	behaving well as dictionary keys.

	Or so sez Jack Jansen...

	* Lib/urllib.py: Yet another patch by Sjoerd Mullender:

	Don't convert URLs to URLs using pathname2url.

Fri Mar 12 22:15:43 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/cmd.py: Patch by Michael Scharf.  He writes:

	    The module cmd requires for each do_xxx command a help_xxx
	    function. I think this is a little old fashioned.

	    Here is a patch: use the docstring as help if no help_xxx
	    function can be found.

	[I'm tempted to rip out all the help_* functions from pdb, but I'll
	resist it.  Any takers?  --Guido]

	* Tools/freeze/freeze.py: Bug submitted by Wayne Knowles, who writes:

	   Under Windows, python freeze.py -o hello hello.py
	   creates all the correct files in the hello subdirectory, but the
	   Makefile has the directory prefix in it for frozen_extensions.c
	   nmake fails because it tries to locate hello/frozen_extensions.c

	(His fix adds a call to os.path.basename() in the appropriate place.)

	* Objects/floatobject.c, Objects/intobject.c:
	Vladimir has restructured his code somewhat so that the blocks are now
	represented by an explicit structure.  (There are still too many casts
	in the code, but that may be unavoidable.)

	Also added code so that with -vv it is very chatty about what it does.

	* Demo/zlib/zlibdemo.py, Demo/zlib/minigzip.py:
	Change #! line to modern usage; also chmod +x

	* Demo/pdist/rrcs, Demo/pdist/rcvs, Demo/pdist/rcsbump:
	Change #! line to modern usage

	* Lib/nturl2path.py, Lib/urllib.py: From: Sjoerd Mullender

	The filename to URL conversion didn't properly quote special
	characters.
	The URL to filename didn't properly unquote special chatacters.

	* Objects/floatobject.c:
	OK, try again.  Vladimir gave me a fix for the alignment bus error,
	so here's his patch again.  This time it works (at least on Solaris,
	Linux and Irix).

Thu Mar 11 23:21:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/idle/PathBrowser.py:
	Don't crash when sys.path contains an empty string.

	* Tools/idle/PathBrowser.py:
	- Don't crash in the case where a superclass is a string instead of a
	pyclbr.Class object; this can happen when the superclass is
	unrecognizable (to pyclbr), e.g. when module renaming is used.

	- Show a watch cursor when calling pyclbr (since it may take a while
	recursively parsing imported modules!).

Thu Mar 11 16:04:04 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/mimetypes.py:
	Added .rdf and .xsl as application/xml types.  (.rdf is for the
	Resource Description Framework, a metadata encoding, and .xsl is for
	the Extensible Stylesheet Language.)

Thu Mar 11 13:26:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_popen2, Lib/test/test_popen2.py:
	Test for popen2 module, by Chris Tismer.

	* Objects/floatobject.c:
	Alas, Vladimir's patch caused a bus error (probably double
	alignment?), and I didn't test it.  Withdrawing it for now.

Wed Mar 10 22:55:47 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Objects/floatobject.c:
	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
	floats on finalization.

	* Objects/intobject.c:
	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
	integers on finalization.

	* Tools/idle/EditorWindow.py, Tools/idle/Bindings.py:
	Add PathBrowser to File module

	* Tools/idle/PathBrowser.py:
	"Path browser" - 4 scrolled lists displaying:
	    directories on sys.path
	    modules in selected directory
	    classes in selected module
	    methods of selected class

	Sinlge clicking in a directory, module or class item updates the next
	column with info about the selected item.  Double clicking in a
	module, class or method item opens the file (and selects the clicked
	item if it is a class or method).

	I guess eventually I should be using a tree widget for this, but the
	ones I've seen don't work well enough, so for now I use the old
	Smalltalk or NeXT style multi-column hierarchical browser.

	* Tools/idle/MultiScrolledLists.py:
	New utility: multiple scrolled lists in parallel

	* Tools/idle/ScrolledList.py: - White background.
	- Display "(None)" (or text of your choosing) when empty.
	- Don't set the focus.

Tue Mar  9 19:31:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	open_http also had the 'data is None' test backwards.  don't call with the
	extra argument if data is None.

	* Demo/embed/demo.c:
	Call Py_SetProgramName() instead of redefining getprogramname(),
	reflecting changes in the runtime around 1.5 or earlier.

	* Python/ceval.c:
	Always test for an error return (usually NULL or -1) without setting
	an exception.

	* Modules/timemodule.c: Patch by Chris Herborth for BeOS code.
	He writes:

	I had an off-by-1000 error in floatsleep(),
	and the problem with time.clock() is that it's not implemented properly
	on QNX... ANSI says it's supposed to return _CPU_ time used by the
	process, but on QNX it returns the amount of real time used... so I was
	confused.

	* Tools/bgen/bgen/macsupport.py: Small change by Jack Jansen.
	Test for self.returntype behaving like OSErr rather than being it.

Thu Feb 25 16:14:58 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	http_error had the 'data is None' test backwards.  don't call with the
	extra argument if data is None.

	* Lib/urllib.py: change indentation from 8 spaces to 4 spaces

	* Lib/urllib.py: pleasing the tabnanny

Thu Feb 25 14:26:02 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/colorsys.py:
	Oops, one more "x, y, z" to convert...

	* Lib/colorsys.py:
	Adjusted comment at the top to be less confusing, following Fredrik
	Lundh's example.

	Converted comment to docstring.

Wed Feb 24 18:49:15 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/toaiff.py:
	Use sndhdr instead of the obsolete whatsound module.

Wed Feb 24 18:42:38 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	When performing a POST request, i.e. when the second argument to
	urlopen is used to specify form data, make sure the second argument is
	threaded through all of the http_error_NNN calls.  This allows error
	handlers like the redirect and authorization handlers to properly
	re-start the connection.

Wed Feb 24 16:25:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/mhlib.py: Patch by Lars Wirzenius:

		o the initial comment is wrong: creating messages is already
		  implemented

		o Message.getbodytext: if the mail or it's part contains an
		  empty content-transfer-encoding header, the code used to
		  break; the change below treats an empty encoding value the same
		  as the other types that do not need decoding

		o SubMessage.getbodytext was missing the decode argument; the
		  change below adds it; I also made it unconditionally return
		  the raw text if decoding was not desired, because my own
		  routines needed that (and it was easier than rewriting my
		  own routines ;-)

Wed Feb 24 00:35:43 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>

	* Python/bltinmodule.c (initerrors):
	Make sure that the exception tuples ("base-classes" when
	string-based exceptions are used) reflect the real class hierarchy,
	i.e. that SystemExit derives from Exception not StandardError.

	* Lib/exceptions.py:
	Document the correct class hierarchy for SystemExit.  It is not an
	error and so it derives from Exception and not SystemError.  The
	docstring was incorrect but the implementation was fine.

Tue Feb 23 23:07:51 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/shutil.py:
	Add import sys, needed by reference to sys.exc_info() in rmtree().
	Discovered by Mitch Chapman.

	* config.h.in:
	Now that we don't have AC_CHECK_LIB(m, pow), the HAVE_LIBM symbol
	disappears.  It wasn't used anywhere anyway...

	* Modules/arraymodule.c:
	Carefully check for overflow when allocating the memory for fromfile
	-- someone tried to pass in sys.maxint and got bitten by the bogus
	calculations.

	* configure.in:
	Get rid of AC_CHECK_LIB(m, pow) since this is taken care of later with
	LIBM (from --with-libm=...); this actually broke the customizability
	offered by the latter option.  Thanks go to Clay Spence for reporting
	this.

	* Lib/test/test_dl.py:
	1. Print the error message (carefully) when a dl.open() fails in verbose mode.
	2. When no test case worked, raise ImportError instead of failing.

	* Python/bltinmodule.c:
	Patch by Tim Peters to improve the range checks for range() and
	xrange(), especially for platforms where int and long are different
	sizes (so sys.maxint isn't actually the theoretical limit for the
	length of a list, but the largest C int is -- sys.maxint is the
	largest Python int, which is actually a C long).

	* Makefile.in:
	1. Augment the DG/UX rule so it doesn't break the BeOS build.
	2. Add $(EXE) to various occurrences of python so it will work on
	   Cygwin with egcs (after setting EXE=.exe).  These patches by
	   Norman Vine.

	* Lib/posixfile.py:
	According to Jeffrey Honig, bsd/os 2.0 - 4.0 should be added to the
	list (of bsd variants that have a different lock structure).

	* Lib/test/test_fcntl.py:
	According to Jeffrey Honig, bsd/os 4.0 should be added to the list.

	* Modules/timemodule.c:
	Patch by Tadayoshi Funaba (with some changes) to be smarter about
	guessing what happened when strftime() returns 0.  Is it buffer
	overflow or was the result simply 0 bytes long?  (This happens for an
	empty format string, or when the format string is a single %Z and the
	timezone is unknown.)  if the buffer is at least 256 times as long as
	the format, assume the latter.

Mon Feb 22 19:01:42 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	As Des Barry points out, we need to call pathname2url(file) in two
	calls to addinfourl() in open_file().

	* Modules/Setup.in: Document *static* -- in two places!

	* Modules/timemodule.c:
	We don't support leap seconds, so the seconds field of a time 9-tuple
	should be in the range [0-59].  Noted by Tadayoshi Funaba.

	* Modules/stropmodule.c:
	In atoi(), don't use isxdigit() to test whether the last character
	converted was a "digit" -- use isalnum().  This test is there only to
	guard against "+" or "-" being interpreted as a valid int literal.
	Reported by Takahiro Nakayama.

	* Lib/os.py:
	As Finn Bock points out, _P_WAIT etc. don't have a leading underscore
	so they don't need to be treated specially here.

Mon Feb 22 15:38:58 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Misc/NEWS:
	Typo:  "apparentlt" --> "apparently"

Mon Feb 22 15:38:46 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py: Steve Clift pointed out that 'file' allows a netloc.

	* Modules/posixmodule.c:
	The docstring for ttyname(..) claims a second "mode" argument. The
	actual code does not allow such an argument.  (Finn Bock.)

	* Lib/lib-old/poly.py:
	Dang.  Even though this is obsolete code, somebody found a bug, and I
	fix it.  Oh well.

Thu Feb 18 20:51:50 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/pyclbr.py:
	Bow to font-lock at the end of the docstring, since it throws stuff
	off.

	Make sure the path paramter to readmodule() is a list before adding it
	with sys.path, or the addition could fail.


======================================================================


From 1.5.2b1 to 1.5.2b2
=======================

General
-------

- Many memory leaks fixed.

- Many small bugs fixed.

- Command line option -OO (or -O -O) suppresses inclusion of doc
strings in resulting bytecode.

Windows-specific changes
------------------------

- New built-in module winsound provides an interface to the Win32
PlaySound() call.

- Re-enable the audioop module in the config.c file.

- On Windows, support spawnv() and associated P_* symbols.

- Fixed the conversion of times() return values on Windows.

- Removed freeze from the installer -- it doesn't work without the
source tree.  (See FAQ 8.11.)

- On Windows 95/98, the Tkinter module now is smart enough to find
Tcl/Tk even when the PATH environment variable hasn't been set -- when
the import of _tkinter fails, it searches in a standard locations,
patches os.environ["PATH"], and tries again.  When it still fails, a
clearer error message is produced.  This should avoid most
installation problems with Tkinter use (e.g. in IDLE).

- The -i option doesn't make any calls to set[v]buf() for stdin --
this apparently screwed up _kbhit() and the _tkinter main loop.

- The ntpath module (and hence, os.path on Windows) now parses out UNC
paths (e.g. \\host\mountpoint\dir\file) as "drive letters", so that
splitdrive() will \\host\mountpoint as the drive and \dir\file as the
path.  ** EXPERIMENTAL **

- Added a hack to the exit code so that if (1) the exit status is
nonzero and (2) we think we have our own DOS box (i.e. we're not
started from a command line shell), we print a message and wait for
the user to hit a key before the DOS box is closed.

- Updated the installer to WISE 5.0g.  Added a dialog warning about
the imminent Tcl installation.  Added a dialog to specify the program
group name in the start menu.  Upgraded the Tcl installer to Tcl
8.0.4.

Changes to intrinsics
---------------------

- The repr() or str() of a module object now shows the __file__
attribute (i.e., the file which it was loaded), or the string
"(built-in)" if there is no __file__ attribute.

- The range() function now avoids overflow during its calculations (if
at all possible).

- New info string sys.hexversion, which is an integer encoding the
version in hexadecimal.  In other words, hex(sys.hexversion) ==
0x010502b2 for Python 1.5.2b2.

New or improved ports
---------------------

- Support for Nextstep descendants (future Mac systems).

- Improved BeOS support.

- Support dynamic loading of shared libraries on NetBSD platforms that 
use ELF (i.e., MIPS and Alpha systems).

Configuration/build changes
---------------------------

- The Lib/test directory is no longer included in the default module
search path (sys.path) -- "test" has been a package ever since 1.5.

- Now using autoconf 2.13.

New library modules
-------------------

- New library modules asyncore and asynchat: these form Sam Rushing's
famous asynchronous socket library.  Sam has gracefully allowed me to
incorporate these in the standard Python library.

- New module statvfs contains indexing constants for [f]statvfs()
return tuple.

Changes to the library
----------------------

- The wave module (platform-independent support for Windows sound
files) has been fixed to actually make it work.

- The sunau module (platform-independent support for Sun/NeXT sound
files) has been fixed to work across platforms.  Also, a weird
encoding bug in the header of the audio test data file has been
corrected.

- Fix a bug in the urllib module that occasionally tripped up
webchecker and other ftp retrieves.

- ConfigParser's get() method now accepts an optional keyword argument
(vars) that is substituted on top of the defaults that were setup in
__init__.  You can now also have recusive references in your
configuration file.

- Some improvements to the Queue module, including a put_nowait()
module and an optional "block" second argument, to get() and put(),
defaulting to 1.

- The updated xmllib module is once again compatible with the version
present in Python 1.5.1 (this was accidentally broken in 1.5.2b1).

- The bdb module (base class for the debugger) now supports
canonicalizing pathnames used in breakpoints.  The derived class must
override the new canonical() method for this to work.  Also changed
clear_break() to the backwards compatible old signature, and added
clear_bpbynumber() for the new functionality.

- In sgmllib (and hence htmllib), recognize attributes even if they
don't have space in front of them.  I.e.  '<a
name="foo"href="bar.html">' will now have two attributes recognized.

- In the debugger (pdb), change clear syntax to support three
alternatives: clear; clear file:line; clear bpno bpno ...

- The os.path module now pretends to be a submodule within the os
"package", so you can do things like "from os.path import exists".

- The standard exceptions now have doc strings.

- In the smtplib module, exceptions are now classes.  Also avoid
inserting a non-standard space after "TO" in rcpt() command.

- The rfc822 module's getaddrlist() method now uses all occurrences of
the specified header instead of just the first.  Some other bugfixes
too (to handle more weird addresses found in a very large test set,
and to avoid crashes on certain invalid dates), and a small test
module has been added.

- Fixed bug in urlparse in the common-case code for HTTP URLs; it
would lose the query, fragment, and/or parameter information.

- The sndhdr module no longer supports whatraw() -- it depended on a
rare extenral program.

- The UserList module/class now supports the extend() method, like
real list objects.

- The uu module now deals better with trailing garbage generated by
some broke uuencoders.

- The telnet module now has an my_interact() method which uses threads
instead of select.  The interact() method uses this by default on
Windows (where the single-threaded version doesn't work).

- Add a class to mailbox.py for dealing with qmail directory
mailboxes.  The test code was extended to notice these being used as
well.

Changes to extension modules
----------------------------

- Support for the [f]statvfs() system call, where it exists.

- Fixed some bugs in cPickle where bad input could cause it to dump
core.

- Fixed cStringIO to make the writelines() function actually work.

- Added strop.expandtabs() so string.expandtabs() is now much faster.

- Added fsync() and fdatasync(), if they appear to exist.

- Support for "long files" (64-bit seek pointers).

- Fixed a bug in the zlib module's flush() function.

- Added access() system call.  It returns 1 if access granted, 0 if
not.

- The curses module implements an optional nlines argument to
w.scroll().  (It then calls wscrl(win, nlines) instead of scoll(win).)

Changes to tools
----------------

- Some changes to IDLE; see Tools/idle/NEWS.txt.

- Latest version of Misc/python-mode.el included.

Changes to Tkinter
------------------

- Avoid tracebacks when an image is deleted after its root has been
destroyed.

Changes to the Python/C API
---------------------------

- When parentheses are used in a PyArg_Parse[Tuple]() call, any
sequence is now accepted, instead of requiring a tuple.  This is in
line with the general trend towards accepting arbitrary sequences.

- Added PyModule_GetFilename().

- In PyNumber_Power(), remove unneeded and even harmful test for float
to the negative power (which is already and better done in
floatobject.c).

- New version identification symbols; read patchlevel.h for info.  The
version numbers are now exported by Python.h.

- Rolled back the API version change -- it's back to 1007!

- The frozenmain.c function calls PyInitFrozenExtensions().

- Added 'N' format character to Py_BuildValue -- like 'O' but doesn't
INCREF.


======================================================================


From 1.5.2a2 to 1.5.2b1
=======================

Changes to intrinsics
---------------------

- New extension NotImplementedError, derived from RuntimeError.  Not
used, but recommended use is for "abstract" methods to raise this.

- The parser will now spit out a warning or error when -t or -tt is
used for parser input coming from a string, too.

- The code generator now inserts extra SET_LINENO opcodes when
compiling multi-line argument lists.

- When comparing bound methods, use identity test on the objects, not
equality test.

New or improved ports
---------------------

- Chris Herborth has redone his BeOS port; it now works on PowerPC
(R3/R4) and x86 (R4 only).  Threads work too in this port.

Renaming
--------

- Thanks to Chris Herborth, the thread primitives now have proper Py*
names in the source code (they already had those for the linker,
through some smart macros; but the source still had the old, un-Py
names).

Configuration/build changes
---------------------------

- Improved support for FreeBSD/3.

- Check for pthread_detach instead of pthread_create in libc.

- The makesetup script now searches EXECINCLUDEPY before INCLUDEPY.

- Misc/Makefile.pre.in now also looks at Setup.thread and Setup.local.
Otherwise modules such as thread didn't get incorporated in extensions.

New library modules
-------------------

- shlex.py by Eric Raymond provides a lexical analyzer class for
simple shell-like syntaxes.

- netrc.py by Eric Raymond provides a parser for .netrc files.  (The
undocumented Netrc class in ftplib.py is now obsolete.)

- codeop.py is a new module that contains the compile_command()
function that was previously in code.py.  This is so that JPython can
provide its own version of this function, while still sharing the
higher-level classes in code.py.

- turtle.py is a new module for simple turtle graphics.  I'm still
working on it; let me know if you use this to teach Python to children 
or other novices without prior programming experience.

Obsoleted library modules
-------------------------

- poly.py and zmod.py have been moved to Lib/lib-old to emphasize
their status of obsoleteness.  They don't do a particularly good job
and don't seem particularly relevant to the Python core.

New tools
---------

- I've added IDLE: my Integrated DeveLopment Environment for Python.
Requires Tcl/Tk (and Tkinter).  Works on Windows and Unix (and should
work on Macintosh, but I haven't been able to test it there; it does
depend on new features in 1.5.2 and perhaps even new features in
1.5.2b1, especially the new code module).  This is very much a work in
progress.  I'd like to hear how people like it compared to PTUI (or
any other IDE they are familiar with).

- New tools by Barry Warsaw:

  = audiopy: controls the Solaris Audio device
  = pynche:  The PYthonically Natural Color and Hue Editor
  = world:   Print mappings between country names and DNS country codes

New demos
---------

- Demo/scripts/beer.py prints the lyrics to an arithmetic drinking
song.

- Demo/tkinter/guido/optionmenu.py shows how to do an option menu in