@@ -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 ]
@@ -481,7 +481,7 @@ def _create_auto_date_locator(date1, date2):
481
481
],
482
482
[datetime .timedelta (weeks = 52 ),
483
483
['1997' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' ,
484
- 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
484
+ 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
485
485
],
486
486
[datetime .timedelta (days = 141 ),
487
487
['Jan' , '22' , 'Feb' , '22' , 'Mar' , '22' , 'Apr' , '22' ,
@@ -511,6 +511,117 @@ def _create_auto_date_locator(date1, date2):
511
511
assert strings == expected
512
512
513
513
514
+ def test_concise_formatter_formats ():
515
+ formats = ['%Y' , '%m/%Y' , 'day: %d' ,
516
+ '%H hr %M min' , '%H hr %M min' , '%S.%f sec' ]
517
+
518
+ def _create_auto_date_locator (date1 , date2 ):
519
+ fig , ax = plt .subplots ()
520
+
521
+ locator = mdates .AutoDateLocator (interval_multiples = True )
522
+ formatter = mdates .ConciseDateFormatter (locator , formats = formats )
523
+ ax .yaxis .set_major_locator (locator )
524
+ ax .yaxis .set_major_formatter (formatter )
525
+ ax .set_ylim (date1 , date2 )
526
+ fig .canvas .draw ()
527
+ sts = []
528
+ for st in ax .get_yticklabels ():
529
+ sts += [st .get_text ()]
530
+ return sts
531
+
532
+ d1 = datetime .datetime (1997 , 1 , 1 )
533
+ results = ([datetime .timedelta (weeks = 52 * 200 ),
534
+ [str (t ) for t in range (1980 , 2201 , 20 )]
535
+ ],
536
+ [datetime .timedelta (weeks = 52 ),
537
+ ['1997' , '02/1997' , '03/1997' , '04/1997' , '05/1997' , '06/1997' ,
538
+ '07/1997' , '08/1997' , '09/1997' , '10/1997' , '11/1997' , '12/1997' ]
539
+ ],
540
+ [datetime .timedelta (days = 141 ),
541
+ ['01/1997' , 'day: 22' , '02/1997' , 'day: 22' , '03/1997' ,
542
+ 'day: 22' , '04/1997' , 'day: 22' , '05/1997' , 'day: 22' ]
543
+ ],
544
+ [datetime .timedelta (days = 40 ),
545
+ ['01/1997' , 'day: 05' , 'day: 09' , 'day: 13' , 'day: 17' , 'day: 21' ,
546
+ 'day: 25' , 'day: 29' , '02/1997' , 'day: 05' , 'day: 09' ]
547
+ ],
548
+ [datetime .timedelta (hours = 40 ),
549
+ ['day: 01' ,
550
+ '04 hr 00 min' , '08 hr 00 min' , '12 hr 00 min' , '16 hr 00 min' , '20 hr 00 min' , 'day: 02' ,
551
+ '04 hr 00 min' , '08 hr 00 min' , '12 hr 00 min' , '16 hr 00 min' ]
552
+ ],
553
+ [datetime .timedelta (minutes = 20 ),
554
+ ['00 hr 00 min' , '00 hr 05 min' , '00 hr 10 min' ,
555
+ '00 hr 15 min' , '00 hr 20 min' ]
556
+ ],
557
+ [datetime .timedelta (seconds = 40 ),
558
+ ['00 hr 00 min' , '05.000000 sec' , '10.000000 sec' , '15.000000 sec' , '20.000000 sec' ,
559
+ '25.000000 sec' , '30.000000 sec' , '35.000000 sec' , '40.000000 sec' ]
560
+ ],
561
+ [datetime .timedelta (seconds = 2 ),
562
+ ['59.500000 sec' , '00 hr 00 min' , '00.500000 sec' , '01.000000 sec' ,
563
+ '01.500000 sec' , '02.000000 sec' , '02.500000 sec' ]
564
+ ],
565
+ )
566
+ for t_delta , expected in results :
567
+ d2 = d1 + t_delta
568
+ strings = _create_auto_date_locator (d1 , d2 )
569
+ assert strings == expected
570
+
571
+
572
+ def test_concise_formatter_zformats ():
573
+ zero_formats = ['' , '%Y' , '%b' , '%b-%d' , '%H:%M' , '%H:%M' ]
574
+
575
+ def _create_auto_date_locator (date1 , date2 ):
576
+ fig , ax = plt .subplots ()
577
+
578
+ locator = mdates .AutoDateLocator (interval_multiples = True )
579
+ formatter = mdates .ConciseDateFormatter (locator , zero_formats )
580
+ ax .yaxis .set_major_locator (locator )
581
+ ax .yaxis .set_major_formatter (formatter )
582
+ ax .set_ylim (date1 , date2 )
583
+ fig .canvas .draw ()
584
+ sts = []
585
+ for st in ax .get_yticklabels ():
586
+ sts += [st .get_text ()]
587
+ return sts
588
+
589
+ d1 = datetime .datetime (1997 , 1 , 1 )
590
+ results = ([datetime .timedelta (weeks = 52 * 200 ),
591
+ [str (t ) for t in range (1980 , 2201 , 20 )]
592
+ ],
593
+ [datetime .timedelta (weeks = 52 ),
594
+ ["'97" , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' ,
595
+ 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ]
596
+ ],
597
+ [datetime .timedelta (days = 141 ),
598
+ ['January' , '22' , 'February' , '22' , 'March' ,
599
+ '22' , 'April' , '22' , 'May' , '22' ]
600
+ ],
601
+ [datetime .timedelta (days = 40 ),
602
+ ['January' , '05' , '09' , '13' , '17' , '21' ,
603
+ '25' , '29' , 'February' , '05' , '09' ]
604
+ ],
605
+ [datetime .timedelta (hours = 40 ),
606
+ ['01-01' , '04:00' , '08:00' , '12:00' , '16:00' , '20:00' ,
607
+ '01-02' , '04:00' , '08:00' , '12:00' , '16:00' ]
608
+ ],
609
+ [datetime .timedelta (minutes = 20 ),
610
+ ['00' , '00:05' , '00:10' , '00:15' , '00:20' ]
611
+ ],
612
+ [datetime .timedelta (seconds = 40 ),
613
+ ['' , '05' , '10' , '15' , '20' , '25' , '30' , '35' , '40' ]
614
+ ],
615
+ [datetime .timedelta (seconds = 2 ),
616
+ ['59.5' , '.0' , '00.5' , '01.0' , '01.5' , '02.0' , '02.5' ]
617
+ ],
618
+ )
619
+ for t_delta , expected in results :
620
+ d2 = d1 + t_delta
621
+ strings = _create_auto_date_locator (d1 , d2 )
622
+ assert strings == expected
623
+
624
+
514
625
def test_concise_formatter_tz ():
515
626
def _create_auto_date_locator (date1 , date2 , tz ):
516
627
fig , ax = plt .subplots ()
@@ -671,6 +782,7 @@ class dt_tzaware(datetime.datetime):
671
782
datetime-like object that applies timezone normalization after
672
783
subtraction.
673
784
"""
785
+
674
786
def __sub__ (self , other ):
675
787
r = super ().__sub__ (other )
676
788
tzinfo = getattr (r , 'tzinfo' , None )
@@ -773,7 +885,7 @@ def test_yearlocator_pytz():
773
885
774
886
tz = pytz .timezone ('America/New_York' )
775
887
x = [tz .localize (datetime .datetime (2010 , 1 , 1 ))
776
- + datetime .timedelta (i ) for i in range (2000 )]
888
+ + datetime .timedelta (i ) for i in range (2000 )]
777
889
locator = mdates .AutoDateLocator (interval_multiples = True , tz = tz )
778
890
locator .create_dummy_axis ()
779
891
locator .set_view_interval (mdates .date2num (x [0 ])- 1.0 ,
0 commit comments