class_docstr: An object representing a range of shapes for a multiArray feature in a
  neural network. Valid shape ranges must have have only the Channel [C]
  range or the Channel, Height and Width [C, H, W] ranges populated. A "-1"
  value in an upper bound represents an unbounded range.
class_docstr_tok: ["An","object","representing","a","range","of","shapes","for","a","multiArray","feature","in","a","neural","network",".","Valid","shape","ranges","must","have","have","only","the","Channel","[","C","]","range","or","the","Channel",",","Height","and","Width","[","C",",","H",",","W","]","ranges","populated",".","A","``","-1","''","value","in","an","upper","bound","represents","an","unbounded","range","."]
code: def _create_shape_range(self, r):
      if not isinstance(r, tuple):
          raise Exception(
              "Range should be a ShapeRange or a tuple object"
          )
      elif len(r) != 2:
          raise Exception("Range tuple should be at least length 2")
      return ShapeRange(r[0], r[1])
  
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 2 for calling the NeuralNetworkMultiArrayShapeRange obj's underlying member method code with example usage: obj._create_shape_range(r) and returns: ShapeRange