code: def range(cls, dataset, dimension):
      dimension = dataset.get_dimension(dimension, strict=True)
      if cls.dtype(dataset, dimension).kind in "SUO":
          return None, None
      if dimension.nodata is not None:
          return Interface.range(dataset, dimension)
      column = dataset.data[dimension.name]
      return tuple(
          dataset.data.aggregate([column.min(), column.max()])
          .execute()
          .values[0, :]
      )
  
imports: import sys
  from collections.abc import Iterable
  from functools import lru_cache
  import numpy
  from packaging.version import Version
  from ..None import util
  from ..element import Element
  from ..ndmapping import NdMapping, item_check, sorted_context
  from .None import pandas
  from .interface import Interface
  from .util import cached
label_desc: Use image node_id 10 for calling the IbisInterface obj's underlying member method code with example usage: obj.range(cls, dataset, dimension) and returns: tuple, None,  None, Interface