code: def __repr__(self):
      if self.type == "int" and self.num_values is not None:
          return "TensorSpec(type={type}, shape={shape}, num_values={num_values})".format(
              type=self.type,
              shape=self.shape,
              num_values=self.num_values,
          )
      elif self.type != "bool" and self.min_value is not None:
          if self.max_value is None:
              return "TensorSpec(type={type}, shape={shape}, min_value={min_value})".format(
                  type=self.type,
                  shape=self.shape,
                  min_value=self.min_value,
              )
          else:
              return (
                  "TensorSpec(type={type}, shape={shape}, min_value={min_value}, max_value="
                  "{max_value})"
              ).format(
                  type=self.type,
                  shape=self.shape,
                  min_value=self.min_value,
                  max_value=self.max_value,
              )
      elif self.type != "bool" and self.max_value is not None:
          return "TensorSpec(type={type}, shape={shape}, max_value={max_value})".format(
              type=self.type, shape=self.shape, max_value=self.max_value
          )
      else:
          return "TensorSpec(type={type}, shape={shape})".format(
              type=self.type, shape=self.shape
          )
  
imports: from functools import total_ordering
  import numpy
  import tensorflow
  from tensorforce import TensorforceError, util
  from tensorforce.core.utils import tf_util
label_desc: Use image node_id 18 for calling the TensorSpec obj's underlying member method code with example usage: obj.__repr__() and returns: str, str, str, str, str