|
12 | 12 | from matplotlib.cbook import MatplotlibDeprecationWarning
|
13 | 13 | import matplotlib.dates as mdates
|
14 | 14 | import matplotlib.ticker as mticker
|
| 15 | +from matplotlib import rc_context |
15 | 16 |
|
16 | 17 |
|
17 | 18 | def __has_pytz():
|
@@ -439,7 +440,6 @@ def _create_auto_date_locator(date1, date2):
|
439 | 440 | mdates.date2num(date2))
|
440 | 441 | return locator
|
441 | 442 |
|
442 |
| - d1 = datetime.datetime(1997, 1, 1) |
443 | 443 | results = ([datetime.timedelta(weeks=52 * 200),
|
444 | 444 | ['1980-01-01 00:00:00+00:00', '2000-01-01 00:00:00+00:00',
|
445 | 445 | '2020-01-01 00:00:00+00:00', '2040-01-01 00:00:00+00:00',
|
@@ -500,12 +500,88 @@ def _create_auto_date_locator(date1, date2):
|
500 | 500 | ],
|
501 | 501 | )
|
502 | 502 |
|
| 503 | + d1 = datetime.datetime(1997, 1, 1) |
503 | 504 | for t_delta, expected in results:
|
504 | 505 | d2 = d1 + t_delta
|
505 | 506 | locator = _create_auto_date_locator(d1, d2)
|
506 | 507 | assert list(map(str, mdates.num2date(locator()))) == expected
|
507 | 508 |
|
508 | 509 |
|
| 510 | +@pytest.mark.pytz |
| 511 | +@pytest.mark.skipif(not __has_pytz(), reason="Requires pytz") |
| 512 | +def test_auto_date_locator_intmult_tz(): |
| 513 | + import pytz |
| 514 | + |
| 515 | + def _create_auto_date_locator(date1, date2, tz): |
| 516 | + locator = mdates.AutoDateLocator(interval_multiples=True, tz=tz) |
| 517 | + locator.create_dummy_axis() |
| 518 | + locator.set_view_interval(mdates.date2num(date1), |
| 519 | + mdates.date2num(date2)) |
| 520 | + return locator |
| 521 | + |
| 522 | + results = ([datetime.timedelta(weeks=52*200), |
| 523 | + ['1980-01-01 00:00:00-08:00', '2000-01-01 00:00:00-08:00', |
| 524 | + '2020-01-01 00:00:00-08:00', '2040-01-01 00:00:00-08:00', |
| 525 | + '2060-01-01 00:00:00-08:00', '2080-01-01 00:00:00-08:00', |
| 526 | + '2100-01-01 00:00:00-08:00', '2120-01-01 00:00:00-08:00', |
| 527 | + '2140-01-01 00:00:00-08:00', '2160-01-01 00:00:00-08:00', |
| 528 | + '2180-01-01 00:00:00-08:00', '2200-01-01 00:00:00-08:00'] |
| 529 | + ], |
| 530 | + [datetime.timedelta(weeks=52), |
| 531 | + ['1997-01-01 00:00:00-08:00', '1997-02-01 00:00:00-08:00', |
| 532 | + '1997-03-01 00:00:00-08:00', '1997-04-01 00:00:00-08:00', |
| 533 | + '1997-05-01 00:00:00-07:00', '1997-06-01 00:00:00-07:00', |
| 534 | + '1997-07-01 00:00:00-07:00', '1997-08-01 00:00:00-07:00', |
| 535 | + '1997-09-01 00:00:00-07:00', '1997-10-01 00:00:00-07:00', |
| 536 | + '1997-11-01 00:00:00-08:00', '1997-12-01 00:00:00-08:00'] |
| 537 | + ], |
| 538 | + [datetime.timedelta(days=141), |
| 539 | + ['1997-01-01 00:00:00-08:00', '1997-01-22 00:00:00-08:00', |
| 540 | + '1997-02-01 00:00:00-08:00', '1997-02-22 00:00:00-08:00', |
| 541 | + '1997-03-01 00:00:00-08:00', '1997-03-22 00:00:00-08:00', |
| 542 | + '1997-04-01 00:00:00-08:00', '1997-04-22 00:00:00-07:00', |
| 543 | + '1997-05-01 00:00:00-07:00', '1997-05-22 00:00:00-07:00'] |
| 544 | + ], |
| 545 | + [datetime.timedelta(days=40), |
| 546 | + ['1997-01-01 00:00:00-08:00', '1997-01-05 00:00:00-08:00', |
| 547 | + '1997-01-09 00:00:00-08:00', '1997-01-13 00:00:00-08:00', |
| 548 | + '1997-01-17 00:00:00-08:00', '1997-01-21 00:00:00-08:00', |
| 549 | + '1997-01-25 00:00:00-08:00', '1997-01-29 00:00:00-08:00', |
| 550 | + '1997-02-01 00:00:00-08:00', '1997-02-05 00:00:00-08:00', |
| 551 | + '1997-02-09 00:00:00-08:00'] |
| 552 | + ], |
| 553 | + [datetime.timedelta(hours=40), |
| 554 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 04:00:00-08:00', |
| 555 | + '1997-01-01 08:00:00-08:00', '1997-01-01 12:00:00-08:00', |
| 556 | + '1997-01-01 16:00:00-08:00', '1997-01-01 20:00:00-08:00', |
| 557 | + '1997-01-02 00:00:00-08:00', '1997-01-02 04:00:00-08:00', |
| 558 | + '1997-01-02 08:00:00-08:00', '1997-01-02 12:00:00-08:00', |
| 559 | + '1997-01-02 16:00:00-08:00'] |
| 560 | + ], |
| 561 | + [datetime.timedelta(minutes=20), |
| 562 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 00:05:00-08:00', |
| 563 | + '1997-01-01 00:10:00-08:00', '1997-01-01 00:15:00-08:00', |
| 564 | + '1997-01-01 00:20:00-08:00'] |
| 565 | + ], |
| 566 | + [datetime.timedelta(seconds=40), |
| 567 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 00:00:05-08:00', |
| 568 | + '1997-01-01 00:00:10-08:00', '1997-01-01 00:00:15-08:00', |
| 569 | + '1997-01-01 00:00:20-08:00', '1997-01-01 00:00:25-08:00', |
| 570 | + '1997-01-01 00:00:30-08:00', '1997-01-01 00:00:35-08:00', |
| 571 | + '1997-01-01 00:00:40-08:00'] |
| 572 | + ] |
| 573 | + ) |
| 574 | + |
| 575 | + tz = pytz.timezone('US/Pacific') |
| 576 | + d1 = tz.localize(datetime.datetime(1997, 1, 1)) |
| 577 | + for t_delta, expected in results: |
| 578 | + with rc_context({'_internal.classic_mode': False}): |
| 579 | + d2 = d1 + t_delta |
| 580 | + locator = _create_auto_date_locator(d1, d2, tz) |
| 581 | + st = list(map(str, mdates.num2date(locator(), tz=tz))) |
| 582 | + assert st == expected |
| 583 | + |
| 584 | + |
509 | 585 | @image_comparison(baseline_images=['date_inverted_limit'],
|
510 | 586 | extensions=['png'])
|
511 | 587 | def test_date_inverted_limit():
|
|
0 commit comments