class_docstr: Class responsible for handling input data and extracting metadata into the
  appropriate form
class_docstr_tok: ["Class","responsible","for","handling","input","data","and","extracting","metadata","into","the","appropriate","form"]
code: def wrap_output(self, obj, how="columns", names=None):
      if how == "columns":
          return self.attach_columns(obj)
      elif how == "rows":
          return self.attach_rows(obj)
      elif how == "cov":
          return self.attach_cov(obj)
      elif how == "dates":
          return self.attach_dates(obj)
      elif how == "columns_eq":
          return self.attach_columns_eq(obj)
      elif how == "cov_eq":
          return self.attach_cov_eq(obj)
      elif how == "generic_columns":
          return self.attach_generic_columns(obj, names)
      elif how == "generic_columns_2d":
          return self.attach_generic_columns_2d(obj, names)
      elif how == "ynames":
          return self.attach_ynames(obj)
      elif how == "multivariate_confint":
          return self.attach_mv_confint(obj)
      else:
          return obj
  
imports: from __future__ import annotations
  from statsmodels.compat.python import lmap
  from functools import reduce
  import numpy
  from pandas import DataFrame, Series, isnull, MultiIndex
  import statsmodels.tools.data
  from statsmodels.tools.decorators import cache_readonly, cache_writable
  from statsmodels.tools.sm_exceptions import MissingDataError
label_desc: Use image node_id 21 for calling the ModelData obj's underlying member method code with example usage: obj.wrap_output(obj, how, names) and returns: self, self, self, self, self, self, self, self, self, self, obj