def generate_ppi_network(
        ppi_graph_path: str,
        dge_list: List[Gene],
        max_adj_p: float,
        max_log2_fold_change: float,
        min_log2_fold_change: float,
        ppi_edge_min_confidence: Optional[float] = None,
        current_disease_ids_path: Optional[str] = None,
        disease_associations_path: Optional[str] = None,
) -> Network:
    """Generate the protein-protein interaction network.

    :return Network: Protein-protein interaction network with information on differential expression.
    """
    # Compilation of a protein-protein interaction (PPI) graph (HIPPIE)
    protein_interactions = parsers.parse_ppi_graph(ppi_graph_path, ppi_edge_min_confidence)
    protein_interactions = protein_interactions.simplify()

    if disease_associations_path is not None and current_disease_ids_path is not None:
        current_disease_ids = parsers.parse_disease_ids(current_disease_ids_path)
        disease_associations = parsers.parse_disease_associations(disease_associations_path,
                                                                  current_disease_ids)
    else:
        disease_associations = None

    # Build an undirected weighted graph with the remaining interactions based on Entrez gene IDs
    network = Network(
        protein_interactions,
        max_adj_p=max_adj_p,
        max_l2fc=max_log2_fold_change,
        min_l2fc=min_log2_fold_change,
    )
    network.set_up_network(dge_list, disease_associations=disease_associations)

    return network
Generate the protein-protein interaction network.

    :return Network: Protein-protein interaction network with information on differential expression.