diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 3f152d10abaf..8ba98ee8caa2 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -440,9 +440,7 @@ def julian2num(j): float or sequence of floats Matplotlib date(s) """ - if np.iterable(j): - j = np.asarray(j) - return j - JULIAN_OFFSET + return np.subtract(j, JULIAN_OFFSET) # Handles both scalar & nonscalar j. def num2julian(n): @@ -459,9 +457,7 @@ def num2julian(n): float or sequence of floats Julian date(s) """ - if np.iterable(n): - n = np.asarray(n) - return n + JULIAN_OFFSET + return np.add(n, JULIAN_OFFSET) # Handles both scalar & nonscalar j. def num2date(x, tz=None): diff --git a/lib/matplotlib/testing/jpl_units/EpochConverter.py b/lib/matplotlib/testing/jpl_units/EpochConverter.py index 40b7c856ad08..0cd9f4e96575 100644 --- a/lib/matplotlib/testing/jpl_units/EpochConverter.py +++ b/lib/matplotlib/testing/jpl_units/EpochConverter.py @@ -2,6 +2,7 @@ import numpy as np +from matplotlib import cbook import matplotlib.units as units import matplotlib.dates as date_ticker @@ -95,28 +96,14 @@ def convert(value, unit, axis): # Delay-load due to circular dependencies. import matplotlib.testing.jpl_units as U - isNotEpoch = True - isDuration = False - - if np.iterable(value) and not isinstance(value, str): - if len(value) == 0: - return [] - else: - return [EpochConverter.convert(x, unit, axis) for x in value] - - if isinstance(value, U.Epoch): - isNotEpoch = False - elif isinstance(value, U.Duration): - isDuration = True - - if (isNotEpoch and not isDuration and - units.ConversionInterface.is_numlike(value)): + if not cbook.is_scalar_or_string(value): + return [EpochConverter.convert(x, unit, axis) for x in value] + if (units.ConversionInterface.is_numlike(value) + and not isinstance(value, (U.Epoch, U.Duration))): return value - if unit is None: unit = EpochConverter.default_units(value, axis) - - if isDuration: + if isinstance(value, U.Duration): return EpochConverter.duration2float(value) else: return EpochConverter.epoch2float(value, unit) @@ -131,10 +118,7 @@ def default_units(value, axis): = RETURN VALUE - Returns the default units to use for value. """ - frame = None - if np.iterable(value) and not isinstance(value, str): - return EpochConverter.default_units(value[0], axis) + if cbook.is_scalar_or_string(value): + return value.frame() else: - frame = value.frame() - - return frame + return EpochConverter.default_units(value[0], axis) diff --git a/lib/matplotlib/testing/jpl_units/UnitDblConverter.py b/lib/matplotlib/testing/jpl_units/UnitDblConverter.py index 352c30b84413..a43a92a892b7 100644 --- a/lib/matplotlib/testing/jpl_units/UnitDblConverter.py +++ b/lib/matplotlib/testing/jpl_units/UnitDblConverter.py @@ -2,6 +2,7 @@ import numpy as np +from matplotlib import cbook import matplotlib.units as units import matplotlib.projections.polar as polar @@ -83,35 +84,21 @@ def convert(value, unit, axis): # Delay-load due to circular dependencies. import matplotlib.testing.jpl_units as U - isNotUnitDbl = True - - if np.iterable(value) and not isinstance(value, str): - if len(value) == 0: - return [] - else: - return [UnitDblConverter.convert(x, unit, axis) for x in value] - - # We need to check to see if the incoming value is actually a - # UnitDbl and set a flag. If we get an empty list, then just - # return an empty list. - if isinstance(value, U.UnitDbl): - isNotUnitDbl = False - + if not cbook.is_scalar_or_string(value): + return [UnitDblConverter.convert(x, unit, axis) for x in value] # If the incoming value behaves like a number, but is not a UnitDbl, # then just return it because we don't know how to convert it # (or it is already converted) - if isNotUnitDbl and units.ConversionInterface.is_numlike(value): + if (units.ConversionInterface.is_numlike(value) + and not isinstance(value, U.UnitDbl)): return value - # If no units were specified, then get the default units to use. if unit is None: unit = UnitDblConverter.default_units(value, axis) - # Convert the incoming UnitDbl value/values to float/floats if isinstance(axis.axes, polar.PolarAxes) and value.type() == "angle": # Guarantee that units are radians for polar plots. return value.convert("rad") - return value.convert(unit) @staticmethod @@ -125,10 +112,9 @@ def default_units(value, axis): - Returns the default units to use for value. Return the default unit for value, or None. """ - # Determine the default units based on the user preferences set for # default units when printing a UnitDbl. - if np.iterable(value) and not isinstance(value, str): - return UnitDblConverter.default_units(value[0], axis) - else: + if cbook.is_scalar_or_string(value): return UnitDblConverter.defaults[value.type()] + else: + return UnitDblConverter.default_units(value[0], axis)