@@ -504,37 +504,108 @@ def test_formatstrformatter():
504
504
assert '002-01' == tmp_form (2 , 1 )
505
505
506
506
507
- percentformatter_test_cases = (
508
- # Check explicitly set decimals over different intervals and values
509
- (100 , 0 , '%' , 120 , 100 , '120%' ),
510
- (100 , 0 , '%' , 100 , 90 , '100%' ),
511
- (100 , 0 , '%' , 90 , 50 , '90%' ),
512
- (100 , 0 , '%' , 1.7 , 40 , '2%' ),
513
- (100 , 1 , '%' , 90.0 , 100 , '90.0%' ),
514
- (100 , 1 , '%' , 80.1 , 90 , '80.1%' ),
515
- (100 , 1 , '%' , 70.23 , 50 , '70.2%' ),
516
- # 60.554 instead of 60.55: see https://bugs.python.org/issue5118
517
- (100 , 1 , '%' , 60.554 , 40 , '60.6%' ),
518
- # Check auto decimals over different intervals and values
519
- (100 , None , '%' , 95 , 1 , '95.00%' ),
520
- (1.0 , None , '%' , 3 , 6 , '300%' ),
521
- (17.0 , None , '%' , 1 , 8.5 , '6%' ),
522
- (17.0 , None , '%' , 1 , 8.4 , '5.9%' ),
523
- (5 , None , '%' , - 100 , 0.000001 , '-2000.00000%' ),
524
- # Check percent symbol
525
- (1.0 , 2 , None , 1.2 , 100 , '120.00' ),
526
- (75 , 3 , '' , 50 , 100 , '66.667' ),
527
- (42 , None , '^^Foobar$$' , 21 , 12 , '50.0^^Foobar$$' ),
528
- )
529
-
530
-
531
507
@pytest .mark .parametrize ('xmax, decimals, symbol, x, display_range, expected' ,
532
- percentformatter_test_cases )
508
+ [
509
+ # Check explicitly set decimals over different intervals and values
510
+ (100 , 0 , '%' , 120 , 100 , '120%' ),
511
+ (100 , 0 , '%' , 100 , 90 , '100%' ),
512
+ (100 , 0 , '%' , 90 , 50 , '90%' ),
513
+ (100 , 0 , '%' , 1.7 , 40 , '2%' ),
514
+ (100 , 1 , '%' , 90.0 , 100 , '90.0%' ),
515
+ (100 , 1 , '%' , 80.1 , 90 , '80.1%' ),
516
+ (100 , 1 , '%' , 70.23 , 50 , '70.2%' ),
517
+ # 60.554 instead of 60.55: see https://bugs.python.org/issue5118
518
+ (100 , 1 , '%' , 60.554 , 40 , '60.6%' ),
519
+ # Check auto decimals over different intervals and values
520
+ (100 , None , '%' , 95 , 1 , '95.00%' ),
521
+ (1.0 , None , '%' , 3 , 6 , '300%' ),
522
+ (17.0 , None , '%' , 1 , 8.5 , '6%' ),
523
+ (17.0 , None , '%' , 1 , 8.4 , '5.9%' ),
524
+ (5 , None , '%' , - 100 , 0.000001 , '-2000.00000%' ),
525
+ # Check percent symbol
526
+ (1.0 , 2 , None , 1.2 , 100 , '120.00' ),
527
+ (75 , 3 , '' , 50 , 100 , '66.667' ),
528
+ (42 , None , '^^Foobar$$' , 21 , 12 , '50.0^^Foobar$$' ),
529
+ ])
533
530
def test_percentformatter (xmax , decimals , symbol , x , display_range , expected ):
534
531
formatter = mticker .PercentFormatter (xmax , decimals , symbol )
535
532
assert formatter .format_pct (x , display_range ) == expected
536
533
537
534
535
+ def test_TransformFormatter ():
536
+ """
537
+ Verifies that the linear transformations are being done correctly.
538
+ """
539
+ def transform (x ):
540
+ return - x
541
+
542
+ # Make a formatter using the default underlying formatter,
543
+ # which is a Formatter instance, not just a generic callable
544
+ fmt = mticker .TransformFormatter (transform )
545
+
546
+ # Public (non-method) attributes
547
+ assert fmt .transform is transform
548
+ assert isinstance (fmt .formatter , mticker .ScalarFormatter )
549
+
550
+ # .create_dummy_axis
551
+ assert fmt .axis is None
552
+ fmt .create_dummy_axis ()
553
+ assert fmt .axis is not None
554
+ assert fmt .axis is fmt .formatter .axis
555
+
556
+ # .set_axis
557
+ prev_axis = fmt .axis
558
+ fmt .set_axis (mticker ._DummyAxis ())
559
+ assert fmt .axis is fmt .formatter .axis
560
+ assert fmt .axis is not prev_axis
561
+
562
+ # .set_view_interval
563
+ fmt .set_view_interval (100 , 200 )
564
+ assert np .array_equal (fmt .axis .get_view_interval (), [100 , 200 ])
565
+
566
+ # .set_data_interval
567
+ fmt .set_data_interval (50 , 60 )
568
+ assert np .array_equal (fmt .axis .get_data_interval (), [50 , 60 ])
569
+
570
+ # .set_bounds
571
+ bounds = [- 7 , 7 ]
572
+ fmt .set_bounds (* bounds )
573
+ assert np .array_equal (fmt .axis .get_view_interval (), bounds )
574
+ assert np .array_equal (fmt .axis .get_data_interval (), bounds )
575
+
576
+ # .format_data, .format_data_short
577
+ assert fmt .format_data (100.0 ) == '\u2212 1e2'
578
+ assert fmt .format_data_short (- 200.0 ) == '{:<12g}' .format (200 )
579
+
580
+ # .get_offset
581
+ assert fmt .get_offset () == fmt .formatter .get_offset ()
582
+
583
+ # .set_locs
584
+ locs = [1.0 , 2.0 , 3.0 ]
585
+ transformed_locs = [- 1.0 , - 2.0 , - 3.0 ]
586
+ fmt .set_locs (locs )
587
+ assert fmt .locs is locs
588
+ assert fmt .formatter .locs == transformed_locs
589
+
590
+ # .fix_minus
591
+ val = '-19.0'
592
+ assert fmt .fix_minus (val ) == '\u2212 19.0'
593
+ assert fmt .fix_minus (val ) == fmt .formatter .fix_minus (val )
594
+
595
+ # .__call__ needs to be tested after `set_locs` has been called at
596
+ # least once.
597
+ assert fmt (5.0 ) == '\u2212 5'
598
+
599
+ # .set_formatter
600
+ prev_axis = fmt .axis
601
+ fmt .set_formatter (mticker .PercentFormatter ())
602
+ assert isinstance (fmt .formatter , mticker .PercentFormatter )
603
+ assert fmt .axis is prev_axis
604
+ assert fmt .formatter .axis is fmt .axis
605
+ assert fmt .locs is locs
606
+ assert fmt .formatter .locs == transformed_locs
607
+
608
+
538
609
def test_EngFormatter_formatting ():
539
610
"""
540
611
Create two instances of EngFormatter with default parameters, with and
0 commit comments