docs: def parse(path, meta_data_only=False, compensate=False, channel_naming='$PnS',
            reformat_meta=False, data_set=0, dtype='float32', encoding="utf-8"):
      """Parse an fcs file at the location specified by the path.
  
      Parameters
      ----------
      path: str
          Path of .fcs file
      meta_data_only: bool
          If True, the parse_fcs only returns the meta_data (the TEXT segment of the FCS file)
      output_format: 'DataFrame' | 'ndarray'
          If set to 'DataFrame' the returned
      channel_naming: '$PnS' | '$PnN'
          Determines which meta data field is used for naming the channels.
          The default should be $PnS (even though it is not guaranteed to be unique)
  
          $PnN stands for the short name (guaranteed to be unique).
              Will look like 'FL1-H'
          $PnS stands for the actual name (not guaranteed to be unique).
              Will look like 'FSC-H' (Forward scatter)
  
          The chosen field will be used to population self.channels
  
          Note: These names are not flipped in the implementation.
          It looks like they were swapped for some reason in the official FCS specification.
      reformat_meta: bool
          If true, the meta data is reformatted with the channel information organized
          into a DataFrame and moved into the '_channels_' key
      data_set: int
          Index of retrieved data set in the fcs file.
          This value specifies the data set being retrieved from an fcs file with multiple data sets.
      dtype: str | None
          If provided, will force convert all data into this dtype.
          This is set by default to auto-convert to float32 to deal with cases in which the original
          data has been stored using a smaller data type (e.g., unit8). This modifies the original
          data, but should make follow up analysis safer in basically all cases.
      encoding: str
          Provide encoding type of the text section.
  
  
      Returns
      -------
      if meta_data_only is True:
          meta_data: dict
              Contains a dictionary with the meta data information
      Otherwise:
          a 2-tuple with
              the first element the meta_data (dictionary)
              the second element the data (in either DataFrame or numpy format)
  
      Examples
      --------
      fname = '../tests/data/EY_2013-05-03_EID_214_PID_1120_Piperacillin_Well_B7.001.fcs'
      meta = parse_fcs(fname, meta_data_only=True)
      meta, data_pandas = parse_fcs(fname, meta_data_only=False)
      """
      if compensate:
          raise ParserFeatureNotImplementedError(u'Compensation has not been implemented yet.')
  
      read_data = not meta_data_only
  
      fcs_parser = FCSParser(path, read_data=read_data, channel_naming=channel_naming,
                             data_set=data_set, encoding=encoding)
  
      if reformat_meta:
          fcs_parser.reformat_meta()
  
      meta = fcs_parser.annotation
  
      if meta_data_only:
          return meta
      else:  # Then include both meta and dataframe.
          df = fcs_parser.dataframe
          df = df.astype(dtype) if dtype else df
          return meta, df