@@ -504,37 +504,108 @@ def test_formatstrformatter():
504504 assert '002-01' == tmp_form (2 , 1 )
505505
506506
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-
531507@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+ ])
533530def test_percentformatter (xmax , decimals , symbol , x , display_range , expected ):
534531 formatter = mticker .PercentFormatter (xmax , decimals , symbol )
535532 assert formatter .format_pct (x , display_range ) == expected
536533
537534
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+
538609def test_EngFormatter_formatting ():
539610 """
540611 Create two instances of EngFormatter with default parameters, with and
0 commit comments