def _get_genome_id_to_lineage(self, list_of_genome_id, genome_id_to_taxid, strain_id_to_genome_id, genome_id_to_strain_id):
    '\n        Returnes the lineage for each genome id, assigning new strain id if not available\n\n        @param list_of_genome_id: List of identifier of genomes\n        @type list_of_genome_id: list[str|unicode]\n        @param genome_id_to_taxid: Assigned taxid for each genome id\n        @type genome_id_to_taxid: dict[str|unicode, str|unicode]\n        @param strain_id_to_genome_id: Mapping from strain id to genome id\n        @type strain_id_to_genome_id: dict[str|unicode, str|unicode]\n        @param genome_id_to_strain_id: Mapping from genome id to strain id\n        @type genome_id_to_strain_id: dict[str|unicode, str|unicode]\n\n        @return: lineage for each genome id using genome id as key\n        @rtype: dict[str|unicode, list[None|str|unicode]]\n        '
    strains_by_taxid = {}
    genome_id_to_lineage = {}
    for genome_id in list_of_genome_id:
        tax_id = genome_id_to_taxid[genome_id]
        if (tax_id == ''):
            raise KeyError("genome_ID '{}' has no taxid!".format(genome_id))
        tax_id = self._taxonomy.get_updated_taxid(tax_id)
        genome_id_to_lineage[genome_id] = self._taxonomy.get_lineage_of_legal_ranks(tax_id, ranks=self._ranks, default_value=None)
        if (genome_id_to_lineage[genome_id][(- 1)] is not None):
            continue
        if (tax_id not in strains_by_taxid):
            strains_by_taxid[tax_id] = 0
        strains_by_taxid[tax_id] += 1
        if ((genome_id in genome_id_to_strain_id) and genome_id_to_strain_id[genome_id]):
            strain_id = genome_id_to_strain_id[genome_id]
        else:
            strain_id = '{}.{}'.format(tax_id, strains_by_taxid[tax_id])
            while (strain_id in genome_id_to_strain_id.values()):
                strains_by_taxid[tax_id] += 1
                strain_id = '{}.{}'.format(tax_id, strains_by_taxid[tax_id])
            genome_id_to_strain_id[genome_id] = strain_id
        genome_id_to_lineage[genome_id][(- 1)] = strain_id
        strain_id_to_genome_id[strain_id] = genome_id
    return genome_id_to_lineage
Returnes the lineage for each genome id, assigning new strain id if not available

@param list_of_genome_id: List of identifier of genomes
@type list_of_genome_id: list[str|unicode]
@param genome_id_to_taxid: Assigned taxid for each genome id
@type genome_id_to_taxid: dict[str|unicode, str|unicode]
@param strain_id_to_genome_id: Mapping from strain id to genome id
@type strain_id_to_genome_id: dict[str|unicode, str|unicode]
@param genome_id_to_strain_id: Mapping from genome id to strain id
@type genome_id_to_strain_id: dict[str|unicode, str|unicode]

@return: lineage for each genome id using genome id as key
@rtype: dict[str|unicode, list[None|str|unicode]]
def _get_genome_id_to_lineage(self, list_of_genome_id, genome_id_to_taxid, strain_id_to_genome_id, genome_id_to_strain_id):
    '\n        Returnes the lineage for each genome id, assigning new strain id if not available\n\n        @param list_of_genome_id: List of identifier of genomes\n        @type list_of_genome_id: list[str|unicode]\n        @param genome_id_to_taxid: Assigned taxid for each genome id\n        @type genome_id_to_taxid: dict[str|unicode, str|unicode]\n        @param strain_id_to_genome_id: Mapping from strain id to genome id\n        @type strain_id_to_genome_id: dict[str|unicode, str|unicode]\n        @param genome_id_to_strain_id: Mapping from genome id to strain id\n        @type genome_id_to_strain_id: dict[str|unicode, str|unicode]\n\n        @return: lineage for each genome id using genome id as key\n        @rtype: dict[str|unicode, list[None|str|unicode]]\n        '
    strains_by_taxid = {}
    genome_id_to_lineage = {}
    for genome_id in list_of_genome_id:
        tax_id = genome_id_to_taxid[genome_id]
        if (tax_id == ):
            raise KeyError("genome_ID '{}' has no taxid!".format(genome_id))
        tax_id = self._taxonomy.get_updated_taxid(tax_id)
        genome_id_to_lineage[genome_id] = self._taxonomy.get_lineage_of_legal_ranks(tax_id, ranks=self._ranks, default_value=None)
        if (genome_id_to_lineage[genome_id][(- 1)] is not None):
            continue
        if (tax_id not in strains_by_taxid):
            strains_by_taxid[tax_id] = 0
        strains_by_taxid[tax_id] += 1
        if ((genome_id in genome_id_to_strain_id) and genome_id_to_strain_id[genome_id]):
            strain_id = genome_id_to_strain_id[genome_id]
        else:
            strain_id = '{}.{}'.format(tax_id, strains_by_taxid[tax_id])
            while (strain_id in genome_id_to_strain_id.values()):
                strains_by_taxid[tax_id] += 1
                strain_id = '{}.{}'.format(tax_id, strains_by_taxid[tax_id])
            genome_id_to_strain_id[genome_id] = strain_id
        genome_id_to_lineage[genome_id][(- 1)] = strain_id
        strain_id_to_genome_id[strain_id] = genome_id
    return genome_id_to_lineage