def open(table_file: str, table_map_file: str=None) -> pd.DataFrame:
    '\n    Opens a dynamo table file, returning a DynamoTable object\n    :param table_file:\n    :return: dataframe\n    '
    df = pd.read_csv(table_file, header=None, delim_whitespace=True)
    n_cols = df.shape[1]
    if (n_cols <= len(COLUMN_NAMES)):
        column_names = COLUMN_NAMES[0:n_cols]
        df.columns = column_names
    else:
        extra_columns_needed = (n_cols - len(COLUMN_NAMES))
        column_names = (list(COLUMN_NAMES) + ['' for x in range(extra_columns_needed)])
    df = df.apply(pd.to_numeric, errors='ignore')
    if ((table_map_file is not None) and Path(table_map_file).exists()):
        table_map_dict = table_map_read(table_map_file)
        tomo_file = [table_map_dict[tomo_idx] for tomo_idx in df['tomo']]
        df['tomo_file'] = tomo_file
    return df
Opens a dynamo table file, returning a DynamoTable object
:param table_file:
:return: dataframe
def open(table_file: str, table_map_file: str=None) -> pd.DataFrame:
    '\n    Opens a dynamo table file, returning a DynamoTable object\n    :param table_file:\n    :return: dataframe\n    '
    df = pd.read_csv(table_file, header=None, delim_whitespace=True)
    n_cols = df.shape[1]
    if (n_cols <= len(COLUMN_NAMES)):
        column_names = COLUMN_NAMES[0:n_cols]
        df.columns = column_names
    else:
        extra_columns_needed = (n_cols - len(COLUMN_NAMES))
        column_names = (list(COLUMN_NAMES) + [ for x in range(extra_columns_needed)])
    df = df.apply(pd.to_numeric, errors='ignore')
    if ((table_map_file is not None) and Path(table_map_file).exists()):
        table_map_dict = table_map_read(table_map_file)
        tomo_file = [table_map_dict[tomo_idx] for tomo_idx in df['tomo']]
        df['tomo_file'] = tomo_file
    return df