@@ -44,9 +44,9 @@ def test_date_numpyx():
44
44
[datetime .datetime (2017 , 1 , 1 , 2 , 1 , 1 ),
45
45
datetime .datetime (2017 , 1 , 1 , 3 , 1 , 1 )]]])
46
46
@pytest .mark .parametrize ('dtype' , ['datetime64[s]' ,
47
- 'datetime64[us]' ,
48
- 'datetime64[ms]' ,
49
- 'datetime64[ns]' ])
47
+ 'datetime64[us]' ,
48
+ 'datetime64[ms]' ,
49
+ 'datetime64[ns]' ])
50
50
def test_date_date2num_numpy (t0 , dtype ):
51
51
time = mdates .date2num (t0 )
52
52
tnp = np .array (t0 , dtype = dtype )
@@ -55,9 +55,9 @@ def test_date_date2num_numpy(t0, dtype):
55
55
56
56
57
57
@pytest .mark .parametrize ('dtype' , ['datetime64[s]' ,
58
- 'datetime64[us]' ,
59
- 'datetime64[ms]' ,
60
- 'datetime64[ns]' ])
58
+ 'datetime64[us]' ,
59
+ 'datetime64[ms]' ,
60
+ 'datetime64[ns]' ])
61
61
def test_date2num_NaT (dtype ):
62
62
t0 = datetime .datetime (2017 , 1 , 1 , 0 , 1 , 1 )
63
63
tmpl = [mdates .date2num (t0 ), np .nan ]
@@ -470,9 +470,7 @@ def _create_auto_date_locator(date1, date2):
470
470
ax .yaxis .set_major_formatter (formatter )
471
471
ax .set_ylim (date1 , date2 )
472
472
fig .canvas .draw ()
473
- sts = []
474
- for st in ax .get_yticklabels ():
475
- sts += [st .get_text ()]
473
+ sts = [st .get_text () for st in ax .get_yticklabels ()]
476
474
return sts
477
475
478
476
d1 = datetime .datetime (1997 , 1 , 1 )
@@ -481,7 +479,7 @@ def _create_auto_date_locator(date1, date2):
481
479
],
482
480
[datetime .timedelta (weeks = 52 ),
483
481
['1997' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' ,
484
- 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
482
+ 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
485
483
],
486
484
[datetime .timedelta (days = 141 ),
487
485
['Jan' , '22' , 'Feb' , '22' , 'Mar' , '22' , 'Apr' , '22' ,
@@ -511,6 +509,113 @@ def _create_auto_date_locator(date1, date2):
511
509
assert strings == expected
512
510
513
511
512
+ def test_concise_formatter_formats ():
513
+ formats = ['%Y' , '%m/%Y' , 'day: %d' ,
514
+ '%H hr %M min' , '%H hr %M min' , '%S.%f sec' ]
515
+
516
+ def _create_auto_date_locator (date1 , date2 ):
517
+ fig , ax = plt .subplots ()
518
+
519
+ locator = mdates .AutoDateLocator (interval_multiples = True )
520
+ formatter = mdates .ConciseDateFormatter (locator , formats = formats )
521
+ ax .yaxis .set_major_locator (locator )
522
+ ax .yaxis .set_major_formatter (formatter )
523
+ ax .set_ylim (date1 , date2 )
524
+ fig .canvas .draw ()
525
+ sts = [st .get_text () for st in ax .get_yticklabels ()]
526
+ return sts
527
+
528
+ d1 = datetime .datetime (1997 , 1 , 1 )
529
+ results = (
530
+ [datetime .timedelta (weeks = 52 * 200 ), [str (t ) for t in range (1980 ,
531
+ 2201 , 20 )]],
532
+ [datetime .timedelta (weeks = 52 ), [
533
+ '1997' , '02/1997' , '03/1997' , '04/1997' , '05/1997' , '06/1997' ,
534
+ '07/1997' , '08/1997' , '09/1997' , '10/1997' , '11/1997' , '12/1997' ,
535
+ ]],
536
+ [datetime .timedelta (days = 141 ), [
537
+ '01/1997' , 'day: 22' , '02/1997' , 'day: 22' , '03/1997' , 'day: 22' ,
538
+ '04/1997' , 'day: 22' , '05/1997' , 'day: 22' ,
539
+ ]],
540
+ [datetime .timedelta (days = 40 ), [
541
+ '01/1997' , 'day: 05' , 'day: 09' , 'day: 13' , 'day: 17' , 'day: 21' ,
542
+ 'day: 25' , 'day: 29' , '02/1997' , 'day: 05' , 'day: 09' ,
543
+ ]],
544
+ [datetime .timedelta (hours = 40 ), [
545
+ 'day: 01' , '04 hr 00 min' , '08 hr 00 min' , '12 hr 00 min' ,
546
+ '16 hr 00 min' , '20 hr 00 min' , 'day: 02' , '04 hr 00 min' ,
547
+ '08 hr 00 min' , '12 hr 00 min' , '16 hr 00 min' ,
548
+ ]],
549
+ [datetime .timedelta (minutes = 20 ), ['00 hr 00 min' , '00 hr 05 min' ,
550
+ '00 hr 10 min' , '00 hr 15 min' , '00 hr 20 min' ]],
551
+ [datetime .timedelta (seconds = 40 ), [
552
+ '00 hr 00 min' , '05.000000 sec' , '10.000000 sec' ,
553
+ '15.000000 sec' , '20.000000 sec' , '25.000000 sec' ,
554
+ '30.000000 sec' , '35.000000 sec' , '40.000000 sec' ,
555
+ ]],
556
+ [datetime .timedelta (seconds = 2 ), [
557
+ '59.500000 sec' , '00 hr 00 min' , '00.500000 sec' , '01.000000 sec' ,
558
+ '01.500000 sec' , '02.000000 sec' , '02.500000 sec' ,
559
+ ]],
560
+ )
561
+ for t_delta , expected in results :
562
+ d2 = d1 + t_delta
563
+ strings = _create_auto_date_locator (d1 , d2 )
564
+ assert strings == expected
565
+
566
+
567
+ def test_concise_formatter_zformats ():
568
+ zero_formats = ['' , "'%y" , '%B' , '%m-%d' , '%S' , '%S.%f' ]
569
+
570
+ def _create_auto_date_locator (date1 , date2 ):
571
+ fig , ax = plt .subplots ()
572
+
573
+ locator = mdates .AutoDateLocator (interval_multiples = True )
574
+ formatter = mdates .ConciseDateFormatter (
575
+ locator , zero_formats = zero_formats )
576
+ ax .yaxis .set_major_locator (locator )
577
+ ax .yaxis .set_major_formatter (formatter )
578
+ ax .set_ylim (date1 , date2 )
579
+ fig .canvas .draw ()
580
+ sts = [st .get_text () for st in ax .get_yticklabels ()]
581
+ return sts
582
+
583
+ d1 = datetime .datetime (1997 , 1 , 1 )
584
+ results = ([datetime .timedelta (weeks = 52 * 200 ),
585
+ [str (t ) for t in range (1980 , 2201 , 20 )]
586
+ ],
587
+ [datetime .timedelta (weeks = 52 ),
588
+ ["'97" , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' ,
589
+ 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
590
+ ],
591
+ [datetime .timedelta (days = 141 ),
592
+ ['January' , '22' , 'February' , '22' , 'March' ,
593
+ '22' , 'April' , '22' , 'May' , '22' ]
594
+ ],
595
+ [datetime .timedelta (days = 40 ),
596
+ ['January' , '05' , '09' , '13' , '17' , '21' ,
597
+ '25' , '29' , 'February' , '05' , '09' ]
598
+ ],
599
+ [datetime .timedelta (hours = 40 ),
600
+ ['01-01' , '04:00' , '08:00' , '12:00' , '16:00' , '20:00' ,
601
+ '01-02' , '04:00' , '08:00' , '12:00' , '16:00' ]
602
+ ],
603
+ [datetime .timedelta (minutes = 20 ),
604
+ ['00' , '00:05' , '00:10' , '00:15' , '00:20' ]
605
+ ],
606
+ [datetime .timedelta (seconds = 40 ),
607
+ ['00' , '05' , '10' , '15' , '20' , '25' , '30' , '35' , '40' ]
608
+ ],
609
+ [datetime .timedelta (seconds = 2 ),
610
+ ['59.5' , '00.0' , '00.5' , '01.0' , '01.5' , '02.0' , '02.5' ]
611
+ ],
612
+ )
613
+ for t_delta , expected in results :
614
+ d2 = d1 + t_delta
615
+ strings = _create_auto_date_locator (d1 , d2 )
616
+ assert strings == expected
617
+
618
+
514
619
def test_concise_formatter_tz ():
515
620
def _create_auto_date_locator (date1 , date2 , tz ):
516
621
fig , ax = plt .subplots ()
@@ -521,9 +626,7 @@ def _create_auto_date_locator(date1, date2, tz):
521
626
ax .yaxis .set_major_formatter (formatter )
522
627
ax .set_ylim (date1 , date2 )
523
628
fig .canvas .draw ()
524
- sts = []
525
- for st in ax .get_yticklabels ():
526
- sts += [st .get_text ()]
629
+ sts = [st .get_text () for st in ax .get_yticklabels ()]
527
630
return sts , ax .yaxis .get_offset_text ().get_text ()
528
631
529
632
d1 = datetime .datetime (1997 , 1 , 1 ).replace (tzinfo = datetime .timezone .utc )
@@ -671,6 +774,7 @@ class dt_tzaware(datetime.datetime):
671
774
datetime-like object that applies timezone normalization after
672
775
subtraction.
673
776
"""
777
+
674
778
def __sub__ (self , other ):
675
779
r = super ().__sub__ (other )
676
780
tzinfo = getattr (r , 'tzinfo' , None )
@@ -773,7 +877,7 @@ def test_yearlocator_pytz():
773
877
774
878
tz = pytz .timezone ('America/New_York' )
775
879
x = [tz .localize (datetime .datetime (2010 , 1 , 1 ))
776
- + datetime .timedelta (i ) for i in range (2000 )]
880
+ + datetime .timedelta (i ) for i in range (2000 )]
777
881
locator = mdates .AutoDateLocator (interval_multiples = True , tz = tz )
778
882
locator .create_dummy_axis ()
779
883
locator .set_view_interval (mdates .date2num (x [0 ])- 1.0 ,
0 commit comments