def make_smi_and_gyspum_params(gen_smiles_file, folder_path,
                               gypsum_output_folder_path, max_variance,
                               gypsum_thoroughness, min_ph, max_ph,
                               pka_precision):
    """
    Make an individual .smi file and parameter dictionary to submit to Gypsum
    for every ligand in the generation_*_to_convert.smi file.

    The .smi file for each ligand will be noted within the dictionary as
    "source".

    Inputs:
    :param str gen_smiles_file: the file name of the .smi file to be converted
        to 3D sdf's
    :param srt folder_path: the directory path which will contain the inputs
        and outputs from Gypsum
    :param str gypsum_output_folder_path: a path to the folder with all of the
        3D sdf's created by gypsum.
    :param int max_variance: User variable for how many conformers per ligand
        should be made by Gypsum
    :param int gypsum_thoroughness: User variable for How widely Gypsum-DL
        will search for low-energy conformers. Larger values increase run times
        but can produce better results
    :param float min_ph: User variable for Minimum pH to consider by
        Dimorphite-DL
    :param float max_ph: User variable for Maximum pH to consider by
        Dimorphite-DL
    :param float pka_precision: User variable for Size of pH substructure
        ranges by Dimorphite-DL

    Returns:
    :returns: list list_of_gypsum_params: a list of dictionaries. Each
        dictionary contains the Gypsum-DL parameters to convert a single
        ligand from SMILES to 3D .sdf
    """
    list_of_gypsum_params = []

    with open(gen_smiles_file) as smiles_file:
        for line in smiles_file:
            if line == "\n":
                continue
            line = line.replace("\n", "")
            line = line.replace("    ", "\t")
            parts = line.split("\t")  # split line into parts separated by 4-spaces
            if len(parts) == 0 or len(parts) == 1:
                print(parts)
            smile = parts[0]
            # ligand_name example
            # (Gen_30_Cross_639427+Gen_31_Cross_717928)Gen_34_Cross_709666 But
            # bash doesn't like + or () for file names so we will abridge
            # lig_name_short name for above example becomes
            # Gen_34_Cross_709666 if ligand is from the source files we wont
            # split the name

            ligand_name = parts[1]
            if len(ligand_name.split(")")) == 2:
                lig_name_short = ligand_name.split(")")[1]
            elif len(ligand_name.split(")")) == 1:
                lig_name_short = ligand_name
            else:
                printout = "Ligand name failed to abridge. Smiles may be \
                            named in improper format please separate with _ \
                            or camelcase. Our formatting is: \
                            (Gen_2_Cross_631+Gen_3_Cross_744)Gen_4_Cross_702 \
                            which reads as Gen_34_Cross_702 (aka ligand 702) \
                            was produced by crossover using ligands: \
                            Gen_2_Cross_631 and Gen_3_Cross_744. \
                            This will abridge to Gen_4_Cross_702 for saving \
                            files.\nThe failed ligand name was \
                            {}".format(ligand_name)

                print(printout)
                raise Exception(printout)

            smi_line = "{}\t{}".format(smile, lig_name_short)

            smi_path = "{}{}.smi".format(folder_path, lig_name_short)

            # make .smi file
            with open(smi_path, "w") as smi_file:
                smi_file.write(smi_line)

            # Make .json file
            gypsum_params = {
                "source": smi_path,
                "output_folder": gypsum_output_folder_path,
                "num_processors": 1,
                "job_manager": "serial",
                "use_durrant_lab_filters": True,
                "max_variants_per_compound": max_variance,
                "thoroughness": gypsum_thoroughness,
                "separate_output_files": True,
                "add_pdb_output": False,
                "add_html_output": False,
                "min_ph": min_ph,
                "max_ph": max_ph,
                "pka_precision": pka_precision,
                "skip_optimize_geometry": False,
                "skip_alternate_ring_conformations": False,
                "skip_adding_hydrogen": False,
                "skip_making_tautomers": False,
                "skip_enumerate_chiral_mol": False,
                "skip_enumerate_double_bonds": False,
                "let_tautomers_change_chirality": False,
                "2d_output_only": False,
                "cache_prerun": False,
                "test": False,
            }

            list_of_gypsum_params.append(gypsum_params)

    return list_of_gypsum_params