code: def new_dataset(expr, missing_values, domain):
      
      missing_values = dict(missing_values)
      class_dict = {'ndim': 2 if SID_FIELD_NAME in expr.fields else 1}
      for name, type_ in expr.dshape.measure.fields:
          # Don't generate a column for sid or timestamp, since they're
          # implicitly the labels if the arrays that will be passed to pipeline
          # Terms.
          if name in (SID_FIELD_NAME, TS_FIELD_NAME):
              continue
          type_ = datashape_type_to_numpy(type_)
          if can_represent_dtype(type_):
              col = Column(
                  type_,
                  missing_values.get(name, NotSpecified),
              )
          else:
              col = NonPipelineField(name, type_)
          class_dict[name] = col
  
      if 'domain' in class_dict:
          raise ValueError("Got a column named 'domain' in new_dataset(). "
                           "'domain' is reserved.")
      class_dict['domain'] = domain
  
      name = expr._name
      if name is None:
          name = next(_new_names)
  
      # unicode is a name error in py3 but the branch is only hit
      # when we are in python 2.
      if PY2 and isinstance(name, unicode):  # pragma: no cover # noqa
          name = name.encode('utf-8')
  
      return type(name, (DataSet,), class_dict)
docs: Creates or returns a dataset from a blaze expression.
  
      Parameters
      ----------
      expr : Expr
          The blaze expression representing the values.
      missing_values : frozenset((name, value) pairs
          Association pairs column name and missing_value for that column.
  
          This needs to be a frozenset rather than a dict or tuple of tuples
          because we want a collection that's unordered but still hashable.
      domain : zipline.pipeline.domain.Domain
          Domain of the dataset to be created.
  
      Returns
      -------
      ds : type
          A new dataset type.
  
      Notes
      -----
      This function is memoized. repeated calls with the same inputs will return
      the same type.