@@ -41,11 +41,20 @@ class ColorbarUniforms(UniformBase):
4141def _clean_autoscale_range (minval , maxval ):
4242 """Clean up autoscale min/max values for display.
4343
44+ - Handles invalid/uninitialized ranges (NaN, inf, inverted sentinels).
4445 - Rounds values that are negligibly small relative to the range to zero
4546 (e.g. 1e-13 to 1 becomes 0 to 1).
4647 - Handles constant functions (min == max) by providing a sensible range
4748 to avoid numerical flickering.
4849 """
50+ import math
51+
52+ # Handle NaN, inf, or inverted ranges (e.g. from uninitialized sentinels)
53+ if (math .isnan (minval ) or math .isnan (maxval )
54+ or math .isinf (minval ) or math .isinf (maxval )
55+ or minval > maxval ):
56+ return 0.0 , 1.0
57+
4958 range_size = maxval - minval
5059 abs_max_val = max (abs (minval ), abs (maxval ))
5160
@@ -145,7 +154,16 @@ def widen_range(self, minval, maxval, timestamp=None):
145154
146155 On the first call with a new timestamp, resets to inverted range so
147156 each frame starts fresh. Subsequent calls in the same frame widen.
157+ Ignores invalid values (NaN, inf, or sentinel 1e99/-1e99 pairs).
148158 """
159+ import math
160+
161+ # Skip invalid values that come from uninitialized/failed data
162+ if (math .isnan (minval ) or math .isnan (maxval )
163+ or math .isinf (minval ) or math .isinf (maxval )
164+ or minval > maxval ):
165+ return
166+
149167 ts = getattr (self , '_autoscale_ts' , None )
150168 if timestamp is not None and timestamp != ts :
151169 self ._autoscale_ts = timestamp
0 commit comments