File: CHANGES.rst

package info (click to toggle)
astropy 5.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 41,972 kB
  • sloc: python: 219,331; ansic: 147,297; javascript: 13,556; lex: 8,496; sh: 3,319; xml: 1,622; makefile: 185
file content (15477 lines) | stat: -rw-r--r-- 545,735 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
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
Version 5.2.1 (2023-01-06)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix to ITRS frame ``earth_location`` attribute to give the correct result for
  a topocentric frame. [#14180]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Bounds are no longer passed to the scipy minimizer for methods Brent and
  Golden. The scipy minimizer never used the bounds but silently accepted them.
  In scipy v1.11.0.dev0+ an error is raised, so we now pass None as the bounds
  to the minimizer. Users should not be affected by this change. [#14232]

astropy.io.fits
^^^^^^^^^^^^^^^

- Tables with multidimensional variable length array can now be properly read
  and written. [#13417]

astropy.units
^^^^^^^^^^^^^

- Modified the behavior of ``numpy.histogram()``,
  ``numpy.histogram_bin_edges()``, ``numpy.histogram2d()``, and
  ``numpy.histogramdd()`` so that the ``range`` argument must a compatible
  instance of ``astropy.units.Quantity`` if the other arguments are instances of
  ``astropy.units.Quantity``. [#14213]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Improved the performance of drawing WCSAxes grids by skipping some unnecessary
  computations. [#14164]

- Fixed WCSAxes sometimes triggering a NumPy RuntimeWarning when determining the
  coordinate range of the axes. [#14211]

Other Changes and Additions
---------------------------

- Fix compatibility with Numpy 1.24. [#14193]

Version 5.2 (2022-12-12)
========================

New Features
------------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Adds new topocentric ITRS frame and direct transforms to and from the observed
  frames ``AltAz`` and ``HADec`` with the ability to add or remove refraction
  corrections as required. Since these frames are all within the ITRS, there are
  no corrections applied other than refraction in the transforms. This makes the
  topocentric ITRS frame and these transforms convenient for observers of near
  Earth objects where stellar aberration should be omitted. [#13398]

- Allow comparing ``SkyCoord`` to frames with data. [#13477]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmology instance can be parsed from or converted to a HTML table using
  the new HTML methods in Cosmology's ``to/from_format`` I/O. [#13075]

- A new comparison function has been added -- ``cosmology_equal()`` -- that
  mirrors its ``numpy`` counterpart but allows for the arguments to be converted
  to a ``Cosmology`` and to compare flat cosmologies with their non-flat
  equivalents. [#13104]

- Cosmology equivalence for flat FLRW cosmologies has been generalized to apply
  to all cosmologies using the FlatCosmology mixin. [#13261]

- The cosmological redshift unit now has a physical type of ``"redshift"``. [#13561]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Add ability to read and write a fixed width ASCII table that includes additional
  header rows specifying any or all of the column dtype, unit, format, and
  description. This is available in the ``fixed_width`` and
  ``fixed_width_two_line`` formats via the new ``header_rows`` keyword argument. [#13734]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added support to the ``io.fits`` API for reading and writing file paths of the
  form ``~/file.fits`` or ``~<username>/file.fits``, referring to the home
  directory of the current user or the specified user, respectively. [#13131]

- Added support for opening remote and cloud-hosted FITS files using the
  ``fsspec`` package, which has been added as an optional dependency. [#13238]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Added support in ``io.votable`` for reading and writing file paths of the form
  ``~/file.xml`` or ``~<username>/file.xml``, referring to the home directory of
  the current user or the specified user, respectively. [#13149]

astropy.modeling
^^^^^^^^^^^^^^^^

- Add option to non-linear fitters which enables automatic
  exclusion of non-finite values from the fit data. [#13259]

astropy.nddata
^^^^^^^^^^^^^^

- Modified ``Cutout2D`` to allow objects of type ``astropy.io.fits.Section``
  to be passed to the ``data`` parameter. [#13238]

- Add a PSF image representation to ``astropy.nddata.NDData`` and ``astropy.nddata.CCDData``. [#13743]

astropy.table
^^^^^^^^^^^^^

- An Astropy table can now be converted to a scalar NumPy object array. For NumPy
  >= 1.20, a list of Astropy tables can be converted to an NumPy object array of
  tables. [#13469]

astropy.time
^^^^^^^^^^^^

- Added the ``astropy.time.Time.mean()`` method which also enables the ``numpy.mean()`` function to be used on instances of ``astropy.time.Time``. [#13508]

- Improve the performance of getting the string representation of a large ``Time``
  or ``TimeDelta`` object. This is done via a new ``to_string()`` method that does
  the time string format conversion only for the outputted values. Previously the
  entire array was formatted in advance. [#13555]

astropy.units
^^^^^^^^^^^^^

- It is now possible to use unit format names as string format specifiers for a
  ``Quantity``, e.g. ``f'{1e12*u.m/u.s:latex_inline}'`` now produces the string
  ``'$1 \\times 10^{12} \\; \\mathrm{m\\,s^{-1}}$'``. [#13050]

- Ensure that the ``argmin`` and ``argmax`` methods of ``Quantity`` support the
  ``keepdims`` argument when numpy does (numpy version 1.22 and later). [#13329]

- ``numpy.lib.recfunctions.merge_arrays()`` is registered with numpy overload for
  ``Quantity``. [#13669]

- Added SI prefixes for quecto ("q", :math:`10^{-30}`), ronto ("r",
  :math:`10^{-27}`), ronna ("R", :math:`10^{27}`), and quetta ("Q",
  :math:`10^{30}`). [#14046]

astropy.utils
^^^^^^^^^^^^^

- Added the ``use_fsspec``, ``fsspec_kwargs``, and ``close_files`` arguments
  to ``utils.data.get_readable_fileobj``. [#13238]

- Ensure that the ``argmin`` and ``argmax`` methods of ``Masked`` instances
  support the ``keepdims`` argument when numpy does (numpy version 1.22 and
  later). [#13329]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Add helper functions for WCSAxes instances to draw the instrument beam and a physical scale. [#12102]

- Add a ``scatter_coord`` method to the ``wcsaxes`` functionality based on the
  existing ``plot_coord`` method but that calls ``matplotlib.pyplot.scatter``. [#13562]

- Added a ``sinh`` stretch option to ``simple_norm``. [#13746]

- It is now possible to define "tickable" gridlines for the purpose of placing ticks or tick labels in the interior of WCSAxes plots. [#13829]


API Changes
-----------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Removed deprecated ``MexicanHat1DKernel`` and ``MexicanHat2DKernel``
  classes. Please use ``RickerWavelet1DKernel`` and
  ``RickerWavelet2DKernel`` instead. [#13300]

astropy.units
^^^^^^^^^^^^^

- Multiplying a ``LogQuantity`` like ``Magnitude`` with dimensionless physical
  units by an array will no longer downcast to ``Quantity``. [#12579]

- Quantity normally upcasts integer dtypes to floats, unless the dtype is
  specifically provided.
  Before this happened when ``dtype=None``; now the default has been changed to
  ``dtype=numpy.inexact`` and ``dtype=None`` has the same meaning as in `numpy`. [#12941]

- In "in-place unit changes" of the form ``quantity <<= new_unit``, the result
  will now share memory with the original only if the conversion could be done
  through a simple multiplication with a scale factor. Hence, memory will not be
  shared if the quantity has integer ```dtype``` or is structured, or when the
  conversion is through an equivalency. [#13638]

- When ``Quantity`` is constructed from a structured array and ``unit`` is
  ``None``, the default unit is now structured like the input data. [#13676]

astropy.utils
^^^^^^^^^^^^^

- ``astropy.utils.misc.suppress`` has been removed, use ``contextlib.suppress``
  instead. ``astropy.utils.namedtuple_asdict`` has been removed, instead use
  method ``._asdict`` on a ``namedtuple``. ``override__dir__`` has been deprecated
  and will be removed in a future version, see the docstring for the better
  alternative. [#13636]

- ``astropy.utils.misc.possible_filename`` has been removed. [#13661]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Rename number-of-samples keyword ``nsamples`` in ``ZScaleInterval`` to align
  with the ``n_samples`` keyword used in all other ``Interval`` classes in
  this module. [#13810]


Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed convolution Kernels to ensure the that returned kernels
  are normalized to sum to one (e.g., ``Gaussian1DKernel``,
  ``Gaussian2DKernel``). Also fixed the Kernel ``truncation`` calculation. [#13299]

- Fix import error with setuptools v65.6.0 by replacing
  ``numpy.ctypeslib.load_library`` with Cython to load the C convolution
  extension. [#14035]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``BaseCoordinateFrame.get_frame_attr_names()`` had a misleading name,
  because it actually provided a ``dict`` of attribute names and
  their default values. It is now deprecated and replaced by ``BaseCoordinateFrame.get_frame_attr_defaults()``.
  The fastest way to obtain the attribute names is ``BaseFrame.frame_attributes.keys()``. [#13484]

- Fixed bug that caused ``earth_orientation.nutation_matrix()`` to error instead of returning output. [#13572]

- Ensure that ``angle.to_string()`` continues to work after pickling,
  and that units passed on to ``to_string()`` or the ``Angle``
  initializer can be composite units (like ``u.hour**1``), which might
  result from preceding calculations. [#13933]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``report_diff_values()`` have now two new parameters ``rtol`` and ``atol`` to make the
  report consistent with ``numpy.allclose`` results.
  This fixes ``FITSDiff`` with multi-dimensional columns. [#13465]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed two bugs in validator.validator.make_validation_report:
  - ProgressBar iterator was not called correctly.
  - make_validation_report now handles input string urls correctly. [#14102]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Fixed a performance regression in ``timeseries.aggregate_downsample``
  introduced in Astropy 5.0 / #11266. [#13069]

astropy.units
^^^^^^^^^^^^^

- Unit changes of the form ``quantity <<= new_unit`` will now work also if the
  quantity is integer. The result will always be float. This means that the result
  will not share memory with the original. [#13638]

- Ensure dimensionless quantities can be added inplace to regular ndarray. [#13913]

astropy.utils
^^^^^^^^^^^^^

- Fixed an incompatibility with latest Python 3.1x versions that kept
  ``astropy.utils.data.download_file`` from switching to TLS+FTP mode. [#14092]

- ``np.quantile`` and ``np.percentile`` can now be used on ``Masked``
   arrays and quantities also with ``keepdims=True``. [#14113]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Significantly improve performance of ``ManualInterval`` when both limits
  are specified manually. [#13898]


Other Changes and Additions
---------------------------

- The deprecated private ``astropy._erfa`` module has been removed. Use
  ``pyerfa``, which is a dependency of ``astropy`` and can be imported directly
  using ``import erfa``. [#13317]

- The minimum version required for numpy is now 1.20 and that for scipy 1.5. [#13885]

- Updated the bundled CFITSIO library to 4.2.0. [#14020]


Version 5.1.1 (2022-10-23)
==========================

API Changes
-----------

astropy.wcs
^^^^^^^^^^^

- The ``pixel`` argument to ``astropy.visualization.wcsaxes.ticklabels.TickLabels.add``
  no longer does anything, is deprecated, and will be removed in a future
  astropy version. It has been replaced by a new required ``data`` argument, which
  should be used to specify the data coordinates of the tick label being added.

  This changes has been made because it is (in general) not possible to correctly
  calculate pixel coordinates before Matplotlib is drawing a figure. [#12630]


Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug that prevented ``SkyOffsetFrame`` instances to be pickled by adding
  a custom ``__reduce__`` method to the class (see issue #9249). [#13305]

- Fixed the check for invalid ``Latitude`` values for float32 values.
  ``Latitude`` now accepts the float32 value of pi/2, which was rejected
  before because a comparison was made using the slightly smaller float64 representation.
  See issue #13708. [#13745]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed confusing chained exception messages of ``read()`` function when it fails. [#13170]

- When writing out a :class:`~astropy.table.Table` to HTML format, the
  ``formats`` keyword argument to the :meth:`~astropy.table.Table.write` method
  will now be applied. [#13453]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``heapsize`` is now checked for VLA tables. An error is thrown whether P format is used
  but the heap size is bigger than what can be indexed with a 32 bit signed int. [#13429]

- Fix parsing of ascii TFORM when precision is missing. [#13520]

- A compressed image HDU created from the header of a PRIMARY HDU, now correctly updates
  'XTENSION' and 'SIMPLE' keywords. [#13557]

- Empty variable-length arrays are now properly handled when pathological combinations of
  heapoffset and heapsize are encountered. [#13621]

- ``PCOUNT`` and ``GCOUNT`` keywords are now removed from an uncompressed Primary header,
  for compliancy with ``fitsverify`` behavior. [#13753]

astropy.modeling
^^^^^^^^^^^^^^^^

- Bugfix for using ``MagUnit`` units on model parameters. [#13158]

- Fix bug in using non-linear fitters to fit 0-degree polynomials using weights. [#13628]

astropy.table
^^^^^^^^^^^^^

- Fix a problem where accessing one field of a structured column returned a Column
  with the same info as the original column. This resulted in unintuitive behavior
  in general and an exception if the format for the column was set. [#13269]

- Tables with columns with structured data can now be properly stacked and joined. [#13306]

- Update jQuery to 3.6.0, to pick up security fixes. [#13438]

- Fix a Python 3.11 compatibility issue. Ensure that when removing a table column
  that the ``pprint_include_names`` or ``pprint_exclude_names`` attributes get
  updated correctly. [#13639]

- When using ``add_columns`` with same indexes in ``indexes`` option or without
  specifying the option, the order of the new columns will now be kept. [#13783]

- Fix a bug when printing or getting the representation of a multidimensional
  table column that has a zero dimension. [#13838]

- Ensure that mixin columns and their ``info`` are not shared between tables
  even when their underlying data is shared with ``copy=False``. [#13842]

astropy.time
^^^^^^^^^^^^

- Fix ``Time.insert()`` on times which have their ``out_subfmt`` set. [#12732]

- Prevent ``Time()`` from being initialized with an invalid precision
  leading to incorrect results when representing the time as a string. [#13068]

- Fix a bug in Time where a date string like "2022-08-01.123" was being parsed
  as an ISO-format time "2022-08-01 00:00:00.123". The fractional part at the
  end of the string was being taken as seconds. Now this raises an exception
  because the string is not in ISO format. [#13731]

astropy.units
^^^^^^^^^^^^^

- Significantly improved the performance of parsing composite units with the FITS
  format, by ensuring the ``detailed_exception`` argument is properly passed on
  and thus used. [#12699]

- Ensure that ``np.concatenate`` on quantities can take a ``dtype`` argument (added in numpy 1.20). [#13323]

- Ensure that the units of any ``initial`` argument to reductions such as
  ``np.add.reduce`` (which underlies ``np.sum``) are properly taken into account. [#13340]

astropy.utils
^^^^^^^^^^^^^

- Ensure that ``np.concatenate`` on masked data can take a ``dtype`` argument (added in numpy 1.20). [#13323]

- Fix error when suppressing download progress bar while using non-default
  ``sys.stdout`` stream. [#13352]

- Ensure ``str`` and ``repr`` work properly for ``Masked`` versions of
  structured subarrays. [#13404]

- If an attribute is created using ``deprecated_attribute()`` with the
  ``alternative`` argument then getting or setting the value of the deprecated
  attribute now accesses its replacement. [#13824]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed calling ``.tight_layout()`` on a WCSAxes. [#12418]

astropy.wcs
^^^^^^^^^^^

- ``WCS.pixel_to_world`` now creates an ``EarthLocation`` object using ``MJD-AVG``
  if present before falling back to the old behaviour of using ``MJD-OBS``. [#12598]

- The locations of ``WCSAxes`` ticks and tick-labels are now correctly calculated
  when the DPI of a figure changes between a WCSAxes being created and the figure
  being drawn, or when a rasterized artist is added to the WCSAxes. [#12630]

- Fix a bug where ``SlicedLowLevelWCS.world_to_pixel_values`` would break when
  the result of the transform is dependent on the coordinate of a sliced out
  pixel. [#13579]

- Updated bundled WCSLIB version to 7.12. This update includes bug fixes to
  ``wcssub()`` in how it handles temporal axes with -TAB and fixes handling
  of status returns from ``linp2x()`` and ``linx2p()`` relating to distortion
  functions, in particular affecting TPV distortions - see #13509. For a full
  list of changes - see http://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES or
  `astropy/cextern/wcslib/CHANGES <https://github.com/astropy/astropy/blob/24e8730c63902d035cb9110eae2a9ebec12d8905/cextern/wcslib/CHANGES>`_. [#13635]

- Fixed WCS validation not working properly if HDUList is needed
  for multi-extension FITS file. [#13668]


Other Changes and Additions
---------------------------

- Development wheels of astropy should now be installed from
  https://pypi.anaconda.org/astropy/simple instead of from
  https://pkgs.dev.azure.com/astropy-project/astropy/_packaging/nightly/pypi/simple. [#13431]

- Compatibility with Python 3.11, 3.10.7, 3.9.14, 3.8.14 [#13614]


Version 5.1 (2022-05-24)
========================

New Features
------------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ephemeris used in ``astropy.coordinates`` can now be set to any version of
  the JPL ephemeris available from https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/. [#12541]

- ``Angle.to_string()`` now accepts the ``'latex_inline'`` unit format. [#13056]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmology instance can be parsed from or converted to a YAML string using
  the new "yaml" format in Cosmology's ``to/from_format`` I/O. [#12279]

- Register "astropy.row" into Cosmology's to/from format I/O, allowing a
  Cosmology instance to be parse from or converted to an Astropy Table Row. [#12313]

- A method ``clone`` has been added to ``Parameter`` to quickly deep copy the
  object and change any constructor argument.
  A supporting equality method is added, and ``repr`` is enhanced to be able to
  roundtrip -- ``eval(repr(Parameter()))`` -- if the Parameter's arguments can
  similarly roundtrip.
  Parameter's arguments are made keyword-only. [#12479]

- Add methods ``Otot`` and ``Otot0`` to FLRW cosmologies to calculate the total
  energy density of the Universe. [#12590]

- Add property ``is_flat`` to cosmologies to calculate the curvature of the Universe.
  ``Cosmology`` is now an abstract class and subclasses must override the
  abstract property ``is_flat``. [#12606]

- For converting a cosmology to a mapping, two new boolean keyword arguments are
  added: ``cosmology_as_str`` for turning the class reference to a string,
  instead of the class object itself, and ``move_from_meta`` to merge the
  metadata with the rest of the returned mapping instead of adding it as a
  nested dictionary. [#12710]

- Register format "astropy.cosmology" with Cosmology I/O. [#12736]

- Cosmological equivalency (``Cosmology.is_equivalent``) can now be extended
  to any Python object that can be converted to a Cosmology, using the new
  keyword argument ``format``.
  This allows e.g. a properly formatted Table to be equivalent to a Cosmology. [#12740]

- The new module ``cosmology/tests/helper.py`` has been added to provide tools
  for testing the cosmology module and related extensions. [#12966]

- A new property ``nonflat`` has been added to flat cosmologies
  (``FlatCosmologyMixin`` subclasses) to get an equivalent cosmology, but of the
  corresponding non-flat class. [#13076]

- ``clone`` has been enhanced to allow for flat cosmologies to clone on the
  equivalent non-flat cosmology. [#13099]

- ``cosmology`` file I/O uses the Unified Table I/O interface, which has added
  support for reading and writing file paths of the form ``~/file.ecsv`` or
  ``~<username>/file.ecsv``, referring to the home directory of the current user
  or the specified user, respectively. [#13129]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Simplify the way that the ``converters`` argument of ``io.ascii.read`` is
  provided. Previously this required wrapping each data type as the tuple returned
  by the ``io.ascii.convert_numpy()`` function and ensuring that the value is a
  ``list``. With this update you can write ``converters={'col1': bool}`` to force
  conversion as a ``bool`` instead of the previous syntax ``converters={'col1':
  [io.ascii.convert_numpy(bool)]}``. Note that this update is back-compatible with
  the old behavior. [#13073]

- Added support in ``io.ascii`` for reading and writing file paths of the form
  ``~/file.csv`` or ``~<username>/file.csv``, referring to the home directory of
  the current user or the specified user, respectively. [#13130]

astropy.io.fits
^^^^^^^^^^^^^^^

- Add option ``unit_parse_strict`` to ``astropy.io.fits.connect.read_table_fits``
  to enable warnings or errors about invalid FITS units when using ``astropy.table.Table.read``.
  The default for this new option is ``"warn"``, which means warnings are now raised for
  columns with invalid units. [#11843]

- Changes default FITS behavior to use buffered I/O
  rather than unbuffered I/O for performance reasons. [#12081]

- ``astropy.io.fits.Header`` now has a method to calculate the size
  (in bytes) of the data portion (with or without padding) following
  that header. [#12110]

astropy.io.misc
^^^^^^^^^^^^^^^

- Allow serialization of model unit equivalencies. [#10198]

- Built-in Cosmology subclasses can now be converted to/from YAML with the
  functions ``dump`` and ``load`` in ``astropy.io.misc.yaml``. [#12279]

- Add asdf support for ``Cosine1D``, ``Tangent1D``, ``ArcSine1D``,
  ``ArcCosine1D``, and ``ArcTangent1D`` models. [#12895]

- Add asdf support for ``Spline1D`` models. [#12897]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Added support to the Unified Table I/O interface for reading and writing file
  paths of the form ``~/file.csv`` or ``~<username>/file.csv``, referring to the
  home directory of the current user or the specified user, respectively. [#13129]

astropy.modeling
^^^^^^^^^^^^^^^^

- Add new fitters based on ``scipy.optimize.least_squares`` method of non-linear
  least-squares optimization: [#12051]

      - ``TRFLSQFitter`` using the Trust Region Reflective algorithm.
      - ``LMLSQFitter`` using the Levenberg-Marquardt algorithm (implemented by ``scipy.optimize.least_squares``).
      - ``DogBoxLSQFitter`` using the dogleg algorithm.

- Enable direct use of the ``ignored`` feature of ``ModelBoundingBox`` by users in
  addition to its use as part of enabling ``CompoundBoundingBox``. [#12384]

- Switch ``modeling.projections`` to use ``astropy.wcs.Prjprm`` wrapper internally and provide access to the ``astropy.wcs.Prjprm`` structure. [#12558]

- Add error to non-finite inputs to the ``LevMarLSQFitter``, to protect against soft scipy failure. [#12811]

- Allow the ``Ellipse2D`` and ``Sersic2D`` theta parameter to be input as
  an angular quantity. [#13030]

- Added ``Schechter1D`` model. [#13116]

astropy.nddata
^^^^^^^^^^^^^^

- Add support for converting between uncertainty types. This uncertainty
  conversion system uses a similar flow to the coordinate subsystem, where
  Cartesian is used as the common system. In this case, variance is used as the
  common system. [#12057]

- The ``as_image_hdu`` option is now available for ``CCDData.to_hdu`` and
  ``CCDData.write``. This option allows the user to get an ``ImageHDU`` as the
  first item of the returned ``HDUList``, instead of the default ``PrimaryHDU``. [#12962]

- File I/O through ``nddata.CCDData`` uses the Unified I/O interface, which has
  added support for reading and writing file paths of the form ``~/file.csv`` or
  ``~<username>/file.csv``, referring to the home directory of the current user
  or the specified user, respectively. [#13129]

astropy.table
^^^^^^^^^^^^^

- A new keyword-only argument ``kind`` was added to the ``Table.sort`` method to
  specify the sort algorithm. [#12637]

- Columns which are ``numpy`` structured arrays are now fully supported,
  effectively allowing tables within tables. This applies to ``Column``,
  ``MaskedColumn``, and ``Quantity`` columns. These structured data columns
  can be stored in ECSV, FITS, and HDF5 formats. [#12644]

- Improve the performance of ``np.searchsorted`` by a factor of 1000 for a
  bytes-type ``Column`` when the search value is ``str`` or an array of ``str``.
  This happens commonly for string data stored in FITS or HDF5 format files. [#12680]

- Add support for using mixin columns in group aggregation operations when the
  mixin supports the specified operation (e.g. ``np.sum`` works for ``Quantity``
  but not ``Time``). In cases where the operation is not supported the code now
  issues a warning and drops the column instead of raising an exception. [#12825]

- Added support to the Unified Table I/O interface for reading and writing file
  paths of the form ``~/file.csv`` or ``~<username>/file.csv``, referring to the
  home directory of the current user or the specified user, respectively. [#13129]

astropy.time
^^^^^^^^^^^^

- Add support for calling ``numpy.linspace()`` with two ``Time`` instances to
  generate a or multiple linearly spaced set(s) of times. [#13132]

astropy.units
^^^^^^^^^^^^^

- ``structured_to_unstructured`` and ``unstructured_to_structured`` in
  ``numpy.lib.recfunctions`` now work with Quantity. [#12486]

- Implement multiplication and division of LogQuantities and numbers [#12566]

- New ``doppler_redshift`` equivalency to convert between
  Doppler redshift and radial velocity. [#12709]

- Added the ``where`` keyword argument to the ``mean()``,``var()``, ``std()`` and ``nansum()`` methods of
  ``astropy.units.Quantity``. Also added the ``intial`` keyword argument to ``astropy.units.Quantity.nansum()``. [#12891]

- Added "Maxwell" as a unit for magnetic flux to the CGS module. [#12975]

- ``Quantity.to_string()`` and ``FunctionUnitBase.to_string()`` now accept the
  ``'latex_inline'`` unit format. The output of ``StructuredUnit.to_string()``
  when called with ``format='latex_inline'`` is now more consistent with the
  output when called with ``format='latex'``. [#13056]

astropy.utils
^^^^^^^^^^^^^

- Added the ``where`` keyword argument to the ``mean()``, ``var()``, ``std()``, ``any()``, and ``all()`` methods of
  ``astropy.utils.masked.MaskedNDArray``. [#12891]

- Improve handling of unavailable IERS-A (predictive future Earth rotation) data
  in two ways. First, allow conversions with degraded accuracy if the IERS-A data
  are missing or do not cover the required time span. This is done with a new
  config item ``conf.iers_degraded_accuracy`` which specifies the behavior when
  times are outside the range of IERS table. The options are 'error' (raise an
  ``IERSRangeError``, default), 'warn' (issue a ``IERSDegradedAccuracyWarning``)
  or 'ignore' (ignore the problem). Second, the logic for auto-downloads was
  changed to guarantee that no matter what happens with the IERS download
  operations, only warnings will be issued. [#13052]

astropy.wcs
^^^^^^^^^^^

- ``astropy.wcs.Celprm`` and ``astropy.wcs.Prjprm`` have been added
  to allow access to lower level WCSLIB functionality and to allow direct
  access to the ``cel`` and ``prj`` members of ``Wcsprm``. [#12514]

- Add ``temporal`` properties for convenient access of/selection of/testing for
  the ``TIME`` axis introduced in WCSLIB version 7.8. [#13094]

API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``dms_to_degrees`` and ``hms_to_hours`` functions (and implicitly
  tuple-based initialization of ``Angle``) is now deprecated, as it was
  difficult to be sure about the intent of the user for signed values of
  the degrees/hours, minutes, and seconds. [#13162]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The already deprecated ``Planck18_arXiv_v2`` has been removed.
  Use ``Planck18`` instead [#12354]

- ``default_cosmology.get_cosmology_from_string`` is deprecated and will be
  removed in two minor versions.
  Use ``getattr(astropy.cosmology, <str>)`` instead. [#12375]

- In I/O, conversions of Parameters move more relevant information from the
  Parameter to the Column.
  The default Parameter ``format_spec`` is changed from ``".3g"`` to ``""``. [#12612]

- Units of redshift are added to ``z_reion`` in built-in realizations' metadata. [#12624]

- Cosmology realizations (e.g. ``Planck18``) and parameter dictionaries are now
  lazily loaded from source files. [#12746]

- The Cosmology Parameter argument "fmt" for specifying a format spec
  has been deprecated in favor of using the built-in string representation from
  the Parameter's value's dtype. [#13072]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- When reading an ECSV file, changed the type checking
  to issue an ``InvalidEcsvDatatypeWarning`` instead of raising a ``ValueError``
  exception if the ``datatype`` of a column is not recognized in the ECSV standard.
  This also applies to older versions of ECSV files which used to silently
  proceed but now warn first. [#12841]

astropy.io.fits
^^^^^^^^^^^^^^^

- Removed deprecated ``clobber`` argument from functions in ``astropy.io.fits``. [#12258]

- Add ``-s/--sort`` argument to ``fitsheader`` to sort the fitsort-mode output. [#13106]

astropy.io.misc
^^^^^^^^^^^^^^^

- Deprecate asdf in astropy core in favor of the asdf-astropy package. [#12903, #12930]

astropy.modeling
^^^^^^^^^^^^^^^^

- Made ``astropy.modeling.fitting._fitter_to_model_params`` and ``astropy.modeling.fitting._model_to_fit_params``
  public methods. [#12585]

astropy.table
^^^^^^^^^^^^^

- Change the repr of the Table object to replace embedded newlines and tabs with
  ``r'\n'`` and ``r'\t'`` respectively. This improves the display of such tables. [#12631]

- A new keyword-only argument ``kind`` was added to the ``Table.sort`` method to
  specify the sort algorithm. The signature of ``Table.sort`` was modified so that
  the ``reverse`` argument is now keyword-only. Previously ``reverse`` could be
  specified as the second positional argument. [#12637]

- Changed behavior when a structured ``numpy.ndarray`` is added as a column to a
  ``Table``. Previously this was converted to a ``NdarrayMixin`` subclass of
  ``ndarray`` and added as a mixin column. This was because saving as a file (e.g.
  HDF5, FITS, ECSV) was not supported for structured array columns. Now a
  structured ``numpy.ndarray`` is added to the table as a native ``Column`` and
  saving to file is supported. [#13236]

astropy.tests
^^^^^^^^^^^^^

- Backward-compatible import of ``astropy.tests.disable_internet``
  has been removed; use ``pytest_remotedata.disable_internet``
  from ``pytest-remotedata`` instead. [#12633]

- Backward-compatible import of ``astropy.tests.helper.remote_data``
  has been removed; use ``pytest.mark.remote_data`` from ``pytest-remotedata``
  instead. [#12633]

- The following are deprecated and will be removed in a future release.
  Use ``pytest`` warning and exception handling instead: [#12633]

  * ``astropy.io.ascii.tests.common.raises``
  * ``astropy.tests.helper.catch_warnings``
  * ``astropy.tests.helper.ignore_warnings``
  * ``astropy.tests.helper.raises``
  * ``astropy.tests.helper.enable_deprecations_as_exceptions``
  * ``astropy.tests.helper.treat_deprecations_as_exceptions``

- Backward-compatible plugin ``astropy.tests.plugins.display``
  has been removed; use ``pytest-astropy-header`` instead. [#12633]

astropy.time
^^^^^^^^^^^^

- Creating an `~astropy.time.TimeDelta` object with numerical inputs
  that do not have a unit and without specifying an explicit format,
  for example ``TimeDelta(5)``,
  now results in a `~astropy.time.TimeDeltaMissingUnitWarning`.
  This also affects statements like ``Time("2020-01-01") + 5`` or
  ``Time("2020-01-05") - Time("2020-01-03") < 5``, which implicitly
  transform the right-hand side into an `~astropy.time.TimeDelta` instance. [#12888]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The machinery that makes observatory locations available as ``EarthLocation``
  objects is now smarter about processing observatory names from its data files.
  More names are available for use and the empty string is no longer considered
  to be a valid name. [#12721]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed ``io.ascii`` read and write functions for most formats to correctly handle
  data fields with embedded newlines for both the fast and pure-Python readers and
  writers. [#12631]

- Fix an issue when writing ``Time`` table columns to a file when the time
  ``format`` is one of ``datetime``, ``datetime64``, or ``ymdhms``. Previously,
  writing a ``Time`` column with one of these formats could result in an exception
  or else an incorrect output file that cannot be read back in. [#12842]

astropy.io.fits
^^^^^^^^^^^^^^^

- Add a ``mask_invalid`` option to ``Table.read`` to allow deactivating the
  masking of NaNs in float columns and empty strings in string columns. This
  option is necessary to allow effective use of memory-mapped reading with
  ``memmap=True``. [#12544]

- Fix ``CompImageHeader.clear()``. [#13102]

astropy.modeling
^^^^^^^^^^^^^^^^

- Bugfix for ``ignore`` functionality failing in ``ModelBoundingBox`` when using
  ``ignore`` option alongside passing bounding box data as tuples. [#13032]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug in ``Table.show_in_browser`` using the ``jsviewer=True`` option
  to display the table with sortable columns. Previously the sort direction arrows
  were not being shown due to missing image files for the arrows. [#12716]

- Fix an issue when writing ``Time`` table columns to a file when the time
  ``format`` is one of ``datetime``, ``datetime64``, or ``ymdhms``. Previously,
  writing a ``Time`` column with one of these formats could result in an exception
  or else an incorrect output file that cannot be read back in. [#12842]

- Fixed a bug where it is not possible to set the ``.info.format`` property of a
  table structured column and get formatted output. [#13233]

- Fixed a bug when adding a masked structured array to a table. Previously this
  was auto-converted to a ``NdarrayMixin`` which loses the mask. With this fix
  the data are added to the table as a ``MaskedColumn`` and the mask is preserved. [#13236]

astropy.time
^^^^^^^^^^^^

- Fix an issue when writing ``Time`` table columns to a file when the time
  ``format`` is one of ``datetime``, ``datetime64``, or ``ymdhms``. Previously,
  writing a ``Time`` column with one of these formats could result in an exception
  or else an incorrect output file that cannot be read back in. [#12842]

astropy.utils
^^^^^^^^^^^^^

- Fixed a bug which caused ``numpy.interp`` to produce incorrect
  results when ``Masked`` arrays were passed. [#12978]

- Fixed HAS_YAML not working as intended. [#13066]

astropy.wcs
^^^^^^^^^^^

- Convert ``NoConvergence`` errors to warnings in ``world_to_pixel_values`` so that callers can work at least with the non converged solution. [#11693]

- Expose the ability to select TIME axis introduced in WCSLIB version 7.8. [#13062]

- Do not call ``wcstab`` on ``wcscopy`` and copy ``wtb`` members from the original WCS. [#13063]

- Updated bundled WCSLIB version to 7.11. This update together with 7.10
  includes bug fixes to ``tabini()`` and ``tabcpy()`` as well as several
  print formatting enhancements. For a full list of
  changes - see http://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES [#13171]

- Fixed error that occurred in ``WCS.world_to_pixel`` for ``WCS`` objects with a
  spectral axis and observer location information when passing a ``SpectralCoord``
  that had missing observer or target information. [#13228]

Version 5.0.4 (2022-03-31)
==========================

Bug Fixes
---------

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed the ``Gaussian2D`` ``bounding_box`` when ``theta`` is an angular
  ``Quantity``. [#13021]

astropy.utils
^^^^^^^^^^^^^

- Reverted ``astropy.utils.iers.iers.IERS_A_URL`` to ``maia.usno.navy.mil`` domain instead
  of NASA FTP to work around server issues. [#13004]

Other Changes and Additions
---------------------------

- Updated bundled WCSLIB to version 7.9 with several bugfixes and added
  support for time coordinate axes in ``wcsset()`` and ``wcssub()``. The
  four-digit type code for the time axis will have the first digit set to 4,
  i.e., four digit code will be 4xxx where x is a digit 0-9. For a full list of
  bug fixes see https://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES [#12994]


Version 5.0.3 (2022-03-25)
==========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Bugfix in ``astropy.convolution.utils.discretize_model`` which allows the function to handle a ``CompoundModel``.
  Before this fix, ``discretize_model`` was confusing ``CompoundModel`` with a callable function. [#12959]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix write and read FITS tables with multidimensional items, using ``from_columns``
  without previousely defined ``ColDefs`` structure. [#12863]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fix VOTable linting to avoid use of shell option. [#12985]

astropy.utils
^^^^^^^^^^^^^

- Fix XML linting to avoid use of shell option. [#12985]

Other Changes and Additions
---------------------------

- Updated the bundled CFITSIO library to 4.1.0. [#12967]

Version 5.0.2 (2022-03-10)
==========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Bugfix to add backwards compatibility for reading ECSV version 0.9 files with
  non-standard column datatypes (such as ``object``, ``str``, ``datetime64``,
  etc.), which would raise a ValueError in ECSV version 1.0. [#12880]

astropy.io.misc
^^^^^^^^^^^^^^^

- Bugfix for ``units_mapping`` schema's property name conflicts. Changes:
      * ``inputs`` to ``unit_inputs``
      * ``outputs`` to ``unit_outputs`` [#12800]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed a bug where ``astropy.io.votable.validate`` was printing output to
  ``sys.stdout`` when the ``output`` paramter was set to ``None``. ``validate``
  now returns a string when ``output`` is set to ``None``, as documented.
  [#12604]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fix handling of units on ``scale`` parameter in BlackBody model. [#12318]

- Indexing on models can now be used with all types of integers
  (like ``numpy.int64``) instead of just ``int``. [#12561]

- Fix computation of the separability of a ``CompoundModel`` where another
  ``CompoundModel`` is on the right hand side of the ``&`` operator. [#12907]

- Provide a hook (``Model._calculate_separability_matrix``) to allow subclasses
  of ``Model`` to define how to compute their separability matrix. [#12900]

astropy.stats
^^^^^^^^^^^^^

- Fixed a bug in which running ``kuiper_false_positive_probability(D,N)`` on
  distributions with many data points could produce NaN values for the false
  positive probability of the Kuiper statistic. [#12896]

astropy.wcs
^^^^^^^^^^^

- Fixed a bug due to which ``naxis``, ``pixel_shape``, and
  ``pixel_bounds`` attributes of ``astropy.wcs.WCS`` were not restored when
  an ``astropy.wcs.WCS`` object was unpickled. This fix also eliminates
  ``FITSFixedWarning`` warning issued during unpiclikng of the WCS objects
  related to the number of axes. This fix also eliminates errors when
  unpickling WCS objects originally created using non-default values for
  ``key``, ``colsel``, and ``keysel`` parameters. [#12844]

Version 5.0.1 (2022-01-26)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Trying to create an instance of ``astropy.coordinates.Distance`` by providing
  both ``z`` and ``parallax`` now raises the expected ``ValueError``. [#12531]

- Fixed a bug where changing the wrap angle of the longitude component of a
  representation could raise a warning or error in certain situations. [#12556]

- ``astropy.coordinates.Distance`` constructor no longer ignores the ``unit``
  keyword when ``parallax`` is provided. [#12569]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- ``astropy.cosmology.utils.aszarr`` can now convert ``Column`` objects. [#12525]

- Reading a cosmology from an ECSV will load redshift and Hubble parameter units
  from the cosmology units module. [#12636]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix formatting issue in ``_dump_coldefs`` and add tests for ``tabledump`` and
  ``tableload`` convenience functions. [#12526]

astropy.io.misc
^^^^^^^^^^^^^^^

- YAML can now also represent quantities and arrays with structured dtype,
  as well as structured scalars based on ``np.void``. [#12509]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixes error when fitting multiplication or division based compound models
  where the sub-models have different output units. [#12475]

- Bugfix for incorrectly initialized and filled ``parameters`` data for ``Spline1D`` model. [#12523]

- Bugfix for ``keyerror`` thrown by ``Model.input_units_equivalencies`` when
  used on ``fix_inputs`` models which have no set unit equivalencies. [#12597]

astropy.table
^^^^^^^^^^^^^

- ``astropy.table.Table.keep_columns()`` and
  ``astropy.table.Table.remove_columns()`` now work with generators of column
  names. [#12529]

- Avoid duplicate storage of info in serialized columns if the column
  used to serialize already can hold that information. [#12607]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Fixed edge case bugs which emerged when using ``aggregate_downsample`` with custom bins. [#12527]

astropy.units
^^^^^^^^^^^^^

- Structured units can be serialized to/from yaml. [#12492]

- Fix bad typing problems by removing interaction with ``NDArray.__class_getitem__``. [#12511]

- Ensure that ``Quantity.to_string(format='latex')`` properly typesets exponents
  also when ``u.quantity.conf.latex_array_threshold = -1`` (i.e., when the threshold
  is taken from numpy). [#12573]

- Structured units can now be copied with ``copy.copy`` and ``copy.deepcopy``
  and also pickled and unpicked also for ``protocol`` >= 2.
  This does not work for big-endian architecture with older ``numpy<1.21.1``. [#12583]

astropy.utils
^^^^^^^^^^^^^

- Ensure that a ``Masked`` instance can be used to initialize (or viewed
  as) a ``numpy.ma.Maskedarray``. [#12482]

- Ensure ``Masked`` also works with numpy >=1.22, which has a keyword argument
  name change for ``np.quantile``. [#12511]

- ``astropy.utils.iers.LeapSeconds.auto_open()`` no longer emits unnecessary
  warnings when ``astropy.utils.iers.conf.auto_max_age`` is set to ``None``. [#12713]


Version 5.0 (2021-11-15)
========================


New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Added dealiasing support to ``convolve_fft``. [#11495]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added missing coordinate transformations where the starting and ending frames
  are the same (i.e., loopback transformations). [#10909]

- Allow negation, multiplication and division also of representations that
  include a differential (e.g., ``SphericalRepresentation`` with a
  ``SphericalCosLatDifferential``).  For all operations, the outcome is
  equivalent to transforming the representation and differential to cartesian,
  then operating on those, and transforming back to the original representation
  (except for ``UnitSphericalRepresentation``, which will return a
  ``SphericalRepresentation`` if there is a scale change). [#11470]

- ``RadialRepresentation.transform`` can work with a multiplication matrix only.
  All other matrices still raise an exception. [#11576]

- ``transform`` methods are added to ``BaseDifferential`` and ``CartesianDifferential``.
  All transform methods on Representations now delegate transforming differentials
  to the differential objects. [#11654]

- Adds new ``HADec`` built-in frame with transformations to/from ``ICRS`` and ``CIRS``.
  This frame complements ``AltAz`` to give observed coordinates (hour angle and declination)
  in the ``ITRS`` for an equatorially mounted telescope. [#11676]

- ``SkyCoord`` objects now have a ``to_table()`` method, which allows them to be
  converted to a ``QTable``. [#11743]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmologies now store metadata in a mutable parameter ``meta``.
  The initialization arguments ``name`` and ``meta`` are keyword-only. [#11542]

- A new unit, ``redshift``, is defined. It is a dimensionless unit to distinguish
  redshift quantities from other non-redshift values. For compatibility with
  dimensionless quantities the equivalency ``dimensionless_redshift`` is added.
  This equivalency is enabled by default. [#11786]

- Add equality operator for comparing Cosmology instances. Comparison is done on
  all immutable fields (this excludes 'meta').

  Now the following will work:

  .. code-block:: python

      >>> from astropy.cosmology import Planck13, Planck18
      >>> Planck13 == Planck18
      False

      >>> Planck18 == Planck18
      True [#11813]

- Added ``read/write`` methods to Cosmology using the Unified I/O registry.
  Now custom file format readers, writers, and format-identifier functions
  can be registered to read, write, and identify, respectively, Cosmology
  objects. Details are discussed in an addition to the docs. [#11948]

- Added ``to_format/from_format`` methods to Cosmology using the Unified I/O
  registry. Now custom format converters and format-identifier functions
  can be registered to transform Cosmology objects.
  The transformation between Cosmology and dictionaries is pre-registered.
  Details are discussed in an addition to the docs. [#11998]

- Added units module for defining and collecting cosmological units and
  equivalencies. [#12092]

- Flat cosmologies are now set by a mixin class, ``FlatCosmologyMixin`` and its
  FLRW-specific subclass ``FlatFLRWMixin``. All ``FlatCosmologyMixin`` are flat,
  but not all flat cosmologies are instances of ``FlatCosmologyMixin``. As
  example, ``LambdaCDM`` **may** be flat (for the a specific set of parameter
  values),  but ``FlatLambdaCDM`` **will** be flat.

  Cosmology parameters are now descriptors. When accessed from a class they
  transparently stores information, like the units and accepted equivalencies.
  On a cosmology instance, the descriptor will return the parameter value.
  Parameters can have custom ``getter`` methods.

  Cosmological equality is refactored to check Parameters (and the name)
  A new method, ``is_equivalent``, is added to check Cosmology equivalence, so
  a ``FlatLambdaCDM`` and flat ``LambdaCDM`` are equivalent. [#12136]

- Replaced ``z = np.asarray(z)`` with ``z = u.Quantity(z, u.dimensionless_unscaled).value``
  in Cosmology methods. Input of values with incorrect units raises a UnitConversionError
  or TypeError. [#12145]

- Cosmology Parameters allow for custom value setters.
  Values can be set once, but will error if set a second time.
  If not specified, the default setter is used, which will assign units
  using the Parameters ``units`` and ``equivalencies`` (if present).
  Alternate setters may be registered with Parameter to be specified by a str,
  not a decorator on the Cosmology. [#12190]

- Cosmology instance conversion to dict now accepts keyword argument ``cls`` to
  determine dict type, e.g. ``OrderedDict``. [#12209]

- A new equivalency is added between redshift and the Hubble parameter and values
  with units of little-h.
  This equivalency is also available in the catch-all equivalency ``with_redshift``. [#12211]

- A new equivalency is added between redshift and distance -- comoving, lookback,
  and luminosity. This equivalency is also available in the catch-all equivalency
  ``with_redshift``. [#12212]

- Register Astropy Table into Cosmology's ``to/from_format`` I/O, allowing
  a Cosmology instance to be parsed from or converted to a Table instance.
  Also adds the ``__astropy_table__`` method allowing ``Table(cosmology)``. [#12213]

- The WMAP1 and WMAP3 are accessible as builtin cosmologies. [#12248]

- Register Astropy Model into Cosmology's ``to/from_format`` I/O, allowing
  a Cosmology instance to be parsed from or converted to a Model instance. [#12269]

- Register an ECSV reader and writer into Cosmology's I/O, allowing a Cosmology
  instance to be read from from or written to an ECSV file. [#12321]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Added new way to specify the dtype for tables that are read: ``converters``
  can specify column names with wildcards. [#11892]

- Added a new ``astropy.io.ascii.Mrt`` class to write tables in the American
  Astronomical Society Machine-Readable Table format,
  including documentation and tests for the same. [#11897, #12301, #12302]

- When writing, the input data are no longer copied, improving performance.
  Metadata that might be changed, such as format and serialization
  information, is copied, hence users can continue to count on no
  changes being made to the input data. [#11919]

astropy.io.misc
^^^^^^^^^^^^^^^

- Add Parquet serialization of Tables with pyarrow, including metadata support and
  columnar access. [#12215]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added fittable spline models to ``modeling``. [#11634]

- Extensive refactor of ``BoundingBox`` for better usability and maintainability. [#11930]

- Added ``CompoundBoundingBox`` feature to ``~astropy.modeling``, which allows more flexibility in
  defining bounding boxes for models that are applied to images with many slices. [#11942]

- Improved parameter support for ``astropy.modeling.core.custom_model`` created models. [#11984]

- Added the following trigonometric models and linked them to their appropriate inverse models:
    * ``Cosine1D`` [#12158]
    * ``Tangent1D``
    * ``ArcSine1D``
    * ``ArcCosine1D``
    * ``ArcTangent1D`` [#12185]

astropy.table
^^^^^^^^^^^^^

- Added a new method ``Table.update()`` which does a dictionary-style update of a
  ``Table`` by adding or replacing columns. [#11904]

- Masked quantities are now fully supported in tables.  This includes ``QTable``
  automatically converting ``MaskedColumn`` instances to ``MaskedQuantity``,
  and ``Table`` doing the reverse. [#11914]

- Added new keyword arguments ``keys_left`` and ``keys_right`` to the table ``join``
  function to support joining tables on key columns with different names. In
  addition the new keywords can accept a list of column-like objects which are
  used as the match keys. This allows joining on arbitrary data which are not part
  of the tables being joined. [#11954]

- Formatting of any numerical values in the output of ``Table.info()`` and
  ``Column.info()`` has been improved. [#12022]

- It is now possible to add dask arrays as columns in tables
  and have them remain as dask arrays rather than be converted
  to Numpy arrays. [#12219]

- Added a new registry for mixin handlers, which can be used
  to automatically convert array-like Python objects into
  mixin columns when assigned to a table column. [#12219]

astropy.time
^^^^^^^^^^^^

- Adds a new method ``earth_rotation_angle`` to calculate the Local Earth Rotation Angle.
  Also adjusts Local Sidereal Time for the Terrestrial Intermediate Origin (``TIO``)
  and adds a rigorous correction for polar motion. The ``TIO`` adjustment is approximately
  3 microseconds per century from ``J2000`` and the polar motion correction is at most
  about +/-50 nanoseconds. For models ``IAU1982`` and ``IAU1994``, no such adjustments are
  made as they pre-date the TIO concept. [#11680]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- A custom binning scheme is now available in ``aggregate_downsample``.
  It allows ``time_bin_start`` and ``time_bin_size`` to be arrays, and adds
  an optional ``time_bin_end``.
  This scheme mirrors the API for ``BinnedTimeSeries``. [#11266]

astropy.units
^^^^^^^^^^^^^

- ``Quantity`` gains a ``__class_getitem__`` to create unit-aware annotations
   with the syntax ``Quantity[unit or physical_type, shape, numpy.dtype]``.
   If the python version is 3.9+ or ``typing_extensions`` is installed,
   these are valid static type annotations. [#10662]

- Each physical type is added to ``astropy.units.physical``
  (e.g., ``physical.length`` or ``physical.electrical_charge_ESU``).
  The attribute-accessible names (underscored, without parenthesis) also
  work with ``astropy.units.physical.get_physical_type``. [#11691]

- It is now possible to have quantities based on structured arrays in
  which the unit has matching structure, giving each field its own unit,
  using units constructed like ``Unit('AU,AU/day')``. [#11775]

- The milli- prefix has been added to ``astropy.units.Angstrom``. [#11788]

- Added attributes ``base``, ``coords``, and ``index`` and method ``copy()`` to
  ``QuantityIterator`` to match ``numpy.ndarray.flatiter``. [#11796]

- Added "angular frequency" and "angular velocity" as aliases for the "angular
  speed" physical type. [#11865]

- Add light-second to units of length [#12128]

astropy.utils
^^^^^^^^^^^^^

- The ``astropy.utils.deprecated_renamed_argument()`` decorator now supports
  custom warning messages. [#12305]

- The NaN-aware numpy functions such as ``np.nansum`` now work on Masked
  arrays, with masked values being treated as NaN, but without raising
  warnings or exceptions. [#12454]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added a feature so that SphericalCircle will accept center parameter as a SkyCoord object. [#11790]

astropy.wcs
^^^^^^^^^^^

- ``astropy.wcs.utils.obsgeo_to_frame`` has been added to convert the obsgeo coordinate
  array on ``astropy.wcs.WCS`` objects to an ``ITRS`` coordinate frame instance. [#11716]

- Updated bundled ``WCSLIB`` to version 7.7 with several bugfixes. [#12034]


API Changes
-----------

astropy.config
^^^^^^^^^^^^^^

- ``update_default_config`` and ``ConfigurationMissingWarning`` are deprecated. [#11502]

astropy.constants
^^^^^^^^^^^^^^^^^

- Removed deprecated ``astropy.constants.set_enabled_constants`` context manager. [#12105]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Positions for the Moon using the 'builtin' ephemeris now use the new
  ``erfa.moon98`` function instead of our own implementation of the Meeus
  algorithm. As this also corrects a misunderstanding of the frame returned by
  the Meeus, this improves the agreement with the JPL ephemeris from about 30 to
  about 6 km rms. [#11753]

- Removed deprecated ``representation`` attribute from
  ``astropy.coordinates.BaseCoordinateFrame`` class. [#12257]

- ``SpectralQuantity`` and ``SpectralCoord`` ``.to_value`` method can now be called without
  ``unit`` argument in order to maintain a consistent interface with ``Quantity.to_value`` [#12440]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- ``z_at_value`` now works with arrays for all arguments (except ``func``,
  ``verbose``, and ``method``). Consequently, ``coordinates.Distance.z`` can
  be used when Distance is an array. [#11778]

- Remove deprecation warning and error remapping in ``Cosmology.clone``.
  Now unknown arguments will raise a ``TypeError``, not an ``AttributeError``. [#11785]

- The ``read/write`` and ``to/from_format`` Unified I/O registries are separated
  and apply only to ``Cosmology``. [#12015]

- Cosmology parameters in ``cosmology.parameters.py`` now have units,
  where applicable. [#12116]

- The function ``astropy.cosmology.utils.inf_like()`` is deprecated. [#12175]

- The function ``astropy.cosmology.utils.vectorize_if_needed()`` is deprecated.
  A new function ``astropy.cosmology.utils.vectorize_redshift_method()`` is added
  as replacement. [#12176]

- Cosmology base class constructor now only accepts arguments ``name`` and ``meta``.
  Subclasses should add relevant arguments and not pass them to the base class. [#12191]

astropy.io
^^^^^^^^^^

- When ``astropy`` raises an ``OSError`` because a file it was told to write
  already exists, the error message now always suggests the use of the
  ``overwrite=True`` argument. The wording is now consistent for all I/O formats. [#12179]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Removed deprecated ``overwrite=None`` option for
  ``astropy.io.ascii.ui.write()``. Overwriting existing files now only happens if
  ``overwrite=True``. [#12171]

astropy.io.fits
^^^^^^^^^^^^^^^

- The internal class _CardAccessor is no longer registered as a subclass of
  the Sequence or Mapping ABCs. [#11923]

- The deprecated ``clobber`` argument will be removed from the
  ``astropy.io.fits`` functions in version 5.1, and the deprecation warnings now
  announce that too. [#12311]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- The ``write`` function now is allowed to return possible content results, which
  means that custom writers could, for example, create and return an instance of
  some container class rather than a file on disk. [#11916]

- The registry functions are refactored into a class-based system.
  New Read-only, write-only, and read/write registries can be created.
  All functions accept a new argument ``registry``, which if not specified,
  defaults to the global default registry. [#12015]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Deprecated the ``pedantic`` keyword argument in the
  ``astropy.io.votable.table.parse`` function and the corresponding configuration
  setting. It has been replaced by the ``verify`` option. [#12129]

astropy.modeling
^^^^^^^^^^^^^^^^

- Refactored how ``astropy.modeling.Model`` handles model evaluation in order to better
  organize the code. [#11931]

- Removed the following deprecated modeling features:
      ``astropy.modeling.utils.ExpressionTree`` class,
      ``astropy.modeling.functional_models.MexicanHat1D`` model,
      ``astropy.modeling.functional_models.MexicanHat2D`` model,
      ``astropy.modeling.core.Model.inputs`` setting in model initialize,
      ``astropy.modeling.core.CompoundModel.inverse`` setting in model initialize, and
      ``astropy.modeling.core.CompoundModel.both_inverses_exist()`` method. [#11978]

- Deprecated the ``AliasDict`` class in ``modeling.utils``. [#12411]

astropy.nddata
^^^^^^^^^^^^^^

- Removed ``block_reduce`` and ``block_replicate`` functions from
  ``nddata.utils``. These deprecated functions in ``nddata.utils`` were
  moved to ``nddata.blocks``. [#12288]

astropy.stats
^^^^^^^^^^^^^

- Removed the following deprecated features from ``astropy.stats``:

  * ``conf`` argument for ``funcs.binom_conf_interval()`` and
    ``funcs.binned_binom_proportion()``,
  * ``conflevel`` argument for ``funcs.poisson_conf_interval()``, and
  * ``conf_lvl`` argument for ``jackknife.jackknife_stats()``. [#12200]

astropy.table
^^^^^^^^^^^^^

- Printing a ``Table`` now shows the qualified class name of mixin columns in the
  dtype header row  instead of "object". This applies to all the ``Table`` formatted output
  methods whenever ``show_dtype=True`` is selected. [#11660]

- The 'overwrite' argument has been added to the jsviewer table writer.
  Overwriting an existing file requires 'overwrite' to be True. [#11853]

- The 'overwrite' argument has been added to the pandas table writers.
  Overwriting an existing file requires 'overwrite' to be True. [#11854]

- The table ``join`` function now accepts only the first four arguments ``left``,
  ``right``, ``keys``, and ``join_type`` as positional arguments. All other
  arguments must be supplied as keyword arguments. [#11954]

- Adding a dask array to a Table will no longer convert
  that dask to a Numpy array, so accessing t['dask_column']
  will now return a dask array instead of a Numpy array. [#12219]

astropy.time
^^^^^^^^^^^^

- Along with the new method ``earth_rotation_angle``, ``sidereal_time`` now accepts
  an ``EarthLocation`` as the ``longitude`` argument. [#11680]

astropy.units
^^^^^^^^^^^^^

- Unit ``littleh`` and equivalency ``with_H0`` have been moved to the
  ``cosmology`` module and are deprecated from ``astropy.units``. [#12092]

astropy.utils
^^^^^^^^^^^^^

- ``astropy.utils.introspection.minversion()`` now uses
  ``importlib.metadata.version()``. Therefore, its ``version_path`` keyword is no
  longer used and deprecated. This keyword will be removed in a future release. [#11714]

- Updated ``utils.console.Spinner`` to better resemble the API of
  ``utils.console.ProgressBar``, including an ``update()`` method and
  iterator support. [#11772]

- Removed deprecated ``check_hashes`` in ``check_download_cache()``. The function also
  no longer returns anything. [#12293]

- Removed unused ``download_cache_lock_attempts`` configuration item in
  ``astropy.utils.data``. Deprecation was not possible. [#12293]

- Removed deprecated ``hexdigest`` keyword from ``import_file_to_cache()``. [#12293]

- Setting ``remote_timeout`` configuration item in ``astropy.utils.data`` to 0 will
  no longer disable download from the Internet; Set ``allow_internet`` configuration
  item to ``False`` instead. [#12293]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Removed deprecated ``imshow_only_kwargs`` keyword from ``imshow_norm``. [#12290]

astropy.wcs
^^^^^^^^^^^

- Move complex logic from ``HighLevelWCSMixin.pixel_to_world`` and
  ``HighLevelWCSMixin.world_to_pixel`` into the helper functions
  ``astropy.wcs.wcsapi.high_level_api.high_level_objects_to_values`` and
  ``astropy.wcs.wcsapi.high_level_api.values_to_high_level_objects`` to allow
  reuse in other places. [#11950]


Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- ``generate_config`` no longer outputs wrong syntax for list type. [#12037]

astropy.constants
^^^^^^^^^^^^^^^^^

- Fixed a bug where an older constants version cannot be set directly after
  astropy import. [#12084]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Passing an ``array`` argument for any Kernel1D or Kernel2D subclasses (with the
  exception of CustomKernel) will now raise a ``TypeError``. [#11969]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- If a ``Table`` containing a ``SkyCoord`` object as a column is written to a
  FITS, ECSV or HDF5 file then any velocity information that might be present
  will be retained. [#11750]

- The output of ``SkyCoord.apply_space_motion()`` now always has the same
  differential type as the ``SkyCoord`` itself. [#11932]

- Fixed bug where Angle, Latitude and Longitude with NaN values could not be printed. [#11943]

- Fixed a bug with the transformation from ``PrecessedGeocentric`` to ``GCRS``
  where changes in ``obstime``, ``obsgeoloc``, or ``obsgeovel`` were ignored.
  This bug would also affect loopback transformations from one ``PrecessedGeocentric``
  frame to another ``PrecessedGeocentric`` frame. [#12152]

- Fixed a bug with the transformations between ``TEME`` and ``ITRS`` or between ``TEME``
  and itself where a change in ``obstime`` was ignored. [#12152]

- Avoid unnecessary transforms through CIRS for AltAz and HADec and
  use ICRS as intermediate frame for these transformations instead. [#12203]

- Fixed a bug where instantiating a representation with a longitude component
  could mutate input provided for that component even when copying is specified. [#12307]

- Wrapping an ``Angle`` array will now ignore NaN values instead of attempting to wrap
  them, which would produce unexpected warnings/errors when working with coordinates
  and representations due to internal broadcasting. [#12317]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Dictionaries for in-built cosmology realizations are not altered by creating
  the realization and are also made immutable. [#12278]

astropy.io.fits
^^^^^^^^^^^^^^^

- Prevent zero-byte writes for FITS binary tables to
  speed up writes on the Lustre filesystem. [#11955]

- Enable ``json.dump`` for FITS_rec with variable length (VLF) arrays. [#11957]

- Add support for reading and writing int8 images [#11996]

- Ensure header passed to ``astropy.io.fits.CompImageHDU`` does not need to contain
  standard cards that can be automatically generated, such as ``BITPIX`` and ``NAXIS``. [#12061]

- Fixed a bug where ``astropy.io.fits.HDUDiff`` would ignore the ``ignore_blank_cards``
  keyword argument. [#12122]

- Open uncompressed file even if extension says it's compressed [#12135]

- Fix the computation of the DATASUM in a ``CompImageHDU`` when the data is >1D. [#12138]

- Reading files where the SIMPLE card is present but with an invalid format now
  issues a warning instead of raising an exception [#12234]

- Convert UNDEFINED to None when iterating over card values. [#12310]

astropy.io.misc
^^^^^^^^^^^^^^^

- Update ASDF tag versions in ExtensionType subclasses to match ASDF Standard 1.5.0. [#11986]

- Fix ASDF serialization of model inputs and outputs and add relevant assertion to
  test helper. [#12381]

- Fix bug preventing ASDF serialization of bounding box for models with only one input. [#12385]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Now accepting UCDs containing phot.color. [#11982]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added ``Parameter`` descriptions to the implemented models which were
  missing. [#11232]

- The ``separable`` property is now correctly set on models constructed with
  ``astropy.modeling.custom_model``. [#11744]

- Minor bugfixes and improvements to modeling including the following:
      * Fixed typos and clarified several errors and their messages throughout
        modeling.
      * Removed incorrect try/except blocks around scipy code in
        ``convolution.py`` and ``functional_models.py``.
      * Fixed ``Ring2D`` model's init to properly accept all combinations
        of ``r_in``, ``r_out``, and ``width``.
      * Fixed bug in ``tau`` validator for the ``Logarithmic1D`` and
        ``Exponential1D`` models when using them as model sets.
      * Fixed ``copy`` method for ``Parameter`` in order to prevent an
        automatic ``KeyError``, and fixed ``bool`` for ``Parameter`` so
        that it functions with vector values.
      * Removed unreachable code from ``Parameter``, the ``_Tabular`` model,
        and the ``Drude1D`` model.
      * Fixed validators in ``Drude1D`` model so that it functions in a
        model set.
      * Removed duplicated code from ``polynomial.py`` for handing of
        ``domain`` and ``window``.
      * Fixed the ``Pix2Sky_HEALPixPolar`` and ``Sky2Pix_HEALPixPolar`` modes
        so that their ``evaluate`` and ``inverse`` methods actually work
        without raising an error. [#12232]

astropy.nddata
^^^^^^^^^^^^^^

- Ensure that the ``wcs=`` argument to ``NDData`` is always parsed into a high
  level WCS object. [#11985]

astropy.stats
^^^^^^^^^^^^^

- Fixed a bug in sigma clipping where the bounds would not be returned for
  completely empty or masked data. [#11994]

- Fixed a bug in ``biweight_midvariance`` and ``biweight_scale`` where
  output data units would be dropped for constant data and where the
  result was a scalar NaN. [#12146]

astropy.table
^^^^^^^^^^^^^

- Ensured that ``MaskedColumn.info`` is propagated in all cases, so that when
  tables are sliced, writing will still be as requested on
  ``info.serialize_method``. [#11917]

- ``table.conf.replace_warnings`` and ``table.jsviewer.conf.css_urls`` configuration
  items now have correct ``'string_list'`` type. [#12037]

- Fixed an issue where initializing from a list of dict-like rows (Mappings) did
  not work unless the row values were instances of ``dict``. Now any object that
  is an instance of the more general ``collections.abc.Mapping`` will work. [#12417]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

- Ensure that scalar ``QuantityDistribution`` unit conversion in ufuncs
  works properly again. [#12471]

astropy.units
^^^^^^^^^^^^^

- Add quantity support for ``scipy.special`` dimensionless functions
  erfinv, erfcinv, gammaln and loggamma. [#10934]

- ``VOUnit.to_string`` output is now compliant with IVOA VOUnits 1.0 standards. [#11565]

- Units initialization with unicode has been expanded to include strings such as
  'M☉' and 'e⁻'. [#11827]

- Give a more informative ``NotImplementedError`` when trying to parse a unit
  using an output-only format such as 'unicode' or 'latex'. [#11829]

astropy.utils
^^^^^^^^^^^^^

- Fixed a bug in ``get_readable_fileobj`` that prevented the unified file read
  interface from closing ASCII files. [#11809]

- The function ``astropy.utils.decorators.deprecated_attribute()`` no longer
  ignores its ``message``, ``alternative``, and ``pending`` arguments. [#12184]

- Ensure that when taking the minimum or maximum of a ``Masked`` array,
  any masked NaN values are ignored. [#12454]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- The tick labelling for radians has been fixed to remove a redundant ``.0`` in
  the label for integer multiples of pi at 2pi and above. [#12221]

- Fix a bug where non-``astropy.wcs.WCS`` WCS instances were not accepted in
  ``WCSAxes.get_transform``. [#12286]

- Fix compatibility with Matplotlib 3.5 when using the ``grid_type='contours'``
  mode for drawing grid lines. [#12447]

astropy.wcs
^^^^^^^^^^^

- Enabled ``SlicedLowLevelWCS.pixel_to_world_values`` to handle slices including
  non-``int`` integers, e.g. ``numpy.int64``. [#11980]


Other Changes and Additions
---------------------------

- In docstrings, Sphinx cross-reference targets now use intersphinx, even if the
  target is an internal link (``link`` is now ``'astropy:link``).
  When built in Astropy these links are interpreted as internal links. When built
  in affiliate packages, the link target is set by the key 'astropy' in the
  intersphinx mapping. [#11690]

- Made PyYaml >= 3.13 a strict runtime dependency. [#11903]

- Minimum version of required Python is now 3.8. [#11934]

- Minimum version of required Scipy is now 1.3. [#11934]

- Minimum version of required Matplotlib is now 3.1. [#11934]

- Minimum version of required Numpy is now 1.18. [#11935]

- Fix deprecation warnings with Python 3.10 [#11962]

- Speed up ``minversion()`` in cases where a module with a ``__version__``
  attribute is passed. [#12174]

- ``astropy`` now requires ``packaging``. [#12199]

- Updated the bundled CFITSIO library to 4.0.0. When compiling with an external
  library, version 3.35 or later is required. [#12272]


Version 4.3.1 (2021-08-11)
==========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- In ``fits.io.getdata`` do not fall back to first non-primary extension when
  user explicitly specifies an extension. [#11860]

- Ensure multidimensional masked columns round-trip properly to FITS. [#11911]

- Ensure masked times round-trip to FITS, even if multi-dimensional. [#11913]

- Raise ``ValueError`` if an ``np.float32`` NaN/Inf value is assigned to a
  header keyword. [#11922]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed bug in ``fix_inputs`` handling of bounding boxes. [#11908]

astropy.table
^^^^^^^^^^^^^

- Fix an error when converting to pandas any ``Table`` subclass that
  automatically adds a table index when the table is created. An example is a
  binned ``TimeSeries`` table. [#12018]

astropy.units
^^^^^^^^^^^^^

- Ensure that unpickling quantities and units in new sessions does not change
  hashes and thus cause problems with (de)composition such as getting different
  answers from the ``.si`` attribute. [#11879]

- Fixed cannot import name imperial from astropy.units namespace. [#11977]

astropy.utils
^^^^^^^^^^^^^

- Ensure any ``.info`` on ``Masked`` instances is propagated correctly when
  viewing or slicing. As a consequence, ``MaskedQuantity`` can now be correctly
  written to, e.g., ECSV format with ``serialize_method='data_mask'``. [#11910]


Version 4.3 (2021-07-26)
========================

New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Change padding sizes for ``fft_pad`` in ``convolve_fft`` from powers of
  2 only to scipy-optimized numbers, applied separately to each dimension;
  yielding some performance gains and avoiding potential large memory
  impact for certain multi-dimensional inputs. [#11533]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Adds the ability to create topocentric ``CIRS`` frames. Using these,
  ``AltAz`` calculations are now accurate down to the milli-arcsecond
  level. [#10994]

- Adds a direct transformation from ``ICRS`` to ``AltAz`` frames. This
  provides a modest speedup of approximately 10 percent. [#11079]

- Adds new ``WGS84GeodeticRepresentation``, ``WGS72GeodeticRepresentation``,
  and ``GRS80GeodeticRepresentation``. These are mostly for use inside
  ``EarthLocation`` but can also be used to convert between geocentric
  (cartesian) and different geodetic representations directly. [#11086]

- ``SkyCoord.guess_from_table`` now also searches for differentials in the table.
  In addition, multiple regex matches can be resolved when they are exact
  component names, e.g. having both columns “dec” and “pm_dec” no longer errors
  and will be included in the SkyCoord. [#11417]

- All representations now have a ``transform`` method, which allows them to be
  transformed by a 3x3 matrix in a Cartesian basis. By default, transformations
  are routed through ``CartesianRepresentation``. ``SphericalRepresentation`` and
  ``PhysicssphericalRepresentation`` override this for speed and to prevent NaN
  leakage from the distance to the angular components.
  Also, the functions ``is_O3`` and ``is_rotation`` have been added to
  ``matrix_utities`` for checking whether a matrix is in the O(3) group or is a
  rotation (proper or improper), respectively. [#11444]

- Moved angle formatting and parsing utilities to
  ``astropy.coordinates.angle_formats``.
  Added new functionality to ``astropy.coordinates.angle_utilities`` for
  generating points on or in spherical surfaces, either randomly or on a grid. [#11628]

- Added a new method to ``SkyCoord``, ``spherical_offsets_by()``, which is the
  conceptual inverse of ``spherical_offsets_to()``: Given angular offsets in
  longitude and latitude, this method returns a new coordinate with the offsets
  applied. [#11635]

- Refactor conversions between ``GCRS`` and ``CIRS,TETE`` for better accuracy
  and substantially improved speed. [#11069]

- Also refactor ``EarthLocation.get_gcrs`` for an increase in performance of
  an order of magnitude, which enters as well in getting observed positions of
  planets using ``get_body``. [#11073]

- Refactored the usage of metaclasses in ``astropy.coordinates`` to instead use
  ``__init_subclass__`` where possible. [#11090]

- Removed duplicate calls to ```transform_to``` from ```match_to_catalog_sky```
  and ```match_to_catalog_3d```, improving their performance. [#11449]

- The new DE440 and DE440s ephemerides are now available via shortcuts 'de440'
  and 'de440s'.  The DE 440s ephemeris will probably become the default
  ephemeris when chosing 'jpl' in 5.0. [#11601]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmology parameter dictionaries now also specify the Cosmology class to which
  the parameters correspond. For example, the dictionary for
  ``astropy.cosmology.parameters.Planck18`` has the added key-value pair
  ("cosmology", "FlatLambdaCDM"). [#11530]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Added support for reading and writing ASCII tables in QDP (Quick and Dandy
  Plotter) format. [#11256]

- Added support for reading and writing multidimensional column data (masked and
  unmasked) to ECSV. Also added formal support for reading and writing object-type
  column data which can contain items consisting of lists, dicts, and basic scalar
  types. This can be used to store columns of variable-length arrays. Both of
  these features use JSON to convert the object to a string that is stored in the
  ECSV output. [#11569, #11662, #11720]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added ``append`` keyword to append table objects to an existing FITS file [#2632, #11149]

- Check that the SIMPLE card is present when opening a file, to ensure that the
  file is a valid FITS file and raise a better error when opening a non FITS
  one. ``ignore_missing_simple`` can be used to skip this verification. [#10895]

- Expose ``Header.strip`` as a public method, to remove the most common
  structural keywords. [#11174]

- Enable the use of ``os.PathLike`` objects when dealing with (mainly FITS) files. [#11580]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Readers and writers can now set a priority, to assist with resolving which
  format to use. [#11214]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Version 1.4 VOTables now use the VOUnit format specification. [#11032]

- When reading VOTables using the Unified File Read/Write Interface (i.e. using
  the ``Table.read()`` or ``QTable.read()`` functions) it is now possible to
  specify all keyword arguments that are valid for
  ``astropy.io.votable.table.parse()``. [#11643]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added a state attribute to models to allow preventing the synching of
  constraint values from the constituent models. This synching can
  greatly slow down fitting if there are large numbers of fit parameters.
  model.sync_constraints = True means check constituent model constraints
  for compound models every time the constraint is accessed, False, do not.
  Fitters that support constraints will set this to False on the model copy
  and then set back to True when the fit is complete before returning. [#11365]

- The ``convolve_models_fft`` function implements model convolution so that one
  insures that the convolution remains consistent across multiple different
  inputs. [#11456]

astropy.nddata
^^^^^^^^^^^^^^

- Prevent unnecessary copies of the data during ``NDData`` arithmetic when units
  need to be added. [#11107]

- NDData str representations now show units, if present. [#11553]

astropy.stats
^^^^^^^^^^^^^

- Added the ability to specify stdfunc='mad_std' when doing sigma clipping,
  which will use a built-in function and lead to significant performance
  improvements if cenfunc is 'mean' or 'median'. [#11664]


- Significantly improved the performance of sigma clipping when cenfunc and
  stdfunc are passed as strings and the ``grow`` option is not used. [#11219]

- Improved performance of ``bayesian_blocks()`` by removing one ``np.log()``
  call [#11356]

astropy.table
^^^^^^^^^^^^^

- Add table attributes to include or exclude columns from the output when
  printing a table. This functionality includes a context manager to
  include/exclude columns temporarily. [#11190]

- Improved the string representation of objects related to ``Table.indices`` so
  they now indicate the object type and relevant attributes. [#11333]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- An exception is raised when ``n_bins`` is passed as an argument while
  any of the parameters ``time_bin_start`` or ``time_bin_size`` is not
  scalar. [#11463]

astropy.units
^^^^^^^^^^^^^

- The ``physical_type`` attributes of each unit are now objects of the (new)
  ``astropy.units.physical.PhysicalType`` class instead of strings and the
  function ``astropy.units.physical.get_physical_type`` can now translate
  strings to these objects. [#11204]

-  The function ``astropy.units.physical.def_physical_type`` was created to
   either define entirely new physical types, or to add more physical type
   names to an existing physical types. [#11204]

- ``PhysicalType``'s can be operated on using operations multiplication,
  division, and exponentiation are to facilitate dimensional analysis. [#11204]

- It is now possible to define aliases for units using
  ``astropy.units.set_enabled_aliases``. This can be used when reading files
  that have misspelled units. [#11258]

- Add a new "DN" unit, ``units.dn`` or ``units.DN``, representing data number
  for a detector. [#11591]

astropy.utils
^^^^^^^^^^^^^

- Added ``ssl_context`` and ``allow_insecure`` options to ``download_file``,
  as well as the ability to optionally use the ``certifi`` package to provide
  root CA certificates when downloading from sites secured with
  TLS/SSL. [#10434]

- ``astropy.utils.data.get_pkg_data_path`` is publicly scoped (previously the
  private function ``_find_pkg_data_path``) for obtaining file paths without
  checking if the file/directory exists, as long as the package and module
  do. [#11006]

- Deprecated ``astropy.utils.OrderedDescriptor`` and
  ``astropy.utils.OrderedDescriptorContainer``, as new features in Python 3
  make their use less compelling. [#11094, #11099]

- ``astropy.utils.masked`` provides a new ``Masked`` class/factory that can be
  used to represent masked ``ndarray`` and all its subclasses, including
  ``Quantity`` and its subclasses.  These classes can be used inside
  coordinates, but the mask is not yet exposed.  Generally, the interface should
  be considered experimental. [#11127, #11792]

- Add new ``utils.parsing`` module to with helper wrappers around
  ``ply``. [#11227]

- Change the Time and IERS leap second handling so that the leap second table is
  updated only when a Time transform involving UTC is performed. Previously this
  update check was done the first time a ``Time`` object was created, which in
  practice occured when importing common astropy subpackages like
  ``astropy.coordinates``. Now you can prevent querying internet resources (for
  instance on a cluster) by setting ``iers.conf.auto_download = False``. This
  can  be done after importing astropy but prior to performing any ``Time``
  scale transformations related to UTC. [#11638]


- Added a new module at ``astropy.utils.compat.optional_deps`` to consolidate
  the definition of ``HAS_x`` optional dependency flag variables,
  like ``HAS_SCIPY``. [#11490]

astropy.wcs
^^^^^^^^^^^

- Add IVOA UCD mappings for some FITS WCS keywords commonly used in solar
  physics. [#10965]

- Add ``STOKES`` FITS WCS keyword to the IVOA UCD mapping. [#11236]

- Updated bundled version of WCSLIB to version 7.6. See
  https://www.atnf.csiro.au/people/mcalabre/WCS/CHANGES for a list of
  included changes. [#11549]


API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- For input to representations, subclasses of the class required for a
  given attribute will now be allowed in. [#11113]

- Except for ``UnitSphericalRepresentation``, shortcuts in representations now
  allow for attached differentials. [#11467]

- Allow coordinate name strings as input to
  ``SkyCoord.is_transformable_to``. [#11552]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Change ``z_at_value`` to use ``scipy.optimize.minimize_scalar`` with default
  method ``Brent`` (other options ``Bounded`` and ``Golden``) and accept
  ``bracket`` option to set initial search region. [#11080]

- Clarified definition of inputs to ``angular_diameter_distance_z1z2``.
  The function now emits ``AstropyUserWarning`` when ``z2`` is less than
  ``z1``. [#11197]

- Split cosmology realizations from core classes, moving the former to new file
  ``realizations``. [#11345]

- Since cosmologies are immutable, the initialization signature and values can
  be stored, greatly simplifying cloning logic and extending it to user-defined
  cosmology classes that do not have attributes with the same name as each
  initialization argument.  [#11515]

- Cloning a cosmology with changed parameter(s) now appends "(modified)" to the
  new instance's name, unless a name is explicitly passed to ``clone``. [#11536]

- Allow ``m_nu`` to be input as any quantity-like or array-like -- Quantity,
  array, float, str, etc. Input is passed to the Quantity constructor and
  converted to eV, still with the prior mass-energy equivalence
  enabled. [#11640]

astropy.io.fits
^^^^^^^^^^^^^^^

- For conversion between FITS tables and astropy ``Table``, the standard mask
  values of ``NaN`` for float and null string for string are now properly
  recognized, leading to a ``MaskedColumn`` with appropriately set mask
  instead of a ``Column`` with those values exposed. Conversely, when writing
  an astropy ``Table`` to a FITS tables, masked values are now consistently
  converted to the standard FITS mask values of ``NaN`` for float and null
  string for string (i.e., not just for tables with ``masked=True``, which no
  longer is guaranteed to signal the presence of ``MaskedColumn``). [#11222]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- The use of ``version='1.0'`` is now fully deprecated in constructing
  a ``astropy.io.votable.tree.VOTableFile``. [#11659]

astropy.modeling
^^^^^^^^^^^^^^^^

- Removed deprecated ``astropy.modeling.blackbody`` module. [#10972]

astropy.table
^^^^^^^^^^^^^

- Added ``Column.value`` as an alias for the existing ``Column.data`` attribute.
  This makes accessing a column's underlying data array consistent with the
  ``.value`` attribute available for ``Time`` and ``Quantity`` objects. [#10962]

- In reading from a FITS tables, the standard mask values of ``NaN`` for float
  and null string for string are properly recognized, leading to a
  ``MaskedColumn`` with appropriately set mask. [#11222]

- Changed the implementation of the ``table.index.Index`` class so instantiating
  from this class now returns an ``Index`` object as expected instead of a
  ``SlicedIndex`` object. [#11333]

astropy.units
^^^^^^^^^^^^^

- The ``physical_type`` attribute of units now returns an instance of
  ``astropy.units.physical.PhysicalType`` instead of a string.  Because
  ``PhysicalType`` instances can be compared to strings, no code changes
  should be necessary when making comparisons.  The string representations
  of different physical types will differ from previous releases. [#11204]

- Calling ``Unit()`` with no argument now returns a dimensionless unit,
  as was documented but not implemented. [#11295]

astropy.utils
^^^^^^^^^^^^^

- Removed deprecated ``utils.misc.InheritDocstrings`` and ``utils.timer``. [#10281]

- Removed usage of deprecated ``ipython`` stream in ``utils.console``. [#10942]

astropy.wcs
^^^^^^^^^^^

- Deprecate ``accuracy`` argument in ``all_world2pix`` which was mistakenly
  *documented*, in the case ``accuracy`` was ever used. [#11055]


Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixes for ``convolve_fft`` documentation examples. [#11510]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Allow ``Distance`` instances with negative distance values as input for
  ``SphericalRepresentation``.  This was always noted as allowed in an
  exception message when a negative ``Quantity`` with length units was
  passed in, but was not actually possible to do. [#11113]

- Makes the ``Angle.to_string`` method to follow the format described in the
  docstring with up to 8 significant decimals instead of 4. [#11153]

- Ensure that proper motions can be calculated when converting a ``SkyCoord``
  with cartesian representation to unit-spherical, by fixing the conversion of
  ``CartesianDifferential`` to ``UnitSphericalDifferential``. [#11469]

- When re-representing coordinates from spherical to unit-spherical and vice
  versa, the type of differential will now be preserved. For instance, if only a
  radial velocity was present, that will remain the case (previously, a zero
  proper motion component was added). [#11482]

- Ensure that wrapping of ``Angle`` does not raise a warning even if ``nan`` are
  present.  Also try to make sure that the result is within the wrapped range
  even in the presence of rounding errors. [#11568]

- Comparing a non-SkyCoord object to a ``SkyCoord`` using ``==`` no longer
  raises an error. [#11666]

- Different ``SkyOffsetFrame`` classes no longer interfere with each other,
  causing difficult to debug problems with the ``origin`` attribute. The
  ``origin`` attribute now no longer is propagated, so while it remains
  available on a ``SkyCoord`` that is an offset, it no longer is available once
  that coordinate is transformed to another frame. [#11730] [#11730]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmology instance names are now immutable. [#11535]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed bug where writing a table that has comments defined (via
  ``tbl.meta['comments']``) with the 'csv' format was failing. Since the
  formally defined CSV format does not support comments, the comments are now
  just ignored unless ``comment=<comment prefix>`` is supplied to the
  ``write()`` call. [#11475]

- Fixed the issue where the CDS reader failed to treat columns
  as nullable if the ReadMe file contains a limits specifier. [#11531]

- Made sure that the CDS reader does not ignore an order specifier that
  may be present after the null specifier '?'. Also made sure that it
  checks null values only when an '=' symbol is present and reads
  description text even if there is no whitespace after '?'. [#11593]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix ``ColDefs.add_col/del_col`` to allow in-place addition or removal of
  a column. [#11338]

- Fix indexing of ``fits.Header`` with Numpy integers. [#11387]

- Do not delete ``EXTNAME`` for compressed image header if a default and
  non-default ``EXTNAME`` are present. [#11396]

- Prevent warnings about ``HIERARCH`` with ``CompImageHeader`` class. [#11404]

- Fixed regression introduced in Astropy 4.0.5 and 4.2.1 with verification of
  FITS headers with HISTORY or COMMENT cards with long (> 72 characters)
  values. [#11487]

- Fix reading variable-length arrays when there is a gap between the data and the
  heap. [#11688]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- ``NumericArray`` converter now properly broadcasts scalar mask to array. [#11157]

- VOTables are now written with the correct namespace and schema location
  attributes. [#11659]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixes the improper propagation of ``bounding_box`` from
  ``astropy.modeling.models`` to their inverses. For cases in which the inverses
  ``bounding_box`` can be determined, the proper calculation has been
  implemented. [#11414]

- Bugfix to allow rotation models to accept arbitrarily-shaped inputs. [#11435]

- Bugfixes for ``astropy.modeling`` to allow ``fix_inputs`` to accept empty
  dictionaries and dictionaries with ``numpy`` integer keys. [#11443]

- Bugfix for how ``SPECIAL_OPERATORS`` are handled. [#11512]

- Fixes ``Model`` crashes when some inputs are scalars and during some types of
  output reshaping. [#11548]

- Fixed bug in ``LevMarLSQFitter`` when using weights and vector inputs. [#11603]

astropy.stats
^^^^^^^^^^^^^

- Fixed a bug with the ``copy=False`` option when carrying out sigma
  clipping - previously if ``masked=False`` this still copied the data,
  but this will now change the array in-place. [#11219]

astropy.table
^^^^^^^^^^^^^

- Ensure that adding a ``Quantity`` or other mixin column to a ``Table``
  does not have side effects, such as creating an associated ``info``
  instance (which would lead to slow-down of, e.g., slicing afterwards). [#11077]

- When writing to a FITS tables, masked values are again always converted to
  the standard FITS mask values of ``NaN`` for float and null string
  for string, not just for table with ``masked=True``. [#11222]

- Using ``Table.to_pandas()`` on an indexed ``Table`` with masked integer values
  now correctly construct the ``pandas.DataFrame``. [#11432]

- Fixed ``Table`` HTML representation in Jupyter notebooks so that it is
  horizontally scrollable within Visual Studio Code. This was done by wrapping
  the ``<table>`` in a ``<div>`` element. [#11476]

- Fix a bug where a string-valued ``Column`` that happened to have a ``unit``
  attribute could not be added to a ``QTable``.  Such columns are now simply
  kept as ``Column`` instances (with a warning). [#11585]

- Fix an issue in ``Table.to_pandas(index=<colname>)`` where the index column name
  was not being set properly for the ``DataFrame`` index. This was introduced by
  an API change in pandas version 1.3.0. Previously when creating a ``DataFrame``
  with the index set to an astropy ``Column``, the ``DataFrame`` index name was
  automatically set to the column name. [#11921]

astropy.time
^^^^^^^^^^^^

- Fix a thread-safety issue with initialization of the leap-second table
  (which is only an issue when ERFA's built-in table is out of date). [#11234]

- Fixed converting a zero-length time object from UTC to
  UT1 when an empty array is passed. [#11516]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

- ``Distribution`` instances can now be used as input to ``Quantity`` to
  initialize ``QuantityDistribution``.  Hence, ``distribution * unit``
  and ``distribution << unit`` will work too. [#11210]

astropy.units
^^^^^^^^^^^^^

- Move non-astronomy units from astrophys.py to a new misc.py file. [#11142]

- The physical type of ``astropy.units.mol / astropy.units.m ** 3`` is now
  defined as molar concentration.  It was previously incorrectly defined
  as molar volume. [#11204]

- Make ufunc helper lookup thread-safe. [#11226]

- Make ``Unit`` string parsing (as well as ``Angle`` parsing) thread-safe. [#11227]

- Decorator ``astropy.units.decorators.quantity_input`` now only evaluates
  return type annotations based on ``UnitBase`` or ``FunctionUnitBase`` types.
  Other annotations are skipped over and are not attempted to convert to the
  correct type. [#11506]

astropy.utils
^^^^^^^^^^^^^

- Make ``lazyproperty`` and ``classdecorator`` thread-safe. This should fix a
  number of thread safety issues. [#11224]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug that resulted in some parts of grid lines being visible when they
  should have been hidden. [#11380]

- Fixed a bug that resulted in ``time_support()`` failing for intervals of
  a few months if one of the ticks was the month December. [#11615]

astropy.wcs
^^^^^^^^^^^

- ``fit_wcs_from_points`` now produces a WCS with integer ``NAXIXn``
  values. [#10865]

- Updated bundled version of ``WCSLIB`` to v7.4, fixing a bug that caused
  the coefficients of the TPD distortion function to not be written to the
  header. [#11260]

- Fixed a bug in assigning type when converting ``colsel`` to
  ``numpy.ndarray``. [#11431]

- Added ``WCSCOMPARE_*`` constants to the list of WCSLIB constants
  available/exposed through the ``astropy.wcs`` module. [#11647]

- Fix a bug that caused APE 14 WCS transformations for FITS WCS with ZOPT, BETA,
  VELO, VOPT, or VRAD CTYPE to not work correctly. [#11781]


Other Changes and Additions
---------------------------

- The configuration file is no longer created by default when importing astropy
  and its existence is no longer required. Affiliated packages should update their
  ``__init__.py`` module to remove the block using ``update_default_config`` and
  ``ConfigurationDefaultMissingWarning``. [#10877]

- Replace ``pkg_resources`` (from setuptools) with ``importlib.metadata`` which
  comes from the stdlib, except for Python 3.7 where the backport package is added
  as a new dependency. [#11091]

- Turn on numpydoc's ``numpydoc_xref_param_type``  to create cross-references
  for the parameter types in the Parameters, Other Parameters, Returns and Yields
  sections of the docstrings. [#11118]

- Docstrings across the package are standardized to enable references.
  Also added is an Astropy glossary-of-terms to define standard inputs,
  e.g. ``quantity-like`` indicates an input that can be interpreted by
  ``astropy.units.Quantity``. [#11118]

- Binary wheels are now built to the manylinux2010 specification. These wheels
  should be supported on all versions of pip shipped with Python 3.7+. [#11377]

- The name of the default branch for the astropy git repository has been renamed
  to ``main``, and the documentation and tooling has been updated accordingly.
  If you have made a local clone you may wish to update it following the
  instructions in the repository's README. [#11379]

- Sphinx cross-reference link targets are added for every ``PhysicalType``.
  Now in the parameter types in the Parameters, Other Parameters, Returns and
  Yields sections of the docstring, the physical type of a quantity can be
  annotated in square brackets.
  E.g. `` distance : `~astropy.units.Quantity` ['length'] `` [#11595]

- The minimum supported version of ``ipython`` is now 4.2. [#10942]

- The minimum supported version of ``pyerfa`` is now 1.7.3. [#11637]


Version 4.2.1 (2021-04-01)
==========================

Bug Fixes
---------

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Fixed an issue where specializations of the comoving distance calculation
  for certain cosmologies could not handle redshift arrays. [#10980]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix bug where manual fixes to invalid header cards were not preserved when
  saving a FITS file. [#11108]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- ``NumericArray`` converter now properly broadcasts scalar mask to array.
  [#11157]

astropy.table
^^^^^^^^^^^^^

- Fix bug when initializing a ``Table`` subclass that uses ``TableAttribute``'s.
  If the data were an instance of the table then attributes provided in the
  table initialization call could be ignored. [#11217]

astropy.time
^^^^^^^^^^^^

- Change epoch of ``TimeUnixTAI`` (``"unix_tai"``) from ``1970-01-01T00:00:00 UTC``
  to ``1970-01-01T00:00:00 TAI`` to match the intended and documented behaviour.
  This essentially changes the resulting times by 8.000082 seconds, the initial
  offset between TAI and UTC. [#11249]

astropy.units
^^^^^^^^^^^^^

- Fixed a bug with the ``quantity_input`` decorator where allowing
  dimensionless inputs for an argument inadvertently disabled any checking of
  compatible units for that argument. [#11283]

astropy.utils
^^^^^^^^^^^^^

- Fix a bug so that ``np.shape``, ``np.ndim`` and ``np.size`` again work on
  classes that use ``ShapedLikeNDArray``, like representations, frames,
  sky coordinates, and times. [#11133]

astropy.wcs
^^^^^^^^^^^

- Fix error when a user defined ``proj_point`` parameter is passed to ``fit_wcs_from_points``. [#11139]


Other Changes and Additions
---------------------------


- Change epoch of ``TimeUnixTAI`` (``"unix_tai"``) from ``1970-01-01T00:00:00 UTC``
  to ``1970-01-01T00:00:00 TAI`` to match the intended and documented behaviour.
  This essentially changes the resulting times by 8.000082 seconds, the initial
  offset between TAI and UTC. [#11249]


Version 4.2 (2020-11-24)
========================

New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Methods ``convolve`` and ``convolve_fft`` both now return Quantity arrays
  if user input is given in one. [#10822]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Numpy functions that broadcast, change shape, or index (like
  ``np.broadcast_to``, ``np.rot90``, or ``np.roll``) now work on
  coordinates, frames, and representations. [#10337]

- Add a new science state ``astropy.coordinates.erfa_astrom.erfa_astrom`` and
  two classes ``ErfaAstrom``, ``ErfaAstromInterpolator`` as wrappers to
  the ``pyerfa`` astrometric functions used in the coordinate transforms.
  Using ``ErfaAstromInterpolator``, which interpolates astrometric properties for
  ``SkyCoord`` instances with arrays of obstime, can dramatically speed up
  coordinate transformations while keeping microarcsecond resolution.
  Depending on needed precision and the obstime array in question, speed ups
  reach factors of 10x to >100x. [#10647]

- ``galactocentric_frame_defaults`` can now also be used as a registry, with
  user-defined parameter values and metadata. [#10624]

- Method ``.realize_frame`` from coordinate frames now accepts ``**kwargs``,
  including ``representation_type``. [#10727]

- Avoid an unnecessary call to ``erfa.epv00`` in transformations between
  ``CIRS`` and ``ICRS``, improving performance by 50 %. [#10814]

- A new equatorial coordinate frame, with RA and Dec measured w.r.t to the True
  Equator and Equinox (TETE). This frame is commonly known as "apparent place"
  and is the correct frame for coordinates returned from JPL Horizons. [#10867]

- Added a context manager ``impose_finite_difference_dt`` to the
  ``TransformGraph`` class to override the finite-difference time step
  attribute (``finite_difference_dt``) for all transformations in the graph
  with that attribute. [#10341]

- Improve performance of ``SpectralCoord`` by refactoring internal
  implementation. [#10398]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The final version of the Planck 2018 cosmological parameters are included
  as the ``Planck18`` object, which is now the default cosmology.  The
  parameters are identical to those of the ``Planck18_arXiv_v2`` object,
  which is now deprecated and will be removed in a future release. [#10915]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added NFW profile and tests to modeling package [#10505]

- Added missing logic for evaluate to compound models [#10002]

- Stop iteration in ``FittingWithOutlierRemoval`` before reaching ``niter`` if
  the masked points are no longer changing. [#10642]

- Keep a (shallow) copy of ``fit_info`` from the last iteration of the wrapped
  fitter in ``FittingWithOutlierRemoval`` and also record the actual number of
  iterations performed in it. [#10642]

- Added attributes for fitting uncertainties (covariance matrix, standard
  deviations) to models. Parameter covariance matrix can be accessed via
  ``model.cov_matrix``, standard deviations by ``model.stds`` or individually
  for each parameter by ``parameter.std``. Currently implemented for
  ``LinearLSQFitter`` and ``LevMarLSQFitter``. [#10552]

- N-dimensional least-squares statistic and specific 1,2,3-D methods [#10670]

astropy.stats
^^^^^^^^^^^^^

- Added ``circstd`` function to obtain a circular standard deviation. [#10690]

astropy.table
^^^^^^^^^^^^^

- Allow initializing a ``Table`` using a list of ``names`` in conjunction with
  a ``dtype`` from a numpy structured array. The list of ``names`` overrides the
  names specified in the ``dtype``. [#10419]

astropy.time
^^^^^^^^^^^^

- Add new ``isclose()`` method to ``Time`` and ``TimeDelta`` classes to allow
  comparison of time objects to within a specified tolerance. [#10646]

- Improve initialization time by a factor of four when creating a scalar ``Time``
  object in a format like ``unix`` or ``cxcsec`` (time delta from a reference
  epoch time). [#10406]

- Improve initialization time by a factor of ~25 or more for large arrays of
  string times in ISO, ISOT or year day-of-year formats. This is done with a new
  C-based time parser that can be adapted for other fixed-format custom time
  formats. [#10360]

- Numpy functions that broadcast, change shape, or index (like
  ``np.broadcast_to``, ``np.rot90``, or ``np.roll``) now work on times.
  [#10337, #10502]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Improve memory and speed performance when iterating over the entire time
  column of a ``TimeSeries`` object. Previously this involved O(N^2) operations
  and memory. [#10889]

astropy.units
^^^^^^^^^^^^^

- ``Quantity.to`` has gained a ``copy`` option to allow copies to be avoided
  when the units do not change. [#10517]

- Added the ``spat`` unit of solid angle that represents the full sphere.
  [#10726]

astropy.utils
^^^^^^^^^^^^^

- ``ShapedLikeNDArray`` has gained the capability to use numpy functions
  that broadcast, change shape, or index. [#10337]

- ``get_free_space_in_dir`` now takes a new ``unit`` keyword and
  ``check_free_space_in_dir`` takes ``size`` defined as ``Quantity``. [#10627]

- New ``astropy.utils.data.conf.allow_internet`` configuration item to
  control downloading data from the Internet. Setting ``allow_internet=False``
  is the same as ``remote_timeout=0``. Using ``remote_timeout=0`` to control
  internet access will stop working in a future release. [#10632]

- New ``is_url`` function so downstream packages do not have to secretly use
  the hidden ``_is_url`` anymore. [#10684]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added the ``Quadrangle`` patch for ``WCSAxes`` for a latitude-longitude
  quadrangle.  Unlike ``matplotlib.patches.Rectangle``, the edges of this
  patch will be rendered as curved lines if appropriate for the WCS
  transformation. [#10862]

- The position of tick labels are now only calculated when needed. If any text
  parameters are changed (color, font weight, size etc.) that don't effect the
  tick label position, the positions are not recomputed, improving performance.
  [#10806]

astropy.wcs
^^^^^^^^^^^

- ``WCS.to_header()`` now appends comments to SIP coefficients. [#10480]

- A new property ``dropped_world_dimensions`` has been added to
  ``SlicedLowLevelWCS`` to record information about any world axes removed by
  slicing a WCS. [#10195]

- New ``WCS.proj_plane_pixel_scales()`` and ``WCS.proj_plane_pixel_area()``
  methods to return pixel scales and area, respectively, as Quantity. [#10872]


API Changes
-----------

astropy.config
^^^^^^^^^^^^^^

- ``set_temp_config`` now preserves the existing cache rather than deleting
  it and relying on reloading it from the previous config file. This ensures
  that any programmatically made changes are preserved as well. [#10474]

- Configuration path detection logic has changed: Now, it looks for ``~`` first
  before falling back to older logic. In addition, ``HOMESHARE`` is no longer
  used in Windows. [#10705]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The passing of frame classes (as opposed to frame instances) to the
  ``transform_to()`` methods of low-level coordinate-frame classes has been
  deprecated.  Frame classes can still be passed to the ``transform_to()``
  method of the high-level ``SkyCoord`` class, and using ``SkyCoord`` is
  recommended for all typical use cases of transforming coordinates. [#10475]

astropy.stats
^^^^^^^^^^^^^

- Added a ``grow`` parameter to ``SigmaClip``, ``sigma_clip`` and
  ``sigma_clipped_stats``, to allow expanding the masking of each deviant
  value to its neighbours within a specified radius. [#10613]

- Passing float ``n`` to ``poisson_conf_interval`` when using
  ``interval='kraft-burrows-nousek'`` now raises ``TypeError`` as its value
  must be an integer. [#10838]

astropy.table
^^^^^^^^^^^^^

- Change ``Table.columns.keys()`` and ``Table.columns.values()`` to both return
  generators instead of a list. This matches the behavior for Python ``dict``
  objects. [#10543]

- Removed the ``FastBST`` and ``FastRBT`` indexing engines because they depend
  on the ``bintrees`` package, which is no longer maintained and is deprecated.
  Instead, use the ``SCEngine`` indexing engine, which is similar in
  performance and relies on the ``sortedcontainers`` package. [#10622]

- When slicing a mixin column in a table that had indices, the indices are no
  longer copied since they generally are not useful, having the wrong shape.
  With this, the behaviour becomes the same as that for a regular ``Column``.
  (Note that this does not affect slicing of a table; sliced columns in those
  will continue to carry a sliced version of any indices). [#10890]

- Change behavior so that when getting a single item out of a mixin column such
  as ``Time``, ``TimeDelta``, ``SkyCoord`` or ``Quantity``, the ``info``
  attribute is no longer copied. This improves performance, especially when the
  object is an indexed column in a ``Table``. [#10889]

- Raise a TypeError when a scalar column is added to an unsized table. [#10476]

- The order of columns when creating a table from a ``list`` of ``dict`` may be
  changed. Previously, the order was alphabetical because the ``dict`` keys
  were assumed to be in random order. Since Python 3.7, the keys are always in
  order of insertion, so ``Table`` now uses the order of keys in the first row
  to set the column order. To alphabetize the columns to match the previous
  behavior, use ``t = t[sorted(t.colnames)]``. [#10900]

astropy.time
^^^^^^^^^^^^

- Refactor ``Time`` and ``TimeDelta`` classes to inherit from a common
  ``TimeBase`` class. The ``TimeDelta`` class no longer inherits from ``Time``.
  A number of methods that only apply to ``Time`` (e.g. ``light_travel_time``)
  are no longer available in the ``TimeDelta`` class. [#10656]

astropy.units
^^^^^^^^^^^^^

- The ``bar`` unit is no longer wrongly considered an SI unit, meaning that
  SI decompositions like ``(u.kg*u.s**-2* u.sr**-1 * u.nm**-1).si`` will
  no longer include it. [#10586]

astropy.utils
^^^^^^^^^^^^^

- Shape-related items from ``astropy.utils.misc`` -- ``ShapedLikeNDArray``,
  ``check_broadcast``, ``unbroadcast``, and ``IncompatibleShapeError`` --
  have been moved to their own module, ``astropy.utils.shapes``. They remain
  importable from ``astropy.utils``. [#10337]

- ``check_hashes`` keyword in ``check_download_cache`` is deprecated and will
  be removed in a future release. [#10628]

- ``hexdigest`` keyword in ``import_file_to_cache`` is deprecated and will
  be removed in a future release. [#10628]


Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Fix a few issues with ``generate_config`` when used with other packages.
  [#10893]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug in the coordinate-frame attribute ``CoordinateAttribute`` where
  the internal transformation could behave differently depending on whether
  the input was a low-level coordinate frame or a high-level ``SkyCoord``.
  ``CoordinateAttribute`` now always performs a ``SkyCoord``-style internal
  transformation, including the by-default merging of frame attributes. [#10475]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed an issue of ``Model.render`` when the input ``out`` datatype is not
  float64. [#10542]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fix support for referencing WCSAxes coordinates by their world axes names.
  [#10484]

astropy.wcs
^^^^^^^^^^^

- Objective functions called by ``astropy.wcs.fit_wcs_from_points`` were
  treating longitude and latitude distances equally. Now longitude scaled
  properly. [#10759]


Other Changes and Additions
---------------------------

- Minimum version of required Python is now 3.7. [#10900]

- Minimum version of required Numpy is now 1.17. [#10664]

- Minimum version of required Scipy is now 1.1. [#10900]

- Minimum version of required PyYAML is now 3.13. [#10900]

- Minimum version of required Matplotlib is now 3.0. [#10900]

- The private ``_erfa`` module has been converted to its own package,
  ``pyerfa``, which is a required dependency for astropy, and can be imported
  with ``import erfa``.  Importing ``_erfa`` from ``astropy`` will give a
  deprecation warning.  [#10329]

- Added ``optimize=True`` flag to calls of ``yacc.yacc`` (as already done for
  ``lex.lex``) to allow running in ``python -OO`` session without raising an
  exception in ``astropy.units.format``. [#10379]

- Shortened FITS comment strings for some D2IM and CPDIS FITS keywords to
  reduce the number of FITS ``VerifyWarning`` warnings when working with WCSes
  containing lookup table distortions. [#10513]

- When importing astropy without first building the extension modules first,
  raise an error directly instead of trying to auto-build. [#10883]



Version 4.1 (2020-10-21)
========================

New Features
------------

astropy.config
^^^^^^^^^^^^^^

- Add new function ``generate_config`` to generate the configuration file and
  include it in the documentation. [#10148]

- ``ConfigNamespace.__iter__`` and ``ConfigNamespace.keys`` now yield ``ConfigItem``
  names defined within it. Similarly, ``items`` and ``values`` would yield like a
  Python dictionary would. [#10139]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added a new ``SpectralCoord`` class that can be used to define spectral
  coordinates and transform them between different velocity frames. [#10185]

- Angle parsing now supports ``cardinal direction`` in the cases
  where angles are initialized as ``string`` instances. eg ``"17°53'27"W"``.[#9859]

- Allow in-place modification of array-valued ``Frame`` and ``SkyCoord`` objects.
  This provides limited support for updating coordinate data values from another
  coordinate object of the same class and equivalent frame attributes. [#9857]

- Added a robust equality operator for comparing ``SkyCoord``, frame, and
  representation objects. A comparison like ``sc1 == sc2`` will now return a
  boolean or boolean array where the objects are strictly equal in all relevant
  frame attributes and coordinate representation values. [#10154]

- Added the True Equator Mean Equinox (TEME) frame. [#10149]

- The ``Galactocentric`` frame will now use the "latest" parameter definitions
  by default. This currently corresponds to the values defined in v4.0, but will
  change with future releases. [#10238]

- The ``SkyCoord.from_name()`` and Sesame name resolving functionality now is
  able to cache results locally and will do so by default. [#9162]

- Allow in-place modification of array-valued ``Representation`` and ``Differential``
  objects, including of representations with attached differentials. [#10210]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Functional Units can now be processed in CDS-tables. [#9971]

- Allow reading in ASCII tables which have duplicate column names. [#9939]

- Fixed failure of ASCII ``fast_reader`` to handle ``names``, ``include_names``,
  ``exclude_names`` arguments for ``RDB`` formatted tables. Homogenised checks
  and exceptions for invalid ``names`` arguments. Improved performance when
  parsing "wide" tables with many columns. [#10306]

- Added type validation of key arguments in calls to ``io.ascii.read()`` and
  ``io.ascii.write()`` functions. [#10005]

astropy.io.misc
^^^^^^^^^^^^^^^
- Added serialization of parameter constraints fixed and bounds.  [#10082]

- Added 'functional_models.py' and 'physical_models.py' to asdf/tags/transform,
  with to allow serialization of all functional and physical models. [#10028, #10293]

- Fix ASDF serialization of circular model inverses, and remove explicit calls
  to ``asdf.yamlutil`` functions that became unnecessary in asdf 2.6.0. [#10189, #10384]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added support for writing Dask arrays to disk efficiently for ``ImageHDU`` and
  ``PrimaryHDU``. [#9742]

- Add HDU name and ver to FITSDiff report where appropriate [#10197]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- New ``exceptions.conf.max_warnings`` configuration item to control the number of times a
  type of warning appears before being suppressed. [#10152]

- No longer ignore attributes whose values were specified as empty
  strings. [#10583]

astropy.modeling
^^^^^^^^^^^^^^^^
- Added Plummer1D model to ``functional_models``. [#9896]

- Added ``UnitsMapping`` model and ``Model.coerce_units`` to support units on otherwise
  unitless models. [#9936]

- Added ``domain`` and ``window`` attributes to ``repr`` and ``str``. Fixed bug with
  ``_format_repr`` in core.py. [#9941]

- Polynomial attributes ``domain`` and ``window`` are now tuples of size 2 and are
  validated. `repr` and `print` show only their non-default values. [#10145]

- Added ``replace_submodel()`` method to ``CompoundModel`` to modify an
  existing instance. [#10176]

- Delay construction of ``CompoundModel`` inverse until property is accessed,
  to support ASDF deserialization of circular inverses in component models. [#10384]

astropy.nddata
^^^^^^^^^^^^^^

- Added support in the ``bitmask`` module for using mnemonic bit flag names
  when specifying the bit flags to be used or ignored when converting a bit
  field to a boolean. [#10095, #10208]

- Added ``reshape_as_blocks`` function to reshape a data array into
  blocks, which is useful to efficiently apply functions on block
  subsets of the data instead of using loops.  The reshaped array is a
  view of the input data array. [#10214]

- Added a ``cache`` keyword option to allow caching for ``CCDData.read`` if
  filename is a URL. [#10265]

astropy.table
^^^^^^^^^^^^^

- Added ability to specify a custom matching function for table joins.  In
  particular this makes it possible to do cross-match table joins on ``SkyCoord``,
  ``Quantity``, or standard columns, where column entries within a specified
  distance are considered to be matched. [#10169]

- Added ``units`` and ``descriptions`` keyword arguments to the Table object
  initialization and ``Table.read()`` methods.  This allows directly setting
  the ``unit`` and ``description`` for the table columns at the time of
  creating or reading the table. [#9671]

- Make table ``Row`` work as mappings, by adding ``.keys()`` and ``.values()``
  methods. With this ``**row`` becomes possible, as does, more simply, turning
  a ``Row`` into a dictionary with ``dict(row)``. [#9712]

- Added two new ``Table`` methods ``.items()`` and ``.values()``, which return
  respectively ``tbl.columns.items()`` (iterator over name, column tuples)  and
  ``tbl.columns.values()`` (list of columns) for a ``Table`` object ``tbl``. [#9780]

- Added new ``Table`` method ``.round()``, which rounds numeric columns to the
  specified number of decimals. [#9862]

- Updated ``to_pandas()`` and ``from_pandas()`` to use and support Pandas
  nullable integer data type for masked integer data. [#9541]

- The HDF5 writer, ``write_table_hdf5()``, now allows passing through
  additional keyword arguments to the ``h5py.Group.create_dataset()``. [#9602]

- Added capability to add custom table attributes to a ``Table`` subclass.
  These attributes are persistent and can be set during table creation. [#10097]

- Added support for ``SkyCoord`` mixin columns in ``dstack``, ``vstack`` and
  ``insert_row`` functions. [#9857]

- Added support for coordinate ``Representation`` and ``Differential`` mixin
  columns. [#10210]

astropy.time
^^^^^^^^^^^^

- Added a new time format ``unix_tai`` which is essentially Unix time but with
  leap seconds included.  More precisely, this is the number of seconds since
  ``1970-01-01 00:00:08 TAI`` and corresponds to the ``CLOCK_TAI`` clock
  available on some linux platforms. [#10081]

astropy.units
^^^^^^^^^^^^^

- Added ``torr`` pressure unit. [#9787]

- Added the ``equal_nan`` keyword argument to ``isclose`` and ``allclose``, and
  updated the docstrings. [#9849]

- Added ``Rankine`` temperature unit. [#9916]

- Added integrated flux unit conversion to ``spectral_density`` equivalency.
  [#10015]

- Changed ``pixel_scale`` equivalency to allow scales defined in any unit.
  [#10123]

- The ``quantity_input`` decorator now optionally allows passing through
  numeric values or numpy arrays with numeric dtypes to arguments where
  ``dimensionless_unscaled`` is an allowed unit. [#10232]

astropy.utils
^^^^^^^^^^^^^

- Added a new ``MetaAttribute`` class to support easily adding custom attributes
  to a subclass of classes like ``Table`` or ``NDData`` that have a ``meta``
  attribute. [#10097]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added ``invalid`` keyword to ``SqrtStretch``, ``LogStretch``,
  ``PowerStretch``, and ``ImageNormalize`` classes and the
  ``simple_norm`` function.  This keyword is used to replace generated
  NaN values. [#10182]

- Fixed an issue where ticks were sometimes not drawn at the edges of a spherical
  projection on a WCSAxes. [#10442]

astropy.wcs
^^^^^^^^^^^

- WCS objects with a spectral axis will now return ``SpectralCoord``
  objects when calling ``pixel_to_world`` instead of ``Quantity``,
  and can now take either ``Quantity`` or ``SpectralCoord`` as input
  to ``pixel_to_world``. [#10185]

- Implemented support for the ``-TAB`` algorithm (WCS Paper III). [#9641]

- Added an ``_as_mpl_axes`` method to the ``HightLevelWCSWrapper`` class. [#10138]

- Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from
  unintended lower/upper case issues [#10557]

API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The equality operator for comparing ``SkyCoord``, frame, and representation
  objects was changed. A comparison like ``sc1 == sc2`` was previously
  equivalent to ``sc1 is sc2``. It will now return a boolean or boolean array
  where the objects are strictly equal in all relevant frame attributes and
  coordinate representation values. If the objects have different frame
  attributes or representation types then an exception will be raised. [#10154]

- ```SkyCoord.radial_velocity_correction``` now allows you to pass an ```obstime``` directly
  when the ```SkyCoord``` also has an ```obstime``` set. In this situation, the position of the
  ```SkyCoord``` has space motion applied to correct to the passed ```obstime```. This allows
  mm/s radial velocity precision for objects with large space motion. [#10094]

- For consistency with other astropy classes, coordinate ``Representations``
  and ``Differentials`` can now be initialized with an instance of their own class
  if that instance is passed in as the first argument. [#10210]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Changed the behavior when reading a table where both the ``names`` argument
  is provided (to specify the output column names) and the ``converters``
  argument is provided (to specify column conversion functions). Previously the
  ``converters`` dict names referred to the *input* table column names, but now
  they refer to the *output* table column names. [#9739]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- For FIELDs with datatype="char", store the values as strings instead
  of bytes. [#9505]

astropy.table
^^^^^^^^^^^^^

- ``Table.from_pandas`` now supports a ``units`` dictionary as argument to pass units
  for columns in the ``DataFrame``. [#9472]

astropy.time
^^^^^^^^^^^^

- Require that ``in_subfmt`` and ``out_subfmt`` properties of a ``Time`` object
  have allowed values at the time of being set, either when creating the object
  or when setting those properties on an existing ``Time`` instance.  Previously
  the validation of those properties was not strictly enforced. [#9868]

astropy.utils
^^^^^^^^^^^^^

- Changed the exception raised by ``get_readable_fileobj`` on missing
  compression modules (for ``bz2`` or ``lzma``/``xz`` support) to
  ``ModuleNotFoundError``, consistent with ``io.fits`` file handlers. [#9761]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Deprecated the ``imshow_only_kwargs`` keyword in ``imshow_norm``.
  [#9915]

- Non-finite input values are now automatically excluded in
  ``HistEqStretch`` and ``InvertedHistEqStretch``. [#10177]

- The ``PowerDistStretch`` and ``InvertedPowerDistStretch`` ``a``
  value is restricted to be ``a >= 0`` in addition to ``a != 1``.
  [#10177]

- The ``PowerStretch``, ``LogStretch``, and ``InvertedLogStretch``
  ``a`` value is restricted to be ``a > 0``. [#10177]

- The ``AsinhStretch`` and ``SinhStretch`` ``a`` value is restricted
  to be ``0 < a <= 1``. [#10177]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix a bug where for light deflection by the Sun it was always assumed that the
  source was at infinite distance, which in the (rare and) absolute worst-case
  scenario could lead to errors up to 3 arcsec. [#10666]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- For FIELDs with datatype="char", store the values as strings instead
  of bytes. [#9505]

astropy.table
^^^^^^^^^^^^^

- Fix a bug that prevented ``Time`` columns from being used to sort a table.
  [#10824]

astropy.wcs
^^^^^^^^^^^

- WCS objects with a spectral axis will now return ``SpectralCoord``
  objects when calling ``pixel_to_world`` instead of ``Quantity``
  (note that ``SpectralCoord`` is a sub-class of ``Quantity``). [#10185]

- Add .upper() to ctype or ctype names to wcsapi/fitwcs.py to mitigate bugs from
  unintended lower/upper case issues [#10557]

- Added bounds to ``fit_wcs_from_points`` to ensure CRPIX is on
  input image. [#10346]


Other Changes and Additions
---------------------------

- The way in which users can specify whether to build astropy against
  existing installations of C libraries rather than the bundled one
  has changed, and should now be done via environment variables rather
  than setup.py flags (e.g. --use-system-erfa). The available variables
  are ``ASTROPY_USE_SYSTEM_CFITSIO``, ``ASTROPY_USE_SYSTEM_ERFA``,
  ``ASTROPY_USE_SYSTEM_EXPAT``, ``ASTROPY_USE_SYSTEM_WCSLIB``, and
  ``ASTROPY_USE_SYSTEM_ALL``. These should be set to ``1`` to build
  against the system libraries. [#9730]

- The infrastructure of the package has been updated in line with the
  APE 17 roadmap (https://github.com/astropy/astropy-APEs/blob/master/APE17.rst).
  The main changes are that the ``python setup.py test`` and
  ``python setup.py build_docs`` commands will no longer work. The easiest
  way to replicate these commands is to install the tox
  (https://tox.readthedocs.io) package and run ``tox -e test`` and
  ``tox -e build_docs``. It is also possible to run pytest and sphinx
  directly. Other significant changes include switching to setuptools_scm to
  manage the version number, and adding a ``pyproject.toml`` to opt in to
  isolated builds as described in PEP 517/518. [#9726]

- Bundled ``expat`` is updated to version 2.2.9. [#10038]

- Increase minimum asdf version to 2.6.0. [#10189]

- The bundled version of PLY was updated to 3.11. [#10258]

- Removed dependency on scikit-image. [#10214]

Version 4.0.5 (2021-03-26)
==========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix bug where manual fixes to invalid header cards were not preserved when
  saving a FITS file. [#11108]

- Fix parsing of RVKC header card patterns that were not recognised
  where multiple spaces were separating field-specifier and value like
  "DP1.AXIS.1:   1". [#11301]

- Fix misleading missing END card error when extra data are found at the end
  of the file. [#11285]

- Fix incorrect wrapping of long card values as CONTINUE cards when some
  words in the value are longer than a single card. [#11304]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fixed problem when writing serialized metadata to HDF5 using h5py >= 3.0.
  With the newer h5py this was writing the metadata table as a variable-length
  string array instead of the previous fixed-length bytes array. Fixed astropy
  to force using a fixed-length bytes array. [#11359]

astropy.modeling
^^^^^^^^^^^^^^^^

- Change ``Voigt1D`` function to use Humlicek's approximation to avoid serious
  inaccuracies + option to use (compiled) ``scipy.special.wofz`` error function
  for yet more accurate results. [#11177]

astropy.table
^^^^^^^^^^^^^

- Fixed bug when initializing a ``Table`` with a column as list of ``Quantity``,
  for example ``Table({'x': [1*u.m, 2*u.m]})``. Previously this resulted in an
  ``object`` dtype with no column ``unit`` set, but now gives a float array with
  the correct unit. [#11329]

- Fixed byteorder conversion in ``to_pandas()``, which had incorrectly
  triggered swapping when native endianness was stored with explicit
  ``dtype`` code ``'<'`` (or ``'>'``) instead of ``'='``. [#11288, #11294]

- Fixed a compatibility issue with numpy 1.21. Initializing a Table with a
  column like ``['str', np.ma.masked]`` was failing in tests due to a change in
  numpy. [#11364]

- Fixed bug when validating the inputs to ``table.hstack``, ``table.vstack``,
  and ``table.dstack``. Previously, mistakenly calling ``table.hstack(t1, t2)``
  (instead of ``table.hstack([t1, t2]))`` would return ``t1`` instead of raising
  an exception. [#11336]

- Fixed byteorder conversion in ``to_pandas()``, which had incorrectly
  triggered swapping when native endianness was stored with explicit
  ``dtype`` code ``'<'`` (or ``'>'``) instead of ``'='``. [#11288]

astropy.time
^^^^^^^^^^^^

- Fix leap second update when using a non english locale. [#11062]

- Fix default assumed location to be the geocenter when transforming times
  to and from solar-system barycenter scales. [#11134]

- Fix inability to write masked times with ``formatted_value``. [#11195]

astropy.units
^^^^^^^^^^^^^

- Ensure ``keepdims`` works for taking ``mean``, ``std``, and ``var`` of
  ``Quantity``. [#11198]

- For ``Quantity.to_string()``, ensure that the precision argument is also
  used when the format is not latex. [#11145]

astropy.wcs
^^^^^^^^^^^

- Allow "un-setting" of auxiliary WCS parameters in the ``aux`` attribute of
  ``Wcsprm``. [#11166]





Version 4.0.4 (2020-11-24)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``norm()`` method for ``RadialDifferential`` no longer requires ``base``
  to be specified.  The ``norm()`` method for other non-Cartesian differential
  classes now gives a clearer error message if ``base`` is not specified. [#10969]

- The transformations between ``ICRS`` and any of the heliocentric ecliptic
  frames (``HeliocentricMeanEcliptic``, ``HeliocentricTrueEcliptic``, and
  ``HeliocentricEclipticIAU76``) now correctly account for the small motion of
  the Sun when transforming a coordinate with velocity information. [#10970]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Partially fixed a performance issue when reading in parallel mode. Parallel
  reading currently has substantially worse performance than the default serial
  reading, so we now ignore the parallel option and fall back to serial reading.
  [#10880]

- Fixed a bug where "" (blank string) as input data for a boolean type column
  was causing an exception instead of indicating a masked value. As a
  consequence of the fix, the values "0" and "1" are now also allowed as valid
  inputs for boolean type columns. These new allowed values apply for both ECSV
  and for basic character-delimited data files ('basic' format with appropriate
  ``converters`` specified). [#10995]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed use of weights with ``LinearLSQFitter``. [#10687]

astropy.stats
^^^^^^^^^^^^^

- Fixed an issue in biweight stats when MAD=0 to give the same output
  with and without an input ``axis``. [#10912]

astropy.time
^^^^^^^^^^^^

- Fix a problem with the ``plot_date`` format for matplotlib >= 3.3 caused by
  a change in the matplotlib plot date default reference epoch in that release.
  [#10876]

- Improve initialization time by a factor of four when creating a scalar ``Time``
  object in a format like ``unix`` or ``cxcsec`` (time delta from a reference
  epoch time). [#10406]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed the calculation of the tight bounding box of a ``WCSAxes``. This should
  also significantly improve the application of ``tight_layout()`` to figures
  containing ``WCSAxes``. [#10797]


Version 4.0.3 (2020-10-14)
==========================

Bug Fixes
---------

astropy.table
^^^^^^^^^^^^^

- Fixed a small bug where initializing an empty ``Column`` with a structured dtype
  with a length and a shape failed to give the requested dtype. [#10819]

Other Changes and Additions
---------------------------

- Fixed installation of the source distribution with pip<19. [#10837, #10852]


Version 4.0.2 (2020-10-10)
==========================

New Features
------------

astropy.utils
^^^^^^^^^^^^^

- ``astropy.utils.data.download_file`` now supports FTPS/FTP over TLS. [#9964]

- ``astropy.utils.data`` now uses a lock-free mechanism for caching. This new
  mechanism uses a new cache layout and so ignores caches created using earlier
  mechanisms (which were causing lockups on clusters). The two cache formats can
  coexist but do not share any files. [#10437, #10683]

- ``astropy.utils.data`` now ignores the config item
  ``astropy.utils.data.conf.download_cache_lock_attempts`` since no locking is
  done. [#10437, #10683]

- ``astropy.utils.data.download_file`` and related functions now interpret the
  parameter or config file setting ``timeout=0`` to mean they should make no
  attempt to download files. [#10437, #10683]

- ``astropy.utils.import_file_to_cache`` now accepts a keyword-only argument
  ``replace``, defaulting to True, to determine whether it should replace existing
  files in the cache, in a way as close to atomic as possible. [#10437, #10683]

- ``astropy.utils.data.download_file`` and related functions now treat
  ``http://example.com`` and ``http://example.com/`` as equivalent. [#10631]

astropy.wcs
^^^^^^^^^^^

- The new auxiliary WCS parameters added in WCSLIB 7.1 are now exposed as
  the ``aux`` attribute of ``Wcsprm``. [#10333]

- Updated bundled version of ``WCSLIB`` to v7.3. [#10433]


Bug fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Added an extra fallback to ``os.expanduser('~')`` when trying to find the
  user home directory. [#10570]

astropy.constants
^^^^^^^^^^^^^^^^^

- Corrected definition of parsec to 648 000 / pi AU following IAU 2015 B2 [#10569]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where a float-typed integers in the argument ``x_range`` of
  ``astropy.convolution.utils.discretize_oversample_1D`` (and the 2D version as
  well) fails because it uses ``numpy.linspace``, which requires an ``int``.
  [#10696]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ensure that for size-1 array ``SkyCoord`` and coordinate frames
  the attributes also properly become scalars when indexed with 0.
  [#10113]

- Fixed a bug where ``SkyCoord.separation()`` and ``SkyCoord.separation_3d``
  were not accepting a frame object. [#10332]

- Ensure that the ``lon`` values in ``SkyOffsetFrame`` are wrapped correctly at
  180 degree regardless of how the underlying data is represented. [#10163]

- Fixed an error in the obliquity of the ecliptic when transforming to/from the
  ``*TrueEcliptic`` coordinate frames. The error would primarily result in an
  inaccuracy in the ecliptic latitude on the order of arcseconds. [#10129]

- Fixed an error in the computation of the location of solar system bodies where the
  Earth location of the observer was ignored during the correction for light travel
  time. [#10292]

- Ensure that coordinates with proper motion that are transformed to other
  coordinate frames still can be represented properly. [#10276]

- Improve the error message given when trying to get a cartesian representation
  for coordinates that have both proper motion and radial velocity, but no
  distance. [#10276]

- Fixed an error where ``SkyCoord.apply_space_motion`` would return incorrect
  results when no distance is set and proper motion is high. [#10296]

- Make the parsing of angles thread-safe so that ``Angle`` can be used in
  Python multithreading. [#10556]

- Fixed reporting of ``EarthLocation.info`` which previously raised an exception.
  [#10592]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a bug with the C ``fast_reader`` not correctly parsing newlines when
  ``delimiter`` was also set to ``\n`` or ``\r``; ensured consistent handling
  of input strings without newline characters. [#9929]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix integer formats of ``TFORMn=Iw`` columns in ASCII tables to correctly read
  values exceeding int32 - setting int16, int32 or int64 according to ``w``. [#9901]

- Fix unclosed memory-mapped FITS files in ``FITSDiff`` when difference found.
  [#10159]

- Fix crash when reading an invalid table file. [#10171]

- Fix duplication issue when setting a keyword ending with space. [#10482]

- Fix ResourceWarning with ``fits.writeto`` and ``pathlib.Path`` object.
  [#10599]

- Fix repr for commentary cards and strip spaces for commentary keywords.
  [#10640]

- Fix compilation of cfitsio with Xcode 12. [#10772]

- Fix handling of 1-dimensional arrays with a single element in ``BinTableHDU`` [#10768]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fix id URL in ``baseframe-1.0.0`` ASDF schema. [#10223]

- Write keys to ASDF only if the value is present, to account
  for a change in behavior in asdf 2.8. [#10674]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Fix ``Table.(read|write).help`` when reader or writer has no docstring. [#10460]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed parsing failure of VOTable with no fields. When detecting a non-empty
  table with no fields, the following warning/exception is issued:
  E25 "No FIELDs are defined; DATA section will be ignored." [#10192]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a problem with mapping ``input_units`` and ``return_units``
  of a ``CompoundModel`` to the units of the constituent models. [#10158]

- Removed hard-coded names of inputs and outputs. [#10174]

- Fixed a problem where slicing a ``CompoundModel`` by name will crash if
  there ``fix_inputs`` operators are present. [#10224]

- Removed a limitation of fitting of data with units with compound models
  without units when the expression involves operators other than addition
  and subtraction. [#10415]

- Fixed a problem with fitting ``Linear1D`` and ``Planar2D`` in model sets. [#10623]

- Fixed reported module name of ``math_functions`` model classes. [#10694]

- Fixed reported module name of ``tabular`` model classes. [#10709]

- Do not create new ``math_functions`` models for ufuncs that are
  only aliases (divide and mod). [#10697]

- Fix calculation of the ``Moffat2D`` derivative with respect to gamma. [#10784]

astropy.stats
^^^^^^^^^^^^^

- Fixed an API regression where ``SigmaClip.__call__`` would convert masked
  elements to ``nan`` and upcast the dtype to ``float64`` in its output
  ``MaskedArray`` when using the ``axis`` parameter along with the defaults
  ``masked=True`` and ``copy=True``. [#10610]

- Fixed an issue where fully masked ``MaskedArray`` input to
  ``sigma_clipped_stats`` gave incorrect results. [#10099]

- Fixed an issue where ``sigma_clip`` and ``SigmaClip.__call__``
  would return a masked array instead of a ``ndarray`` when
  ``masked=False`` and the input was a full-masked ``MaskedArray``.
  [#10099]

- Fixed bug with ``funcs.poisson_conf_interval`` where an integer for N
  with ``interval='kraft-burrows-nousek'`` would throw an error with
  mpmath backend. [#10427]

- Fixed bug in ``funcs.poisson_conf_interval`` with
  ``interval='kraft-burrows-nousek'`` where certain combinations of source
  and background count numbers led to ``ValueError`` due to the choice of
  starting value for numerical optimization. [#10618]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug when writing a table with mixin columns to FITS, ECSV or HDF5.
  If one of the data attributes of the mixin (e.g. ``skycoord.ra``) had the
  same name as one of the table column names (``ra``), the column (``ra``)
  would be dropped when reading the table back. [#10222]

- Fixed a bug when sorting an indexed table on the indexed column after first
  sorting on another column. [#10103]

- Fixed a bug in table argsort when called with ``reverse=True`` for an
  indexed table. [#10103]

- Fixed a performance regression introduced in #9048 when initializing a table
  from Python lists. Also fixed incorrect behavior (for data types other than
  float) when those lists contain ``np.ma.masked`` elements to indicate masked
  data. [#10636]

- Avoid modifying ``.meta`` when serializing columns to FITS. [#10485]

- Avoid crash when reading a FITS table that contains mixin info and PyYAML
  is missing. [#10485]

astropy.time
^^^^^^^^^^^^

- Ensure that for size-1 array ``Time``, the location also properly becomes
  a scalar when indexed with 0. [#10113]

astropy.units
^^^^^^^^^^^^^

- Refined test_parallax to resolve difference between 2012 and 2015 definitions. [#10569]

astropy.utils
^^^^^^^^^^^^^

- The default IERS server has been updated to use the FTPS server hosted by
  CDDIS. [#9964]

- Fixed memory allocation on 64-bit systems within ``xml.iterparse`` [#10076]

- Fix case where ``None`` could be used in a numerical computation. [#10126]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug where the ``ImageNormalize`` ``clip`` keyword was
  ignored when used with calling the object on data. [#10098]

- Fixed a bug where ``axes.xlabel``/``axes.ylabel`` where not correctly set
  nor returned on an ``EllipticalFrame`` class ``WCSAxes`` plot. [#10446]

astropy.wcs
^^^^^^^^^^^

- Handled WCS 360 -> 0 deg crossover in ``fit_wcs_from_points`` [#10155]

- Do not issue ``DATREF`` warning when ``MJDREF`` has default value. [#10440]

- Fixed a bug due to which ``naxis`` argument was ignored if ``header``
  was supplied during the initialization of a WCS object. [#10532]

Other Changes and Additions
---------------------------

- Improved the speed of sorting a large ``Table`` on a single column by a factor
  of around 5. [#10103]

- Ensure that astropy can be used inside Application bundles built with
  pyinstaller. [#8795]

- Updated the bundled CFITSIO library to 3.49. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information.
  [#10256, #10665]

- ``extract_array`` raises a ``ValueError`` if the data type of the
  input array is inconsistent with the ``fill_value``. [#10602]


Version 4.0.1 (2020-03-27)
==========================

Bug fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Fixed a bug where importing a development version of a package that uses
  ``astropy`` configuration system can result in a
  ``~/.astropy/config/package..cfg`` file. [#9975]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where a vestigal trace of a frame class could persist in the
  transformation graph even after the removal of all transformations involving
  that frame class. [#9815]

- Fixed a bug with ``TransformGraph.remove_transform()`` when the "from" and
  "to" frame classes are not explicitly specified. [#9815]

- Read-only longitudes can now be passed in to ``EarthLocation`` even if
  they include angles outside of the range of -180 to 180 degrees. [#9900]

- ```SkyCoord.radial_velocity_correction``` no longer raises an Exception
  when space motion information is present on the SkyCoord. [#9980]

astropy.io
^^^^^^^^^^

- Fixed a bug that prevented the unified I/O infrastructure from working with
  datasets that are represented by directories rather than files. [#9866]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a bug in the ``fast_reader`` C parsers incorrectly returning entries
  of isolated positive/negative signs as ``float`` instead of ``str``. [#9918]

- Fixed a segmentation fault in the ``fast_reader`` C parsers when parsing an
  invalid file with ``guess=True`` and the file contains inconsistent column
  numbers in combination with a quoted field; e.g., ``"1  2\n 3  4 '5'"``.
  [#9923]

- Magnitude, decibel, and dex can now be stored in ``ecsv`` files. [#9933]

astropy.io.misc
^^^^^^^^^^^^^^^

- Magnitude, decibel, and dex can now be stored in ``hdf5`` files. [#9933]

- Fixed serialization of polynomial models to include non default values of
  domain and window values. [#9956, #9961]

- Fixed a bug which affected overwriting tables within ``hdf5`` files.
  Overwriting an existing path with associated column meta data now also
  overwrites the meta data associated with the table. [#9950]

- Fixed serialization of Time objects with location under time-1.0.0
  ASDF schema. [#9983]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix regression with ``GroupsHDU`` which needs to modify the header to handle
  invalid headers, and fix accessing ``.data`` for empty HDU. [#9711, #9934]

- Fix ``fitsdiff`` when its arguments are directories that contain other
  directories. [#9711]

- Fix writing noncontiguous data to a compressed HDU. [#9958]

- Added verification of ``disp`` (``TDISP``) keyword to ``fits.Column`` and
  extended tests for ``TFORM`` and ``TDISP`` validation. [#9978]

- Fix checksum verification to process all HDUs instead of only the first one
  because of the lazy loading feature. [#10012]

- Allow passing ``output_verify`` to ``.close`` when using the context manager.
  [#10030]

- Prevent instantiation of ``PrimaryHDU`` and ``ImageHDU`` with a scalar.
  [#10041]

- Fix column access by attribute with FITS_rec: columns with scaling or columns
  from ASCII tables where not properly converted when accessed by attribute
  name. [#10069]

astropy.io.misc
^^^^^^^^^^^^^^^

- Magnitude, decibel, and dex can now be stored in ``hdf5`` files. [#9933]

- Fixed serialization of polynomial models to include non default values of
  domain and window values. [#9956, #9961]

- Fixed a bug which affected overwriting tables within ``hdf5`` files.
  Overwriting an existing path with associated column meta data now also
  overwrites the meta data associated with the table. [#9950]

- Fixed serialization of Time objects with location under time-1.0.0
  ASDF schema. [#9983]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a bug in setting default values of parameters of orthonormal
  polynomials when constructing a model set. [#9987]

astropy.table
^^^^^^^^^^^^^

- Fixed bug in ``Table.reverse`` for tables that contain non-mutable mixin columns
  (like ``SkyCoord``) for which in-place item update is not allowed. [#9839]

- Tables containing Magnitude, decibel, and dex columns can now be saved to
  ``ecsv`` files. [#9933]

- Fixed bug where adding or inserting a row fails on a table with an index
  defined on a column that is not the first one. [#10027]

- Ensured that ``table.show_in_browser`` also worked for mixin columns like
  ``Time`` and ``SkyCoord``. [#10068]

astropy.time
^^^^^^^^^^^^

- Fix inaccuracy when converting between TimeDelta and datetime.timedelta. [#9679]

- Fixed exception when changing ``format`` in the case when ``out_subfmt`` is
  defined and is incompatible with the new format. [#9812]

- Fixed exceptions in ``Time.to_value()``: when supplying any ``subfmt`` argument
  for string-based formats like 'iso', and for ``subfmt='long'`` for the formats
  'byear', 'jyear', and 'decimalyear'. [#9812]

- Fixed bug where the location attribute was lost when creating a new ``Time``
  object from an existing ``Time`` or list of ``Time`` objects. [#9969]

- Fixed a bug where an exception occurred when creating a ``Time`` object
  if the ``val1`` argument was a regular double and the ``val2`` argument
  was a ``longdouble``. [#10034]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Fixed issue with reference time for the ``transit_time`` parameter returned by
  the ``BoxLeastSquares`` periodogram. Now, the ``transit_time`` will be within
  the range of the input data and arbitrary time offsets/zero points no longer
  affect results. [#10013]

astropy.units
^^^^^^^^^^^^^

- Fix for ``quantity_input`` annotation raising an exception on iterable
  types that don't define a general ``__contains__`` for checking if ``None``
  is contained (e.g. Enum as of python3.8), by instead checking for instance of
  Sequence. [#9948]

- Fix for ``u.Quantity`` not taking into account ``ndmin`` if constructed from
  another ``u.Quantity`` instance with different but convertible unit [#10066]

astropy.utils
^^^^^^^^^^^^^

- Fixed ``deprecated_renamed_argument`` not passing in user value to
  deprecated keyword when the keyword has no new name. [#9981]

- Fixed ``deprecated_renamed_argument`` not issuing a deprecation warning when
  deprecated keyword without new name is passed in as positional argument.
  [#9985]

- Fixed detection of read-only filesystems in the caching code. [#10007]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed bug from matplotlib >=3.1 where an empty Quantity array is
  sent for unit conversion as an empty list. [#9848]

- Fix bug in ``ZScaleInterval`` to return the array minimum and
  maximum when there are less then ``min_npixels`` in the input array. [#9913]

- Fix a bug in simplifying axis labels that affected non-rectangular frames.
  [#8004, #9991]


Other Changes and Additions
---------------------------

- Increase minimum asdf version to 2.5.2. [#9996, #9819]

- Updated bundled version of ``WCSLIB`` to v7.2. [#10021]



Version 4.0 (2019-12-16)
========================

New Features
------------

astropy.config
^^^^^^^^^^^^^^

- The config and cache directories and the name of the config file are now
  customizable. This allows affiliated packages to put their configuration
  files in locations other than ``CONFIG_DIR/.astropy/``. [#8237]

astropy.constants
^^^^^^^^^^^^^^^^^

- The version of constants can be specified via ScienceState in a way
  that ``constants`` and ``units`` will be consistent. [#8517]

- Default constants now use CODATA 2018 and IAU 2015 definitions. [#8761]

- Constants can be pickled and unpickled. [#9377]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed a bug [#9168] where having a kernel defined using unitless astropy
  quantity objects would result in a crash [#9300]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Changed ``coordinates.solar_system_ephemeris`` to also accept local files
  as input. The ephemeris can now be selected by either keyword (e.g. 'jpl',
  'de430'), URL or file path. [#8767]

- Added a ``cylindrical`` property to ``SkyCoord`` for shorthand access to a
  ``CylindricalRepresentation`` of the coordinate, as is already available
  for other common representations. [#8857]

- The default parameters for the ``Galactocentric`` frame are now controlled by
  a ``ScienceState`` subclass, ``galactocentric_frame_defaults``. New
  parameter sets will be added to this object periodically to keep up with
  ever-improved measurements of the solar position and motion. [#9346]

- Coordinate frame classes can now have multiple aliases by assigning a list
  of aliases to the class variable ``name``.  Any of the aliases can be used
  for attribute-style access or as the target of ``tranform_to()`` calls.
  [#8834]

- Passing a NaN to ``Distance`` no longer raises a warning. [#9598]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The pre-publication Planck 2018 cosmological parameters are included as the
  ``Planck2018_arXiv_v2`` object.  Please note that the values are preliminary,
  and when the paper is accepted a final version will be included as
  ``Planck18``. [#8111]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Removed incorrect warnings on ``Overflow`` when reading in
  ``FloatType`` 0.0 with ``use_fast_converter``; synchronised
  ``IntType`` ``Overflow`` warning messages. [#9082]

astropy.io.misc
^^^^^^^^^^^^^^^

- Eliminate deprecated compatibility mode when writing ``Table`` metadata to
  HDF5 format. [#8899]

- Add support for orthogonal polynomial models to ASDF. [#9107]

astropy.io.fits
^^^^^^^^^^^^^^^

- Changed the ``fitscheck`` and ``fitsdiff`` script to use the ``argparse``
  module instead of ``optparse``. [#9148]

- Allow writing of ``Table`` objects with ``Time`` columns that are also table
  indices to FITS files. [#8077]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Support VOTable version 1.4.  The main addition is the new element, TIMESYS,
  which allows defining of metadata for temporal coordinates much like COOSYS
  defines metadata for celestial coordinates. [#9475]

astropy.logger
^^^^^^^^^^^^^^

- Added a configuration option to specify the text encoding of the log file,
  with the default behavior being the platform-preferred encoding. [#9203]

astropy.modeling
^^^^^^^^^^^^^^^^

- Major rework of modeling internals. `See modeling documentation for details.
  <https://docs.astropy.org/en/v4.0.x/modeling/changes_for_4.html>`_ . [#8769]

- Add ``Tabular1D.inverse``. [#9083]

- ``Model.rename`` was changed to add the ability to rename ``Model.inputs``
  and ``Model.outputs``. [#9220]

- New function ``fix_inputs`` to generate new models from others by fixing
  specific inputs variable values to constants. [#9135]

- ``inputs`` and ``outputs`` are now model instance attributes, and ``n_inputs``
  and ``n_outputs`` are class attributes. Backwards compatible default
  values of ``inputs`` and ``outputs`` are generated. ``Model.inputs`` and
  ``Model.outputs`` are now settable which allows renaming them on per user
  case. [#9298]

- Add a new model representing a sequence of rotations in 3D around an
  arbitrary number of axes. [#9369]

- Add many of the numpy ufunc functions as models. [#9401]

- Add ``BlackBody`` model. [#9282]

- Add ``Drude1D`` model. [#9452]

- Added analytical King model (KingProjectedAnalytic1D). [#9084]

- Added Exponential1D and Logarithmic1D models. [#9351]

astropy.nddata
^^^^^^^^^^^^^^

- Add a way for technically invalid but unambiguous units in a fits header
  to be parsed by ``CCDData``. [#9397]

- ``NDData`` now only accepts WCS objects which implement either the high, or
  low level APE 14 WCS API. All WCS objects are converted to a high level WCS
  object, so ``NDData.wcs`` now always returns a high level APE 14 object. Not
  all array slices are valid for wcs objects, so some slicing operations which
  used to work may now fail. [#9067]

astropy.stats
^^^^^^^^^^^^^

- The ``biweight_location``, ``biweight_scale``, and
  ``biweight_midvariance`` functions now allow for the ``axis``
  keyword to be a tuple of integers. [#9309]

- Added an ``ignore_nan`` option to the ``biweight_location``,
  ``biweight_scale``, and ``biweight_midvariance`` functions. [#9457]

- A numpy ``MaskedArray`` can now be input to the ``biweight_location``,
  ``biweight_scale``, and ``biweight_midvariance`` functions. [#9466]

- Removed the warning related to p0 in the Bayesian blocks algorithm. The
  caveat related to p0 is described in the docstring for ``Events``. [#9567]

astropy.table
^^^^^^^^^^^^^

- Improved the implementation of ``Table.replace_column()`` to provide
  a speed-up of 5 to 10 times for wide tables.  The method can now accept
  any input which convertible to a column of the correct length, not just
  ``Column`` subclasses. [#8902]

- Improved the implementation of ``Table.add_column()`` to provide a speed-up
  of 2 to 10 (or more) when adding a column to tables, with increasing benefit
  as the number of columns increases.  The method can now accept any input
  which is convertible to a column of the correct length, not just ``Column``
  subclasses. [#8933]

- Changed the implementation of ``Table.add_columns()`` to use the new
  ``Table.add_column()`` method.  In most cases the performance is similar
  or slightly faster to the previous implementation. [#8933]

- ``MaskedColumn.data`` will now return a plain ``MaskedArray`` rather than
  the previous (unintended) ``masked_BaseColumn``. [#8855]

- Added depth-wise stacking ``dstack()`` in higher level table operation.
  It help will in stacking table column depth-wise. [#8939]

- Added a new table equality method ``values_equal()`` which allows comparison
  table values to another table, list, or value, and returns an
  element-by-element equality table. [#9068]

- Added new ``join_type='cartesian'`` option to the ``join`` operation. [#9288]

- Allow adding a table column as a list of mixin-type objects, for instance
  ``t['q'] = [1 * u.m, 2 * u.m]``. [#9165]

- Allow table ``join()`` using any sortable key column (e.g. Time), not
  just ndarray subclasses. A column is considered sortable if there is a
  ``<column>.info.get_sortable_arrays()`` method that is implemented. [#9340]

- Added ``Table.iterrows()`` for making row-wise iteration faster. [#8969]

- Allow table to be initialized with a list of dict where the dict keys
  are not the same in every row. The table column names are the set of all keys
  found in the input data, and any missing key/value pairs are turned into
  missing data in the table. [#9425]

- Prevent unnecessary ERFA warnings when indexing by ``Time`` columns. [#9545]

- Added support for sorting tables which contain non-mutable mixin columns
  (like ``SkyCoord``) for which in-place item update is not allowed. [#9549]

- Ensured that inserting ``np.ma.masked`` (or any other value with a mask) into
  a ``MaskedColumn`` causes a masked entry to be inserted. [#9623]

- Fixed a bug that caused an exception when initializing a ``MaskedColumn`` from
  another ``MaskedColumn`` that has a structured dtype. [#9651]

astropy.tests
^^^^^^^^^^^^^

- The plugin that handles the custom header in the test output has been
  moved to the ``pytest-astropy-header plugin`` package. `See the README at
  <https://github.com/astropy/pytest-astropy-header>`__ for information about
  using this new plugin. [#9214]

astropy.time
^^^^^^^^^^^^

- Added a new time format ``ymdhms`` for representing times via year, month,
  day, hour, minute, and second attributes. [#7644]

- ``TimeDelta`` gained a ``to_value`` method, so that it becomes easier to
  use it wherever a ``Quantity`` with units of time could be used. [#8762]

- Made scalar ``Time`` and ``TimeDelta`` objects hashable based on JD, time
  scale, and location attributes. [#8912]

- Improved error message when bad input is used to initialize a ``Time`` or
  ``TimeDelta`` object and the format is specified. [#9296]

- Allow numeric time formats to be initialized with numpy ``longdouble``,
  ``Decimal`` instances, and strings.  One can select just one of these
  using ``in_subfmt``.  The output can be similarly set using ``out_subfmt``.
  [#9361]

- Introduce a new ``.to_value()`` method for ``Time`` (and adjusted the
  existing method for ``TimeDelta``) so that one can get values in a given
  ``format`` and possible ``subfmt`` (e.g., ``to_value('mjd', 'str')``. [#9361]

- Prevent unnecessary ERFA warnings when sorting ``Time`` objects. [#9545]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Adding ``epoch_phase``, ``wrap_phase`` and ``normalize_phase`` keywords to
  ``TimeSeries.fold()`` to control the phase of the epoch and to return
  normalized phase rather than time for the folded TimeSeries. [#9455]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

- ``Distribution`` was rewritten such that it deals better with subclasses.
  As a result, Quantity distributions now behave correctly with ``to`` methods
  yielding new distributions of the kind expected for the starting
  distribution, and ``to_value`` yielding ``NdarrayDistribution`` instances.
  [#9429, #9442]

- The ``pdf_*`` properties that were used to calculate statistical properties
  of ``Distrubution`` instances were changed into methods. This allows one
  to pass parameters such as ``ddof`` to ``pdf_std`` and ``pdf_var`` (which
  generally should equal 1 instead of the default 0), and reflects that these
  are fairly involved calculations, not just "properties". [#9613]

astropy.units
^^^^^^^^^^^^^

- Support for unicode parsing. Currently supported are superscripts, Ohm,
  Ångström, and the micro-sign. [#9348]

- Accept non-unit type annotations in @quantity_input. [#8984]

- For numpy 1.17 and later, the new ``__array_function__`` protocol is used to
  ensure that all top-level numpy functions interact properly with
  ``Quantity``, preserving units also in operations like ``np.concatenate``.
  [#8808]

- Add equivalencies for surface brightness units to spectral_density. [#9282]

astropy.utils
^^^^^^^^^^^^^

- ``astropy.utils.data.download_file`` and
  ``astropy.utils.data.get_readable_fileobj`` now provides an ``http_headers``
  keyword to pass in specific request headers for the download. It also now
  defaults to providing ``User-Agent: Astropy`` and ``Accept: */*``
  headers. The default ``User-Agent`` value can be set with a new
  ``astropy.data.conf.default_http_user_agent`` configuration item.
  [#9508, #9564]

- Added a new ``astropy.utils.misc.unbroadcast`` function which can be used
  to return the smallest array that can be broadcasted back to the initial
  array. [#9209]

- The specific IERS Earth rotation parameter table used for time and
  coordinate transformations can now be set, either in a context or per
  session, using ``astropy.utils.iers.earth_rotation_table``. [#9244]

- Added ``export_cache`` and ``import_cache`` to permit transporting
  downloaded data to machines with no Internet connection. Several new
  functions are available to investigate the cache contents; e.g.,
  ``check_download_cache`` can be used to confirm that the persistent
  cache has not become damaged. [#9182]

- A new ``astropy.utils.iers.LeapSeconds`` class has been added to track
  leap seconds. [#9365]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added a new ``time_support`` context manager/function for making it easy to
  plot and format ``Time`` objects in Matplotlib. [#8782]

- Added support for plotting any WCS compliant with the generalized (APE 14)
  WCS API with WCSAxes. [#8885, #9098]

- Improved display of information when inspecting ``WCSAxes.coords``. [#9098]

- Improved error checking for the ``slices=`` argument to ``WCSAxes``. [#9098]

- Added support for more solar frames in WCSAxes. [#9275]

- Add support for one dimensional plots to ``WCSAxes``. [#9266]

- Add a ``get_format_unit`` to ``wcsaxes.CoordinateHelper``. [#9392]

- ``WCSAxes`` now, by default, sets a default label for plot axes which is the
  WCS physical type (and unit) for that axis. This can be disabled using the
  ``coords[i].set_auto_axislabel(False)`` or by explicitly setting an axis
  label. [#9392]

- Fixed the display of tick labels when plotting all sky images that have a
  coord_wrap less than 360. [#9542]

astropy.wcs
^^^^^^^^^^^

- Added a ``astropy.wcs.wcsapi.pixel_to_pixel`` function that can be used to
  transform pixel coordinates in one dataset with a WCS to pixel coordinates
  in another dataset with a different WCS. This function is designed to be
  efficient when the input arrays are broadcasted views of smaller
  arrays. [#9209]

- Added a ``local_partial_pixel_derivatives`` function that can be used to
  determine a matrix of partial derivatives of each world coordinate with
  respect to each pixel coordinate. [#9392]

- Updated wcslib to v6.4. [#9125]

- Improved the  ``SlicedLowLevelWCS`` class in ``astropy.wcs.wcsapi`` to avoid
  storing chains of nested ``SlicedLowLevelWCS`` objects when applying multiple
  slicing operations in turn. [#9210]

- Added a ``wcs_info_str`` function to ``astropy.wcs.wcsapi`` to show a summary
  of an APE-14-compliant WCS as a string. [#8546, #9207]

- Added two new optional attributes to the APE 14 low-level WCS:
  ``pixel_axis_names`` and ``world_axis_names``. [#9156]

- Updated the WCS class to now correctly take and return ``Time`` objects in
  the high-level APE 14 API (e.g. ``pixel_to_world``. [#9376]

- ``SlicedLowLevelWCS`` now raises ``IndexError`` rather than ``ValueError`` on
  an invalid slice. [#9067]

- Added ``fit_wcs_from_points`` function to ``astropy.wcs.utils``. Fits a WCS
  object to set of matched detector/sky coordinates. [#9469]

- Fix various bugs in ``SlicedLowLevelWCS`` when the WCS being sliced was one
  dimensional. [#9693]


API Changes
-----------

astropy.constants
^^^^^^^^^^^^^^^^^

- Deprecated ``set_enabled_constants`` context manager. Use
  ``astropy.physical_constants`` and ``astropy.astronomical_constants``.
  [#9025]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Removed the deprecated keyword argument ``interpolate_nan`` from
  ``convolve_fft``. [#9356]

- Removed the deprecated keyword argument ``stddev`` from
  ``Gaussian2DKernel``. [#9356]

- Deprecated and renamed ``MexicanHat1DKernel`` and ``MexicanHat2DKernel``
  to ``RickerWavelet1DKernel`` and ``RickerWavelet2DKernel``. [#9445]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Removed the ``recommended_units`` attribute from Representations; it was
  deprecated since 3.0. [#8892]

- Removed the deprecated frame attribute classes, ``FrameAttribute``,
  ``TimeFrameAttribute``, ``QuantityFrameAttribute``,
  ``CartesianRepresentationFrameAttribute``; deprecated since 3.0. [#9326]

- Removed ``longitude`` and ``latitude`` attributes from ``EarthLocation``;
  deprecated since 2.0. [#9326]

- The ``DifferentialAttribute`` for frame classes now passes through any input
  to the ``allowed_classes`` if only one allowed class is specified, i.e. this
  now allows passing a quantity in for frame attributes that use
  ``DifferentialAttribute``. [#9325]

- Removed the deprecated ``galcen_ra`` and ``galcen_dec`` attributes from the
  ``Galactocentric`` frame. [#9346]

astropy.extern
^^^^^^^^^^^^^^

- Remove the bundled ``six`` module. [#8315]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Masked column handling has changed, see ``astropy.table`` entry below.
  [#8789]

astropy.io.misc
^^^^^^^^^^^^^^^

- Masked column handling has changed, see ``astropy.table`` entry below.
  [#8789]

- Removed deprecated ``usecPickle`` kwarg from ``fnunpickle`` and
  ``fnpickle``. [#8890]

astropy.io.fits
^^^^^^^^^^^^^^^

- Masked column handling has changed, see ``astropy.table`` entry below.
  [#8789]

- ``io.fits.Header`` has been made safe for subclasses for copying and slicing.
  As a result of this change, the private subclass ``CompImageHeader``
  now always should be passed an explicit ``image_header``. [#9229]

- Removed the deprecated ``tolerance`` option in ``fitsdiff`` and
  ``io.fits.diff`` classes. [#9520]

- Removed deprecated keyword arguments for ``CompImageHDU``:
  ``compressionType``, ``tileSize``, ``hcompScale``, ``hcompSmooth``,
  ``quantizeLevel``. [#9520]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Changed ``pedantic`` argument to ``verify`` and change it to have three
  string-based options (``ignore``, ``warn``, and ``exception``) instead of
  just being a boolean. In addition, changed default to ``ignore``, which means
  that warnings will not be shown by default when loading VO tables. [#8715]

astropy.modeling
^^^^^^^^^^^^^^^^

- Eliminates support for compound classes (but not compound instances!) [#8769]

- Slicing compound models more restrictive. [#8769]

- Shape of parameters now includes n_models as dimension. [#8769]

- Parameter instances now hold values instead of models. [#8769]

- Compound model parameters now share instance and value with
  constituent models. [#8769]

- No longer possible to assign slices of parameter values to model parameters
  attribute (it is possible to replace it with a complete array). [#8769]

- Many private attributes and methods have changed (see documentation). [#8769]

- Deprecated ``BlackBody1D`` model and ``blackbody_nu`` and
  ``blackbody_lambda`` functions. [#9282]

- The deprecated ``rotations.rotation_matrix_from_angle`` was removed. [#9363]

- Deprecated and renamed ``MexicanHat1D`` and ``MexicanHat2D``
  to ``RickerWavelet1D`` and ``RickerWavelet2D``. [#9445]

- Deprecated ``modeling.utils.ExpressionTree``. [#9576]

astropy.stats
^^^^^^^^^^^^^

- Removed the ``iters`` keyword from sigma clipping stats functions. [#8948]

- Renamed the ``a`` parameter to ``data`` in biweight stat functions. [#8948]

- Renamed the ``a`` parameter to ``data`` in ``median_absolute_deviation``.
  [#9011]

- Renamed the ``conflevel`` keyword to ``confidence_level`` in
  ``poisson_conf_interval``. Usage of ``conflevel`` now issues
  ``AstropyDeprecationWarning``. [#9408]

- Renamed the ``conf`` keyword to ``confidence_level`` in
  ``binom_conf_interval`` and ``binned_binom_proportion``. Usage of ``conf``
  now issues ``AstropyDeprecationWarning``. [#9408]

- Renamed the ``conf_lvl`` keyword to ``confidence_level`` in
  ``jackknife_stats``. Usage of ``conf_lvl`` now issues
  ``AstropyDeprecationWarning``. [#9408]

astropy.table
^^^^^^^^^^^^^

- The handling of masked columns in the ``Table`` class has changed in a way
  that may impact program behavior. Now a ``Table`` with ``masked=False``
  may contain both ``Column`` and ``MaskedColumn`` objects, and adding a
  masked column or row to a table no longer "upgrades" the table and columns
  to masked.  This means that tables with masked data which are read via
  ``Table.read()`` will now always have ``masked=False``, though specific
  columns will be masked as needed. Two new table properties
  ``has_masked_columns`` and ``has_masked_values`` were added. See the
  `Masking change in astropy 4.0 section within
  <https://docs.astropy.org/en/v4.0.x/table/masking.html>`_ for
  details. [#8789]

- Table operation functions such as ``join``, ``vstack``, ``hstack``, etc now
  always return a table with ``masked=False``, though the individual columns
  may be masked as necessary. [#8957]

- Changed implementation of ``Table.add_column()`` and ``Table.add_columns()``
  methods.  Now it is possible add any object(s) which can be converted or
  broadcasted to a valid column for the table.  ``Table.__setitem__`` now
  just calls ``add_column``. [#8933]

- Changed default table configuration setting ``replace_warnings`` from
  ``['slice']`` to ``[]``.  This removes the default warning when replacing
  a table column that is a slice of another column. [#9144]

- Removed the non-public method
  ``astropy.table.np_utils.recarray_fromrecords``. [#9165]

astropy.tests
^^^^^^^^^^^^^

- In addition to ``DeprecationWarning``, now ``FutureWarning`` and
  ``ImportWarning`` would also be turned into exceptions. [#8506]

- ``warnings_to_ignore_by_pyver`` option in
  ``enable_deprecations_as_exceptions()`` has changed. Please refer to API
  documentation. [#8506]

- Default settings for ``warnings_to_ignore_by_pyver`` are updated to remove
  very old warnings that are no longer relevant and to add a new warning
  caused by ``pytest-doctestplus``. [#8506]

astropy.time
^^^^^^^^^^^^

- ``Time.get_ut1_utc`` now uses the auto-updated ``IERS_Auto`` by default,
  instead of the bundled ``IERS_B`` file. [#9226]

- Time formats that do not use ``val2`` now raise ValueError instead of
  silently ignoring a provided value. [#9373]

- Custom time formats can now accept floating-point types with extended
  precision. Existing time formats raise exceptions rather than discarding
  extended precision through conversion to ordinary floating-point. [#9368]

- Time formats (implemented in subclasses of ``TimeFormat``) now have
  their input and output routines more thoroughly validated, making it more
  difficult to create damaged ``Time`` objects. [#9375]

- The ``TimeDelta.to_value()`` method now can also take the ``format`` name
  as its argument, in which case the value will be calculated using the
  ``TimeFormat`` machinery. For this case, one can also pass a ``subfmt``
  argument to retrieve the value in another form than ``float``. [#9361]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Keyword ``midpoint_epoch`` is renamed to ``epoch_time``. [#9455]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

- ``Distribution`` was rewritten such that it deals better with subclasses.
  As a result, Quantity distributions now behave correctly with ``to`` methods
  yielding new distributions of the kind expected for the starting distribution,
  and ``to_value`` yielding ``NdarrayDistribution`` instances. [#9442]

astropy.units
^^^^^^^^^^^^^

- For consistency with ``ndarray``, scalar ``Quantity.value`` will now return
  a numpy scalar rather than a python one.  This should help keep track of
  precision better, but may lead to unexpected results for the rare cases
  where numpy scalars behave differently than python ones (e.g., taking the
  square root of a negative number). [#8876]

- Removed the ``magnitude_zero_points`` module, which was deprecated in
  favour of ``astropy.units.photometric`` since 3.1. [#9353]

- ``EquivalentUnitsList`` now has a ``_repr_html_`` method to output a HTML
  table on a call to ``find_equivalent_units`` in Jupyter notebooks. [#9495]

astropy.utils
^^^^^^^^^^^^^

- ``download_file`` and related functions now accept a list of fallback
  sources, and they are able to update the cache at the user's request. [#9182]

- Allow ``astropy.utils.console.ProgressBarOrSpinner.map`` and
  ``.map_unordered`` to take an argument ``multiprocessing_start_method`` to
  control how subprocesses are started; the different methods (``fork``,
  ``spawn``, and ``forkserver``) have different implications in terms of
  security, efficiency, and behavioural anomalies. The option is useful in
  particular for cross-platform testing because Windows supports only ``spawn``
  while Linux defaults to ``fork``. [#9182]

- All operations that act on the astropy download cache now take an argument
  ``pkgname`` that allows one to specify which package's cache to use.
  [#8237, #9182]

- Removed deprecated ``funcsigs`` and ``futures`` from
  ``astropy.utils.compat``. [#8909]

- Removed the deprecated ``astropy.utils.compat.numpy`` module. [#8910]

- Deprecated ``InheritDocstrings`` as it is natively supported by
  Sphinx 1.7 or higher. [#8881]

- Deprecated ``astropy.utils.timer`` module, which has been moved to
  ``astroquery.utils.timer`` and will be part of ``astroquery`` 0.4.0. [#9038]

- Deprecated ``astropy.utils.misc.set_locale`` function, as it is meant for
  internal use only. [#9471]

- The implementation of ``data_info.DataInfo`` has changed (for a considerable
  performance boost). Generally, this should not affect simple subclasses, but
  because the class now uses ``__slots__`` any attributes on the class have to
  be explicitly given a slot. [#8998]

- ``IERS`` tables now use ``nan`` to mark missing values
  (rather than ``1e20``). [#9226]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- The default ``clip`` value is now ``False`` in ``ImageNormalize``. [#9478]

- The default ``clip`` value is now ``False`` in ``simple_norm``.
  [#9698]

- Infinite values are now excluded when calculating limits in
  ``ManualInterval`` and ``MinMaxInterval``.  They were already excluded in
  all other interval classes. [#9480]


Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed ``nan_treatment='interpolate'`` option to ``convolve_fft`` to properly
  take into account ``fill_value``. [#8122]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``QuantityAttribute`` class now supports a None default value if a unit
  is specified. [#9345]

- When ``Representation`` classes with the same name are defined, this no
  longer leads to a ``ValueError``, but instead to a warning and the removal
  of both from the name registry (i.e., one either has to use the class itself
  to set, e.g., ``representation_type``, or refer to the class by its fully
  qualified name). [#8561]

astropy.io.fits
^^^^^^^^^^^^^^^

- Implemented skip (after warning) of header cards with reserved
  keywords in ``table_to_hdu``. [#9390]

- Add ``AstropyDeprecationWarning`` to ``read_table_fits`` when ``hdu=`` is
  selected, but does not match single present table HDU. [#9512]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Address issue #8995 by ignoring BINARY2 null mask bits for string values
  on parsing a VOTable.  In this way, the reader should never create masked
  values for string types. [#9057]

- Corrected a spurious warning issued for the ``value`` attribute of the
  ``<OPTION>`` element in VOTable, as well as a test that erroneously
  treated the warning as acceptable.  [#9470]

astropy.nddata
^^^^^^^^^^^^^^

- ``Cutout2D`` will now get the WCS from its first argument if that argument
  has with WCS property. [#9492]

- ``overlap_slices`` will now raise a ``ValueError`` if the input
  position contains any non-finite values (e.g. NaN or inf). [#9648]

astropy.stats
^^^^^^^^^^^^^

- Fixed a bug where ``bayesian_blocks`` returned a single edge. [#8560]

- Fixed input data type validation for ``bayesian_blocks`` to work int
  arrays. [#9513]

astropy.table
^^^^^^^^^^^^^

- Fix bug where adding a column consisting of a list of masked arrays was
  dropping the masks. [#9048]

- ``Quantity`` columns with custom units can now round-trip via FITS tables,
  as long as the custom unit is enabled during reading (otherwise, the unit
  will become an ``UnrecognizedUnit``). [#9015]

- Fix bug where string values could be truncated when inserting into a
  ``Column`` or ``MaskedColumn``, or when adding or inserting a row containing
  string values. [#9559]

astropy.time
^^^^^^^^^^^^

- Fix bug when ``Time`` object is created with only masked elements. [#9624]

- Fix inaccuracy when converting between TimeDelta and datetime.timedelta.
  [#9679]

astropy.units
^^^^^^^^^^^^^

- Ensure that output from test functions of and comparisons between quantities
  can be stored into pre-allocated output arrays (using ``out=array``) [#9273]

astropy.utils
^^^^^^^^^^^^^

- For the default ``IERS_Auto`` table, which combines IERS A and B values, the
  IERS nutation parameters "dX_2000A" and "dY_2000A" are now also taken from
  the actual IERS B file rather than from the B values stored in the IERS A
  file.  Any differences should be negligible for any practical application,
  but this may help exactly reproducing results. [#9237]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Calling ``WCSAxes.set_axis_off()`` now correctly turns off drawing the Axes.
  [#9411]

- Fix incorrect transformation behavior in ``WCSAxes.plot_coord`` and correctly
  handle when input coordinates are not already in spherical representations.
  [#8927]

- Fixed ``ImageNormalize`` so that when it is initialized without
  ``data`` it will still use the input ``interval`` class. [#9698]

- Fixed ``ImageNormalize`` to handle input data with non-finite
  values. [#9698]

astropy.wcs
^^^^^^^^^^^

- Fix incorrect value returned by
  ``wcsapi.HighLevelWCSWrapper.axis_correlation_matrix``. [#9554]

- Fix NaN-masking of world coordinates when some but not all of the coordinates
  were flagged as invalid by WCSLIB. This occurred for example with WCS with >2
  dimensions where two of the dimensions were celestial coordinates and pixel
  coordinates outside of the 'sky' were converted to world coordinates -
  previously all world coordinates were masked even if uncorrelated with the
  celestial axes, but this is no longer the case. [#9688]

- The default WCS to celestial frame mapping for world coordinate systems that
  specify ``TLON`` and ``TLAT`` coordinates will now return an ITRS frame with
  the representation class set to ``SphericalRepresentation``. This fixes a bug
  that caused ``WCS.pixel_to_world`` to raise an error for such world
  coordinate systems. [#9609]

- ``FITSWCSAPIMixin`` now returns tuples not lists from ``pixel_to_world`` and
  ``world_to_pixel``. [#9678]


Other Changes and Additions
---------------------------

- Versions of Python <3.6 are no longer supported. [#8955]

- Matplotlib 2.1 and later is now required. [#8787]

- Versions of Numpy <1.16 are no longer supported. [#9292]

- Updated the bundled CFITSIO library to 3.470. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information. [#9233]

- The bundled ERFA was updated to version 1.7.0. This is based on
  SOFA 20190722. This includes a fix to avoid precision loss for negative
  JDs, and also includes additional routines to allow updates to the
  leap-second table. [#9323, #9734]

- The default server for the IERS data files has been updated to reflect
  long-term downtime of the canonical USNO server. [#9487, #9508]



Version 3.2.3 (2019-10-27)
==========================

Other Changes and Additions
---------------------------

- Updated IERS A URLs due to USNO prolonged maintenance. [#9443]



Version 3.2.2 (2019-10-07)
==========================

Bug fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed a bug in ``discretize_oversample_1D/2D()`` from
  ``astropy.convolution.utils``, which might occasionally introduce unexpected
  oversampling grid dimensions due to a numerical precision issue. [#9293]

- Fixed a bug [#9168] where having a kernel defined using unitless astropy
  quantity objects would result in a crash [#9300]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix concatenation of representations for cases where the units were different.
  [#8877]

- Check for NaN values in catalog and match coordinates before building and
  querying the ``KDTree`` for coordinate matching. [#9007]

- Fix sky coordinate matching when a dimensionless distance is provided. [#9008]

- Raise a faster and more meaningful error message when differential data units
  are not compatible with a containing representation's units. [#9064]

- Changed the timescale in ICRS to CIRS from 'tdb' to 'tt' conversion and
  vice-versa, as the erfa function that gets called in the process, pnm06a
  accepts time in TT. [#9079]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed the fast reader when used in parallel and with the multiprocessing
  'spawn' method (which is the default on MacOS X with Python 3.8 and later),
  and enable parallel fast reader on Windows. [#8853]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixes bug where an invalid TRPOS<n> keyword was being generated for FITS
  time column when no location was available. [#8784]

- Fixed a wrong exception when converting a Table with a unit that is not FITS
  compliant and not convertible to a string using ``format='fits'``. [#8906]

- Fixed an issue with A3DTABLE extension that could not be read. [#9012]

- Fixed the update of the header when creating GroupsHDU from data. [#9216]

astropy.nddata
^^^^^^^^^^^^^^

- Fix to ``add_array``, which now accepts ``array_small`` having dimensions
  equal to ``array_large``, instead of only allowing smaller sizes of
  arrays. [#9118]

astropy.stats
^^^^^^^^^^^^^

- Fixed ``median_absolute_deviation`` for the case where ``ignore_nan=True``
  and an input masked array contained both NaNs and infs. [#9307]

astropy.table
^^^^^^^^^^^^^

- Comparisons between ``Column`` instances and ``Quantity`` will now
  correctly take into account the unit (as was already the case for
  regular operations such as addition). [#8904]

astropy.time
^^^^^^^^^^^^

- Allow ``Time`` to be initialized with an empty value for all formats. [#8854]

- Fixed a troubling bug in which ``Time`` could loose precision, with deviations
  of 300 ns. [#9328]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Fixed handling of ``Quantity`` input data for all methods of
  ``LombScarge.false_alarm_probabilty``. [#9246]

astropy.units
^^^^^^^^^^^^^

- Allow conversion of ``Column`` with logarithmic units to a suitable
  ``Quantity`` subclass if ``subok=True``. [#9188]

- Ensured that we simplify powers to smaller denominators if that is
  consistent within rounding precision. [#9267]

- Ensured that the powers shown in a unit's repr are always correct,
  not oversimplified. [#9267]

astropy.utils
^^^^^^^^^^^^^

- Fixed ``find_api_page`` access by using custom request headers and HTTPS
  when version is specified. [#9032]

- Make ``download_file`` (and by extension ``get_readable_fileobj`` and others)
  check the size of downloaded files against the size claimed by the server.
  [#9302]

- Fix ``find_current_module`` so that it works properly if astropy is being used
  inside a bundle such as that produced by PyInstaller. [#8845]

- Fix path to renamed classes, which previously included duplicate path/module
  information under certain circumstances. [#8845]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Silence numpy runtime warnings in ``WCSAxes`` when drawing grids. [#8882]

astropy.wcs
^^^^^^^^^^^

- Fixed equality test between ``cunit`` where the first element was equal but
  the following elements differed. [#9154]

- Fixed a crash while loading a WCS from headers containing duplicate SIP
  keywords. [#8893]

- Fixed a possible buffer overflow when using too large negative indices for
  ``cunit`` or ``ctype`` [#9151]

- Fixed reference counting in ``WCSBase.__init__`` [#9166]

- Fix ``SlicedLowLevelWCS`` ``world_to_pixel_values`` and
  ``pixel_to_world_values`` when inputs need broadcasting to the same shape.
  (i.e. when one input is sliced out) [#9250]

- Fixed a bug that caused ``WCS.array_shape``, ``WCS.pixel_shape`` and
  ``WCS.pixel_bounds`` to be incorrect after using ``WCS.sub``. [#9095]


Other Changes and Additions
---------------------------

- Fixed a bug that caused files outside of the astropy module directory to be
  included as package data, resulting in some cases in errors when doing
  repeated builds. [#9039]



Version 3.2.1 (2019-06-14)
==========================

Bug fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Avoid reporting a warning with ``BinTableHDU.from_columns`` with keywords that
  are not provided by the user.  [#8838]

- Fix ``Header.fromfile`` to work on FITS files. [#8713]

- Fix reading of empty ``BinTableHDU`` when stored in a gzip-compressed file.
  [#8848]

astropy.table
^^^^^^^^^^^^^

- Fix a problem where mask was dropped when creating a ``MaskedColumn``
  from a list of ``MaskedArray`` objects. [#8826]

astropy.wcs
^^^^^^^^^^^

- Added ``None`` to be displayed as a ``world_axis_physical_types`` in
  the ``WCS`` repr, as ``None`` values are now supported in ``APE14``. [#8811]



Version 3.2 (2019-06-10)
========================

New Features
------------

astropy.constants
^^^^^^^^^^^^^^^^^

- Add CODATA 2018 constants but not make them default because the
  redefinition of SI units that will follow has not been implemented
  yet. [#8595]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- New ``BarycentricMeanEcliptic``, ``HeliocentricTrueEcliptic`` and
  ``GeocentricTrueEcliptic`` frames.
  The ecliptic frames are no longer considered experimental. [#8394]

- The default time scale for epochs like 'J2000' or 'B1975' is now "tt",
  which is the correct one for 'J2000' and avoids leap-second warnings
  for epochs in the far future or past. [#8600]

astropy.extern
^^^^^^^^^^^^^^

- Bundled ``six`` now emits ``AstropyDeprecationWarning``. It will be removed
  in 4.0. [#8323]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- IPAC tables now output data types of ``float`` instead of ``double``, or
  ``int`` instead of ``long``, based on the column ``dtype.itemsize``. [#8216]

- Update handling of MaskedColumn columns when using the 'data_mask' serialization
  method.  This can make writing ECSV significantly faster if the data do not
  actually have any masked values. [#8447]

- Fixed a bug that caused newlines to be incorrect when writing out ASCII tables
  on Windows (they were ``\r\r\n`` instead of ``\r\n``). [#8659]

astropy.io.misc
^^^^^^^^^^^^^^^

- Implement serialization of ``TimeDelta`` in ASDF. [#8285]

- Implement serialization of ``EarthLocation`` in ASDF. [#8286]

- Implement serialization of ``SkyCoord`` in ASDF. [#8284]

- Support serialization of Astropy tables with mixin columns in ASDF. [#8337]

- No warnings when reading HDF5 files with only one table and no ``path=``
  argument [#8483]

- The HDF5 writer will now create a default table instead of raising an
  exception when ``path=`` is not specified and when writing to empty/new HDF5
  files. [#8553]

astropy.io.fits
^^^^^^^^^^^^^^^

- Optimize parsing of cards within the ``Header`` class. [#8428]

- Optimize the parsing of headers to get the structural keywords that are
  needed to find extensions. Thanks to this, getting a random HDU from a file
  with many extensions is much faster than before, in particular when the
  extension headers contain many keywords. [#8502]

-  Change behavior of FITS undefined value in ``Header`` such that ``None``
   is used in Python to represent FITS undefined when using dict interface.
   ``Undefined`` can also be assigned and is translated to ``None``.
   Previously setting a header card value to ``None`` resulted in an
   empty string field rather than a FITS undefined value. [#8572]

- Allow ``Header.fromstring`` and ``Card.fromstring`` to accept ``bytes``.
  [#8707]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Implement ``Table`` reader and writer for ``ASDF``. [#8261]

- Implement ``Table`` reader and writer methods to wrap ``pandas`` I/O methods
  for CSV, Fixed width format, HTML, and JSON. [#8381]

- Add ``help()`` and ``list_formats()`` methods to unified I/O ``read`` and
  ``write`` methods. For example ``Table.read.help()`` gives help on available
  ``Table`` read formats and ``Table.read.help('fits')`` gives detailed
  help on the arguments for reading FITS table file. [#8255]

astropy.table
^^^^^^^^^^^^^

- Initializing a table with ``Table(rows=...)``, if the first item is an ``OrderedDict``,
  now uses the column order of the first row. [#8587]

- Added new pprint_all() and pformat_all() methods to Table. These two new
  methods print the entire table by default. [#8577]

- Removed restriction of initializing a Table from a dict with copy=False. [#8541]

- Improved speed of table row access by a factor of about 2-3.  Improved speed
  of Table len() by a factor of around 3-10 (depending on the number of columns).
  [#8494]

- Improved the Table - pandas ``DataFrame`` interface (``to_pandas()`` and
  ``from_pandas()``).  Mixin columns like ``Time`` and ``Quantity`` can now be
  converted to pandas by flattening the columns as necessary to plain
  columns.  ``Time`` and ``TimeDelta`` columns get converted to
  corresponding pandas date or time delta types.  The ``DataFrame``
  index is now handled in the conversion methods. [#8247]

- Added ``rename_columns`` method to rename multiple columns in one call.
  [#5159, #8070]

- Improved Table performance by reducing unnecessary calls to copy and deepcopy,
  especially as related to the table and column ``meta`` attributes.  Changed the
  behavior when slicing a table (either in rows or with a list of column names)
  so now the sliced output gets a light (key-only) copy of ``meta`` instead of a
  deepcopy.  Changed the ``Table.meta`` class-level descriptor so that assigning
  directly to ``meta``, e.g. ``tbl.meta = new_meta`` no longer does a deepcopy
  and instead just directly assigns the ``new_meta`` object reference.  Changed
  Table initialization so that input ``meta`` is copied only if ``copy=True``.
  [#8404]

- Improved Table slicing performance with internal implementation changes
  related to column attribute access and certain input validation. [#8493]

- Added ``reverse`` argument to the ``sort`` and ``argsort`` methods to allow
  sorting in reverse order. [#8528]

- Improved ``Table.sort()`` performance by removing ``self[keys]`` from code
  which is creating deep copies of ``meta`` attribute and adding a new keyword
  ``names`` in ``get_index()`` to get index by using a list or tuple containing
  names of columns. [#8570]

- Expose ``represent_mixins_as_columns`` as a public function in the
  ``astropy.table`` subpackage.  This previously-private function in the
  ``table.serialize`` module is used to represent mixin columns in a Table as
  one or more plain Column objects. [#7729]

astropy.timeseries
^^^^^^^^^^^^^^^^^^

- Added a new astropy.timeseries sub-package to represent and manipulate
  sampled and binned time series. [#8540]

- The ``BoxLeastSquares`` and ``LombScargle`` classes have been moved to
  ``astropy.timeseries.periodograms`` from ``astropy.stats``. [#8591]

- Added the ability to provide absolute ``Time`` objects to the
  ``BoxLeastSquares`` and ``LombScargle`` periodogram classes. [#8599]

- Added model inspection methods (``model_parameters()``, ``design_matrix()``,
  and ``offset()``) to ``astropy.timeseries.LombScargle`` class [#8397].

astropy.units
^^^^^^^^^^^^^

- ``Quantity`` overrides of ``ndarray`` methods such as ``sum``, ``min``,
  ``max``, which are implemented via reductions, have been removed since they
  are dealt with in ``Quantity.__array_ufunc__``. This should not affect
  subclasses, but they may consider doing similarly. [#8316]  Note that this
  does not include methods that use more complicated python code such as
  ``mean``, ``std`` and ``var``. [#8370]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^
- Added ``CompositeStretch``, which inherits from ``CompositeTransform`` and
  also ``BaseStretch`` so that it can be used with ``ImageNormalize``. [#8564]

- Added a ``log_a`` argument to the ``simple_norm`` method. Similar to the
  exposing of the ``asinh_a`` argument for ``AsinhStretch``, the new
  ``log_a`` argument is now exposed for ``LogStretch``. [#8436]

astropy.wcs
^^^^^^^^^^^

- WCSLIB was updated to v 6.2.
  This adds support for time-related WCS keywords (WCS Paper VII).
  FITS headers containing ``Time`` axis are parsed and the axis is included in
  the WCS object. [#8592]

- The ``OBSGEO`` attribute as expanded to 6 members - ``XYZLBH``. [#8592]

- Added a new class ``SlicedLowLevelWCS`` in ``astropy.wcs.wcsapi`` that can be
  used to slice any WCS that conforms to the ``BaseLowLevelWCS`` API. [#8546]

- Updated implementation of ``WCS.__getitem__`` and ``WCS.slice`` to now return
  a ``SlicedLowLevelWCS`` rather than raising an error when reducing the
  dimensionality of the WCS. [#8546]


API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``QuantityAttribute`` no longer has a default value for ``default``.  The
  previous value of None was misleading as it always was an error. [#8450]

- The default J2000 has been changed to use be January 1, 2000 12:00 TT instead
  of UTC.  This is more in line with convention. [#8594]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- IPAC tables now output data types of ``float`` instead of ``double``, or
  ``int`` instead of ``long``, based on the column ``dtype.itemsize``. [#8216]

astropy.io.misc
^^^^^^^^^^^^^^^

- Unit equivalencies can now be serialized to ASDF. [#8252]

astropy.modeling
^^^^^^^^^^^^^^^^

- Composition of model classes is deprecated and will be removed in 4.0.
  Composition of model instances remain unaffected. [#8234, #8408]

astropy.stats
^^^^^^^^^^^^^

- The ``BoxLeastSquares`` and ``LombScargle`` classes have been moved to the
  ``astropy.timeseries.periodograms`` module and will now emit a deprecation
  warning when imported from ``astropy.stats``. [#8591]

astropy.table
^^^^^^^^^^^^^

- Converting an empty table to an array using ``as_array`` method now returns
  an empty array instead of ``None``. [#8647]

- Changed the behavior when slicing a table (either in rows or with a list of column
  names) so now the sliced output gets a light (key-only) copy of ``meta`` instead of
  a deepcopy.  Changed the ``Table.meta`` class-level descriptor so that assigning
  directly to ``meta``, e.g. ``tbl.meta = new_meta`` no longer does a deepcopy
  and instead just directly assigns the ``new_meta`` object reference. Changed
  Table initialization so that input ``meta`` is copied only if ``copy=True``.
  [#8404]

- Added a keyword ``names`` in ``Table.as_array()``.  If provided this specifies
  a list of column names to include for the returned structured array. [#8532]

astropy.tests
^^^^^^^^^^^^^

- Removed ``pytest_plugins`` as they are completely broken for ``pytest>=4``.
  [#7786]

- Removed the ``astropy.tests.plugins.config`` plugin and removed the
  ``--astropy-config-dir`` and ``--astropy-cache-dir`` options from
  testing. Please use caching functionality that is natively in ``pytest``.
  [#7787, #8489]

astropy.time
^^^^^^^^^^^^

- The default time scale for epochs like 'J2000' or 'B1975' is now "tt",
  which is the correct one for 'J2000' and avoids leap-second warnings
  for epochs in the far future or past. [#8600]

astropy.units
^^^^^^^^^^^^^

- Unit equivalencies can now be introspected. [#8252]

astropy.wcs
^^^^^^^^^^^

- The ``world_to_pixel``, ``world_to_array_index*``, ``pixel_to_world*`` and
  ``array_index_to_world*`` methods now all consistently return scalars, arrays,
  or objects not wrapped in a one-element tuple/list when only one scalar,
  array, or object (as was previously already the case for ``WCS.pixel_to_world``
  and ``WCS.array_index_to_world``). [#8663]

astropy.utils
^^^^^^^^^^^^^

- It is now possible to control the number of cores used by ``ProgressBar.map``
  by passing a positive integer as the ``multiprocess`` keyword argument. Use
  ``True`` to use all cores. [#8083]


Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``BarycentricTrueEcliptic``, ``HeliocentricTrueEcliptic`` and
  ``GeocentricTrueEcliptic`` now use the correct transformation
  (including nutation), whereas the new ``*MeanEcliptic`` classes
  use the nutation-free transformation. [#8394]

- Representations with ``float32`` coordinates can now be transformed,
  although the output will always be ``float64``. [#8759]

- Fixed bug that prevented using differentials with HCRS<->ICRS
  transformations. [#8794]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a bug where an exception was raised when writing a table which includes
  mixin columns (e.g. a Quantity column) and the output format was specified
  using the ``formats`` keyword. [#8681]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fixed bug in ASDF tag that inadvertently introduced dependency on ``pytest``.
  [#8456]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed slowness for certain compound models consisting of large numbers
  of multi-input models [#8338, #8349]

- Fixed bugs in fitting of compound models with units. [#8369]

astropy.nddata
^^^^^^^^^^^^^^

- Fixed bug in reading multi-extension FITS files written by earlier versions
  of ``CCDData``. [#8534]

- Fixed two errors in the way ``CCDData`` handles FITS files with WCS in the
  header. Some of the WCS keywords that should have been removed from the
  header were not, potentially leading to FITS files with inconsistent
  WCS. [#8602]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug when initializing from an empty list: ``Table([])`` no longer
  results in a crash. [#8647]

- Fixed a bug when initializing from an existing ``Table``.  In this case the
  input ``meta`` argument was being ignored.  Now the input ``meta``, if
  supplied, will be used as the ``meta`` for the new ``Table``. [#8404]

- Fix the conversion of bytes values to Python ``str`` with ``Table.tolist``.
  [#8739]

astropy.time
^^^^^^^^^^^^

- Fixed a number of issues to ensure a consistent output type resulting from
  multiplication or division involving a ``TimeDelta`` instance. The output is
  now always a ``TimeDelta`` if the result is a time unit (like u.s or u.d),
  otherwise it will be a ``Quantity``. [#8356]

- Multiplication between two ``TimeDelta`` instances is now possible, resulting
  in a ``Quantity`` with units of time squared (division already correctly
  resulted in a dimensionless ``Quantity``). [#8356]

- Like for comparisons, addition, and subtraction of ``Time`` instances with
  with non-time instances, multiplication and division of ``TimeDelta``
  instances with incompatible other instances no longer immediately raise an
  ``UnitsError`` or ``TypeError`` (depending on the other instance), but
  rather go through the regular Python mechanism of ``TimeDelta`` returning
  ``NotImplemented`` (which will lead to a regular ``TypeError`` unless the
  other instance can handle ``TimeDelta``). [#8356]

- Corrected small rounding errors that could cause the ``jd2`` values in
  ``Time`` to fall outside the range of -0.5 to 0.5. [#8763]

astropy.units
^^^^^^^^^^^^^

- Added a ``Quantity.to_string`` method to add flexibility to the string formatting
  of quantities. It produces unadorned or LaTeX strings, and accepts two different
  sets of delimiters in the latter case: ``inline`` and ``display``. [#8313]

- Ensure classes that mimic quantities by having a ``unit`` attribute and/or
  ``to`` and ``to_value`` methods can be properly used to initialize ``Quantity``
  or set ``Quantity`` instance items. [#8535]

- Add support for ``<<`` to create logarithmic units. [#8290]

- Add support for the ``clip`` ufunc, which in numpy 1.17 is used to implement
  ``np.clip``.  As part of that, remove the ``Quantity.clip`` method under
  numpy 1.17. [#8747]

- Fix parsing of numerical powers in FITS-compatible units. [#8251]

astropy.wcs
^^^^^^^^^^^

- Added a ``PyUnitListProxy_richcmp`` method in ``UnitListProxy`` class to enable
  ``WCS.wcs.cunit`` equality testing. It helps to check whether the two instances of
  ``WCS.wcs.cunit`` are equal or not by comparing the data members of
  ``UnitListProxy`` class [#8480]

- Fixed ``SlicedLowLevelWCS`` when ``array_shape`` is ``None``. [#8649]

- Do not attempt to delete repeated distortion keywords multiple times when
  loading distortions with ``_read_distortion_kw`` and
  ``_read_det2im_kw``. [#8777]


Other Changes and Additions
---------------------------

- Update bundled expat to 2.2.6. [#8343]

- Added instructions for uploading releases to Zenodo. [#8395]

- The bug fixes to the behaviour of ``TimeDelta`` for multiplcation and
  division, which ensure that the output is now always a ``TimeDelta`` if the
  result is a time unit (like u.s or u.d) and otherwise a ``Quantity``, imply
  that sometimes the output type will be different than it was before. [#8356]

- For types unrecognized by ``TimeDelta``, multiplication and division now
  will consistently return a ``TypeError`` if the other instance cannot handle
  ``TimeDelta`` (rather than ``UnitsError`` or ``TypeError`` depending on
  presumed abilities of the other instance). [#8356]

- Multiplication between two ``TimeDelta`` instances will no longer result in
  an ``OperandTypeError``, but rather result in a ``Quantity`` with units of
  time squared (division already correctly resulted in a dimensionless
  ``Quantity``). [#8356]

- Made running the tests insensitive to local user configuration when running
  the tests in parallel mode or directly with pytest. [#8727]

- Added a narrative style guide to the documentation for contributor reference.
  [#8588]

- Ensure we call numpy equality functions in a way that reduces the number
  of ``DeprecationWarning``. [#8755]

Installation
^^^^^^^^^^^^

- We now require setuptools 30.3.0 or later to install the core astropy
  package. [#8240]

- We now define groups of dependencies that can be installed with pip, e.g.
  ``pip install astropy[all]`` (to install all optional dependencies). [#8198]



Version 3.1.2 (2019-02-23)
==========================

Bug fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Convert the default of ``QuantityAttribute``, thereby catching the error case
  case of it being set to None at attribute creation, and giving a more useful
  error message in the process. [#8300]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Fix elliptic analytical solution for comoving distance. Only
  relevant for non-flat cosmologies without radiation and ``Om0`` > ``Ode0``.
  [#8391]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed slowness for certain compound models consisting of large numbers
  of multi-input models [#8338, #8349]

astropy.visualization.wcsaxes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- Fix a bug that caused an error when passing an array with all values the same
  to contour or contourf. [#8321]

- Fix a bug that caused contour and contourf to return None instead of the
  contour set. [#8321]


Version 3.1.1 (2018-12-31)
==========================

Bug fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix error when writing out empty table. [#8279]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``fitsdiff --ignore-hdus`` now prints input filenames in the diff report
  instead of ``<HDUList object at 0x1150f9778>``. [#8295]

astropy.units
^^^^^^^^^^^^^

- Ensure correctness of units when raising to a negative power. [#8263]

- Fix ``with_H0`` equivalency to use the correct direction of
  conversion. [#8292]



Version 3.1 (2018-12-06)
========================

New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- ``convolve`` now accepts any array-like input, not just ``numpy.ndarray`` or
  lists. [#7303]

- ``convolve`` Now raises AstropyUserWarning if nan_treatment='interpolate' and
  preserve_nan=False and NaN values are present post convolution. [#8088]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``SkyCoord.from_name`` constructor now has the ability to create
  coordinate objects by parsing object catalogue names that have embedded
  J-coordinates. [#7830]

- The new function ``make_transform_graph_docs`` can be used to create a
  docstring graph from a custom ``TransformGraph`` object. [#7135]

- ``KDTree`` for catalog matching is now built with sliding midpoint rule
  rather than standard.  In code, this means setting ``compact_nodes=False``
  and ``balanced_tree=False`` in ``cKDTree``. The sliding midpoint rule is much
  more suitable for catalog matching, and results in 1000x speedup in some
  cases. [#7324]

- Additional information about a site loaded from the Astropy sites registry is
  now available in ``EarthLocation.info.meta``. [#7857]

- Added a ``concatenate_representations`` function to combine coordinate
  representation data and any associated differentials. [#7922]

- ``BaseCoordinateFrame`` will now check for a method named
  ``_astropy_repr_in_frame`` when constructing the string forms of attributes.
  Allowing any class to control how ``BaseCoordinateFrame`` represents it when
  it is an attribute of a frame. [#7745]

- Some rarely-changed attributes of frame classes are now cached, resulting in
  speedups (up to 50% in some cases) when creating new scalar frame or
  ``SkyCoord`` objects. [#7949, #5952]

- Added a ``directional_offset_by`` method to ``SkyCoord`` that computes a new
  coordinate given a coordinate, position angle, and angular separation [#5727]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The default cosmology has been changed from ``WMAP9`` to ``Planck15``. [#8123]

- Distance calculations with ``LambaCDM`` with no radiation (T_CMB0=0)
  are now 20x faster by using elliptic integrals for non-flat cases. [#7155]

- Distance calculations with ``FlatLambaCDM`` with no radiation (T_CMB0=0)
  are now 20x faster by using the hypergeometric function solution
  for this special case. [#7087]

- Age calculations with ``FlatLambdaCDM`` with no radiation (Tcmb0=0)
  are now 1000x faster by using analytic solutions instead of integrating.
  [#7117]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Latex reader now ignores ``\toprule``, ``\midrule``, and ``\bottomrule``
  commands. [#7349]

- Added the RST (Restructured-text) table format and the fast version of the
  RDB reader to the set of formats that are guessed by default. [#5578]

- The read trace (used primarily for debugging) now includes guess argument
  sets that were skipped entirely e.g. for not supporting user-supplied kwargs.
  All guesses thus removed from ``filtered_guess_kwargs`` are now listed as
  "Disabled" at the beginning of the trace. [#5578]

- Emit a warning when reading an ECSV file without specifying the ``format``
  and without PyYAML installed.  Previously this silently fell through to
  parsing as a basic format file and the file metadata was lost. [#7580]

- Optionally allow writing masked columns to ECSV with the mask explicitly
  specified as a separate column instead of marking masked elements with ""
  (empty string).  This allows handling the case of a masked string column
  with "" data rows.  [#7481]

astropy.io.misc
^^^^^^^^^^^^^^^

- Added support for saving all representation classes and many coordinate
  frames to the asdf format. [#7079]

- Added support for saving models with units to the asdf format. [#7237]

- Added a new ``character_as_bytes`` keyword to the HDF5 Table reading
  function to control whether byte string columns in the HDF5 file
  are left as bytes or converted to unicode.  The default is to read
  as bytes (``character_as_bytes=True``). [#7024, #8017]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``HDUList.pop()`` now accepts string and tuple extension name
  specifications. [#7236]

- Add an ``ignore_hdus`` keyword to ``FITSDiff`` to allow ignoring HDUs by
  NAME when diffing two FITS files [#7538]

- Optionally allow writing masked columns to FITS with the mask explicitly
  specified as a separate column instead of using the FITS standard of
  certain embedded null values (``NaN`` for float, ``TNULL`` for integers).
  This can be used to work around limitations in the FITS standard. [#7481]

- All time coordinates can now be written to and read from FITS binary tables,
  including those with vectorized locations. [#7430]

- The ``fitsheader`` command line tool now supports a ``dfits+fitsort`` mode,
  and the dotted notation for keywords (e.g. ``ESO.INS.ID``). [#7240]

- Fall back to reading arrays using mode='denywrite' if mode='readonly' fails
  when using memory-mapping. This solves cases on some platforms when the
  available address space was less than the file size (even when using memory
  mapping). [#7926]

astropy.modeling
^^^^^^^^^^^^^^^^

- Add a ``Multiply`` model which preserves unit through evaluate, unlike
  ``Scale`` which is dimensionless. [#7210]

- Add a ``uses_quantity`` property to ``Model`` which allows introspection of if
  the ``Model`` can accept ``Quantity`` objects. [#7417]

- Add a ``separability_matrix`` function which returns the correlation matrix
  of inputs and outputs. [#7803]

- Fixed compatibility of ``JointFitter`` with the latest version of Numpy. [#7984]

- Add ``prior`` and ``posterior`` constraints to modeling parameters. These are
  not used by any current fitters, but are provided to allow user code to
  experiment with Bayesian fitters.  [#7558]

astropy.nddata
^^^^^^^^^^^^^^

- ``NDUncertainty`` objects now have a ``quantity`` attribute for simple
  conversion to quantities. [#7704]

- Add a ``bitmask`` module that provides functions for manipulating bitmasks
  and data quality (DQ) arrays. [#7944]

astropy.stats
^^^^^^^^^^^^^

- Add an ``astropy.stats.bls`` module with an implementation of the "box least
  squares" periodogram that is commonly used for discovering transiting
  exoplanets and eclipsing binaries. [#7391]

astropy.table
^^^^^^^^^^^^^

- Added support for full use of ``Time`` mixin column for join, hstack, and
  vstack table operations. [#6888]

- Added a new table index engine, ``SCEngine``, based on the Sorted Containers
  package. [#7574]

- Add a new keyword argument ``serialize_method`` to ``Table.write`` to
  control how ``Time`` and ``MaskedColumn`` columns are written. [#7481]

- Allow mixin columns to be used in table ``group`` and ``unique``
  functions. This applies to both the key columns and the other data
  columns. [#7712]

- Added support for stacking ``Column``, mixin column (e.g. ``Quantity``,
  ``Time``) or column-like objects. [#7674]

- Added support for inserting a row into a Table that has ``Time`` or
  ``TimeDelta`` column(s). [#7897]

astropy.tests
^^^^^^^^^^^^^

- Added an option ``--readonly`` to the test command to change the
  permissions on the temporary installation location to read-only. [#7598]

astropy.time
^^^^^^^^^^^^

- Allow array-valued ``Time`` object to be modified in place. [#6028]

- Added support for missing values (masking) to the ``Time`` class. [#6028]

- Added supper for a 'local' time scale (for free-running clocks, etc.),
  and round-tripping to the corresponding FITS time scale. [#7122]

- Added `datetime.timedelta` format class for ``TimeDelta``. [#7441]

- Added ``strftime`` and ``strptime`` methods to ``Time`` class.
  These methods are similar to those in the Python standard library
  `time` package and provide flexible input and output formatting. [#7323]

- Added ``datetime64`` format to the ``Time`` class to support working with
  ``numpy.datetime64`` dtype arrays. [#7361]

- Add fractional second support for ``strftime`` and ``strptime`` methods
  of ``Time`` class. [#7705]

- Added an ``insert`` method to allow inserting one or more values into a
  ``Time`` or ``TimeDelta`` object. [#7897]

- Remove timescale from string version of FITS format time string.
  The timescale is not part of the FITS standard and should not be included.
  This change may cause some compatibility issues for code that relies on
  round-tripping a FITS format string with a timescale. Strings generated
  from previous versions of this package are still understood but a
  DeprecationWarning will be issued. [#7870]

astropy.uncertainty
^^^^^^^^^^^^^^^^^^^

- This sub-package was added as a "preview" (i.e. API unstable), containing
  the ``Distribution`` class and associated convenience functions. [#6945]

astropy.units
^^^^^^^^^^^^^

- Add complex numbers support for ``Quantity._repr_latex_``. [#7676]

- Add ``thermodynamic_temperature`` equivalency to convert between
  Jy/sr and "thermodynamic temperature" for cosmology. [#7054]

- Add millibar unit. [#7863]

- Add maggy and nanomaggy unit, as well as associated ``zero_point_flux``
  equivalency. [#7891]

- ``AB`` and ``ST`` are now enabled by default, and have alternate names
  ``ABflux`` and ``STflux``. [#7891]

- Added ``littleh`` unit and associated ``with_H0`` equivalency. [#7970]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added ``imshow_norm`` function, which combines imshow and creation of a
  ``ImageNormalize`` object. [#7785]

astropy.visualization.wcsaxes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- Add support for setting ``set_separator(None)`` in WCSAxes to use default
  separators. [#7570]

- Added two keyword argument options to ``CoordinateHelper.set_format_unit``:
  ``decimal`` can be used to specify whether to use decimal formatting for the
  labels (by default this is False for degrees and hours and True otherwise),
  and ``show_decimal_unit`` can be used to determine whether the units should be
  shown for decimal labels. [#7318]

- Added documentation for ``transform=`` and ``coord_meta=``. [#7698]

- Allow ``coord_meta=`` to optionally include ``format_unit=``. [#7848]

- Add support for more rcParams related to the grid, ticks, and labels, and
  should work with most built-in Matplotlib styles. [#7961]

- Improved rendering of outward-facing ticks. [#7961]

- Add support for ``tick_params`` (which is a standard Matplotlib
  function/method) on both the ``WCSAxes`` class and the individual
  ``CoordinateHelper`` classes. Note that this is provided for compatibility
  with Matplotlib syntax users may be familiar with, but it is not the
  preferred way to change settings. Instead, methods such as ``set_ticks``
  should be preferred. [#7969]

- Moved the argument ``exclude_overlapping`` from ``set_ticks`` to
  ``set_ticklabel``. [#7969]

- Added a ``pad=`` argument to ``set_ticklabel`` to provide a way to control
  the padding between ticks and tick labels. [#7969]

- Added support for setting the tick direction in ``set_ticks`` using the
  ``direction=`` keyword argument. [#7969]

astropy.wcs
^^^^^^^^^^^

- Map ITRS frames to terrestrial WCS coordinates. This will make it possible to
  use WCSAxes to make figures that combine both celestial and terrestrial
  features. An example is plotting the coordinates of an astronomical transient
  over an all- sky satellite image to illustrate the position relative to the
  Earth at the time of the event. The ITRS frame is identified with WCSs that
  use the ``TLON-`` and ``TLAT-`` coordinate types. There are several examples
  of WCSs where this syntax is used to describe terrestrial coordinate systems:
  Section 7.4.1 of `WCS in FITS "Paper II" <https://ui.adsabs.harvard.edu/abs/2002A%26A...395.1077C>`_
  and the `WCSTools documentation <http://tdc-www.harvard.edu/software/wcstools/wcstools.multiwcs.html>`_.
  [#6990]

- Added the abstract base class for the low-level WCS API described in APE 14
  (https://doi.org/10.5281/zenodo.1188875). [#7325]

- Add ``WCS.footprint_contains()`` function to check if the WCS footprint contains a given sky coordinate. [#7273]

- Added the abstract base class for the high-level WCS API described in APE 14
  (https://doi.org/10.5281/zenodo.1188875). [#7325]

- Added the high-level wrapper class for low-level WCS objects as described in
  APE 14 (https://doi.org/10.5281/zenodo.1188875). [#7326]

- Added a new property ``WCS.has_distortion``. [#7326]

- Deprecated ``_naxis1`` and ``_naxis2`` in favor of ``pixel_shape``. [#7973]

- Added compatibility to wcslib version 6. [#8093]


API Changes
-----------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- ``kernel`` can now be a tuple. [#7561]

- Not technically an API changes, however, the doc string indicated that ``boundary=None``
  was the default when actually it is ``boundary='fill'``. The doc string has been corrected,
  however, someone may interpret this as an API change not realising that nothing has actually
  changed. [#7293]

- ``interpolate_replace_nans()`` can no longer accept the keyword argument
  ``preserve_nan``. It is explicitly set to ``False``. [#8088]


astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed ``astropy.coordinates.concatenate`` to include velocity data in the
  concatenation. [#7922]

- Changed the name of the single argument to ``Frame.realize_frame()`` from the
  (incorrect) ``representation_type`` to ``data``. [#7923]

- Negative parallaxes passed to ``Distance()`` now raise an error by default
  (``allow_negative=False``), or are converted to NaN values with a warning
  (``allow_negative=True``). [#7988]

- Negating a ``SphericalRepresentation`` object now changes the angular
  coordinates (by rotating 180º) instead of negating the distance. [#7988]

- Creation of new frames now generally creates copies of frame attributes,
  rather than inconsistently either copying or making references. [#8204]

- The frame class method ``is_equivalent_frame`` now checks for equality of
  components to determine if a frame is the same when it has frame attributes
  that are representations, rather than checking if they are the same
  object. [#8218]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- If a fast reader is explicitly selected (e.g. ``fast_reader='force'``) and
  options which are incompatible with the fast reader are provided
  (e.g. ``quotechar='##'``) then now a ``ParameterError`` exception will be
  raised. [#5578]

- The fast readers will now raise ``InconsistentTableError`` instead of
  ``CParserError`` if the number of data and header columns do not match.
  [#5578]

- Changed a number of ``ValueError`` exceptions to ``InconsistentTableError``
  in places where the exception is related to parsing a table which is
  inconsistent with the specified table format.  Note that
  ``InconsistentTableError`` inherits from ``ValueError`` so no user code
  changes are required. [#7425]

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``fits.table_to_hdu()`` function will translate any column ``format``
  attributes to a TDISPn format string, if possible, and store it as a TDISPn
  keyword in the ``HDU`` header. [#7226]

astropy.modeling
^^^^^^^^^^^^^^^^

- Change the order of the return values from ``FittingWithOutlierRemoval``,
  such that ``fitted_model`` comes first, for consistency with other fitters.
  For the second value, return only a boolean outlier ``mask``, instead of the
  previous ``MaskedArray`` (which included a copy of the input data that was
  both redundant and inadvertently corrupted at masked points). Return a
  consistent type for the second value when ``niter=0``. [#7407]

- Set the minimum value for the ``bolometric_flux`` parameter of the
  ``BlackBody1D`` model to zero. [#7045]

astropy.nddata
^^^^^^^^^^^^^^

- Add two new uncertainty classes, ``astropy.nddata.VarianceUncertainty`` and
  ``astropy.nddata.InverseVariance``. [#6971]

astropy.stats
^^^^^^^^^^^^^

- String values can now be used for the ``cenfunc`` and ``stdfunc``
  keywords in the ``SigmaClip`` class and ``sigma_clip`` and
  ``sigma_clipped_stats`` functions. [#7478]

- The ``SigmaClip`` class and ``sigma_clip`` and
  ``sigma_clipped_stats`` functions now have a ``masked`` keyword,
  which can be used to return either a masked array (default) or an
  ndarray with the min/max values. [#7478]

- The ``iters`` keyword has been renamed (and deprecated) to
  ``maxiters`` in the ``SigmaClip`` class and ``sigma_clip`` and
  ``sigma_clipped_stats`` functions. [#7478]

astropy.table
^^^^^^^^^^^^^

- ``Table.read()`` on a FITS binary table file will convert any TDISPn header
  keywords to a Python formatting string when possible, and store it in the
  column ``format`` attribute. [#7226]

- No values provided to stack will now raise ``ValueError`` rather than
  ``TypeError``. [#7674]

astropy.tests
^^^^^^^^^^^^^

- ``from astropy.tests.helper import *`` no longer includes
  ``quantity_allclose``. However,
  ``from astropy.tests.helper import quantity_allclose`` would still work.
  [#7381]

- ``warnings_to_ignore_by_pyver`` option in
  ``enable_deprecations_as_exceptions()`` now takes ``None`` as key.
  Any deprecation message that is mapped to ``None`` will be ignored
  regardless of the Python version. [#7790]

astropy.time
^^^^^^^^^^^^

- Added the ability to use ``local`` as time scale in ``Time`` and
  ``TimeDelta``. [#6487]

- Comparisons, addition, and subtraction of ``Time`` instances with non-time
  instances will now return ``NotImplemented`` rather than raise the
  ``Time``-specific ``OperandTypeError``.  This will generally lead to a
  regular ``TypeError``.  As a result, ``OperandTypeError`` now only occurs if
  the operation is between ``Time`` instances of incompatible type or scale.
  [#7584]

astropy.units
^^^^^^^^^^^^^

- In ``UnitBase.compose()``, if a sequence (list|tuple) is passed in to
  ``units``, the default for ``include_prefix_units`` is set to
  `True`, so that no units get ignored. [#6957]

- Negative parallaxes are now converted to NaN values when using the
  ``parallax`` equivalency. [#7988]

astropy.utils
^^^^^^^^^^^^^

- ``InheritDocstrings`` now also works on class properties. [#7166]

- ``diff_values()``, ``report_diff_values()``, and ``where_not_allclose()``
  utility functions are moved from ``astropy.io.fits.diff``. [#7444]

- ``invalidate_caches()`` has been removed from the
  ``astropy.utils.compat`` namespace, use it directly from ``importlib``. [#7872]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- In ``ImageNormalize``, the default for ``clip`` is set to ``True``. [#7800]

- Changed ``AsymmetricPercentileInterval`` and ``MinMaxInterval`` to
  ignore NaN values in arrays. [#7360]

- Automatically default to using ``grid_type='contours'`` in WCSAxes when using
  a custom ``Transform`` object if the transform has no inverse. [#7847]


Performance Improvements
------------------------

- Reduced import time by more cautious use of the standard library. [#7647]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Major performance overhaul to ``convolve()``. [#7293]

- ``convolve()``: Boundaries ``fill``, ``extend``, and ``wrap`` now use a single
  implementation that pads the image with the correct boundary values before convolving.
  The runtimes of these three were significantly skewed. They now have
  equivalent runtimes that are also faster than before due to performant contiguous
  memory access. However, this does increase the memory footprint as an entire
  new image array is required plus that needed for the padded region.[#7293]

- ``convolve()``: Core computation ported from Cython to C. Several optimization
  techniques have been implemented to achieve performance gains, e.g. compiler
  hoisting, and vectorization, etc. Compiler optimization level ``-O2`` required for
  hoisting and ``-O3`` for vectorization. [#7293]

- ``convolve()``: ``nan_treatment=‘interpolate’`` was slow to compute irrespective of
  whether any NaN values exist within the array. The input array is now
  checked for NaN values and interpolation is disabled if non are found. This is a
  significant performance boost for arrays without NaN values. [#7293]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Sped up creating SkyCoord objects by a factor of ~2 in some cases. [#7615]

- Sped up getting xyz vectors from ``CartesianRepresentation`` (which
  is used a lot internally). [#7638]

- Sped up transformations and some representation methods by replacing
  python code with (compiled) ``erfa`` ufuncs. [#7639]

- Sped up adding differential (velocity) data to representations by a factor of
  ~20, which improves the speed of frame and SkyCoord initialization. [#7924]

- Refactored ``SkyCoord`` initializer to improve performance and code clarity.
  [#7958]

- Sped up initialization of ``Longitude`` by ~40%. [#7616]

astropy.stats
^^^^^^^^^^^^^

- The ``SigmaClip`` class and ``sigma_clip`` and
  ``sigma_clipped_stats`` functions are now significantly faster. [#7478]

- A Cython implementation for `astropy.stats.kuiper_two` and a vectorized
  implementation for `astropy.stats.kuiper_false_positive_probability` have
  been added, speeding up both functions.  [#8104]

astropy.units
^^^^^^^^^^^^^

- Sped up creating new composite units, and raising units to some power
  [#7549, #7649]

- Sped up Unit.to when target unit is the same as the original unit. [#7643]

- Lazy-load ``scipy.special`` to shorten ``astropy.units`` import time. [#7636]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Significantly sped up drawing of contours in WCSAxes. [#7568]


Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed bug in ``convolve_fft`` where masked input was copied with
  ``numpy.asarray`` instead of ``numpy.asanyarray``.
  ``numpy.asarray`` removes the mask subclass causing
  ``numpy.ma.ismasked(input)`` to fail, causing ``convolve_fft``
  to ignore all masked input. [#8137]

- Remove function side-effects of input data from ``convolve_fft``.
  It was possible for input data to remain modified if particular exceptions
  were raised. [#8152]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``EarthLocation.of_address`` now uses the OpenStreetMap geocoding API by
  default to retrieve coordinates, with the Google API (which now requires an
  API key) as an option. [#7918]

- Fixed a bug that caused frame objects with NaN distances to have NaN sky
  positions, even if valid sky coordinates were specified. [#7988]

- Fixed ``represent_as()`` to not round-trip through cartesian if the same
  representation class as the instance is passed in. [#7988]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a problem when ``guess=True`` that ``fast_reader`` options
  could be dropped after the first fast reader class was tried. [#5578]

- Units in CDS-formatted tables are now parsed correctly by the units
  module. [#7348]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fixed bug when writing a table with masked columns to HDF5. Previously
  the mask was being silently dropped.  If the ``serialize_meta`` option is
  enabled the data mask will now be written as an additional column and the
  masked columns will round-trip correctly. [#7481]

- Fixed a bug where writing to HDF5 failed for for tables with columns of
  unicode strings.  Now those columns are first encoded to UTF-8 and
  written as byte strings. [#7024, #8017]

- Fixed a bug with serializing the bounding_box of models initialized
  with ``Quantities`` . [#8052]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added support for ``copy.copy`` and ``copy.deepcopy`` for ``HDUList``. [#7218]

- Override ``HDUList.copy()`` to return a shallow HDUList instance. [#7218]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fix behaviour of certain models with units, by making certain unit-related
  attributes readonly. [#7210]

- Fixed an issue with validating a ``bounding_box`` whose items are
  ``Quantities``. [#8052]

- Fix ``Moffat1D`` and ``Moffat2D`` derivatives. [#8108]

astropy.nddata
^^^^^^^^^^^^^^

- Fixed rounding behavior in ``overlap_slices`` for even-sized small
  arrays. [#7859]

- Added support for pickling ``NDData`` instances that have an uncertainty.
  [#7383]

astropy.stats
^^^^^^^^^^^^^

- Fix errors in ``kuiper_false_positive_probability``. [#7975]

astropy.tests
^^^^^^^^^^^^^

- Fixing bug that prevented to run the doctests on only a single rst documentation
  file rather than all of them. [#8055]

astropy.time
^^^^^^^^^^^^

- Fix a bug when setting a ``TimeDelta`` array item with plain float value(s).
  This was always interpreted as a JD (day) value regardless of the
  ``TimeDelta`` format. [#7990]

astropy.units
^^^^^^^^^^^^^

- To simplify fast creation of ``Quantity`` instances from arrays, one can now
  write ``array << unit`` (equivalent to ``Quantity(array, unit, copy=False)``).
  If ``array`` is already a ``Quantity``, this will convert the quantity to the
  requested units; in-place conversion can be done with ``quantity <<= unit``.
  [#7734]

astropy.utils
^^^^^^^^^^^^^

- Fixed a bug due to which ``report_diff_values()`` was reporting incorrect
  number of differences when comparing two ``numpy.ndarray``. [#7470]

- The download progress bar is now only displayed in terminals, to avoid
  polluting piped output. [#7577]

- Ignore URL mirror caching when there is no internet. [#8163]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Right ascension coordinates are now shown in hours by default, and the
  ``set_format_unit`` method on ``CoordinateHelper`` now works correctly
  with angle coordinates. [#7215]


Other Changes and Additions
---------------------------

- The documentation build now uses the Sphinx configuration from sphinx-astropy
  rather than from astropy-helpers. [#7139]

- Versions of Numpy <1.13 are no longer supported. [#7058]

- Running tests now suppresses the output of the installation stage by default,
  to allow easier viewing of the test results. To re-enable the output as
  before, use ``python setup.py test --verbose-install``. [#7512]

- The ERFA functions are now wrapped in ufuncs instead of custom C code,
  leading to some speed improvements, and setting the stage for allowing
  overrides with ``__array_ufunc__``. [#7502]

- Updated the bundled CFITSIO library to 3.450. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information. [#8014]

- The ``representation`` keywords in coordinate frames are now deprecated in
  favor of the ``representation_type`` keywords (which are less
  ambiguously named). [#8119]



Version 3.0.5 (2018-10-14)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed bug in which consecutive ``StaticMatrixTransform``'s in a frame
  transform path would be combined in the incorrect order. [#7707]

astropy.tests
^^^^^^^^^^^^^

- Fixing bug that doctests were not picked up from the narrative
  documentation when tests were run for all modules. [#7767]



Version 3.0.4 (2018-08-02)
==========================

API Changes
-----------

astropy.table
^^^^^^^^^^^^^

- The private ``_parent`` attribute in the ``info`` attribute of table
  columns was changed from a direct reference to the parent column to a weak
  reference.  This was in response to a memory leak caused by having a
  circular reference cycle.  This change means that expressions like
  ``col[3:5].info`` will now fail because at the point of the ``info``
  property being evaluated the ``col[3:5]`` weak reference is dead.  Instead
  force a reference with ``c = col[3:5]`` followed by
  ``c.info.indices``. [#6277, #7448]


Bug Fixes
---------

astropy.nddata
^^^^^^^^^^^^^^

- Fixed an bug when creating the ``WCS`` of a cutout (see ``nddata.Cutout2D``)
  when input image's ``WCS`` contains ``SIP`` distortion corrections by
  adjusting the ``crpix`` of the ``astropy.wcs.Sip`` (in addition to
  adjusting the ``crpix`` of the ``astropy.wcs.WCS`` object). This bug
  had the potential to produce large errors in ``WCS`` coordinate
  transformations depending on the position of the cutout relative
  to the input image's ``crpix``. [#7556, #7550]

astropy.table
^^^^^^^^^^^^^

- Fix memory leak where updating a table column or deleting a table
  object was not releasing the memory due to a reference cycle
  in the column ``info`` attributes. [#6277, #7448]

astropy.wcs
^^^^^^^^^^^

- Fixed an bug when creating the ``WCS`` slice (see ``WCS.slice()``)
  when ``WCS`` contains ``SIP`` distortion corrections by
  adjusting the ``WCS.sip.crpix`` in addition to adjusting
  ``WCS.wcs.crpix``. This bug had the potential to produce large errors in
  ``WCS`` coordinate transformations depending on the position of the slice
  relative to ``WCS.wcs.crpix``. [#7556, #7550]


Other Changes and Additions
---------------------------

- Updated bundled wcslib to v 5.19.1 [#7688]


Version 3.0.3 (2018-06-01)
==========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix stripping correct (header) comment line from ``meta['comments']``
  in the ``CommentedHeader`` reader for all ``header_start`` settings. [#7508]

astropy.io.fits
^^^^^^^^^^^^^^^

- Raise error when attempting to open gzipped FITS file in 'append' mode.
  [#7473]

- Fix a bug when writing to FITS a table that has a column description
  with embedded blank lines. [#7482]

astropy.tests
^^^^^^^^^^^^^

- Enabling running tests for multiple packages when specified comma
  separated. [#7463]


Version 3.0.2 (2018-04-23)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Computing a 3D separation between two ``SkyCoord`` objects (with the
  ``separation_3d`` method) now works with or without velocity data attached to
  the objects. [#7387]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fix validate with xmllint=True. [#7255, #7283]

astropy.modeling
^^^^^^^^^^^^^^^^

- ``FittingWithOutlierRemoval`` now handles model sets, as long as the
  underlying fitter supports masked values. [#7199]

- Remove assumption that ``model_set_axis == 0`` for 2D models in
  ``LinearLSQFitter``. [#7317, #7199]

- Fix the shape of the outputs when a model set is evaluated with
  ``model_set_axis=False`` . [#7317]

astropy.stats
^^^^^^^^^^^^^

- Accept a tuple for the ``axis`` parameter in ``sigma_clip``, like the
  underlying ``numpy`` functions and some other functions in ``stats``. [#7199]

astropy.tests
^^^^^^^^^^^^^

- The function ``quantity_allclose`` was moved to the ``units`` package with
  the new, shorter name ``allclose``. This eliminates a runtime dependency on
  ``pytest`` which was causing issues for some affiliated packages. The old
  import will continue to work but may be deprecated in the future. [#7252]

astropy.units
^^^^^^^^^^^^^

- Added a units-aware ``allclose`` function (this was previously available in
  the ``tests`` module as ``quantity_allclose``). To complement ``allclose``,
  a new ``isclose`` function is also added and backported. [#7252]


Version 3.0.1 (2018-03-12)
==========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a unicode decode error when reading a table with non-ASCII characters.
  The fast C reader cannot handle unicode so the code now uses the pure-Python
  reader in this case. [#7103]

astropy.io.fits
^^^^^^^^^^^^^^^

- Updated the bundled CFITSIO library to 3.430. This is to remedy a critical
  security vulnerability that was identified by NASA. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information. [#7274]

astropy.io.misc
^^^^^^^^^^^^^^^

- Make sure that a sufficiently recent version of ASDF is installed when
  running test suite against ASDF tags and schemas. [#7205]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Fix reading files with serialized metadata when using a Table subclass. [#7213]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fix lookup fields by ID. [#7208]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fix model set evaluation over common input when model_set_axis > 0. [#7222]

- Fixed the evaluation of compound models with units. This required adding the
  ability to have ``input_units_strict`` and ``input_units_allow_dimensionless``
  be dictionaries with input names as keys. [#6952]

astropy.units
^^^^^^^^^^^^^

- ``quantity_helper`` no longer requires ``scipy>=0.18``. [#7219]


Version 3.0 (2018-02-12)
========================

New Features
------------

astropy.constants
^^^^^^^^^^^^^^^^^

- New context manager ``set_enabled_constants`` to temporarily use an older
  version. [#7008]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``Distance`` object now accepts ``parallax`` as a keyword in the
  initializer, and supports retrieving a parallax (as an ``Angle``) via
  the ``.parallax`` attributes. [#6855]

- The coordinate frame classes (subclasses of ``BaseCoordinateFrame``) now
  always have ``.velocity``, ``.proper_motion``, and ``.radial_velocity``
  properties that provide shorthands to the full-space Cartesian velocity as
  a ``CartesianDifferential``, the 2D proper motion as a ``Quantity``, and the
  radial or line-of-sight velocity as a ``Quantity``. [#6869]

- ``SkyCoord`` objects now support storing and transforming differentials - i.e.,
  both radial velocities and proper motions. [#6944]

- All frame classes now automatically get sensible representation mappings for
  velocity components. For example, ``d_x``, ``d_y``, ``d_z`` are all
  automatically mapped to frame component namse ``v_x``, ``v_y``, ``v_z``.
  [#6856]

- ``SkyCoord`` objects now support updating the position of a source given its
  space motion and a new time or time difference. [#6872]

- The frame classes now accept a representation class or differential class, or
  string names for either, through the keyword arguments ``representation_type``
  and ``differential_type`` instead of ``representation`` and
  ``differential_cls``. [#6873]

- The frame classes (and ``SkyCoord``) now give more useful error messages when
  incorrect attribute names are given.  Instead of using the representation
  attribute names, they use the frame attribute names. [#7106]

- ``EarthLocation`` now has a method to compute the  gravitational redshift due
  due to solar system bodies.  [#6861, #6935]

- ``EarthLocation`` now has a ``get_gcrs`` convenience method to get the
  location in GCRS coordinates.  [#6861, #6935]

astropy.io.fits
^^^^^^^^^^^^^^^

- Expanded the FITS ``Column`` interface to accept attributes pertaining to the FITS
  World Coordinate System, which includes spatial(celestial) and time coordinates. [#6359]

- Added ``ver`` attribute to set the ``EXTVER`` header keyword to ``ImageHDU``
  and ``TableHDU``. [#6454]

- The performance for reading FITS tables has been significantly improved,
  in particular for cases where the tables contain one or more string columns
  and when done through ``Table.read``. [#6821]

- The performance for writing tables from ``Table.write`` has now been
  significantly improved for tables containing one or more string columns. [#6920]

- The ``Table.read`` now supports a ``memmap=`` keyword argument to control
  whether or not to use  memory mapping when reading the table. [#6821]

- When reading FITS tables with ``fits.open``, a new keyword argument
  ``character_as_bytes`` can be passed - when set to `True`, character columns
  are returned as Numpy byte arrays (Numpy type S) while when set to `False`,
  the same columns are decoded to Unicode strings (Numpy type U) which uses more
  memory. [#6821]

- The ``table_to_hdu`` function and the ``BinTableHDU.from_columns`` and
  ``FITS_rec.from_columns`` methods now include a ``character_as_bytes``
  keyword argument - if set to `True`, then when string columns are accessed,
  byte columns will be returned, which can provide significantly improved
  performance. [#6920]

- Added support for writing and reading back a table which has "mixin columns"
  such as ``SkyCoord`` or ``EarthLocation`` with no loss of information. [#6912]

- Enable tab-completion for ``FITS_rec`` column names and ``Header`` keywords
  with IPython 5 and later. [#7071]

astropy.io.misc
^^^^^^^^^^^^^^^

- When writing to HDF5 files, the serialized metadata are now saved in a new
  dataset, instead of the HDF5 dataset attributes. This allows for metadata of
  any dimensions. [#6304]

- Added support in HDF5 for writing and reading back a table which has "mixin
  columns" such as ``SkyCoord`` or ``EarthLocation`` with no loss of
  information. [#7007]

- Add implementations of astropy-specific ASDF tag types. [#6790]

- Add ASDF tag and schema for ICRSCoord. [#6904]

astropy.modeling
^^^^^^^^^^^^^^^^

- Add unit support for tabular models. [#6529]

- A ``deepcopy()`` method was added to models. [#6515]

- Added units support to ``AffineTransformation``. [#6853]

- Added ``is_separable`` function to modeling to test the
  separability of a model. [#6746]

- Added ``Model.separable`` property. It returns a boolean value or
  ``None`` if not set. [#6746]

- Support masked array values in ``LinearLSQFitter`` (instead of silently
  ignoring the mask). [#6927]

astropy.stats
^^^^^^^^^^^^^

- Added false alarm probability computation to ``astropy.stats.LombScargle``
  [#6488]

- Implemented Kuiper functions in ``astropy.stats`` [#3724, #6565]

astropy.table
^^^^^^^^^^^^^

- Added support for reading and writing ``astropy.time.Time`` Table columns
  to and from FITS tables, to the extent supported by the FITS standard. [#6176]

- Improved exception handling and error messages when column ``format``
  attribute is incorrect for the column type. [#6385]

- Allow to pass ``htmldict`` option to the jsviewer writer. [#6551]

- Added new table operation ``astropy.table.setdiff`` that returns the set
  difference of table rows for two tables. [#6443]

- Added support for reading time columns in FITS compliant binary tables
  as ``astropy.time.Time`` Table columns. [#6442]

- Allowed to remove table rows through the ``__delitem__`` method. [#5839]

- Added a new ``showtable`` command-line script to view binary or ASCII table
  files. [#6859]

- Added new table property ``astropy.table.Table.loc_indices`` that returns the
  location of rows by indexes. [#6831]

- Allow updating of table by indices through the property ``astropy.table.Table.loc``. [#6831]

- Enable tab-completion for column names with IPython 5 and later. [#7071]

- Allow getting and setting a table Row using multiple column names. [#7107]

astropy.tests
^^^^^^^^^^^^^

- Split pytest plugins into separate modules. Move remotedata, openfiles,
  doctestplus plugins to standalone repositories. [#6384, #6606]

- When testing, astropy (or the package being tested) is now installed to
  a temporary directory instead of copying the build. This allows
  entry points to work correctly. [#6890]

- The tests_require setting in setup.py now works properly when running
  'python setup.py test'. [#6892]

astropy.units
^^^^^^^^^^^^^

- Deprecated conversion of quantities to truth values. Currently, the expression
  ``bool(0 * u.dimensionless_unscaled)`` evaluates to ``True``. In the future,
  attempting to convert a ``Quantity`` to a ``bool`` will raise ``ValueError``.
  [#6580, #6590]

- Modify the ``brightness_temperature`` equivalency to provide a surface
  brightness equivalency instead of the awkward assumed-per-beam equivalency
  that previously existed [#5173, #6663]

- Support was added for a number of ``scipy.special`` functions. [#6852]

astropy.utils
^^^^^^^^^^^^^

- The ``astropy.utils.console.ProgressBar.map`` class method now supports the
  ``ipython_widget`` option. You can now pass it both ``multiprocess=True`` and
  ``ipython_widget=True`` to get both multiprocess speedup and a progress bar
  widget in an IPython Notebook. [#6368]

- The ``astropy.utils.compat.funcsigs`` module has now been deprecated. Use the
  Python 'inspect' module directly instead. [#6598]

- The ``astropy.utils.compat.futures`` module has now been deprecated. Use the
  Python 'concurrent.futures' module directly instead. [#6598]

- ``JsonCustomEncoder`` is expanded to handle ``Quantity`` and ``UnitBase``.
  [#5471]

- Added a ``dcip_xy`` method to IERS that interpolates along the dX_2000A and
  dY_2000A columns of the IERS table.  Hence, the data for the CIP offsets is
  now available for use in coordinate frame conversion. [#5837]

- The functions ``matmul``, ``broadcast_arrays``, ``broadcast_to`` of the
  ``astropy.utils.compat.numpy`` module have been deprecated. Use the
  NumPy functions directly. [#6691]

- The ``astropy.utils.console.ProgressBar.map`` class method now returns
  results in sequential order. Previously, if you set ``multiprocess=True``,
  then the results could arrive in any arbitrary order, which could be a nasty
  shock. Although the function will still be evaluated on the items in
  arbitrary order, the return values will arrive in the same order in which the
  input items were provided. The method is now a thin wrapper around
  ``astropy.utils.console.ProgressBar.map_unordered``, which preserves the old
  behavior. [#6439]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Enable Matplotlib's subtraction shorthand syntax for composing and
  inverting transformations for the ``WCSWorld2PixelTransform`` and
  ``WCSPixel2WorldTransform`` classes by setting ``has_inverse`` to ``True``.
  In order to implement a unit test, also implement the equality comparison
  operator for both classes. [#6531]

- Added automatic hiding of axes labels when no tick labels are drawn on that
  axis. This parameter can be configured with
  ``WCSAxes.coords[*].set_axislabel_visibility_rule`` so that labels are automatically
  hidden when no ticks are drawn or always shown. [#6774]

astropy.wcs
^^^^^^^^^^^

- Added a new function ``celestial_frame_to_wcs`` to convert from
  coordinate frames to WCS (the opposite of what ``wcs_to_celestial_frame``
  currently does. [#6481]

- ``wcslib`` was updated to v 5.18. [#7066]


API Changes
-----------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- ``Gaussian2DKernel`` now accepts ``x_stddev`` in place of ``stddev`` with
  an option for ``y_stddev``, if different. It also accepts ``theta`` like
  ``Gaussian2D`` model. [#3605, #6748]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Deprecated ``recommended_units`` for representations. These were used to
  ensure that any angle was presented in degrees in sky coordinates and
  frames. This is more logically done in the frame itself. [#6858]

- As noted above, the frame class attributes ``representation`` and
  ``differential_cls`` are being replaced by ``representation_type`` and
  ``differential_type``. In the next version, using ``representation`` will raise
  a deprecation warning. [#6873]

- Coordinate frame classes now can't be added to the frame transform graph if
  they have frame attribute names that conflict with any component names. This
  is so ``SkyCoord`` can uniquely identify and distinguish frame attributes from
  frame components. [#6871]

- Slicing and reshaping of ``SkyCoord`` and coordinate frames no longer passes
  the new object through ``__init__``, but directly sets attributes on a new
  instance. This speeds up those methods by an order of magnitude, but means
  that any customization done in ``__init__`` is by-passed. [#6941]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Allow ECSV files to be auto-identified by ``Table.read`` or
  ``Table.write`` based on the ``.ecsv`` file name suffix. In this case it
  is not required to provide the ``format`` keyword. [#6552]

astropy.io.fits
^^^^^^^^^^^^^^^

- Automatically detect and handle compression in FITS files that are opened by
  passing a file handle to ``fits.open`` [#6373]

- Remove the ``nonstandard`` checksum option. [#6571]

astropy.io.misc
^^^^^^^^^^^^^^^

- When writing to HDF5 files, the serialized metadata are now saved in a new
  dataset instead of the HDF5 dataset attributes. This allows for metadata of
  any dimensions. [#6304]

- Deprecated the ``usecPickle`` kwarg of ``fnunpickle`` and ``fnpickle`` as
  it was needed only for Python2 usage. [#6655]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Add handling of ``tree.Group`` elements to ``tree.Resource``.  Unified I/O
  or conversion to astropy tables is not affected. [#6262]

astropy.modeling
^^^^^^^^^^^^^^^^

- Removed deprecated ``GaussianAbsorption1D`` model.
  Use ``Const1D - Gaussian1D`` instead. [#6542]

- Removed the registry from modeling. [#6706]

astropy.table
^^^^^^^^^^^^^

- When setting the column ``format`` attribute the value is now immediately
  validated. Previously one could set to any value and it was only checked
  when actually formatting the column. [#6385]

- Deprecated the ``python3_only`` kwarg of the
  ``convert_bytestring_to_unicode`` and ``convert_unicode_to_bytestring``
  methods it was needed only for Python2 usage. [#6655]

- When reading in FITS tables with ``Table.read``, string columns are now
  represented using Numpy byte (dtype ``S``) arrays rather than Numpy
  unicode arrays (dtype ``U``). The ``Column`` class then ensures the
  bytes are automatically converted to string as needed. [#6821]

- When getting a table row using multiple column names, if one of the
  names is not a valid column name then a ``KeyError`` exception is
  now raised (previously ``ValueError``).  When setting a table row,
  if the right hand side is not a sequence with the correct length
  then a ``ValueError`` is now raised (previously in certain cases
  a ``TypeError`` was raised). [#7107]

astropy.utils
^^^^^^^^^^^^^

- ``download_files_in_parallel`` now always uses ``cache=True`` to make the
  function work on Windows. [#6671]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- The Astropy matplotlib plot style has been deprecated. It will continue to
  work in future but is no longer documented. [#6991]


Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Frame objects now use the default differential even if the representation is
  explicitly provided as long as the representation provided is the same type as
  the default representation. [#6944]

- Coordinate frame classes now raise an error when they are added to the frame
  transform graph if they have frame attribute names that conflict with any
  component names. [#6871]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Added support for reading very large tables in chunks to reduce memory
  usage. [#6458]

- Strip leading/trailing white-space from latex lines to avoid issues when
  matching ``\begin{tabular}`` statements.  This is done by introducing a new
  ``LatexInputter`` class to override the ``BaseInputter``. [#6311]

astropy.io.fits
^^^^^^^^^^^^^^^

- Properly handle opening of FITS files from ``http.client.HTTPResponse`` (i.e.
  it now works correctly when passing the results of ``urllib.request.urlopen``
  to ``fits.open``). [#6378]

- Fix the ``fitscheck`` script for updating invalid checksums, or removing
  checksums. [#6571]

- Fixed potential problems with the compression module [#6732]

- Always use the 'D' format for floating point values in ascii tables. [#6938]

astropy.table
^^^^^^^^^^^^^

- Fix getting a table row when using multiple column names (for example
  ``t[3]['a', 'b', 'c']``).  Also fix a problem when setting an entire row:
  if setting one of the right-hand side values failed this could result in
  a partial update of the referenced parent table before the exception is
  raised. [#7107]

astropy.time
^^^^^^^^^^^^

- Initialization of ``Time`` instances with bytes or arrays with dtype ``S``
  will now automatically attempt to decode as ASCII. This ensures ``Column``
  instances with ASCII strings stored with dtype ``S`` can be used.
  [#6823, #6903]

astropy.units
^^^^^^^^^^^^^

- Fixed a bug that caused PLY files to not be generated correctly in Python 3.
  [#7174]

astropy.utils
^^^^^^^^^^^^^

- The ``deprecated`` decorator applied to a class will now modify the class
  itself, rather than to create a class that just looks and behave like the
  original. This is needed so that the Python 3 ``super`` without arguments
  works for decorated classes. [#6615]

- Fixed ``HomogeneousList`` when setting one item or a slice. [#6773]

- Also check the type when creating a new instance of
  ``HomogeneousList``. [#6773]

- Make ``HomogeneousList`` work with iterators and generators when creating the
  instance, extending it, or using when setting a slice. [#6773]


Other Changes and Additions
---------------------------

- Versions of Python <3.5 are no longer supported. [#6556]

- Versions of Pytest <3.1 are no longer supported. [#6419]

- Versions of Numpy <1.10 are no longer supported. [#6593]

- The bundled CFITSIO was updated to version 3.41 [#6477]

- ``analytic_functions`` sub-package is removed.
  Use ``astropy.modeling.blackbody``. [#6541]

- ``astropy.vo`` sub-package is removed. Use ``astropy.samp`` for SAMP and
  ``astroquery`` for VO cone search. [#6540]

- The guide to setting up Emacs for code development was simplified, and
  updated to recommend ``flycheck`` and ``flake8`` for syntax checks. [#6692]

- The bundled version of PLY was updated to 3.10. [#7174]



Version 2.0.16 (2019-10-27)
===========================

Bug Fixes
---------

astropy.time
^^^^^^^^^^^^

- Fixed a troubling bug in which ``Time`` could loose precision, with deviations
  of 300 ns. [#9328]


Other Changes and Additions
---------------------------

- Updated IERS A URLs due to USNO prolonged maintenance. [#9443]



Version 2.0.15 (2019-10-06)
===========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where the string representation of a ``BaseCoordinateFrame``
  object could become garbled under specific circumstances when the frame
  defines custom component names via ``RepresentationMapping``. [#8869]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix uint conversion in ``FITS_rec`` when slicing a table. [#8982]

- Fix reading of unsigned 8-bit integer with compressed fits. [#9219]

astropy.nddata
^^^^^^^^^^^^^^

- Fixed a bug in ``overlap_slices`` where the ``"strict"`` mode was
  too strict for a small array along the upper edge of the large array.
  [#8901]

- Fixed a bug in ``overlap_slices`` where a ``NoOverlapError`` would
  be incorrectly raised for a 0-shaped small array at the origin.
  [#8901]

astropy.samp
^^^^^^^^^^^^

- Fixed a bug that caused an incorrectly constructed warning message
  to raise an error. [#8966]

astropy.table
^^^^^^^^^^^^^

- Fix ``FixedWidthNoHeader`` to pay attention to ``data_start`` keyword when
  finding first data line to split columns [#8485, #8511]

- Fix bug when initializing ``Table`` with ``rows`` as a generator. [#9315]

- Fix ``join`` when there are multiple mixin (Quantity) columns as keys. [#9313]

astropy.units
^^^^^^^^^^^^^

- ``Quantity`` now preserves the ``dtype`` for anything that is floating
  point, including ``float16``. [#8872]

- ``Unit()`` now accepts units with fractional exponents such as ``m(3/2)``
  in the default/``fits`` and ``vounit`` formats that would previously
  have been rejected for containing multiple solidi (``/``). [#9000]

- Fixed the LaTeX representation of units containing a superscript. [#9218]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed compatibility issues with latest versions of Matplotlib. [#8961]


Other Changes and Additions
---------------------------

- Updated required version of Cython to v0.29.13 to make sure that
  generated C files are compatible with the upcoming Python 3.8 release
  as well as earlier supported versions of Python. [#9198]



Version 2.0.14 (2019-06-14)
===========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix ``Header.update`` which was dropping the comments when passed
  a ``Header`` object. [#8840]

astropy.modeling
^^^^^^^^^^^^^^^^

- ``Moffat1D.fwhm`` and ``Moffat2D.fwhm`` will return a positive value when
  ``gamma`` is negative. [#8801, #8815]

astropy.units
^^^^^^^^^^^^^

- Fixed a bug that prevented ``EarthLocation`` from being initialized with
  numpy >=1.17. [#8849]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed ``quantity_support`` to work around the fact that matplotlib
  does not detect subclasses in its ``units`` framework. With this,
  ``Angle`` and other subclasses work correctly. [#8818]

- Fixed ``quantity_support`` to work properly if multiple context managers
  are nested. [#8844]


Version 2.0.13 (2019-06-08)
===========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^
- Fixed bug in ``ColDefs._init_from_array()`` that caused unsigned datatypes
  with the opposite endianness as the host architecture to fail the
  TestColumnFunctions.test_coldefs_init_from_array unit test. [#8460]

astropy.io.misc
^^^^^^^^^^^^^^^

- Explicitly set PyYAML default flow style to None to ensure consistent
  astropy YAML output for PyYAML version 5.1 and later. [#8500]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Block floating-point columns from using repr format when converted to Table
  [#8358]

astropy.stats
^^^^^^^^^^^^^

- Fixed issue in ``bayesian_blocks`` when called with the ``ncp_prior``
  keyword. [#8339]

astropy.units
^^^^^^^^^^^^^

- Fix ``take`` when one gets only a single element from a ``Quantity``,
  ensuring it returns a ``Quantity`` rather than a scalar. [#8617]



Version 2.0.12 (2019-02-23)
===========================

New Features
------------

astropy.utils
^^^^^^^^^^^^^

- The ``deprecated_renamed_argument`` decorator now capable deprecating an
  argument without renaming it. It also got a new ``alternative`` keyword
  argument to suggest alternative functionality instead of the removed
  one. [#8324]


Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed bug in ``ColDefs._init_from_array()`` that caused non-scalar unsigned
  entries to not have the correct bzero value set. [#8353]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed compatibility of ``JointFitter`` with the latest version of Numpy.
  [#7984]

astropy.table
^^^^^^^^^^^^^

- Fix ``.quantity`` property of ``Column`` class for function-units (e.g.,
  ``dex``). Previously setting this was possible, but getting raised
  an error. [#8425]

- Fixes a bug where initializing a new ``Table`` from the final row of an
  existing ``Table`` failed.  This happened when that row was generated using
  the item index ``[-1]``. [#8422]

astropy.wcs
^^^^^^^^^^^

- Fix bug that caused ``WCS.has_celestial``, ``wcs_to_celestial_frame``, and
  other functionality depending on it to fail in the presence of correlated
  celestial and other axes. [#8420]


Other Changes and Additions
---------------------------

- Fixed ``make clean`` for the documentation on Windows to ensure it
  properly removes the ``api`` and ``generated`` directories. [#8346]

- Updating bundled ``pytest-openfiles`` to v0.3.2. [#8434]

- Making ``ErfaWarning`` and ``ErfaError`` available via
  ``astropy.utils.exceptions``. [#8441]



Version 2.0.11 (2018-12-31)
===========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix fast reader C tokenizer to handle double quotes in quoted field.
  [#8283]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix a bug in ``io.fits`` with writing Fortran-ordered arrays to file
  objects. [#8282]

astropy.units
^^^^^^^^^^^^^

- Add support for ``np.matmul`` as a ``ufunc`` (new in numpy 1.16).
  [#8264, #8305]

astropy.utils
^^^^^^^^^^^^^

- Fix failures caused by IERS_A_URL being unavailable by introducing
  IERS_A_URL_MIRROR. [#8308]



Version 2.0.10 (2018-12-04)
===========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fix Moffat2DKernel's FWHM computation, which has an influence on the default
  size of the kernel when no size is given. [#8105]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Disable ``of_address`` usage due to Google API now requiring API key. [#7993]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``fits.append`` now correctly handles file objects with valid modes other
  than ``ostream``. [#7856]

astropy.table
^^^^^^^^^^^^^

- Fix ``Table.show_in_notebook`` failure when mixin columns are present. [#8069]

astropy.tests
^^^^^^^^^^^^^

- Explicitly disallow incompatible versions of ``pytest`` when using the test
  runner. [#8188]

astropy.units
^^^^^^^^^^^^^

- Fixed the spelling of the 'luminous emittance/illuminance' physical
  property. [#7942]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug that caused origin to be incorrect if not specified. [#7927]

- Fixed a bug that caused an error when plotting grids multiple times
  with grid_type='contours'. [#7927]

- Put an upper limit on the number of bins in ``hist`` and ``histogram`` and
  factor out calculation of bin edges into public function
  ``calculate_bin_edges``. [#7991]


Other Changes and Additions
---------------------------

- Fixing ``astropy.__citation__`` to provide the full bibtex entry of the 2018
  paper. [#8110]

- Pytest 4.0 is not supported by the 2.0.x LTS releases. [#8173]

- Updating bundled ``pytest-remotedata`` to v0.3.1. [#8174]

- Updating bundled ``pytest-doctestplus`` to v0.2.0. [#8175]

- Updating bundled ``pytest-openfiles`` to v0.3.0. [#8176]

- Adding ``warning_type`` keyword argument to the "deprecated" decorators to
  allow issuing custom warning types instead of the default
  ``AstropyDeprecationWarning``. [#8178]


Version 2.0.9 (2018-10-14)
==========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix reading of big files with the fast reader. [#7885]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``HDUList.__contains__()`` now works with ``HDU`` arguments. That is,
  ``hdulist[0] in hdulist`` now works as expected. [#7282]

- ``HDUList`` s can now be written to streams in Python 3 [#7850]

astropy.nddata
^^^^^^^^^^^^^^

- Fixed the bug in CCData.read when the HDU is not specified and the first one
  is empty so the function searches for the first HDU with data which may not
  have an image extension. [#7739]

astropy.stats
^^^^^^^^^^^^^

- Fixed bugs in biweight statistics functions where a constant data
  array (or if using the axis keyword, constant along an axis) would
  return NaN. [#7737]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug in ``to_pandas()`` where integer type masked columns were always
  getting converted to float. This could cause loss of precision. Now this only
  occurs if there are actually masked data values, in which case ``pandas``
  does require the values to be float so that ``NaN`` can be used to mark the
  masked values. [#7741, #7747]

astropy.tests
^^^^^^^^^^^^^

- Change the name of the configuration variable controlling the location of the
  Astropy cache in the Pytest plugin from ``cache_dir`` to
  ``astropy_cache_dir``. The command line flag also changed to
  ``--astropy-cache-dir``.  This prevents a conflict with the ``cache_dir``
  variable provided by pytest itself. Also made similar change to
  ``config_dir`` option as a precaution. [#7721]

astropy.units
^^^^^^^^^^^^^

- ``UnrecognizedUnit`` instances can now be compared to any other object
  without raising `TypeError`. [#7606]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fix compatibility with Matplotlib 3.0. [#7839]

- Fix an issue that caused a crash when using WCSAxes with a custom Transform
  object and when using ``grid_type='contours'`` to plot a grid. [#7846]

astropy.wcs
^^^^^^^^^^^

- Instead of raising an error ``astropy.wcs`` now returns the input when
  the input has zero size.                                       [#7746]

- Fix ``malloc(0)`` bug in ``pipeline_all_pixel2world()`` and
  ``pipeline_pix2foc()``. They now raise an exception for input with
  zero coordinates, i.e. shape = (0, n). [#7806]

- Fixed an issue with scalar input when WCS.naxis is one. [#7858]

Other Changes and Additions
---------------------------

- Added a new ``astropy.__citation__`` attribute which gives a citation
  for Astropy in bibtex format. Made sure that both this and
  ``astropy.__bibtex__`` works outside the source environment, too. [#7718]



Version 2.0.8 (2018-08-02)
==========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Correct data type conversion for non-float masked kernels. [#7542]

- Fix non-float or masked, zero sum kernels when ``normalize_kernel=False``.
  Non-floats would yield a type error and masked kernels were not being filled.
  [#7541]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ensure that relative humidities can be given as Quantities, rather than take
  any quantity and just strip its unit. [#7668]

astropy.nddata
^^^^^^^^^^^^^^

- Fixed ``Cutout2D`` output WCS NAXIS values to reflect the cutout
  image size. [#7552]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug in ``add_columns`` method where ``rename_duplicate=True`` would
  cause an error if there were no duplicates. [#7540]

astropy.tests
^^^^^^^^^^^^^

- Fixed bug in ``python setup.py test --coverage`` on Windows machines. [#7673]

astropy.time
^^^^^^^^^^^^

- Avoid rounding errors when converting ``Quantity`` to ``TimeDelta``. [#7625]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug that caused the position of the tick values in decimal mode
  to be incorrectly determined. [#7332]

astropy.wcs
^^^^^^^^^^^

- Fixed a bug that caused ``wcs_to_celestial_frame``, ``skycoord_to_pixel``, and
  ``pixel_to_skycoord`` to raise an error if the axes of the celestial WCS were
  swapped. [#7691]


Version 2.0.7 (2018-06-01)
==========================

Bug Fixes
---------

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed ``Tabular`` models to not change the shape of data. [#7411]

astropy.stats
^^^^^^^^^^^^^

- In ``freedman_bin_width``, if the data has too small IQR,
  raise ``ValueError``. [#7248, #7402]

astropy.table
^^^^^^^^^^^^^

- Fix a performance issue in ``MaskedColumn`` where initialization was
  extremely slow for large arrays with the default ``mask=None``. [#7422]

- Fix printing table row indexed with unsigned integer. [#7469]

- Fix copy of mask when copying a Table, as this is no more done systematically
  by Numpy since version 1.14. Also fixed a problem when MaskedColumn was
  initialized with ``mask=np.ma.nomask``. [#7486]

astropy.time
^^^^^^^^^^^^

- Fixed a bug in Time that raised an error when initializing a subclass of Time
  with a Time object. [#7453]

astropy.utils
^^^^^^^^^^^^^

- Fixed a bug that improperly handled unicode case of URL mirror in Python 2.
  [#7493]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug that prevented legends from being added to plots done with
  units. [#7510]


Other Changes and Additions
---------------------------

- Bundled ``pytest-remotedata`` plugin is upgraded to 0.3. [#7493]


Version 2.0.6 (2018-04-23)
==========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- convolve(boundary=None) requires the kernel to be smaller than the image.
  This was never actually checked, it now is and an exception is raised.
  [#7313]

astropy.units
^^^^^^^^^^^^^

- ``u.quantity_input`` no longer errors if the return annotation for a
  function is ``None``. [#7336, #7380]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Explicitly default to origin='lower' in WCSAxes. [#7331]

- Lists of units are now converted in the Matplotlib unit converter. This means
  that for Matplotlib versions later than 2.2, more plotting functions now work
  with units (e.g. errorbar). [#7037]


Other Changes and Additions
---------------------------

- Updated the bundled CFITSIO library to 3.44. This is to remedy another
  critical security vulnerability that was identified by NASA. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information. [#7370]


Version 2.0.5 (2018-03-12)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Add a workaround for a bug in the einsum function in Numpy 1.14.0. [#7187]

- Fix problems with printing ``Angle`` instances under numpy 1.14.1. [#7234]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed the ``fitsdiff`` script for matching fits file with one in a
  directory path. [#7085]

- Make sure that lazily-loaded ``HDUList`` is automatically loaded when calling
  ``hdulist.pop``. [#7186]

astropy.modeling
^^^^^^^^^^^^^^^^

- Propagate weights to underlying fitter in ``FittingWithOutlierRemoval`` [#7249]

astropy.tests
^^^^^^^^^^^^^

- Support dotted package names as namespace packages when gathering test
  coverage. [#7170]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Matplotlib axes have the ``axisbelow`` property to control the z-order of
  ticks, tick labels, and grid lines. WCSAxes will now respect this property.
  This is useful for drawing scale bars or inset boxes, which should have a
  z-order that places them above all ticks and gridlines. [#7098]


Other Changes and Additions
---------------------------

- Updated the bundled CFITSIO library to 3.430. This is to remedy a critical
  security vulnerability that was identified by NASA. See
  ``cextern/cfitsio/docs/changes.txt`` for additional information. [#7274, #7275]


Version 2.0.4 (2018-02-06)
==========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed IndexError when ``preserve_nan=True`` in ``convolve_fft``. Added
  testing with ``preserve_nan=True``. [#7000]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``sites.json`` file is now parsed explicitly with a UTF-8 encoding. This
  means that future revisions to the file with unicode observatory names can
  be done without breaking the site registry parser.  [#7082]

- Working around a bug in Numpy 1.14.0 that broke some coordinate
  transformations. [#7105]

- Fixed a bug where negative angles could be rounded wrongly when converting
  to a string with seconds omitted. [#7148]

astropy.io.fits
^^^^^^^^^^^^^^^

- When datafile is missing, fits.tabledump uses input file name to build
  output file name. Fixed how it gets input file name from HDUList. [#6976]

- Fix in-place updates to scaled columns. [#6956]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Fixed bug in identifying inherited registrations from multiple ancestors [#7156]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a bug in ``LevMarLSQFitter`` when fitting 2D models with constraints. [#6705]

astropy.utils
^^^^^^^^^^^^^

- ``download_file`` function will check for cache downloaded from mirror URL
  first before attempting actual download if primary URL is unavailable. [#6987]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed test failures for ``astropy.visualization.wcsaxes`` which were due to
  local matplotlibrc files being taken into account. [#7132]


Other Changes and Additions
---------------------------

- Fixed broken links in the documentation. [#6745]

- Substantial performance improvement (potentially >1000x for some cases) when
  converting non-scalar ``coordinates.Angle`` objects to strings. [#7004]


Version 2.0.3 (2017-12-13)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ecliptic frame classes now support attributes ``v_x``, ``v_y``, ``v_z`` when
  using with a Cartesian representation. [#6569]

- Added a nicer error message when accidentally calling ``frame.representation``
  instead of ``frame.data`` in the context of methods that use ``._apply()``.
  [#6561]

- Creating a new ``SkyCoord`` from a list of multiple ``SkyCoord`` objects now
  yield the correct type of frame, and works at all for non-equatorial frames.
  [#6612]

- Improved accuracy of velocity calculation in ``EarthLocation.get_gcrs_posvel``.
  [#6699]

- Improved accuracy of radial velocity corrections in
  ``SkyCoord.radial_velocity_correction```. [#6861]

- The precision of ecliptic frames is now much better, after removing the
  nutation from the rotation and fixing the computation of the position of the
  Sun. [#6508]

astropy.extern
^^^^^^^^^^^^^^

- Version 0.2.1 of ``pytest-astropy`` is included as an external package.
  [#6918]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix writing the result of ``fitsdiff`` to file with ``--output-file``. [#6621]

- Fix a minor bug where ``FITS_rec`` instances can not be indexed with tuples
  and other sequences that end up with a scalar. [#6955, #6966]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fix ``ImportError`` when ``hdf5`` is imported first in a fresh Python
  interpreter in Python 3. [#6604, #6610]

astropy.nddata
^^^^^^^^^^^^^^

- Suppress errors during WCS creation in CCDData.read(). [#6500]

- Fixed a problem with ``CCDData.read`` when the extension wasn't given and the
  primary HDU contained no ``data`` but another HDU did. In that case the header
  were not correctly combined. [#6489]

astropy.stats
^^^^^^^^^^^^^

- Fixed an issue where the biweight statistics functions would
  sometimes cause runtime underflow/overflow errors for float32 input
  arrays. [#6905]

astropy.table
^^^^^^^^^^^^^

- Fixed a problem when printing a table when a column is deleted and
  garbage-collected, and the format function caching mechanism happens
  to re-use the same cache key. [#6714]

- Fixed a problem when comparing a unicode masked column (on left side) to
  a bytes masked column (on right side). [#6899]

- Fixed a problem in comparing masked columns in bytes and unicode when the
  unicode had masked entries. [#6899]

astropy.tests
^^^^^^^^^^^^^

- Fixed a bug that causes tests for rst files to not be run on certain
  platforms. [#6555, #6608]

- Fixed a bug that caused the doctestplus plugin to not work nicely with the
  hypothesis package. [#6605, #6609]

- Fixed a bug that meant that the data.astropy.org mirror could not be used when
  using --remote-data=astropy. [#6724]

- Support compatibility with new ``pytest-astropy`` plugins. [#6918]

- When testing, astropy (or the package being tested) is now installed to
  a temporary directory instead of copying the build. This allows
  entry points to work correctly. [#6890]

astropy.time
^^^^^^^^^^^^

- Initialization of Time instances now is consistent for all formats to
  ensure that ``-0.5 <= jd2 < 0.5``. [#6653]

astropy.units
^^^^^^^^^^^^^

- Ensure that ``Quantity`` slices can be set with objects that have a ``unit``
  attribute (such as ``Column``). [#6123]

astropy.utils
^^^^^^^^^^^^^

- ``download_files_in_parallel`` now respects the given ``timeout`` value.
  [#6658]

- Fixed bugs in remote data handling and also in IERS unit test related to path
  URL, and URI normalization on Windows. [#6651]

- Fixed a bug that caused ``get_pkg_data_fileobj`` to not work correctly when
  used with non-local data from inside packages. [#6724]

- Make sure ``get_pkg_data_fileobj`` fails if the URL can not be read, and
  correctly falls back on the mirror if necessary. [#6767]

- Fix the ``finddiff`` option in ``find_current_module`` to properly deal
  with submodules. [#6767]

- Fixed ``pyreadline`` import in ``utils.console.isatty`` for older IPython
  versions on Windows. [#6800]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed the vertical orientation of the ``fits2bitmap`` output bitmap
  image to match that of the FITS image. [#6844, #6969]

- Added a workaround for a bug in matplotlib so that the ``fits2bitmap``
  script generates the correct output file type. [#6969]


Other Changes and Additions
---------------------------

- No longer require LaTeX to build the documentation locally and
  use mathjax instead. [#6701]

- Ensured that all tests use the Astropy data mirror if needed. [#6767]


Version 2.0.2 (2017-09-08)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ensure transformations via ICRS also work for coordinates that use cartesian
  representations. [#6440]

- Fixed a bug that was preventing ``SkyCoord`` objects made from lists of other
  coordinate objects from being written out to ECSV files. [#6448]

astropy.io.fits
^^^^^^^^^^^^^^^

- Support the ``GZIP_2`` FITS image compression algorithm as claimed
  in docs. [#6486]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed a bug that wrote out VO table as version 1.2 instead of 1.3. [#6521]

astropy.table
^^^^^^^^^^^^^

- Fix a bug when combining unicode columns via join or vstack.  The character
  width of the output column was a factor of 4 larger than needed. [#6459]

astropy.tests
^^^^^^^^^^^^^

- Fixed running the test suite using --parallel. [#6415]

- Added error handling for attempting to run tests in parallel without having
  the ``pytest-xdist`` package installed. [#6416]

- Fixed issue running doctests with pytest>=3.2. [#6423, #6430]

- Fixed issue caused by antivirus software in response to malformed compressed
  files used for testing. [#6522]

- Updated top-level config file to properly ignore top-level directories.
  [#6449]

astropy.units
^^^^^^^^^^^^^

- Quantity._repr_latex_ now respects precision option from numpy
  printoptions. [#6412]

astropy.utils
^^^^^^^^^^^^^

- For the ``deprecated_renamed_argument`` decorator, refer to the deprecation‘s
  caller instead of ``astropy.utils.decorators``, to makes it easier to find
  where the deprecation warnings comes from. [#6422]


Version 2.0.1 (2017-07-30)
==========================

Bug Fixes
---------

astropy.constants
^^^^^^^^^^^^^^^^^

- Fixed Earth radius to be the IAU2015 value for the equatorial radius.
  The polar value had erroneously been used in 2.0. [#6400]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added old frame attribute classes back to top-level namespace of
  ``astropy.coordinates``. [#6357]

astropy.io.fits
^^^^^^^^^^^^^^^

- Scaling an image always uses user-supplied values when given. Added
  defaults for scaling when bscale/bzero are not present (float images).
  Fixed a small bug in when to reset ``_orig_bscale``. [#5955]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a bug in initializing compound models with units. [#6398]

astropy.nddata
^^^^^^^^^^^^^^

- Updating CCDData.read() to be more flexible with inputs, don't try to
  delete keywords that are missing from the header. [#6388]

astropy.tests
^^^^^^^^^^^^^
- Fixed the test command that is run from ``setuptools`` to allow it to
  gracefully handle keyboard interrupts and pass them on to the ``pytest``
  subprocess. This prompts ``pytest`` to teardown and display useful traceback
  and test information [#6369]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Ticks and tick labels are now drawn in front of, rather than behind,
  gridlines in WCS axes. This improves legibility in situations where
  tick labels may be on the interior of the axes frame, such as the right
  ascension axis of an all-sky Aitoff or Mollweide projection. [#6361]

astropy.wcs
^^^^^^^^^^^

- Fix the missing wcskey part in _read_sip_kw, this will cause error when
  reading sip wcs while there is no default CRPIX1 CRPIX2 keywords and only
  CRPIX1n CRPIX2n in header. [#6372]



Version 2.0 (2017-07-07)
========================

New Features
------------

astropy.constants
^^^^^^^^^^^^^^^^^

- Constants are now organized into version modules, with physical CODATA
  constants in the ``codata2010`` and ``codata2014`` sub-modules,
  and astronomical constants defined by the IAU in the ``iau2012`` and
  ``iau2015`` sub-modules. The default constants in ``astropy.constants``
  in Astropy 2.0 have been updated from ``iau2012`` to ``iau2015`` and
  from ``codata2010`` to ``codata2014``. The constants for 1.3 can be
  accessed in the ``astropyconst13`` sub-module and the constants for 2.0
  (the default in ``astropy.constants``) can also be accessed in the
  ``astropyconst20`` sub-module [#6083]

- The GM mass parameters recommended by IAU 2015 Resolution B 3 have been
  added as ``GM_sun``, ``GM_jup``, and ``GM_earth``, for the Sun,
  Jupiter and the Earth. [#6083]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Major change in convolution behavior and keyword arguments. Additional
  details are in the API section. [#5782]

- Convolution with un-normalized and un-normalizable kernels is now possible.
  [#5782]

- Add a new argument, ``normalization_rtol``, to ``convolve_fft``, allowing
  the user to specify the relative error tolerance in the normalization of
  the convolution kernel. [#5649, #5177]

- Models can now be convoluted using ``convolve`` or ``convolve_fft``,
  which generates a regular compound model. [#6015]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Frame attributes set on ``SkyCoord`` are now always validated, and any
  ndarray-like operation (like slicing) will also be done on those. [#5751]

- Caching of  all possible frame attributes was implemented. This greatly
  speeds up many ``SkyCoord`` operations. [#5703, #5751]

- A class hierarchy was added to allow the representation layer to store
  differentials (i.e., finite derivatives) of coordinates.  This is intended
  to enable support for velocities in coordinate frames. [#5871]

- ``replicate_without_data`` and ``replicate`` methods were added to
  coordinate frames that allow copying an existing frame object with various
  reference or copy behaviors and possibly overriding frame attributes. [#6182]

- The representation class instances can now contain differential objects.
  This is primarily useful for internal operations that will provide support
  for transforming velocity components in coordinate frames. [#6169]

- ``EarthLocation.to_geodetic()`` (and ``EarthLocation.geodetic``) now return
  namedtuples instead of regular tuples. [#6237]

- ``EarthLocation`` now has ``lat`` and ``lon`` properties (equivalent to, but
  preferred over, the previous ``latitude`` and ``longitude``). [#6237]

- Added a ``radial_velocity_correction`` method to ``SkyCoord`` to do compute
  barycentric and heliocentric velocity corrections. [#5752]

- Added a new ``AffineTransform`` class for coordinate frame transformations.
  This class supports matrix operations with vector offsets in position or
  any differential quantities (so far, only velocity is supported). The
  matrix transform classes now subclass from the base affine transform.
  [#6218]

- Frame objects now have experimental support for velocity components. Most
  frames default to accepting proper motion components and radial velocity,
  and the velocities transform correctly for any transformation that uses
  one of the ``AffineTransform``-type transformations.  For other
  transformations a finite-difference velocity transformation is available,
  although it is not as numerically stable as those that use
  ``AffineTransform``-type transformations. [#6219, #6226]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Allow to specify encoding in ``ascii.read``, only for Python 3 and with the
  pure-Python readers. [#5448]

- Writing latex tables with only a ``tabular`` environment is now possible by
  setting ``latexdict['tabletyle']`` to ``None``. [#6205]

- Allow ECSV format to support reading and writing mixin columns like
  ``Time``, ``SkyCoord``, ``Latitude``, and ``EarthLocation``. [#6181]

astropy.io.fits
^^^^^^^^^^^^^^^

- Checking available disk space before writing out file. [#5550, #4065]

- Change behavior to warn about units that are not FITS-compliant when
  writing a FITS file but not when reading. [#5675]

- Added absolute tolerance parameter when comparing FITS files. [#4729]

- New convenience function ``printdiff`` to print out diff reports. [#5759]

- Allow to instantiate a ``BinTableHDU`` directly from a ``Table`` object.
  [#6139]

astropy.io.misc
^^^^^^^^^^^^^^^

- YAML representer now also accepts numpy types. [#6077]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- New functions to unregister readers, writers, and identifiers. [#6217]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added ``SmoothlyBrokenPowerLaw1D`` model. [#5656]

- Add ``n_submodels`` shared method to single and compound models, which
  allows users to get the number of components of a given single (compound)
  model. [#5747]

- Added a ``name`` setter for instances of ``_CompoundModel``. [#5741]

- Added FWHM properties to Gaussian and Moffat models. [#6027]

- Added support for evaluating models and setting the results for inputs
  outside the bounding_box to a user specified ``fill_value``. This
  is controlled by a new optional boolean keyword ``with_bounding_box``. [#6081]

- Added infrastructure support for units on parameters and during
  model evaluation and fitting, added support for units on all
  functional, power-law, polynomial, and rotation models where this
  is appropriate. A new BlackBody1D model has been added.
  [#4855, #6183, #6204, #6235]

astropy.nddata
^^^^^^^^^^^^^^

- Added an image class, ``CCDData``. [#6173]

astropy.stats
^^^^^^^^^^^^^

- Added ``biweight_midcovariance`` function. [#5777]

- Added ``biweight_scale`` and ``biweight_midcorrelation``
  functions. [#5991]

- ``median_absolute_deviation`` and ``mad_std`` have ``ignore_nan`` option
  that will use ``np.ma.median`` with nans masked out or ``np.nanmedian``
  instead of ``np.median`` when computing the median. [#5232]

- Implemented statistical estimators for Ripley's K Function. [#5712]

- Added ``SigmaClip`` class. [#6206]

- Added ``std_ddof`` keyword option to ``sigma_clipped_stats``.
  [#6066, #6207]

astropy.table
^^^^^^^^^^^^^

- Issue a warning when assigning a string value to a column and
  the string gets truncated.  This can occur because numpy string
  arrays are fixed-width and silently drop characters which do not
  fit within the fixed width. [#5624, #5819]

- Added functionality to allow ``astropy.units.Quantity`` to be written
  as a normal column to FITS files. [#5910]

- Add support for Quantity columns (within a ``QTable``) in table
  ``join()``, ``hstack()`` and ``vstack()`` operations. [#5841]

- Allow unicode strings to be stored in a Table bytestring column in
  Python 3 using UTF-8 encoding.  Allow comparison and assignment of
  Python 3 ``str`` object in a bytestring column (numpy ``'S'`` dtype).
  If comparison with ``str`` instead of ``bytes`` is a problem
  (and ``bytes`` is really more logical), please open an issue on GitHub.
  [#5700]

- Added functionality to allow ``astropy.units.Quantity`` to be read
  from and written to a VOtable file. [#6132]

- Added support for reading and writing a table with mixin columns like
  ``Time``, ``SkyCoord``, ``Latitude``, and ``EarthLocation`` via the
  ASCII ECSV format. [#6181]

- Bug fix for ``MaskedColumn`` insert method, where ``fill_value`` attribute
  was not being passed along to the copy of the ``MaskedColumn`` that was
  returned. [#7585]

astropy.tests
^^^^^^^^^^^^^

- ``enable_deprecations_as_exceptions`` function now accepts additional
  user-defined module imports and warning messages to ignore. [#6223, #6334]

astropy.units
^^^^^^^^^^^^^

- The ``astropy.units.quantity_input`` decorator will now convert the output to
  the unit specified as a return annotation under Python 3. [#5606]

- Passing a logarithmic unit to the ``Quantity`` constructor now returns the
  appropriate logarithmic quantity class if ``subok=True``. For instance,
  ``Quantity(1, u.dex(u.m), subok=True)`` yields ``<Dex 1.0 dex(m)>``. [#5928]

- The ``quantity_input`` decorator now accepts a string physical type in
  addition to of a unit object to specify the expected input ``Quantity``'s
  physical type. For example, ``@u.quantity_input(x='angle')`` is now
  functionally the same as ``@u.quantity_input(x=u.degree)``. [#3847]

- The ``quantity_input`` decorator now also supports unit checking for
  optional keyword arguments and accepts iterables of units or physical types
  for specifying multiple valid equivalent inputs. For example,
  ``@u.quantity_input(x=['angle', 'angular speed'])`` or
  ``@u.quantity_input(x=[u.radian, u.radian/u.yr])`` would both allow either
  a ``Quantity`` angle or angular speed passed in to the argument ``x``.
  [#5653]

- Added a new equivalence ``molar_mass_amu`` between g/mol to
  atomic mass units. [#6040, #6113]

- ``Quantity`` has gained a new ``to_value`` method which returns the value
  of the quantity in a given unit. [#6127]

- ``Quantity`` now supports the ``@`` operator for matrix multiplication that
  was introduced in Python 3.5, for all supported versions of numpy. [#6144]

- ``Quantity`` supports the new ``__array_ufunc__`` protocol introduced in
  numpy 1.13.  As a result, operations that involve unit conversion will be
  sped up considerably (by up to a factor of two for costly operations such
  as trigonometric ones). [#2583]

astropy.utils
^^^^^^^^^^^^^

- Added a new ``dataurl_mirror`` configuration item in ``astropy.utils.data``
  that is used to indicate a mirror for the astropy data server. [#5547]

- Added a new convenience method ``get_cached_urls`` to ``astropy.utils.data``
  for getting a list of the URLs in your cache. [#6242]

astropy.wcs
^^^^^^^^^^^

- Upgraded the included wcslib to version 5.16. [#6225]

  The minimum required version of wcslib in is 5.14.


API Changes
-----------

astropy.analytic_functions
^^^^^^^^^^^^^^^^^^^^^^^^^^

- This entire sub-package is deprecated because blackbody has been moved to
  ``astropy.modeling.blackbody``. [#6191]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Major change in convolution behavior and keyword arguments.
  ``astropy.convolution.convolve_fft`` replaced ``interpolate_nan`` with
  ``nan_treatment``, and ``astropy.convolution.convolve`` received a new
  ``nan_treatment`` argument. ``astropy.convolution.convolve`` also no longer
  double-interpolates interpolates over NaNs, although that is now available
  as a separate ``astropy.convolution.interpolate_replace_nans`` function. See
  `the backwards compatibility note
  <https://docs.astropy.org/en/v2.0.16/convolution/index.html#a-note-on-backward-compatibility-pre-v2-0>`_
  for more on how to get the old behavior (and why you probably don't want to.)
  [#5782]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``astropy.coordinates.Galactic`` frame previously was had the cartesian
  ordering 'w', 'u', 'v' (for 'x', 'y', and 'z', respectively).  This was an
  error and against the common convention.  The 'x', 'y', and 'z' axes now
  map to 'u', 'v', and 'w', following the right-handed ('u' points to
  the Galactic center) convention. [#6330]

- Removed deprecated ``angles.rotation_matrix`` and
  ``angles.angle_axis``. Use the routines in
  ``coordinates.matrix_utilities`` instead. [#6170]

- ``EarthLocation.latitude`` and ``EarthLocation.longitude`` are now
  deprecated in favor of ``EarthLocation.lat`` and ``EarthLocation.lon``.
  They former will be removed in a future version. [#6237]

- The ``FrameAttribute`` class and subclasses have been renamed to just contain
  ``Attribute``. For example, ``QuantityFrameAttribute`` is now
  ``QuantityAttribute``. [#6300]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Cosmological models do not include any contribution from neutrinos or photons
  by default -- that is, the default value of Tcmb0 is 0.  This does not affect
  built in models (such as WMAP or Planck). [#6112]

astropy.io.fits
^^^^^^^^^^^^^^^

- Remove deprecated ``NumCode`` and ``ImgCode`` properties on FITS
  ``_ImageBaseHDU``.  Use module-level constants ``BITPIX2DTYPE`` and
  ``DTYPE2BITPIX`` instead. [#4993]

- ``comments`` meta key (which is ``io.ascii``'s table convention) is output
  to ``COMMENT`` instead of ``COMMENTS`` header. Similarly, ``COMMENT``
  headers are read into ``comments`` meta [#6097]

- Remove compatibility code which forced loading all HDUs on close. The old
  behavior can be used with ``lazy_load_hdus=False``. Because of this change,
  trying to access the ``.data`` attribute from an HDU which is not loaded
  now raises a ``IndexError`` instead of a ``ValueError``. [#6082]

- Deprecated ``clobber`` keyword; use ``overwrite``. [#6203]

- Add EXTVER column to the output of ``HDUList.info()``. [#6124]

astropy.modeling
^^^^^^^^^^^^^^^^

- Removed deprecated ``Redshift`` model; Use ``RedshiftScaleFactor``. [#6053]

- Removed deprecated ``Pix2Sky_AZP.check_mu`` and ``Pix2Sky_SZP.check_mu``
  methods. [#6170]

- Deprecated ``GaussianAbsorption1D`` model, as it can be better represented
  by subtracting ``Gaussian1D`` from ``Const1D``. [#6200]

- Added method ``sum_of_implicit_terms`` to ``Model``, needed when performing
  a linear fit to a model that has built-in terms with no corresponding
  parameters (primarily the ``1*x`` term of ``Shift``). [#6174]

astropy.nddata
^^^^^^^^^^^^^^

- Removed deprecated usage of parameter ``propagate_uncertainties`` as a
  positional keyword. [#6170]

- Removed deprecated ``support_correlated`` attribute. [#6170]

- Removed deprecated ``propagate_add``, ``propagate_subtract``,
  ``propagate_multiply`` and ``propagate_divide`` methods. [#6170]

astropy.stats
^^^^^^^^^^^^^

- Removed the deprecated ``sig`` and ``varfunc`` keywords in the
  ``sigma_clip`` function. [#5715]

- Added ``modify_sample_size`` keyword to ``biweight_midvariance``
  function. [#5991]

astropy.table
^^^^^^^^^^^^^

- In Python 3, when getting an item from a bytestring Column it is now
  converted to ``str``.  This means comparing a single item to a ``bytes``
  object will always fail, and instead one must compare with a ``str``
  object. [#5700]

- Removed the deprecated ``data`` property of Row. [#5729]

- Removed the deprecated functions ``join``, ``hstack``, ``vstack`` and
  ``get_groups`` from np_utils. [#5729]

- Added ``name`` parameter to method ``astropy.table.Table.add_column`` and
  ``names`` parameter to method ``astropy.table.Table.add_columns``, to
  provide the flexibility to add unnamed columns, mixin objects and also to
  specify explicit names. Default names will be used if not
  specified. [#5996]

- Added optional ``axis`` parameter to ``insert`` method for ``Column`` and
  ``MaskedColumn`` classes. [#6092]

astropy.units
^^^^^^^^^^^^^

- Moved ``units.cgs.emu`` to ``units.deprecated.emu`` due to ambiguous
  definition of "emu". [#4918, #5906]

- ``jupiterMass``, ``earthMass``, ``jupiterRad``, and ``earthRad`` no longer
  have their prefixed units included in the standard units.  If needed, they
  can still  be found in ``units.deprecated``. [#5661]

- ``solLum``,``solMass``, and ``solRad`` no longer have  their prefixed units
  included in the standard units.  If needed, they can still be found in
  ``units.required_by_vounit``, and are enabled by default. [#5661]

- Removed deprecated ``Unit.get_converter``. [#6170]

- Internally, astropy replaced use of ``.to(unit).value`` with the new
  ``to_value(unit)`` method, since this is somewhat faster. Any subclasses
  that overwrote ``.to``, should also overwrite ``.to_value`` (or
  possibly just the private ``._to_value`` method.  (If you did this,
  please let us know what was lacking that made this necessary!). [#6137]

astropy.utils
^^^^^^^^^^^^^

- Removed the deprecated compatibility modules for Python 2.6 (``argparse``,
  ``fractions``, ``gzip``, ``odict``, ``subprocess``) [#5975,#6157,#6164]

- Removed the deprecated ``zest.releaser`` machinery. [#6282]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Removed the deprecated ``scale_image`` function. [#6170]

astropy.vo
^^^^^^^^^^

- Cone Search now issues deprecation warning because it is moved to
  Astroquery 0.3.5 and will be removed from Astropy in a future version.
  [#5558, #5904]

- The ``astropy.vo.samp`` package has been moved to ``astropy.samp``, and no
  longer supports HTTPS/SSL. [#6201, #6213]

astropy.wcs
^^^^^^^^^^^

- Removed deprecated ``wcs.rotateCD``. [#6170]


Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Major change in convolution behavior and keyword arguments:
  ``astropy.convolution.convolve`` was not performing normalized convolution
  in earlier versions of astropy. [#5782]

- Direct convolution previously implemented the wrong definition of
  convolution.  This error only affects *asymmetric* kernels. [#6267]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``astropy.coordinates.Galactic`` frame had an incorrect ording for the
  'u', 'v', and 'w' cartesian coordinates. [#6330]

- The ``astropy.coordinates.search_around_sky``,
  ``astropy.coordinates.search_around_3d``, and ``SkyCoord`` equivalent methods
  now correctly yield an ``astropy.coordinates.Angle`` as the third return type
  even if there are no matches (previously it returned a raw Quantity). [#6347]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix an issue where the fast C-reader was dropping table comments for a
  table with no data lines. [#8274]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``comments`` meta key (which is ``io.ascii``'s table convention) is output
  to ``COMMENT`` instead of ``COMMENTS`` header. Similarly, ``COMMENT``
  headers are read into ``comments`` meta [#6097]

- Use more sensible fix values for invalid NAXISj header values. [#5935]

- Close file on error to avoid creating a ``ResourceWarning`` warning
  about an unclosed file. [#6168, #6177]

astropy.modeling
^^^^^^^^^^^^^^^^

- Creating a compound model where one of the submodels is
  a compound model whose parameters were changed now uses the
  updated parameters and not the parameters of the original model. [#5741]

- Allow ``Mapping`` and ``Identity`` to be fittable. [#6018]

- Gaussian models now impose positive ``stddev`` in fitting. [#6019]

- OrthoPolynomialBase (Chebyshev2D / Legendre2D) models were being evaluated
  incorrectly when part of a compound model (using the parameters from the
  original model), which in turn caused fitting to fail as a no-op. [#6085]

- Allow ``Ring2D`` to be defined using ``r_out``. [#6192]

- Make ``LinearLSQFitter`` produce correct results with fixed model
  parameters and allow ``Shift`` and ``Scale`` to be fitted with
  ``LinearLSQFitter`` and ``LevMarLSQFitter``. [#6174]

astropy.stats
^^^^^^^^^^^^^

- Allow to choose which median function is used in ``mad_std`` and
  ``median_absolute_deviation``. And allow to use these functions with
  a multi-dimensional ``axis``. [#5835]

- Fixed ``biweight_midvariance`` so that by default it returns a
  variance that agrees with the standard definition. [#5991]

astropy.table
^^^^^^^^^^^^^

- Fix a problem with vstack for bytes columns in Python 3. [#5628]

- Fix QTable add/insert row for multidimensional Quantity. [#6092]

astropy.time
^^^^^^^^^^^^

- Fixed the initial condition of ``TimeFITS`` to allow scale, FITS scale
  and FITS realization to be checked and equated properly. [#6202]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed a bug that caused the default WCS to return coordinates offset by
  one. [#6339]

astropy.vo
^^^^^^^^^^

- Fixed a bug in vo.samp when stopping a hub for which a lockfile was
  not created. [#6211]


Other Changes and Additions
---------------------------

- Numpy 1.7 and 1.8 are no longer supported. [#6006]

- Python 3.3 is no longer supported. [#6020]

- The bundled ERFA was updated to version 1.4.0. [#6239]

- The bundled version of pytest has now been removed, but the
  astropy.tests.helper.pytest import will continue to work properly.
  Affiliated packages should nevertheless transition to importing pytest
  directly rather than from astropy.tests.helper. This also means that
  pytest is now a formal requirement for testing for both Astropy and
  for affiliated packages. [#5694]


Version 1.3.3 (2017-05-29)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where ``StaticMatrixTransform`` erroneously copied frame
  attributes from the input coordinate to the output frame. In practice, this
  didn't actually affect any transforms in Astropy but may change behavior for
  users who explicitly used the ``StaticMatrixTransform`` in their own code.
  [#6045]

- Fixed ``get_icrs_coordinates`` to loop through all the urls in case one
  raises an exception. [#5864]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix table header not written out properly when ``fits.writeto()``
  convenience function is used. [#6042]

- Fix writing out read-only arrays. [#6036]

- Extension headers are written out properly when the ``fits.update()``
  convenience function is used. [#6058]

- Angstrom, erg, G, and barn are no more reported as deprecated FITS units.
  [#5929]

astropy.table
^^^^^^^^^^^^^

- Fix problem with Table pprint/pformat raising an exception for
  non-UTF-8 compliant bytestring data. [#6117]

astropy.units
^^^^^^^^^^^^^

- Allow strings 'nan' and 'inf' as Quantity inputs. [#5958]

- Add support for ``positive`` and ``divmod`` ufuncs (new in numpy 1.13).
  [#5998, #6020, #6116]

astropy.utils
^^^^^^^^^^^^^

- On systems that do not have ``pkg_resources`` non-numerical additions to
  version numbers like ``dev`` or ``rc1`` are stripped in ``minversion`` to
  avoid a ``TypeError`` in ``distutils.version.LooseVersion`` [#5944]

- Fix ``auto_download`` setting ignored in ``Time.ut1``. [#6033]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fix bug in ManualInterval which caused the limits to be returned incorrectly
  if set to zero, and fix defaults for ManualInterval in the presence of NaNs.
  [#6088]

- Get rid of warnings that occurred when slicing a cube due to the tick
  locator trying to find ticks for the sliced axis. [#6104]

- Accept normal Matplotlib keyword arguments in set_xlabel and set_ylabel
  functions. [#5686, #5692, #6060]

- Fix a bug that caused labels to be missing from frames with labels that
  could change direction mid-axis, such as EllipticalFrame. Also ensure
  that empty tick labels do not cause any warnings. [#6063]


Version 1.3.2 (2017-03-30)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ensure that checking equivalence of ``SkyCoord`` objects works with
  non-scalar attributes [#5884, #5887]

- Ensure that transformation to frames with multi-dimensional attributes
  works as expected [#5890, #5897]

- Make sure all ``BaseRepresentation`` objects can be output as strings.
  [#5889, #5897]

astropy.units
^^^^^^^^^^^^^

- Add support for ``heaviside`` ufunc (new in numpy 1.13). [#5920]

astropy.utils
^^^^^^^^^^^^^

- Fix to allow the C-based _fast_iterparse() VOTable XML parser to
  relloc() its buffers instead of overflowing them. [#5824, #5869]


Other Changes and Additions
---------------------------

- File permissions are revised in the released source distribution. [#5912]


Version 1.3.1 (2017-03-18)
==========================

New Features
------------

astropy.utils
^^^^^^^^^^^^^

- The ``deprecated_renamed_argument`` decorator got a new ``pending``
  parameter to suppress the deprecation warnings. [#5761]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Changed ``SkyCoord`` so that frame attributes which are not valid for the
  current ``frame`` (but are valid for other frames) are stored on the
  ``SkyCoord`` instance instead of the underlying ``frame`` instance (e.g.,
  setting ``relative_humidity`` on an ICRS ``SkyCoord`` instance.) [#5750]

- Ensured that ``position_angle`` and ``separation`` give correct answers for
  frames with different equinox (see #5722). [#5762]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix problem with padding bytes written for BinTable columns converted
  from unicode [#5280, #5287, #5288, #5296].

- Fix out-of-order TUNITn cards when writing tables to FITS. [#5720]

- Recognize PrimaryHDU when non boolean values are present for the
  'GROUPS' header keyword. [#5808]

- Fix the insertion of new keywords in compressed image headers
  (``CompImageHeader``). [#5866]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a problem with setting ``bounding_box`` on 1D models. [#5718]

- Fixed a broadcasting problem with weighted fitting of 2D models
  with ``LevMarLSQFitter``. [#5788]

- Fixed a problem with passing kwargs to fitters, specifically ``verblevel``. [#5815]

- Changed FittingWithOutlierRemoval to reject on the residual to the fit [#5831]

astropy.stats
^^^^^^^^^^^^^

- Fix the psd normalization for Lomb-Scargle periodograms in the presence
  of noise. [#5713]

- Fix bug in the autofrequency range when ``minimum_frequency`` is specified
  but ``maximum_frequency`` is not. [#5738]

- Ensure that a masked array is returned when sigma clipping fully masked
  data. [#5711]

astropy.table
^^^^^^^^^^^^^

- Fix problem where key for caching column format function was not
  sufficiently unique. [#5803]

- Handle sorting NaNs and masked values in jsviewer. [#4052, #5572]

- Ensure mixin columns can be added to a table using a scalar value for the
  right-hand side if the type supports broadcasting. E.g., for an existing
  ``QTable``, ``t['q'] = 3*u.m`` will now add a column as expected. [#5820]

- Fixes the bug of setting/getting values from rows/columns of a table using
  numpy array scalars. [#5772]

astropy.units
^^^^^^^^^^^^^

- Fixed problem where IrreducibleUnits could fail to unpickle. [#5868]

astropy.utils
^^^^^^^^^^^^^

- Avoid importing ``ipython`` in ``utils.console`` until it is necessary, to
  prevent deprecation warnings when importing, e.g., ``Column``. [#5755]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Avoid importing matplotlib.pyplot when importing
  astropy.visualization.wcsaxes. [#5680, #5684]

- Ignore Numpy warnings that happen in coordinate transforms in WCSAxes.
  [#5792]

- Fix compatibility issues between WCSAxes and Matplotlib 2.x. [#5786]

- Fix a bug that caused WCSAxes frame visual properties to not be copied
  over when resetting the WCS. [#5791]

astropy.extern
^^^^^^^^^^^^^^

- Fixed a bug where PLY was overwriting its generated files. [#5728]

Other Changes and Additions
---------------------------

- Fixed a deprecation warning that occurred when running tests with
  astropy.test(). [#5689]

- The deprecation of the ``clobber`` argument (originally deprecated in 1.3.0)
  in the ``io.fits`` write functions was changed to a "pending" deprecation
  (without displaying warnings) for now. [#5761]

- Updated bundled astropy-helpers to v1.3.1. [#5880]


Version 1.3 (2016-12-22)
========================

New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- The ``convolve`` and ``convolve_fft`` arguments now support a ``mask`` keyword,
  which allows them to also support ``NDData`` objects as inputs. [#5554]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added an ``of_address`` classmethod to ``EarthLocation`` to enable fast creation of
  ``EarthLocation`` objects given an address by querying the Google maps API [#5154].

- A new routine, ``get_body_barycentric_posvel`` has been added that allows
  one to calculate positions as well as velocities for solar system bodies.
  For JPL kernels, this roughly doubles the execution time, so if one requires
  only the positions, one should use ``get_body_barycentric``. [#5231]

- Transformations between coordinate systems can use the more accurate JPL
  ephemerides. [#5273, #5436]

- Arithmetic on representations, such as addition of two representations,
  multiplication with a ``Quantity``, or calculating the norm via ``abs``,
  has now become possible. Furthermore, there are new methods ``mean``,
  ``sum``, ``dot``, and ``cross``. For all these, the representations are
  treated as vectors in cartesian space (temporarily converting to
  ``CartesianRepresentation`` if necessary).  [#5301]
  has now become possible. Furthermore, there are news methods ``mean``,
  ``sum``, ``dot``, and ``cross`` with obvious meaning. [#5301]
  multiplication with a ``Quantity`` has now become possible. Furthermore,
  there are new methods ``norm``, ``mean``, ``sum``, ``dot``, and ``cross``.
  In all operations, the representations are treated as vectors. They are
  temporarily converted to ``CartesianRepresentation`` if necessary.  [#5301]

- ``CartesianRepresentation`` can be initialized with plain arrays by passing
  in a ``unit``. Furthermore, for input with a vector array, the coordinates
  no longer have to be in the first dimension, but can be at any ``xyz_axis``.
  To complement the latter, a new ``get_xyz(xyz_axis)`` method allows one to
  get a vector array out along a given axis. [#5439]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Files with "Fortran-style" columns (i.e. double-precision scientific notation
  with a character other than "e", like ``1.495978707D+13``) can now be parsed by
  the fast reader natively. [#5552]

- Allow round-tripping masked data tables in most formats by using an
  empty string ``''`` as the default representation of masked values
  when writing. [#5347]

- Allow reading HTML tables with unicode column values in Python 2.7. [#5410]

- Check for self-consistency of ECSV header column names. [#5463]

- Produce warnings when writing an IPAC table from an astropy table that
  contains metadata not supported by the IPAC format. [#4700]

astropy.io.fits
^^^^^^^^^^^^^^^

- "Lazy" loading of HDUs now occurs - when an HDU is requested, the file is
  only read up to the point where that HDU is found.  This can mean a
  substantial speedup when accessing files that have many HDUs. [#5065]

astropy.io.misc
^^^^^^^^^^^^^^^

- Added ``io.misc.yaml`` module to support serializing core astropy objects
  using the YAML protocol. [#5486]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Added ``delay_doc_updates`` contextmanager to postpone the formatting of
  the documentation for the ``read`` and ``write`` methods of the class to
  optionally reduce the import time. [#5275]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added a class to combine astropy fitters and functions to remove outliers
  e. g., sigma clip. [#4760]

- Added a ``Tabular`` model. [#5105]

- Added ``Hermite1D`` and ``Hermite2D`` polynomial models [#5242]

- Added the injection of EntryPoints into astropy.modeling.fitting if
  they inherit from Fitters class. [#5241]

- Added bounding box to ``Lorentz1D`` and ``MexicanHat1D`` models. [#5393]

- Added ``Planar2D`` functional model. [#5456]

- Updated ``Gaussian2D`` to accept no arguments (will use default x/y_stddev
  and theta). [#5537]

astropy.nddata
^^^^^^^^^^^^^^

- Added ``keep`` and ``**kwargs`` parameter to ``support_nddata``. [#5477]

astropy.stats
^^^^^^^^^^^^^

- Added ``axis`` keyword to ``biweight_location`` and
  ``biweight_midvariance``. [#5127, #5158]

astropy.table
^^^^^^^^^^^^^

- Allow renaming mixin columns. [#5469]

- Support generalized value formatting for mixin columns in tables. [#5274]

- Support persistence of table indices when pickling and copying table. [#5468]

astropy.tests
^^^^^^^^^^^^^

- Install both runtime and test dependencies when running the
  ./setup.py test command. These dependencies are specified by the
  install_requires and tests_require keywords via setuptools. [#5092]

- Enable easier subclassing of the TestRunner class. [#5505]

astropy.time
^^^^^^^^^^^^

- ``light_travel_time`` can now use more accurate JPL ephemerides. [#5273, #5436]

astropy.units
^^^^^^^^^^^^^

- Added ``pixel_scale`` and ``plate_scale`` equivalencies. [#4987]

- The ``spectral_density`` equivalency now supports transformations of
  luminosity density. [#5151]

- ``Quantity`` now accepts strings consisting of a number and unit such
  as '10 km/s'. [#5245]

astropy.utils
^^^^^^^^^^^^^

- Added a new decorator: ``deprecated_renamed_argument``. This can be used to
  rename a function argument, while it still allows for the use of the older
  argument name. [#5214]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added a ``make_lupton_rgb`` function to generate color images from three
  greyscale images, following the algorithm of Lupton et al. (2004). [#5535]

- Added ``data`` and ``interval`` inputs to the ``ImageNormalize``
  class. [#5206]

- Added a new ``simple_norm`` convenience function. [#5206]

- Added a default stretch for the ``Normalization`` class. [#5206].

- Added a default ``vmin/vmax`` for the ``ManualInterval`` class.
  [#5206].

- The ``wcsaxes`` subpackage has now been integrated in astropy as
  ``astropy.visualization.wcsaxes``.  This allows plotting of astronomical
  data/coordinate systems in Matplotlib. [#5496]

astropy.wcs
^^^^^^^^^^^

- Improved ``footprint_to_file``: allow to specify the coordinate system, and
  use by default the one from ``RADESYS``. Overwrite the file instead of
  appending to it. [#5494]


API Changes
-----------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- ``discretize_model`` now raises an exception if non-integer ranges are used.
  Previously it had incorrect behavior but did not raise an exception. [#5538]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``SkyCoord``, ``ICRS``, and other coordinate objects, as well as the
  underlying representations such as ``SphericalRepresentation`` and
  ``CartesianRepresentation`` can now be reshaped using methods named like the
  numpy ones for ``ndarray`` (``reshape``, ``swapaxes``, etc.)
  [#4123, #5254, #5482]

- The ``obsgeoloc`` and ``obsgeovel`` attributes of ``GCRS`` and
  ``PrecessedGeocentric`` frames are now stored and returned as
  ``CartesianRepresentation`` objects, rather than ``Quantity`` objects.
  Similarly, ``EarthLocation.get_gcrs_posvel`` now returns a tuple of
  ``CartesianRepresentation`` objects. [#5253]

- ``search_around_3d`` and ``search_around_sky`` now return units
  for the distance matching their input argument when no match is
  found, instead of ``dimensionless_unscaled``. [#5528]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- ASCII writers now accept an 'overwrite' argument.
  The default behavior is changed so that a warning will be
  issued when overwriting an existing file unless ``overwrite=True``.
  In a future version this will be changed from a warning to an
  exception to prevent accidentally overwriting a file. [#5007]

- The default representation of masked values when writing tables was
  changed from ``'--'`` to the empty string ``''``.  Previously any
  user-supplied ``fill_values`` parameter would overwrite the class
  default, but now the values are prepended to the class default. [#5347]

astropy.io.fits
^^^^^^^^^^^^^^^

- The old ``Header`` interface, deprecated since Astropy 0.1 (PyFITS 3.1), has
  been removed entirely. See :ref:`header-transition-guide` for explanations
  on this change and help on the transition. [#5310]

- The following functions, classes and methods have been removed:
  ``CardList``, ``Card.key``, ``Card.cardimage``, ``Card.ascardimage``,
  ``create_card``, ``create_card_from_string``, ``upper_key``,
  ``Header.ascard``, ``Header.rename_key``, ``Header.get_history``,
  ``Header.get_comment``, ``Header.toTxtFile``, ``Header.fromTxtFile``,
  ``new_table``, ``tdump``, ``tcreate``, ``BinTableHDU.tdump``,
  ``BinTableHDU.tcreate``.

- Removed ``txtfile`` argument to the ``Header`` constructor.

- Removed usage of ``Header.update`` with ``Header.update(keyword, value,
  comment)`` arguments.

- Removed ``startColumn`` and ``endColumn`` arguments to the ``FITS_record``
  constructor.

- The ``clobber`` argument in FITS writers has been renamed to
  ``overwrite``. This change affects the following functions and
  methods: ``tabledump``, ``writeto``, ``Header.tofile``,
  ``Header.totextfile``, ``_BaseDiff.report``,
  ``_BaseHDU.overwrite``, ``BinTableHDU.dump`` and
  ``HDUList.writeto``. [#5171]

- Added an optional ``copy`` parameter to ``fits.Header`` which controls if
  a copy is made when creating an ``Header`` from another ``Header``.
  [#5005, #5326]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- ``.fts`` and ``.fts.gz`` files will be automatically identified as
  ``io.fits`` files if no explicit ``format`` is given. [#5211]

- Added an optional ``readwrite`` parameter for ``get_formats`` to filter
  formats for read or write. [#5275]

astropy.modeling
^^^^^^^^^^^^^^^^

- ``Gaussian2D`` now raises an error if ``theta`` is set at the same time as
  ``cov_matrix`` (previously ``theta`` was silently ignored). [#5537]

astropy.table
^^^^^^^^^^^^^

- Setting an existing table column (e.g. ``t['a'] = [1, 2, 3]``) now defaults
  to *replacing* the column with a column corresponding to the new value
  (using ``t.replace_column()``) instead of doing an in-place update.  Any
  existing meta-data in the column (e.g. the unit) is discarded.  An
  in-place update is still done when the new value is not a valid column,
  e.g. ``t['a'] = 0``.  To force an in-place update use the pattern
  ``t['a'][:] = [1, 2, 3]``. [#5556]

- Allow ``collections.Mapping``-like ``data`` attribute when initializing a
  ``Table`` object (``dict``-like was already possible). [#5213]

astropy.tests
^^^^^^^^^^^^^

- The inputs to the ``TestRunner.run_tests()`` method now must be
  keyword arguments (no positional arguments).  This applies to the
  ``astropy.test()`` function as well. [#5505]

astropy.utils
^^^^^^^^^^^^^

- Renamed ``ignored`` context manager in ``compat.misc`` to ``suppress``
  to be consistent with https://bugs.python.org/issue19266 . [#5003]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Deprecated the ``scale_image`` function. [#5206]

- The ``mpl_normalize`` module (containing the ``ImageNormalize``
  class) is now automatically imported with the ``visualization``
  subpackage. [#5491]

astropy.vo
^^^^^^^^^^

- The ``clobber`` argument in ``VOSDatabase.to_json()`` has been
  renamed to ``overwrite``. [#5171]

astropy.wcs
^^^^^^^^^^^

- ``wcs.rotateCD()`` was deprecated without a replacement. [#5240]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Transformations between CIRS and AltAz now correctly account for the
  location of the observer. [#5591]

- GCRS frames representing a location on Earth with multiple obstimes are now
  allowed. This means that the solar system routines ``get_body``,
  ``get_moon`` and ``get_sun`` now work with non-scalar times and a
  non-geocentric observer. [#5253]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix issue with units or other astropy core classes stored in table meta.
  [#5605]

astropy.io.fits
^^^^^^^^^^^^^^^

- Copying a ``fits.Header`` using ``copy`` or ``deepcopy`` from the ``copy``
  module will use ``Header.copy`` to ensure that modifying the copy will
  not alter the other original Header and vice-versa. [#4990, #5323]

- ``HDUList.info()`` no longer raises ``AttributeError`` in presence of
  ``BZERO``. [#5508]

- Avoid exceptions with numpy 1.10 and up when using scaled integer data
  where ``BZERO`` has float type but integer value. [#4639, #5527]

- Converting a header card to a string now calls ``self.verify('fix+warn')``
  instead of ``self.verify('fix')`` so headers with invalid keywords will
  not raise a ``VerifyError`` on printing. [#887,#5054]

- ``FITS_Record._convert_ascii`` now converts blank fields to 0 when a
  non-blank null column value is set. [#5134, #5394]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- ``read`` now correctly raises an IOError if a file with an unknown
  extension can't be found, instead of raising IORegistryError:
  "Format could not be identified." [#4779]

astropy.time
^^^^^^^^^^^^

- Ensure ``Time`` instances holding a single ``delta_ut1_utc`` can be copied,
  flattened, etc. [#5225]

astropy.units
^^^^^^^^^^^^^

- Operations involving ``Angle`` or ``Distance``, or any other
  ``SpecificTypeQuantity`` instance, now also keep return an instance of the
  same type if the instance was the second argument (if the resulting unit
  is consistent with the specific type). [#5327]

- Inplace operations on ``Angle`` and ``Distance`` instances now raise an
  exception if the final unit is not equivalent to radian and meter, resp.
  Similarly, views as ``Angle`` and ``Distance`` can now only be taken
  from quantities with appropriate units, and views as ``Quantity`` can only
  be taken from logarithmic quanties such as ``Magnitude`` if the physical
  unit is dimensionless. [#5070]

- Conversion from quantities to logarithmic units now correctly causes a
  logarithmic quantity such as ``Magnitude`` to be returned. [#5183]


astropy.wcs
^^^^^^^^^^^

- SIP distortion for an alternate WCS is correctly initialized now by
  looking at the "CTYPE" values matching the alternate WCS. [#5443]

Other Changes and Additions
---------------------------

- The bundled ERFA was updated to version 1.3.0.  This includes the
  leap second planned for 2016 Dec 31.

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Initialization of ``Angle`` has been sped up for ``Quantity`` and ``Angle``
  input. [#4970]

- The use of ``np.matrix`` instances in the transformations has been
  deprecated, since this class does not allow stacks of matrices.  As a
  result, the semi-public functions ``angles.rotation_matrix`` and
  ``angles.angle_axis`` are also deprecated, in favour of the new routines
  with the same name in ``coordinates.matrix_utilities``. [#5104]

- A new ``BaseCoordinateFrame.cache`` dictionary has been created to expose
  the internal cache. This is useful when modifying representation data
  in-place without using ``realize_frame``. Additionally, documentation for
  in-place operations on coordinates were added. [#5575]

- Coordinates and their representations are printed with a slightly different
  format, following how numpy >= 1.12 prints structured arrays. [#5423]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The default cosmological model has been changed to Planck 2015,
  and the citation strings have been updated. [#5372]

astropy.extern
^^^^^^^^^^^^^^

- Updated the bundled ``six`` module to version 1.10.0. [#5521]

- Updated the astropy shipped version of ``PLY`` to version 3.9. [#5526]

- Updated the astropy shipped version of jQuery to v3.3.1, and dataTables
  to v1.10.12. [#5564]

astropy.io.fits
^^^^^^^^^^^^^^^

- Performance improvements for tables with many columns. [#4985]

- Removed obsolete code that was previously needed to properly
  implement the append mode. [#4793]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Reduced the time spent in the ``get_formats`` function. This also reduces
  the time it takes to import astropy subpackages, i.e.
  ``astropy.coordinates``. [#5262]

astropy.units
^^^^^^^^^^^^^

- The functions ``add_enabled_units``, ``set_enabled_equivalencies`` and
  ``add_enabled_equivalencies`` have been sped up by copying the current
  ``_UnitRegistry`` instead of building it from scratch. [#5306]

- To build the documentation, the ``build_sphinx`` command has been deprecated
  in favor of ``build_docs``. [#5179]

- The ``--remote-data`` option to ``python setup.py test`` can now take
  different arguments: ``--remote-data=none`` is the same as not specifying
  ``--remote-data`` (skip all tests that require the internet),
  ``--remote-data=astropy`` skips all tests that need remote data except those
  that require only data from data.astropy.org, and ``--remote-data=any`` is
  the same as ``--remote-data`` (run all tests that use remote data). [#5506]

- The pytest ``recwarn`` fixture has been removed from the tests in favor of
  ``utils.catch_warnings``. [#5489]

- Deprecated escape sequences in strings (Python 3.6) have been removed. [#5489]


Version 1.2.2 (2016-12-22)
==========================

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a bug where the ``fill_values`` parameter was ignored when writing a
  table to HTML format. [#5379]

astropy.io.fits
^^^^^^^^^^^^^^^

- Handle unicode FITS BinTable column names on Python 2 [#5204, #4805]

- Fix reading of float values from ASCII tables, that could be read as
  float32 instead of float64 (with the E and F formats). These values are now
  always read as float64. [#5362]

- Fixed memoryleak when using the compression module. [#5399, #5464]

- Able to insert and remove lower case HIERARCH keywords in a consistent
  manner [#5313, #5321]

astropy.stats
^^^^^^^^^^^^^

- Fixed broadcasting in ``sigma_clip`` when using negative ``axis``. [#4988]

astropy.table
^^^^^^^^^^^^^

- Assigning a logarithmic unit to a ``QTable`` column that did not have a
  unit yet now correctly turns it into the appropriate function quantity
  subclass (such as ``Magnitude`` or ``Dex``). [#5345]

- Fix default value for ``show_row_index`` in ``Table.show_in_browser``.
  [#5562]

astropy.units
^^^^^^^^^^^^^

- For inverse trig functions that operate on quantities, catch any warnings
  that occur from evaluating the function on the unscaled quantity value
  between __array_prepare__ and __array_wrap__. [#5153]

- Ensure ``!=`` also works for function units such as ``MagUnit`` [#5345]

astropy.wcs
^^^^^^^^^^^

- Fix use of the ``relax`` keyword in ``to_header`` when used to change the
  output precision. [#5164]

- ``wcs.to_header(relax=True)`` adds a "-SIP" suffix to ``CTYPE`` when SIP
  distortion is present in the WCS object. [#5239]

- Improved log messages in ``to_header``. [#5239]

Other Changes and Additions
---------------------------

- The bundled ERFA was updated to version 1.3.0.  This includes the
  leap second planned for 2016 Dec 31.

astropy.stats
^^^^^^^^^^^^^

- ``poisson_conf_interval`` with ``'kraft-burrows-nousek'`` interval is now
  faster and usable with SciPy versions < 0.14. [#5064, #5290]



Version 1.2.1 (2016-06-22)
==========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed a bug that caused TFIELDS to not be in the correct position in
  compressed image HDU headers under certain circumstances, which created
  invalid FITS files. [#5118, #5125]

astropy.units
^^^^^^^^^^^^^

- Fixed an  ``ImportError`` that occurred whenever ``astropy.constants`` was
  imported before ``astropy.units``. [#5030, #5121]

- Magnitude zero points used to define ``STmag``, ``ABmag``, ``M_bol`` and
  ``m_bol`` are now collected in ``astropy.units.magnitude_zero_points``.
  They are not enabled as regular units by default, but can be included
  using ``astropy.units.magnitude_zero_points.enable()``. This makes it
  possible to round-trip magnitudes as originally intended.  [#5030]

Version 1.2 (2016-06-19)
========================

General
-------

- Astropy now requires Numpy 1.7.0 or later. [#4784]

New Features
------------

astropy.constants
^^^^^^^^^^^^^^^^^

- Add ``L_bol0``, the luminosity corresponding to absolute bolometric
  magnitude zero. [#4262]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``CartesianRepresentation`` now includes a transform() method that can take
  a 3x3 matrix to transform coordinates. [#4860]

- Solar system and lunar ephemerides accessible via ``get_body``,
  ``get_body_barycentric`` and ``get_moon`` functions. [#4890]

- Added astrometric frames (i.e., a frame centered on a particular
  point/object specified in another frame). [#4909, #4941]

- Added ``SkyCoord.spherical_offsets_to`` method. [#4338]

- Recent Earth rotation (IERS) data are now auto-downloaded so that AltAz
  transformations for future dates now use the most accurate available
  rotation values. [#4436]

- Add support for heliocentric coordinate frames. [#4314]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- ``angular_diameter_distance_z1z2`` now supports the computation of
  the angular diameter distance between a scalar and an array like
  argument. [#4593] The method now supports models with negative
  Omega_k0 (positive curvature universes) [#4661] and allows z2 < z1.

astropy.io.ascii
^^^^^^^^^^^^^^^^

- File name could be passed as ``Path`` object. [#4606]

- Check that columns in ``formats`` specifier exist in the output table
  when writing. [#4508, #4511]

- Allow trailing whitespace in the IPAC header lines. [#4758]

- Updated to filter out the default parser warning of BeautifulSoup.
  [#4551]

- Added support for reading and writing reStructuredText simple tables.
  [#4812]

astropy.io.fits
^^^^^^^^^^^^^^^

- File name could be passed as ``Path`` object. [#4606]

- Header allows a dictionary-like cards argument during creation. [#4663]

- New function ``convenience.table_to_hdu`` to allow creating a FITS
  HDU object directly from an astropy ``Table``. [#4778]

- New optional arguments ``ignore_missing`` and ``remove_all`` are added
  to ``astropy.io.fits.header.remove()``. [#5020]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Added custom ``IORegistryError``. [#4833]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- File name could be passed as ``Path`` object. [#4606]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added the fittable=True attribute to the Scale and Shift models with tests. [#4718]

- Added example plots to docstrings for some built-in models. [#4008]

astropy.nddata
^^^^^^^^^^^^^^

- ``UnknownUncertainty`` new subclass of ``NDUncertainty`` that can be used to
  save uncertainties that cannot be used for error propagation. [#4272]

- ``NDArithmeticMixin``: ``add``, ``subtract``, ``multiply`` and ``divide``
  can be used as classmethods but require that two operands are given. These
  operands don't need to be NDData instances but they must be convertible to
  NDData. This conversion is done internally. Using it on the instance does
  not require (but also allows) two operands. [#4272, #4851]

- ``NDDataRef`` new subclass that implements ``NDData`` together with all
  currently available mixins. This class does not implement additional
  attributes, methods or a numpy.ndarray-like interface like ``NDDataArray``.
  attributes, methods or a numpy.ndarray-like interface like ``NDDataArray``.
  [#4797]

astropy.stats
^^^^^^^^^^^^^

- Added ``axis`` keyword for ``mad_std`` function. [#4688, #4689]

- Added Bayesian and Akaike Information Criteria. [#4716]

- Added Bayesian upper limits for Poisson count rates. [#4622]

- Added ``circstats``; a module for computing circular statistics. [#3705, #4472]

- Added ``jackknife`` resampling method. [#3708, #4439]

- Updated ``bootstrap`` to allow bootstrapping statistics with multiple
  outputs. [#3601]

- Added ``LombScargle`` class to compute Lomb-Scargle periodograms [#4811]

astropy.table
^^^^^^^^^^^^^

- ``Table.show_in_notebook`` and ``Table.show_in_browser(jsviewer=True)`` now
  yield tables with an "idx" column, allowing easy identification of the index
  of a row even when the table is re-sorted in the browser. [#4404]

- Added ``AttributeError`` when trying to set mask on non-masked table. [#4637]

- Allow to use a tuple of keys in ``Table.sort``.  [#4671]

- Added ``itercols``; a way to iterate through columns of a table. [#3805,
  #4888]

- ``Table.show_in_notebook`` and the default notebook display (i.e.,
  ``Table._repr_html_``) now use consistent table styles which can be set
  using the ``astropy.table.default_notebook_table_class`` configuration
  item. [#4886]

- Added interface to create ``Table`` directly from any table-like object
  that has an ``__astropy_table__`` method.  [#4885]

astropy.tests
^^^^^^^^^^^^^

- Enable test runner to obtain documentation source files from directory
  other than "docs". [#4748]

astropy.time
^^^^^^^^^^^^

- Added caching of scale and format transformations for improved performance.
  [#4422]

- Recent Earth rotation (IERS) data are now auto-downloaded so that UT1
  transformations for future times now work out of the box. [#4436]

- Add support for barycentric/heliocentric time corrections. [#4314]

astropy.units
^^^^^^^^^^^^^

- The option to use tuples to indicate fractional powers of units,
  deprecated in 0.3.1, has been removed. [#4449]

- Added slug to imperial units. [#4670]

- Added Earth radius (``R_earth``) and Jupiter radius (``R_jup``) to units.
  [#4818]

- Added a ``represents`` property to allow access to the definition of a
  named unit (e.g., ``u.kpc.represents`` yields ``1000 pc``). [#4806]

- Add bolometric absolute and apparent magnitudes, ``M_bol`` and ``m_bol``.
  [#4262]

astropy.utils
^^^^^^^^^^^^^

- ``Path`` object could be passed to ``get_readable_fileobj``. [#4606]

- Implemented a generic and extensible way of merging metadata. [#4459]

- Added ``format_doc`` decorator which allows to replace and/or format the
  current docstring of an object. [#4242]

- Added a new context manager ``set_locale`` to temporarily set the
  current locale. [#4363]

- Added new IERS_Auto class to auto-download recent IERS (Earth rotation)
  data when required by coordinate or time transformations. [#4436]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Add zscale interval based on Numdisplay's implementation. [#4776]

API changes
-----------

astropy.config
^^^^^^^^^^^^^^

- The deprecated ``ConfigurationItem`` and ``ConfigAlias`` classes and the
  ``save_config``, ``get_config_items``, and ``generate_all_config_items``
  functions have now been removed. [#2767, #4446]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Removed compatibility layer for pre-v0.4 API. [#4447]

- Added ``copy`` keyword-only argument to allow initialization without
  copying the (possibly large) input coordinate arrays. [#4883]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Improve documentation of z validity range of cosmology objects [#4882, #4949]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Add a way to control HTML escaping when writing a table as an HTML file. [#4423]

astropy.io.fits
^^^^^^^^^^^^^^^

- Two optional boolean arguments ``ignore_missing`` and ``remove_all`` are
  added to ``Header.remove``. [#5020]

astropy.modeling
^^^^^^^^^^^^^^^^

- Renamed ``Redshift`` model to ``RedshiftScaleFactor``. [#3672]

- Inputs (``coords`` and ``out``) to ``render`` function in ``Model`` are
  converted to float. [#4697]

- ``RotateNative2Celestial`` and ``RotateCelestial2Native`` are now
  implemented as subclasses of ``EulerAngleRotation``. [#4881, #4940]

astropy.nddata
^^^^^^^^^^^^^^

- ``NDDataBase`` does not set the private uncertainty property anymore. This
  only affects you if you subclass ``NDDataBase`` directly. [#4270]

- ``NDDataBase``: the ``uncertainty``-setter is removed. A similar one is
  added in ``NDData`` so this also only affects you if you subclassed
  ``NDDataBase`` directly. [#4270]

- ``NDDataBase``: ``uncertainty``-getter returns ``None`` instead of the
  private uncertainty and is now abstract. This getter is moved to
  ``NDData`` so it only affects direct subclasses of ``NDDataBase``. [#4270]

- ``NDData`` accepts a Quantity-like data and an explicitly given unit.
  Before a ValueError was raised in this case. The final instance will use the
  explicitly given unit-attribute but doesn't check if the units are
  convertible and the data will not be scaled. [#4270]

- ``NDData`` : the given mask, explicit or implicit if the data was masked,
  will be saved by the setter. It will not be saved directly as the private
  attribute. [#4879]

- ``NDData`` accepts an additional argument ``copy`` which will copy every
  parameter before it is saved as attribute of the instance. [#4270]

- ``NDData``: added an ``uncertainty.getter`` that returns the private
  attribute. It is equivalent to the old ``NDDataBase.uncertainty``-getter.
  [#4270]

- ``NDData``: added an ``uncertainty.setter``. It is slightly modified with
  respect to the old ``NDDataBase.uncertainty``-setter. The changes include:

- if the uncertainty has no uncertainty_type an info message is printed
  instead of a TypeError and the uncertainty is saved as
  ``UnknownUncertainty`` except the uncertainty is None. [#4270]

- the requirement that the uncertainty_type of the uncertainty needs to be a
  string was removed. [#4270]

- if the uncertainty is a subclass of NDUncertainty the parent_nddata
  attribute will be set so the uncertainty knows to which data it belongs.
  This is also a Bugfix. [#4152, #4270]

- ``NDData``: added a ``meta``-getter, which will set and return an empty
  OrderedDict if no meta was previously set. [#4509, #4469]

- ``NDData``: added an ``meta``-setter. It requires that the meta is
  dictionary-like (it also accepts Headers or ordered dictionaries and others)
  or None. [#4509, #4469, #4921]

- ``NDArithmeticMixin``: The operand in arithmetic methods (``add``, ...)
  doesn't need to be a subclass of ``NDData``. It is sufficient if it can be
  converted to one. This conversion is done internally. [#4272]

- ``NDArithmeticMixin``: The arithmetic methods allow several new arguments to
  control how or if different attributes of the class will be processed during
  the operation. [#4272]

- ``NDArithmeticMixin``: Giving the parameter ``propagate_uncertainties`` as
  positional keyword is deprecated and will be removed in the future. You now
  need to specify it as keyword-parameter. Besides ``True`` and ``False`` also
  ``None`` is now a valid value for this parameter. [#4272, #4851]

- ``NDArithmeticMixin``: The wcs attribute of the operands is not compared and
  thus raises no ValueError if they differ, except if a ``compare_wcs``
  parameter is specified. [#4272]

- ``NDArithmeticMixin``: The arithmetic operation was split from a general
  ``_arithmetic`` method to different specialized private methods to allow
  subclasses more control on how the attributes are processed without
  overriding ``_arithmetic``. The ``_arithmetic`` method is now used to call
  these other methods. [#4272]

- ``NDSlicingMixin``: If the attempt at slicing the mask, wcs or uncertainty
  fails with a ``TypeError`` a Warning is issued instead of the TypeError. [#4271]

- ``NDUncertainty``: ``support_correlated`` attribute is deprecated in favor of
  ``supports_correlated`` which is a property. Also affects
  ``StdDevUncertainty``. [#4272]

- ``NDUncertainty``: added the ``__init__`` that was previously implemented in
  ``StdDevUncertainty`` and takes an additional ``unit`` parameter. [#4272]

- ``NDUncertainty``: added a ``unit`` property without setter that returns the
  set unit or if not set the unit of the parent. [#4272]

- ``NDUncertainty``: included a ``parent_nddata`` property similar to the one
  previously implemented in StdDevUncertainty. [#4272]

- ``NDUncertainty``: added an ``array`` property with setter. The setter will
  convert the value to a plain numpy array if it is a list or a subclass of a
  numpy array. [#4272]

- ``NDUncertainty``: ``propagate_multiply`` and similar were removed. Before
  they were abstract properties and replaced by methods with the same name but
  with a leading underscore. The entry point for propagation is a method
  called ``propagate``. [#4272]

- ``NDUncertainty`` and subclasses: implement a representation (``__repr__``).
  [#4787]

- ``StdDevUncertainty``: error propagation allows an explicitly given
  correlation factor, which may be a scalar or an array which will be taken
  into account during propagation.
  This correlation must be determined manually and is not done by the
  uncertainty! [#4272]

- ``StdDevUncertainty``: the ``array`` is converted to a plain numpy array
  only if it's a list or a subclass of numpy.ndarray. Previously it was always
  cast to a numpy array but also allowed subclasses. [#4272]

- ``StdDevUncertainty``: setting the ``parent_nddata`` does not compare if the
  shape of it's array is identical to the parents data shape. [#4272]

- ``StdDevUncertainty``: the ``array.setter`` doesn't compare if the array has
  the same shape as the parents data. [#4272]

- ``StdDevUncertainty``: deprecated ``support_correlated`` in favor of
  ``supports_correlated``. [#4272, #4828]

- ``StdDevUncertainty``: deprecated ``propagate_add`` and similar methods in
  favor of ``propagate``. [#4272, #4828]

- Allow ``data`` to be a named argument in ``NDDataArray``. [#4626]

astropy.table
^^^^^^^^^^^^^

- ``operations.unique`` now has a ``keep`` parameter, which allows
  one to select whether to keep the first or last row in a set of
  duplicate rows, or to remove all rows that are duplicates. [#4632]

- ``QTable`` now behaves more consistently by making columns act as a
  ``Quantity`` even if they are assigned a unit after the table is
  created. [#4497, #4884]

astropy.units
^^^^^^^^^^^^^

- Remove deprecated ``register`` argument for Unit classes. [#4448]

astropy.utils
^^^^^^^^^^^^^

- The astropy.utils.compat.argparse module has now been deprecated. Use the
  Python 'argparse' module directly instead. [#4462]

- The astropy.utils.compat.odict module has now been deprecated. Use the
  Python 'collections' module directly instead. [#4466]

- The astropy.utils.compat.gzip module has now been deprecated. Use the
  Python 'gzip' module directly instead. [#4464]

- The deprecated ``ScienceStateAlias`` class has been removed. [#2767, #4446]

- The astropy.utils.compat.subprocess module has now been deprecated. Use the
  Python 'subprocess' module instead. [#4483]

- The astropy.utils.xml.unescaper module now also unescapes ``'%2F'`` to
  ``'/'`` and ``'&&'`` to ``'&'`` in a given URL. [#4699]

- The astropy.utils.metadata.MetaData descriptor has now two optional
  parameters: doc and copy. [#4921]

- The default IERS (Earth rotation) data now is now auto-downloaded via a
  new class IERS_Auto.  When extrapolating UT1-UTC or polar motion values
  outside the available time range, the values are now clipped at the last
  available value instead of being linearly extrapolated. [#4436]

astropy.wcs
^^^^^^^^^^^

- WCS objects can now be initialized with an ImageHDU or
  PrimaryHDU object. [#4493, #4505]

- astropy.wcs now issues an INFO message when the header has SIP coefficients but
  "-SIP" is missing from CTYPE. [#4814]

Bug fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Ameliorate a problem with ``get_sun`` not round-tripping due to
  approximations in the light deflection calculation. [#4952]

- Ensure that ``angle_utilities.position_angle`` accepts floats, as stated
  in the docstring. [#3800]

- Ensured that transformations for ``GCRS`` frames are correct for
  non-geocentric observers. [#4986]

- Fixed a problem with the ``Quantity._repr_latex_`` method causing errors
  when showing an ``EarthLocation`` in a Jupyter notebook. [#4542, #5068]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a problem where the fast reader (with use_fast_converter=False) can
  fail on non-US locales. [#4363]

- Fix astropy.io.ascii.read handling of units for IPAC formatted files.
  Columns with no unit are treated as unitless not dimensionless.
  [#4867, #4947]

- Fix problems the header parsing in the sextractor reader. [#4603, #4910]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``GroupsHDU.is_image`` property is now set to ``False``. [#4742]

- Ensure scaling keywords are removed from header when unsigned integer data
  is converted to signed type. [#4974, #5053]

- Made TFORMx keyword check more flexible in test of compressed images to
  enable compatibility of the test with cfitsio 3.380. [#4646, #4653]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- The astropy.io.votable.validator.html module is updated to handle division
  by zero when generating validation report. [#4699]

- KeyError when converting Table v1.2 numeric arrays fixed. [#4782]

astropy.modeling
^^^^^^^^^^^^^^^^

- Refactored ``AiryDisk2D``, ``Sersic1D``, and ``Sersic2D`` models
  to be able to combine them as classes as well as instances. [#4720]

- Modified the "LevMarLSQFitter" class to use the weights in the
  calculation of the Jacobian. [#4751]

astropy.nddata
^^^^^^^^^^^^^^

- ``NDData`` giving masked_Quantities as data-argument will use the
  implicitly passed mask, unit and value. [#4270]

- ``NDData`` using a subclass implementing ``NDData`` with
  ``NDArithmeticMixin`` now allows error propagation. [#4270]

- Fixed memory leak that happened when uncertainty of ``NDDataArray`` was
  set. [#4825, #4862]

- ``StdDevUncertainty``: During error propagation the unit of the uncertainty
  is taken into account. [#4272]

- ``NDArithmeticMixin``: ``divide`` and ``multiply`` yield correct
  uncertainties if only one uncertainty is set. [#4152, #4272]

astropy.stats
^^^^^^^^^^^^^

- Fix ``sigma_clipped_stats`` to use the ``axis`` argument. [#4726, #4808]

astropy.table
^^^^^^^^^^^^^

- Fixed bug where Tables created from existing Table objects were not
  inheriting the ``primary_key`` attribute. [#4672, #4930]

- Provide more detail in the error message when reading a table fails due to a
  problem converting column string values. [#4759]

astropy.units
^^^^^^^^^^^^^

- Exponentiation using a ``Quantity`` with a unit equivalent to dimensionless
  as base and an ``array``-like exponent yields the correct result. [#4770]

- Ensured that with ``spectral_density`` equivalency one could also convert
  between ``photlam`` and ``STmag``/``ABmag``. [#5017]

astropy.utils
^^^^^^^^^^^^^

- The astropy.utils.compat.fractions module has now been deprecated. Use the
  Python 'fractions' module directly instead. [#4463]

- Added ``format_doc`` decorator which allows to replace and/or format the
  current docstring of an object. [#4242]

- Attributes using the astropy.utils.metadata.MetaData descriptor are now
  included in the sphinx documentation. [#4921]

astropy.vo
^^^^^^^^^^

- Relaxed expected accuracy of Cone Search prediction test to reduce spurious
  failures. [#4382]

astropy.wcs
^^^^^^^^^^^

- astropy.wcs.to_header removes "-SIP" from CTYPE when SIP coefficients
  are not written out, i.e. ``relax`` is either ``False`` or ``None``.
  astropy.wcs.to_header appends "-SIP" to CTYPE when SIP coefficients
  are written out, i.e. ``relax=True``. [#4814]

- Made ``wcs.bounds_check`` call ``wcsprm_python2c``, which means it
  works even if ``wcs.set`` has not been called yet. [#4957, #4966].

- WCS objects can no longer be reverse-indexed, which was technically
  permitted but incorrectly implemented previously [#4962]

Other Changes and Additions
---------------------------

- Python 2.6 is no longer supported. [#4486]

- The bundled version of py.test has been updated to 2.8.3. [#4349]

- Reduce Astropy's import time (``import astropy``) by almost a factor 2. [#4649]

- Cython prerequisite for building changed to v0.19 in install.rst [#4705,
  #4710, #4719]

- All astropy.modeling functionality that was deprecated in Astropy 1.0 has
  been removed. [#4857]

- Added instructions for installing Astropy into CASA. [#4840]

- Added an example gallery to the docs demonstrating short
  snippets/examples. [#4734]


Version 1.1.2 (2016-03-10)
==========================

New Features
------------

astropy.wcs
^^^^^^^^^^^

- The ``astropy.wcs`` module now exposes ``WCSHDO_P*`` constants that can be
  used to allow more control over output precision when using the ``relax``
  keyword argument. [#4616]

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed handling of CDS data file when no description is given and also
  included stripping out of markup for missing value from description. [#4437, #4474]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed possible segfault during error handling in FITS tile
  compression. [#4489]

- Fixed crash on pickling of binary table columns with the 'X', 'P', or
  'Q' format. [#4514]

- Fixed memory / reference leak that could occur when copying a ``FITS_rec``
  object (the ``.data`` for table HDUs). [#520]

- Fixed a memory / reference leak in ``FITS_rec`` that occurred in a wide
  range of cases, especially after writing FITS tables to a file, but in
  other cases as well. [#4539]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fix a bug to allow instantiation of a modeling class having a parameter
  with a custom setter that takes two parameters ``(value, model)`` [#4656]

astropy.table
^^^^^^^^^^^^^

- Fixed bug when replacing a table column with a mixin column like
  Quantity or Time. [#4601]

- Disable initial ordering in jsviewer (``show_in_browser``,
  ``show_in_notebook``) to respect the order from the Table. [#4628]

astropy.units
^^^^^^^^^^^^^

- Fixed sphinx issues on plotting quantities. [#4527]

astropy.utils
^^^^^^^^^^^^^

- Fixed latex representation of function units. [#4563]

- The ``zest.releaser`` hooks included in Astropy are now injected locally to
  Astropy, rather than being global. [#4650]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed ``fits2bitmap`` script to allow ext flag to contain extension
  names or numbers. [#4468]

- Fixed ``fits2bitmap`` default output filename generation for
  compressed FITS files. [#4468]

- Fixed ``quantity_support`` to ensure its conversion returns ndarray
  instances (needed for numpy >=1.10). [#4654]

astropy.wcs
^^^^^^^^^^^

- Fixed possible exception in handling of SIP headers that was introduced in
  v1.1.1. [#4492]

- Fixed a bug that caused WCS objects with a high dynamic range of values for
  certain parameters to lose precision when converted to a header. This
  occurred for example in cases of spectral cubes, where a spectral axis in
  Hz might have a CRVAL3 value greater than 1e10 but the spatial coordinates
  would have CRVAL1/2 values 8 to 10 orders of magnitude smaller. This bug
  was present in Astropy 1.1 and 1.1.1 but not 1.0.x. This has now been fixed
  by ensuring that all WCS keywords are output with 14 significant figures by
  default. [#4616]

Other Changes and Additions
---------------------------

- Updated bundled astropy-helpers to v1.1.2. [#4678]

- Updated bundled copy of WCSLIB to 5.14. [#4579]


Version 1.1.1 (2016-01-08)
==========================

New Features
------------

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Allow ``pathlib.Path`` objects (available in Python 3.4 and later) for
  specifying the file name in registry read / write functions. [#4405]

astropy.utils
^^^^^^^^^^^^^

- ``console.human_file_size`` now accepts quantities with byte-equivalent
  units [#4373]

Bug Fixes
---------

astropy.analytic_functions
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Fixed the blackbody functions' handling of overflows on some platforms
  (Windows with MSVC, older Linux versions) with a buggy ``expm1`` function.
  [#4393]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed an bug where updates to string columns in FITS tables were not saved
  on Python 3. [#4452]

Other Changes and Additions
---------------------------

- Updated bundled astropy-helpers to v1.1.1. [#4413]


Version 1.1 (2015-12-11)
========================

New Features
------------

astropy.config
^^^^^^^^^^^^^^

- Added new tools ``set_temp_config`` and ``set_temp_cache`` which can be
  used either as function decorators or context managers to temporarily
  use alternative directories in which to read/write the Astropy config
  files and download caches respectively.  This is especially useful for
  testing, though ``set_temp_cache`` may also be used as a way to provide
  an alternative (application specific) download cache for large data files,
  rather than relying on the default cache location in users' home
  directories. [#3975]

astropy.constants
^^^^^^^^^^^^^^^^^

- Added the Thomson scattering cross-section. [#3839]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Added Moffat2DKernel. [#3965]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Added ``get_constellation`` function and ``SkyCoord.get_constellation``
  convenience method to determine the constellation that a coordinate
  is in. [#3758]

- Added ``PrecessedGeocentric`` frame, which is based on GCRS, but precessed
  to a specific requested mean equinox. [#3758]

- Added ``Supergalactic`` frame to support de Vaucouleurs supergalactic
  coordinates. [#3892]

- ``SphericalRepresentation`` now has a ``._unit_representation`` class attribute to specify
  an equivalent UnitSphericalRepresentation. This allows subclasses of
  representations to pair up correctly. [#3757]

- Added functionality to support getting the locations of observatories by
  name. See ``astropy.coordinates.EarthLocation.of_site``. [#4042]

- Added ecliptic coordinates, including ``GeocentricTrueEcliptic``,
  ``BarycentricTrueEcliptic``, and ``HeliocentricTrueEcliptic``. [#3749]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Add Planck 2015 cosmology [#3476]

- Distance calculations now > 20-40x faster for the supplied
  cosmologies due to implementing Cython scalar versions of
  ``FLRW.inv_efunc``.[#4127]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Automatically use ``guess=False`` when reading if the file ``format`` is
  provided and the format parameters are uniquely specified.  This update
  also removes duplicate format guesses to improve performance. [#3418]

- Calls to ascii.read() for fixed-width tables may now omit one of the keyword
  arguments ``col_starts`` or ``col_ends``. Columns will be assumed to begin and
  end immediately adjacent to each other. [#3657]

- Add a function ``get_read_trace()`` that returns a traceback of the
  attempted read formats for the last call to ``astropy.io.ascii.read``. [#3688]

- Supports LZMA decompression via ``get_readable_fileobj`` [#3667]

- Allow ``-`` character is Sextractor format column names. [#4168]

- Improve DAOphot reader to read multi-aperture files [#3535, #4207]

astropy.io.fits
^^^^^^^^^^^^^^^

- Support reading and writing from bzip2 compressed files. i.e. ``.fits.bz2``
  files. [#3789]

- Included a new command-line script called ``fitsinfo`` to display
  a summary of the HDUs in one or more FITS files. [#3677]

astropy.io.misc
^^^^^^^^^^^^^^^

- Support saving all meta information, description and units of tables and columns
  in HDF5 files [#4103]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- A new method was added to ``astropy.io.votable.VOTable``,
  ``get_info_by_id`` to conveniently find an ``INFO`` element by its
  ``ID`` attribute. [#3633]

- Instances in the votable tree now have better ``__repr__`` methods. [#3639]

astropy.logger.py
^^^^^^^^^^^^^^^^^

- Added log levels (e.g., DEBUG, INFO, CRITICAL) to ``astropy.log`` [#3947]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added a new ``Parameter.validator`` interface for setting a validation
  method on individual model parameters.  See the ``Parameter``
  documentation for more details. [#3910]

- The projection classes that are named based on the 3-letter FITS
  WCS projections (e.g. ``Pix2Sky_TAN``) now have aliases using
  longer, more descriptive names (e.g. ``Pix2Sky_Gnomonic``).
  [#3583]

- All of the standard FITS WCS projection types have been
  implemented in ``astropy.modeling.projections`` (by wrapping
  WCSLIB). [#3906]

- Added ``Sersic1D`` and ``Sersic2D`` model classes. [#3889]

- Added the Voigt profile to existing models. [#3901]

- Added ``bounding_box`` property and ``render_model`` function [#3909]

astropy.nddata
^^^^^^^^^^^^^^

- Added ``block_reduce`` and ``block_replicate`` functions. [#3453]

- ``extract_array`` now offers different options to deal with array
  boundaries [#3727]

- Added a new ``Cutout2D`` class to create postage stamp image cutouts
  with optional WCS propagation. [#3823]

astropy.stats
^^^^^^^^^^^^^

- Added ``sigma_lower`` and ``sigma_upper`` keywords to
  ``sigma_clip`` to allow for non-symmetric clipping. [#3595]

- Added ``cenfunc``, ``stdfunc``, and ``axis`` keywords to
  ``sigma_clipped_stats``. [#3792]

- ``sigma_clip`` automatically masks invalid input values (NaNs, Infs) before
  performing the clipping [#4051]

- Added the ``histogram`` routine, which is similar to ``np.histogram`` but
  includes several additional options for automatic determination of optimal
  histogram bins. Associated helper routines include ``bayesian_blocks``,
  ``friedman_bin_width``, ``scott_bin_width``, and ``knuth_bin_width``.
  This functionality was ported from the astroML library. [#3756]

- Added the ``bayesian_blocks`` routine, which implements a dynamic algorithm
  for locating change-points in various time series. [#3756]

- A new function ``poisson_conf_interval()`` was added to allow easy calculation
  of several standard formulae for the error bars on the mean of a Poisson variable
  estimated from a single sample.

astropy.table
^^^^^^^^^^^^^

- ``add_column()`` and ``add_columns()`` now have ``rename_duplicate``
  option to rename new column(s) rather than raise exception when its name
  already exists. [#3592]

- Added ``Table.to_pandas`` and ``Table.from_pandas`` for converting to/from
  pandas dataframes. [#3504]

- Initializing a ``Table`` with ``Column`` objects no longer requires
  that the column ``name`` attribute be defined. [#3781]

- Added an ``info`` property to ``Table`` objects which provides configurable
  summary information about the table and its columns. [#3731]

- Added an ``info`` property to column classes (``Column`` or mixins).  This
  serves a dual function of providing configurable summary information about
  the column, and acting as a manager of column attributes such as
  name, format, or description. [#3731]

- Updated table and column representation to use the ``dtype_info_name``
  function for the dtype value.  Removed the default "masked=False"
  from the table representation. [#3868, #3869]

- Updated row representation to be consistent with the corresponding
  table representation for that row.  Added HTML representation so a
  row displays nicely in IPython notebook.

- Added a new table indexing engine allowing for the creation of
  indices on one or more columns of a table using ``add_index``. These
  indices enable new functionality such as searching for rows by value
  using ``loc`` and ``iloc``, as well as increased performance for
  certain operations. [#3915, #4202]

- Added capability to include a structured array or recarray in a table
  as a mixin column.  This allows for an approximation of nested tables.
  [#3925]

- Added ``keep_byteorder`` option to ``Table.as_array()``.  See the
  "API Changes" section below. [#4080]

- Added a new method ``Table.replace_column()`` to replace an existing
  column with a new data column. [#4090]

- Added a ``tableclass`` option to ``Table.pformat()`` to allow specifying
  a list of CSS classes added to the HTML table. [#4131]

- New CSS for jsviewer table [#2917, #2982, #4174]

- Added a new ``Table.show_in_notebook`` method that shows an interactive view
  of a Table (similar to ``Table.show_in_browser(jsviewer=True)``) in an
  Python/Jupyter notebook. [#4197]

- Added column alignment formatting for better pprint viewing
  experience. [#3644]

astropy.tests
^^^^^^^^^^^^^

- Added new test config options, ``config_dir`` and ``cache_dir``  (these
  can be edited in ``setup.cfg`` or as extra command-line options to
  py.test) for setting the locations to use for the Astropy config files
  and download caches (see also the related ``set_temp_config/cache``
  features added in ``astropy.config``). [#3975]

astropy.time
^^^^^^^^^^^^

- Add support for FITS standard time strings. [#3547]

- Allow the ``format`` attribute to be updated in place to change the
  default representation of a ``Time`` object. [#3673]

- Add support for shape manipulation (reshape, ravel, etc.). [#3224]

- Add argmin, argmax, argsort, min, max, ptp, sort methods. [#3681]

- Add ``Time.to_datetime`` method for converting ``Time`` objects to
  timezone-aware datetimes. [#4119, #4124]

astropy.units
^^^^^^^^^^^^^

- Added furlong to imperial units. [#3529]

- Added mil to imperial units. [#3716]

- Added stone to imperial units. [#4192]

- Added Earth Mass (``M_earth``) and Jupiter mass (``M_jup``) to units [#3907]

- Added support for functional units, in particular the logarithmic ones
  ``Magnitude``, ``Decibel``, and ``Dex``. [#1894]

- Quantities now work with the unit support in matplotlib.  See
  :ref:`plotting-quantities`. [#3981]

- Clarified imperial mass measurements and added pound force (lbf),
  kilopound (kip), and pound per square inch (psi). [#3409]

astropy.utils
^^^^^^^^^^^^^

- Added new ``OrderedDescriptor`` and ``OrderedDescriptorContainer`` utility
  classes that make it easier to implement classes with declarative APIs,
  wherein class-level attributes have an inherit "ordering" to them that is
  specified by the order in which those attributes are defined in the class
  declaration (by defining them using special descriptors that have
  ``OrderedDescriptor`` as a base class).  See the API documentation for
  these classes for more details. Coordinate frames and models now use this
  interface. [#3679]

- The ``get_pkg_data_*`` functions now take an optional ``package`` argument
  which allows specifying any package to read package data filenames or
  content out of, as opposed to only being able to use data from the package
  that the function is called from. [#4079]

- Added function ``dtype_info_name`` to the ``data_info`` module to provide
  the name of a ``dtype`` for human-readable informational purposes. [#3868]

- Added ``classproperty`` decorator--this is to ``property`` as
  ``classmethod`` is to normal instance methods. [#3982]

- ``iers.open`` now handles network URLs, as well as local paths. [#3850]

- The ``astropy.utils.wraps`` decorator now takes an optional
  ``exclude_args`` argument not shared by the standard library ``wraps``
  decorator (as it is unique to the Astropy version's ability of copying
  the wrapped function's argument signature).  ``exclude_args`` allows
  certain arguments on the wrapped function to be excluded from the signature
  of the wrapper function.  This is particularly useful when wrapping an
  instance method as a function (to exclude the ``self`` argument). [#4017]

- ``get_readable_fileobj`` can automatically decompress LZMA ('.xz')
  files using the ``lzma`` module of Python 3.3+ or, when available, the
  ``backports.lzma`` package on earlier versions. [#3667]

- The ``resolve_name`` utility now accepts any number of additional
  positional arguments that are automatically dotted together with the
  first ``name`` argument. [#4083]

- Added ``is_url_in_cache`` for resolving paths to cached files via URLS
  and checking if files exist. [#4095]

- Added a ``step`` argument to the ``ProgressBar.map`` method to give
  users control over the update frequency of the progress bar. [#4191]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Added a function / context manager ``quantity_support`` for enabling
  seamless plotting of ``Quantity`` instances in matplotlib. [#3981]

- Added the ``hist`` function, which is similar to ``plt.hist`` but
  includes several additional options for automatic determination of optimal
  histogram bins. This functionality was ported from the astroML library.
  [#3756]

astropy.wcs
^^^^^^^^^^^

- The included version of wcslib has been upgraded to 5.10. [#3992, #4239]

  The minimum required version of wcslib in the 4.x series remains 4.24.

  The minimum required version of wcslib in the 5.x series is
  5.8.  Building astropy against a wcslib 5.x prior to 5.8
  will raise an ``ImportError`` when ``astropy.wcs`` is imported.

  The wcslib changes relevant to astropy are:

- The FITS headers returned by ``astropy.wcs.WCS.to_header`` and
  ``astropy.wcs.WCS.to_header_string`` now include values with
  more precision.  This will result in numerical differences in
  your results if you convert ``astropy.wcs.WCS`` objects to FITS
  headers and use the results.

- ``astropy.wcs.WCS`` now recognises the ``TPV``, ``TPD``,
  ``TPU``, ``DSS``, ``TNX`` and ``ZPX`` polynomial distortions.

- Added relaxation flags to allow ``PC0i_0ja``, ``PV0j_0ma``, and
  ``PS0j_0ma`` (i.e. with leading zeroes on the index).

- Tidied up error reporting, particularly relating to translating
  status returns from lower-level functions.

- Changed output formatting of floating point values in
  ``to_header``.

- Enhanced text representation of ``WCS`` objects. [#3604]

- The ``astropy.tests.helper`` module is now part of the public API (and has a
  documentation page).  This module was in previous releases of astropy,
  but was not considered part of the public API until now. [#3890]

- There is a new function ``astropy.online_help`` to search the
  astropy documentation and display the result in a web
  browser. [#3642]

API changes
-----------

astropy.cosmology
^^^^^^^^^^^^^^^^^

- ``FLRW._tfunc`` and ``FLRW._xfunc`` are marked as deprecated.  Users
  should use the new public interfaces ``FLRW.lookback_time_integrand``
  and ``FLRW.abs_distance_integrand`` instead. [#3767]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- The default header line processing was made to be consistent with data line
  processing in that it now ignores blank lines that may have whitespace
  characters.  Any code that explicitly specifies a ``header_start`` value
  for parsing a file with blank lines in the header containing whitespace will
  need to be updated. [#2654]

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``uint`` argument to ``fits.open`` is now True by default; that is,
  arrays using the FITS unsigned integer convention will be detected, and
  read as unsigned integers by default.  A new config option for
  ``io.fits``, ``enable_uint``, can be changed to False to revert to the
  original behavior of ignoring the ``uint`` convention unless it is
  explicitly requested with ``uint=True``. [#3916]

- The ``ImageHDU.NumCode`` and ``ImageHDU.ImgCode`` attributes (and same
  for other classes derived from ``_ImageBaseHDU``) are deprecated.  Instead,
  the ``astropy.io.fits`` module-level constants ``BITPIX2DTYPE`` and
  ``DTYPE2BITPIX`` can be used. [#3916]

astropy.modeling
^^^^^^^^^^^^^^^^

- Note: Comparisons of model parameters with array-like values now
  yields a Numpy boolean array as one would get with normal Numpy
  array comparison.  Previously this returned a scalar True or False,
  with True only if the comparison was true for all elements compared,
  which could lead to confusing circumstances. [#3912]

- Using ``model.inverse = None`` to reset a model's inverse to its
  default is deprecated.  In the future this syntax will explicitly make
  a model not have an inverse (even if it has a default).  Instead, use
  ``del model.inverse`` to reset a model's inverse to its default (if it
  has a default, otherwise this just deletes any custom inverse that has
  been assigned to the model and is still equivalent to setting
  ``model.inverse = None``). [#4236]

- Adds a ``model.has_user_inverse`` attribute which indicates whether or not
  a user has assigned a custom inverse to ``model.inverse``.  This is just
  for informational purposes, for example, for software that introspects
  model objects. [#4236]

- Renamed the parameters of ``RotateNative2Celestial`` and
  ``RotateCelestial2Native`` from ``phi``, ``theta``, ``psi`` to
  ``lon``, ``lat`` and ``lon_pole``. [#3578]

- Deprecated the ``Pix2Sky_AZP.check_mu`` and ``Sky2Pix_AZP.check_mu``
  methods (these were obscure "accidentally public" methods that were
  probably not used by anyone). [#3910]

- Added a phase parameter to the Sine1D model. [#3807]

astropy.stats
^^^^^^^^^^^^^

- Renamed the ``sigma_clip`` ``sig`` keyword as ``sigma``. [#3595]

- Changed the ``sigma_clip`` ``varfunc`` keyword to ``stdfunc``. [#3595]

- Renamed the ``sigma_clipped_stats`` ``mask_val`` keyword to
  ``mask_value``. [#3595]

- Changed the default ``iters`` keyword value to 5 in both the
  ``sigma_clip`` and ``sigma_clipped_stats`` functions. [#4067]

astropy.table
^^^^^^^^^^^^^

- ``Table.as_array()`` always returns a structured array with each column in
  the system's native byte order.  The optional ``keep_byteorder=True``
  option will keep each column's data in its original byteorder. [#4080]

- ``Table.simple_table()`` now creates tables with int64 and float64 types
  instead of int32 and float64. [#4114]

- An empty table can now be initialized without a ``names`` argument as long
  as a valid ``dtype`` argument (with names embedded) is supplied. [#3977]

astropy.time
^^^^^^^^^^^^

- The ``astropy_time`` attribute and time format has been removed from the
  public interface.  Existing code that instantiates a new time object using
  ``format='astropy_time'`` can simply omit the ``format``
  specification. [#3857]

astropy.units
^^^^^^^^^^^^^

- Single-item ``Quantity`` instances with record ``dtype`` will now have
  their ``isscalar`` property return ``True``, consistent with behaviour for
  numpy arrays, where ``np.void`` records are considered scalar. [#3899]

- Three changes relating to the FITS unit format [#3993]:

- The FITS unit format will no longer parse an arbitrary number as a
  scale value.  It must be a power of 10 of the form ``10^^k``,
  ``10^k``, ``10+k``, ``10-k`` and ``10(k)``. [#3993]

- Scales that are powers of 10 can be written out.  Previously, any
  non-1.0 scale was rejected.

- The ``*`` character is accepted as a separator between the scale
  and the units.

- Unit formatter classes now require the ``parse`` and ``to_string``
  methods are now required to be classmethods (and the formatter
  classes themselves are assumed to be singletons that are not
  instantiated).  As unit formatters are mostly an internal implementation
  detail this is not likely to affect any users. [#4001]

- CGS E&M units are now defined separately from SI E&M units, and have
  distinct physical types. [#4255, #4355]

astropy.utils
^^^^^^^^^^^^^

- All of the ``get_pkg_data_*`` functions take an optional ``package``
  argument as their second positional argument.  So any code that previously
  passed other arguments to these functions as positional arguments might
  break.  Use keyword argument passing instead to mitigate this. [#4079]

- ``astropy.utils.iers`` now uses a ``QTable`` internally, which means that
  the numerical columns are stored as ``Quantity``, with full support for
  units.  Furthermore, the ``ut1_utc`` method now returns a ``Quantity``
  instead of a float or an array (as did ``pm_xy`` already). [#3223]

- ``astropy.utils.iers`` now throws an ``IERSRangeError``, a subclass
  of ``IndexError``, rather than a raw ``IndexError``.  This allows more
  fine-grained catching of situations where a ``Time`` is beyond the range
  of the loaded IERS tables. [#4302]

astropy.wcs
^^^^^^^^^^^

- When compiled with wcslib 5.9 or later, the FITS headers returned
  by ``astropy.wcs.WCS.to_header`` and
  ``astropy.wcs.WCS.to_header_string`` now include values with more
  precision.  This will result in numerical differences in your
  results if you convert ``astropy.wcs.WCS`` objects to FITS headers
  and use the results.

- If NAXIS1 or NAXIS2 is not passed with the header object to
  WCS.calc_footprint, a ValueError is raised. [#3557]

Bug fixes
---------

astropy.constants
^^^^^^^^^^^^^^^^^

- The constants ``Ry`` and ``u`` are now properly used inside the
  corresponding units.  The latter have changed slightly as a result. [#4229]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Internally, ``coordinates`` now consistently uses the appropriate time
  scales for using ERFA functions. [#4302]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a segfault in the fast C parser when one of the column headers
  is empty [#3545].

- Fix several bugs that prevented the fast readers from being used
  when guessing the file format.  Also improved the read trace
  information to better understand format guessing. [#4115]

- Fix an underlying problem that resulted in an uncaught TypeError
  exception when reading a CDS-format file with guessing enabled. [#4120]

astropy.modeling
^^^^^^^^^^^^^^^^

- ``Simplex`` fitter now correctly passes additional keywords arguments to
  the scipy solver. [#3966]

- The keyword ``acc`` (for accuracy) is now correctly accepted by
  ``Simplex``. [#3966]

astropy.units
^^^^^^^^^^^^^

- The units ``Ryd`` and ``u`` are no longer hard-coded numbers, but depend
  on the appropriate values in the ``constants`` module.  As a result, these
  units now imply slightly different conversions.  [#4229]

Other Changes and Additions
---------------------------

- The ``./setup.py test`` command is now implemented in the ``astropy.tests``
  module again (previously its implementation had been moved into
  astropy-helpers).  However, that made it difficult to synchronize changes
  to the Astropy test runner with changes to the ``./setup.py test`` UI.
  astropy-helpers v1.1 and above will detect this implementation of the
  ``test`` command, when present, and use it instead of the old version that
  was included in astropy-helpers (most users will not notice any difference
  as a result of this change). [#4020]

- The repr for ``Table`` no longer displays ``masked=False`` since tables
  are not masked by default anyway. [#3869]

- The version of ``PLY`` that ships with astropy has been updated to 3.6.

- WCSAxes is now required for doc builds. [#4074]

- The migration guide from pre-v0.4 coordinates has been removed to avoid
  cluttering the ``astropy.coordinates`` documentation with increasingly
  irrelevant material.  To see the migration guide, we recommend you simply look
  to the archived documentation for previous versions, e.g.
  https://docs.astropy.org/en/v1.0/coordinates/index.html#migrating-from-pre-v0-4-coordinates
  [#4203]

- In ``astropy.coordinates``, the transformations between GCRS, CIRS,
  and ITRS have been adjusted to more logically reflect the order in
  which they actually apply.  This should not affect most coordinate
  transformations, but may affect code that is especially sensitive to
  machine precision effects that change when the order in which
  transformations occur is changed. [#4255]

- Astropy v1.1.0 will be the last release series to officially support
  Python 2.6.  A deprecation warning will now be issued when using Astropy
  in Python 2.6 (this warning can be disabled through the usual Python warning
  filtering mechanisms). [#3779]


Version 1.0.13 (2017-05-29)
===========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix use of quantize level parameter for ``CompImageHDU``. [#6029]

- Prevent crash when a header contains non-ASCII (e.g. UTF-8) characters, to
  allow fixing the problematic cards. [#6084]


Version 1.0.12 (2017-03-05)
===========================

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed bug in ``discretize_integrate_2D`` in which x and y coordinates
  where swapped. [#5634]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where ``get_transform`` could sometimes produce confusing errors
  because of a typo in the input validation. [#5645]

astropy.io.fits
^^^^^^^^^^^^^^^

- Guard against extremely unlikely problems in compressed images, which
  could lead to memory unmapping errors. [#5775]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed a bug where stdlib ``realloc()`` was used instead of
  ``PyMem_Realloc()`` [#5696, #4739, #2100]

astropy.utils
^^^^^^^^^^^^^

- Fixed ImportError with NumPy < 1.7 and Python 3.x in
  ``_register_patched_dtype_reduce``. [#5848]


Version 1.0.11 (2016-12-22)
===========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Initialising a SkyCoord from a list containing a single SkyCoord no longer removes
  the distance from the coordinate. [#5270]

- Fix errors in the implementation of the conversion to and from FK4 frames
  without e-terms, which will have affected coordinates not on the unit
  sphere (i.e., with distances). [#4293]

- Fix bug where with cds units enabled it was no longer possible to initialize
  an ``Angle``. [#5483]

- Ensure that ``search_around_sky`` and ``search_around_3d`` return
  integer type index arrays for empty (non) matches. [#4877, #5083]

- Return an empty set of matches for ``search_around_sky`` and
  ``search_around_3d`` when one or both of the input coordinate
  arrays is empty. [#4875, #5083]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a bug with empty value at end of tab-delimited table on Windows. [#5370]

- Fix reading of big ASCII tables (more than 2Gb) with the fast reader.
  [#5319]

- Fix segfault with FastCsv and row with too many columns. [#5534]

- Fix problem reading an AASTex format table that does not have ``\\``
  at the end of the last table row. [#5427]

astropy.io.fits
^^^^^^^^^^^^^^^

- Removed raising of AssertionError that could occur after closing or
  deleting compressed image data. [#4690, #4694, #4948]

- Fixed bug that caused an ignored exception to be displayed under certain
  conditions when terminating a script after using fits.getdata(). [#4977]

- Fixed usage of inplace operations that were raising an exception with
  recent versions of Numpy due to implicit casting. [#5250]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed bug of ``Resource.__repr__()`` having undefined attributes and
  variables. [#5382]

astropy.modeling
^^^^^^^^^^^^^^^^

- CompoundModel now correctly inherits _n_models, allowing the use of model sets [#5358]

astropy.units
^^^^^^^^^^^^^

- Fixed bug in Ci definition. [#5106]

- Non-ascii cds unit strings are now correctly represented using ``str`` also
  on python2. This solves bugs in parsing coordinates involving strings too.
  [#5355]

- Ensure ``Quantity`` supports ``np.float_power``, which is new in numpy 1.12.
  [#5480]

astropy.utils
^^^^^^^^^^^^^

- Fixed AttributeError when calling ``utils.misc.signal_number_to_name`` with
  Python3 [#5430].

astropy.wcs
^^^^^^^^^^^

- Update the ``_naxis{x}`` attributes when calling ``WCS.slice``. [#5411]


Other Changes and Additions
---------------------------

- The bundled ERFA was updated to version 1.3.0.  This includes the
  leap second planned for 2016 Dec 31. [#5418]

Version 1.0.10 (2016-06-09)
===========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``SkyCoord`` objects created before a new frame which has frame attributes
  is created no longer raise ``AttributeError`` when the new attributes are
  accessed [#5021]

- Fix some errors in the implementation of aberration  for ``get_sun``. [#4979]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix problem reading a zero-length ECSV table with a bool type column. [#5010]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix convenience functions (``getdata``, ``getheader``, ``append``,
  ``update``) to close files. [#4786]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- The astropy.io.votable.validator.html module is updated to handle division
  by zero when generating validation report. [#4699]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug where ``pprint()`` sometimes raises ``UnicodeDecodeError``
  in Python 2. [#4946]

- Fix bug when doing outer join on multi-dimensional columns. [#4060]

- Fixed bug where Tables created from existing Table objects were not
  inheriting the ``primary_key`` attribute. [#4672]

astropy.tests
^^^^^^^^^^^^^

- Fix coverage reporting in Python 3. [#4822]

astropy.units
^^^^^^^^^^^^^

- Duplicates between long and short names are now removed in the ``names``
  and ``aliases`` properties of units. [#5036]

astropy.utils
^^^^^^^^^^^^^

- The astropy.utils.xml.unescaper module now also unescapes ``'%2F'`` to
  ``'/'`` and ``'&&'`` to ``'&'`` in a given URL. [#4699]

- Fix two problems related to the download cache: clear_download_cache() does
  not work in Python 2.7 and downloading in Python 2.7 and then Python 3
  can result in an exception. [#4810]

astropy.vo
^^^^^^^^^^

- Cache option now properly caches both downloaded JSON database and XML VO
  tables. [#4699]

- The astropy.vo.validator.conf.conesearch_urls listing is updated to reflect
  external changes to some VizieR Cone Search services. [#4699]

- VOSDatabase decodes byte-string to UTF-8 instead of ASCII to avoid
  UnicodeDecodeError for some rare cases. Fixed a Cone Search test that is
  failing as a side-effect of #4699. [#4757]

Other Changes and Additions
---------------------------

- Updated ``astropy.tests`` test runner code to work with Coverage v4.0 when
  generating test coverage reports. [#4176]


Version 1.0.9 (2016-03-10)
==========================

New Features
------------

astropy.nddata
^^^^^^^^^^^^^^

- ``NDArithmeticMixin`` check for matching WCS now works with
  ``astropy.wcs.WCS`` objects [#4499, #4503]

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Correct a bug in which ``psf_pad`` and ``fft_pad`` would be ignored [#4366]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed addition of new line characters after last row of data in
  ascii.latex.AASTex. [#4561]

- Fixed reading of Latex tables where the ``\tabular`` tag is in the first
  line. [#4595]

- Fix use of plain format strings with the fast writer. [#4517]

- Fix bug writing space-delimited file when table has empty fields. [#4417]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed possible segfault during error handling in FITS tile
  compression. [#4489]

- Fixed crash on pickling of binary table columns with the 'X', 'P', or
  'Q' format. [#4514]

- Fixed memory / reference leak that could occur when copying a ``FITS_rec``
  object (the ``.data`` for table HDUs). [#520]

- Fixed a memory / reference leak in ``FITS_rec`` that occurred in a wide
  range of cases, especially after writing FITS tables to a file, but in
  other cases as well. [#4539]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed display of compound model expressions and components when printing
  compound model instances. [#4414, #4482]

astropy.stats
^^^^^^^^^^^^^

- the input for median_absolute_deviation will not be cast to plain numpy
  arrays when given subclasses of numpy arrays
  (like Quantity, numpy.ma.MaskedArray, etc.) [#4658]

- Fixed incorrect results when using median_absolute_deviation with masked
  arrays. [#4658]

astropy.utils
^^^^^^^^^^^^^

- The ``zest.releaser`` hooks included in Astropy are now injected locally to
  Astropy, rather than being global. [#4650]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Fixed ``fits2bitmap`` script to allow ext flag to contain extension
  names or numbers. [#4468]

- Fixed ``fits2bitmap`` default output filename generation for
  compressed FITS files. [#4468]


Version 1.0.8 (2016-01-08)
==========================

Bug Fixes
---------

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed an bug where updates to string columns in FITS tables were not saved
  on Python 3. [#4452]

astropy.units
^^^^^^^^^^^^^

- In-place peak-to-peak calculations now work on ``Quantity``. [#4442]

astropy.utils
^^^^^^^^^^^^^

- Fixed ``find_api_page`` to work correctly on python 3.x [#4378, #4379]


Version 1.0.7 (2015-12-04)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Pickling of ``EarthLocation`` instances now also works on Python 2. [#4304]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix fast writer so bytestring column output is not prefixed by 'b' in
  Python 3. [#4350]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed a regression that could cause writes of large FITS files to be
  truncated. [#4307]

- Astropy v1.0.6 included a fix (#4228) for an obscure case where the TDIM
  of a table column is smaller than the repeat count of its data format.
  This updates that fix in such a way that it works with Numpy 1.10 as well.
  [#4266]

astropy.table
^^^^^^^^^^^^^

- Fix a bug when pickling a Table with mixin columns (e.g. Time). [#4098]

astropy.time
^^^^^^^^^^^^

- Fix incorrect ``value`` attribute for epoch formats like "unix"
  when ``scale`` is different from the class ``epoch_scale``. [#4312]

astropy.utils
^^^^^^^^^^^^^

- Fixed an issue where if ipython is installed but ipykernel is not
  installed then importing astropy from the ipython console gave an
  IPython.kernel deprecation warning. [#4279]

- Fixed crash that could occur in ``ProgressBar`` when ``astropy`` is
  imported in an IPython startup script. [#4274]

Other Changes and Additions
---------------------------

- Updated bundled astropy-helpers to v1.0.6. [#4372]


Version 1.0.6 (2015-10-22)
==========================

Bug Fixes
---------

astropy.analytic_functions
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Fixed blackbody analytic functions to properly support arrays of
  temperatures. [#4251]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed errors in transformations for objects within a few AU of the
  Earth.  Included substantive changes to transformation machinery
  that may change distances at levels ~machine precision for other
  objects. [#4254]

astropy.io.fits
^^^^^^^^^^^^^^^

- ``fitsdiff`` and related functions now do a better job reporting differences
  between values that are different types but have the same representation
  (ex: the string '0' versus the number 0). [#4122]

- Miscellaneous fixes for supporting Numpy 1.10. [#4228]

- Fixed an issue where writing a column of unicode strings to a FITS table
  resulted in a quadrupling of size of the column (i.e. the format of the
  FITS column was 4 characters for every one in the original strings).
  [#4228]

- Added support for an obscure case (but nonetheless allowed by the FITS
  standard) where a column has some TDIMn keyword, but a repeat count in
  the TFORMn column greater than the number of elements implied by the
  TDIMn.  For example TFORMn = 100I, but TDIMn = '(5,5)'.  In this case
  the TDIMn implies 5x5 arrays in the column, but the TFORMn implies
  a 100 element 1-D array in the column.  In this case the TDIM takes
  precedence, and the remaining bytes in the column are ignored. [#4228]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed crash with Python compiler optimization level = 2. [#4231]

astropy.vo
^^^^^^^^^^

- Fixed ``check_conesearch_sites`` with ``parallel=True`` on Python >= 3.3
  and on Windows (it was broken in both those cases for separate reasons).
  [#2970]

Other Changes and Additions
---------------------------

- All tests now pass against Numpy v1.10.x. This implies nominal support for
  Numpy 1.10.x moving forward (but there may still be unknown issues). For
  example, there is already a known performance issue with tables containing
  large multi-dimensional columns--for example, tables that contain entire
  images in one or more of their columns.  This is a known upstream issue in
  Numpy. [#4259]


Version 1.0.5 (2015-10-05)
==========================

Bug Fixes
---------

astropy.constants
^^^^^^^^^^^^^^^^^

- Rename units -> unit and error -> uncertainty in the ``repr`` and ``str``
  of constants to match attribute names. [#4147]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix string representation of ``SkyCoord`` objects transformed into
  the ``AltAz`` frame [#4055, #4057]

- Fix the ``search_around_sky`` function to allow ``storekdtree`` to be
  ``False`` as was intended. [#4082, #4212]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fix bug when extending one header (without comments) with another
  (with comments). [#3967]

- Somewhat improved resource usage for FITS data--previously a new ``mmap``
  was opened for each HDU of a FITS file accessed through an ``HDUList``.
  Each ``mmap`` used up a single file descriptor, causing problems with
  system resource limits for some users.  Now only a single ``mmap`` is
  opened, and shared for the data of all HDUs.  Note: The problem still
  persists with using the "convenience" functions.  For example using
  ``fits.getdata`` will create one ``mmap`` per HDU read this way (as
  opposed to opening the file with ``fits.open`` and accessing the HDUs
  through the ``HDUList`` object). [#4097]

- Fix bug where reading a file without a newline failed with an
  unrelated / unhelpful exception. [#4160]

astropy.modeling
^^^^^^^^^^^^^^^^

- Cleaned up ``repr`` of models that have no parameters. [#4076]

astropy.nddata
^^^^^^^^^^^^^^

- Initializing ``NDDataArray`` from another instance now sets ``flags`` as
  expected and no longer fails when ``uncertainty`` is set [#4129].
  Initializing an ``NDData`` subclass from a parent instance
  (eg. ``NDDataArray`` from ``NDData``) now sets the attributes other than
  ``data`` as it should [#4130, #4137].

astropy.table
^^^^^^^^^^^^^

- Fix an issue with setting fill value when column dtype is changed. [#4088]

- Fix bug when unpickling a bare Column where the _parent_table
  attribute was not set.  This impacted the Column representation. [#4099]

- Fix issue with the web browser opening with an empty page, and ensure that
  the url is correctly formatted for Windows. [#4132]

- Fix NameError in table stack exception message. [#4213]

astropy.utils
^^^^^^^^^^^^^

- ``resolve_name`` no longer causes ``sys.modules`` to be cluttered with
  additional copies of modules under a package imported like
  ``resolve_name('numpy')``. [#4084]

- ``console`` was updated to support IPython 4.x and Jupyter 1.x.
  This should suppress a ShimWarning that was appearing at
  import of astropy with IPython 4.0 or later. [#4078]

- Temporary downloaded files created by ``get_readable_fileobj`` when passed
  a URL are now deleted immediately after the file is closed. [#4198]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- The color for axes labels was set to white. Since white labels on white
  background are hard to read, the label color has been changed to black.
  [#4143]

- ``ImageNormalize`` now automatically determines ``vmin``/``vmax``
  (via the ``autoscale_None`` method) when they have not been set
  explicitly. [#4117]

astropy.vo
^^^^^^^^^^

- Cone Search validation no longer crashes when the provider gives an
  incomplete test query. It also ensures search radius for a test query
  is not too large to avoid timeout. [#4158, #4159]

Other Changes and Additions
---------------------------

- Astropy now supports Python 3.5. [#4027]

- Updated bundled version of astropy-helpers to 1.0.5. [#4215]

- Updated tests to support py.test 2.7, and upgraded the bundled copy of
  py.test to v2.7.3. [#4027]


Version 1.0.4 (2015-08-11)
==========================

New Features
------------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Modified Cython functions to release the GIL. This enables convolution
  to be parallelized effectively and gives large speedups when used with
  multithreaded task schedulers such as Dask. [#3949]

API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Some transformations for an input coordinate that's a scalar now correctly
  return a scalar.  This was always the intended behavior, but it may break
  code that has been written to work-around this bug, so it may be viewed as
  an unplanned API change [#3920, #4039]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- The ``astropy_mpl_style`` no longer sets ``interactive`` to ``True``, but
  instead leaves it at the user preference.  This makes using the style
  compatible with building docs with Sphinx, and other non-interactive
  contexts. [#4030]

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fix bug where coordinate representation setting gets reset to default value
  when coordinate array is indexed or sliced. [#3824]

- Fixed confusing warning message shown when using dates outside current IERS
  data. [#3844]

- ``get_sun`` now yields a scalar when the input time is a scalar (this was a
  regression in v1.0.3 from v1.0.2) [#3998, #4039]

- Fixed bug where some scalar coordinates were incorrectly being changed to
  length-1 array coordinates after transforming through certain frames.
  [#3920, #4039]

- Fixed bug causing the ``separation`` methods of ``SkyCoord`` and frame
  classes to fail due to infinite recursion [#4033, #4039]

- Made it so that passing in a list of ``SkyCoord`` objects that are in
  UnitSphericalRepresentation to the ``SkyCoord`` constructor appropriately
  yields a new object in UnitSphericalRepresentation [#3938, #4039]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Fixed wCDM to not ignore the Ob0 parameter on initialization. [#3934]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed crash when updating data in a random groups HDU opened in update
  mode. [#3730]

- Fixed incorrect checksum / datasum being written when re-writing a scaled
  HDU (i.e. non-trivial BSCALE and/or BZERO) with
  ``do_not_scale_image_data=False``. [#3883]

- Fixed stray deprecation warning in ``BinTableHDU.copy()``. [#3798]

- Better handling of the ``BLANK`` keyword when auto-scaling scaled image
  data.  The ``BLANK`` keyword is now removed from the header after
  auto-scaling is applied, and it is restored properly (with floating point
  NaNs replaced by the filler value) when updating a file opened with the
  ``scale_back=True`` argument.  Invalid usage of the ``BLANK`` keyword is
  also better warned about during validation. [#3865]

- Reading memmaped scaled images won't fail when
  ``do_not_scale_image_data=True`` (that is, since we're just reading the raw
  / physical data there is no reason mmap can't be used). [#3766]

- Fixed a reference cycle that could sometimes cause FITS table-related
  objects (``BinTableHDU``, ``ColDefs``, etc.) to hang around in memory
  longer than expected. [#4012]

astropy.modeling
^^^^^^^^^^^^^^^^

- Improved support for pickling of compound models, including both compound
  model instances, and new compound model classes. [#3867]

- Added missing default values for ``Ellipse2D`` parameters. [#3903]

astropy.time
^^^^^^^^^^^^

- Fixed iteration of scalar ``Time`` objects so that ``iter()`` correctly
  raises a ``TypeError`` on them (while still allowing ``Time`` arrays to be
  iterated). [#4048]

astropy.units
^^^^^^^^^^^^^

- Added frequency-equivalency check when declaring doppler equivalencies
  [#3728]

- Define ``floor_divide`` (``//``) for ``Quantity`` to be consistent
  ``divmod``, such that it only works where the quotient is dimensionless.
  This guarantees that ``(q1 // q2) * q2 + (q1 % q2) == q1``. [#3817]

- Fixed the documentation of supported units to correctly report support for
  SI prefixes.  Previously the table of supported units incorrectly showed
  several derived unit as not supporting prefixes, when in fact they do.
  [#3835]

- Fix a crash when calling ``astropy.units.cds.enable()``.  This will now
  "set" rather than "add" units to the active set to avoid the namespace
  clash with the default units. [#3873]

- Ensure in-place operations on ``float32`` quantities work. [#4007]

astropy.utils
^^^^^^^^^^^^^

- The ``deprecated`` decorator did not correctly wrap classes that have a
  custom metaclass--the metaclass could be dropped from the deprecated
  version of the class. [#3997]

- The ``wraps`` decorator would copy the wrapped function's name to the
  wrapper function even when ``'__name__'`` is excluded from the ``assigned``
  argument. [#4016]

Misc
^^^^

- ``fitscheck`` no longer causes scaled image data to be rescaled when
  adding checksums to existing files. [#3884]

- Fixed an issue where running ``import astropy`` from within the source
  tree did not automatically build the extension modules if the source is
  from a source distribution (as opposed to a git repository). [#3932]

- Fixed multiple instances of a bug that prevented Astropy from being used
  when compiled with the ``python -OO`` flag, due to it causing all
  docstrings to be stripped out. [#3923]

- Removed source code template files that were being installed
  accidentally alongside installed Python modules. [#4014]

- Fixed a bug in the exception logging that caused a crash in the exception
  handler itself on Python 3 when exceptions do not include a message.
  [#4056]


Version 1.0.3 (2015-06-05)
==========================

New Features
------------

astropy.table
^^^^^^^^^^^^^

- Greatly improved the speed of printing a large table to the screen when
  only a few rows are being displayed. [#3796]

astropy.time
^^^^^^^^^^^^

- Add support for the 2015-Jun-30 leap second. [#3794]

API Changes
-----------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Note that HTML formatted tables will not always be found with guess mode
  unless it passes certain heuristics that strongly suggest the presence of
  HTML in the input.  Code that expects to read tables from HTML should
  specify ``format='html'`` explicitly. See bug fixes below for more
  details. [#3693]

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fix issue with repeated normalizations of ``Kernels``. [#3747]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed ``get_sun`` to yield frames with the ``obstime`` set to what's passed into the function (previously it incorrectly always had J2000). [#3750]

- Fixed ``get_sun`` to account for aberration of light. [#3750]

- Fixed error in the GCRS->ICRS transformation that gave incorrect distances. [#3750]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Remove HTML from the list of automatically-guessed formats when reading if
  the file does not appear to be HTML.  This was necessary to avoid a
  commonly-encountered segmentation fault occurring in the libxml parser on
  MacOSX. [#3693]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixes to support the upcoming Numpy 1.10. [#3419]

astropy.modeling
^^^^^^^^^^^^^^^^

- Polynomials are now scaled when used in a compound model. [#3702]

- Fixed the ``Ellipse2D`` model to be consistent with ``Disk2D`` in
  how pixels are included. [#3736]

- Fixed crash when evaluating a model that accepts no inputs. [#3772]

astropy.testing
^^^^^^^^^^^^^^^

- The Astropy py.test plugins that disable unintentional internet access
  in tests were also blocking use of local UNIX sockets in tests, which
  prevented testing some multiprocessing code--fixed. [#3713]

astropy.units
^^^^^^^^^^^^^

- Supported full SI prefixes for the barn unit ("picobarn", "femtobarn",
  etc.)  [#3753]

- Fix loss of precision when multiplying non-whole-numbered powers
  of units together.  For example, before this change, ``(u.m **
  1.5) ** Fraction(4, 5)`` resulted in an inaccurate floating-point
  power of ``1.2000000000000002``.  After this change, the exact
  rational number of ``Fraction(6, 5)`` is maintained. [#3790]

- Fixed printing of object ndarrays containing multiple Quantity
  objects with differing / incompatible units. Note: Unit conversion errors
  now cause a ``UnitConversionError`` exception to be raised.  However, this
  is a subclass of the ``UnitsError`` exception used previously, so existing
  code that catches ``UnitsError`` should still work. [#3778]

Other Changes and Additions
---------------------------

- Added a new ``astropy.__bibtex__`` attribute which gives a citation
  for Astropy in bibtex format. [#3697]

- The bundled version of ERFA was updated to v1.2.0 to address leapsecond
  updates. [#3802]


Version 0.4.6 (2015-05-29)
==========================

Bug Fixes
---------

astropy.time
^^^^^^^^^^^^

- Fixed ERFA code to handle the 2015-Jun-30 leap second. [#3795]


Version 1.0.2 (2015-04-16)
==========================

New Features
------------

astropy.modeling
^^^^^^^^^^^^^^^^

- Added support for polynomials with degree 0 or degree greater than 15.
  [#3574, 3589]

Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- The pre-astropy-0.4 configuration API has been fixed. It was
  inadvertently broken in 1.0.1. [#3627]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed a severe memory leak that occurred when reading tile compressed
  images. [#3680]

- Fixed bug where column data could be unintentionally byte-swapped when
  copying data from an existing FITS file to a new FITS table with a
  TDIMn keyword for that column. [#3561]

- The ``ColDefs.change_attrib``, ``ColDefs.change_name``, and
  ``ColDefs.change_unit`` methods now work as advertised.  It is also
  possible (and preferable) to update attributes directly on ``Column``
  objects (for example setting ``column.name``), and the change will be
  accurately reflected in any associated table data and its FITS header.
  [#3283, #1539, #2618]

- Fixes an issue with the ``FITS_rec`` interface to FITS table data, where a
  ``FITS_rec`` created by copying an existing FITS table but adding new rows
  could not be sliced or masked correctly.  [#3641]

- Fixed handling of BINTABLE with TDIMn of size 1. [#3580]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Loading a ``TABLE`` element without any ``DATA`` now correctly
  creates a 0-row array. [#3636]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added workaround to support inverses on compound models when one of the
  sub-models is itself a compound model with a manually-assigned custom
  inverse. [#3542]

- Fixed instantiation of polynomial models with constraints for parameters
  (constraints could still be assigned after instantiation, but not during).
  [#3606]

- Fixed fitting of 2D polynomial models with the ``LeVMarLSQFitter``. [#3606]

astropy.table
^^^^^^^^^^^^^

- Ensure ``QTable`` can be pickled [#3590]

- Some corner cases when instantiating an ``astropy.table.Table``
  with a Numpy array are handled [#3637]. Notably:

- a zero-length array is the same as passing ``None``

- a scalar raises a ``ValueError``

- a one-dimensional array is treated as a single row of a table.

- Ensure a ``Column`` without units is treated as an ``array``, not as an
  dimensionless ``Quantity``. [#3648]

astropy.units
^^^^^^^^^^^^^

- Ensure equivalencies that do more than just scale a ``Quantity`` are
  properly handled also in ``ufunc`` evaluations. [#2496, #3586]

- The LaTeX representation of the Angstrom unit has changed from
  ``\overset{\circ}{A}`` to ``\mathring{A}``, which should have
  better support across regular LaTeX, MathJax and matplotlib (as of
  version 1.5) [#3617]

astropy.vo
^^^^^^^^^^

- Using HTTPS/SSL for communication between SAMP hubs now works
  correctly on all supported versions of Python [#3613]

astropy.wcs
^^^^^^^^^^^

- When no ``relax`` argument is passed to ``WCS.to_header()`` and
  the result omits non-standard WCS keywords, a warning is
  emitted. [#3652]

Other Changes and Additions
---------------------------

astropy.vo
^^^^^^^^^^

- The number of retries for connections in ``astropy.vo.samp`` can now be
  configured by a ``n_retries`` configuration option. [#3612]

- Testing

- Running ``astropy.test()`` from within the IPython prompt has been
  provisionally re-enabled. [#3184]


Version 1.0.1 (2015-03-06)
==========================

Bug Fixes
---------

astropy.constants
^^^^^^^^^^^^^^^^^

- Ensure constants can be turned into ``Quantity`` safely. [#3537, #3538]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a segfault in the fast C parser when one of the column headers
  is empty [#3545].

- Fixed support for reading inf and nan values with the fast reader in
  Windows.  Also fixed in the case of using ``use_fast_converter=True``
  with the fast reader. [#3525]

- Fixed use of mmap in the fast reader on Windows. [#3525]

- Fixed issue where commented header would treat comments defining the table
  (i.e. column headers) as purely information comments, leading to problems
  when trying to round-trip the table. [#3562]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed propagation of parameter constraints ('fixed', 'bounds', 'tied')
  between compound models and their components.  There is may still be some
  difficulty defining 'tied' constraints properly for use with compound
  models, however. [#3481]

astropy.nddata
^^^^^^^^^^^^^^

- Restore several properties to the compatibility class ``NDDataArray`` that
  were inadvertently omitted [#3466].

astropy.time
^^^^^^^^^^^^

- Time objects now always evaluate to ``True``, except when empty. [#3530]

Miscellaneous
-------------

- The ERFA wrappers are now written directly in the Python/C API
  rather than using Cython, for greater performance. [#3521]

- Improve import time of astropy [#3488].

Other Changes and Additions
---------------------------

- Updated bundled astropy-helpers version to v1.0.1 to address installation
  issues with some packages that depend on Astropy. [#3541]


Version 1.0 (2015-02-18)
========================

General
-------

- Astropy now requires Numpy 1.6.0 or later.

New Features
------------

astropy.analytic_functions
^^^^^^^^^^^^^^^^^^^^^^^^^^

- The ``astropy.analytic_functions`` was added to contain analytic functions
  useful for astronomy [#3077].

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``astropy.coordinates`` now has a full stack of frames allowing
  transformations from ICRS or other celestial systems down to Alt/Az
  coordinates. [#3217]

- ``astropy.coordinates`` now has a ``get_sun`` function that gives
  the coordinates  of the Sun at a specified time. [#3217]

- ``SkyCoord`` now has ``to_pixel`` and ``from_pixel`` methods that convert
  between celestial coordinates as ``SkyCoord`` objects and pixel coordinates
  given an ``astropy.wcs.WCS`` object. [#3002]

- ``SkyCoord`` now has ``search_around_sky`` and ``search_around_3d``
  convenience methods that allow searching for all coordinates within
  a certain distance of another ``SkyCoord``. [#2953]

- ``SkyCoord`` can now accept a frame instance for the ``frame=`` keyword
  argument. [#3063]

- ``SkyCoord`` now has a ``guess_from_table`` method that can be used to
  quickly create ``SkyCoord`` objects from an ``astropy.table.Table``
  object. [#2951]

- ``astropy.coordinates`` now has a ``Galactocentric`` frame, a coordinate
  frame centered on a (user specified) center of the Milky Way. [#2761, #3286]

- ``SkyCoord`` now accepts more formats of the coordinate string when the
  representation has ``ra`` and ``dec`` attributes. [#2920]

- ``SkyCoord`` can now accept lists of ``SkyCoord`` objects, frame objects,
  or representation objects and will combine them into a single object.
  [#3285]

- Frames and ``SkyCoord`` instances now have a method ``is_equivalent_frame``
  that can be used to check that two frames are equivalent (ignoring the
  data).  [#3330]

- The ``__repr__`` of coordinate objects now shows scalar coordinates in the
  same format as vector coordinates. [#3350, 3448]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Added ``lookback_distance``, which is ``c * lookback_time``. [#3145]

- Add baryonic matter density and dark matter only density parameters
  to cosmology objects [#2757].

- Add a ``clone`` method to cosmology objects to allow copies
  of cosmological objects to be created with the specified variables
  modified [#2592].

- Increase default numerical precision of ``z_at_value`` following
  the accurate by default, fast by explicit request model [#3074].

- Cosmology functions that take a single (redshift) input now
  broadcast like numpy ufuncs.  So, passing an arbitrarily shaped
  array of inputs will produce an output of the same shape. [#3178, #3194]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Simplify the way new Reader classes are defined, allowing custom behavior
  entirely by overriding inherited class attributes instead of setting
  instance attributes in the Reader ``__init__`` method. [#2812]

- There is now a faster C/Cython engine available for reading and writing
  simple ASCII formats like CSV. Both are enabled by default, and fast
  reading will fall back on an ordinary reader in case of a parsing
  failure. Their behavior can be altered with the parameter ``fast_reader``
  in ``read`` and ``fast_writer`` in ``write``. [#2716]

- Make Latex/AASTex tables use unit attribute of Column for output. [#3064]

- Store comment lines encountered during reading in metadata of the
  output table via ``meta['comment_lines']``. [#3222]

- Write comment lines in Table metadata during output for all basic formats,
  IPAC, and fast writers. This functionality can be disabled with
  ``comment=False``. [#3255]

- Add reader / writer for the Enhanced CSV format which stores table and
  column meta data, in particular data type and unit. [#2319]

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``fitsdiff`` script ignores some things by default when comparing fits
  files (e.g. empty header lines). This adds a ``--exact`` option where
  nothing is ignored. [#2782, #3110]

- The ``fitsheader`` script now takes a ``--keyword`` option to extract a
  specific keyword from the header of a FITS file, and a ``--table`` option
  to export headers into any of the data formats supported by
  ``astropy.table``. [#2555, #2588]

- ``Section`` now supports all advanced indexing features ``ndarray`` does
  (slices with any steps, integer arrays, boolean arrays, None, Ellipsis).
  It also properly returns scalars when this is appropriate. [#3148]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- ``astropy.io.votable.parse`` now takes a ``datatype_mapping``
  keyword argument to map invalid datatype names to valid ones in
  order to support non-compliant files. [#2675]

astropy.modeling
^^^^^^^^^^^^^^^^

- Added the capability of creating new "compound" models by combining
  existing models using arithmetic operators.  See the "What's New in 1.0"
  page in the Astropy documentation for more details. [#3231]

- A new ``custom_model`` decorator/factory function has been added for
  converting normal functions to ``Model`` classes that can work within
  the Astropy modeling framework.  This replaces the old ``custom_model_1d``
  function which is now deprecated.  The new function works the same as
  the old one but is less limited in the types of models it can be used to
  created.  [#1763]

- The ``Model`` and ``Fitter`` classes have ``.registry`` attributes which
  provide sets of all loaded ``Model`` and ``Fitter`` classes (this is
  useful for building UIs for models and fitting). [#2725]

- A dict-like ``meta`` member was added to ``Model``. it is to be used to
  store any optional information which is relevant to a project and is not
  in the standard ``Model`` class. [#2189]

- Added ``Ellipse2D`` model. [#3124]

astropy.nddata
^^^^^^^^^^^^^^

- New array-related utility functions in ``astropy.nddata.utils`` for adding
  and removing arrays from other arrays with different sizes/shapes. [#3201]

- New metaclass ``NDDataBase`` for enforcing the nddata interface in
  subclasses without restricting implementation of the data storage. [#2905]

- New mixin classes ``NDSlicingMixin`` for slicing, ``NDArithmeticMixin``
  for arithmetic operations, and ``NDIOMixin`` for input/output in NDData. [#2905]

- Added a decorator ``support_nddata`` that can be used to write functions
  that can either take separate arguments or NDData objects. [#2855]

astropy.stats
^^^^^^^^^^^^^

- Added ``mad_std()`` function. [#3208]

- Added ``gaussian_fwhm_to_sigma`` and ``gaussian_sigma_to_fwhm``
  constants. [#3208]

- New function ``sigma_clipped_stats`` which can be used to quickly get
  common statistics for an array, using sigma clipping at the same time.
  [#3201]

astropy.table
^^^^^^^^^^^^^

- Changed the internal implementation of the ``Table`` class changed so that
  it no longer uses numpy structured arrays as the core table data container.
  [#2790, #3179]

- Tables can now be written to an html file that includes interactive
  browsing capabilities. To write out to this format, use
  ``Table.write('filename.html', format='jsviewer')``. [#2875]

- A ``quantity`` property and ``to`` method were added to ``Table``
  columns that allow the column values to be easily converted to
  ``astropy.units.Quantity`` objects. [#2950]

- Add ``unique`` convenience method to table. [#3185]

astropy.tests
^^^^^^^^^^^^^

- Added a new Quantity-aware ``assert_quantity_allclose``. [#3273]

astropy.time
^^^^^^^^^^^^

- ``Time`` can now handle arbitrary array dimensions, with operations
  following standard numpy broadcasting rules. [#3138]

astropy.units
^^^^^^^^^^^^^

- Support for VOUnit has been updated to be compliant with version
  1.0 of the standard. [#2901]

- Added an ``insert`` method to insert values into a ``Quantity`` object.
  This is similar to the ``numpy.insert`` function. [#3049]

- When viewed in IPython, ``Quantity`` objects with array values now render
  using LaTeX and scientific notation. [#2271]

- Added ``units.quantity_input`` decorator to validate quantity inputs to a
  function for unit compatibility. [#3072]

- Added ``units.astronomical_unit`` as a long form for ``units.au``. [#3303]

astropy.utils
^^^^^^^^^^^^^

- Added a new decorator ``astropy.utils.wraps`` which acts as a replacement
  for the standard library's ``functools.wraps``, the only difference being
  that the decorated function also preserves the wrapped function's call
  signature. [#2849]

- ``astropy.utils.compat.numpy`` has been revised such that it can include
  patched versions of routines from newer ``numpy`` versions.  The first
  addition is a version of ``broadcast_arrays`` that can be used with
  ``Quantity`` and other ``ndarray`` subclasses (using the ``subok=True``
  flag). [#2327]

- Added ``astropy.utils.resolve_name`` which returns a member of a module
  or class given the fully qualified dotted name of that object as a
  string. [#3389]

- Added ``astropy.utils.minversion`` which can be used to check minimum
  version requirements of Python modules (to test for specific features and/
  or bugs and the like). [#3389]

astropy.visualization
^^^^^^^^^^^^^^^^^^^^^

- Created ``astropy.visualization`` module and added functionality relating
  to image normalization (i.e. stretching and scaling) as well as a new
  script ``fits2bitmap`` that can produce a bitmap image from a FITS file.
  [#3201]

- Added dictionary ``astropy.visualization.mpl_style.astropy_mpl_style``
  which can be used to set a uniform plotstyle specifically for tutorials
  that is improved compared to matplotlib defaults. [#2719, #2787, #3200]

astropy.wcs
^^^^^^^^^^^

- ``wcslib`` has been upgraded to version 4.25.  This brings a
  single new feature:

- ``equinox`` and ``radesys`` will now be given default values
  conforming with the WCS specification if ``EQUINOXa`` and
  ``RADESYSa``, respectively, are not present in the header.

- The minimum required version of ``wcslib`` is now 4.24. [#2503]

- Added a new function ``wcs_to_celestial_frame`` that can be used to find
  the astropy.coordinates celestial frame corresponding to a particular WCS.
  [#2730]

- ``astropy.wcs.WCS.compare`` now supports a ``tolerance`` keyword argument
  to allow for approximate comparison of floating-point values. [#2503]

- added ``pixel_scale_matrix``, ``celestial``, ``is_celestial``, and
  ``has_celestial`` convenience attributes. Added
  ``proj_plane_pixel_scales``, ``proj_plane_pixel_area``, and
  ``non_celestial_pixel_scales`` utility functions for retrieving WCS pixel
  scale and area information [#2832, #3304]

- Added two functions ``pixel_to_skycoord`` and
  ``skycoord_to_pixel`` that make it easy to convert between
  SkyCoord objects and pixel coordinates. [#2885]

- ``all_world2pix`` now uses a much more sophisticated and complete
  algorithm to iteratively compute the inverse WCS transform. [#2816]

- Add ability to use ``WCS`` object to define projections in Matplotlib,
  using the ``WCSAxes`` package. [#3183]

- Added ``is_proj_plane_distorted`` for testing if pixels are
  distorted. [#3329]

Misc
^^^^

- ``astropy._erfa`` was added as a new subpackage wrapping the functionality
  of the ERFA library in python.  This is primarily of use for other astropy
  subpackages, but the API may be made more public in the future. [#2992]


API Changes
-----------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Subclasses of ``BaseCoordinateFrame`` which define a custom ``repr`` should
  be aware of the format expected in ``SkyCoord.__repr__()``, which changed in
  this release. [#2704, #2882]

- The ``CartesianPoints`` class (deprecated in v0.4) has now been removed.
  [#2990]

- The previous ``astropy.coordinates.builtin_frames`` module is now a
  subpackage.  Everything that was in the
  ``astropy.coordinates.builtin_frames`` module is still accessible from the
  new package, but the classes are now in separate modules.  This should have
  no direct impact at the user level. [#3120]

- Support for passing a frame as a positional argument in the ``SkyCoord``
  class has now been deprecated, except in the case where a frame with data
  is passed as the sole positional argument. [#3152]

- Improved ``__repr__`` of coordinate objects representing a single
  coordinate point for the sake of easier copy/pasting. [#3350]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The functional interface to the cosmological routines as well as
  ``set_current`` and ``get_current`` (deprecated in v0.4) have now been
  removed. [#2990]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Added a new argument to ``htmldict`` in the HTML reader named
  ``parser``, which allows the user to specify which parser
  BeautifulSoup should use as a backend. [#2815]

- Add ``FixedWidthTwoLine`` reader to guessing. This will allows to read
  tables that a copied from screen output like ``print my_table`` to be read
  automatically. Discussed in #3025 and #3099 [#3109]

astropy.io.fits
^^^^^^^^^^^^^^^

- A new optional argument ``cache`` has been added to
  ``astropy.io.fits.open()``.  When opening a FITS file from a URL,
  ``cache`` is a boolean value specifying whether or not to save the
  file locally in Astropy's download cache (``True`` by default). [#3041]

astropy.modeling
^^^^^^^^^^^^^^^^

- Model classes should now specify ``inputs`` and ``outputs`` class
  attributes instead of the old ``n_inputs`` and ``n_outputs``.  These
  should be tuples providing human-readable *labels* for all inputs and
  outputs of the model.  The length of the tuple indicates the numbers
  of inputs and outputs.  See "What's New in Astropy 1.0" for more
  details. [#2835]

- It is no longer necessary to include ``__init__`` or ``__call__``
  definitions in ``Model`` subclasses if all they do is wrap the
  super-method in order to provide a nice call signature to the docs.
  The ``inputs`` class attribute is now used to generate a nice call
  signature, so these methods should only be overridden by ``Model``
  subclasses in order to provide new functionality. [#2835]

- Most models included in Astropy now have sensible default values for most
  or all of their parameters.  Call ``help(ModelClass)`` on any model to
  check what those defaults are.  Most of them time they should be
  overridden, but some of them are useful (for example spatial offsets are
  always set at the origin by default). Another rule of thumb is that, where
  possible, default parameters are set so that the model is a no-op, or
  close to it, by default. [#2932]

- The ``Model.inverse`` method has been changed to a *property*, so that
  now accessing ``model.inverse`` on a model returns a new model that
  implements that model's inverse, and *calling* ``model.inverse(...)``` on
  some independent variable computes the value of the inverse (similar to what
  the old ``Model.invert()`` method was meant to do).  [#3024]

- The ``Model.invert()`` method has been removed entirely (it was never
  implemented and there should not be any existing code that relies on it).
  [#3024]

- ``custom_model_1d`` is deprecated in favor of the new ``custom_model``
  (see "New Features" above).  [#1763]

- The ``Model.param_dim`` property (deprecated in v0.4) has now been removed.
  [#2990]

- The ``Beta1D`` and ``Beta2D`` models have been renamed to ``Moffat1D`` and
  ``Moffat2D``. [#3029]

astropy.nddata
^^^^^^^^^^^^^^

- ``flags``, ``shape``, ``size``, ``dtype`` and ``ndim`` properties removed
  from ``astropy.nddata.NDData``. [#2905]

- Arithmetic operations, uncertainty propagation, slicing and automatic
  conversion to a numpy array removed from ``astropy.nddata.NDData``. The
  class ``astropy.nddata.NDDataArray`` is functionally equivalent to the
  old ``NDData``.  [#2905]

astropy.table
^^^^^^^^^^^^^

- The ``Column.units`` property (deprecated in v0.3) has now been removed.
  [#2990]

- The ``Row.data`` and ``Table._data`` attributes have been deprecated
  related to the change in Table implementation.  They are replaced by
  ``Row.as_void()`` and ``Table.as_array()`` methods, respectively. [#2790]

- The ``Table.create_mask`` method has been removed.  This undocumented
  method was a development orphan and would cause corruption of the
  table if called. [#2790]

- The return type for integer item access to a Column (e.g. col[12] or
  t['a'][12]) is now always a numpy scalar, numpy ``ndarray``, or numpy
  ``MaskedArray``.  Previously if the column was multidimensional then a
  Column object would be returned. [#3095]

- The representation of Table and Column objects has been changed to
  be formatted similar to the print output. [#3239]

astropy.time
^^^^^^^^^^^^

- The ``Time.val`` and ``Time.vals`` properties (deprecated in v0.3) and the
  ``Time.lon``, and ``Time.lat`` properties (deprecated in v0.4) have now
  been removed. [#2990]

- Add ``decimalyear`` format that represents time as a decimal year. [#3265]

astropy.units
^^^^^^^^^^^^^

- Support for VOUnit has been updated to be compliant with version
  1.0 of the standard. This means that some VOUnit strings that were
  rejected before are now acceptable. [#2901] Notably:

- SI prefixes are supported on most units

- Binary prefixes are supported on "bits" and "bytes"

- Custom units can be defined "inline" by placing them between single
  quotes.

- ``Unit.get_converter`` has been deprecated.  It is not strictly
  necessary for end users, and it was confusing due to lack of
  support for ``Quantity`` objects. [#3456]

astropy.utils
^^^^^^^^^^^^^

- Some members of ``astropy.utils.misc`` were moved into new submodules.
  Specifically:

- ``deprecated``, ``deprecated_attribute``, and ``lazyproperty`` ->
  ``astropy.utils.decorators``

- ``find_current_module``, ``find_mod_objs`` ->
  ``astropy.utils.introspection``

  All of these functions can be imported directly from ``astropy.utils``
  which should be preferred over referencing individual submodules of
  ``astropy.utils``.  [#2857]

- The ProgressBar.iterate class method (deprecated in v0.3) has now been
  removed. [#2990]

- Updated ``astropy/utils/console.py`` ProgressBar() module to
  display output to IPython notebook with the addition of an
  ``interactive`` kwarg. [#2658, #2789]

astropy.wcs
^^^^^^^^^^^

- The ``WCS.calcFootprint`` method (deprecated in v0.4) has now been removed.
  [#2990]

- An invalid unit in a ``CUNITn`` keyword now displays a warning and
  returns a ``UnrecognizedUnit`` instance rather than raising an
  exception [#3190]

Bug Fixes
---------

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- ``astropy.convolution.discretize_model`` now handles arbitrary callables
  correctly [#2274].

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``Angle.to_string`` now outputs unicode arrays instead of object arrays.
  [#2981]

- ``SkyCoord.to_string`` no longer gives an error when used with an array
  coordinate with more than one dimension. [#3340]

- Fixed support for subclasses of ``UnitSphericalRepresentation`` and
  ``SphericalRepresentation`` [#3354, #3366]

- Fixed latex display of array angles in IPython notebook. [#3480]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- In the ``CommentedHeader`` the ``data_start`` parameter now defaults to
  ``0``, which is the first uncommented line. Discussed in #2692. [#3054]

- Position lines in ``FixedWidthTwoLine`` reader could consist of many characters.
  Now, only one character in addition to the delimiter is allowed. This bug was
  discovered as part of [#3109]

- The IPAC table writer now consistently uses the ``fill_values`` keyword to
  specify the output null values.  Previously the behavior was inconsistent
  or incorrect. [#3259]

- The IPAC table reader now correctly interprets abbreviated column types.
  [#3279]

- Tables that look almost, but not quite like DAOPhot tables could cause
  guessing to fail. [#3342]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed the problem in ``fits.open`` of some filenames with colon (``:``) in
  the name being recognized as URLs instead of file names. [#3122]

- Setting ``memmap=True`` in ``fits.open`` and related functions now raises
  a ValueError if opening a file in memory-mapped mode is impossible. [#2298]

- CONTINUE cards no longer end the value of the final card in the series with
  an ampersand, per the specification of the CONTINUE card convention. [#3282]

- Fixed a crash that occurred when reading an ASCII table containing
  zero-precision floating point fields. [#3422]

- When a float field for an ASCII table has zero-precision a decimal point
  (with no digits following it) is still written to the field as long as
  there is space for it, as recommended by the FITS standard.  This makes it
  less ambiguous that these columns should be interpreted as floats. [#3422]

astropy.logger
^^^^^^^^^^^^^^

- Fix a bug that occurred when displaying warnings that produced an error
  message ``dictionary changed size during iteration``. [#3353]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a bug in ``SLSQPLSQFitter`` where the ``maxiter`` argument was not
  passed correctly to the optimizer. [#3339]

astropy.table
^^^^^^^^^^^^^

- Fix a problem where ``table.hstack`` fails to stack multiple references to
  the same table, e.g. ``table.hstack([t, t])``. [#2995]

- Fixed a problem where ``table.vstack`` and ``table.hstack`` failed to stack
  a single table, e.g. ``table.vstack([t])``. [#3313]

- Fix a problem when doing nested iterators on a single table. [#3358]

- Fix an error when an empty list, tuple, or ndarray is used for item access
  within a table.  This now returns the table with no rows. [#3442]

astropy.time
^^^^^^^^^^^^

- When creating a Time object from a datetime object the time zone
  info is now correctly used. [#3160]

- For Time objects, it is now checked that numerical input is finite. [#3396]

astropy.units
^^^^^^^^^^^^^

- Added a ``latex_inline`` unit format that returns the units in LaTeX math
  notation with negative exponents instead of fractions [#2622].

- When using a unit that is deprecated in a given unit format,
  non-deprecated alternatives will be suggested. [#2806] For
  example::

      >>> import astropy.units as u
      >>> u.Unit('Angstrom', format='fits')
      WARNING: UnitsWarning: The unit 'Angstrom' has been deprecated
      in the FITS standard. Suggested: nm (with data multiplied by
      0.1).  [astropy.units.format.utils]

astropy.utils
^^^^^^^^^^^^^

- ``treat_deprecations_as_exceptions`` has been fixed to recognize Astropy
  deprecation warnings. [#3015]

- Converted representation of progress bar units without suffix
  from float to int in console.human_file_size. [#2201, #2202, #2721, #3299]

astropy.wcs
^^^^^^^^^^^

- ``astropy.wcs.WCS.sub`` now accepts unicode strings as input on
  Python 2.x [#3356]

Misc
^^^^

- Some modules and tests that would crash upon import when using a non-final
  release of Numpy (e.g. 1.9.0rc1). [#3471]

Other Changes and Additions
---------------------------

- The bundled copy of astropy-helpers has been updated to v1.0. [#3515]

- Updated ``astropy.extern.configobj`` to Version 5. Version 5 uses ``six``
  and the same code covers both Python 2 and Python 3. [#3149]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``repr`` of ``SkyCoord`` and coordinate frame classes now separate
  frame attributes and coordinate information.  [#2704, #2882]

astropy.io.fits
^^^^^^^^^^^^^^^

- Overwriting an existing file using the ``clobber=True`` option no longer
  displays a warning message. [#1963]

- ``fits.open`` no longer catches ``OSError`` exceptions on missing or
  unreadable files-- instead it raises the standard Python exceptions in such
  cases. [#2756, #2785]

astropy.table
^^^^^^^^^^^^^

- Sped up setting of ``Column`` slices by an order of magnitude. [#2994, #3020]

- Updated the bundled ``six`` module to version 1.7.3 and made 1.7.3 the
  minimum acceptable version of ``six``. [#2814]

- The version of ERFA included with Astropy is now v1.1.1 [#2971]

- The code base is now fully Python 2 and 3 compatible and no longer requires
  2to3. [#2033]

- `funcsigs <https://pypi.org/project/funcsigs>`_ is included in
  utils.compat, but defaults to the inspect module components where available
  (3.3+) [#3151].

- The list of modules displayed in the pytest header can now be customized.
  [#3157]

- `jinja2 <http://jinja.pocoo.org/docs/dev/>`_>=2.7 is now required to build the
  source code from the git repository, in order to allow the ERFA wrappers to
  be generated. [#3166]


Version 0.4.5 (2015-02-16)
==========================

Bug Fixes
---------

- Fixed unnecessary attempt to run ``git`` when importing astropy.  In
  particular, fixed a crash in Python 3 that could result from this when
  importing Astropy when the the current working directory is an empty git
  repository. [#3475]

Other Changes and Additions
---------------------------

- Updated bundled copy of astropy-helpers to v0.4.6. [#3508]


Version 0.4.4 (2015-01-21)
==========================

Bug Fixes
---------

astropy.vo.samp
^^^^^^^^^^^^^^^

- ``astropy.vo.samp`` is now usable on Python builds that do not
  support the SSLv3 protocol (which depends both on the version of
  Python and the version of OpenSSL or LibreSSL that it is built
  against.) [#3308]

API Changes
-----------

astropy.vo.samp
^^^^^^^^^^^^^^^

- The default SSL protocol used is now determined from the default
  used in the Python ``ssl`` standard library.  This default may be
  different depending on the exact version of Python you are using.
  [#3308]

astropy.wcs
^^^^^^^^^^^

- WCS allows slices of the form slice(None, x, y), which previously resulted
  in an unsliced copy being returned (note: this was previously incorrectly
  reported as fixed in v0.4.3) [#2909]


Version 0.4.3 (2015-01-15)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``Distance`` class has been fixed to no longer rely on the deprecated
  cosmology functions. [#2991]

- Ensure ``float32`` values can be used in coordinate representations. [#2983]

- Fix frame attribute inheritance in ``SkyCoord.transform_to()`` method so
  that the default attribute value (e.g. equinox) for the destination frame
  gets used if no corresponding value was explicitly specified. [#3106]

- ``Angle`` accepts hours:mins or deg:mins initializers (without
  seconds). In these cases float minutes are also accepted. [#2843]

- ``astropy.coordinates.SkyCoord`` objects are now copyable. [#2888]

- ``astropy.coordinates.SkyCoord`` object attributes are now
  immutable.  It is still technically possible to change the
  internal data for an array-valued coordinate object but this leads
  to inconsistencies [#2889] and should not be done. [#2888]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The ``ztol`` keyword argument to z_at_value now works correctly [#2993].

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fix a bug in Python 3 when guessing file format using a file object as
  input.  Also improve performance in same situation for Python 2. [#3132]

- Fix a problem where URL was being downloaded for each guess. [#2001]

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``in`` operator now works correctly for checking if an extension
  is in an ``HDUList`` (as given via EXTNAME, (EXTNAME, EXTVER) tuples,
  etc.) [#3060]

- Added workaround for bug in MacOS X <= 10.8 that caused np.fromfile to
  fail. [#3078]

- Added support for the ``RICE_ONE`` compression type synonym. [#3115]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed a test failure on Debian/PowerPC and Debian/s390x. [#2708]

- Fixed crash in evaluating models that have more outputs than inputs--this
  case may not be handled as desired for all conceivable models of this
  format (some may have to implement custom ``prepare_inputs`` and
  ``prepare_outputs`` methods).  But as long as all outputs can be assumed
  to have a shape determined from the broadcast of all inputs with all
  parameters then this can be used safely. [#3250]

astropy.table
^^^^^^^^^^^^^

- Fix a bug that caused join to fail for multi-dimensional columns. [#2984]

- Fix a bug where MaskedColumn attributes which had been changed since
  the object was created were not being carried through when slicing. [#3023]

- Fix a bug that prevented initializing a table from a structured array
  with multi-dimensional columns with copy=True. [#3034]

- Fixed unnecessarily large unicode columns when instantiating a table from
  row data on Python 3. [#3052]

- Improved the warning message when unable to aggregate non-numeric
  columns. [#2700]

astropy.units
^^^^^^^^^^^^^

- Operations on quantities with incompatible types now raises a much
  more informative ``TypeError``. [#2934]

- ``Quantity.tolist`` now overrides the ``ndarray`` method to give a
  ``NotImplementedError`` (by renaming the previous ``list`` method). [#3050]

- ``Quantity.round`` now always returns a ``Quantity`` (previously it
  returned an ``ndarray`` for ``decimals>0``). [#3062]

- Ensured ``np.squeeze`` always returns a ``Quantity`` (it only worked if
  no dimensions were removed). [#3045]

- Input to ``Quantity`` with a ``unit`` attribute no longer can get mangled
  with ``copy=False``. [#3051]

- Remove trailing space in ``__format__`` calls for dimensionless quantities.
  [#3097]

- Comparisons between units and non-unit-like objects now works
  correctly. [#3108]

- Units with fractional powers are now correctly multiplied together
  by using rational arithmetic.  [#3121]

- Removed a few entries from spectral density equivalencies which did not
  make sense. [#3153]

astropy.utils
^^^^^^^^^^^^^

- Fixed an issue with the ``deprecated`` decorator on classes that invoke
  ``super()`` in their ``__init__`` method. [#3004]

- Fixed a bug which caused the ``metadata_conflicts`` parameter to be
  ignored in the ``astropy.utils.metadata.merge`` function. [#3294]

astropy.vo
^^^^^^^^^^

- Fixed an issue with reconnecting to a SAMP Hub. [#2674]

astropy.wcs
^^^^^^^^^^^

- Invalid or out of range values passed to ``wcs_world2pix`` will
  now be correctly identified and returned as ``nan``
  values. [#2965]

- Fixed an issue which meant that Python thought ``WCS`` objects were
  iterable. [#3066]

Misc
^^^^

- Astropy will now work if your Python interpreter does not have the
  ``bz2`` module installed. [#3104]

- Fixed ``ResourceWarning`` for ``astropy/extern/bundled/six.py`` that could
  occur sometimes after using Astropy in Python 3.4. [#3156]

Other Changes and Additions
---------------------------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Improved the agreement of the FK5 <-> Galactic conversion with other
  codes, and with the FK5 <-> FK4 <-> Galactic route. [#3107]


Version 0.4.2 (2014-09-23)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``Angle`` accepts hours:mins or deg:mins initializers (without
  seconds). In these cases float minutes are also accepted.

- The ``repr`` for coordinate frames now displays the frame attributes
  (ex: ra, dec) in a consistent order.  It should be noted that as part of
  this fix, the ``BaseCoordinateFrame.get_frame_attr_names()`` method now
  returns an ``OrderedDict`` instead of just a ``dict``. [#2845]

astropy.io.fits
^^^^^^^^^^^^^^^

- Fixed a crash when reading scaled float data out of a FITS file that was
  loaded from a string (using ``HDUList.fromfile``) rather than from a file.
  [#2710]

- Fixed a crash when reading data from an HDU whose header contained in
  invalid value for the BLANK keyword (e.g., a string value instead of an
  integer as required by the FITS Standard). Invalid BLANK keywords are now
  warned about, but are otherwise ignored. [#2711]

- Fixed a crash when reading the header of a tile-compressed HDU if that
  header contained invalid duplicate keywords resulting in a ``KeyError``
  [#2750]

- Fixed crash when reading gzip-compressed FITS tables through the Astropy
  ``Table`` interface. [#2783]

- Fixed corruption when writing new FITS files through to gzipped files.
  [#2794]

- Fixed crash when writing HDUs made with non-contiguous data arrays to
  file-like objects. [#2794]

- It is now possible to create ``astropy.io.fits.BinTableHDU``
  objects with a table with zero rows. [#2916]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fixed a bug that prevented h5py ``Dataset`` objects from being
  automatically recognized by ``Table.read``. [#2831]

astropy.modeling
^^^^^^^^^^^^^^^^

- Make ``LevMarLSQFitter`` work with ``weights`` keyword. [#2900]

astropy.table
^^^^^^^^^^^^^

- Fixed reference cycle in tables that could prevent ``Table`` objects
  from being freed from memory. [#2879]

- Fixed an issue where ``Table.pprint()`` did not print the header to
  ``stdout`` when ``stdout`` is redirected (say, to a file). [#2878]

- Fixed printing of masked values when a format is specified. [#1026]

- Ensured that numpy ufuncs that return booleans return plain ``ndarray``
  instances, just like the comparison operators. [#2963]

astropy.time
^^^^^^^^^^^^

- Ensure bigendian input to Time works on a little-endian machine
  (and vice versa).  [#2942]

astropy.units
^^^^^^^^^^^^^

- Ensure unit is kept when adding 0 to quantities. [#2968]

astropy.utils
^^^^^^^^^^^^^

- Fixed color printing on Windows with IPython 2.0. [#2878]

astropy.vo
^^^^^^^^^^

- Improved error message on Cone Search time out. [#2687]

Other Changes and Additions
---------------------------

- Fixed a couple issues with files being inappropriately included and/or
  excluded from the source archive distributions of Astropy. [#2843, #2854]

- As part of fixing the fact that masked elements of table columns could not be
  printed when a format was specified, the column format string options were
  expanded to allow simple specifiers such as ``'5.2f'``. [#2898]

- Ensure numpy 1.9 is supported. [#2917]

- Ensure numpy master is supported, by making ``np.cbrt`` work with quantities.
  [#2937]

Version 0.4.1 (2014-08-08)
==========================

Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Fixed a bug where an unedited configuration file from astropy
  0.3.2 would not be correctly identified as unedited. [#2772] This
  resulted in the warning::

      WARNING: ConfigurationChangedWarning: The configuration options
      in astropy 0.4 may have changed, your configuration file was not
      updated in order to preserve local changes.  A new configuration
      template has been saved to
      '~/.astropy/config/astropy.0.4.cfg'. [astropy.config.configuration]

- Fixed the error message that is displayed when an old
  configuration item has moved.  Before, the destination
  section was wrong.  [#2772]

- Added configuration settings for ``io.fits``, ``io.votable`` and
  ``table.jsviewer`` that were missing from the configuration file
  template. [#2772]

- The configuration template is no longer rewritten on every import
  of astropy, causing race conditions. [#2805]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed the multiplication of ``Kernel`` with numpy floats. [#2174]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- ``Distance`` can now take a list of quantities. [#2261]

- For in-place operations for ``Angle`` instances in which the result unit
  is not an angle, an exception is raised before the instance is corrupted.
  [#2718]

- ``CartesianPoints`` are now deprecated in favor of
  ``CartesianRepresentation``. [#2727]

astropy.io.misc
^^^^^^^^^^^^^^^

- An existing table within an HDF5 file can be overwritten without affecting
  other datasets in the same HDF5 file by simultaneously using
  ``overwrite=True`` and ``append=True`` arguments to the ``Table.write``
  method. [#2624]

astropy.logger
^^^^^^^^^^^^^^

- Fixed a crash that could occur in rare cases when (such as in bundled
  apps) where submodules of the ``email`` package are not importable. [#2671]

astropy.nddata
^^^^^^^^^^^^^^

- ``astropy.nddata.NDData()`` no longer raises a ``ValueError`` when passed
  a numpy masked array which has no masked entries. [#2784]

astropy.table
^^^^^^^^^^^^^

- When saving a table to a FITS file containing a unit that is not
  supported by the FITS standard, a warning rather than an exception
  is raised. [#2797]

astropy.units
^^^^^^^^^^^^^

- By default, ``Quantity`` and its subclasses will now convert to float also
  numerical types such as ``decimal.Decimal``, which are stored as objects
  by numpy. [#1419]

- The units ``count``, ``pixel``, ``voxel`` and ``dbyte`` now output
  to FITS, OGIP and VOUnit formats correctly. [#2798]

astropy.utils
^^^^^^^^^^^^^

- Restored missing information from deprecation warning messages
  from the ``deprecated`` decorator. [#2811]

- Fixed support for ``staticmethod`` deprecation in the ``deprecated``
  decorator. [#2811]

astropy.wcs
^^^^^^^^^^^

- Fixed a memory leak when ``astropy.wcs.WCS`` objects are copied
  [#2754]

- Fixed a crash when passing ``ra_dec_order=True`` to any of the
  ``*2world`` methods. [#2791]

Other Changes and Additions
---------------------------

- Bundled copy of astropy-helpers upgraded to v0.4.1. [#2825]

- General improvements to documentation and docstrings [#2722, #2728, #2742]

- Made it easier for third-party packagers to have Astropy use their own
  version of the ``six`` module (so long as it meets the minimum version
  requirement) and remove the copy bundled with Astropy.  See the
  astropy/extern/README file in the source tree.  [#2623]


Version 0.4 (2014-07-16)
========================

New Features
------------

astropy.constants
^^^^^^^^^^^^^^^^^

- Added ``b_wien`` to represent Wien wavelength displacement law constant.
  [#2194]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Changed the input parameter in ``Gaussian1DKernel`` and
  ``Gaussian2DKernel`` from ``width`` to ``stddev`` [#2085].

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The coordinates package has undergone major changes to implement
  `APE5 <https://github.com/astropy/astropy-APEs/blob/master/APE5.rst>`_ .
  These include backwards-incompatible changes, as the underlying framework
  has changed substantially. See the APE5 text and the package documentation
  for more details. [#2422]

- A ``position_angle`` method has been added to the new ``SkyCoord``. [#2487]

- Updated ``Angle.dms`` and ``Angle.hms`` to return ``namedtuple`` -s instead
  of regular tuples, and added ``Angle.signed_dms`` attribute that gives the
  absolute value of the ``d``, ``m``, and ``s`` along with the sign.  [#1988]

- By default, ``Distance`` objects are now required to be positive. To
  allow negative values, set ``allow_negative=True`` in the ``Distance``
  constructor when creating a ``Distance`` instance.

- ``Longitude`` (resp. ``Latitude``) objects cannot be used any more to
  initialize or set ``Latitude`` (resp. ``Longitude``) objects. An explicit
  conversion to ``Angle`` is now required. [#2461]

- The deprecated functions for pre-0.3 coordinate object names like
  ``ICRSCoordinates`` have been removed. [#2422]

- The ``rotation_matrix`` and ``angle_axis`` functions in
  ``astropy.coordinates.angles`` were made more numerically consistent and
  are now tested explicitly [#2619]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Added ``z_at_value`` function to find the redshift at which a cosmology
  function matches a desired value. [#1909]

- Added ``FLRW.differential_comoving_volume`` method to give the differential
  comoving volume at redshift z. [#2103]

- The functional interface is now deprecated in favor of the more-explicit
  use of methods on cosmology objects. [#2343]

- Updated documentation to reflect the removal of the functional
  interface. [#2507]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- The ``astropy.io.ascii`` output formats ``latex`` and ``aastex`` accept a
  dictionary called ``latex_dict`` to specify options for LaTeX output.  It is
  now possible to specify the table alignment within the text via the
  ``tablealign`` keyword. [#1838]

- If ``header_start`` is specified in a call to ``ascii.get_reader`` or any
  method that calls ``get_reader`` (e.g. ``ascii.read``) but ``data_start``
  is not specified at the same time, then ``data_start`` is calculated so
  that the data starts after the header. Before this, the default was
  that the header line was read again as the first data line
  [#855 and #1844].

- A new ``csv`` format was added as a convenience for handling CSV (comma-
  separated values) data. [#1935]
  This format also recognises rows with an inconsistent number of elements.
  [#1562]

- An option was added to guess the start of data for CDS format files when
  they do not strictly conform to the format standard. [#2241]

- Added an HTML reader and writer to the ``astropy.io.ascii`` package.
  Parsing requires the installation of BeautifulSoup and is therefore
  an optional feature. [#2160]

- Added support for inputting column descriptions and column units
  with the ``io.ascii.SExtractor`` reader. [#2372]

- Allow the use of non-local ReadMe files in the CDS reader. [#2329]

- Provide a mechanism to select how masked values are printed. [#2424]

- Added support for reading multi-aperture daophot file. [#2656]

astropy.io.fits
^^^^^^^^^^^^^^^

- Included a new command-line script called ``fitsheader`` to display the
  header(s) of a FITS file from the command line. [#2092]

- Added new verification options ``fix+ignore``, ``fix+warn``,
  ``fix+exception``, ``silentfix+ignore``, ``silentfix+warn``, and
  ``silentfix+exception`` which give more control over how to report fixable
  errors as opposed to unfixable errors.

astropy.modeling
^^^^^^^^^^^^^^^^

- Prototype implementation of fitters that treat optimization algorithms
  separately from fit statistics, allowing new fitters to be created by
  mixing and matching optimizers and statistic functions. [#1914]

- Slight overhaul to how inputs to and outputs from models are handled with
  respect to array-valued parameters and variables, as well as sets of
  multiple models.  See the associated PR and the modeling section of the
  v0.4 documentation for more details. [#2634]

- Added a new ``SimplexLSQFitter`` which uses a downhill simplex optimizer
  with a least squares statistic. [#1914]

- Changed ``Gaussian2D`` model such that ``theta`` now increases
  counterclockwise. [#2199]

- Replaced the ``MatrixRotation2D`` model with a new model called simply
  ``Rotation2D`` which requires only an angle to specify the rotation.
  The new ``Rotation2D`` rotates in a counter-clockwise sense whereas
  the old ``MatrixRotation2D`` increased the angle clockwise.
  [#2266, #2269]

- Added a new ``AffineTransformation2D`` model which serves as a
  replacement for the capability of ``MatrixRotation2D`` to accept an
  arbitrary matrix, while also adding a translation capability. [#2269]

- Added ``GaussianAbsorption1D`` model. [#2215]

- New ``Redshift`` model [#2176].

astropy.nddata
^^^^^^^^^^^^^^

- Allow initialization ``NDData`` or ``StdDevUncertainty`` with a
  ``Quantity``. [#2380]

astropy.stats
^^^^^^^^^^^^^

- Added flat prior to binom_conf_interval and binned_binom_proportion

- Change default in ``sigma_clip`` from ``np.median`` to ``np.ma.median``.
  [#2582]

astropy.sphinx
^^^^^^^^^^^^^^

- Note, the following new features are included in astropy-helpers as well:

- The ``automodapi`` and ``automodsumm`` extensions now include sphinx
  configuration options to write out what ``automodapi`` and ``automodsumm``
  generate, mainly for debugging purposes. [#1975, #2022]

- Reference documentation now shows functions/class docstrings at the
  intended user-facing API location rather than the actual file where
  the implementation is found. [#1826]

- The ``automodsumm`` extension configuration was changed to generate
  documentation of class ``__call__`` member functions. [#1817, #2135]

- ``automodapi`` and ``automodsumm`` now have an ``:allowed-package-names:``
  option that make it possible to document functions and classes that
  are in a different namespace.  [#2370]

astropy.table
^^^^^^^^^^^^^

- Improved grouped table aggregation by using the numpy ``reduceat()`` method
  when possible. This can speed up the operation by a factor of at least 10
  to 100 for large unmasked tables and columns with relatively small
  group sizes.  [#2625]

- Allow row-oriented data input using a new ``rows`` keyword argument.
  [#850]

- Allow subclassing of ``Table`` and the component classes ``Row``, ``Column``,
  ``MaskedColumn``, ``TableColumns``, and ``TableFormatter``. [#2287]

- Fix to allow numpy integer types as valid indices into tables in
  Python 3.x [#2477]

- Remove transition code related to the order change in ``Column`` and
  ``MaskedColumn`` arguments ``name`` and ``data`` from Astropy 0.2
  to 0.3. [#2511]

- Change HTML table representation in IPython notebook to show all
  table columns instead of restricting to 80 column width.  [#2651]

astropy.time
^^^^^^^^^^^^

- Mean and apparent sidereal time can now be calculated using the
  ``sidereal_time`` method [#1418].

- The time scale now defaults to UTC if no scale is provided. [#2091]

- ``TimeDelta`` objects can have all scales but UTC, as well as, for
  consistency with time-like quantities, undefined scale (where the
  scale is taken from the object one adds to or subtracts from).
  This allows, e.g., to work consistently in TDB.  [#1932]

- ``Time`` now supports ISO format strings that end in "Z". [#2211, #2203]

astropy.units
^^^^^^^^^^^^^

- Support for the unit format `Office of Guest Investigator Programs (OGIP)
  FITS files
  <https://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/general/ogip_93_001/>`__
  has been added. [#377]

- The ``spectral`` equivalency can now handle angular wave number. [#1306 and
  #1899]

- Added ``one`` as a shorthand for ``dimensionless_unscaled``. [#1980]

- Added ``dex`` and ``dB`` units. [#1628]

- Added ``temperature()`` equivalencies to support conversion between
  Kelvin, Celsius, and Fahrenheit. [#2209]

- Added ``temperature_energy()`` equivalencies to support conversion
  between electron-volt and Kelvin. [#2637]

- The runtime of ``astropy.units.Unit.compose`` is greatly improved
  (by a factor of 2 in most cases) [#2544]

- Added ``electron`` unit. [#2599]

astropy.utils
^^^^^^^^^^^^^

- ``timer.RunTimePredictor`` now uses ``astropy.modeling`` in its
  ``do_fit()`` method. [#1896]

astropy.vo
^^^^^^^^^^

- A new sub-package, ``astropy.vo.samp``, is now available (this was
  previously the SAMPy package, which has been refactored for use in
  Astropy). [#1907]

- Enhanced functionalities for ``VOSCatalog`` and ``VOSDatabase``. [#1206]

astropy.wcs
^^^^^^^^^^^

- astropy now requires wcslib version 4.23.  The version of wcslib
  included with astropy has been updated to version 4.23.

- Bounds checking is now performed on native spherical
  coordinates.  Any out-of-bounds values will be returned as
  ``NaN``, and marked in the ``stat`` array, if using the
  low-level ``wcslib`` interface such as
  ``astropy.wcs.Wcsprm.p2s``. [#2107]

- A new method, ``astropy.wcs.WCS.compare()``, compares two wcsprm
  structs for equality with varying degrees of strictness. [#2361]

- New ``astropy.wcs.utils`` module, with a handful of tools for manipulating
  WCS objects, including dropping, swapping, and adding axes.

Misc
^^^^

- Includes the new astropy-helpers package which separates some of Astropy's
  build, installation, and documentation infrastructure out into an
  independent package, making it easier for Affiliated Packages to depend on
  these features.  astropy-helpers replaces/deprecates some of the submodules
  in the ``astropy`` package (see API Changes below).  See also
  `APE 4 <https://github.com/astropy/astropy-APEs/blob/master/APE4.rst>`_
  for more details on the motivation behind and implementation of
  astropy-helpers.  [#1563]


API Changes
-----------

astropy.config
^^^^^^^^^^^^^^

- The configuration system received a major overhaul, as part of APE3.  It is
  no longer possible to save configuration items from Python, but instead
  users must edit the configuration file directly.  The locations of
  configuration items have moved, and some have been changed to science state
  values.  The old locations should continue to work until astropy 0.5, but
  deprecation warnings will be displayed.  See the `Configuration transition
  <https://docs.astropy.org/en/v0.4/config/config_0_4_transition.html>`_
  docs for a detailed description of the changes and how to update existing
  code. [#2094]

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``astropy.io.fits.new_table`` function is now fully deprecated (though
  will not be removed for a long time, considering how widely it is used).

  Instead please use the more explicit ``BinTableHDU.from_columns`` to create
  a new binary table HDU, and the similar ``TableHDU.from_columns`` to create
  a new ASCII table.  These otherwise accept the same arguments as
  ``new_table`` which is now just a wrapper for these.

- The ``.fromstring`` classmethod of each HDU type has been simplified such
  that, true to its namesake, it only initializes an HDU from a string
  containing its header *and* data.

- Fixed an issue where header wildcard matching (for example
  ``header['DATE*']``) can be used to match *any* characters that might
  appear in a keyword.  Previously this only matched keywords containing
  characters in the set ``[0-9A-Za-z_]``.  Now this can also match a hyphen
  ``-`` and any other characters, as some conventions like ``HIERARCH`` and
  record-valued keyword cards allow a wider range of valid characters than
  standard FITS keywords.

- This will be the *last* release to support the following APIs that have
  been marked deprecated since Astropy v0.1/PyFITS v3.1:

- The ``CardList`` class, which was part of the old header implementation.

- The ``Card.key`` attribute.  Use ``Card.keyword`` instead.

- The ``Card.cardimage`` and ``Card.ascardimage`` attributes.  Use simply
  ``Card.image`` or ``str(card)`` instead.

- The ``create_card`` factory function.  Simply use the normal ``Card``
  constructor instead.

- The ``create_card_from_string`` factory function.  Use ``Card.fromstring``
  instead.

- The ``upper_key`` function.  Use ``Card.normalize_keyword`` method
  instead (this is not unlikely to be used outside of PyFITS itself, but it
  was technically public API).

- The usage of ``Header.update`` with ``Header.update(keyword, value,
  comment)`` arguments.  ``Header.update`` should only be used analogously
  to ``dict.update``.  Use ``Header.set`` instead.

- The ``Header.ascard`` attribute.  Use ``Header.cards`` instead for a list
  of all the ``Card`` objects in the header.

- The ``Header.rename_key`` method.  Use ``Header.rename_keyword`` instead.

- The ``Header.get_history`` method.  Use ``header['HISTORY']`` instead
  (normal keyword lookup).

- The ``Header.get_comment`` method.  Use ``header['COMMENT']`` instead.

- The ``Header.toTxtFile`` method.  Use ``header.totextfile`` instead.

- The ``Header.fromTxtFile`` method.  Use ``Header.fromtextfile`` instead.

- The ``tdump`` and ``tcreate`` functions.  Use ``tabledump`` and
  ``tableload`` respectively.

- The ``BinTableHDU.tdump`` and ``tcreate`` methods.  Use
  ``BinTableHDU.dump`` and ``BinTableHDU.load`` respectively.

- The ``txtfile`` argument to the ``Header`` constructor.  Use
  ``Header.fromfile`` instead.

- The ``startColumn`` and ``endColumn`` arguments to the ``FITS_record``
  constructor.  These are unlikely to be used by any user code.

  These deprecated interfaces will be removed from the development version of
  Astropy following the v0.4 release (they will still be available in any
  v0.4.x bugfix releases, however).

astropy.modeling
^^^^^^^^^^^^^^^^

- The method computing the derivative of the model with respect
  to parameters was renamed from ``deriv`` to ``fit_deriv``. [#1739]

- ``ParametricModel`` and the associated ``Parametric1DModel`` and
  ``Parametric2DModel`` classes have been renamed ``FittableModel``,
  ``Fittable1DModel``, and ``Fittable2DModel`` respectively.  The base
  ``Model`` class has subsumed the functionality of the old

  ``ParametricModel`` class so that all models support parameter constraints.
  The only distinction of ``FittableModel`` is that anything which subclasses
  it is assumed "safe" to use with Astropy fitters. [#2276]

- ``NonLinearLSQFitter`` has been renamed ``LevMarLSQFitter`` to emphasise
  that it uses the Levenberg-Marquardt optimization algorithm with a
  least squares statistic function. [#1914]

- The ``SLSQPFitter`` class has been renamed ``SLSQPLSQFitter`` to emphasize
  that it uses the Sequential Least Squares Programming optimization
  algorithm with a least squares statistic function. [#1914]

- The ``Fitter.errorfunc`` method has been renamed to the more general
  ``Fitter.objective_function``. [#1914]

astropy.nddata
^^^^^^^^^^^^^^

- Issue warning if unit is changed from a non-trivial value by directly
  setting ``NDData.unit``. [#2411]

- The ``mask`` and ``flag`` attributes of ``astropy.nddata.NDData`` can now
  be set with any array-like object instead of requiring that they be set
  with a ``numpy.ndarray``. [#2419]

astropy.sphinx
^^^^^^^^^^^^^^

- Use of the ``astropy.sphinx`` module is deprecated; all new development of
  this module is in ``astropy_helpers.sphinx`` which should be used instead
  (therefore documentation builds that made use of any of the utilities in
  ``astropy.sphinx`` now have ``astropy_helpers`` as a documentation
  dependency).

astropy.table
^^^^^^^^^^^^^

- The default table printing function now shows a table header row for units
  if any columns have the unit attribute set.  [#1282]

- Before, an unmasked ``Table`` was automatically converted to a masked
  table if generated from a masked Table or a ``MaskedColumn``.
  Now, this conversion is only done if explicitly requested or if any
  of the input values is actually masked. [#1185]

- The repr() function of ``astropy.table.Table`` now shows the units
  if any columns have the unit attribute set.  [#2180]

- The semantics of the config options ``table.max_lines`` and
  ``table.max_width`` has changed slightly.  If these values are not
  set in the config file, astropy will try to determine the size
  automatically from the terminal. [#2683]

astropy.time
^^^^^^^^^^^^

- Correct use of UT in TDB calculation [#1938, #1939].

- ``TimeDelta`` objects can have scales other than TAI [#1932].

- Location information should now be passed on via an ``EarthLocation``
  instance or anything that initialises it, e.g., a tuple containing
  either geocentric or geodetic coordinates. [#1928]

astropy.units
^^^^^^^^^^^^^

- ``Quantity`` now converts input to float by default, as this is physically
  most sensible for nearly all units [#1776].

- ``Quantity`` comparisons with ``==`` or ``!=`` now always return ``True``
  or ``False``, even if units do not match (for which case a ``UnitsError``
  used to be raised).  [#2328]

- Applying ``float`` or ``int`` to a ``Quantity`` now works for all
  dimensionless quantities; they are automatically converted to unscaled
  dimensionless. [#2249]

- The exception ``astropy.units.UnitException``, which was
  deprecated in astropy 0.2, has been removed.  Use
  ``astropy.units.UnitError`` instead [#2386]

- Initializing a ``Quantity`` with a valid number/array with a ``unit``
  attribute now interprets that attribute as the units of the input value.
  This makes it possible to initialize a ``Quantity`` from an Astropy
  ``Table`` column and have it correctly pick up the units from the column.
  [#2486]

astropy.wcs
^^^^^^^^^^^

- ``calcFootprint`` was deprecated. It is replaced by
  ``calc_footprint``.  An optional boolean keyword ``center`` was
  added to ``calc_footprint``.  It controls whether the centers or
  the corners of the pixels are used in the computation. [#2384]

- ``astropy.wcs.WCS.sip_pix2foc`` and
  ``astropy.wcs.WCS.sip_foc2pix`` formerly did not conform to the
  ``SIP`` standard: ``CRPIX`` was added to the ``foc`` result so
  that it could be used as input to "core FITS WCS".  As of astropy
  0.4, ``CRPIX`` is no longer added to the result, so the ``foc``
  space is correct as defined in the `SIP convention
  <https://ui.adsabs.harvard.edu/abs/2005ASPC..347..491S>`__. [#2360]

- ``astropy.wcs.UnitConverter``, which was deprecated in astropy
  0.2, has been removed.  Use the ``astropy.units`` module
  instead. [#2386]

- The following methods on ``astropy.wcs.WCS``, which were
  deprecated in astropy 0.1, have been removed [#2386]:

- ``all_pix2sky`` -> ``all_pix2world``

- ``wcs_pix2sky`` -> ``wcs_pix2world``

- ``wcs_sky2pix`` -> ``wcs_world2pix``

- The ``naxis1`` and ``naxis2`` attributes and the ``get_naxis``
  method of ``astropy.wcs.WCS``, which were deprecated in astropy
  0.2, have been removed.  Use the shape of the underlying FITS data
  array instead.  [#2386]

Misc
^^^^

- The ``astropy.setup_helpers`` and ``astropy.version_helpers`` modules are
  deprecated; any non-critical fixes and development to those modules should
  be in ``astropy_helpers`` instead.  Packages that use these modules in
  their ``setup.py`` should depend on ``astropy_helpers`` following the same
  pattern as in the Astropy package template.


Bug Fixes
---------

astropy.constants
^^^^^^^^^^^^^^^^^

- ``astropy.constants.Contant`` objects can now be deep
  copied. [#2601]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The distance modulus function in ``astropy.cosmology`` can now handle
  negative distances, which can occur in certain closed cosmologies. [#2008]

- Removed accidental imports of some extraneous variables in
  ``astropy.cosmology`` [#2025]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- ``astropy.io.ascii.read`` would fail to read lists of strings where some of
  the strings consisted of just a newline ("\n"). [#2648]

astropy.io.fits
^^^^^^^^^^^^^^^

- Use NaN for missing values in FITS when using Table.write for float
  columns. Earlier the default fill value was close to 1e20.[#2186]

- Fixes for checksums on 32-bit platforms.  Results may be different
  if writing or checking checksums in "nonstandard" mode.  [#2484]

- Additional minor bug fixes ported from PyFITS.  [#2575]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- It is now possible to save an ``astropy.table.Table`` object as a
  VOTable with any of the supported data formats, ``tabledata``,
  ``binary`` and ``binary2``, by using the ``tabledata_format``
  kwarg. [#2138]

- Fixed a crash writing out variable length arrays. [#2577]

astropy.nddata
^^^^^^^^^^^^^^

- Indexing ``NDData`` in a way that results in a single element returns that
  element. [#2170]

- Change construction of result of arithmetic and unit conversion to allow
  subclasses to require the presence of attribute like unit. [#2300]

- Scale uncertainties to correct units in arithmetic operations and unit
  conversion. [#2393]

- Ensure uncertainty and mask members are copied in arithmetic and
  convert_unit_to. [#2394]

- Mask result of arithmetic if either of the operands is masked. [#2403]

- Copy all attributes of input object if ``astropy.nddata.NDData`` is
  initialized with an ``NDData`` object. [#2406]

- Copy ``flags`` to new object in ``convert_unit_to``. [#2409]

- Result of ``NDData`` arithmetic makes a copy of any WCS instead of using
  a reference. [#2410]

- Fix unit handling for multiplication/division and use
  ``astropy.units.Quantity`` for units arithmetic. [#2413]

- A masked ``NDData`` is now converted to a masked array when used in an
  operation or ufunc with a numpy array. [#2414]

- An unmasked ``NDData`` now uses an internal representation of its mask
  state that ``numpy.ma`` expects so that an ``NDData`` behaves as an
  unmasked array. [#2417]

astropy.sphinx
^^^^^^^^^^^^^^

- Fix crash in smart resolver when the resolution doesn't work. [#2591]

astropy.table
^^^^^^^^^^^^^

- The ``astropy.table.Column`` object can now use both functions and callable
  objects as formats. [#2313]

- Fixed a problem on 64 bit windows that caused errors
  "expected 'DTYPE_t' but got 'long long'" [#2490]

- Fix initialisation of ``TableColumns`` with lists or tuples.  [#2647]

- Fix removal of single column using ``remove_columns``. [#2699]

- Fix a problem that setting a row element within a masked table did not
  update the corresponding table element. [#2734]

astropy.time
^^^^^^^^^^^^

- Correct UT1->UTC->UT1 round-trip being off by 1 second if UT1 is
  on a leap second. [#2077]

astropy.units
^^^^^^^^^^^^^

- ``Quantity.copy`` now behaves identically to ``ndarray.copy``, and thus
  supports the ``order`` argument (for numpy >=1.6). [#2284]

- Composing base units into identical composite units now works. [#2382]

- Creating and composing/decomposing units is now substantially faster [#2544]

- ``Quantity`` objects now are able to be assigned NaN [#2695]

astropy.wcs
^^^^^^^^^^^

- Astropy now requires wcslib version 4.23.  The version of wcslib
  included with astropy has been updated to version 4.23.

- Bug fixes in the projection routines: in ``hpxx2s`` [the
  cartesian-to-spherical operation of the ``HPX`` projection]
  relating to bounds checking, bug introduced at wcslib 4.20; in
  ``parx2s`` and molx2s`` [the cartesion-to-spherical operation of
  the ``PAR`` and ``MOL`` projections respectively] relating to
  setting the stat vector; in ``hpxx2s`` relating to implementation
  of the vector API; and in ``xphx2s`` relating to setting an
  out-of-bounds value of *phi*.

- In the ``PCO`` projection, use alternative projection equations
  for greater numerical precision near theta == 0.  In the ``COP``
  projection, return an exact result for theta at the poles.
  Relaxed the tolerance for bounds checking a little in ``SFL``
  projection.

- Fix a bug allocating insufficient memory in
  ``astropy.wcs.WCS.sub`` [#2468]

- A new method, ``Wcsprm.bounds_check`` (corresponding to wcslib's
  ``wcsbchk``) has been added to control what bounds checking is performed by
  wcslib.

- ``WCS.to_header`` will now raise a more meaningful exception when the WCS
  information is invalid or inconsistent in some way. [#1854]

- In ``WCS.to_header``, ``RESTFRQ`` and ``RESTWAV`` are no longer
  rewritten if zero. [#2468]

- In ``WCS.to_header``, floating point values will now always be written
  with an exponent or fractional part, i.e. ``.0`` being appended if necessary
  to achieve this. [#2468]

- If the C extension for ``astropy.wcs`` was not built or fails to import for
  any reason, ``import astropy.wcs`` will result in an ``ImportError``,
  rather than getting obscure errors once the ``astropy.wcs`` is used.
  [#2061]

- When the C extension for ``astropy.wcs`` is built using a version of
  ``wscslib`` already present in the system, the package does not try
  to install ``wcslib`` headers under ``astropy/wcs/include``. [#2536]

- Fixes an unresolved external symbol error in the
  ``astropy.wcs._wcs`` C extension on Microsoft Windows when built
  with a Microsoft compiler. [#2478]

Misc
^^^^

- Running the test suite with ``python setup.py test`` now works if
  the path to the source contains spaces. [#2488]

- The version of ERFA included with Astropy is now v1.1.0 [#2497]

- Removed deprecated option from travis configuration and force use of
  wheels rather than allowing build from source. [#2576]

- The short option ``-n`` to run tests in parallel was broken
  (conflicts with the distutils built-in option of "dry-run").
  Changed to ``-j``. [#2566]

Other Changes and Additions
---------------------------

- python setup.py test --coverage will now give more accurate
  results, because the coverage analysis will include early imports of
  astropy.  There doesn't seem to be a way to get this to work when
  doing ``import astropy; astropy.test()``, so the ``coverage``
  keyword to ``astropy.test`` has been removed.  Coverage testing now
  depends only on `coverage.py
  <http://coverage.readthedocs.io/en/latest/>`__, not
  ``pytest-cov``. [#2112]

- The included version of py.test has been upgraded to 2.5.1. [#1970]

- The included version of six.py has been upgraded to 1.5.2. [#2006]

- Where appropriate, tests are now run both with and without the
  ``unicode_literals`` option to ensure that we support both cases. [#1962]

- Running the Astropy test suite from within the IPython REPL is disabled for
  now due to bad interaction between the test runner and IPython's logging
  and I/O handler.  For now, run the Astropy tests should be run in the basic
  Python interpreter. [#2684]

- Added support for numerical comparison of floating point values appearing in
  the output of doctests using a ``+FLOAT_CMP`` doctest flag. [#2087]

- A monkey patch is performed to fix a bug in Numpy version 1.7 and
  earlier where unicode fill values on masked arrays are not
  supported.  This may cause unintended side effects if your
  application also monkey patches ``numpy.ma`` or relies on the broken
  behavior.  If unicode support of masked arrays is important to your
  application, upgrade to Numpy 1.8 or later for best results. [#2059]

- The developer documentation has been extensively rearranged and
  rewritten. [#1712]

- The ``human_time`` function in ``astropy.utils`` now returns strings
  without zero padding. [#2420]

- The ``bdist_dmg`` command for ``setup.py`` has now been removed. [#2553]

- Many broken API links have been fixed in the documentation, and the
  ``nitpick`` Sphinx option is now used to avoid broken links in future.
  [#1221, #2019, #2109, #2161, #2162, #2192, #2200, #2296, #2448, #2456,
  #2460, #2467, #2476, #2508, #2509]


Version 0.3.2 (2014-05-13)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- if ``sep`` argument is specified to be a single character in
  ``sexagisimal_to_string``, it now includes separators only between
  items [#2183]

- Ensure comparisons involving ``Distance`` objects do not raise exceptions;
  also ensure operations that lead to units other than length return
  ``Quantity``. [#2206, #2250]

- Multiplication and division of ``Angle`` objects is now
  supported. [#2273]

- Fixed ``Angle.to_string`` functionality so that negative angles have the
  correct amount of padding when ``pad=True``. [#2337]

- Mixing strings and quantities in the ``Angle`` constructor now
  works.  For example: ``Angle(['1d', 1. * u.d])``.  [#2398]

- If ``Longitude`` is given a ``Longitude`` as input, use its ``wrap_angle``
  by default [#2705]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Fixed ``format()`` compatibility with Python 2.6. [#2129]

- Be more careful about converting to floating point internally [#1815, #1818]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- The CDS reader in ``astropy.io.ascii`` can now handle multiple
  description lines in ReadMe files. [#2225]

- When reading a table with values that generate an overflow error during
  type conversion (e.g. overflowing the native C long type), fall through to
  using string. Previously this generated an exception [#2234].

- Recognize any string with one to four dashes as null value. [#1335]

astropy.io.fits
^^^^^^^^^^^^^^^

- Allow pickling of ``FITS_rec`` objects. [#1597]

- Improved behavior when writing large compressed images on OSX by removing
  an unnecessary check for platform architecture. [#2345]

- Fixed an issue where Astropy ``Table`` objects containing boolean columns
  were not correctly written out to FITS files. [#1953]

- Several other bug fixes ported from PyFITS v3.2.3 [#2368]

- Fixed a crash on Python 2.x when writing a FITS file directly to a
  ``StringIO.StringIO`` object. [#2463]

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Allow readers/writers with the same name to be attached to different
  classes. [#2312]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- By default, floating point values are now written out using
  ``repr`` rather than ``str`` to preserve precision [#2137]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed the ``SIP`` and ``InverseSIP`` models both so that they work in the
  first place, and so that they return results consistent with the SIP
  functions in ``astropy.wcs``. [#2177]

astropy.stats
^^^^^^^^^^^^^

- Ensure the ``axis`` keyword in ``astropy.stats.funcs`` can now be used for
  all axes. [#2173]

astropy.table
^^^^^^^^^^^^^

- Ensure nameless columns can be printed, using 'None' for the header. [#2213]

astropy.time
^^^^^^^^^^^^

- Fixed pickling of ``Time`` objects. [#2123]

astropy.units
^^^^^^^^^^^^^

- ``Quantity._repr_latex_()`` returns ``NotImplementedError`` for quantity
  arrays instead of an uninformative formatting exception. [#2258]

- Ensure ``Quantity.flat`` always returns ``Quantity``. [#2251]

- Angstrom unit renders better in MathJax [#2286]

astropy.utils
^^^^^^^^^^^^^

- Progress bars will now be displayed inside the IPython
  qtconsole. [#2230]

- ``data.download_file()`` now evaluates ``REMOTE_TIMEOUT()`` at runtime
  rather than import time. Previously, setting ``REMOTE_TIMEOUT`` after
  import had no effect on the function's behavior. [#2302]

- Progressbar will be limited to 100% so that the bar does not exceed the
  terminal width.  The numerical display can still exceed 100%, however.

astropy.vo
^^^^^^^^^^

- Fixed ``format()`` compatibility with Python 2.6. [#2129]

- Cone Search validation no longer raises ``ConeSearchError`` for positive RA.
  [#2240, #2242]

astropy.wcs
^^^^^^^^^^^

- Fixed a bug where calling ``astropy.wcs.Wcsprm.sub`` with
  ``WCSSUB_CELESTIAL`` may cause memory corruption due to
  underallocation of a temporary buffer. [#2350]

- Fixed a memory allocation bug in ``astropy.wcs.Wcsprm.sub`` and
  ``astropy.wcs.Wcsprm.copy``.  [#2439]

Misc
^^^^

- Fixes for compatibility with Python 3.4. [#1945]

- ``import astropy; astropy.test()`` now correctly uses the same test
  configuration as ``python setup.py test`` [#1811]


Version 0.3.1 (2014-03-04)
==========================

Bug Fixes
---------

astropy.config
^^^^^^^^^^^^^^

- Fixed a bug where ``ConfigurationItem.set_temp()`` does not reset to
  default value when exception is raised within ``with`` block. [#2117]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where ``_truncation`` was left undefined for ``CustomKernel``.
  [#2016]

- Fixed a bug with ``_normalization`` when ``CustomKernel`` input array
  sums to zero. [#2016]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed a bug where using ``==`` on two array coordinates wouldn't
  work. [#1832]

- Fixed bug which caused ``len()`` not to work for coordinate objects and
  added a ``.shape`` property to get appropriately array-like behavior.
  [#1761, #2014]

- Fixed a bug where sexagesimal notation would sometimes include
  exponential notation in the last field. [#1908, #1913]

- ``CompositeStaticMatrixTransform`` no longer attempts to reference the
  undefined variable ``self.matrix`` during instantiation. [#1944]

- Fixed pickling of ``Longitude``, ensuring ``wrap_angle`` is preserved
  [#1961]

- Allow ``sep`` argument in ``Angle.to_string`` to be empty (resulting in no
  separators) [#1989]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Allow passing unicode delimiters when reading or writing tables.  The
  delimiter must be convertible to pure ASCII.  [#1949]

- Fix a problem when reading a table and renaming the columns to names that
  already exist. [#1991]

astropy.io.fits
^^^^^^^^^^^^^^^

- Ported all bug fixes from PyFITS 3.2.1.  See the PyFITS changelog at
  https://pyfits.readthedocs.io/en/v3.2.1/ [#2056]

astropy.io.misc
^^^^^^^^^^^^^^^

- Fixed issues in the HDF5 Table reader/writer functions that occurred on
  Windows. [#2099]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- The ``write_null_values`` kwarg to ``VOTable.to_xml``, when set to `False`
  (the default) would produce non-standard VOTable files.  Therefore, this
  functionality has been replaced by a better understanding that knows which
  fields in a VOTable may be left empty (only ``char``, ``float`` and
  ``double`` in VOTable 1.1 and 1.2, and all fields in VOTable 1.3).  The
  kwarg is still accepted but it will be ignored, and a warning is emitted.
  [#1809]

- Printing out a ``astropy.io.votable.tree.Table`` object using `repr` or
  `str` now uses the pretty formatting in ``astropy.table``, so it's possible
  to easily preview the contents of a ``VOTable``. [#1766]

astropy.modeling
^^^^^^^^^^^^^^^^

- Fixed bug in computation of model derivatives in ``LinearLSQFitter``.
  [#1903]

- Raise a ``NotImplementedError`` when fitting composite models. [#1915]

- Fixed bug in the computation of the ``Gaussian2D`` model. [#2038]

- Fixed bug in the computation of the ``AiryDisk2D`` model. [#2093]

astropy.sphinx
^^^^^^^^^^^^^^

- Added slightly more useful debug info for AstropyAutosummary. [#2024]

astropy.table
^^^^^^^^^^^^^

- The column string representation for n-dimensional cells with only
  one element has been fixed. [#1522]

- Fix a problem that caused ``MaskedColumn.__getitem__`` to not preserve
  column metadata. [#1471, #1872]

- With Numpy prior to version 1.6.2, tables with Unicode columns now
  sort correctly. [#1867]

- ``astropy.table`` can now print out tables with Unicode columns containing
  non-ascii characters. [#1864]

- Columns can now be named with Unicode strings, as long as they contain only
  ascii characters.  This makes using ``astropy.table`` easier on Python 2
  when ``from __future__ import unicode_literals`` is used. [#1864]

- Allow pickling of ``Table``, ``Column``, and ``MaskedColumn`` objects. [#792]

- Fix a problem where it was not possible to rename columns after sorting or
  adding a row. [#2039]

astropy.time
^^^^^^^^^^^^

- Fix a problem where scale conversion problem in TimeFromEpoch
  was not showing a useful error [#2046]

- Fix a problem when converting to one of the formats ``unix``, ``cxcsec``,
  ``gps`` or ``plot_date`` when the time scale is ``UT1``, ``TDB`` or ``TCB``
  [#1732]

- Ensure that ``delta_ut1_utc`` gets calculated when accessed directly,
  instead of failing and giving a rather obscure error message [#1925]

- Fix a bug when computing the TDB to TT offset.  The transform routine was
  using meters instead of kilometers for the Earth vector.  [#1929]

- Increase ``__array_priority__`` so that ``TimeDelta`` can convert itself
  to a ``Quantity`` also in reverse operations [#1940]

- Correct hop list from TCG to TDB to ensure that conversion is
  possible [#2074]

astropy.units
^^^^^^^^^^^^^

- ``Quantity`` initialisation rewritten for speed [#1775]

- Fixed minor string formatting issue for dimensionless quantities. [#1772]

- Fix error for inplace operations on non-contiguous quantities [#1834].

- The definition of the unit ``bar`` has been corrected to "1e5
  Pascal" from "100 Pascal" [#1910]

- For units that are close to known units, but not quite, for
  example due to differences in case, the exception will now include
  recommendations. [#1870]

- The generic and FITS unit parsers now accept multiple slashes in
  the unit string.  There are multiple ways to interpret them, but
  the approach taken here is to convert "m/s/kg" to "m s-1 kg-1".
  Multiple slashes are accepted, but discouraged, by the FITS
  standard, due to the ambiguity of parsing, so a warning is raised
  when it is encountered. [#1911]

- The use of "angstrom" (with a lower case "a") is now accepted in FITS unit
  strings, since it is in common usage.  However, since it is not officially
  part of the FITS standard, a warning will be issued when it is encountered.
  [#1911]

- Pickling unrecognized units will not raise a ``AttributeError``. [#2047]

- ``astropy.units`` now correctly preserves the precision of
  fractional powers. [#2070]

- If a ``Unit`` or ``Quantity`` is raised to a floating point power
  that is very close to a rational number with a denominator less
  than or equal to 10, it is converted to a ``Fraction`` object to
  preserve its precision through complex unit conversion operations.
  [#2070]

astropy.utils
^^^^^^^^^^^^^

- Fixed crash in ``timer.RunTimePredictor.do_fit``. [#1905]

- Fixed ``astropy.utils.compat.argparse`` for Python 3.1. [#2017]

astropy.wcs
^^^^^^^^^^^

- ``astropy.wcs.WCS``, ``astropy.wcs.WCS.fix`` and
  ``astropy.wcs.find_all_wcs`` now have a ``translate_units`` keyword
  argument that is passed down to ``astropy.wcs.Wcsprm.fix``.  This can be
  used to specify any unsafe translations of units from rarely used ones to
  more commonly used ones.

  Although ``"S"`` is commonly used to represent seconds, its translation to
  ``"s"`` is potentially unsafe since the standard recognizes ``"S"``
  formally as Siemens, however rarely that may be used.  The same applies to
  ``"H"`` for hours (Henry), and ``"D"`` for days (Debye).

  When these sorts of changes are performed, a warning is emitted.
  [#1854]

- When a unit is "fixed" by ``astropy.wcs.WCS.fix`` or
  ``astropy.wcs.Wcsprm.unitfix``, it now correctly reports the ``CUNIT``
  field that was changed. [#1854]

- ``astropy.wcs.Wcs.printwcs`` will no longer warn that ``cdelt`` is being
  ignored when none was present in the FITS file. [#1845]

- ``astropy.wcs.Wcsprm.set`` is called from within the ``astropy.wcs.WCS``
  constructor, therefore any invalid information in the keywords will be
  raised from the constructor, rather than on a subsequent call to a
  transformation method. [#1918]

- Fix a memory corruption bug when using ``astropy.wcs.Wcs.sub`` with
  ``astropy.wcs.WCSSUB_CELESTIAL``. [#1960]

- Fixed the ``AttributeError`` exception that was raised when using
  ``astropy.wcs.WCS.footprint_to_file``. [#1912]

- Fixed a ``NameError`` exception that was raised when using
  ``astropy.wcs.validate`` or the ``wcslint`` script. [#2053]

- Fixed a bug where named WCSes may be erroneously reported as ``' '`` when
  using ``astropy.wcs.validate`` or the ``wcslint`` script. [#2053]

- Fixed a bug where error messages about incorrect header keywords
  may not be propagated correctly, resulting in a "NULL error object
  in wcslib" message. [#2106]

Misc
^^^^

- There are a number of improvements to make Astropy work better on big
  endian platforms, such as MIPS, PPC, s390x and SPARC. [#1849]

- The test suite will now raise exceptions when a deprecated feature of
  Python or Numpy is used.  [#1948]

Other Changes and Additions
---------------------------

- A new function, ``astropy.wcs.get_include``, has been added to get the
  location of the ``astropy.wcs`` C header files. [#1755]

- The doctests in the ``.rst`` files in the ``docs`` folder are now
  tested along with the other unit tests.  This is in addition to the
  testing of doctests in docstrings that was already being performed.
  See ``docs/development/testguide.rst`` for more information. [#1771]

- Fix a problem where import fails on Python 3 if setup.py exists
  in current directory. [#1877]


Version 0.3 (2013-11-20)
========================

New Features
------------

- General

- A top-level configuration item, ``unicode_output`` has been added to
  control whether the Unicode string representation of certain
  objects will contain Unicode characters.  For example, when
  ``use_unicode`` is `False` (default)::

      >>> from astropy import units as u
      >>> print(unicode(u.degree))
      deg

  When ``use_unicode`` is `True`::

      >>> from astropy import units as u
      >>> print(unicode(u.degree))
      °

  See `handling-unicode
  <https://docs.astropy.org/en/v0.3/development/codeguide.html#unicode-guidelines>`_
  for more information. [#1441]

- ``astropy.utils.misc.find_api_page`` is now imported into the top-level.
  This allows usage like ``astropy.find_api_page(astropy.units.Quantity)``.
  [#1779]

astropy.convolution
^^^^^^^^^^^^^^^^^^^

- New class-based system for generating kernels, replacing ``make_kernel``.
  [#1255] The ``astropy.nddata.convolution`` sub-package has now been moved
  to ``astropy.convolution``. [#1451]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Two classes ``astropy.coordinates.Longitude`` and
  ``astropy.coordinates.Latitude`` have been added.  These are derived from
  the new ``Angle`` class and used for all longitude-like (RA, azimuth,
  galactic L) and latitude-like coordinates (Dec, elevation, galactic B)
  respectively.  The ``Longitude`` class provides auto-wrapping capability
  and ``Latitude`` performs bounds checking.

- ``astropy.coordinates.Distance`` supports conversion to and from distance
  modulii. [#1472]

- ``astropy.coordinates.SphericalCoordinateBase`` and derived classes now
  support arrays of coordinates, enabling large speed-ups for some operations
  on multiple coordinates at the same time. These coordinates can also be
  indexed using standard slicing or any Numpy-compatible indexing. [#1535,
  #1615]

- Array coordinates can be matched to other array coordinates, finding the
  closest matches between the two sets of coordinates (see the
  ``astropy.coordinates.matching.match_coordinates_3d`` and
  ``astropy.coordinates.matching.match_coordinates_sky`` functions). [#1535]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Added support for including massive Neutrinos in the cosmology classes. The
  Planck (2013) cosmology has been updated to use this. [#1364]

- Calculations now use and return ``Quantity`` objects where appropriate.
  [#1237]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Added support for writing IPAC format tables [#1152].

astropy.io.fits
^^^^^^^^^^^^^^^

- Added initial support for table columns containing pseudo-unsigned
  integers.  This is currently enabled by using the ``uint=True`` option when
  opening files; any table columns with the correct BZERO value will be
  interpreted and returned as arrays of unsigned integers. [#906]

- Upgraded vendored copy of CFITSIO to v3.35, though backwards compatibility
  back to version v3.28 is maintained.

- Added support for reading and writing tables using the Q format for columns.
  The Q format is identical to the P format (variable-length arrays) except
  that it uses 64-bit integers for the data descriptors, allowing more than
  4 GB of variable-length array data in a single table.

- Some refactoring of the table and ``FITS_rec`` modules in order to better
  separate the details of the FITS binary and ASCII table data structures from
  the HDU data structures that encapsulate them.  Most of these changes should
  not be apparent to users (but see API Changes below).

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Updated to support the VOTable 1.3 draft. [#433]

- Added the ability to look up and group elements by their utype attribute.
  [#622]

- The format of the units of a VOTable file can be specified using the
  ``unit_format`` parameter.  Note that units are still always written out
  using the CDS format, to ensure compatibility with the standard.

astropy.modeling
^^^^^^^^^^^^^^^^

- Added a new framework for representing and evaluating mathematical models
  and for fitting data to models.  See "What's New in Astropy 0.3" in the
  documentation for further details. [#493]

astropy.stats
^^^^^^^^^^^^^

- Added robust statistics functions
  ``astropy.stats.funcs.median_absolute_deviation``,
  ``astropy.stats.funcs.biweight_location``, and
  ``astropy.stats.funcs.biweight_midvariance``. [#621]

- Added ``astropy.stats.funcs.signal_to_noise_oir_ccd`` for computing the
  signal to noise ratio for source being observed in the optical/IR using a
  CCD. [#870]

- Add ``axis=int`` option to ``stropy.stats.funcs.sigma_clip`` to allow
  clipping along a given axis for multidimensional data. [#1083]

astropy.table
^^^^^^^^^^^^^

- New columns can be added to a table via assignment to a non-existing
  column by name. [#726]

- Added ``join`` function to perform a database-like join on two tables. This
  includes support for inner, left, right, and outer joins as well as
  metadata merging.  [#903]

- Added ``hstack`` and ``vstack`` functions to stack two or more tables.
  [#937]

- Tables now have a ``.copy`` method and include support for ``copy`` and
  ``deepcopy``. [#1208]

- Added support for selecting and manipulating groups within a table with
  a database style ``group_by`` method. [#1424]

- Table ``read`` and ``write`` functions now include rudimentary support
  reading and writing of FITS tables via the unified reading/writing
  interface. [#591]

- The ``units`` and ``dtypes`` attributes and keyword arguments in Column,
  MaskedColumn, Row, and Table are now deprecated in favor of the
  single-tense ``unit`` and ``dtype``. [#1174]

- Setting a column from a Quantity now correctly sets the unit on the Column
  object. [#732]

- Add ``remove_row`` and ``remove_rows`` to remove table rows. [#1230]

- Added a new ``Table.show_in_browser`` method that opens a web browser
  and displays the table rendered as HTML. [#1342]

- New tables can now be instantiated using a single row from an existing
  table. [#1417]

astropy.time
^^^^^^^^^^^^

- New ``Time`` objects can be instantiated from existing ``Time`` objects
  (but with different format, scale, etc.) [#889]

- Added a ``Time.now`` classmethod that returns the current UTC time,
  similarly to Python's ``datetime.now``. [#1061]

- Update internal time manipulations so that arithmetic with Time and
  TimeDelta objects maintains sub-nanosecond precision over a time span
  longer than the age of the universe. [#1189]

- Use ``astropy.utils.iers`` to provide ``delta_ut1_utc``, so that
  automatic calculation of UT1 becomes possible. [#1145]

- Add ``datetime`` format which allows converting to and from standard
  library ``datetime.datetime`` objects. [#860]

- Add ``plot_date`` format which allows converting to and from the date
  representation used when plotting dates with matplotlib via the
  ``matplotlib.pyplot.plot_date`` function. [#860]

- Add ``gps`` format (seconds since 1980-01-01 00:00:00 UTC,
  including leap seconds) [#1164]

- Add array indexing to Time objects [#1132]

- Allow for arithmetic of multi-element and single-element Time and TimeDelta
  objects. [#1081]

- Allow multiplication and division of TimeDelta objects by
  constants and arrays, as well as changing sign (negation) and
  taking the absolute value of TimeDelta objects. [#1082]

- Allow comparisons of Time and TimeDelta objects. [#1171]

- Support interaction of Time and Quantity objects that represent a time
  interval. [#1431]

astropy.units
^^^^^^^^^^^^^

- Added parallax equivalency for length-angle. [#985]

- Added mass-energy equivalency. [#1333]

- Added a new-style format method which will use format specifiers
  (like ``0.03f``) in new-style format strings for the Quantity's value.
  Specifiers which can't be applied to the value will fall back to the
  entire string representation of the quantity. [#1383]

- Added support for complex number values in quantities. [#1384]

- Added new spectroscopic equivalencies for velocity conversions
  (relativistic, optical, and radio conventions are supported) [#1200]

- The ``spectral`` equivalency now also handles wave number.

- The ``spectral_density`` equivalency now also accepts a Quantity for the
  frequency or wavelength. It also handles additional flux units.

- Added Brightness Temperature (antenna gain) equivalency for conversion
  between :math:`T_B` and flux density. [#1327]

- Added percent unit, and allowed any string containing just a number to be
  interpreted as a scaled dimensionless unit. [#1409]

- New-style format strings can be used to set the unit output format.  For
  example, ``"{0:latex}".format(u.km)`` will print with the latex formatter.
  [#1462]

- The ``Unit.is_equivalent`` method can now take a tuple. In this case, the
  method returns ``True`` if the unit is equivalent to any of the units
  listed in the tuple. [#1521]

- ``def_unit`` can now take a 2-tuple of names of the form (short, long),
  where each entry is a list.  This allows for handling strange units that
  might have multiple short names. [#1543]

- Added ``dimensionless_angles`` equivalency, which allows conversion of any
  power of radian to dimensionless. [#1161]

- Added the ability to enable set of units, or equivalencies that are used by
  default.  Also provided context managers for these cases. [#1268]

- Imperial units are disabled by default. [#1593, #1662]

- Added an ``astropy.units.add_enabled_units`` context manager, which allows
  creating a temporary context with additional units temporarily enabled in
  the global units namespace. [#1662]

- ``Unit`` instances now have ``.si`` and ``.cgs`` properties a la
  ``Quantity``.  These serve as shortcuts for ``Unit.to_system(cgs)[0]``
  etc. [#1610]

astropy.vo
^^^^^^^^^^

- New package added to support Virtual Observatory Simple Cone Search query
  and service validation. [#552]

astropy.wcs
^^^^^^^^^^^

- Fixed attribute error in ``astropy.wcs.Wcsprm`` (lattype->lattyp) [#1463]

- Included a new command-line script called ``wcslint`` and accompanying API
  for validating the WCS in a given FITS file or header. [#580]

- Upgraded included version of WCSLIB to 4.19.

astropy.utils
^^^^^^^^^^^^^

- Added a new set of utilities in ``astropy.utils.timer`` for analyzing the
  runtime of functions and making runtime predections for larger inputs.
  [#743]

- ``ProgressBar`` and ``Spinner`` classes can now be used directly to return
  generator expressions. [#771]

- Added ``astropy.utils.iers`` which allows reading in of IERS A or IERS B
  bulletins and interpolation in UT1-UTC.

- Added a function ``astropy.utils.find_api_page``--given a class or object
  from the ``astropy`` package, this will open that class's API documentation
  in a web browser. [#663]

- Data download functions such as ``download_file`` now accept a
  ``show_progress`` argument to suppress console output, and a ``timeout``
  argument. [#865, #1258]

astropy.extern.six
^^^^^^^^^^^^^^^^^^

- Added `six <https://pypi.org/project/six/>`_ for python2/python3
  compatibility

- Astropy now uses the ERFA library instead of the IAU SOFA library for
  fundamental time transformation routines.  The ERFA library is derived, with
  permission, from the IAU SOFA library but is distributed under a BSD license.
  See ``license/ERFA.rst`` for details. [#1293]

astropy.logger
^^^^^^^^^^^^^^

- The Astropy logger now no longer catches exceptions by default, and also
  only captures warnings emitted by Astropy itself (prior to this change,
  following an import of Astropy, any warning got re-directed through the
  Astropy logger). Logging to the Astropy log file has also been disabled by
  default. However, users of Astropy 0.2 will likely still see the previous
  behavior with Astropy 0.3 for exceptions and logging to file since the
  default configuration file installed by 0.2 set the exception logging to be
  on by default. To get the new behavior, set the ``log_exceptions`` and
  ``log_to_file`` configuration items to ``False`` in the ``astropy.cfg``
  file. [#1331]

API Changes
-----------

- General

- The configuration option ``utils.console.use_unicode`` has been
  moved to the top level and renamed to ``unicode_output``.  It now
  not only affects console widgets, such as progress bars, but also
  controls whether calling `unicode` on certain classes will return a
  string containing unicode characters.

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- The ``astropy.coordinates.Angle`` class is now a subclass of
  ``astropy.units.Quantity``. This means it has all of the methods of a
  `numpy.ndarray`. [#1006]

- The ``astropy.coordinates.Distance`` class is now a subclass of
  ``astropy.units.Quantity``. This means it has all of the methods of a
  `numpy.ndarray`. [#1472]

- All angular units are now supported, not just ``radian``, ``degree`` and
  ``hour``, but now ``arcsecond`` and ``arcminute`` as well.  The object
  will retain its native unit, so when printing out a value initially
  provided in hours, its ``to_string()`` will, by default, also be
  expressed in hours.

- The ``Angle`` class now supports arrays of angles.

- To be consistent with ``units.Unit``, ``Angle.format`` has been
  deprecated and renamed to ``Angle.to_string``.

- To be consistent with ``astropy.units``, all plural forms of unit names
  have been removed.  Therefore, the following properties of
  ``astropy.coordinates.Angle`` should be renamed:

- ``radians`` -> ``radian``

- ``degrees`` -> ``degree``

- ``hours`` -> ``hour``

- Multiplication and division of two ``Angle`` objects used to raise
  ``NotImplementedError``.  Now they raise ``TypeError``.

- The ``astropy.coordinates.Angle`` class no longer has a ``bounds``
  attribute so there is no bounds-checking or auto-wrapping at this level.
  This allows ``Angle`` objects to be used in arbitrary arithmetic
  expressions (e.g. coordinate distance computation).

- The ``astropy.coordinates.RA`` and ``astropy.coordinates.Dec`` classes have
  been removed and replaced with ``astropy.coordinates.Longitude`` and
  ``astropy.coordinates.Latitude`` respectively.  These are now used for the
  components of Galactic and Horizontal (Alt-Az) coordinates as well instead
  of plain ``Angle`` objects.

- ``astropy.coordinates.angles.rotation_matrix`` and
  ``astropy.coordinates.angles.angle_axis`` now take a ``unit`` kwarg instead
  of ``degrees`` kwarg to specify the units of the angles.
  ``rotation_matrix`` will also take the unit from the given ``Angle`` object
  if no unit is provided.

- The ``AngularSeparation`` class has been removed.  The output of the
  coordinates ``separation()`` method is now an
  ``astropy.coordinates.Angle``.  [#1007]

- The coordinate classes have been renamed in a way that remove the
  ``Coordinates`` at the end of the class names.  E.g., ``ICRSCoordinates``
  from previous versions is now called ``ICRS``. [#1614]

- ``HorizontalCoordinates`` are now named ``AltAz``, to reflect more common
  terminology.

astropy.cosmology
^^^^^^^^^^^^^^^^^

- The Planck (2013) cosmology will likely give slightly different (and more
  accurate) results due to the inclusion of Neutrino masses. [#1364]

- Cosmology class properties now return ``Quantity`` objects instead of
  simple floating-point values. [#1237]

- The names of cosmology instances are now truly optional, and are set to
  ``None`` rather than the name of the class if the user does not provide
  them.  [#1705]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- In the ``read`` method of ``astropy.io.ascii``, empty column values in an
  ASCII table are now treated as missing values instead of the previous
  treatment as a zero-length string "".  This now corresponds to the behavior
  of other table readers like ``numpy.genfromtxt``.  To restore the previous
  behavior set ``fill_values=None`` in the call to ``ascii.read()``. [#919]

- The ``read`` and ``write`` methods of ``astropy.io.ascii`` now have a
  ``format`` argument for specifying the file format.  This is the preferred
  way to choose the format instead of the ``Reader`` and ``Writer``
  arguments. [#961]

- The ``include_names`` and ``exclude_names`` arguments were removed from
  the ``BaseHeader`` initializer, and now instead handled by the reader and
  writer classes directly. [#1350]

- Allow numeric and otherwise unusual column names when reading a table
  where the ``format`` argument is specified, but other format details such
  as the delimiter or quote character are being guessed. [#1692]

- When reading an ASCII table using the ``Table.read()`` method, the default
  has changed from ``guess=False`` to ``guess=True`` to allow auto-detection
  of file format.  This matches the default behavior of ``ascii.read()``.

astropy.io.fits
^^^^^^^^^^^^^^^

- The ``astropy.io.fits.new_table`` function is marked "pending deprecation".
  This does not mean it will be removed outright or that its functionality
  has changed.  It will likely be replaced in the future for a function with
  similar, if not subtly different functionality.  A better, if not slightly
  more verbose approach is to use ``pyfits.FITS_rec.from_columns`` to create
  a new ``FITS_rec`` table--this has the same interface as
  ``pyfits.new_table``.  The difference is that it returns a plan
  ``FITS_rec`` array, and not an HDU instance.  This ``FITS_rec`` object can
  then be used as the data argument in the constructors for ``BinTableHDU``
  (for binary tables) or ``TableHDU`` (for ASCII tables).  This is analogous
  to creating an ``ImageHDU`` by passing in an image array.
  ``pyfits.FITS_rec.from_columns`` is just a simpler way of creating a
  FITS-compatible recarray from a FITS column specification.

- The ``updateHeader``, ``updateHeaderData``, and ``updateCompressedData``
  methods of the ``CompDataHDU`` class are pending deprecation and moved to
  internal methods.  The operation of these methods depended too much on
  internal state to be used safely by users; instead they are invoked
  automatically in the appropriate places when reading/writing compressed
  image HDUs.

- The ``CompDataHDU.compData`` attribute is pending deprecation in favor of
  the clearer and more PEP-8 compatible ``CompDataHDU.compressed_data``.

- The constructor for ``CompDataHDU`` has been changed to accept new keyword
  arguments.  The new keyword arguments are essentially the same, but are in
  underscore_separated format rather than camelCase format.  The old
  arguments are still pending deprecation.

- The internal attributes of HDU classes ``_hdrLoc``, ``_datLoc``, and
  ``_datSpan`` have been replaced with ``_header_offset``, ``_data_offset``,
  and ``_data_size`` respectively.  The old attribute names are still pending
  deprecation.  This should only be of interest to advanced users who have
  created their own HDU subclasses.

- The following previously deprecated functions and methods have been removed
  entirely: ``createCard``, ``createCardFromString``, ``upperKey``,
  ``ColDefs.data``, ``setExtensionNameCaseSensitive``, ``_File.getfile``,
  ``_TableBaseHDU.get_coldefs``, ``Header.has_key``, ``Header.ascardlist``.

- Interfaces that were pending deprecation are now fully deprecated.  These
  include: ``create_card``, ``create_card_from_string``, ``upper_key``,
  ``Header.get_history``, and ``Header.get_comment``.

- The ``.name`` attribute on HDUs is now directly tied to the HDU's header, so
  that if ``.header['EXTNAME']`` changes so does ``.name`` and vice-versa.

astropy.io.registry
^^^^^^^^^^^^^^^^^^^

- Identifier functions for reading/writing Table and NDData objects should
  now accept ``(origin, *args, **kwargs)`` instead of ``(origin, args,
  kwargs)``. [#591]

- Added a new ``astropy.io.registry.get_formats`` function for listing
  registered I/O formats and details about the their readers/writers. [#1669]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Added a new option ``use_names_over_ids`` option to use when converting
  from VOTable objects to Astropy Tables. This can prevent a situation where
  column names are not preserved when converting from a VOTable. [#609]

astropy.nddata
^^^^^^^^^^^^^^

- The ``astropy.nddata.convolution`` sub-package has now been moved to
  ``astropy.convolution``, and the ``make_kernel`` function has been removed.
  (the kernel classes should be used instead) [#1451]

astropy.stats.funcs
^^^^^^^^^^^^^^^^^^^

- For ``sigma_clip``, the ``maout`` optional parameter has been removed, and
  the function now always returns a masked array.  A new boolean parameter
  ``copy`` can be used to indicated whether the input data should be copied
  (``copy=True``, default) or used by reference (``copy=False``) in the
  output masked array. [#1083]

astropy.table
^^^^^^^^^^^^^

- The first argument to the ``Column`` and ``MaskedColumn`` classes is now
  the data array--the ``name`` argument has been changed to an optional
  keyword argument. [#840]

- Added support for instantiating a ``Table`` from a list of dict, each one
  representing a single row with the keys mapping to column names. [#901]

- The plural 'units' and 'dtypes' have been switched to 'unit' and 'dtype'
  where appropriate. The original attributes are still present in this
  version as deprecated attributes, but will be removed in the next version.
  [#1174]

- The ``copy`` methods of ``Column`` and ``MaskedColumn`` were changed so
  that the first argument is now ``order='C'``.  This is required for
  compatibility with Numpy 1.8 which is currently in development. [#1250]

- Comparing a column (with == or !=) to a scalar, an array, or another column
  now always returns a boolean Numpy array (which is a masked array if either
  of the arguments in the comparison was masked). This is in contrast to the
  previous behavior, which in some cases returned a boolean Numpy array, and
  in some cases returned a boolean Column object. [#1446]

astropy.time
^^^^^^^^^^^^

- For consistency with ``Quantity``, the attributes ``val`` and
  ``is_scalar`` have been renamed to ``value`` and ``isscalar``,
  respectively, and the attribute ``vals`` has been dropped. [#767]

- The double-float64 internal representation of time is used more
  efficiently to enable better accuracy. [#366]

- Format and scale arguments are now allowed to be case-insensitive. [#1128]

astropy.units
^^^^^^^^^^^^^

- The ``Quantity`` class now inherits from the Numpy array class, and
  includes the following API changes [#929]:

- Using ``float(...)``, ``int(...)``, and ``long(...)`` on a quantity will
  now only work if the quantity is dimensionless and unscaled.

- All Numpy ufuncs should now treat units correctly (or raise an exception
  if not supported), rather than extract the value of quantities and
  operate on this, emitting a warning about the implicit loss of units.

- When using relevant Numpy ufuncs on dimensionless quantities (e.g.
  ``np.exp(h * nu / (k_B * T))``), or combining dimensionless quantities
  with Python scalars or plain Numpy arrays ``1 + v / c``, the
  dimensionless Quantity will automatically be converted to an unscaled
  dimensionless Quantity.

- When initializing a quantity from a value with no unit, it is now set to
  be dimensionless and unscaled by default. When initializing a Quantity
  from another Quantity and with no unit specified in the initializer, the
  unit is now taken from the unit of the Quantity being initialized from.

- Strings are no longer allowed as the values for Quantities. [#1005]

- Quantities are always comparable with zero regardless of their units.
  [#1254]

- The exception ``astropy.units.UnitsException`` has been renamed to
  ``astropy.units.UnitsError`` to be more consistent with the naming
  of built-in Python exceptions. [#1406]

- Multiplication with and division by a string now always returns a Unit
  (rather than a Quantity when the string was first) [#1408]

- Imperial units are disabled by default.

astropy.wcs
^^^^^^^^^^^

- For those including the ``astropy.wcs`` C headers in their project, they
  should now include it as:

  #include "astropy_wcs/astropy_wcs_api.h"

  instead of:

  #include "astropy_wcs_api.h"

  [#1631]

- The ``--enable-legacy`` option for ``setup.py`` has been removed. [#1493]

Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- The ``write()`` function was ignoring the ``fill_values`` argument. [#910]

- Fixed an issue in ``DefaultSplitter.join`` where the delimiter attribute
  was ignored when writing the CSV. [#1020]

- Fixed writing of IPAC tables containing null values. [#1366]

- When a table with no header row was read without specifying the format and
  using the ``names`` argument, then the first row could be dropped. [#1692]

astropy.io.fits
^^^^^^^^^^^^^^^

- Binary tables containing compressed images may, optionally, contain other
  columns unrelated to the tile compression convention. Although this is an
  uncommon use case, it is permitted by the standard.

- Reworked some of the file I/O routines to allow simpler, more consistent
  mapping between OS-level file modes ('rb', 'wb', 'ab', etc.) and the more
  "PyFITS-specific" modes used by PyFITS like "readonly" and "update".  That
  is, if reading a FITS file from an open file object, it doesn't matter as
  much what "mode" it was opened in so long as it has the right capabilities
  (read/write/etc.)  Also works around bugs in the Python io module in 2.6+
  with regard to file modes.

- Fixed a long-standing issue where writing binary tables did not correctly
  write the TFORMn keywords for variable-length array columns (they omitted
  the max array length parameter of the format).  This was thought fixed in
  an earlier version, but it was only fixed for compressed image HDUs and
  not for binary tables in general.

astropy.nddata
^^^^^^^^^^^^^^

- Fixed crash when trying to multiple or divide ``NDData`` objects with
  uncertainties. [#1547]

astropy.table
^^^^^^^^^^^^^

- Using a list of strings to index a table now correctly returns a new table
  with the columns named in the list. [#1454]

- Inequality operators now work properly with ``Column`` objects. [#1685]

astropy.time
^^^^^^^^^^^^

- ``Time`` scale and format attributes are now shown when calling ``dir()``
  on a ``Time`` object. [#1130]

astropy.wcs
^^^^^^^^^^^

- Fixed assignment to string-like WCS attributes on Python 3. [#956]

astropy.units
^^^^^^^^^^^^^

- Fixed a bug that caused the order of multiplication/division of plain
  Numpy arrays with Quantities to matter (i.e. if the plain array comes
  first the units were not preserved in the output). [#899]

- Directly instantiated ``CompositeUnits`` were made printable without
  crashing. [#1576]

Misc
^^^^

- Fixed various modules that hard-coded ``sys.stdout`` as default arguments
  to functions at import time, rather than using the runtime value of
  ``sys.stdout``. [#1648]

- Minor documentation fixes and enhancements [#922, #1034, #1210, #1217,
  #1491, #1492, #1498, #1582, #1608, #1621, #1646, #1670, #1756]

- Fixed a crash that could sometimes occur when running the test suite on
  systems with platform names containing non-ASCII characters. [#1698]

Other Changes and Additions
---------------------------

- General

- Astropy now follows the PSF Code of Conduct. [#1216]

- Astropy's test suite now tests all doctests in inline docstrings.  Support
  for running doctests in the reST documentation is planned to follow in
  v0.3.1.

- Astropy's test suite can be run on multiple CPUs in parallel, often
  greatly improving runtime, using the ``--parallel`` option. [#1040]

- A warning is now issued when using Astropy with Numpy < 1.5--much of
  Astropy may still work in this case but it shouldn't be expected to
  either. [#1479]

- Added automatic download/build/installation of Numpy during Astropy
  installation if not already found. [#1483]

- Handling of metadata for the ``NDData`` and ``Table`` classes has been
  unified by way of a common ``MetaData`` descriptor--it allows instantiating
  an object with metadata of any mapping type, and subsequently prevents
  replacing the mapping stored in the ``.meta`` attribute (only direct
  updates to that object are allowed). [#1686]

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Angles containing out of bounds minutes or seconds (e.g. 60) can be
  parsed--the value modulo 60 is used with carry to the hours/minutes, and a
  warning is issued rather than raising an exception. [#990]

astropy.io.fits
^^^^^^^^^^^^^^^

- The new compression code also adds support for the ZQUANTIZ and ZDITHER0
  keywords added in more recent versions of this FITS Tile Compression spec.
  This includes support for lossless compression with GZIP. (#198) By default
  no dithering is used, but the ``SUBTRACTIVE_DITHER_1`` and
  ``SUBTRACTIVE_DITHER_2`` methods can be enabled by passing the correct
  constants to the ``quantize_method`` argument to the ``CompImageHDU``
  constructor.  A seed can be manually specified, or automatically generated
  using either the system clock or checksum-based methods via the
  ``dither_seed`` argument.  See the documentation for ``CompImageHDU`` for
  more details.

- Images compressed with the Tile Compression standard can now be larger than
  4 GB through support of the Q format.

- All HDUs now have a ``.ver`` ``.level`` attribute that returns the value of
  the EXTVAL and EXTLEVEL keywords from that HDU's header, if the exist.
  This was added for consistency with the ``.name`` attribute which returns
  the EXTNAME value from the header.

- Then ``Column`` and ``ColDefs`` classes have new ``.dtype`` attributes
  which give the Numpy dtype for the column data in the first case, and the
  full Numpy compound dtype for each table row in the latter case.

- There was an issue where new tables created defaulted the values in all
  string columns to '0.0'.  Now string columns are filled with empty strings
  by default--this seems a less surprising default, but it may cause
  differences with tables created with older versions of PyFITS or Astropy.

astropy.io.misc
^^^^^^^^^^^^^^^

- The HDF5 reader can now refer to groups in the path as well as datasets;
  if given a group, the first dataset in that group is read. [#1159]

astropy.nddata
^^^^^^^^^^^^^^

- ``NDData`` objects have more helpful, though still rudimentary ``__str__`
  and ``__repr__`` displays. [#1313]

astropy.units
^^^^^^^^^^^^^

- Added 'cycle' unit. [#1160]

- Extended units supported by the CDS formatter/parser. [#1468]

- Added unicode an LaTeX symbols for liter. [#1618]

astropy.wcs
^^^^^^^^^^^

- Redundant SCAMP distortion parameters are removed with SIP distortions are
  also present. [#1278]

- Added iterative implementation of ``all_world2pix`` that can be reliably
  inverted. [#1281]


Version 0.2.5 (2013-10-25)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed incorrect string formatting of Angles using ``precision=0``. [#1319]

- Fixed string formatting of Angles using ``decimal=True`` which ignored the
  ``precision`` argument. [#1323]

- Fixed parsing of format strings using appropriate unicode characters
  instead of the ASCII ``-`` for minus signs. [#1429]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a crash in the IPAC table reader when the ``include/exclude_names``
  option is set. [#1348]

- Fixed writing AASTex tables to honor the ``tabletype`` option. [#1372]

astropy.io.fits
^^^^^^^^^^^^^^^

- Improved round-tripping and preservation of manually assigned column
  attributes (``TNULLn``, ``TSCALn``, etc.) in table HDU headers. (Note: This
  issue was previously reported as fixed in Astropy v0.2.2 by mistake; it is
  not fixed until v0.3.) [#996]

- Fixed a bug that could cause a segfault when trying to decompress an
  compressed HDU whose contents are truncated (due to a corrupt file, for
  example). This still causes a Python traceback but better that than a
  segfault. [#1332]

- Newly created ``CompImageHDU`` HDUs use the correct value of the
  ``DEFAULT_COMPRESSION_TYPE`` module-level constant instead of hard-coding
  "RICE_1" in the header.

- Fixed a corner case where when extra memory is allocated to compress an
  image, it could lead to unnecessary in-memory copying of the compressed
  image data and a possible memory leak through Numpy.

- Fixed a bug where assigning from an mmap'd array in one FITS file over
  the old (also mmap'd) array in another FITS file failed to update the
  destination file. Corresponds to PyFITS issue 25.

- Some miscellaneous documentation fixes.

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Added a warning for when a VOTable 1.2 file contains no ``RESOURCES``
  elements (at least one should be present). [#1337]

- Fixed a test failure specific to MIPS architecture caused by an errant
  floating point warning. [#1179]

astropy.nddata.convolution
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Prevented in-place modification of the input arrays to ``convolve()``.
  [#1153]

astropy.table
^^^^^^^^^^^^^

- Added HTML escaping for string values in tables when outputting the table
  as HTML. [#1347]

- Added a workaround in a bug in Numpy that could cause a crash when
  accessing a table row in a masked table containing ``dtype=object``
  columns. [#1229]

- Fixed an issue similar to the one in #1229, but specific to unmasked
  tables. [#1403]

astropy.units
^^^^^^^^^^^^^

- Improved error handling for unparsable units and fixed parsing CDS units
  without mantissas in the exponent. [#1288]

- Added a physical type for spectral flux density. [#1410]

- Normalized conversions that should result in a scale of exactly 1.0 to
  round off slight floating point imprecisions. [#1407]

- Added support in the CDS unit parser/formatter for unusual unit prefixes
  that are nonetheless required to be supported by that convention. [#1426]

- Fixed the parsing of ``sqrt()`` in unit format strings which was returning
  ``unit ** 2`` instead of ``unit ** 0.5``. [#1458]

astropy.wcs
^^^^^^^^^^^

- When passing a single array to the wcs transformation functions,
  (``astropy.wcs.Wcs.all_pix2world``, etc.), its second dimension must now
  exactly match the number of dimensions in the transformation. [#1395]

- Improved error message when incorrect arguments are passed to
  ``WCS.wcs_world2pix``. [#1394]

- Fixed a crash when trying to read WCS from FITS headers on Python 3.3
  in Windows. [#1363]

- Only headers that are required as part of the WCSLIB C API are installed
  by the package, per request of system packagers. [#1666]

Misc
^^^^

- Fixed crash when the ``COLUMNS`` environment variable is set to a
  non-integer value. [#1291]

- Fixed a bug in ``ProgressBar.map`` where ``multiprocess=True`` could cause
  it to hang on waiting for the process pool to be destroyed. [#1381]

- Fixed a crash on Python 3.2 when affiliated packages try to use the
  ``astropy.utils.data.get_pkg_data_*`` functions. [#1256]

- Fixed a minor path normalization issue that could occur on Windows in
  ``astropy.utils.data.get_pkg_data_filename``. [#1444]

- Fixed an annoyance where configuration items intended only for testing
  showed up in users' astropy.cfg files. [#1477]

- Prevented crashes in exception logging in unusual cases where no traceback
  is associated with the exception. [#1518]

- Fixed a crash when running the tests in unusual environments where
  ``sys.stdout.encoding`` is ``None``. [#1530]

- Miscellaneous documentation fixes and improvements [#1308, #1317, #1377,
  #1393, #1362, #1516]

Other Changes and Additions
---------------------------

- Astropy installation now requests setuptools >= 0.7 during build/installation
  if neither distribute or setuptools >= 0.7 is already installed.  In other
  words, if ``import setuptools`` fails, ``ez_setup.py`` is used to bootstrap
  the latest setuptools (rather than using ``distribute_setup.py`` to bootstrap
  the now obsolete distribute package). [#1197]

- When importing Astropy from a source checkout without having built the
  extension modules first an ``ImportError`` is raised rather than a
  ``SystemExit`` exception. [#1269]


Version 0.2.4 (2013-07-24)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed the angle parser to support parsing the string "1 degree". [#1168]

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Fixed a crash in the ``comoving_volume`` method on non-flat cosmologies
  when passing it an array of redshifts.

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed a bug that prevented saving changes to the comment symbol when
  writing changes to a table. [#1167]

astropy.io.fits
^^^^^^^^^^^^^^^

- Added a workaround for a bug in 64-bit OSX that could cause truncation when
  writing files greater than 2^32 bytes in size. [#839]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed incorrect reading of tables containing multiple ``<RESOURCE>``
  elements. [#1223]

astropy.table
^^^^^^^^^^^^^

- Fixed a bug where ``Table.remove_column`` and ``Table.rename_column``
  could cause a masked table to lose its masking. [#1120]

- Fixed bugs where subclasses of ``Table`` did not preserver their class in
  certain operations. [#1142]

- Fixed a bug where slicing a masked table did not preserve the mask. [#1187]

astropy.units
^^^^^^^^^^^^^

- Fixed a bug where the ``.si`` and ``.cgs`` properties of dimensionless
  ``Quantity`` objects raised a ``ZeroDivisionError``. [#1150]

- Fixed a bug where multiple subsequent calls to the ``.decompose()`` method
  on array quantities applied a scale factor each time. [#1163]

Misc
^^^^

- Fixed an installation crash that could occur sometimes on Debian/Ubuntu
  and other \*NIX systems where ``pkg_resources`` can be installed without
  installing ``setuptools``. [#1150]

- Updated the ``distribute_setup.py`` bootstrapper to use setuptools >= 0.7
  when installing on systems that don't already have an up to date version
  of distribute/setuptools. [#1180]

- Changed the ``version.py`` template so that Astropy affiliated packages can
  (and they should) use their own ``cython_version.py`` and
  ``utils._compiler`` modules where appropriate. This issue only pertains to
  affiliated package maintainers. [#1198]

- Fixed a corner case where the default config file generation could crash
  if building with matplotlib but *not* Sphinx installed in a virtualenv.
  [#1225]

- Fixed a crash that could occur in the logging module on systems that
  don't have a default preferred encoding (in particular this happened
  in some versions of PyCharm). [#1244]

- The Astropy log now supports passing non-string objects (and calling
  ``str()`` on them by default) to the logging methods, in line with Python's
  standard logging API. [#1267]

- Minor documentation fixes [#582, #696, #1154, #1194, #1212, #1213, #1246,
  #1252]

Other Changes and Additions
---------------------------

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Added a new ``Plank13`` object representing the Plank 2013 results. [#895]

astropy.units
^^^^^^^^^^^^^

- Performance improvements in initialization of ``Quantity`` objects with
  a large number of elements. [#1231]


Version 0.2.3 (2013-05-30)
==========================

Bug Fixes
---------

astropy.time
^^^^^^^^^^^^

- Fixed inaccurate handling of leap seconds when converting from UTC to UNIX
  timestamps. [#1118]

- Tightened required accuracy in many of the time conversion tests. [#1121]

Misc
^^^^

- Fixed a regression that was introduced in v0.2.2 by the fix to issue #992
  that was preventing installation of Astropy affiliated packages that use
  Astropy's setup framework. [#1124]


Version 0.2.2 (2013-05-21)
==========================

Bug Fixes
---------

astropy.io
^^^^^^^^^^

- Fixed issues in both the ``fits`` and ``votable`` sub-packages where array
  byte order was not being handled consistently, leading to possible crashes
  especially on big-endian systems. [#1003]

astropy.io.fits
^^^^^^^^^^^^^^^

- When an error occurs opening a file in fitsdiff the exception message will
  now at least mention which file had the error.

- Fixed a couple cases where creating a new table using TDIMn in some of the
  columns could cause a crash.

- Slightly refactored how tables containing variable-length array columns are
  handled to add two improvements: Fixes an issue where accessing the data
  after a call to the ``astropy.io.fits.getdata`` convenience function caused
  an exception, and allows the VLA data to be read from an existing mmap of
  the FITS file.

- Fixed a bug on Python 3 where attempting to open a non-existent file on
  Python 3 caused a seemingly unrelated traceback.

- Fixed an issue in the tests that caused some tests to fail if Astropy is
  installed with read-only permissions.

- Fixed a bug where instantiating a ``BinTableHDU`` from a numpy array
  containing boolean fields converted all the values to ``False``.

- Fixed an issue where passing an array of integers into the constructor of
  ``Column()`` when the column type is floats of the same byte width caused
  the column array to become garbled.

- Fixed inconsistent behavior in creating CONTINUE cards from byte strings
  versus unicode strings in Python 2--CONTINUE cards can now be created
  properly from unicode strings (so long as they are convertible to ASCII).

- Fixed a bug in parsing HIERARCH keywords that do not have a space after the
  first equals sign (before the value).

- Prevented extra leading whitespace on HIERARCH keywords from being treated
  as part of the keyword.

- Fixed a bug where HIERARCH keywords containing lower-case letters was
  mistakenly marked as invalid during header validation along with an
  ancillary issue where the ``Header.index()`` method id not work correctly
  with HIERARCH keywords containing lower-case letters.

- Disallowed assigning NaN and Inf floating point values as header values,
  since the FITS standard does not define a way to represent them in. Because
  this is undefined, the previous behavior did not make sense and produced
  invalid FITS files. [#954]

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). [#968]

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Stopped deprecation warnings from the ``astropy.io.votable`` package that
  could occur during setup. [#970]

- Fixed an issue where INFO elements were being incorrectly dropped when
  occurring inside a TABLE element. [#1000]

- Fixed obscure test failures on MIPS platforms. [#1010]

astropy.nddata.convolution
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Fixed an issue in ``make_kernel()`` when using an Airy function kernel.
  Also removed the superfluous 'brickwall' option. [#939]

astropy.table
^^^^^^^^^^^^^

- Fixed a crash that could occur when adding a row to an empty (rowless)
  table with masked columns. [#973]

- Made it possible to assign to one table row from the value of another row,
  effectively making it easier to copy rows, for example. [#1019]

astropy.time
^^^^^^^^^^^^

- Added appropriate ``__copy__`` and ``__deepcopy__`` behavior; this
  omission caused a seemingly unrelated error in FK5 coordinate separation.
  [#891]

astropy.units
^^^^^^^^^^^^^

- Fixed an issue where the ``isiterable()`` utility returned ``True`` for
  quantities with scalar values.  Added an ``__iter__`` method for the
  ``Quantity`` class and fixed ``isiterable()`` to catch false positives.
  [#878]

- Fixed previously undefined behavior when multiplying a unit by a string.
  [#949]

- Added 'time' as a physical type--this was a simple omission. [#959]

- Fixed issues with pickling unit objects so as to play nicer with the
  multiprocessing module. [#974]

- Made it more difficult to accidentally override existing units with a new
  unit of the same name. [#1070]

- Added several more physical types and units that were previously omitted,
  including 'mass density', 'specific volume', 'molar volume', 'momentum',
  'angular momentum', 'angular speed', 'angular acceleration', 'electric
  current', 'electric current density', 'electric field strength', 'electric
  flux density', 'electric charge density', 'permittivity', 'electromagnetic
  field strength', 'radiant intensity', 'data quantity', 'bandwidth'; and
  'knots', 'nautical miles', 'becquerels', and 'curies' respectively. [#1072]

Misc
^^^^

- Fixed a permission error that could occur when running ``astropy.test()``
  on Python 3 when Astropy is installed as root. [#811]

- Made it easier to filter warnings from the ``convolve()`` function and
  from ``Quantity`` objects. [#853]

- Fixed a crash that could occur in Python 3 when generation of the default
  config file fails during setup. [#952]

- Fixed an unrelated error message that could occur when trying to import
  astropy from a source checkout without having build the extension modules
  first. This issue was claimed to be fixed in v0.2.1, but the fix itself had
  a bug. [#971]

- Fixed a crash that could occur when running the ``build_sphinx`` setup
  command in Python 3. [#977]

- Added a more helpful error message when trying to run the
  ``setup.py build_sphinx`` command when Sphinx is not installed. [#1027]

- Minor documentation fixes and restructuring.
  [#935, #967, #978, #1004, #1028, #1047]

Other Changes and Additions
---------------------------

- Some performance improvements to the ``astropy.units`` package, in particular
  improving the time it takes to import the sub-package. [#1015]


Version 0.2.1 (2013-04-03)
==========================

Bug Fixes
---------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- Fixed encoding errors that could occur when formatting coordinate objects
  in code using ``from __future__ import unicode_literals``. [#817]

- Fixed a bug where the minus sign was dropped when string formatting dms
  coordinates with -0 degrees. [#875]

astropy.io.fits
^^^^^^^^^^^^^^^

- Properly supports the ZQUANTIZ keyword used to support quantization
  level--this includes working support for lossless GZIP compression of
  images.

- Fixed support for opening gzipped FITS files in a writeable mode. [#256]

- Added a more helpful exception message when trying to read invalid values
  from a table when the required ``TNULLn`` keyword is missing. [#309]

- More refactoring of the tile compression handling to work around a
  potential memory access violation that was particularly prevalent on
  Windows. [#507]

- Fixed an integer size mismatch in the compression module that could affect
  32-bit systems. [#786]

- Fixed malformatting of the ``TFORMn`` keywords when writing compressed
  image tables (they omitted the max array length parameter from the
  variable-length array format).

- Fixed a crash that could occur when writing a table containing multi-
  dimensional array columns from an existing file into a new file.

- Fixed a bug in fitsdiff that reported two header keywords containing NaN
  as having different values.

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- Fixed links to the ``astropy.io.votable`` documentation in the VOTable
  validator output. [#806]

- When reading VOTables containing integers that are out of range for their
  column type, display a warning rather than raising an exception. [#825]

- Changed the default string format for floating point values for better
  round-tripping. [#856]

- Fixed opening VOTables through the ``Table.read()`` interface for tables
  that have no names. [#927]

- Fixed creation of VOTables from an Astropy table that does not have a data
  mask. [#928]

- Minor documentation fixes. [#932]

astropy.nddata.convolution
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Added better handling of ``inf`` values to the ``convolve_fft`` family of
  functions. [#893]

astropy.table
^^^^^^^^^^^^^

- Fixed silent failure to assign values to a row on multiple columns. [#764]

- Fixed various buggy behavior when viewing a table after sorting by one of
  its columns. [#829]

- Fixed using ``numpy.where()`` with table indexing. [#838]

- Fixed a bug where opening a remote table with ``Table.read()`` could cause
  the entire table to be downloaded twice. [#845]

- Fixed a bug where ``MaskedColumn`` no longer worked if the column being
  masked is renamed. [#916]

astropy.units
^^^^^^^^^^^^^

- Added missing capability for array ``Quantity``\s to be initializable by
  a list of ``Quantity``\s. [#835]

- Fixed the definition of year and lightyear to be in terms of Julian year
  per the IAU definition. [#861]

- "degree" was removed from the list of SI base units. [#863]

astropy.wcs
^^^^^^^^^^^

- Fixed ``TypeError`` when calling ``WCS.to_header_string()``. [#822]

- Added new method ``WCS.all_world2pix`` for converting from world
  coordinates to pixel space, including inversion of the astrometric
  distortion correction. [#1066, #1281]

Misc
^^^^

- Fixed a minor issue when installing with ``./setup.py develop`` on a fresh
  git clone.  This is likely only of interest to developers on Astropy.
  [#725]

- Fixes a crash with ``ImportError: No module named 'astropy.version'`` when
  running setup.py from a source checkout for the first time on OSX with
  Python 3.3. [#820]

- Fixed an installation issue where running ``./setup.py install`` or when
  installing with pip the ``.astropy`` directory gets created in the home
  directory of the user running the command.  The user's ``.astropy``
  directory should only be created when they use Astropy, not when they
  install it. [#867]

- Fixed an exception when creating a ``ProgressBar`` with a "total" of 0.
  [#752]

- Added better documentation of behavior that can occur when trying to import
  the astropy package from within a source checkout without first building
  the extension modules. [#795, #864]

- Added link to the installation instructions in the README. [#797]

- Catches segfaults in xmllint which can occur sometimes and is otherwise out
  of our control. [#803]

- Minor changes to the documentation template. [#805]

- Fixed a minor exception handling bug in ``download_file()``. [#808]

- Added cleanup of any temporary files if an error occurs in
  ``download_file()``. [#857]

- Filesystem free space is checked for before attempting to download a file
  with ``download_file()``. [#858]

- Fixed package data locating to work across symlinks--required to work with
  some OS packaging layouts. [#827]

- Fixed a bug when building Cython extensions where hidden files containing
  ``.pyx`` extensions could cause the build to crash. This can be an issue
  with software and filesystems that autogenerate hidden files. [#834]

- Fixed bug that could cause a "script" called README.rst to be installed
  in a bin directory. [#852]

- Fixed some miscellaneous and mostly rare reference leaks caught by
  cpychecker. [#914]

Other Changes and Additions
---------------------------

- Added logo and branding for Windows binary installers. [#741]

- Upgraded included version libexpat to 2.1.0. [#781]

- ~25% performance improvement in unit composition/decomposition. [#836]

- Added previously missing LaTeX formatting for ``L_sun`` and ``R_sun``. [#841]

- ConfigurationItem\s now have a more useful and informative __repr__
  and improved documentation for how to use them. [#855]

- Added a friendlier error message when trying to import astropy from a source
  checkout without first building the extension modules inplace. [#864]

- py.test now outputs more system information for help in debugging issues
  from users. [#869]

- Added unit definitions "mas" and "uas" for "milliarcsecond" and
  "microarcsecond" respectively. [#892]


Version 0.2 (2013-02-19)
========================

New Features
------------

astropy.coordinates
^^^^^^^^^^^^^^^^^^^

- This new subpackage contains a representation of celestial coordinates,
  and provides a wide range of related functionality.  While
  fully-functional, it is a work in progress and parts of the API may
  change in subsequent releases.

astropy.cosmology
^^^^^^^^^^^^^^^^^

- Update to include cosmologies with variable dark energy equations of state.
  (This introduces some API incompatibilities with the older Cosmology
  objects).

- Added parameters for relativistic species (photons, neutrinos) to the
  astropy.cosmology classes. The current treatment assumes that neutrinos are
  massless. [#365]

- Add a WMAP9 object using the final (9-year) WMAP parameters from
  Hinshaw et al. 2013. It has also been made the default cosmology.
  [#629, #724]

- astropy.table I/O infrastructure for custom readers/writers
  implemented. [#305]

- Added support for reading/writing HDF5 files [#461]

- Added support for masked tables with missing or invalid data [#451]

- New ``astropy.time`` sub-package. [#332]

- New ``astropy.units`` sub-package that includes a class for units
  (``astropy.units.Unit``) and scalar quantities that have units
  (``astropy.units.Quantity``). [#370, #445]

  This has the following effects on other sub-packages:

- In ``astropy.wcs``, the ``wcs.cunit`` list now takes and returns
  ``astropy.units.Unit`` objects. [#379]

- In ``astropy.nddata``, units are now stored as ``astropy.units.Unit``
  objects. [#382]

- In ``astropy.table``, units on columns are now stored as
  ``astropy.units.Unit`` objects. [#380]

- In ``astropy.constants``, constants are now stored as
  ``astropy.units.Quantity`` objects. [#529]

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Improved integration with the ``astropy.table`` Table class so that
  table and column metadata (e.g. keywords, units, description,
  formatting) are directly available in the output table object.  The
  CDS, DAOphot, and IPAC format readers now provide this type of
  integrated metadata.

- Changed to using ``astropy.table`` masked tables instead of NumPy
  masked arrays for tables with missing values.

- Added SExtractor table reader to ``astropy.io.ascii`` [#420]

- Removed the Memory reader class which was used to convert data input
  passed to the ``write`` function into an internal table.  Instead
  ``write`` instantiates an astropy Table object using the data
  input to ``write``.

- Removed the NumpyOutputter as the output of reading a table is now
  always a ``Table`` object.

- Removed the option of supplying a function as a column output
  formatter.

- Added a new ``strip_whitespace`` keyword argument to the ``write``
  function.  This controls whether whitespace is stripped from
  the left and right sides of table elements before writing.
  Default is True.

- Fixed a bug in reading IPAC tables with null values.

- Generalized I/O infrastructure so that ``astropy.nddata`` can also have
  custom readers/writers [#659]

astropy.wcs
^^^^^^^^^^^

- From updating the underlying wcslib 4.16:

- When ``astropy.wcs.WCS`` constructs a default coordinate representation
  it will give it the special name "DEFAULTS", and will not report "Found
  one coordinate representation".

Other Changes and Additions
---------------------------

- A configuration file with all options set to their defaults is now generated
  when astropy is installed.  This file will be pulled in as the users'
  astropy configuration file the first time they ``import astropy``.  [#498]

- Astropy doc themes moved into ``astropy.sphinx`` to allow affiliated packages
  to access them.

- Added expanded documentation for the ``astropy.cosmology`` sub-package.
  [#272]

- Added option to disable building of "legacy" packages (pyfits, vo, etc.).

- The value of the astronomical unit (au) has been updated to that adopted by
  IAU 2012 Resolution B2, and the values of the pc and kpc constants have been
  updated to reflect this. [#368]

- Added links to the documentation pages to directly edit the documentation on
  GitHub. [#347]

- Several updates merged from ``pywcs`` into ``astropy.wcs`` [#384]:

- Improved the reading of distortion images.

- Added a new option to choose whether or not to write SIP coefficients.

- Uses the ``relax`` option by default so that non-standard keywords are
  allowed. [#585]


- Added HTML representation of tables in IPython notebook [#409]

- Rewrote CFITSIO-based backend for handling tile compression of FITS files.
  It now uses a standard CFITSIO instead of heavily modified pieces of CFITSIO
  as before.  Astropy ships with its own copy of CFITSIO v3.30, but system
  packagers may choose instead to strip this out in favor of a
  system-installed version of CFITSIO.  This corresponds to PyFITS ticket 169.
  [#318]

- Moved ``astropy.config.data`` to ``astropy.utils.data`` and re-factored the
  I/O routines to separate out the generic I/O code that can be used to open
  any file or resource from the code used to access Astropy-related data. The
  'core' I/O routine is now ``get_readable_fileobj``, which can be used to
  access any local as well as remote data, supports caching, and can decompress
  gzip and bzip2 files on-the-fly. [#425]

- Added a classmethod to
  ``astropy.coordinates.coordsystems.SphericalCoordinatesBase`` that performs a
  name resolve query using Sesame to retrieve coordinates for the requested
  object. This works for any subclass of ``SphericalCoordinatesBase``, but
  requires an internet connection. [#556]

- astropy.nddata.convolution removed requirement of PyFFTW3; uses Numpy's
  FFT by default instead with the added ability to specify an FFT
  implementation to use. [#660]


Bug Fixes
---------

astropy.io.ascii
^^^^^^^^^^^^^^^^

- Fixed crash when pprinting a row with INDEF values. [#511]

- Fixed failure when reading DAOphot files with empty keyword values. [#666]

astropy.io.fits
^^^^^^^^^^^^^^^

- Improved handling of scaled images and pseudo-unsigned integer images in
  compressed image HDUs.  They now work more transparently like normal image
  HDUs with support for the ``do_not_scale_image_data`` and ``uint`` options,
  as well as ``scale_back`` and ``save_backup``.  The ``.scale()`` method
  works better too. Corresponds to PyFITS ticket 88.

- Permits non-string values for the EXTNAME keyword when reading in a file,
  rather than throwing an exception due to the malformatting.  Added
  verification for the format of the EXTNAME keyword when writing.
  Corresponds to PyFITS ticket 96.

- Added support for EXTNAME and EXTVER in PRIMARY HDUs.  That is, if EXTNAME
  is specified in the header, it will also be reflected in the ``.name``
  attribute and in ``fits.info()``.  These keywords used to be verboten in
  PRIMARY HDUs, but the latest version of the FITS standard allows them.
  Corresponds to PyFITS ticket 151.

- HCOMPRESS can again be used to compress data cubes (and higher-dimensional
  arrays) so long as the tile size is effectively 2-dimensional. In fact,
  compatible tile sizes will automatically be used even if they're not
  explicitly specified. Corresponds to PyFITS ticket 171.

- Fixed a bug that could cause a deadlock in the filesystem on OSX when
  reading the data from certain types of FITS files. This only occurred
  when used in conjunction with Numpy 1.7. [#369]

- Added support for the optional ``endcard`` parameter in the
  ``Header.fromtextfile()`` and ``Header.totextfile()`` methods.  Although
  ``endcard=False`` was a reasonable default assumption, there are still text
  dumps of FITS headers that include the END card, so this should have been
  more flexible. Corresponds to PyFITS ticket 176.

- Fixed a crash when running fitsdiff on two empty (that is, zero row) tables.
  Corresponds to PyFITS ticket 178.

- Fixed an issue where opening a FITS file containing a random group HDU in
  update mode could result in an unnecessary rewriting of the file even if
  no changes were made. This corresponds to PyFITS ticket 179.

- Fixed a crash when generating diff reports from diffs using the
  ``ignore_comments`` options. Corresponds to PyFITS ticket 181.

- Fixed some bugs with WCS distortion paper record-valued keyword cards:

- Cards that looked kind of like RVKCs but were not intended to be were
  over-permissively treated as such--commentary keywords like COMMENT and
  HISTORY were particularly affected. Corresponds to PyFITS ticket 183.

- Looking up a card in a header by its standard FITS keyword only should
  always return the raw value of that card.  That way cards containing
  values that happen to valid RVKCs but were not intended to be will still
  be treated like normal cards. Corresponds to PyFITS ticket 184.

- Looking up a RVKC in a header with only part of the field-specifier (for
  example "DP1.AXIS" instead of "DP1.AXIS.1") was implicitly treated as a
  wildcard lookup. Corresponds to PyFITS ticket 184.

- Fixed a crash when diffing two FITS files where at least one contains a
  compressed image HDU which was not recognized as an image instead of a
  table. Corresponds to PyFITS ticket 187.

- Fixed a bug where opening a file containing compressed image HDUs in
  'update' mode and then immediately closing it without making any changes
  caused the file to be rewritten unnecessarily.

- Fixed two memory leaks that could occur when writing compressed image data,
  or in some cases when opening files containing compressed image HDUs in
  'update' mode.

- Fixed a bug where ``ImageHDU.scale(option='old')`` wasn't working at
  all--it was not restoring the image to its original BSCALE and BZERO
  values.

- Fixed a bug when writing out files containing zero-width table columns,
  where the TFIELDS keyword would be updated incorrectly, leaving the table
  largely unreadable.

- Fixed a minor string formatting issue.

- Fixed bugs in the backwards compatibility layer for the ``CardList.index``
  and ``CardList.count`` methods. Corresponds to PyFITS ticket 190.

- Improved ``__repr__`` and text file representation of cards with long
  values that are split into CONTINUE cards. Corresponds to PyFITS ticket
  193.

- Fixed a crash when trying to assign a long (> 72 character) value to blank
  ('') keywords. This also changed how blank keywords are represented--there
  are still exactly 8 spaces before any commentary content can begin; this
  *may* affect the exact display of header cards that assumed there could be
  fewer spaces in a blank keyword card before the content begins. However,
  the current approach is more in line with the requirements of the FITS
  standard. Corresponds to PyFITS ticket 194.

astropy.io.votable
^^^^^^^^^^^^^^^^^^

- The ``Table`` class now maintains a single array object which is a
  Numpy masked array.  For variable-length columns, the object that
  is stored there is also a Numpy masked array.

- Changed the ``pedantic`` configuration option to be ``False`` by default
  due to the vast proliferation of non-compliant VO Tables. [#296]

- Renamed ``astropy.io.vo`` to ``astropy.io.votable``.

astropy.table
^^^^^^^^^^^^^

- Added a workaround for an upstream bug in Numpy 1.6.2 that could cause
  a maximum recursion depth RuntimeError when printing table rows. [#341]

astropy.wcs
^^^^^^^^^^^

- Updated to wcslib 4.15 [#418]

- Fixed a problem with handling FITS headers on locales that do not use
  dot as a decimal separator. This required an upstream fix to wcslib which
  is included in wcslib 4.14. [#313]

- Fixed some tests that could fail due to missing/incorrect logging
  configuration--ensures that tests don't have any impact on the default log
  location or contents. [#291]

- Various minor documentation fixes [#293 and others]

- Fixed a bug where running the tests with the ``py.test`` command still tried
  to replace the system-installed pytest with the one bundled with Astropy.
  [#454]

- Improved multiprocessing compatibility for file downloads. [#615]

- Fixed handling of Cython modules when building from a source checkout of a
  tagged release version. [#594]

- Added a workaround for a bug in Sphinx that could occur when using the
  ``:tocdepth:`` directive. [#595]

- Minor VOTable fixes [#596]

- Fixed how ``setup.py`` uses ``distribute_setup.py`` to prevent possible
  ``VersionConflict`` errors when an older version of distribute is already
  installed on the user's system. [#616, #640]

- Changed use of ``log.warn`` in the logging module to ``log.warning`` since
  the former is deprecated. [#624]


Version 0.1 (2012-06-19)
========================

- Initial release.