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