@@ -2058,6 +2058,7 @@ def view_limits(self, dmin, dmax):
2058
2058
return dmin , dmax
2059
2059
2060
2060
2061
+ @cbook .deprecated ("3.1" )
2061
2062
def decade_down (x , base = 10 ):
2062
2063
'floor x to the nearest lower decade'
2063
2064
if x == 0.0 :
@@ -2066,6 +2067,7 @@ def decade_down(x, base=10):
2066
2067
return base ** lx
2067
2068
2068
2069
2070
+ @cbook .deprecated ("3.1" )
2069
2071
def decade_up (x , base = 10 ):
2070
2072
'ceil x to the nearest higher decade'
2071
2073
if x == 0.0 :
@@ -2091,6 +2093,56 @@ def is_decade(x, base=10):
2091
2093
return is_close_to_int (lx )
2092
2094
2093
2095
2096
+ def _decade_less_equal (x , base ):
2097
+ """
2098
+ Return the largest integer power of *base* that's less or equal to *x*.
2099
+
2100
+ If *x* is negative, the exponent will be *greater*.
2101
+ """
2102
+ return (x if x == 0 else
2103
+ - _decade_greater_equal (- x , base ) if x < 0 else
2104
+ base ** np .floor (np .log (x ) / np .log (base )))
2105
+
2106
+
2107
+ def _decade_greater_equal (x , base ):
2108
+ """
2109
+ Return the smallest integer power of *base* that's greater or equal to *x*.
2110
+
2111
+ If *x* is negative, the exponent will be *smaller*.
2112
+ """
2113
+ return (x if x == 0 else
2114
+ - _decade_less_equal (- x , base ) if x < 0 else
2115
+ base ** np .ceil (np .log (x ) / np .log (base )))
2116
+
2117
+
2118
+ def _decade_less (x , base ):
2119
+ """
2120
+ Return the smallest integer power of *base* that's less than *x*.
2121
+
2122
+ If *x* is negative, the exponent will be *smaller*.
2123
+ """
2124
+ if x < 0 :
2125
+ return - _decade_greater (- x , base )
2126
+ less = _decade_less_equal (x , base )
2127
+ if less == x :
2128
+ less /= base
2129
+ return less
2130
+
2131
+
2132
+ def _decade_greater (x , base ):
2133
+ """
2134
+ Return the smallest integer power of *base* that's greater than *x*.
2135
+
2136
+ If *x* is negative, the exponent will be *smaller*.
2137
+ """
2138
+ if x < 0 :
2139
+ return - _decade_less (- x , base )
2140
+ greater = _decade_greater_equal (x , base )
2141
+ if greater == x :
2142
+ greater *= base
2143
+ return greater
2144
+
2145
+
2094
2146
def is_close_to_int (x ):
2095
2147
return abs (x - np .round (x )) < 1e-10
2096
2148
@@ -2272,10 +2324,8 @@ def view_limits(self, vmin, vmax):
2272
2324
vmin = b ** (vmax - self .numdecs )
2273
2325
2274
2326
if rcParams ['axes.autolimit_mode' ] == 'round_numbers' :
2275
- if not is_decade (vmin , self ._base ):
2276
- vmin = decade_down (vmin , self ._base )
2277
- if not is_decade (vmax , self ._base ):
2278
- vmax = decade_up (vmax , self ._base )
2327
+ vmin = _decade_less_equal (vmin , self ._base )
2328
+ vmax = _decade_greater_equal (vmax , self ._base )
2279
2329
2280
2330
return vmin , vmax
2281
2331
@@ -2297,8 +2347,8 @@ def nonsingular(self, vmin, vmax):
2297
2347
if vmin <= 0 :
2298
2348
vmin = minpos
2299
2349
if vmin == vmax :
2300
- vmin = decade_down (vmin , self ._base )
2301
- vmax = decade_up (vmax , self ._base )
2350
+ vmin = _decade_less (vmin , self ._base )
2351
+ vmax = _decade_greater (vmax , self ._base )
2302
2352
return vmin , vmax
2303
2353
2304
2354
@@ -2452,24 +2502,11 @@ def view_limits(self, vmin, vmax):
2452
2502
vmin , vmax = vmax , vmin
2453
2503
2454
2504
if rcParams ['axes.autolimit_mode' ] == 'round_numbers' :
2455
- if not is_decade (abs (vmin ), b ):
2456
- if vmin < 0 :
2457
- vmin = - decade_up (- vmin , b )
2458
- else :
2459
- vmin = decade_down (vmin , b )
2460
- if not is_decade (abs (vmax ), b ):
2461
- if vmax < 0 :
2462
- vmax = - decade_down (- vmax , b )
2463
- else :
2464
- vmax = decade_up (vmax , b )
2465
-
2505
+ vmin = _decade_less_equal (vmin , b )
2506
+ vmax = _decade_greater_equal (vmax , b )
2466
2507
if vmin == vmax :
2467
- if vmin < 0 :
2468
- vmin = - decade_up (- vmin , b )
2469
- vmax = - decade_down (- vmax , b )
2470
- else :
2471
- vmin = decade_down (vmin , b )
2472
- vmax = decade_up (vmax , b )
2508
+ vmin = _decade_less (vmin , b )
2509
+ vmax = _decade_greater (vmax , b )
2473
2510
2474
2511
result = mtransforms .nonsingular (vmin , vmax )
2475
2512
return result
0 commit comments