code: def round_limits(minimum, maximum):
      """
      Rounds a pair of minimum and maximum values to form reasonable "round"
      values suitable for use as axis minimum and maximum values.
  
      Values are rounded "out": up for maximum and down for minimum, and "off":
      to one higher than the first significant digit shared by both.
  
      See unit tests for examples.
      """
      min_bits = minimum.normalize().as_tuple()
      max_bits = maximum.normalize().as_tuple()
  
      max_digits = max(
          len(min_bits.digits) + min_bits.exponent,
          len(max_bits.digits) + max_bits.exponent,
      )
  
      # Whole number rounding
      if max_digits > 0:
          multiplier = Decimal("10") ** (max_digits - 1)
  
          min_fraction = (minimum / multiplier).to_integral_value(
              rounding=ROUND_FLOOR
          )
          max_fraction = (maximum / multiplier).to_integral_value(
              rounding=ROUND_CEILING
          )
  
          return (min_fraction * multiplier, max_fraction * multiplier)
  
      max_exponent = max(min_bits.exponent, max_bits.exponent)
  
      # Fractional rounding
      q = Decimal("10") ** (max_exponent + 1)
  
      return (
          minimum.quantize(q, rounding=ROUND_FLOOR).normalize(),
          maximum.quantize(q, rounding=ROUND_CEILING).normalize(),
      )
  
imports: import math
  import string
  from collections import OrderedDict
  from collections.abc import Sequence
  from decimal import ROUND_CEILING, ROUND_FLOOR, Decimal, getcontext
  from functools import wraps
  from slugify import slugify
  from agate import config
  from agate.warns import warn_duplicate_column, warn_unnamed_column
label_desc: Use image node_id 5 for calling a global function with example usage: round_limits(minimum, maximum) and returns: minimum,  maximum, unknown,  unknown