def getGDXoutputOptions(project_vars: dict) -> tuple:
    """Extract from project_variables.csv the formats on which the resulting GDX file will be converted. Options are CSV, PICKLE, and VAEX.

    Args:
        project_vars (dict): project variables collected from project_variables.csv.

    Raises:
        Exception: features values must be "yes" or "no"

    Returns:
        tuple: 4-element tuple containing

        - **csv_bool** (*bool*): boolean
        - **pickle_bool** (*bool*): boolean
        - **vaex_bool** (*bool*): boolean
        - **convert_cores** (*int*): number of cores used to convert the symbols from GDX file to output formats.

    """
    features = [
        "gdx_convert_parallel_threads",
        "gdx_convert_to_csv",
        "gdx_convert_to_pickle",
        "gdx_convert_to_vaex",
    ]
    selection = {}
    for feat in features:
        if feat == "gdx_convert_parallel_threads":
            selection[feat] = int(project_vars[feat])
        else:
            if project_vars[feat] == "yes":
                selection[feat] = True
            elif project_vars[feat] == "no":
                selection[feat] = False
            else:
                raise Exception(f'{feat} must be "yes" or "no"')
    convert_cores = selection["gdx_convert_parallel_threads"]
    csv_bool = selection["gdx_convert_to_csv"]
    pickle_bool = selection["gdx_convert_to_pickle"]
    vaex_bool = selection["gdx_convert_to_vaex"]
    return csv_bool, pickle_bool, vaex_bool, convert_cores