class_docstr: Metaclass for DataSets
  
  Supplies name and dataset information to Column attributes.
code: def __new__(mcls, name, bases, dict_):
      newtype = super(DataSetMeta, mcls).__new__(
          mcls, name, bases, dict_
      )
      # collect all of the column names that we inherit from our parents
      column_names = set().union(
          *(getattr(base, "_column_names", ()) for base in bases)
      )
      for maybe_colname, maybe_column in iteritems(dict_):
          if isinstance(maybe_column, Column):
              # add column names defined on our class
              bound_column_descr = maybe_column.bind(maybe_colname)
              setattr(newtype, maybe_colname, bound_column_descr)
              column_names.add(maybe_colname)
  
      newtype._column_names = frozenset(column_names)
      return newtype
  
imports: from functools import total_ordering
  from six import iteritems, with_metaclass
  from catalyst.pipeline.classifiers import Classifier, Latest
  from catalyst.pipeline.factors import Factor, Latest
  from catalyst.pipeline.filters import Filter, Latest
  from catalyst.pipeline.sentinels import NotSpecified
  from catalyst.pipeline.term import AssetExists, LoadableTerm, validate_dtype
  from catalyst.utils.input_validation import ensure_dtype
  from catalyst.utils.numpy_utils import NoDefaultMissingValue
  from catalyst.utils.preprocess import preprocess
label_desc: Use image node_id 1 for calling the DataSetMeta obj's underlying member method code with example usage: obj.__new__(mcls, name, bases, dict_) and returns: newtype