<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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