docs: def coerce(value):
          """
          Takes a number (float, int) or a two-valued integer and returns the
          [low, high] in the standard interval form
          """
          is_number = lambda x: isinstance(x, (int, float, complex)) #is x an instance of those things
          if isinstance(value, IntervalCell) or issubclass(value.__class__,IntervalCell): 
              #if intervalcell or subclass, return the subclass
              return value
          elif is_number(value):
              return IntervalCell(value, value)
          elif hasattr(value, 'low') and hasattr(value, 'high'):
              # duck type
              assert value.low <= value.high, "Invalid low/high in %s" % str(value)
              return value
          elif isinstance(value, (list, tuple)) and all(map(is_number, value)):
              if len(value) == 1:
                  low, high = value[0], value[0]
              elif len(value) == 2:
                  low, high = value
              else:
                  low, high = min(value), max(value)
              if high < low:
                  raise Contradiction("Low must be lte High") 
              return IntervalCell(low, high)
          else:
              raise Exception("Don't know how to coerce %s" % (type(value)))