Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make get_firstbday, get_lastbday nogil #18512

Merged
merged 1 commit into from
Nov 27, 2017

Conversation

jbrockmendel
Copy link
Member

These are only used in tslibs.offsets and in tests, and every use is preceeded by a call to monthrange. But because monthrange returns a tuple, it cannot be declared nogil. This PR removes the call to monthrange in favor of the two separate calls that go into monthrange (actually only one is needed for get_first_bday). On the side we get rid of a few unnecessary calls and get to nogil two more cases worth of the apply_index loops.

There are more cases coming up for shift_months (i.e. more subclasses getting implementations of apply_index) and these will benefit from these changes too.

  • closes #xxxx
  • tests added / passed
  • passes git diff upstream/master -u -- "*.py" | flake8 --diff
  • whatsnew entry

@jbrockmendel
Copy link
Member Author

Will run asv in the morning

@codecov
Copy link

codecov bot commented Nov 27, 2017

Codecov Report

Merging #18512 into master will decrease coverage by 0.04%.
The diff coverage is n/a.

Impacted file tree graph

@@            Coverage Diff             @@
##           master   #18512      +/-   ##
==========================================
- Coverage   91.35%   91.31%   -0.05%     
==========================================
  Files         163      163              
  Lines       49796    49796              
==========================================
- Hits        45490    45469      -21     
- Misses       4306     4327      +21
Flag Coverage Δ
#multiple 89.11% <ø> (-0.03%) ⬇️
#single 40.79% <ø> (-0.07%) ⬇️
Impacted Files Coverage Δ
pandas/io/gbq.py 25% <0%> (-58.34%) ⬇️
pandas/plotting/_converter.py 63.44% <0%> (-1.82%) ⬇️
pandas/core/frame.py 97.81% <0%> (-0.1%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f745e52...8b77efb. Read the comment docs.

@codecov
Copy link

codecov bot commented Nov 27, 2017

Codecov Report

Merging #18512 into master will decrease coverage by 0.04%.
The diff coverage is n/a.

Impacted file tree graph

@@            Coverage Diff             @@
##           master   #18512      +/-   ##
==========================================
- Coverage   91.35%   91.31%   -0.05%     
==========================================
  Files         163      163              
  Lines       49796    49796              
==========================================
- Hits        45490    45469      -21     
- Misses       4306     4327      +21
Flag Coverage Δ
#multiple 89.11% <ø> (-0.03%) ⬇️
#single 40.79% <ø> (-0.07%) ⬇️
Impacted Files Coverage Δ
pandas/io/gbq.py 25% <0%> (-58.34%) ⬇️
pandas/plotting/_converter.py 63.44% <0%> (-1.82%) ⬇️
pandas/core/frame.py 97.81% <0%> (-0.1%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f745e52...8b77efb. Read the comment docs.

@jreback jreback added Frequency DateOffsets Performance Memory or execution speed performance labels Nov 27, 2017
@jreback jreback added this to the 0.22.0 milestone Nov 27, 2017
@jreback
Copy link
Contributor

jreback commented Nov 27, 2017

lgtm. make sure we have sufficient m even micro coverage for these routines

@jreback jreback merged commit 1043a46 into pandas-dev:master Nov 27, 2017
@jbrockmendel
Copy link
Member Author

Small asv run, will run a more thorough one next.

asv continuous -f 1.1 -E virtualenv master HEAD -b offsets
[...]
       before           after         ratio
     [f745e52e]       [8b77efbe]
+     9.83±0.03μs      11.1±0.01μs     1.13  offset.YearBegin.time_timeseries_year_apply
+     29.2±0.07μs         32.8±1μs     1.13  offset.CBDayHolidays.time_custom_bday_cal_incr_neg_n
+      18.8±0.2μs      21.1±0.07μs     1.12  offset.CBDay.time_custom_bday_incr
-     7.13±0.05μs      6.38±0.04μs     0.90  offset.OnOffset.time_on_offset(<QuarterEnd: startingMonth=3>)
-           1.68s            1.50s     0.89  offset.ApplyIndex.time_apply_series(<BusinessQuarterEnd: startingMonth=3>)
-           1.80s            1.57s     0.87  offset.ApplyIndex.time_apply_index(<BusinessQuarterEnd: startingMonth=3>)
-           1.65s            1.40s     0.85  offset.ApplyIndex.time_apply_series(<BusinessYearEnd: month=12>)
-     21.9±0.05μs      18.5±0.08μs     0.85  offset.SemiMonthOffset.time_begin_incr_n
-      23.8±0.4μs       18.5±0.5μs     0.78  offset.Day.time_timeseries_day_incr
-      21.7±0.5ms       9.53±0.3ms     0.44  offset.ApplyIndex.time_apply_series(<BusinessMonthEnd>)
-        20.0±1ms       7.85±0.3ms     0.39  offset.ApplyIndex.time_apply_index(<BusinessMonthEnd>)
-     20.9±0.08ms       8.07±0.5ms     0.39  offset.ApplyIndex.time_apply_series(<BusinessMonthBegin>)
-     19.2±0.09ms       5.99±0.2ms     0.31  offset.ApplyIndex.time_apply_index(<BusinessMonthBegin>)

@jbrockmendel jbrockmendel deleted the tslibs-offsets8 branch November 27, 2017 15:50
@jbrockmendel
Copy link
Member Author

make sure we have sufficient m even micro coverage for these routines

Sure. Seems like a good time to run coverage for all of _libs

@jbrockmendel
Copy link
Member Author

taskset 8 asv continuous -f 1.1 -E virtualenv master HEAD -b offset -b timedelta -b period -b timeseries
[...]
     [f745e52e]       [8b77efbe]
!           42.1s           failed      n/a  gil.nogil_datetime_fields.time_period_to_datetime
+       103±0.3μs          116±3μs     1.13  offset.CBMonthBegin.time_custom_bmonthbegin_decr_n
+        1.64±0ms      1.82±0.07ms     1.11  timeseries.DatetimeIndex.time_add_timedelta
-      10.4±0.2μs      9.26±0.04μs     0.89  offset.YearBegin.time_timeseries_year_apply
-           1.53s            1.37s     0.89  offset.ApplyIndex.time_apply_index(<BusinessYearEnd: month=12>)
-     1.05±0.01μs          932±6ns     0.88  period.PeriodProperties.time_minute('M')
-      7.93±0.2μs         7.00±0μs     0.88  timeseries.DatetimeIndex.time_timestamp_tzinfo_cons
-           1.70s            1.49s     0.87  offset.ApplyIndex.time_apply_series(<BusinessYearBegin: month=1>)
-     7.38±0.04μs       6.35±0.1μs     0.86  offset.OnOffset.time_on_offset(<QuarterEnd: startingMonth=3>)
-     1.03±0.02μs          859±1ns     0.83  period.PeriodProperties.time_second('M')
-     22.6±0.08μs      18.8±0.09μs     0.83  offset.SemiMonthOffset.time_end_decr
-      21.5±0.6ms       9.20±0.2ms     0.43  offset.ApplyIndex.time_apply_series(<BusinessMonthEnd>)
-      19.7±0.1ms       7.56±0.1ms     0.38  offset.ApplyIndex.time_apply_index(<BusinessMonthEnd>)
-        20.8±1ms      7.63±0.08ms     0.37  offset.ApplyIndex.time_apply_series(<BusinessMonthBegin>)
-      19.1±0.1ms      5.89±0.03ms     0.31  offset.ApplyIndex.time_apply_index(<BusinessMonthBegin>)

@jbrockmendel
Copy link
Member Author

jbrockmendel commented Nov 27, 2017

update need to re-run coverage. ignore coverage stats for now.

@jbrockmendel
Copy link
Member Author

Fixed coverage results ("fixed" does not refer to matplotlib issue). Notwithstanding some tinkering to make coverage work with cython, this is at 262e8ff.

Name                                      Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------
pandas/__init__.py                           39      3    92%   14-15, 18
pandas/_libs/__init__.py                      1      0   100%
pandas/_libs/algos.pxd                        5      1    80%   9
pandas/_libs/algos.pyx                      197     20    90%   59, 116, 224-233, 236-244, 246-249, 259-261
pandas/_libs/algos_common_helper.pxi       1884   1242    34%   25-49, 63-67, 70, 84-91, 97, 112-114, 123, 128-132, 138, 148-150, 159, 165, 167, 211-212, 226-230, 233, 241, 250, 261, 276-314, 323, 329, 331, 350, 375, 382-384, 407, 423-548, 557, 562-566, 574, 609-712, 721, 726-730, 738, 748-845, 859-863, 908-946, 955, 960-964, 972, 1007-1008, 1022-1026, 1072-1110, 1119, 1124-1128, 1136, 1146, 1164, 1171, 1178-1180, 1203, 1219-1641, 1656, 1658, 1704-1742, 1751, 1756-1760, 1768, 1803-1804, 1819, 1821, 1868-1906, 1915, 1920-1924, 1932, 1942, 1985-1987, 1999-2039, 2053-2057, 2060, 2067, 2071, 2102-2202, 2216-2220, 2223, 2235, 2241-2243, 2266-2340, 2358, 2362, 2365, 2372-2374, 2383-2385, 2397-2815, 2824-2830, 2835, 2844, 2858-2872, 2880-2895, 2898-2904, 2909, 2915-3100, 3112, 3120, 3125-3160, 3171, 3182, 3191-3200, 3209, 3216-3218, 3225-3227, 3236
pandas/_libs/algos_rank_helper.pxi          502    135    73%   16-17, 41, 67-68, 100, 102-103, 110, 115-116, 150, 170-173, 212, 215-216, 223, 234-235, 326-327, 426, 437-438, 469-471, 476, 495-510, 513, 518-617, 658, 676-677, 695-696, 703, 708-709, 755-757, 790-805
pandas/_libs/algos_take_helper.pxi         2056   1268    38%   14-17, 41-44, 68, 76-79, 99-108, 123-126, 155-164, 169-170, 179-182, 191, 207-210, 229, 237, 245-277, 301-304, 320-339, 383-386, 400-442, 451, 467-470, 485-537, 561-564, 588, 596-599, 619-628, 643-646, 675-684, 689-690, 699-702, 711, 727-730, 749, 757, 765-1379, 1423-1426, 1440-1577, 1601-1604, 1628, 1636-1639, 1659-1668, 1683-1686, 1715-1724, 1729-1730, 1739-1742, 1751, 1767-1770, 1789, 1797, 1805-2617, 2641-2644, 2668, 2676-2679, 2702-2703, 2723-2726, 2755-2764, 2769-2770, 2779-2782, 2791, 2807-2810, 2829, 2837, 2845-3137, 3161-3164, 3180-3199, 3243-3246, 3260-3302, 3311, 3327-3330, 3345-3397, 3421-3424, 3448, 3456-3459, 3482-3483, 3503-3506, 3535-3544, 3549-3550, 3559-3562, 3587-3590, 3609, 3617, 3625-3628, 3642-3643, 3647, 3654-3657, 3681-3684, 3700-3719, 3763-3766, 3780-3822, 3831, 3847-3850, 3865-3888, 3914-3917, 3941-3944, 3976-3979, 4002-4003, 4023-4026, 4055-4064, 4079-4082, 4091, 4107-4110, 4129, 4145-4437, 4461-4464, 4496-4499, 4543-4546, 4575-4584, 4599-4602, 4627-4630, 4649, 4665-4668, 4694-4697, 4721-4724, 4756-4759, 4803-4806, 4859-4862, 4887-4890, 4909, 4925-4955, 4969-4983, 4997
pandas/_libs/groupby.pyx                    137     51    63%   61, 97-129, 156, 191-225, 265
pandas/_libs/groupby_helper.pxi             830    314    62%   9-18, 31, 81, 94, 141, 151, 190, 245, 263, 266, 274, 291-414, 424, 437, 463-518, 531, 536, 539, 547, 568, 582, 593, 607, 614, 628, 639, 654, 661-754, 768, 779, 800, 814, 851, 864, 878, 914, 927, 941, 977, 999, 1013, 1035, 1048-1245, 1258, 1308, 1321, 1350, 1371, 1393, 1399, 1409, 1431, 1436, 1450, 1486, 1507, 1517, 1538, 1553, 1573-1575
pandas/_libs/hashing.pyx                    102     20    80%   71, 76, 101, 105-117, 128, 146-155
pandas/_libs/hashtable.pyx                   84     26    69%   63-67, 72, 75-76, 92, 101-111, 116, 119-120, 127-129, 136-143
pandas/_libs/hashtable_class_helper.pxi     904    334    63%   21, 30, 43-56, 68, 82, 86, 93, 98, 103-106, 110, 116-136, 140, 147-152, 157-160, 164, 170-186, 190, 197, 202, 207, 210, 214, 220, 224, 229, 239-309, 316, 319, 331, 334, 340, 355, 360, 363, 368, 373, 379, 387-414, 428, 447-455, 498-541, 568-569, 576, 581, 584, 589, 594, 600, 608-635, 649, 668-676, 694-695, 711, 719-759, 779-780, 787, 792, 795, 800, 805, 811, 819, 829-832, 846, 860, 879-887, 930, 973, 1003-1005, 1010, 1015-1077, 1112-1118, 1135, 1151, 1179, 1235-1239, 1243, 1248, 1251, 1259, 1265, 1275, 1283, 1289-1291, 1307, 1329, 1352-1354, 1389, 1394, 1399, 1402-1408, 1421-1422, 1424-1428, 1435-1448, 1464-1468, 1487, 1509, 1514-1520
pandas/_libs/hashtable_func_helper.pxi      355     41    88%   14, 41, 73, 84, 121, 172, 199, 231, 242, 279-330, 356, 384, 394, 428, 477, 504, 536, 547, 584, 643, 680, 717
pandas/_libs/index.pyx                      399    111    72%   33, 48, 53, 58-60, 72, 79, 89-97, 103, 108, 126, 142, 148, 168, 180, 187, 216, 222-227, 233, 240, 248, 254, 272, 275-281, 305, 308, 317, 321, 388, 402, 405, 411, 428, 431-443, 446, 449, 465-469, 488-490, 495, 498, 502, 504, 508, 510, 518, 524, 527, 530, 533-564, 568, 585, 615, 621, 637-653, 659, 666, 670
pandas/_libs/index_class_helper.pxi         119     48    60%   14, 17, 21, 25, 27, 30, 60, 66, 69, 73, 77, 79, 82, 84-85, 88-126, 129, 133, 137, 139, 145, 148, 180, 186, 189, 193, 197
pandas/_libs/indexing.pyx                    11      3    73%   11-13, 19
pandas/_libs/interval.pyx                   120     37    69%   22, 26, 30, 34, 38, 41-46, 89-92, 96, 98, 103, 106, 112, 133-137, 143-144, 148, 154, 161, 168, 173, 180-185, 190-198
pandas/_libs/intervaltree.pxi              1541   1137    26%   11-46, 62, 78, 86, 93, 103, 117, 130, 153, 173-184, 190, 205-392, 408-409, 420-478, 497-902, 918-919, 948, 972, 988, 1022, 1028-1072, 1088-1089, 1118, 1142, 1158, 1183, 1198-1242, 1258-1259, 1288, 1312, 1328, 1368-1412, 1428-1429, 1458, 1482, 1498, 1523, 1532, 1538-1752, 1768-1769, 1780-1838, 1857-2262, 2278-2279, 2290-2348, 2367-2432, 2448-2449, 2460-2518, 2537-2602, 2618-2619, 2630-2688, 2707-2772, 2788-2789, 2800-2858, 2873-2924
pandas/_libs/join.pyx                       146     11    92%   79, 249-256, 259-261, 264-267
pandas/_libs/join_func_helper.pxi          3690   3105    16%   15-1267, 1326-1332, 1345-1346, 1360, 1369-1372, 1384-1386, 1391-1397, 1439-1801, 1814-1815, 1829, 1838-1841, 1853-1855, 1860-1979, 1992-1993, 2007, 2016-2019, 2031-2033, 2038-2157, 2170-2171, 2185, 2194-2197, 2209-2211, 2216-2335, 2348-2349, 2363, 2372-2375, 2387-2389, 2394-2513, 2526-2527, 2541, 2550-2553, 2565-2567, 2572-2691, 2704-2705, 2719, 2728-2731, 2743-2745, 2750-2869, 2882-2883, 2897, 2906-2909, 2921-2923, 2928-3047, 3060-3061, 3075, 3084-3087, 3099-3101, 3106-3225, 3238-3239, 3253, 3262-3265, 3277-3279, 3284-3403, 3416-3417, 3431, 3440-3443, 3455-3457, 3462-5364, 5375-5376, 5388, 5396-5398, 5407-5409, 5414-5509, 5520-5521, 5533, 5541-5543, 5552-5554, 5559-5654, 5665-5666, 5678, 5686-5688, 5697-5699, 5704-5799, 5810-5811, 5823, 5831-5833, 5842-5844, 5849-5944, 5955-5956, 5968, 5976-5978, 5987-5989, 5994-6089, 6100-6101, 6113, 6121-6123, 6132-6134, 6139-6234, 6245-6246, 6258, 6266-6268, 6277-6279, 6284-6379, 6429-6433, 6484-6488, 6520-6524, 6535-6536, 6548, 6556-6558, 6567-6569, 6574-6669, 6680-6681, 6693, 6701-6703, 6712-6714, 6719-6807
pandas/_libs/join_helper.pxi               1596    601    62%   18-168, 188, 198, 203-213, 227, 240, 245-255, 262, 295, 362, 396-640, 664-665, 672-677, 684, 689-690, 722-728, 739-744, 751, 759-763, 774, 806-807, 820, 855-861, 903-909, 924, 954, 996, 1018, 1051, 1118, 1152-1396, 1420-1421, 1428-1433, 1440, 1445-1446, 1478-1484, 1495-1500, 1507, 1515-1519, 1530, 1562-1563, 1576, 1680, 1774, 1908, 1926-1928, 1940-1941, 1954, 1989-2000, 2037-2051, 2058, 2088, 2130, 2152, 2167, 2169, 2173-2174, 2185, 2191-2193, 2214-2217, 2219-2222, 2226-2232, 2252, 2258-2260
pandas/_libs/lib.pyx                        895    210    77%   34, 83-101, 121, 173, 192-204, 231, 258, 298, 361, 432-450, 543, 558-559, 588, 617-618, 633, 663-679, 690-691, 704, 734, 747, 813, 827-841, 919, 927, 994, 998, 1001, 1039-1053, 1061-1075, 1103-1109, 1114-1119, 1154-1163, 1178-1184, 1186-1213, 1255, 1315-1373, 1379, 1390, 1410, 1468, 1493, 1518-1519, 1526, 1541, 1564-1571, 1575, 1582, 1592, 1595, 1600, 1607, 1612, 1622, 1626, 1638, 1641, 1648, 1685, 1692, 1695-1698
pandas/_libs/missing.pyx                    106     14    87%   28, 36, 44, 62, 94, 99, 127, 131, 133, 138, 142-143, 302, 309
pandas/_libs/parsers.pyx                   1270    210    83%   100-101, 305-313, 316-334, 336-379, 384, 415, 441, 454, 477-478, 577-580, 590, 607-610, 634, 643, 681-690, 703, 709-711, 724, 733, 740-743, 793, 795-796, 894-897, 920, 942, 958, 971, 985, 1023-1026, 1029, 1034, 1037-1040, 1150, 1158, 1219, 1273-1274, 1295, 1303, 1306, 1310, 1320, 1341, 1348, 1352, 1355, 1382, 1390, 1392, 1404-1415, 1441, 1454, 1507, 1560, 1593-1595, 1602, 1619, 1678, 1682, 1690, 1707, 1726, 1766, 1836, 1861, 1871, 1900-1905, 1909, 1937, 1976-2040, 2067, 2111, 2131, 2136, 2153, 2159, 2179, 2201, 2212, 2216, 2292, 2314-2324, 2358, 2386
pandas/_libs/period.pyx                     560    115    79%   173, 183, 191, 227, 233, 244, 251, 273, 279, 281, 283, 288, 291, 293, 295, 297, 299, 301-304, 310-314, 319, 329, 347, 351-353, 355, 357, 359-360, 371, 378-380, 391, 405, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 477, 487, 498-499, 508-509, 524, 529-534, 540-541, 562-563, 567, 598, 617, 620, 641-643, 658-660, 683-685, 716, 720, 726, 759, 764, 769, 774, 779, 784, 789, 794, 798, 803, 807, 812, 817, 822, 827-831, 839, 843, 846, 851, 863-867, 871, 1034-1035, 1094, 1099-1101, 1110
pandas/_libs/properties.pyx                  42     17    60%   15-17, 23, 28, 46-65, 68, 79
pandas/_libs/reshape.pyx                      5      0   100%
pandas/_libs/reshape_helper.pxi             131     66    50%   14-254, 302, 350, 398, 446, 494
pandas/_libs/skiplist.pyx                    73     11    85%   16, 36, 53, 58-64, 78, 117, 135
pandas/_libs/sparse.pyx                     409     75    82%   30-60, 67, 71, 76, 113, 125, 128, 131, 135, 170, 186, 210, 240, 261, 271-279, 330-338, 356, 360, 368, 371, 386, 391, 402-404, 416, 419, 436, 519, 538, 564, 594-637, 642, 658-661, 681, 729, 741, 806-818
pandas/_libs/sparse_op_helper.pxi          3017    708    77%   11, 16, 22, 25, 30-33, 38, 44, 49, 55, 58, 64, 77, 178, 236, 248-258, 359, 417, 429-439, 540, 598, 610-620, 721, 779, 791-801, 902, 960, 972-982, 1083, 1141, 1153-1525, 1626, 1684, 1696-1706, 1751-1759, 1807, 1865, 1877-1887, 1988, 2046, 2058-2068, 2169, 2227, 2239-2249, 2350, 2408, 2420-2430, 2475-2483, 2531, 2589, 2601-2611, 2712, 2770, 2782-2792, 2893, 2951, 2963-2973, 3018-3026, 3074, 3102-3104, 3132, 3144-3154, 3199-3207, 3255, 3283-3285, 3313, 3325-3335, 3380-3388, 3436, 3464-3466, 3494, 3506-3516, 3561-3569, 3617, 3645-3647, 3675, 3687-3697, 3742-3750, 3798, 3826-3828, 3856, 3868-3878, 3923-3931, 3979, 4007-4009, 4037, 4049-4059, 4104-4112, 4160, 4188-4190, 4218, 4230-4240, 4285-4293, 4341, 4369-4371, 4399, 4411-4421, 4466-4474, 4522, 4550-4552, 4580, 4592-4602, 4647-4655, 4703, 4731-4733, 4761, 4773-4783, 4828-4836, 4884, 4912-4914, 4942, 4954-4964, 5009-5017, 5065, 5093-5095, 5123, 5135-5326, 5359-5367, 5427, 5461-5463, 5485, 5497-5688, 5721-5729, 5789, 5823-5825, 5847, 5859-5864
pandas/_libs/src/inference.pyx              875    198    77%   1-20, 24, 28, 32, 36, 40, 44, 50-117, 140, 173, 180, 194, 198, 202, 206, 217, 339, 352, 384, 393-394, 401, 438-439, 459, 540, 550, 562, 574, 584, 587, 590, 593, 604-608, 614, 630, 643, 654, 657, 660-667, 670, 673, 676, 684, 687, 691, 703, 706, 710, 721, 724, 728, 739, 742, 746, 753, 756, 760, 772, 775, 779, 791-816, 823-833, 840, 846, 849, 853, 864, 868, 877, 887, 907, 910, 914, 925, 929, 940, 944, 956, 960, 967, 971, 978, 981, 985, 992, 996, 1010-1018, 1118-1119, 1132, 1160, 1168, 1178-1185, 1231-1232, 1234-1235, 1246-1248, 1350-1353, 1357-1358, 1360-1361, 1365, 1367-1368, 1370-1375, 1380, 1384-1385, 1408-1409, 1457, 1487, 1500, 1539, 1581, 1598, 1629, 1651, 1685, 1691, 1694-1698, 1710, 1713-1719
pandas/_libs/src/reduce.pyx                 356     51    86%   3-10, 29-30, 54, 74, 76-77, 81, 123, 173-176, 200, 204-205, 209, 211, 214, 218, 301-304, 313, 324, 328-329, 335, 338, 342, 418, 426, 440, 444, 458, 461, 468, 471, 478-482, 542-550, 568, 571, 589, 602
pandas/_libs/testing.pyx                    125     17    86%   28, 31, 34, 37, 40, 46, 62-65, 124-126, 130, 159, 181-183, 194
pandas/_libs/tslib.pyx                      431     54    87%   70, 77, 126-127, 144, 200, 213, 232-234, 239, 257, 347, 444, 446-463, 495, 500-503, 540-544, 602-603, 651-655, 677, 693, 696, 708, 712-713, 730, 742, 749, 766
pandas/_libs/tslibs/__init__.py               0      0   100%
pandas/_libs/tslibs/conversion.pyx          529     60    89%   59, 111, 174, 210, 214, 235, 302, 340, 378-380, 470, 508, 513, 522, 533, 562, 575, 584-588, 595, 633-643, 657, 662, 676, 692, 697, 710, 822-825, 841-842, 848-850, 894, 904, 917, 965, 991-992, 998-999, 1012, 1019-1020, 1026-1027, 1034
pandas/_libs/tslibs/fields.pyx              473     71    85%   58-63, 112-113, 120, 125, 177-178, 204-205, 240-241, 268-269, 305-306, 333-334, 366, 559, 589-597, 600-608, 622-630, 636-637, 644-652, 655-663, 669-670, 676-679, 683
pandas/_libs/tslibs/frequencies.pyx          58      3    95%   120, 172, 197
pandas/_libs/tslibs/nattype.pyx             220     31    86%   79, 84-87, 102-109, 116-120, 126, 141, 168-171, 174, 177-183, 186-189, 192-194, 276, 279, 284, 578
pandas/_libs/tslibs/np_datetime.pyx          67     10    85%   42, 52, 59, 78, 101, 125, 131, 138, 146, 159
pandas/_libs/tslibs/offsets.pyx             344     28    92%   120, 141, 151, 172, 192, 203, 260, 280, 450, 459, 463, 468, 501-502, 518-519, 542-543, 564-565, 587-588, 607, 613, 669, 709-710, 719
pandas/_libs/tslibs/parsing.pyx             362     54    85%   33-34, 75, 100, 110, 157, 185, 189, 207, 263, 314, 352, 355-368, 370, 378, 404, 423, 426-428, 435, 446-447, 454, 465, 471, 490, 516, 550, 597, 606-616, 630, 634-637, 674, 687
pandas/_libs/tslibs/resolution.pyx          360     30    92%   67, 79, 87, 97, 103-113, 120, 125-131, 135, 144, 179, 365, 650-652
pandas/_libs/tslibs/strptime.pyx            325     95    71%   18-25, 50, 91-92, 102-111, 150-151, 166-168, 173-179, 202-210, 212, 214-217, 220, 223, 226, 235-242, 244, 246, 253-257, 263-265, 273-288, 312-316, 332-336, 408, 412-417, 464-468, 485, 499, 505, 524, 574, 615, 636
pandas/_libs/tslibs/timedeltas.pyx          494     78    84%   84, 86, 101, 124-125, 133, 141, 143, 160, 171, 197, 226, 241, 292-293, 321-323, 328-329, 342, 360-361, 385, 410, 423, 447, 482-483, 512, 529-532, 537, 543, 560-568, 583, 586, 609, 616, 620, 626-631, 639, 644, 649, 654, 656, 662, 669, 678, 725, 728, 731, 846, 864-865, 906, 916, 969, 973, 999-1010
pandas/_libs/tslibs/timestamps.pyx          463     65    86%   48, 70-73, 78, 94-95, 110-112, 125, 131, 156-178, 187, 197, 211, 215, 226, 228, 248-249, 252, 293, 302, 310, 330, 335, 341, 352-364, 367, 524, 677-679, 844-845, 928, 944-946
pandas/_libs/tslibs/timezones.pyx           144     24    83%   19, 41, 45, 49, 54, 58, 76, 96, 109, 113, 126, 146, 163, 170, 178-179, 185, 200, 218, 240, 268-270, 295
pandas/_libs/window.pyx                     777     54    93%   35-36, 72, 74, 81, 114, 145-147, 183-185, 228, 246, 292, 300, 415, 426, 435, 517, 536, 548, 633, 653, 669, 788, 819, 832, 920, 954, 968, 1076, 1092, 1110, 1126, 1136, 1143, 1148, 1153, 1158, 1164, 1174, 1216, 1315, 1334, 1435, 1452, 1499, 1521, 1545, 1586, 1655-1656, 1715-1717
pandas/_version.py                          262    146    44%   73-84, 87, 89-91, 98-106, 117-132, 138, 142, 144-175, 188-190, 194, 202, 206, 222, 231-234, 239-246, 257-260, 267, 285-291, 301-308, 320-334, 343-354, 364-373, 383-391, 396, 402, 406-417, 445-446, 453-462
pandas/api/__init__.py                        0      0   100%
pandas/api/types/__init__.py                  4      0   100%
pandas/compat/__init__.py                   232     64    72%   56, 58, 70, 105, 114-115, 123-125, 128-132, 200-209, 234, 248-297, 347, 363-365, 375, 382-385, 406, 412-415, 431
pandas/compat/chainmap.py                    21      6    71%   17-21, 26
pandas/compat/chainmap_impl.py               75     33    56%   5-6, 16-24, 69, 79, 82, 92, 99, 108-110, 115, 118, 121-124, 132-135, 142-145, 150
pandas/compat/numpy/__init__.py              33      2    94%   20, 66
pandas/compat/numpy/function.py             165     19    88%   48, 56, 69-70, 129-130, 150-151, 180-181, 255-256, 270-281, 362
pandas/compat/openpyxl_compat.py             11      1    91%   34
pandas/compat/pickle_compat.py               82     27    67%   36-54, 115-121, 146, 157-166, 193
pandas/computation/__init__.py                0      0   100%
pandas/computation/expressions.py             5      5     0%   1-11
pandas/conftest.py                           35      3    91%   26, 68-69
pandas/core/__init__.py                       0      0   100%
pandas/core/accessor.py                      64      4    94%   57, 60, 68, 80
pandas/core/algorithms.py                   598     35    94%   537, 673-674, 752-756, 876, 885-890, 896, 1112, 1120, 1122, 1327-1328, 1341, 1364, 1399-1402, 1406, 1410, 1415-1416, 1424, 1433, 1448-1450, 1506
pandas/core/api.py                           40      0   100%
pandas/core/base.py                         434     14    97%   49, 60, 91, 208, 255, 280, 310, 577-578, 617, 723, 831, 884, 1237
pandas/core/categorical.py                  738     31    96%   441, 676, 840-843, 1064-1065, 1203, 1307-1309, 1331, 1352-1355, 1522-1523, 1603, 1657-1660, 1696, 1791, 1890-1893, 1921-1922, 2022, 2112, 2131-2132, 2298
pandas/core/common.py                       329     23    93%   99-100, 147, 153-154, 318-321, 488, 584-588, 591, 601-610, 619
pandas/core/computation/__init__.py           0      0   100%
pandas/core/computation/align.py             95      2    98%   19, 25
pandas/core/computation/api.py                6      0   100%
pandas/core/computation/check.py             11      1    91%   13
pandas/core/computation/common.py            14      3    79%   9, 18-20
pandas/core/computation/engines.py           63      7    89%   98, 126-130, 148
pandas/core/computation/eval.py             104      3    97%   40, 52, 271
pandas/core/computation/expr.py             388     63    84%   53-54, 442, 479-489, 517, 534-539, 546-591, 597, 599, 612, 615, 621, 630-643, 690, 752
pandas/core/computation/expressions.py      119      7    94%   113, 143-147, 222
pandas/core/computation/ops.py              273     12    96%   122, 149, 153, 337-340, 407, 421, 430, 501-502, 519
pandas/core/computation/pytables.py         328    230    30%   33-35, 38, 42-52, 56, 62, 66, 74-78, 81, 85-126, 130-134, 139, 145, 150, 155, 160, 164-165, 171-219, 223, 229, 234-238, 242, 246-280, 283-286, 295, 301, 314, 318-343, 349-352, 359-373, 392-396, 400, 403-405, 410-420, 424-446, 450, 453, 476, 525-526, 529-535, 541-545, 548-550, 555-568, 576-578, 583-591, 596-601
pandas/core/computation/scope.py            102      9    91%   36-38, 75-77, 138-141
pandas/core/config.py                       301     37    88%   85, 115-116, 148, 158, 161, 185, 206, 228-230, 390, 442-443, 468, 662-686, 784, 807
pandas/core/config_init.py                  121      2    98%   42-43
pandas/core/datetools.py                     38      5    87%   23-27
pandas/core/dtypes/__init__.py                0      0   100%
pandas/core/dtypes/api.py                    13      0   100%
pandas/core/dtypes/cast.py                  575     65    89%   77, 90, 92, 200-201, 207-223, 235-244, 248-249, 264-266, 279-282, 286-290, 293, 322, 534-535, 553, 605, 621, 630, 656, 668, 685, 716, 718, 740-745, 762-763, 782, 787, 789, 792-793, 823-824, 862, 864-865, 997, 1156, 1160
pandas/core/dtypes/common.py                397     22    94%   185-186, 1195, 1198, 1406, 1582, 1708-1710, 1718, 1809, 1843, 1893, 1919, 1923, 1934-1935, 1938-1941, 1948
pandas/core/dtypes/concat.py                231      2    99%   444, 463
pandas/core/dtypes/dtypes.py                350     14    96%   42, 204, 249-250, 531, 580-582, 642-644, 700-702
pandas/core/dtypes/generic.py                30      0   100%
pandas/core/dtypes/inference.py              61      1    98%   138
pandas/core/dtypes/missing.py               164     16    90%   88-93, 135, 138-139, 175, 183, 355-359, 395
pandas/core/frame.py                       2058     45    98%   467, 501, 583, 600, 651, 807-808, 1053-1054, 1093, 1097-1098, 1638-1639, 1850, 2071, 2076-2077, 2104-2105, 2108, 2119, 2477, 2579-2580, 2703, 3674, 3957, 3961, 4076, 4103-4106, 4126-4127, 4775, 5502, 5674, 5733, 6124, 6237, 6274, 6324, 6348
pandas/core/generic.py                     1944     93    95%   87, 188, 193-194, 207, 277-278, 318, 342, 427, 469, 596, 621, 704-705, 851, 1146, 1207, 1209, 1471-1472, 1678-1695, 1856, 1861, 1921, 1952, 2068-2069, 2399, 2553-2554, 3035, 3136-3142, 3410, 3624, 3628, 3809, 4022, 4341, 4469, 4487, 4500, 4578, 4603, 4710, 4909, 5267-5268, 5292, 5762-5764, 5777, 5816, 5928-5929, 5935-5942, 6113, 6134, 6200, 6251, 6409, 6744, 6748-6756, 6763, 6784-6786, 6813-6816
pandas/core/groupby.py                     2009    162    92%   336, 417, 460, 606, 724, 746, 786-795, 828-829, 847, 886, 1167, 1201, 1205, 1387-1390, 1420, 1453, 1611, 1620, 1639, 1941-1944, 2209-2218, 2265-2268, 2444-2445, 2454, 2595, 2617, 2661, 2902, 3108-3110, 3119, 3237, 3277, 3305-3310, 3357, 3363-3479, 3693, 3785, 3794, 3835-3836, 3914, 3985, 4313, 4463-4477, 4520-4536, 4539, 4592, 4595, 4617-4619
pandas/core/index.py                          2      0   100%
pandas/core/indexes/__init__.py               0      0   100%
pandas/core/indexes/accessors.py             94     10    89%   27-32, 55, 78, 102, 134
pandas/core/indexes/api.py                   82      1    99%   97
pandas/core/indexes/base.py                1818     63    97%   79-82, 187, 365, 371, 407-409, 454, 461-462, 494, 526, 808, 818, 823, 878, 1224, 1228, 1240, 1419, 1455, 1457, 1459-1461, 1475, 1566-1568, 1655-1657, 1674, 1763, 1884, 2043-2044, 2379-2380, 2439-2440, 2713, 2811, 2860, 2921, 3050, 3335, 3650, 3916, 3919, 3922, 3954-3957, 4015, 4031, 4061, 4081, 4183
pandas/core/indexes/category.py             358     10    97%   80, 203, 211, 213, 239, 318, 325, 384, 431, 627
pandas/core/indexes/datetimelike.py         454     14    97%   149, 151, 203-207, 237, 300, 569, 627, 672, 699, 707
pandas/core/indexes/datetimes.py           1050     46    96%   136, 427-428, 486-487, 498, 549, 552, 555, 572, 575, 578, 642, 728, 731, 769, 785-786, 796, 831, 869, 1090-1091, 1094-1097, 1185-1189, 1193, 1217, 1247, 1287, 1289, 1300, 1384, 1512, 1583, 1587, 2060, 2275-2280, 2284
pandas/core/indexes/frozen.py                68      6    91%   41, 57, 65, 89, 139-140
pandas/core/indexes/interval.py             575     39    93%   56, 58, 64, 71, 79, 92, 101, 187, 232, 235, 284, 312, 588, 591, 594-597, 783, 845, 946, 950, 964-965, 974-977, 988-989, 1062-1067, 1088, 1092-1093, 1108, 1110-1111, 1154
pandas/core/indexes/multi.py               1208     49    96%   189, 212, 216, 315, 430, 537, 630-636, 640, 657, 722, 726, 754-757, 813, 817, 897-907, 1127, 1217, 1440-1443, 1616, 1785, 1846, 1877, 1947, 2110-2113, 2163, 2289, 2534, 2718, 2823
pandas/core/indexes/numeric.py              219      6    97%   250, 259, 272, 335, 397-398
pandas/core/indexes/period.py               638     45    93%   258, 367, 392, 407, 429, 450-451, 454-459, 462, 514, 710-724, 738, 742-743, 830-831, 916-917, 940-945, 951, 955-961, 968, 1042, 1062
pandas/core/indexes/range.py                323     12    96%   106, 116, 134-138, 145, 492, 496, 530, 538, 622
pandas/core/indexes/timedeltas.py           512     45    91%   81, 94, 209, 294-295, 301-306, 312, 314, 326, 344-347, 367, 521-522, 553-554, 560, 568, 587, 608, 631-632, 637, 639, 644, 658, 675-684, 688, 767, 773, 826, 969
pandas/core/indexing.py                    1098     79    93%   139, 145, 150, 181, 210, 249, 267, 281-284, 398, 489-499, 579, 712, 759-761, 786, 841-843, 869, 883, 909-910, 914, 918-919, 950, 955, 991, 1071, 1098, 1108, 1132-1137, 1206, 1209-1211, 1276, 1287, 1290, 1296, 1382, 1394, 1493, 1507, 1520, 1682, 1743, 1753, 1762, 1772, 1788, 1797, 1822, 1845, 1853, 1862, 1878, 1928, 1962, 1996-2005, 2088-2092, 2162-2163
pandas/core/internals.py                   2824    156    94%   240, 298, 308, 335-343, 451, 470, 509, 528, 641, 664, 683-692, 817, 892, 1025, 1085-1088, 1150-1153, 1178, 1231-1235, 1341, 1363-1364, 1462, 1476-1485, 1509, 1531, 1605-1606, 1633-1636, 1680, 1684, 1687, 1713, 1735, 1739, 1835, 1989, 2159-2163, 2166-2174, 2223-2231, 2267, 2357, 2407, 2557-2558, 2597, 2622, 2653, 2680, 2721, 2775, 2791, 2796, 2820-2821, 2853, 2906-2913, 2947, 3060, 3160, 3191, 3287, 3411-3412, 3621, 3723, 4090, 4123, 4166, 4283, 4327, 4392, 4402-4407, 4416-4418, 4421, 4440, 4445, 4450, 4457, 4461-4486, 4490, 4523, 4526, 4552, 4562, 4707, 4710, 4861, 4921, 4970, 5190, 5272, 5303, 5343, 5487, 5627
pandas/core/missing.py                      344     54    84%   36-37, 48, 55, 60, 214, 252-253, 268, 273-274, 280-281, 302, 304, 306, 351-356, 405-407, 410-413, 475, 479-480, 483, 487, 494-517, 536, 567, 614
pandas/core/nanops.py                       511     17    97%   35, 133, 217, 256, 378-382, 475-479, 682-683, 750
pandas/core/ops.py                          608     51    92%   155, 158-163, 166-167, 290, 398, 450-451, 499, 506, 540, 544, 564, 585, 703-705, 818, 820, 830, 881, 908, 1073, 1215-1216, 1230, 1356-1369, 1390-1406
pandas/core/panel.py                        700     22    97%   165, 457, 466-467, 509, 560, 686, 888-889, 1053-1054, 1101, 1193, 1309, 1540-1541, 1581-1593, 1627-1630, 1637-1640
pandas/core/panel4d.py                       22      0   100%
pandas/core/panelnd.py                       56      1    98%   66
pandas/core/resample.py                     602     21    97%   235, 351, 354, 670, 757, 819, 839, 946, 953, 967, 982, 1115, 1154-1155, 1207, 1233, 1237-1239, 1255, 1311, 1316
pandas/core/reshape/__init__.py               0      0   100%
pandas/core/reshape/api.py                    6      0   100%
pandas/core/reshape/concat.py               248      6    98%   451-453, 472, 522, 531
pandas/core/reshape/melt.py                 106      4    96%   27, 59, 123, 356
pandas/core/reshape/merge.py                631     36    94%   93-99, 109-119, 129-130, 229, 803-804, 974, 1167, 1205, 1216, 1220, 1222, 1240, 1246, 1289, 1394, 1508, 1541-1547
pandas/core/reshape/pivot.py                302     11    96%   112-113, 183, 225, 317-322, 538
pandas/core/reshape/reshape.py              461      0   100%
pandas/core/reshape/tile.py                 154     15    90%   103-105, 272-276, 288-289, 313-316, 336-337
pandas/core/reshape/util.py                  31      3    90%   11-13
pandas/core/series.py                      1032     56    95%   166, 235, 487, 542, 576, 604-615, 658, 686-688, 693, 750, 762, 766-773, 785, 819-822, 831, 847, 858, 926-930, 1039, 1052, 1129-1131, 1897-1900, 1933, 1969, 2671, 2958, 3091, 3099, 3101, 3188-3189, 3222, 3237
pandas/core/sorting.py                      222      5    98%   132, 192, 205, 260, 443
pandas/core/sparse/__init__.py                0      0   100%
pandas/core/sparse/api.py                     4      0   100%
pandas/core/sparse/array.py                 428     22    95%   195, 197, 238, 257, 299, 331-332, 438, 482, 535, 537, 587-592, 722-723, 764-766, 846
pandas/core/sparse/frame.py                 460     24    95%   61, 63, 65, 67, 76, 120, 247-248, 528-529, 569, 572, 652, 746, 767-778
pandas/core/sparse/list.py                   69      2    97%   37-38
pandas/core/sparse/scipy_sparse.py           68      2    97%   65-66
pandas/core/sparse/series.py                343     16    95%   61, 123, 167, 181, 189, 202, 294, 296, 326, 338-339, 400, 421-423, 428, 560
pandas/core/strings.py                      655     10    98%   148, 178, 495, 688, 1030, 1062, 1241, 1323, 1330-1331
pandas/core/tools/__init__.py                 0      0   100%
pandas/core/tools/datetimes.py              303     47    84%   283, 292-293, 309, 311, 338-339, 348-350, 358, 393-394, 528, 575-576, 641-651, 686, 689, 695, 699-711, 735-738, 743, 747-748, 750, 752
pandas/core/tools/numeric.py                 67      0   100%
pandas/core/tools/timedeltas.py              63      1    98%   79
pandas/core/util/__init__.py                  0      0   100%
pandas/core/util/hashing.py                 121      2    98%   270, 275
pandas/core/window.py                       856     31    96%   94, 98, 137, 182, 257-258, 317, 323, 519-520, 528, 538, 559, 592-594, 775, 1450, 1735, 1760-1762, 1772, 1963, 2009-2010, 2037, 2040, 2061, 2074, 2084
pandas/errors/__init__.py                    10      0   100%
pandas/formats/__init__.py                    0      0   100%
pandas/formats/style.py                       3      0   100%
pandas/io/__init__.py                         0      0   100%
pandas/io/api.py                             19      0   100%
pandas/io/clipboard/__init__.py              51     31    39%   46, 56, 58, 60, 63-98, 106-115
pandas/io/clipboard/clipboards.py            87     68    22%   13-24, 28-44, 51-71, 75-86, 90-101, 105-129, 140-143
pandas/io/clipboard/exceptions.py             7      2    71%   11-12
pandas/io/clipboard/windows.py               86     76    12%   14, 17-20, 23, 27-153
pandas/io/clipboards.py                       2      0   100%
pandas/io/common.py                         236     36    85%   32-38, 52-53, 69, 152, 159-160, 165, 167, 194, 199-200, 228, 319, 333-334, 355, 374-375, 388-396, 402-404, 411-416, 450, 477
pandas/io/data.py                             1      1     0%   1
pandas/io/date_converters.py                 38      0   100%
pandas/io/excel.py                          714    197    72%   165, 181, 195, 197, 200-202, 206-207, 262-263, 278, 283, 296, 300, 416-425, 443, 464, 490, 582, 653, 715, 738, 743, 762, 769, 795, 799, 812-815, 853-856, 867-927, 939-949, 972-1031, 1141, 1163, 1211, 1215, 1218-1222, 1226-1227, 1257, 1259, 1298, 1300, 1347, 1478, 1670-1721, 1731-1738, 1745, 1750-1790
pandas/io/feather_format.py                  35     28    20%   13-34, 47-83, 106-112
pandas/io/formats/__init__.py                 0      0   100%
pandas/io/formats/common.py                  18      1    94%   23
pandas/io/formats/console.py                 33     10    70%   24-25, 29-32, 36, 72-74
pandas/io/formats/css.py                    113      0   100%
pandas/io/formats/excel.py                  304     10    97%   162, 168, 307-308, 405, 455, 476-478, 542, 574
pandas/io/formats/format.py                1407     56    96%   129-131, 137, 153, 485, 496, 712, 751, 771, 885-889, 911, 1208-1210, 1240, 1249-1254, 1291-1297, 1313-1321, 1338, 1361-1362, 1511, 1523, 1584, 1601, 1631, 1949, 1960, 2204, 2207, 2345-2354
pandas/io/formats/printing.py               113     12    89%   62-64, 124, 140, 153, 201, 213, 225, 236-237, 243
pandas/io/formats/style.py                  396     15    96%   16-20, 37-39, 47, 374, 1078, 1080-1083, 1158-1162
pandas/io/formats/terminal.py                73     38    48%   33, 38-40, 47, 52-73, 80-94, 114-115, 117-121
pandas/io/gbq.py                             12      9    25%   7-21, 93-94, 105-106
pandas/io/html.py                           321     46    86%   45-46, 51-52, 57-58, 131-132, 144, 237, 251, 278, 293, 308, 323, 338, 347, 414, 430, 442, 449, 474-478, 527, 532, 563-564, 576-585, 588, 595, 598, 676, 682, 684, 688, 697, 712-718
pandas/io/json/__init__.py                    4      0   100%
pandas/io/json/json.py                      400     33    92%   35, 66, 89, 439-440, 501-502, 546, 579, 595, 617-618, 641-645, 666-667, 702-703, 708, 733-737, 748, 771-775, 829, 838
pandas/io/json/normalize.py                  98      4    96%   18, 71, 83, 220
pandas/io/json/table_schema.py               72      3    96%   60, 177-178
pandas/io/msgpack/__init__.py                24      5    79%   13, 15, 17, 32-33
pandas/io/msgpack/_version.py                 1      0   100%
pandas/io/msgpack/exceptions.py              18      3    83%   20-21, 24
pandas/io/packers.py                        326     34    90%   79-81, 97-98, 143, 160, 191, 283, 290-298, 328-330, 484, 506, 508, 512, 518, 545, 562, 661, 664, 675-676, 679-682, 780-787
pandas/io/parquet.py                         78     30    62%   18-26, 32, 43-63, 67-75, 80-81, 93-94, 101
pandas/io/parsers.py                       1567     66    96%   915-917, 919-923, 946-951, 1058, 1325, 1336, 1346, 1439-1440, 1474, 1477, 1608-1610, 1658, 1759, 1778, 1789-1790, 1837, 1844, 1847, 1945-1952, 2166, 2173, 2182, 2272-2273, 2308-2310, 2408, 2465, 2528, 2535, 2564, 2586-2587, 2605, 2642, 2727, 2739, 3036-3037, 3044, 3133, 3290-3297, 3303, 3368, 3376, 3390
pandas/io/pickle.py                          48      9    81%   113, 121-126, 130-138
pandas/io/pytables.py                      2361   1892    20%   64-66, 71-74, 84-86, 102-113, 246-263, 272-283, 320-378, 383-392, 444-467, 470, 475-476, 480, 483, 486, 489, 493-497, 504-509, 512, 515, 518, 521, 529, 532, 538-539, 552-613, 619-621, 628-630, 648-654, 668-671, 697-717, 731-732, 753, 779-836, 863-866, 889-916, 953-962, 988-1045, 1060-1068, 1074-1076, 1086-1092, 1096-1101, 1120-1152, 1160-1185, 1189-1190, 1194-1203, 1209-1289, 1293-1344, 1347-1349, 1355-1362, 1388-1415, 1420-1431, 1434-1435, 1440-1459, 1515-1517, 1523, 1527-1528, 1531-1538, 1542, 1546, 1551-1554, 1557-1558, 1562-1567, 1573-1595, 1599-1600, 1604, 1608, 1613, 1618, 1621, 1627-1633, 1637, 1640, 1643-1648, 1654-1667, 1671-1674, 1681-1707, 1711-1713, 1717, 1721, 1725, 1729-1734, 1739-1740, 1749, 1754-1755, 1758, 1761, 1786-1801, 1816-1823, 1827, 1833-1838, 1842-1843, 1848, 1854-1877, 1883-1929, 1932, 1938-1979, 1983-1990, 1993, 1996-2000, 2003-2005, 2011-2030, 2033, 2036-2040, 2044-2056, 2059, 2062-2066, 2070, 2075, 2079-2089, 2098-2161, 2165-2168, 2172-2175, 2184-2185, 2188, 2191, 2194, 2197, 2205, 2226-2229, 2233, 2238-2245, 2249, 2254, 2258-2264, 2268-2270, 2273-2274, 2278, 2282, 2286, 2290, 2294, 2298, 2302, 2306, 2310, 2314, 2318, 2323, 2327, 2331, 2335-2337, 2341, 2347-2351, 2366-2370, 2382, 2388, 2391-2404, 2411-2423, 2427, 2431, 2435-2437, 2440, 2444-2473, 2476-2486, 2491-2518, 2521-2523, 2526-2529, 2532-2533, 2536-2538, 2541-2560, 2563-2579, 2583-2617, 2623-2626, 2630, 2633-2717, 2723-2726, 2732-2735, 2741-2745, 2754-2757, 2760-2763, 2766-2769, 2778-2782, 2790-2794, 2800-2806, 2814-2822, 2828-2839, 2848-2875, 2880-2901, 2904-2923, 2937-2938, 2973-2981, 2985, 2989, 2993-3001, 3008-3011, 3015-3036, 3043, 3047, 3054-3059, 3065, 3070, 3074, 3079, 3083, 3087, 3091, 3096, 3100, 3105, 3112, 3122, 3126, 3130, 3143-3144, 3149-3151, 3155, 3159-3168, 3172-3189, 3194-3199, 3205-3217, 3224-3248, 3269-3317, 3325-3340, 3344, 3351-3377, 3401-3588, 3594-3648, 3655-3673, 3681-3698, 3706-3734, 3775, 3782-3862, 3873, 3893-3929, 3935-4000, 4017-4050, 4055-4110, 4123, 4127-4129, 4133-4177, 4190, 4193, 4197-4201, 4206-4220, 4230-4235, 4247, 4251, 4255-4263, 4268-4281, 4297, 4300-4308, 4313-4321, 4333-4335, 4339, 4351-4368, 4373-4377, 4384-4387, 4403-4416, 4420-4496, 4505-4528, 4532-4541, 4561-4570, 4588-4611, 4615-4619, 4623-4629, 4635-4638, 4655-4698, 4702-4711, 4726-4732, 4738-4756, 4762-4769
pandas/io/s3.py                              20     20     0%   2-35
pandas/io/sas/__init__.py                     1      0   100%
pandas/io/sas/sas7bdat.py                   448     41    91%   113-114, 146, 157, 187-188, 238-239, 247-248, 256-262, 265-266, 274, 276-277, 326-327, 383, 418, 452-457, 594, 621, 631-634, 639, 643, 683-684
pandas/io/sas/sas_constants.py              106      0   100%
pandas/io/sas/sas_xport.py                  216     23    89%   121-122, 246-251, 267-268, 275-276, 289-290, 329-331, 344-345, 379, 393, 453-454
pandas/io/sas/sasreader.py                   29      4    86%   48-50, 63
pandas/io/sql.py                            615     38    94%   75-82, 88, 116, 132, 147, 270, 516-517, 539, 575, 599, 613-614, 658, 687, 813, 878, 918-920, 937, 941, 1167-1173, 1177, 1189, 1231-1232, 1250, 1407, 1431, 1464, 1526
pandas/io/stata.py                         1160     70    94%   294, 349, 404, 422-424, 445, 542-543, 651, 802, 818-825, 971, 997-1002, 1019-1020, 1040, 1112-1113, 1123-1124, 1149, 1208, 1221, 1226, 1252, 1256-1257, 1261-1262, 1307, 1416, 1438, 1525, 1531, 1568-1569, 1574, 1589-1591, 1730, 1751, 1758-1761, 1790-1793, 1815, 1855, 1959, 1981, 1989-1992, 2192, 2301-2302
pandas/io/wb.py                               1      1     0%   1
pandas/json.py                                3      0   100%
pandas/lib.py                                 3      0   100%
pandas/parser.py                              4      0   100%
pandas/plotting/__init__.py                   4      0   100%
pandas/plotting/_compat.py                   50     22    56%   13-14, 24-25, 33-34, 42-43, 50-51, 55-59, 66-67, 71-75
pandas/plotting/_converter.py               662    492    26%   68, 70-72, 79-87, 91-96, 100, 118, 120, 142, 149, 151, 153, 156, 170, 205-206, 213, 225, 232, 246-253, 260-270, 277-292, 295, 303-304, 307, 311-314, 318-376, 379, 385-410, 414-431, 444-459, 473-475, 486-491, 495-717, 721-787, 791-833, 837-853, 894-903, 908-915, 920-934, 942-949, 973-983, 988-998, 1004-1012, 1015-1019, 1032-1042, 1045-1049
pandas/plotting/_core.py                   1371    877    36%   66-67, 118-120, 136-139, 168, 174, 188-191, 201, 205, 223-238, 248, 254-261, 268, 273-293, 305-320, 327-340, 361-362, 372, 375-382, 387-417, 421, 425-469, 472-477, 481-489, 492-497, 500-528, 531-540, 549, 553, 558-584, 588-609, 612-623, 628-631, 635-644, 647-651, 658-674, 677-680, 704-705, 710, 713, 718-720, 724-727, 731, 743-746, 750-757, 762-779, 782-783, 787-795, 808, 810, 812, 814, 816, 826-828, 841, 845-891, 899-902, 905-921, 924, 938, 942, 945-946, 949-985, 992-997, 1001-1021, 1024-1027, 1031-1038, 1042-1053, 1060-1065, 1068-1083, 1096, 1105-1136, 1139-1146, 1149-1155, 1179-1183, 1186-1188, 1197, 1199, 1203, 1207, 1210-1260, 1263-1272, 1275-1279, 1289, 1293, 1297-1301, 1326, 1331-1341, 1344-1362, 1367-1369, 1372-1375, 1379-1382, 1398-1405, 1410-1426, 1429-1431, 1434, 1442-1445, 1448-1451, 1454, 1457-1500, 1514, 1524-1527, 1531-1546, 1550-1559, 1579, 1582-1599, 1602-1631, 1634-1637, 1640, 1643, 1647-1650, 1654-1657, 1691, 1695-1705, 1710, 1715, 1724-1727, 1732-1733, 1919-1920, 1987, 1991-1992, 1998-2002, 2005-2022, 2026, 2029, 2044, 2050-2059, 2071-2072, 2095-2119, 2163-2194, 2234-2253, 2258, 2265-2268, 2298, 2306-2311, 2361-2391, 2401-2403, 2407, 2414-2423, 2432-2434, 2439-2464, 2521, 2551, 2566, 2583, 2598, 2615, 2630, 2732, 2751, 2766, 2802, 2848-2852
pandas/plotting/_misc.py                    277    243    12%   56-136, 140-146, 170-231, 270-322, 341-383, 449, 457-459, 461-465, 472-500, 517-530, 547-573
pandas/plotting/_style.py                   106     58    45%   22-28, 30-33, 41-42, 45-57, 60-92, 97-98, 126, 134, 139-141, 144-148, 162-163, 174-180
pandas/plotting/_timeseries.py              191    191     0%   3-339
pandas/plotting/_tools.py                   181    158    13%   18-23, 46-66, 70-111, 200-277, 281-296, 300-338, 342-346, 350-358, 362-367, 372-383
pandas/stats/__init__.py                      0      0   100%
pandas/stats/api.py                           1      0   100%
pandas/stats/moments.py                     184     53    71%   191-192, 226, 286-293, 307-314, 398-406, 430-437, 729, 760, 774-781, 796-803
pandas/testing.py                             2      0   100%
pandas/tools/__init__.py                      0      0   100%
pandas/tools/hashing.py                      11      0   100%
pandas/tools/merge.py                         8      8     0%   1-17
pandas/tools/plotting.py                     11      2    82%   14-17
pandas/tseries/__init__.py                    0      0   100%
pandas/tseries/api.py                         2      0   100%
pandas/tseries/converter.py                   1      1     0%   3
pandas/tseries/frequencies.py               254     15    94%   109, 125-126, 217-218, 359, 419, 421, 434-435, 461, 464-466, 477
pandas/tseries/holiday.py                   203     14    93%   20, 35, 46, 55, 358, 377, 408, 437-438, 441, 459-463
pandas/tseries/offsets.py                  1310     40    97%   106, 237, 300, 330, 412, 485, 490-491, 497, 499, 510, 580, 730, 857, 929-933, 1192, 1226, 1230, 1393, 1410, 1544, 1569-1574, 1837, 1840, 1846, 1887, 1891, 1898, 1901, 1908, 1974, 2051, 2253, 2440
pandas/tseries/plotting.py                    1      1     0%   3
pandas/tslib.py                               4      0   100%
pandas/types/__init__.py                      0      0   100%
pandas/types/common.py                        3      3     0%   1-8
pandas/types/concat.py                        5      0   100%
pandas/util/__init__.py                       2      0   100%
pandas/util/_decorators.py                  116     26    78%   117-120, 135-149, 203, 213-215, 255, 306-309, 316-320, 323, 327-331
pandas/util/_depr_module.py                  43      9    79%   39-40, 50, 54-59, 79, 98
pandas/util/_doctools.py                     99     99     0%   1-163
pandas/util/_print_versions.py               70     59    16%   14-56, 60-137, 141-154
pandas/util/_tester.py                       17     12    29%   11-22
pandas/util/_validators.py                   82      3    96%   58-63
pandas/util/decorators.py                     3      3     0%   1-8
pandas/util/hashing.py                       11     11     0%   1-18
pandas/util/testing.py                     1048    206    80%   66, 71-73, 132-137, 277, 287, 309, 317-319, 324-325, 336-343, 370-374, 379-380, 385-386, 400-402, 412-413, 431-432, 436-443, 447-448, 476, 482-485, 492-493, 529-530, 540, 545-546, 580-581, 632, 740-748, 752-753, 757-762, 785-789, 793, 797-799, 806-807, 812-813, 954-955, 998-1000, 1012-1019, 1026, 1064-1067, 1078, 1082, 1260, 1268-1270, 1496, 1630, 1656, 1658, 1703-1708, 1862, 1876, 1881, 2005, 2045-2056, 2125, 2132-2133, 2136-2137, 2140, 2166, 2210, 2228-2234, 2332-2361, 2387-2393, 2396-2398, 2415-2420, 2581, 2611, 2654, 2685-2709, 2764, 2814, 2842-2843, 2852-2853
-----------------------------------------------------------------------
TOTAL                                     79363  18629    77%

@jbrockmendel
Copy link
Member Author

It looks like it is incorrectly counting a lot of function/method/constant definitions lines as not-covered. In particular in src/inference it is almost all false-positives.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Frequency DateOffsets Performance Memory or execution speed performance
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants