code: def __init__(self, lowerBound, upperBound):
      unBounded = False
  
      if upperBound == -1:
          unBounded = True
  
      if not unBounded and lowerBound > upperBound:
          raise Exception(
              "lowerBound > upperBound for range ({},{})".format(
                  lowerBound, upperBound
              )
          )
  
      if not unBounded and upperBound < 1:
          raise Exception("Invalid upperBound: {} ".format(upperBound))
  
      if lowerBound == 0:
          lowerBound = 1
  
      if lowerBound < 1:
          raise Exception("Invalid lowerBound: {}".format(lowerBound))
  
      self._lowerBound = lowerBound
      self._upperBound = upperBound
      self._unBounded = unBounded
  
imports: from ..utils import _get_feature, _get_nn_layers, _get_input_names
  from ...None import _MINIMUM_FLEXIBLE_SHAPES_SPEC_VERSION
  from ...None import _MINIMUM_NDARRAY_SPEC_VERSION
label_desc: Use image node_id 1 to create a new ShapeRange object from inherited base classes: object with example: obj = ShapeRange(lowerBound, upperBound)