diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..afb37a7 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 6d926d0751bafd1a7e10e49a516e7997 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.html b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.html new file mode 100644 index 0000000..b71c47f --- /dev/null +++ b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.html @@ -0,0 +1,165 @@ + + + + + + + neko._visual.visualize_network.NetworkVisualizer.render — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko._visual.visualize_network.NetworkVisualizer.render

+
+
+NetworkVisualizer.render(output_file='network', view=False, highlight_nodes=None, highlight_color='lightyellow')
+

Render the graph.

+
+
Args:

output_file (str): The name of the output file. +view (bool): If True, display the graph. +highlight_nodes (list): List of nodes to highlight. +highlight_color (str): Color to use for highlighting nodes.

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.html b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.html new file mode 100644 index 0000000..54140ed --- /dev/null +++ b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.html @@ -0,0 +1,162 @@ + + + + + + + neko._visual.visualize_network.NetworkVisualizer.tissue_mapping — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko._visual.visualize_network.NetworkVisualizer.tissue_mapping

+
+
+NetworkVisualizer.tissue_mapping(tissue_df)
+

Color the nodes based on their expression in the tissue of interest (based on data from The Human Protein Atlas).

+
+
Args:

tissue_df (DataFrame): DataFrame containing results indicating whether each gene symbol has tissue annotations containing the selected tissue.

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.html b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.html new file mode 100644 index 0000000..50050b3 --- /dev/null +++ b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.html @@ -0,0 +1,157 @@ + + + + + + + neko._visual.visualize_network.NetworkVisualizer.vis_comparison — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko._visual.visualize_network.NetworkVisualizer.vis_comparison

+
+
+NetworkVisualizer.vis_comparison(int_comparison, node_comparison, graph_layout, directed)
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.html b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.html new file mode 100644 index 0000000..55926ce --- /dev/null +++ b/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.html @@ -0,0 +1,157 @@ + + + + + + + neko._visual.visualize_network.NetworkVisualizer.yfiles_visual — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko._visual.visualize_network.NetworkVisualizer.yfiles_visual

+
+
+NetworkVisualizer.yfiles_visual(graph_layout, directed)
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.add_edge.html b/_autosummary/neko.core.network.Network.add_edge.html new file mode 100644 index 0000000..cd3c99b --- /dev/null +++ b/_autosummary/neko.core.network.Network.add_edge.html @@ -0,0 +1,170 @@ + + + + + + + neko.core.network.Network.add_edge — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.add_edge

+
+
+Network.add_edge(edge: DataFrame) None
+

This method adds an interaction to the list of interactions while converting it to the NeKo-network format. +It checks if the edge represents inhibition or stimulation and sets the effect accordingly. It also checks if the +nodes involved in the interaction are already present in the network, if not, it adds them.

+
+
Args:
    +
  • edge: A pandas DataFrame representing the interaction. The DataFrame should contain columns for

  • +
+

‘source’, ‘target’, ‘type’, and ‘references’. The ‘source’ and ‘target’ columns represent the nodes involved +in the interaction. The ‘type’ column represents the type of interaction. The ‘references’ column contains +the references for the interaction.

+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.add_node.html b/_autosummary/neko.core.network.Network.add_node.html new file mode 100644 index 0000000..b4c69ef --- /dev/null +++ b/_autosummary/neko.core.network.Network.add_node.html @@ -0,0 +1,172 @@ + + + + + + + neko.core.network.Network.add_node — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.add_node

+
+
+Network.add_node(node: str, from_sif: bool = False) None
+

Adds a node to the network. The node is added to the nodes DataFrame of the network. The function checks the +syntax for the genesymbol to ensure it is correct. If the node is a complex, it is added with the +‘Genesymbol’ as the complex string and ‘Uniprot’ as the node. Otherwise, it is added with the ‘Genesymbol’ as +the genesymbol and ‘Uniprot’ as the uniprot. The ‘Type’ is set as ‘NaN’ for all new nodes.

+
+
Args:
    +
  • +
    node: A string representing the node to be added. The node can be represented by either its

    Genesymbol or Uniprot identifier.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None.

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.complete_connection.html b/_autosummary/neko.core.network.Network.complete_connection.html new file mode 100644 index 0000000..15589a3 --- /dev/null +++ b/_autosummary/neko.core.network.Network.complete_connection.html @@ -0,0 +1,184 @@ + + + + + + + neko.core.network.Network.complete_connection — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.complete_connection

+
+
+Network.complete_connection(maxlen: int = 2, algorithm: Literal['bfs', 'dfs'] = 'dfs', minimal: bool = True, only_signed: bool = False, consensus: bool = False, connect_with_bias: bool = False) None
+

This function attempts to connect all nodes of a network object using one of the methods presented in the +Connection object. This is a core characteristic of this package and the user should have the possibility to +choose different methods to enrich its Network object.

+
+
Args:
    +
  • maxlen: The maximum length of the paths to be searched for. Default is 2.

  • +
  • +
    algorithm: The search algorithm to be used. It can be ‘bfs’ (Breadth-First Search) or ‘dfs’

    (Depth-First Search).

    +
    +
    +
  • +
  • +
    minimal: A boolean flag indicating whether to reset the object connect_network, updating the possible list

    of paths. Default is True.

    +
    +
    +
  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
  • +
    connect_with_bias: A boolean flag indicating whether to connect nodes when first

    introduced. Default is True.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.connect_component.html b/_autosummary/neko.core.network.Network.connect_component.html new file mode 100644 index 0000000..ce07a69 --- /dev/null +++ b/_autosummary/neko.core.network.Network.connect_component.html @@ -0,0 +1,172 @@ + + + + + + + neko.core.network.Network.connect_component — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.connect_component

+
+
+Network.connect_component(comp_A: str | list[str], comp_B: str | list[str], maxlen: int = 2, mode: Literal['OUT', 'IN', 'ALL'] = 'OUT', only_signed: bool = False, consensus: bool = False) None
+

This function attempts to connect subcomponents of a network object using one of the methods presented in the +Connection object. This is a core characteristic of this package and the user should have the possibility to +choose different methods to enrich its Network object.

+
+
Args:
    +
  • comp_A: A string or list of strings representing the first component to connect.

  • +
  • comp_B: A string or list of strings representing the second component to connect.

  • +
  • maxlen: The maximum length of the paths to be searched for. Default is 2.

  • +
  • mode: The search mode, which can be ‘OUT’, ‘IN’, or ‘ALL’. Default is ‘OUT’.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.html b/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.html new file mode 100644 index 0000000..2a1262f --- /dev/null +++ b/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.html @@ -0,0 +1,176 @@ + + + + + + + neko.core.network.Network.connect_genes_to_phenotype — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.connect_genes_to_phenotype

+
+
+Network.connect_genes_to_phenotype(phenotype: str | None = None, id_accession: str | None = None, sub_genes: list[str] | None = None, maxlen: int = 2, only_signed: bool = False, compress: bool = False) None
+

This function connects genes to a phenotype based on the provided Args. It retrieves phenotype markers, +identifies unique Uniprot genes, and connects them to the network. It also has the option to compress the +network by substituting specified genes with the phenotype name.

+
+
Args:
    +
  • phenotype: The phenotype to connect to. If not provided, it will be retrieved using the id_accession.

  • +
  • id_accession: The accession id of the phenotype. If not provided, the phenotype parameter must be given.

  • +
  • +
    sub_genes: A list of genes to be considered for connection. If not provided, all nodes in the network are

    considered.

    +
    +
    +
  • +
  • maxlen: The maximum length of the paths to be searched for.

  • +
  • only_signed: A boolean flag to indicate whether to filter unsigned paths.

  • +
  • compress: A boolean flag to indicate whether to substitute the specified genes with the phenotype name.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.connect_nodes.html b/_autosummary/neko.core.network.Network.connect_nodes.html new file mode 100644 index 0000000..a54f451 --- /dev/null +++ b/_autosummary/neko.core.network.Network.connect_nodes.html @@ -0,0 +1,173 @@ + + + + + + + neko.core.network.Network.connect_nodes — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.connect_nodes

+
+
+Network.connect_nodes(only_signed: bool = False, consensus_only: bool = False) None
+

Basic node connections. It adds all the interactions found in the omnipath database. +Once an interaction is found it will be added to the list of edges. +The only_signed flag makes sure that just signed interaction will be added to the network, while “consensus_only” +makes sure that just signed interaction with consensus among references will be included.

+
+
Args:
    +
  • only_signed: A boolean flag indicating whether to only add signed interactions to the network.

  • +
  • +
    consensus_only: A boolean flag indicating whether to only add signed interactions with consensus among

    references to the network.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.connect_subgroup.html b/_autosummary/neko.core.network.Network.connect_subgroup.html new file mode 100644 index 0000000..6b9c6c0 --- /dev/null +++ b/_autosummary/neko.core.network.Network.connect_subgroup.html @@ -0,0 +1,183 @@ + + + + + + + neko.core.network.Network.connect_subgroup — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.connect_subgroup

+
+
+Network.connect_subgroup(group: str | DataFrame | list[str], maxlen: int = 1, only_signed: bool = False, consensus: bool = False) None
+

This function is used to connect all the nodes in a particular subgroup. It iterates over all pairs of nodes +in the subgroup and finds paths between them in the resources’ database. If a path is found, it is added to +the edge list of the network. The function also filters out unsigned paths if the only_signed flag is set +to True.

+
+
Args:
    +
  • +
    group: A list of nodes representing the subgroup to connect. Nodes can be represented as strings,

    pandas DataFrame, or list of strings.

    +
    +
    +
  • +
  • maxlen: The maximum length of the paths to be searched for in the resources’ database. Default is 1.

  • +
  • +
    only_signed: A boolean flag indicating whether to only add signed interactions to the network. Default is

    False.

    +
    +
    +
  • +
  • +
    consensus: A boolean flag indicating whether to only add signed interactions with consensus among

    references to the network. Default is False.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.html b/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.html new file mode 100644 index 0000000..49da051 --- /dev/null +++ b/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.html @@ -0,0 +1,169 @@ + + + + + + + neko.core.network.Network.connect_to_upstream_nodes — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.connect_to_upstream_nodes

+
+
+Network.connect_to_upstream_nodes(nodes_to_connect: List[str] | None = None, depth: int = 1, rank: int = 1, only_signed: bool = True, consensus: bool = False) None
+

This function connects the provided nodes to their upstream nodes in the network.

+
+
Args:
    +
  • nodes_to_connect: A list of nodes to connect. If not provided, all nodes in the network are considered.

  • +
  • depth: The depth of the search for upstream nodes.

  • +
  • rank: The rank of the search for upstream nodes.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is True.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.html b/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.html new file mode 100644 index 0000000..7b5a4db --- /dev/null +++ b/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.html @@ -0,0 +1,170 @@ + + + + + + + neko.core.network.Network.convert_edgelist_into_genesymbol — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.convert_edgelist_into_genesymbol

+
+
+Network.convert_edgelist_into_genesymbol() DataFrame
+

This function generates a new edges dataframe with the source and target identifiers translated (if possible) +in Genesymbol format.

+
+
Args:
    +
  • None

  • +
+
+
Returns:
    +
  • +
    A pandas DataFrame containing the edges with the source and target identifiers translated into Genesymbol

    format.

    +
    +
    +
  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.is_connected.html b/_autosummary/neko.core.network.Network.is_connected.html new file mode 100644 index 0000000..5b32775 --- /dev/null +++ b/_autosummary/neko.core.network.Network.is_connected.html @@ -0,0 +1,166 @@ + + + + + + + neko.core.network.Network.is_connected — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.is_connected

+
+
+Network.is_connected() bool
+

This function checks if the network is connected. It uses Depth-First Search (DFS) to traverse the network +and check if all nodes are visited. If all nodes are visited, the network is connected.

+
+
Args:
    +
  • None

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_autosummary/neko.core.network.Network.remove_node.html b/_autosummary/neko.core.network.Network.remove_node.html new file mode 100644 index 0000000..2b7ef61 --- /dev/null +++ b/_autosummary/neko.core.network.Network.remove_node.html @@ -0,0 +1,169 @@ + + + + + + + neko.core.network.Network.remove_node — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

neko.core.network.Network.remove_node

+
+
+Network.remove_node(node: str) None
+

Removes a node from the network. The node is removed from both the list of nodes and the list of edges.

+
+
Args:
    +
  • +
    node: A string representing the node to be removed. The node can be represented by either its

    Genesymbol or Uniprot identifier.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_images/notebooks_1_network_building_11_0.svg b/_images/notebooks_1_network_building_11_0.svg new file mode 100644 index 0000000..1d14531 --- /dev/null +++ b/_images/notebooks_1_network_building_11_0.svg @@ -0,0 +1,104 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +CDH2 + +CDH2 + + + +SRC->CDH2 + + + + + + +PTK2B + +PTK2B + + + +SRC->PTK2B + + + + + +CDH1 + +CDH1 + + + +CDH1->SRC + + + + + +PTK2B->PTK2 + + + + + +NOTCH1 + +NOTCH1 + + + +VIM + +VIM + + + +MAP4K4 + +MAP4K4 + + + +LATS1 + +LATS1 + + + +LATS2 + +LATS2 + + + diff --git a/_images/notebooks_1_network_building_15_0.svg b/_images/notebooks_1_network_building_15_0.svg new file mode 100644 index 0000000..541e05e --- /dev/null +++ b/_images/notebooks_1_network_building_15_0.svg @@ -0,0 +1,1340 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +CDH2 + +CDH2 + + + +SRC->CDH2 + + + + + + +PTK2B + +PTK2B + + + +SRC->PTK2B + + + + + +EGFR + +EGFR + + + +SRC->EGFR + + + + + +RHOA + +RHOA + + + +SRC->RHOA + + + + + +RPS6KA3 + +RPS6KA3 + + + +SRC->RPS6KA3 + + + + + +CTNNB1 + +CTNNB1 + + + +SRC->CTNNB1 + + + + + +FLT4 + +FLT4 + + + +SRC->FLT4 + + + + + +ITGB1 + +ITGB1 + + + +SRC->ITGB1 + + + + + +RAC1 + +RAC1 + + + +SRC->RAC1 + + + + + +PAK1 + +PAK1 + + + +SRC->PAK1 + + + + + +ABL1 + +ABL1 + + + +SRC->ABL1 + + + + + +PTK2->RAC1 + + + + + +CDH1 + +CDH1 + + + +CDH1->SRC + + + + + +CDH1->EGFR + + + + + +CDH1->RHOA + + + + + +CDH1->CTNNB1 + + + + + +CDH1->RAC1 + + + + + +RAP1A + +RAP1A + + + +CDH1->RAP1A + + + + + +VASP + +VASP + + + +CDH1->VASP + + + + + +CDH2->RHOA + + + + + +CDH2->CTNNB1 + + + + + +CDH2->RAC1 + + + + + +PTK2B->PTK2 + + + + + +PTK2B->EGFR + + + + + +TP53 + +TP53 + + + +PTK2B->TP53 + + + + + +LCK + +LCK + + + +PTK2B->LCK + + + + + +PTK2B->RAC1 + + + + + +FOXO3 + +FOXO3 + + + +PTK2B->FOXO3 + + + + + +NOTCH1 + +NOTCH1 + + + +NOTCH1->EGFR + + + + + +NOTCH1->TP53 + + + + + + +NOTCH1->FLT4 + + + + + +SOX2 + +SOX2 + + + +NOTCH1->SOX2 + + + + + +CDKN1A + +CDKN1A + + + +NOTCH1->CDKN1A + + + + + +IFNG + +IFNG + + + +NOTCH1->IFNG + + + + + +MYC + +MYC + + + +NOTCH1->MYC + + + + + +EGFR->PTK2 + + + + + +EGFR->RHOA + + + + + +EGFR->CTNNB1 + + + + + +MAP3K1 + +MAP3K1 + + + +EGFR->MAP3K1 + + + + + +EGFR->RAC1 + + + + + +DVL2 + +DVL2 + + + +DVL2->NOTCH1 + + + + + + +DVL2->CTNNB1 + + + + + + +DVL2->RAC1 + + + + + +RHOA->PTK2 + + + + + +RHOA->CDKN1A + + + + + + +RHOA->LCK + + + + + +RHOA->ITGB1 + + + + + +PRKCA + +PRKCA + + + +PRKCA->SRC + + + + + +PRKCA->PTK2 + + + + + +PRKCA->PTK2B + + + + + +PRKCA->EGFR + + + + + + +PRKCA->DVL2 + + + + + +PRKCA->RHOA + + + + + +PRKCA->TP53 + + + + + +PRKCA->CDKN1A + + + + + +PRKCA->ITGB1 + + + + + +PRKCA->RAC1 + + + + + +PRKCA->VASP + + + + + +PRKCA->ABL1 + + + + + +VIM + +VIM + + + +PRKCA->VIM + + + + + +TP53->PTK2 + + + + + + +TP53->EGFR + + + + + +LATS2 + +LATS2 + + + +TP53->LATS2 + + + + + +TP53->CDKN1A + + + + + +MAP4K4 + +MAP4K4 + + + +TP53->MAP4K4 + + + + + +TP53->RAC1 + + + + + + +YAP1 + +YAP1 + + + +LATS2->YAP1 + + + + + + +SNAI1 + +SNAI1 + + + +LATS2->SNAI1 + + + + + +CTNNB1->NOTCH1 + + + + + +CTNNB1->RHOA + + + + + +CTNNB1->SOX2 + + + + + +CTNNB1->MYC + + + + + +CTNNB1->VASP + + + + + +CTNNB1->FOXO3 + + + + + +FLT4->PTK2 + + + + + +FLT4->RPS6KA3 + + + + + + +SOX2->CDH2 + + + + + +CDK1 + +CDK1 + + + +CDKN1A->CDK1 + + + + + + +CDKN1A->RAC1 + + + + + +MAP4K4->MAP3K1 + + + + + +MAP3K7 + +MAP3K7 + + + +MAP4K4->MAP3K7 + + + + + +MAP3K3 + +MAP3K3 + + + +MAP4K4->MAP3K3 + + + + + +MAP3K1->MAP3K7 + + + + + +PPP1R12A + +PPP1R12A + + + +PLK1 + +PLK1 + + + +PPP1R12A->PLK1 + + + + + + +PLK1->DVL2 + + + + + +PLK1->TP53 + + + + + + +MDM2 + +MDM2 + + + +PLK1->MDM2 + + + + + +PLK1->MYC + + + + + +PRKACA + +PRKACA + + + +PLK1->PRKACA + + + + + +PLK1->VIM + + + + + +IFNG->CDKN1A + + + + + +IFNG->MAP3K1 + + + + + +MDM2->NOTCH1 + + + + + +MDM2->EGFR + + + + + + +MDM2->TP53 + + + + + +MDM2->CDKN1A + + + + + + +LCK->PTK2 + + + + + +LCK->NOTCH1 + + + + + +LCK->EGFR + + + + + +LCK->RHOA + + + + + +LCK->MYC + + + + + +LCK->ABL1 + + + + + +MYC->CDH1 + + + + + +MYC->PTK2B + + + + + + +MYC->CDKN1A + + + + + + +MYC->ITGB1 + + + + + + +MYC->SNAI1 + + + + + +ITGB1->PTK2 + + + + + +ITGB1->PTK2B + + + + + +ITGB1->EGFR + + + + + +ITGB1->RHOA + + + + + +ITGB1->RAC1 + + + + + +ITGB1->PRKACA + + + + + +ITGB1->FOXO3 + + + + + +CDK1->EGFR + + + + + + +CDK1->TP53 + + + + + +CDK1->CTNNB1 + + + + + +CDK1->PLK1 + + + + + +LATS1 + +LATS1 + + + +CDK1->LATS1 + + + + + +CDK1->ABL1 + + + + + +CDK1->VIM + + + + + +LATS1->YAP1 + + + + + +RAC1->CDH1 + + + + + + +RAC1->RHOA + + + + + +RAC1->TP53 + + + + + +RAC1->CTNNB1 + + + + + +RAC1->CDKN1A + + + + + +RAC1->MAP3K1 + + + + + +RAC1->MYC + + + + + +RAC1->ITGB1 + + + + + +RAC1->PAK1 + + + + + +MAP3K7->RAP1A + + + + + +RAP1A->CDH1 + + + + + +RAP1A->RHOA + + + + + + +RAP1A->CTNNB1 + + + + + +RAP1A->ITGB1 + + + + + +YAP1->CTNNB1 + + + + + +PRKACA->SRC + + + + + +PRKACA->RHOA + + + + + +PRKACA->LATS2 + + + + + +PRKACA->CTNNB1 + + + + + +PRKACA->ITGB1 + + + + + +PRKACA->LATS1 + + + + + +PRKACA->RAP1A + + + + + +PRKACA->VASP + + + + + +PRKACA->VIM + + + + + + +SNAI1->CDH1 + + + + + + +PAK1->RHOA + + + + + + +PAK1->CTNNB1 + + + + + +PAK1->MAP3K1 + + + + + +PAK1->PLK1 + + + + + +PAK1->PRKACA + + + + + +PAK1->SNAI1 + + + + + +PAK1->ABL1 + + + + + +PAK1->MAP3K3 + + + + + +PAK1->VIM + + + + + +ABL1->CDH2 + + + + + +ABL1->EGFR + + + + + +ABL1->CTNNB1 + + + + + +ABL1->MAP3K1 + + + + + +ABL1->PLK1 + + + + + +ABL1->MDM2 + + + + + +ABL1->RAC1 + + + + + +ABL1->YAP1 + + + + + +STK3 + +STK3 + + + +ABL1->STK3 + + + + + +STK3->LATS2 + + + + + +STK3->LATS1 + + + + + +FOXO3->CDKN1A + + + + + +FOXO3->PLK1 + + + + + +ATM + +ATM + + + +FOXO3->ATM + + + + + +ATM->TP53 + + + + + +ATM->PLK1 + + + + + + +ATM->MDM2 + + + + + +ATM->ABL1 + + + + + diff --git a/_images/notebooks_1_network_building_16_0.svg b/_images/notebooks_1_network_building_16_0.svg new file mode 100644 index 0000000..662e705 --- /dev/null +++ b/_images/notebooks_1_network_building_16_0.svg @@ -0,0 +1,200 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +CDH2 + +CDH2 + + + +SRC->CDH2 + + + + + + +PTK2B + +PTK2B + + + +SRC->PTK2B + + + + + +RPS6KA3 + +RPS6KA3 + + + +SRC->RPS6KA3 + + + + + +EGFR + +EGFR + + + +SRC->EGFR + + + + + +RHOA + +RHOA + + + +SRC->RHOA + + + + + +CTNNB1 + +CTNNB1 + + + +SRC->CTNNB1 + + + + + +FLT4 + +FLT4 + + + +SRC->FLT4 + + + + + +ITGB1 + +ITGB1 + + + +SRC->ITGB1 + + + + + +RAC1 + +RAC1 + + + +SRC->RAC1 + + + + + +PAK1 + +PAK1 + + + +SRC->PAK1 + + + + + +ABL1 + +ABL1 + + + +SRC->ABL1 + + + + + +CDH1 + +CDH1 + + + +CDH1->SRC + + + + + +PRKCA + +PRKCA + + + +PRKCA->SRC + + + + + +PRKACA + +PRKACA + + + +PRKACA->SRC + + + + + diff --git a/_images/notebooks_2_add_resources_24_0.svg b/_images/notebooks_2_add_resources_24_0.svg new file mode 100644 index 0000000..790d0cc --- /dev/null +++ b/_images/notebooks_2_add_resources_24_0.svg @@ -0,0 +1,87 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +CDH1 + +CDH1 + + + +SRC->CDH1 + + + + + + +CDH2 + +CDH2 + + + +SRC->CDH2 + + + + + + +NOTCH1 + +NOTCH1 + + + +VIM + +VIM + + + +MAP4K4 + +MAP4K4 + + + +LATS1 + +LATS1 + + + +LATS2 + +LATS2 + + + diff --git a/_images/notebooks_2_add_resources_27_0.svg b/_images/notebooks_2_add_resources_27_0.svg new file mode 100644 index 0000000..22563a4 --- /dev/null +++ b/_images/notebooks_2_add_resources_27_0.svg @@ -0,0 +1,523 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +CDH1 + +CDH1 + + + +SRC->CDH1 + + + + + + +CDH2 + +CDH2 + + + +SRC->CDH2 + + + + + + +PTPN6 + +PTPN6 + + + +SRC->PTPN6 + + + + + +DAB1 + +DAB1 + + + +SRC->DAB1 + + + + + +SIGNOR-PF24 + +SIGNOR-PF24 + + + +SRC->SIGNOR-PF24 + + + + + +CDKN1B + +CDKN1B + + + +SRC->CDKN1B + + + + + + +TRIO + +TRIO + + + +PTK2->TRIO + + + + + +CTNNA1 + +CTNNA1 + + + +CDH1->CTNNA1 + + + + + +SIGNOR-C21 + +SIGNOR-C21 + + + +CDH2->SIGNOR-C21 + + + + + +NOTCH1 + +NOTCH1 + + + +HES1 + +HES1 + + + +NOTCH1->HES1 + + + + + +FLT3 + +FLT3 + + + +HES1->FLT3 + + + + + + +FLT3->PTPN6 + + + + + + +FLT3->SIGNOR-PF24 + + + + + +FLT3->CDKN1B + + + + + + +PTPN6->SRC + + + + + +DAB1->NOTCH1 + + + + + +DCC + +DCC + + + +TRIO->DCC + + + + + +DCC->SRC + + + + + +DCC->PTK2 + + + + + +YAP1 + +YAP1 + + + +CTNNA1->YAP1 + + + + + + +SGK1 + +SGK1 + + + +YAP1->SGK1 + + + + + +SMO + +SMO + + + +SGK1->SMO + + + + + + +SGK1->CDKN1B + + + + + + +SMO->SRC + + + + + +MAPK14 + +MAPK14 + + + +SIGNOR-C21->MAPK14 + + + + + +KHSRP + +KHSRP + + + +MAPK14->KHSRP + + + + + + +MAPK14->SIGNOR-PF24 + + + + + +KHSRP->SRC + + + + + +SIGNOR-PF24->YAP1 + + + + + + +SIGNOR-PF24->MAPK14 + + + + + + +SIGNOR-PF24->KHSRP + + + + + + +VIM + +VIM + + + +SIGNOR-PF24->VIM + + + + + +SIGNOR-PF24->CDKN1B + + + + + + +MAP4K4 + +MAP4K4 + + + +MAP3K7 + +MAP3K7 + + + +MAP4K4->MAP3K7 + + + + + +MAP2K3 + +MAP2K3 + + + +MAP3K7->MAP2K3 + + + + + +MAP2K3->MAPK14 + + + + + +LATS1 + +LATS1 + + + +LATS1->YAP1 + + + + + + +VEPH1 + +VEPH1 + + + +LATS1->VEPH1 + + + + + + +VEPH1->YAP1 + + + + + +VEPH1->LATS1 + + + + + + +LATS2 + +LATS2 + + + +VEPH1->LATS2 + + + + + + +LATS2->YAP1 + + + + + + +LATS2->VEPH1 + + + + + + +AMOTL2 + +AMOTL2 + + + +LATS2->AMOTL2 + + + + + + +AMOTL2->SRC + + + + + +AMOTL2->LATS2 + + + + + +CDK1 + +CDK1 + + + +CDKN1B->CDK1 + + + + + + +CDK1->YAP1 + + + + + +CDK1->VIM + + + + + + +CDK1->LATS1 + + + + + +CDK1->CDKN1B + + + + + + diff --git a/_images/notebooks_2_add_resources_44_0.svg b/_images/notebooks_2_add_resources_44_0.svg new file mode 100644 index 0000000..3f27ae8 --- /dev/null +++ b/_images/notebooks_2_add_resources_44_0.svg @@ -0,0 +1,121 @@ + + + + + + +%3 + + + +TNMD + +TNMD + + + +BNIP3 + +BNIP3 + + + +TNMD->BNIP3 + + + + +AMIGO1 + +AMIGO1 + + + +TNMD->AMIGO1 + + + + +TMEM79 + +TMEM79 + + + +TNMD->TMEM79 + + + + +CD33 + +CD33 + + + +TNMD->CD33 + + + + +BNIP3->AMIGO1 + + + + +TMEM79->AMIGO1 + + + + +TTMP + +TTMP + + + +CD33->TTMP + + + + +RPRM + +RPRM + + + +CD33->RPRM + + + + +CXCL9 + +CXCL9 + + + +CD33->CXCL9 + + + + +TTMP->AMIGO1 + + + + +RPRM->AMIGO1 + + + + +CXCL9->AMIGO1 + + + + diff --git a/_images/notebooks_3_stepwise_connection_13_0.svg b/_images/notebooks_3_stepwise_connection_13_0.svg new file mode 100644 index 0000000..fb09790 --- /dev/null +++ b/_images/notebooks_3_stepwise_connection_13_0.svg @@ -0,0 +1,1359 @@ + + + + + + +%3 + + + +AKT1 + +AKT1 + + + +GSK3A + +GSK3A + + + +AKT1->GSK3A + + + + + + +YAP1 + +YAP1 + + + +AKT1->YAP1 + + + + + + +MTOR + +MTOR + + + +AKT1->MTOR + + + + + +NR3C1 + +NR3C1 + + + +AKT1->NR3C1 + + + + + + +POU5F1 + +POU5F1 + + + +AKT1->POU5F1 + + + + + +AR + +AR + + + +AKT1->AR + + + + + + +BRAF + +BRAF + + + +AKT1->BRAF + + + + + + +TTC3 + +TTC3 + + + +AKT1->TTC3 + + + + + +CTNNB1 + +CTNNB1 + + + +AKT1->CTNNB1 + + + + + +CREB1 + +CREB1 + + + +AKT1->CREB1 + + + + + +RAF1 + +RAF1 + + + +AKT1->RAF1 + + + + + + +DAB2IP + +DAB2IP + + + +AKT1->DAB2IP + + + + + + +RARA + +RARA + + + +AKT1->RARA + + + + + + +MAP2K4 + +MAP2K4 + + + +AKT1->MAP2K4 + + + + + + +PRKACA + +PRKACA + + + +AKT1->PRKACA + + + + + +PTPN1 + +PTPN1 + + + +AKT1->PTPN1 + + + + + + +MAP3K8 + +MAP3K8 + + + +AKT1->MAP3K8 + + + + + +GSK3B + +GSK3B + + + +AKT1->GSK3B + + + + + + +RAC1 + +RAC1 + + + +AKT1->RAC1 + + + + + + +GAB2 + +GAB2 + + + +AKT1->GAB2 + + + + + + +BRCA1 + +BRCA1 + + + +AKT1->BRCA1 + + + + + +GSK3A->AKT1 + + + + + + +MYC + +MYC + + + +GSK3A->MYC + + + + + + +YAP1->CTNNB1 + + + + + +MTOR->AKT1 + + + + + +MAPK14 + +MAPK14 + + + +NR3C1->MAPK14 + + + + + + +POU5F1->AKT1 + + + + + + +AR->CTNNB1 + + + + + + +MAP2K1 + +MAP2K1 + + + +BRAF->MAP2K1 + + + + + +TTC3->AKT1 + + + + + + +CTNNB1->POU5F1 + + + + + +SIGNOR-PF72 + +SIGNOR-PF72 + + + +CTNNB1->SIGNOR-PF72 + + + + + +PPARG + +PPARG + + + +CTNNB1->PPARG + + + + + + +CTNNB1->MYC + + + + + +CCND1 + +CCND1 + + + +CTNNB1->CCND1 + + + + + +TCF7L2 + +TCF7L2 + + + +CTNNB1->TCF7L2 + + + + + +CREB1->CTNNB1 + + + + + +RAF1->MAP2K1 + + + + + +DAB2IP->CTNNB1 + + + + + + +DAB2IP->GSK3B + + + + + +PIK3CA + +PIK3CA + + + +DAB2IP->PIK3CA + + + + + + +RARA->CTNNB1 + + + + + + +MAP2K4->MAPK14 + + + + + +PRKACA->CTNNB1 + + + + + +PRKACA->GSK3B + + + + + + +PTPN1->AKT1 + + + + + + +MAP3K8->MAP2K1 + + + + + +GSK3B->NR3C1 + + + + + + +GSK3B->CTNNB1 + + + + + + +GSK3B->CREB1 + + + + + +GSK3B->MAPK14 + + + + + + +PTEN + +PTEN + + + +GSK3B->PTEN + + + + + + +PSEN1 + +PSEN1 + + + +GSK3B->PSEN1 + + + + + + +SIGNOR-C110 + +SIGNOR-C110 + + + +GSK3B->SIGNOR-C110 + + + + + +APC + +APC + + + +GSK3B->APC + + + + + +SIGNOR-PF26 + +SIGNOR-PF26 + + + +GSK3B->SIGNOR-PF26 + + + + + +CDH1 + +CDH1 + + + +GSK3B->CDH1 + + + + + +MACF1 + +MACF1 + + + +GSK3B->MACF1 + + + + + + +AKAP11 + +AKAP11 + + + +GSK3B->AKAP11 + + + + + + +LRP6 + +LRP6 + + + +GSK3B->LRP6 + + + + + +MAML1 + +MAML1 + + + +GSK3B->MAML1 + + + + + + +FRAT1 + +FRAT1 + + + +GSK3B->FRAT1 + + + + + + +MAP3K4 + +MAP3K4 + + + +GSK3B->MAP3K4 + + + + + + +PHLPP1 + +PHLPP1 + + + +GSK3B->PHLPP1 + + + + + + +GSK3B->MYC + + + + + + +GSK3B->CCND1 + + + + + + +RAC1->MAPK14 + + + + + +GAB2->PIK3CA + + + + + +BRCA1->AKT1 + + + + + + +SIGNOR-PF72->CTNNB1 + + + + + +PPARG->CTNNB1 + + + + + + +PIK3CA->AKT1 + + + + + +PIK3CA->MTOR + + + + + +PIK3CA->RAC1 + + + + + +CHEBI_16618 + +CHEBI_16618 + + + +PIK3CA->CHEBI_16618 + + + + + +IRS1 + +IRS1 + + + +PIK3CA->IRS1 + + + + + + +SIGNOR-C156 + +SIGNOR-C156 + + + +PIK3CA->SIGNOR-C156 + + + + + +SIGNOR-PF24 + +SIGNOR-PF24 + + + +PIK3CA->SIGNOR-PF24 + + + + + +AKT2 + +AKT2 + + + +PIK3CA->AKT2 + + + + + +PIK3R1 + +PIK3R1 + + + +PIK3CA->PIK3R1 + + + + + +CHEBI_16618->AKT1 + + + + + +IRS1->PIK3CA + + + + + +SIGNOR-C156->AKT1 + + + + + +SIGNOR-PF24->CTNNB1 + + + + + +SIGNOR-PF24->GSK3B + + + + + + +SIGNOR-PF24->MAPK14 + + + + + + +AKT2->CTNNB1 + + + + + +AKT2->GSK3B + + + + + + +AKT2->MAPK14 + + + + + + +PIK3R1->PIK3CA + + + + + +MAP2K1->GSK3B + + + + + +MAP2K1->IRS1 + + + + + + +MAPK1 + +MAPK1 + + + +MAP2K1->MAPK1 + + + + + +SIGNOR-PF1 + +SIGNOR-PF1 + + + +MAP2K1->SIGNOR-PF1 + + + + + +MAP2K1->MAPK14 + + + + + + +MAPK3 + +MAPK3 + + + +MAP2K1->MAPK3 + + + + + +SIGNOR-PF4 + +SIGNOR-PF4 + + + +MAP2K1->SIGNOR-PF4 + + + + + +MAPK1->GSK3B + + + + + + +MAPK1->MAP2K1 + + + + + + +MAPK1->MAPK14 + + + + + + +MAPK1->MYC + + + + + +SIGNOR-PF1->GSK3B + + + + + + +SIGNOR-PF1->MAP2K1 + + + + + + +SIGNOR-PF1->MAPK14 + + + + + + +SIGNOR-PF1->MYC + + + + + +MAPK14->NR3C1 + + + + + +MAPK14->GSK3B + + + + + + +MAPK14->PPARG + + + + + +MAPK14->SIGNOR-PF24 + + + + + +MAPK14->AKT2 + + + + + +FGFR1 + +FGFR1 + + + +MAPK14->FGFR1 + + + + + + +DUSP1 + +DUSP1 + + + +MAPK14->DUSP1 + + + + + +PTPN7 + +PTPN7 + + + +MAPK14->PTPN7 + + + + + + +TAB1 + +TAB1 + + + +MAPK14->TAB1 + + + + + + +CASP3 + +CASP3 + + + +MAPK14->CASP3 + + + + + + +SIGNOR-PF25 + +SIGNOR-PF25 + + + +MAPK14->SIGNOR-PF25 + + + + + + +MAPK14->CCND1 + + + + + + +MAPK3->GSK3B + + + + + + +MAPK3->MYC + + + + + +SIGNOR-PF4->GSK3B + + + + + + +SIGNOR-PF4->MYC + + + + + +FGFR1->MAP2K1 + + + + + +DUSP1->MAPK14 + + + + + + +PTPN7->MAPK14 + + + + + + +TAB1->MAPK14 + + + + + +MAP3K7 + +MAP3K7 + + + +TAB1->MAP3K7 + + + + + +CASP3->AKT1 + + + + + + +SIGNOR-PF25->GSK3B + + + + + +PTEN->AKT1 + + + + + + +PTEN->PIK3CA + + + + + + +PSEN1->CTNNB1 + + + + + + +SIGNOR-C110->CTNNB1 + + + + + + +APC->CTNNB1 + + + + + + +SIGNOR-PF26->GSK3B + + + + + + +CDH1->CTNNB1 + + + + + +MACF1->GSK3B + + + + + + +AKAP11->GSK3B + + + + + + +LRP6->GSK3B + + + + + +MAML1->CTNNB1 + + + + + +FRAT1->GSK3B + + + + + +MAP3K4->MAPK14 + + + + + +PHLPP1->AKT1 + + + + + + +MAP3K7->MAP2K4 + + + + + +MAP3K7->TAB1 + + + + + +MAP3K7->MAP3K4 + + + + + +MAP2K3 + +MAP2K3 + + + +MAP3K7->MAP2K3 + + + + + +MAP2K6 + +MAP2K6 + + + +MAP3K7->MAP2K6 + + + + + +MAP2K3->MAPK14 + + + + + +MAP2K6->MAPK14 + + + + + +MYC->CCND1 + + + + + diff --git a/_images/notebooks_3_stepwise_connection_14_0.svg b/_images/notebooks_3_stepwise_connection_14_0.svg new file mode 100644 index 0000000..d17a5bb --- /dev/null +++ b/_images/notebooks_3_stepwise_connection_14_0.svg @@ -0,0 +1,69 @@ + + + + + + +%3 + + + +MYC + +MYC + + + +CCND1 + +CCND1 + + + +MYC->CCND1 + + + + + +CTNNB1 + +CTNNB1 + + + +CTNNB1->CCND1 + + + + + +MAPK14 + +MAPK14 + + + +MAPK14->CCND1 + + + + + + +GSK3B + +GSK3B + + + +GSK3B->CCND1 + + + + + + diff --git a/_images/notebooks_3_stepwise_connection_15_0.svg b/_images/notebooks_3_stepwise_connection_15_0.svg new file mode 100644 index 0000000..e52b014 --- /dev/null +++ b/_images/notebooks_3_stepwise_connection_15_0.svg @@ -0,0 +1,117 @@ + + + + + + +%3 + + + +GSK3A + +GSK3A + + + +MYC + +MYC + + + +GSK3A->MYC + + + + + + +CCND1 + +CCND1 + + + +MYC->CCND1 + + + + + +MAPK3 + +MAPK3 + + + +MAPK3->MYC + + + + + +CTNNB1 + +CTNNB1 + + + +CTNNB1->MYC + + + + + +SIGNOR-PF1 + +SIGNOR-PF1 + + + +SIGNOR-PF1->MYC + + + + + +SIGNOR-PF4 + +SIGNOR-PF4 + + + +SIGNOR-PF4->MYC + + + + + +MAPK1 + +MAPK1 + + + +MAPK1->MYC + + + + + +GSK3B + +GSK3B + + + +GSK3B->MYC + + + + + + diff --git a/_images/notebooks_3_stepwise_connection_16_0.svg b/_images/notebooks_3_stepwise_connection_16_0.svg new file mode 100644 index 0000000..acd3703 --- /dev/null +++ b/_images/notebooks_3_stepwise_connection_16_0.svg @@ -0,0 +1,31 @@ + + + + + + +%3 + + + +CTNNB1 + +CTNNB1 + + + +TCF7L2 + +TCF7L2 + + + +CTNNB1->TCF7L2 + + + + + diff --git a/_images/notebooks_4_Connect_upstream_10_0.svg b/_images/notebooks_4_Connect_upstream_10_0.svg new file mode 100644 index 0000000..a6af7c0 --- /dev/null +++ b/_images/notebooks_4_Connect_upstream_10_0.svg @@ -0,0 +1,1748 @@ + + + + + + +%3 + + + +FOXL2 + +FOXL2 + + + +LATS1 + +LATS1 + + + +FOXL2->LATS1 + + + + + +AR + +AR + + + +VIM + +VIM + + + +AR->VIM + + + + + + +CDH1 + +CDH1 + + + +AR->CDH1 + + + + + + +CDH2 + +CDH2 + + + +AR->CDH2 + + + + + +LATS2 + +LATS2 + + + +AR->LATS2 + + + + + +SRC + +SRC + + + +AR->SRC + + + + + +NOTCH1 + +NOTCH1 + + + +AR->NOTCH1 + + + + + +ZBED1 + +ZBED1 + + + +ZBED1->LATS1 + + + + + +P17535_P53539 + +P17535_P53539 + + + +P17535_P53539->AR + + + + + + +VSX2 + +VSX2 + + + +VSX2->AR + + + + + +NFKB1 + +NFKB1 + + + +NFKB1->AR + + + + + + +NFKB1->AR + + + + + + +FOXO1 + +FOXO1 + + + +FOXO1->AR + + + + + + +FUS + +FUS + + + +FUS->AR + + + + + +P19838_Q00653 + +P19838_Q00653 + + + +P19838_Q00653->AR + + + + + + +HIF1A + +HIF1A + + + +HIF1A->AR + + + + + +P19838_Q04206 + +P19838_Q04206 + + + +P19838_Q04206->AR + + + + + + +NFKB2 + +NFKB2 + + + +NFKB2->AR + + + + + + +NFKB2->AR + + + + + +STAT3 + +STAT3 + + + +STAT3->AR + + + + + +NKX3-1 + +NKX3-1 + + + +NKX3-1->AR + + + + + + +SOX9 + +SOX9 + + + +SOX9->AR + + + + + +Q04206_Q04864 + +Q04206_Q04864 + + + +Q04206_Q04864->AR + + + + + + +NFIC + +NFIC + + + +NFIC->AR + + + + + +WT1 + +WT1 + + + +WT1->AR + + + + + + +P17275_P17535 + +P17275_P17535 + + + +P17275_P17535->AR + + + + + + +P19838_Q04864 + +P19838_Q04864 + + + +P19838_Q04864->AR + + + + + + +P19838_Q01201 + +P19838_Q01201 + + + +P19838_Q01201->AR + + + + + + +NKX2-5 + +NKX2-5 + + + +NKX2-5->AR + + + + + +RELB + +RELB + + + +RELB->AR + + + + + +RELB->AR + + + + + + +HOXC8 + +HOXC8 + + + +HOXC8->AR + + + + + + +SRY + +SRY + + + +SRY->AR + + + + + +NFE2L2 + +NFE2L2 + + + +NFE2L2->AR + + + + + +HOXB13 + +HOXB13 + + + +HOXB13->AR + + + + + + +P15407_P17535 + +P15407_P17535 + + + +P15407_P17535->AR + + + + + + +TCF20 + +TCF20 + + + +TCF20->AR + + + + + +MEIS1 + +MEIS1 + + + +MEIS1->AR + + + + + +MYBL2 + +MYBL2 + + + +MYBL2->AR + + + + + +GATA4 + +GATA4 + + + +GATA4->AR + + + + + +ARID1A + +ARID1A + + + +ARID1A->AR + + + + + +POU2F1 + +POU2F1 + + + +POU2F1->AR + + + + + +P15407_P17275 + +P15407_P17275 + + + +P15407_P17275->AR + + + + + + +NCOA2 + +NCOA2 + + + +NCOA2->AR + + + + + +ESR2 + +ESR2 + + + +ESR2->AR + + + + + +SREBF1 + +SREBF1 + + + +SREBF1->AR + + + + + + +NR4A1 + +NR4A1 + + + +NR4A1->AR + + + + + +SMAD3 + +SMAD3 + + + +SMAD3->AR + + + + + +E2F1 + +E2F1 + + + +E2F1->AR + + + + + + +PAX6 + +PAX6 + + + +PAX6->AR + + + + + +SP1 + +SP1 + + + +SP1->AR + + + + + +Q00653_Q01201 + +Q00653_Q01201 + + + +Q00653_Q01201->AR + + + + + + +NCOA4 + +NCOA4 + + + +NCOA4->AR + + + + + +P17275_P53539 + +P17275_P53539 + + + +P17275_P53539->AR + + + + + + +JUNB + +JUNB + + + +JUNB->AR + + + + + + +SFPQ + +SFPQ + + + +SFPQ->AR + + + + + +HNF4A + +HNF4A + + + +HNF4A->AR + + + + + +SRF + +SRF + + + +SRF->AR + + + + + +NR3C1 + +NR3C1 + + + +NR3C1->AR + + + + + +DAXX + +DAXX + + + +DAXX->AR + + + + + + +HEYL + +HEYL + + + +HEYL->AR + + + + + + +Q01201_Q04864 + +Q01201_Q04864 + + + +Q01201_Q04864->AR + + + + + + +NCOR2 + +NCOR2 + + + +NCOR2->AR + + + + + +P01100_P05412 + +P01100_P05412 + + + +P01100_P05412->AR + + + + + + +EZH2 + +EZH2 + + + +EZH2->AR + + + + + +VHL + +VHL + + + +VHL->AR + + + + + +FOXP1 + +FOXP1 + + + +FOXP1->AR + + + + + +CEBPD + +CEBPD + + + +CEBPD->AR + + + + + +Q01201_Q04206 + +Q01201_Q04206 + + + +Q01201_Q04206->AR + + + + + + +NCOR1 + +NCOR1 + + + +NCOR1->AR + + + + + +P05412_P17535 + +P05412_P17535 + + + +P05412_P17535->AR + + + + + + +USF2 + +USF2 + + + +USF2->AR + + + + + +MYB + +MYB + + + +MYB->AR + + + + + +FOXH1 + +FOXH1 + + + +FOXH1->AR + + + + + + +PHB1 + +PHB1 + + + +PHB1->AR + + + + + + +P01100_P17275 + +P01100_P17275 + + + +P01100_P17275->AR + + + + + + +TCF21 + +TCF21 + + + +TCF21->AR + + + + + +TGFB1I1 + +TGFB1I1 + + + +TGFB1I1->AR + + + + + +FOXN1 + +FOXN1 + + + +FOXN1->AR + + + + + +REST + +REST + + + +REST->AR + + + + + + +HEY1 + +HEY1 + + + +HEY1->AR + + + + + +REL + +REL + + + +REL->AR + + + + + + +EGR1 + +EGR1 + + + +EGR1->AR + + + + + + +FOXM1 + +FOXM1 + + + +FOXM1->AR + + + + + +TP63 + +TP63 + + + +TP63->AR + + + + + +NSD2 + +NSD2 + + + +NSD2->AR + + + + + +PURA + +PURA + + + +PURA->AR + + + + + + +ZEB1 + +ZEB1 + + + +ZEB1->AR + + + + + + +SMAD4 + +SMAD4 + + + +SMAD4->AR + + + + + + +LEF1 + +LEF1 + + + +LEF1->AR + + + + + +ESR1 + +ESR1 + + + +ESR1->AR + + + + + +RELA + +RELA + + + +RELA->AR + + + + + + +RELA->AR + + + + + + +FOXO3 + +FOXO3 + + + +FOXO3->AR + + + + + +LHX3 + +LHX3 + + + +LHX3->FOXL2 + + + + + +E2F4 + +E2F4 + + + +E2F4->AR + + + + + +P05412_P17275 + +P05412_P17275 + + + +P05412_P17275->AR + + + + + + +MYC + +MYC + + + +MYC->AR + + + + + +YBX1 + +YBX1 + + + +YBX1->AR + + + + + +P05412_P53539 + +P05412_P53539 + + + +P05412_P53539->AR + + + + + + +CREB1 + +CREB1 + + + +CREB1->AR + + + + + +HDAC1 + +HDAC1 + + + +HDAC1->AR + + + + + + +NR5A1 + +NR5A1 + + + +NR5A1->FOXL2 + + + + + +KAT5 + +KAT5 + + + +KAT5->AR + + + + + +FOXA1 + +FOXA1 + + + +FOXA1->AR + + + + + + +RUNX2 + +RUNX2 + + + +RUNX2->AR + + + + + +P01100_P17535 + +P01100_P17535 + + + +P01100_P17535->AR + + + + + + +SMARCC1 + +SMARCC1 + + + +SMARCC1->AR + + + + + +URI1 + +URI1 + + + +URI1->AR + + + + + + +MED1 + +MED1 + + + +MED1->AR + + + + + +PA2G4 + +PA2G4 + + + +PA2G4->AR + + + + + + +STAT5A + +STAT5A + + + +STAT5A->AR + + + + + +PPARG + +PPARG + + + +PPARG->AR + + + + + + +PIAS2 + +PIAS2 + + + +PIAS2->AR + + + + + +NRF1 + +NRF1 + + + +NRF1->AR + + + + + +NONO + +NONO + + + +NONO->AR + + + + + +P05412_P15407 + +P05412_P15407 + + + +P05412_P15407->AR + + + + + + +GATA2 + +GATA2 + + + +GATA2->AR + + + + + +NCOA1 + +NCOA1 + + + +NCOA1->AR + + + + + +P15408_P17535 + +P15408_P17535 + + + +P15408_P17535->AR + + + + + + +DNMT1 + +DNMT1 + + + +DNMT1->AR + + + + + +Q00653_Q04206 + +Q00653_Q04206 + + + +Q00653_Q04206->AR + + + + + + +YY1 + +YY1 + + + +YY1->AR + + + + + +ETV1 + +ETV1 + + + +ETV1->AR + + + + + +P15408_P17275 + +P15408_P17275 + + + +P15408_P17275->AR + + + + + + +TWIST1 + +TWIST1 + + + +TWIST1->AR + + + + + +JUN + +JUN + + + +JUN->AR + + + + + + +JUN->AR + + + + + + +JUND + +JUND + + + +JUND->AR + + + + + + +FOXD2 + +FOXD2 + + + +FOXD2->AR + + + + + +ELF3 + +ELF3 + + + +ELF3->AR + + + + + +SNW1 + +SNW1 + + + +SNW1->AR + + + + + +Q00653_Q04864 + +Q00653_Q04864 + + + +Q00653_Q04864->AR + + + + + + +CTNNB1 + +CTNNB1 + + + +CTNNB1->AR + + + + + +NCOA3 + +NCOA3 + + + +NCOA3->AR + + + + + +LHX4 + +LHX4 + + + +LHX4->FOXL2 + + + + + +GABPA + +GABPA + + + +GABPA->AR + + + + + +TAF1 + +TAF1 + + + +TAF1->AR + + + + + +TP53 + +TP53 + + + +TP53->AR + + + + + + +ERG + +ERG + + + +ERG->AR + + + + + + +P05412_P15408 + +P05412_P15408 + + + +P05412_P15408->AR + + + + + + diff --git a/_images/notebooks_5_build_phosphosite_network_12_0.svg b/_images/notebooks_5_build_phosphosite_network_12_0.svg new file mode 100644 index 0000000..6952fa1 --- /dev/null +++ b/_images/notebooks_5_build_phosphosite_network_12_0.svg @@ -0,0 +1,730 @@ + + + + + + +%3 + + + +GSK3B_S9 + +GSK3B_S9 + + + +GSK3B + +GSK3B + + + +GSK3B_S9->GSK3B + + + + + + +TBK1_S172 + +TBK1_S172 + + + +GSK3B->TBK1_S172 + + + + + +SRC_S51 + +SRC_S51 + + + +GSK3B->SRC_S51 + + + + + +SRC_Y419 + +SRC_Y419 + + + +GSK3B->SRC_Y419 + + + + + +MAP3K11_S789 + +MAP3K11_S789 + + + +GSK3B->MAP3K11_S789 + + + + + +SRC_S493 + +SRC_S493 + + + +GSK3B->SRC_S493 + + + + + + +TBK1 + +TBK1 + + + +TBK1_S172->TBK1 + + + + + +AKT1_T308 + +AKT1_T308 + + + +TBK1->AKT1_T308 + + + + + +AKT1_S473 + +AKT1_S473 + + + +TBK1->AKT1_S473 + + + + + +AKT1 + +AKT1 + + + +AKT1_T308->AKT1 + + + + + +AKT1->GSK3B_S9 + + + + + + +AKT1S1_T246 + +AKT1S1_T246 + + + +AKT1->AKT1S1_T246 + + + + + +MTOR_S2448 + +MTOR_S2448 + + + +AKT1->MTOR_S2448 + + + + + +AKT1_S473->AKT1 + + + + + +MAPK14_T180 + +MAPK14_T180 + + + +MAPK14 + +MAPK14 + + + +MAPK14_T180->MAPK14 + + + + + +MAPKAPK2_T222 + +MAPKAPK2_T222 + + + +MAPK14->MAPKAPK2_T222 + + + + + +MAPKAPK2 + +MAPKAPK2 + + + +MAPKAPK2_T222->MAPKAPK2 + + + + + +MAPKAPK2->AKT1_S473 + + + + + +MAPK14_Y182 + +MAPK14_Y182 + + + +MAPK14_Y182->MAPK14 + + + + + +MAP2K1_S218 + +MAP2K1_S218 + + + +MAP2K1 + +MAP2K1 + + + +MAP2K1_S218->MAP2K1 + + + + + +MAPK3_T202 + +MAPK3_T202 + + + +MAP2K1->MAPK3_T202 + + + + + +MAPK3_T207 + +MAPK3_T207 + + + +MAP2K1->MAPK3_T207 + + + + + + +MAPK3 + +MAPK3 + + + +MAPK3_T202->MAPK3 + + + + + +CDK2_T160 + +CDK2_T160 + + + +MAPK3->CDK2_T160 + + + + + +RPS6KA1_S380 + +RPS6KA1_S380 + + + +MAPK3->RPS6KA1_S380 + + + + + +CDK2 + +CDK2 + + + +CDK2_T160->CDK2 + + + + + +AKT1_S477 + +AKT1_S477 + + + +CDK2->AKT1_S477 + + + + + +AKT1_S477->AKT1 + + + + + +MAP2K1_S222 + +MAP2K1_S222 + + + +MAP2K1_S222->MAP2K1 + + + + + +MAPK3_T207->MAPK3 + + + + + + +RPS6KA1 + +RPS6KA1 + + + +RPS6KA1_S380->RPS6KA1 + + + + + +RPS6KA1->GSK3B_S9 + + + + + + +MTOR + +MTOR + + + +MTOR_S2448->MTOR + + + + + +MTOR->AKT1_S473 + + + + + +MAPK3_Y204 + +MAPK3_Y204 + + + +MAPK3_Y204->MAPK3 + + + + + +SRC + +SRC + + + +SRC_S51->SRC + + + + + +PDPK1_Y376 + +PDPK1_Y376 + + + +SRC->PDPK1_Y376 + + + + + +PRKD1_Y463 + +PRKD1_Y463 + + + +SRC->PRKD1_Y463 + + + + + +RET_Y905 + +RET_Y905 + + + +SRC->RET_Y905 + + + + + +ARAF_Y302 + +ARAF_Y302 + + + +SRC->ARAF_Y302 + + + + + +RAF1_Y340 + +RAF1_Y340 + + + +SRC->RAF1_Y340 + + + + + +CDK1_Y15 + +CDK1_Y15 + + + +SRC->CDK1_Y15 + + + + + + +PDPK1 + +PDPK1 + + + +PDPK1_Y376->PDPK1 + + + + + +PRKACA_T198 + +PRKACA_T198 + + + +PDPK1->PRKACA_T198 + + + + + +PRKACA + +PRKACA + + + +PRKACA_T198->PRKACA + + + + + +HSPB1_S78 + +HSPB1_S78 + + + +PRKACA->HSPB1_S78 + + + + + +SRC_Y419->SRC + + + + + +PRKD1 + +PRKD1 + + + +PRKD1_Y463->PRKD1 + + + + + +HSPB1_S82 + +HSPB1_S82 + + + +PRKD1->HSPB1_S82 + + + + + +JUN_S63 + +JUN_S63 + + + +PRKD1->JUN_S63 + + + + + +MAP3K11 + +MAP3K11 + + + +MAP3K11_S789->MAP3K11 + + + + + +MAP2K4_S257 + +MAP2K4_S257 + + + +MAP3K11->MAP2K4_S257 + + + + + +MAP2K4 + +MAP2K4 + + + +MAP2K4_S257->MAP2K4 + + + + + +MAP2K4->MAPK14_T180 + + + + + +RET + +RET + + + +RET_Y905->RET + + + + + +RET->MAPK14_Y182 + + + + + +RET->MAPK3_Y204 + + + + + +SRC_S493->SRC + + + + + + +ARAF + +ARAF + + + +ARAF_Y302->ARAF + + + + + +ARAF->MAP2K1_S218 + + + + + +RAF1 + +RAF1 + + + +RAF1_Y340->RAF1 + + + + + +RAF1->MAP2K1_S222 + + + + + +CDK1 + +CDK1 + + + +CDK1_Y15->CDK1 + + + + + + +MAPK3_S343 + +MAPK3_S343 + + + +CDK1->MAPK3_S343 + + + + + +MAPK3_S343->MAPK3 + + + + + diff --git a/_images/notebooks_6_ontology_8_0.svg b/_images/notebooks_6_ontology_8_0.svg new file mode 100644 index 0000000..cc98a44 --- /dev/null +++ b/_images/notebooks_6_ontology_8_0.svg @@ -0,0 +1,68 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +PTK2 + +PTK2 + + + +SRC->PTK2 + + + + + +epithelial_to_mesenchymal_transition + +epithelial_to_mesenchymal_transition + + + +SRC->epithelial_to_mesenchymal_transition + + + + + + +PTK2->epithelial_to_mesenchymal_transition + + + + + +NOTCH1 + +NOTCH1 + + + +NOTCH1->epithelial_to_mesenchymal_transition + + + + + +NOTCH1->epithelial_to_mesenchymal_transition + + + + + diff --git a/_images/notebooks_7_tissue_mapping_9_0.svg b/_images/notebooks_7_tissue_mapping_9_0.svg new file mode 100644 index 0000000..930c7f8 --- /dev/null +++ b/_images/notebooks_7_tissue_mapping_9_0.svg @@ -0,0 +1,73 @@ + + + + + + +%3 + + + +SRC + +SRC + + + +NOTCH1 + +NOTCH1 + + + +PTK2 + +PTK2 + + + +CDH1 + +CDH1 + + + +CDH2 + +CDH2 + + + +VIM + +VIM + + + +MAP4K4 + +MAP4K4 + + + +LATS1 + +LATS1 + + + +LATS2 + +LATS2 + + + +PTK2B + +PTK2B + + + diff --git a/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.rst.txt b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.rst.txt new file mode 100644 index 0000000..cb7ab3c --- /dev/null +++ b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.rst.txt @@ -0,0 +1,6 @@ +neko.\_visual.visualize\_network.NetworkVisualizer.render +========================================================= + +.. currentmodule:: neko._visual.visualize_network + +.. automethod:: NetworkVisualizer.render \ No newline at end of file diff --git a/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.rst.txt b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.rst.txt new file mode 100644 index 0000000..de02cb2 --- /dev/null +++ b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.rst.txt @@ -0,0 +1,6 @@ +neko.\_visual.visualize\_network.NetworkVisualizer.tissue\_mapping +================================================================== + +.. currentmodule:: neko._visual.visualize_network + +.. automethod:: NetworkVisualizer.tissue_mapping \ No newline at end of file diff --git a/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.rst.txt b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.rst.txt new file mode 100644 index 0000000..f94169b --- /dev/null +++ b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.rst.txt @@ -0,0 +1,6 @@ +neko.\_visual.visualize\_network.NetworkVisualizer.vis\_comparison +================================================================== + +.. currentmodule:: neko._visual.visualize_network + +.. automethod:: NetworkVisualizer.vis_comparison \ No newline at end of file diff --git a/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.rst.txt b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.rst.txt new file mode 100644 index 0000000..3c26270 --- /dev/null +++ b/_sources/_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.rst.txt @@ -0,0 +1,6 @@ +neko.\_visual.visualize\_network.NetworkVisualizer.yfiles\_visual +================================================================= + +.. currentmodule:: neko._visual.visualize_network + +.. automethod:: NetworkVisualizer.yfiles_visual \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.add_edge.rst.txt b/_sources/_autosummary/neko.core.network.Network.add_edge.rst.txt new file mode 100644 index 0000000..e0096a9 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.add_edge.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.add\_edge +=================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.add_edge \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.add_node.rst.txt b/_sources/_autosummary/neko.core.network.Network.add_node.rst.txt new file mode 100644 index 0000000..516e414 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.add_node.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.add\_node +=================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.add_node \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.complete_connection.rst.txt b/_sources/_autosummary/neko.core.network.Network.complete_connection.rst.txt new file mode 100644 index 0000000..287d3f6 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.complete_connection.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.complete\_connection +============================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.complete_connection \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.connect_component.rst.txt b/_sources/_autosummary/neko.core.network.Network.connect_component.rst.txt new file mode 100644 index 0000000..a49c78d --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.connect_component.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.connect\_component +============================================ + +.. currentmodule:: neko.core.network + +.. automethod:: Network.connect_component \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.rst.txt b/_sources/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.rst.txt new file mode 100644 index 0000000..ab228f4 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.connect_genes_to_phenotype.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.connect\_genes\_to\_phenotype +======================================================= + +.. currentmodule:: neko.core.network + +.. automethod:: Network.connect_genes_to_phenotype \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.connect_nodes.rst.txt b/_sources/_autosummary/neko.core.network.Network.connect_nodes.rst.txt new file mode 100644 index 0000000..12abb2a --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.connect_nodes.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.connect\_nodes +======================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.connect_nodes \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.connect_subgroup.rst.txt b/_sources/_autosummary/neko.core.network.Network.connect_subgroup.rst.txt new file mode 100644 index 0000000..454a27e --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.connect_subgroup.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.connect\_subgroup +=========================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.connect_subgroup \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.rst.txt b/_sources/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.rst.txt new file mode 100644 index 0000000..04940e8 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.connect_to_upstream_nodes.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.connect\_to\_upstream\_nodes +====================================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.connect_to_upstream_nodes \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.rst.txt b/_sources/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.rst.txt new file mode 100644 index 0000000..9f0d150 --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.convert\_edgelist\_into\_genesymbol +============================================================= + +.. currentmodule:: neko.core.network + +.. automethod:: Network.convert_edgelist_into_genesymbol \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.is_connected.rst.txt b/_sources/_autosummary/neko.core.network.Network.is_connected.rst.txt new file mode 100644 index 0000000..d0bd52d --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.is_connected.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.is\_connected +======================================= + +.. currentmodule:: neko.core.network + +.. automethod:: Network.is_connected \ No newline at end of file diff --git a/_sources/_autosummary/neko.core.network.Network.remove_node.rst.txt b/_sources/_autosummary/neko.core.network.Network.remove_node.rst.txt new file mode 100644 index 0000000..b3083da --- /dev/null +++ b/_sources/_autosummary/neko.core.network.Network.remove_node.rst.txt @@ -0,0 +1,6 @@ +neko.core.network.Network.remove\_node +====================================== + +.. currentmodule:: neko.core.network + +.. automethod:: Network.remove_node \ No newline at end of file diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 0000000..88130e4 --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,62 @@ +API Reference +============= + +This page contains the API reference for the Neko package. + +Network Class +------------- + +The main class in NeKo is the ``Network`` class. You can import it as follows: + +.. code-block:: python + + from neko.core.network import Network + +Below is a summary of the methods available in the ``Network`` class: + +.. autoclass:: neko.core.network.Network + :members: + :undoc-members: + :show-inheritance: + +Method Details +-------------- + +.. autosummary:: + :toctree: _autosummary + + neko.core.network.Network.load_network_from_sif + neko.core.network.Network.add_edge + neko.core.network.Network.remove_node + neko.core.network.Network.add_cascade_to_edge_list + neko.core.network.Network.add_node + neko.core.network.Network.add_paths_to_edge_list + neko.core.network.Network.complete_connection + neko.core.network.Network.connect_component + neko.core.network.Network.connect_genes_to_phenotype + neko.core.network.Network.connect_nodes + neko.core.network.Network.connect_subgroup + neko.core.network.Network.connect_to_upstream_nodes + neko.core.network.Network.convert_edgelist_into_genesymbol + neko.core.network.Network.filter_unsigned_paths + neko.core.network.Network.is_connected + +NetworkVisualizer Class Methods +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autosummary:: + :toctree: _autosummary + + neko._visual.visualize_network.NetworkVisualizer.set_custom_edge_colors + neko._visual.visualize_network.NetworkVisualizer.set_node_colors + neko._visual.visualize_network.NetworkVisualizer.add_edges_to_graph + neko._visual.visualize_network.NetworkVisualizer.add_nodes_to_graph + neko._visual.visualize_network.NetworkVisualizer.tissue_mapping + neko._visual.visualize_network.NetworkVisualizer.render + neko._visual.visualize_network.NetworkVisualizer.yfiles_visual + neko._visual.visualize_network.NetworkVisualizer.vis_comparison + +Other Modules +------------- + +.. Add other modules and classes here as your project grows diff --git a/_sources/contents.rst.txt b/_sources/contents.rst.txt new file mode 100644 index 0000000..6ce97a9 --- /dev/null +++ b/_sources/contents.rst.txt @@ -0,0 +1,40 @@ +======== +Contents +======== + +.. toctree:: + :maxdepth: 2 + :caption: User Guide + + installation + quickstart + tutorials + +.. toctree:: + :maxdepth: 2 + :caption: API Reference + + api + network + network_visualizer + +.. toctree:: + :maxdepth: 1 + :caption: Notebooks + + notebooks/1_network_building + notebooks/2_add_resources + notebooks/3_stepwise_connection + notebooks/4_Connect_upstream + notebooks/5_build_phosphosite_network + notebooks/6_ontology + notebooks/7_tissue_mapping + notebooks/8_Compare_networks + notebooks/9-Recreating_famous_pathways + +.. toctree:: + :maxdepth: 1 + :caption: Development + + contributing + changelog diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..7eb5fe3 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,71 @@ +================== + Neko +================== + +.. image:: https://github.com/sysbio-curie/Neko/actions/workflows/build.yaml/badge.svg + :target: https://github.com/sysbio-curie/Neko/actions/workflows/build.yaml + :alt: Tests + +.. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg + :target: https://sysbio-curie.github.io/Neko/ + :alt: Documentation + +Neko: Network Konstructor +------------------------------------------------------------------- + +Neko is a Python package for extracting, visualizing, converting, and studying interactions from databases into executable activity flow-based models. It's built on top of `Omnipath `_, `Pypath `_, and `Atopo `_. + +**Note**: Neko is currently in development and approaching its final stages. It is not yet available on PyPI. + +Features +-------- + +- Network creation and manipulation +- Connection of nodes and subnetworks +- Gene-to-phenotype mapping +- Network visualization +- Interaction database integration + +Installation +------------ + +As Neko is still in development, you can install it directly from the GitHub repository: + +.. code-block:: bash + + git clone https://github.com/sysbio-curie/Neko.git + cd Neko + pip install -e . + +Documentation +------------- + +For full documentation, including API reference and detailed tutorials, visit our `GitHub Pages documentation `_. + +Jupyter Notebooks +----------------- + +We provide a comprehensive set of Jupyter notebooks that offer a detailed and user-friendly explanation of the package. These notebooks cover all modules of NeKo and provide a complete overview of how to use the package: + +1. Network Building +2. Adding Resources +3. Building Phosphosite Networks +4. Connecting Upstream +5. Ontology +6. Tissue Mapping + +You can find these notebooks in the `notebooks` directory of the repository. + +Acknowledgements +---------------- + +This project is a collaborative effort with Dénes Turei and Asmund Flobak. + +Current contributors: Marco Ruscone, Eirini Tsirvouli, Andrea Checcoli, Dénes Turei. + +version 0.9.1 +-------------- + +- Network creation and manipulation: The package allows for the creation of a network of nodes and edges, with various methods for enrichment analysis. This includes adding and removing nodes and edges, loading a network from a SIF (Simple Interaction Format) file, and adding paths to the edge list of the network. +- Connection of nodes: The package provides several methods to connect nodes in the network. This includes connecting all nodes, connecting a subgroup of nodes, connecting all nodes of a network object, and connecting subcomponents of a network object. +- Connection of genes to phenotype: The package provides a method to connect genes to a phenotype based on provided parameters. This includes retrieving phenotype markers, identifying unique Uniprot genes, and connecting them to the network. There is also an option to compress the network by substituting specified genes with the phenotype name. diff --git a/_sources/notebooks/1_network_building.ipynb.txt b/_sources/notebooks/1_network_building.ipynb.txt new file mode 100644 index 0000000..caf29ad --- /dev/null +++ b/_sources/notebooks/1_network_building.ipynb.txt @@ -0,0 +1,2199 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Usage\n", + "\n", + "This notebook provides the steps to build a network starting from a list of genes, and using the default functionalities of NeKo." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.12 s, sys: 1.61 s, total: 7.73 s\n", + "Wall time: 5.23 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "markdown", + "id": "6a5b5adf", + "metadata": {}, + "source": [ + "## 2. Create a network using as input the gene set. \n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! If no resource is specified, the default used resource by the package is `omnipath.all_interactions()`. To add new resources, please see the [Add resources](https://omniflow-project.readthedocs.io/en/latest/notebooks/add_resources.html#) tutorial. \n", + "\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 2A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN\n", + "9 PTK2B Q14289 NaN" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "a2759581", + "metadata": {}, + "source": [ + "### 2B. Explore if the nodes are connected without introducing new intermidiate nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a339705b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 169 ms, sys: 170 µs, total: 169 ms\n", + "Wall time: 168 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)" + ] + }, + { + "cell_type": "markdown", + "id": "2fb5674d", + "metadata": {}, + "source": [ + "### 2C. Visualize the network with the following command. \n", + "\n", + "The network picture is also exported in the working repository, in pdf format." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "db39112a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "markdown", + "id": "3c1725cc-4c08-4a85-b26c-8f59936e351d", + "metadata": {}, + "source": [ + "### 2D. Connect disconnected nodes by importing intermediate nodes.\n", + "\n", + "The parameter _*maxlen*_ sets the maximum length of the paths to be searched of. \n", + "\n", + "The parameter _*algorithm*_ sets the base algorithm to use when looking for paths in the resources. It can be 'bfs' (Breadth-First Search) or 'dfs' (Depth-First Search). The first one is faster but does not always retrieve the shortest path, while the second one retrieves all the possible shortest paths at higher computational cost.\n", + "\n", + "The parameter _*only_signed*_ forces the algorithm to look for just signed interactions. \n", + "\n", + "The parameter _*consensus*_ retrieves those interactions with a sign consensus between the references (when possible). \n", + "\n", + "The parameter _*connect_with_bias*_, changes the base algorithm, making it look for possible connection between all the disconnected node in the network when a new bridge-gene is introduced in the network, biasing the final network topology." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9a07d77b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9.08 s, sys: 6.68 ms, total: 9.08 s\n", + "Wall time: 9.08 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(maxlen=3, algorithm=\"bfs\", only_signed=True, connect_with_bias=False, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "c6510316-2f47-4e71-89e0-b93da0657897", + "metadata": {}, + "source": [ + "## 3. Visualize final network" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c3e1190e-8dec-4faa-9cfc-9f046289a4bf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SRC->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA\n", + "\n", + "RHOA\n", + "\n", + "\n", + "\n", + "SRC->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA3\n", + "\n", + "RPS6KA3\n", + "\n", + "\n", + "\n", + "SRC->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "SRC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4\n", + "\n", + "FLT4\n", + "\n", + "\n", + "\n", + "SRC->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1\n", + "\n", + "ITGB1\n", + "\n", + "\n", + "\n", + "SRC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "SRC->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1\n", + "\n", + "PAK1\n", + "\n", + "\n", + "\n", + "SRC->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1\n", + "\n", + "ABL1\n", + "\n", + "\n", + "\n", + "SRC->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A\n", + "\n", + "RAP1A\n", + "\n", + "\n", + "\n", + "CDH1->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VASP\n", + "\n", + "VASP\n", + "\n", + "\n", + "\n", + "CDH1->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53\n", + "\n", + "TP53\n", + "\n", + "\n", + "\n", + "PTK2B->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK\n", + "\n", + "LCK\n", + "\n", + "\n", + "\n", + "PTK2B->LCK\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3\n", + "\n", + "FOXO3\n", + "\n", + "\n", + "\n", + "PTK2B->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "NOTCH1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX2\n", + "\n", + "SOX2\n", + "\n", + "\n", + "\n", + "NOTCH1->SOX2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1A\n", + "\n", + "CDKN1A\n", + "\n", + "\n", + "\n", + "NOTCH1->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG\n", + "\n", + "IFNG\n", + "\n", + "\n", + "\n", + "NOTCH1->IFNG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "NOTCH1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K1\n", + "\n", + "MAP3K1\n", + "\n", + "\n", + "\n", + "EGFR->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2\n", + "\n", + "DVL2\n", + "\n", + "\n", + "\n", + "DVL2->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->LCK\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA\n", + "\n", + "PRKCA\n", + "\n", + "\n", + "\n", + "PRKCA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->DVL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "PRKCA->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "TP53->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "TP53->MAP4K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "LATS2->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNAI1\n", + "\n", + "SNAI1\n", + "\n", + "\n", + "\n", + "LATS2->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->SOX2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX2->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDKN1A->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1A->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K3\n", + "\n", + "MAP3K3\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K1->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPP1R12A\n", + "\n", + "PPP1R12A\n", + "\n", + "\n", + "\n", + "PLK1\n", + "\n", + "PLK1\n", + "\n", + "\n", + "\n", + "PPP1R12A->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->DVL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2\n", + "\n", + "MDM2\n", + "\n", + "\n", + "\n", + "PLK1->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PLK1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "CDK1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNAI1->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->MAP3K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3\n", + "\n", + "STK3\n", + "\n", + "\n", + "\n", + "ABL1->STK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM\n", + "\n", + "ATM\n", + "\n", + "\n", + "\n", + "FOXO3->ATM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize a specific nodes and \n", + "visualizer1 = NetworkVisualizer(new_net1,color_by='effect', noi=True)\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "80b84e81-abc2-4aae-ad1c-3ebf00355b98", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA3\n", + "\n", + "RPS6KA3\n", + "\n", + "\n", + "\n", + "SRC->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SRC->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA\n", + "\n", + "RHOA\n", + "\n", + "\n", + "\n", + "SRC->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "SRC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4\n", + "\n", + "FLT4\n", + "\n", + "\n", + "\n", + "SRC->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1\n", + "\n", + "ITGB1\n", + "\n", + "\n", + "\n", + "SRC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "SRC->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1\n", + "\n", + "PAK1\n", + "\n", + "\n", + "\n", + "SRC->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1\n", + "\n", + "ABL1\n", + "\n", + "\n", + "\n", + "SRC->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA\n", + "\n", + "PRKCA\n", + "\n", + "\n", + "\n", + "PRKCA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PRKACA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize a specific nodes and \n", + "visualizer1 = NetworkVisualizer(new_net1, predefined_node = \"SRC\",color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0aa6d076-5310-462e-aa0e-f69da822b962", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P12931Q05397NonestimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12830P12931NonestimulationACSN:16039586;ACSN:16099633;ACSN:17143292;ACSN...
2P12931P19022NoneinhibitionACSN:15782139;ACSN:16371504;ACSN:16492141;ACSN...
3P12931Q14289NonestimulationAdhesome:10329689;Adhesome:10521452;Adhesome:1...
4Q14289Q05397NonestimulationAdhesome:16760434;HPRD:16760434;KEA:12960434;K...
..................
170P17612P50552NonestimulationAdhesome:10851246;Adhesome:10922374;Adhesome:8...
171Q13153O95863NonestimulationInnateDB:15833848;KEA:15833848;PhosphoSite:158...
172Q13153Q99759NonestimulationNaN
173P00519Q13188NonestimulationPhosphoSite:22590567;ProtMapper:22590567;ProtM...
174Q13315P00519NonestimulationACSN:11804596;ACSN:11877377;ACSN:12607003;ACSN...
\n", + "

175 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " source target Type Effect \\\n", + "0 P12931 Q05397 None stimulation \n", + "1 P12830 P12931 None stimulation \n", + "2 P12931 P19022 None inhibition \n", + "3 P12931 Q14289 None stimulation \n", + "4 Q14289 Q05397 None stimulation \n", + ".. ... ... ... ... \n", + "170 P17612 P50552 None stimulation \n", + "171 Q13153 O95863 None stimulation \n", + "172 Q13153 Q99759 None stimulation \n", + "173 P00519 Q13188 None stimulation \n", + "174 Q13315 P00519 None stimulation \n", + "\n", + " References \n", + "0 Adhesome:10085298;Adhesome:10592173;Adhesome:1... \n", + "1 ACSN:16039586;ACSN:16099633;ACSN:17143292;ACSN... \n", + "2 ACSN:15782139;ACSN:16371504;ACSN:16492141;ACSN... \n", + "3 Adhesome:10329689;Adhesome:10521452;Adhesome:1... \n", + "4 Adhesome:16760434;HPRD:16760434;KEA:12960434;K... \n", + ".. ... \n", + "170 Adhesome:10851246;Adhesome:10922374;Adhesome:8... \n", + "171 InnateDB:15833848;KEA:15833848;PhosphoSite:158... \n", + "172 NaN \n", + "173 PhosphoSite:22590567;ProtMapper:22590567;ProtM... \n", + "174 ACSN:11804596;ACSN:11877377;ACSN:12607003;ACSN... \n", + "\n", + "[175 rows x 5 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#We can access to the edges of the network\n", + "new_net1.edges" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/2_add_resources.ipynb.txt b/_sources/notebooks/2_add_resources.ipynb.txt new file mode 100644 index 0000000..241b785 --- /dev/null +++ b/_sources/notebooks/2_add_resources.ipynb.txt @@ -0,0 +1,2642 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Build network using user-defined resources\n", + "\n", + "This notebook explores how to add other individual resources from Omnipath or other public databases." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 14 µs, sys: 1 µs, total: 15 µs\n", + "Wall time: 16.9 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "2a250d98", + "metadata": {}, + "source": [ + "## 1. Adding a resource already in OmniPath" + ] + }, + { + "cell_type": "markdown", + "id": "0e6b2c56-80cd-459b-984a-fa235c1a0085", + "metadata": {}, + "source": [ + "### 1A. Specify the interaction resource of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "829de33a", + "metadata": {}, + "outputs": [], + "source": [ + "collectri = op.interactions.CollecTRI.get()" + ] + }, + { + "cell_type": "markdown", + "id": "fc585a3c", + "metadata": {}, + "source": [ + "### 1B. Add new resource to the Resources object" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "91ae2cef", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources.add_resources(collectri, name = 'collectri')\n", + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "695822e0-4bb7-4c4d-a951-0ca5125b0b1d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessourcesn_sourcesn_primary_sourcesn_referencesreferences_strippedform_complex
0P01106O14746FalseTrueFalseTrueTrueFalse82CollecTRI:10022128;CollecTRI:10491298;CollecTR...CollecTRI;DoRothEA-A_CollecTRI;ExTRI_CollecTRI...817410022128;10491298;10606235;10637317;10723141;1...False
1P17947P02818FalseTrueFalseTrueTrueFalse3CollecTRI:10022617CollecTRI;ExTRI_CollecTRI21110022617False
2COMPLEX:P15407_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
3COMPLEX:P01100_P05412P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
4COMPLEX:P01100_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
...................................................
64490Q01196Q13094FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64491Q01196Q6MZQ0FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64492Q15672P08151FalseTrueFalseTrueTrueFalse3CollecTRI:11948912CollecTRI;DoRothEA-A_CollecTRI21111948912False
64493P22415Q5SRE5FalseTrueFalseTrueTrueFalse3CollecTRI:22951020CollecTRI;DoRothEA-A_CollecTRI21122951020False
64494Q9UQR1Q5VYX0FalseTrueFalseTrueTrueFalse3CollecTRI:25295465CollecTRI;DoRothEA-A_CollecTRI21125295465False
\n", + "

64495 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 P01106 O14746 False True \n", + "1 P17947 P02818 False True \n", + "2 COMPLEX:P15407_P17275 P05412 False True \n", + "3 COMPLEX:P01100_P05412 P05412 False True \n", + "4 COMPLEX:P01100_P17275 P05412 False True \n", + "... ... ... ... ... \n", + "64490 Q01196 Q13094 False True \n", + "64491 Q01196 Q6MZQ0 False True \n", + "64492 Q15672 P08151 False True \n", + "64493 P22415 Q5SRE5 False True \n", + "64494 Q9UQR1 Q5VYX0 False True \n", + "\n", + " is_inhibition consensus_direction consensus_stimulation \\\n", + "0 False True True \n", + "1 False True True \n", + "2 False True True \n", + "3 False True True \n", + "4 False True True \n", + "... ... ... ... \n", + "64490 False True True \n", + "64491 False True True \n", + "64492 False True True \n", + "64493 False True True \n", + "64494 False True True \n", + "\n", + " consensus_inhibition curation_effort \\\n", + "0 False 82 \n", + "1 False 3 \n", + "2 False 53 \n", + "3 False 53 \n", + "4 False 53 \n", + "... ... ... \n", + "64490 False 3 \n", + "64491 False 3 \n", + "64492 False 3 \n", + "64493 False 3 \n", + "64494 False 3 \n", + "\n", + " references \\\n", + "0 CollecTRI:10022128;CollecTRI:10491298;CollecTR... \n", + "1 CollecTRI:10022617 \n", + "2 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "3 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "4 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "... ... \n", + "64490 CollecTRI:20019798 \n", + "64491 CollecTRI:20019798 \n", + "64492 CollecTRI:11948912 \n", + "64493 CollecTRI:22951020 \n", + "64494 CollecTRI:25295465 \n", + "\n", + " sources n_sources \\\n", + "0 CollecTRI;DoRothEA-A_CollecTRI;ExTRI_CollecTRI... 8 \n", + "1 CollecTRI;ExTRI_CollecTRI 2 \n", + "2 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "3 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "4 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "... ... ... \n", + "64490 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64491 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64492 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64493 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64494 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "\n", + " n_primary_sources n_references \\\n", + "0 1 74 \n", + "1 1 1 \n", + "2 1 49 \n", + "3 1 49 \n", + "4 1 49 \n", + "... ... ... \n", + "64490 1 1 \n", + "64491 1 1 \n", + "64492 1 1 \n", + "64493 1 1 \n", + "64494 1 1 \n", + "\n", + " references_stripped form_complex \n", + "0 10022128;10491298;10606235;10637317;10723141;1... False \n", + "1 10022617 False \n", + "2 10022869;10037172;10208431;10366004;11281649;1... False \n", + "3 10022869;10037172;10208431;10366004;11281649;1... False \n", + "4 10022869;10037172;10208431;10366004;11281649;1... False \n", + "... ... ... \n", + "64490 20019798 False \n", + "64491 20019798 False \n", + "64492 11948912 False \n", + "64493 22951020 False \n", + "64494 25295465 False \n", + "\n", + "[64495 rows x 16 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "markdown", + "id": "23a62f81-1da2-42e8-ae04-696897ac7ae4", + "metadata": {}, + "source": [ + "It is important once added a new resource, to build the database as showcases in the previous cell. All those steps assure that the incoming database is compatible with the NeKo structure, possibly avoiding mistakes when running the connecting algorithms." + ] + }, + { + "cell_type": "markdown", + "id": "068cbc5c-93a5-46d9-b0a6-bc520ee66bfc", + "metadata": {}, + "source": [ + "Sometimes a WARNING can suggest that some interactions could be missing; while this is limiting the amount of knowledge NeKo can extract, it does not prevent the package from working. Other possible cause of a WARNING is the absence of \"consensus\" columns. To avoid errors while running the package, set always consensus to False." + ] + }, + { + "cell_type": "markdown", + "id": "ece16ef7-cf9f-4f50-ad5f-99568bdfec88", + "metadata": {}, + "source": [ + "## 2. Adding a public database\n", + "\n", + "Alternatively, the user might want to use their own interaction databases. We have already implemented the inclusion of some of widely used databases. \n", + "\n", + "As example, we show here how to integrate the [Signor 3.0](https://signor.uniroma2.it/) database. In order to do so, the User needs to have already downloaded the whole Signor database, available at the following link: [https://signor.uniroma2.it/downloads.php](https://signor.uniroma2.it/downloads.php) or with the following code:. " + ] + }, + { + "cell_type": "markdown", + "id": "8361d2b2-646b-4080-bc36-ca28c9bfab10", + "metadata": {}, + "source": [ + "### 2A. Add Signor database\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "4fd4b190-350a-4682-8f09-8c6423064038", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "c7e5fe30-55c4-467b-aa7d-5c02cfba7dd2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionform_complexconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessources
0A0A024RAD5SIGNOR-C535TrueFalseFalseTrueFalseFalseFalsemiannu31831667SIGNOR-272062
1A0A0B4J2F0P18848TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261041
2A0A0B4J2F0P35638TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261043
3A0A0B4J2F0SIGNOR-PH2TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261042
4A0AVT1SIGNOR-C496TrueFalseFalseTrueFalseFalseFalsemiannu24816100SIGNOR-270835
.......................................
28850URS000075C808_9606Q6ZN04TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272092
28851URS000075C808_9606Q86Y13TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272091
28852URS000075CF56_9606P05019TrueFalseTrueFalseFalseFalseFalsemiannu25477897SIGNOR-255793
28853URS000075CF56_9606P23759TrueFalseTrueFalseFalseFalseFalseirozzo24708856SIGNOR-256124
28854URS000075D8A0_9606P61073TrueTrueFalseFalseFalseFalseFalseLuisa20516212SIGNOR-268952
\n", + "

28855 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 A0A024RAD5 SIGNOR-C535 True False \n", + "1 A0A0B4J2F0 P18848 True False \n", + "2 A0A0B4J2F0 P35638 True False \n", + "3 A0A0B4J2F0 SIGNOR-PH2 True False \n", + "4 A0AVT1 SIGNOR-C496 True False \n", + "... ... ... ... ... \n", + "28850 URS000075C808_9606 Q6ZN04 True True \n", + "28851 URS000075C808_9606 Q86Y13 True True \n", + "28852 URS000075CF56_9606 P05019 True False \n", + "28853 URS000075CF56_9606 P23759 True False \n", + "28854 URS000075D8A0_9606 P61073 True True \n", + "\n", + " is_inhibition form_complex consensus_direction \\\n", + "0 False True False \n", + "1 True False False \n", + "2 True False False \n", + "3 True False False \n", + "4 False True False \n", + "... ... ... ... \n", + "28850 False False False \n", + "28851 False False False \n", + "28852 True False False \n", + "28853 True False False \n", + "28854 False False False \n", + "\n", + " consensus_stimulation consensus_inhibition curation_effort references \\\n", + "0 False False miannu 31831667 \n", + "1 False False miannu 31653868 \n", + "2 False False miannu 31653868 \n", + "3 False False miannu 31653868 \n", + "4 False False miannu 24816100 \n", + "... ... ... ... ... \n", + "28850 False False miannu 24326307 \n", + "28851 False False miannu 24326307 \n", + "28852 False False miannu 25477897 \n", + "28853 False False irozzo 24708856 \n", + "28854 False False Luisa 20516212 \n", + "\n", + " sources \n", + "0 SIGNOR-272062 \n", + "1 SIGNOR-261041 \n", + "2 SIGNOR-261043 \n", + "3 SIGNOR-261042 \n", + "4 SIGNOR-270835 \n", + "... ... \n", + "28850 SIGNOR-272092 \n", + "28851 SIGNOR-272091 \n", + "28852 SIGNOR-255793 \n", + "28853 SIGNOR-256124 \n", + "28854 SIGNOR-268952 \n", + "\n", + "[28855 rows x 12 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "markdown", + "id": "2065dada-a426-4774-80f9-7322db45efd0", + "metadata": {}, + "source": [ + "In order to avoid conflict or errors, ensure that the file contains at least the following columns: IDA, IDB, EFFECT, ANNOTATOR, PMID, SIGNOR_ID" + ] + }, + { + "cell_type": "markdown", + "id": "64b445e7-2e45-40ee-9ee9-268965b4d55b", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**Note**\n", + " \n", + "SIGNOR uses has different identifiers for complexes, protein family, phenotype, etc.\n", + "It is possible that the network contains nodes names like \"Signor_pf32\" or something like this... This is not yet translated, but if you are interested in what those nodes consist of, you can use download their vocabulary for the entities: [https://signor.uniroma2.it/downloads.php](https://signor.uniroma2.it/downloads.php)\n", + "\n", + "
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "8fe2700c-5b59-4302-9a9e-cc2de59d34af", + "metadata": {}, + "source": [ + "## 3. Build the network" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 3A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"PTK2\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\"]" + ] + }, + { + "cell_type": "markdown", + "id": "7cd015ca-f1bb-4055-9226-b4b01a0a0111", + "metadata": {}, + "source": [ + "### 3B. Create network object by specifying the interaction resources" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "a2759581", + "metadata": {}, + "source": [ + "### 3C. Build network\n", + "\n", + "The downstream steps to connect your nodes, are the same. Please see the [Network building](https://omniflow-project.readthedocs.io/en/latest/notebooks/network_building.html) tutorial for detailed explanations of each step." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a339705b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 24.8 ms, sys: 945 µs, total: 25.8 ms\n", + "Wall time: 25.2 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "db39112a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "SRC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "markdown", + "id": "7aae5ca7-5696-44ba-9e75-4a2d1eb0a2d9", + "metadata": {}, + "source": [ + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! It is important to note, that not all the databases have the same structure as Omnipath. In particular, if the columns \"consensus\" are missing, we suggest to avoid to use the flag `consensus` or `consensus_only` when using NeKo with customize databases. As a general advise, we suggest to always use `consensus=False` when you are using a database different from the Omnipath. \n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "12052b3b-854f-41a0-a762-20de5cbc7b35", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.59 s, sys: 112 ms, total: 2.7 s\n", + "Wall time: 2.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(maxlen=3, algorithm=\"bfs\", only_signed=True, connect_with_bias=False, consensus=False) " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "aca66151-159b-4bc6-85a8-4a537bb2afdf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "SRC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN6\n", + "\n", + "PTPN6\n", + "\n", + "\n", + "\n", + "SRC->PTPN6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB1\n", + "\n", + "DAB1\n", + "\n", + "\n", + "\n", + "SRC->DAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "SRC->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1B\n", + "\n", + "CDKN1B\n", + "\n", + "\n", + "\n", + "SRC->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TRIO\n", + "\n", + "TRIO\n", + "\n", + "\n", + "\n", + "PTK2->TRIO\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNA1\n", + "\n", + "CTNNA1\n", + "\n", + "\n", + "\n", + "CDH1->CTNNA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C21\n", + "\n", + "SIGNOR-C21\n", + "\n", + "\n", + "\n", + "CDH2->SIGNOR-C21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "HES1\n", + "\n", + "HES1\n", + "\n", + "\n", + "\n", + "NOTCH1->HES1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3\n", + "\n", + "FLT3\n", + "\n", + "\n", + "\n", + "HES1->FLT3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->PTPN6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN6->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB1->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC\n", + "\n", + "DCC\n", + "\n", + "\n", + "\n", + "TRIO->DCC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "CTNNA1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SGK1\n", + "\n", + "SGK1\n", + "\n", + "\n", + "\n", + "YAP1->SGK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMO\n", + "\n", + "SMO\n", + "\n", + "\n", + "\n", + "SGK1->SMO\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SGK1->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMO->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "SIGNOR-C21->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KHSRP\n", + "\n", + "KHSRP\n", + "\n", + "\n", + "\n", + "MAPK14->KHSRP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KHSRP->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->KHSRP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3\n", + "\n", + "MAP2K3\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1\n", + "\n", + "VEPH1\n", + "\n", + "\n", + "\n", + "LATS1->VEPH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "VEPH1->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2->VEPH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2\n", + "\n", + "AMOTL2\n", + "\n", + "\n", + "\n", + "LATS2->AMOTL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDKN1B->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "markdown", + "id": "72fd1618-7eb2-4084-8bc5-af27f55afcef", + "metadata": {}, + "source": [ + "## 4. Translate IDs " + ] + }, + { + "cell_type": "markdown", + "id": "7a604021-9539-4dce-beff-8395b3209a7b", + "metadata": {}, + "source": [ + "NeKo's resource object relies on UniProt IDs. In cases where the user-defined database does not have UniProt IDs, NeKo offers the function to translate between different IDs. The translation module is based on the python package \"Unipressed\" (https://github.com/multimeric/Unipressed).\n", + "\n", + "In the example below, we use the HURI database (http://www.interactome-atlas.org/) which provides protein-protein interactions (ppi) with ENSEMBL IDs.\n", + "\n", + "To run the following example, please download the database at the following link: http://www.interactome-atlas.org/download. The example uses the `HI-Union` version of the database in `.tsv` format." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "66a43b3a-4fd6-4aa4-924d-d103b6717ab3", + "metadata": {}, + "outputs": [], + "source": [ + "#Import the module\n", + "from neko.inputs.db_translator import IDTranslator" + ] + }, + { + "cell_type": "markdown", + "id": "34f940f0-552a-4660-a4fb-20f2e3463ca7", + "metadata": {}, + "source": [ + "The `IDTranslator` function receives as arguments the input and output file names, together with the existing IDs and the target ones (in that case Ensembl to UniProtKB IDs).\n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! The `IDTranslator` can take several minutes the first time you translate a database, depending on the size of the database.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "8fcdcd64-429d-40ec-8ec2-8d1d39c8b25f", + "metadata": {}, + "outputs": [], + "source": [ + "translator = IDTranslator('HI-union.tsv', 'genes_translated.csv', 'Ensembl', 'UniProtKB-Swiss-Prot', has_header=False, input_columns=['source', 'target'], processes=12)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "c5c4cb0e-608d-49b5-9819-ed398600f642", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,217 - IDTranslator_140412855874560 - INFO - Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,301 - IDTranslator_140412855874560 - INFO - Loaded 64006 rows with 9094 unique IDs
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Loaded 64006 rows with 9094 unique IDs\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,314 - IDTranslator_140412855874560 - INFO - Loaded progress from checkpoint_batch_91.pkl
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Loaded progress from checkpoint_batch_91.pkl\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ea6e682b70b54a9f85465f17641d929e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing batches: 0it [00:00, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,627 - IDTranslator_140412855874560 - INFO - Applying translation to dataframe...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Applying translation to dataframe...\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:01,954 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Results saved to genes_translated.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,150 - IDTranslator_140412855874560 - INFO - ID translation process completed in 109.93 seconds
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:ID translation process completed in 109.93 seconds\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,170 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,173 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translated entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,178 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Expansion factor: 1.00\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,182 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translation success rate: 100.00%\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 49s, sys: 727 ms, total: 1min 49s\n", + "Wall time: 1min 49s\n" + ] + } + ], + "source": [ + "%%time\n", + "translator.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "273c86d0-d929-4c2b-8712-f303ffd497ee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,439 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated_cleaned.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Results saved to genes_translated_cleaned.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,442 - IDTranslator_140412855874560 - INFO - Removed 0 untranslated entries.
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Removed 0 untranslated entries.\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,446 - IDTranslator_140412855874560 - INFO - Cleaned database saved to genes_translated_cleaned.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Cleaned database saved to genes_translated_cleaned.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,450 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,453 - IDTranslator_140412855874560 - INFO - Cleaned entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Cleaned entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,472 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,475 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translated entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,479 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Expansion factor: 1.00\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,483 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translation success rate: 100.00%\n" + ] + } + ], + "source": [ + "translator.remove_untranslated_entries()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1865e7f6-251f-43eb-9c5d-1be75c07f9c1", + "metadata": {}, + "outputs": [], + "source": [ + "huri = pd.read_csv(\"genes_translated_cleaned.csv\", usecols=[\"source_UniProtKB-Swiss-Prot\", \"target_UniProtKB-Swiss-Prot\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a791bd79-37ac-451d-a683-b4446fc501b7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_UniProtKB-Swiss-Prottarget_UniProtKB-Swiss-Prot
0Q9H2S6Q9NPE6
1Q9H2S6Q9BXK5
2Q9H2S6O60238
3Q9H2S6P20138
4Q9H2S6Q9UM44
\n", + "
" + ], + "text/plain": [ + " source_UniProtKB-Swiss-Prot target_UniProtKB-Swiss-Prot\n", + "0 Q9H2S6 Q9NPE6\n", + "1 Q9H2S6 Q9BXK5\n", + "2 Q9H2S6 O60238\n", + "3 Q9H2S6 P20138\n", + "4 Q9H2S6 Q9UM44" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "huri.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "03c31d3f-da2a-4e37-8430-09f659c6325e", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3ff873f3-e984-4cd2-98e5-702190ffd49f", + "metadata": {}, + "outputs": [], + "source": [ + "mapping = {\"source_UniProtKB-Swiss-Prot\": \"source\", \"target_UniProtKB-Swiss-Prot\": \"target\"}\n", + "resources.add_resources(huri, columns=mapping, reset_index=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "10d6767e-88a1-4e08-8797-2abcb1a7ef4c", + "metadata": {}, + "outputs": [], + "source": [ + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "37922f45-b399-427a-a103-26fdfea2e751", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionform_complex
0Q9H2S6Q9NPE6FalseFalseFalseFalse
1Q9H2S6Q9BXK5FalseFalseFalseFalse
2Q9H2S6O60238FalseFalseFalseFalse
3Q9H2S6P20138FalseFalseFalseFalse
4Q9H2S6Q9UM44FalseFalseFalseFalse
.....................
64060B2RXH8B2RXH8FalseFalseFalseFalse
64061Q8NHW4Q6IN84FalseFalseFalseFalse
64062ENSG00000276076ENSG00000276076FalseFalseFalseFalse
64063Q9UI36Q9UI36FalseFalseFalseFalse
64064ENSG00000280987ENSG00000280987FalseFalseFalseFalse
\n", + "

64065 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 Q9H2S6 Q9NPE6 False False \n", + "1 Q9H2S6 Q9BXK5 False False \n", + "2 Q9H2S6 O60238 False False \n", + "3 Q9H2S6 P20138 False False \n", + "4 Q9H2S6 Q9UM44 False False \n", + "... ... ... ... ... \n", + "64060 B2RXH8 B2RXH8 False False \n", + "64061 Q8NHW4 Q6IN84 False False \n", + "64062 ENSG00000276076 ENSG00000276076 False False \n", + "64063 Q9UI36 Q9UI36 False False \n", + "64064 ENSG00000280987 ENSG00000280987 False False \n", + "\n", + " is_inhibition form_complex \n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", + "... ... ... \n", + "64060 False False \n", + "64061 False False \n", + "64062 False False \n", + "64063 False False \n", + "64064 False False \n", + "\n", + "[64065 rows x 6 columns]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "248682b9-1652-4c97-ab20-2247e0ff8f65", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"CD33\", \"TNMD\", \"AMIGO1\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "1412d526-549b-4bf5-aede-02b6d61475ba", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9941ca2a-e7a3-4dfd-9307-1491c987fe31", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1.connect_network_radially(max_len=1, only_signed=False, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "2681f07d-d73d-46da-9f69-bb0db96be6c6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "TNMD\n", + "\n", + "TNMD\n", + "\n", + "\n", + "\n", + "BNIP3\n", + "\n", + "BNIP3\n", + "\n", + "\n", + "\n", + "TNMD->BNIP3\n", + "\n", + "\n", + "\n", + "\n", + "AMIGO1\n", + "\n", + "AMIGO1\n", + "\n", + "\n", + "\n", + "TNMD->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TMEM79\n", + "\n", + "TMEM79\n", + "\n", + "\n", + "\n", + "TNMD->TMEM79\n", + "\n", + "\n", + "\n", + "\n", + "CD33\n", + "\n", + "CD33\n", + "\n", + "\n", + "\n", + "TNMD->CD33\n", + "\n", + "\n", + "\n", + "\n", + "BNIP3->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TMEM79->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TTMP\n", + "\n", + "TTMP\n", + "\n", + "\n", + "\n", + "CD33->TTMP\n", + "\n", + "\n", + "\n", + "\n", + "RPRM\n", + "\n", + "RPRM\n", + "\n", + "\n", + "\n", + "CD33->RPRM\n", + "\n", + "\n", + "\n", + "\n", + "CXCL9\n", + "\n", + "CXCL9\n", + "\n", + "\n", + "\n", + "CD33->CXCL9\n", + "\n", + "\n", + "\n", + "\n", + "TTMP->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "RPRM->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "CXCL9->AMIGO1\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "279d14a9-4f0f-4d8d-b0ee-397dbf94a8b7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/3_stepwise_connection.ipynb.txt b/_sources/notebooks/3_stepwise_connection.ipynb.txt new file mode 100644 index 0000000..e446635 --- /dev/null +++ b/_sources/notebooks/3_stepwise_connection.ipynb.txt @@ -0,0 +1,1999 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4a9a534a-fe48-4b2a-aa2e-b5d1f34ddc18", + "metadata": {}, + "source": [ + "# Stepwise connection: a focus on the INE algorithm\n", + "\n", + "This notebook provides the steps to build a network starting from a list of genes, and using the Iterative Neighbor Expansion\n", + "(INE) algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9b0ac70e-94e7-47f1-82ad-52e97670f930", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 15 µs, sys: 4 µs, total: 19 µs\n", + "Wall time: 21 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "ffe87ac9-d554-4b52-ac5e-1a9f161521c0", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2682886d-8a3c-4042-8612-c562e2c9aae8", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"PIK3CA\",\"MAP2K1\",\"GSK3B\",\"MAPK14\",\"CTNNB1\",\"AKT1\",\"MAP3K7\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4649d1ea-6ea3-4216-ba4a-e79d400a2f10", + "metadata": {}, + "outputs": [], + "source": [ + "output_nodes_prosurvival = ['CCND1','MYC','TCF7L2']" + ] + }, + { + "cell_type": "markdown", + "id": "92ee5dca-d1bb-40fd-972c-6c93dc00b278", + "metadata": {}, + "source": [ + "## 2. Specify SIGNOR resource" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "50c901df-efd6-487b-96d6-ff80c0bcf3ef", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "a902ebc8-02f4-4737-96e9-dd53fc1441dd", + "metadata": {}, + "source": [ + "## 3. Create a network using as input the gene set. \n" + ] + }, + { + "cell_type": "markdown", + "id": "c68a3af3-755f-41d5-a783-8ea961013fe1", + "metadata": {}, + "source": [ + "### 3A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9839c6da-9677-40ae-a0d0-d087fb26173a", + "metadata": {}, + "outputs": [], + "source": [ + "new_net = Network(initial_nodes = genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "6efbbab0-e58c-40d9-9092-fdc3d205153c", + "metadata": {}, + "source": [ + "### 3B. Connect nodes\n", + "\n", + "The INE algorith connects the input nodes by looking and introducing all their immediate neighbors into the network. If the nodes remain unconnected, the immediate neighbors of the newly introduced nodes are added into the network. The process ends either when a complete network is reached or until the user-specified threshold of expansion steps (i.e., `max_len`) is specified.\n", + "\n", + "The algorithm also allows the definition of `outputs`, which are nodes that should be connected to the network with only incoming edges. For instance, these nodes might represent phenotypic markers (e.g., proliferation) of interest.\n", + "\n", + "At the end of the algorithm, any nodes that do not have a source in the edge dataframe and are not in the output node are removed.." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "aee96adf-f29d-41f1-9dec-6d1ce8b18deb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 7.83 s, sys: 2.45 ms, total: 7.83 s\n", + "Wall time: 7.84 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net.connect_as_atopo(max_len=1, strategy=\"radial\",outputs=output_nodes_prosurvival)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a88f32d3-2f92-4cdb-bf44-1df600fa8847", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P31749P49840Noneinhibition11035810
1P31749P46937Noneinhibition12535517
2P31749P42345Nonestimulation15829723
3P31749P04150Noneinhibition24291004
4P31749Q01860Nonestimulation23041284
..................
190SIGNOR-PF4P01106Nonestimulation32482868
213Q16539P24385Noneinhibition8702807
229P28482P01106Nonestimulation8386367
241P49841P24385Noneinhibition16504004; 9832503; 23552696
242P49841P01106Noneinhibition11018017; 16023596; 14563837
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " source target Type Effect References\n", + "0 P31749 P49840 None inhibition 11035810\n", + "1 P31749 P46937 None inhibition 12535517\n", + "2 P31749 P42345 None stimulation 15829723\n", + "3 P31749 P04150 None inhibition 24291004\n", + "4 P31749 Q01860 None stimulation 23041284\n", + ".. ... ... ... ... ...\n", + "190 SIGNOR-PF4 P01106 None stimulation 32482868\n", + "213 Q16539 P24385 None inhibition 8702807\n", + "229 P28482 P01106 None stimulation 8386367\n", + "241 P49841 P24385 None inhibition 16504004; 9832503; 23552696\n", + "242 P49841 P01106 None inhibition 11018017; 16023596; 14563837\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_net.edges" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d6d150fd-0643-4509-9b50-ac4f79344341", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "AKT1\n", + "\n", + "AKT1\n", + "\n", + "\n", + "\n", + "GSK3A\n", + "\n", + "GSK3A\n", + "\n", + "\n", + "\n", + "AKT1->GSK3A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "AKT1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR\n", + "\n", + "MTOR\n", + "\n", + "\n", + "\n", + "AKT1->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR3C1\n", + "\n", + "NR3C1\n", + "\n", + "\n", + "\n", + "AKT1->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU5F1\n", + "\n", + "POU5F1\n", + "\n", + "\n", + "\n", + "AKT1->POU5F1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR\n", + "\n", + "AR\n", + "\n", + "\n", + "\n", + "AKT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRAF\n", + "\n", + "BRAF\n", + "\n", + "\n", + "\n", + "AKT1->BRAF\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TTC3\n", + "\n", + "TTC3\n", + "\n", + "\n", + "\n", + "AKT1->TTC3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "AKT1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1\n", + "\n", + "CREB1\n", + "\n", + "\n", + "\n", + "AKT1->CREB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1\n", + "\n", + "RAF1\n", + "\n", + "\n", + "\n", + "AKT1->RAF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP\n", + "\n", + "DAB2IP\n", + "\n", + "\n", + "\n", + "AKT1->DAB2IP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RARA\n", + "\n", + "RARA\n", + "\n", + "\n", + "\n", + "AKT1->RARA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4\n", + "\n", + "MAP2K4\n", + "\n", + "\n", + "\n", + "AKT1->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "AKT1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN1\n", + "\n", + "PTPN1\n", + "\n", + "\n", + "\n", + "AKT1->PTPN1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K8\n", + "\n", + "MAP3K8\n", + "\n", + "\n", + "\n", + "AKT1->MAP3K8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "AKT1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "AKT1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GAB2\n", + "\n", + "GAB2\n", + "\n", + "\n", + "\n", + "AKT1->GAB2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRCA1\n", + "\n", + "BRCA1\n", + "\n", + "\n", + "\n", + "AKT1->BRCA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3A->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "GSK3A->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "NR3C1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU5F1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1\n", + "\n", + "MAP2K1\n", + "\n", + "\n", + "\n", + "BRAF->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TTC3->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->POU5F1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF72\n", + "\n", + "SIGNOR-PF72\n", + "\n", + "\n", + "\n", + "CTNNB1->SIGNOR-PF72\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG\n", + "\n", + "PPARG\n", + "\n", + "\n", + "\n", + "CTNNB1->PPARG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "CTNNB1->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF7L2\n", + "\n", + "TCF7L2\n", + "\n", + "\n", + "\n", + "CTNNB1->TCF7L2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA\n", + "\n", + "PIK3CA\n", + "\n", + "\n", + "\n", + "DAB2IP->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RARA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K8->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CREB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN\n", + "\n", + "PTEN\n", + "\n", + "\n", + "\n", + "GSK3B->PTEN\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PSEN1\n", + "\n", + "PSEN1\n", + "\n", + "\n", + "\n", + "GSK3B->PSEN1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C110\n", + "\n", + "SIGNOR-C110\n", + "\n", + "\n", + "\n", + "GSK3B->SIGNOR-C110\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "APC\n", + "\n", + "APC\n", + "\n", + "\n", + "\n", + "GSK3B->APC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF26\n", + "\n", + "SIGNOR-PF26\n", + "\n", + "\n", + "\n", + "GSK3B->SIGNOR-PF26\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "GSK3B->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MACF1\n", + "\n", + "MACF1\n", + "\n", + "\n", + "\n", + "GSK3B->MACF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKAP11\n", + "\n", + "AKAP11\n", + "\n", + "\n", + "\n", + "GSK3B->AKAP11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LRP6\n", + "\n", + "LRP6\n", + "\n", + "\n", + "\n", + "GSK3B->LRP6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAML1\n", + "\n", + "MAML1\n", + "\n", + "\n", + "\n", + "GSK3B->MAML1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FRAT1\n", + "\n", + "FRAT1\n", + "\n", + "\n", + "\n", + "GSK3B->FRAT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K4\n", + "\n", + "MAP3K4\n", + "\n", + "\n", + "\n", + "GSK3B->MAP3K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHLPP1\n", + "\n", + "PHLPP1\n", + "\n", + "\n", + "\n", + "GSK3B->PHLPP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GAB2->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRCA1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF72->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CHEBI_16618\n", + "\n", + "CHEBI_16618\n", + "\n", + "\n", + "\n", + "PIK3CA->CHEBI_16618\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IRS1\n", + "\n", + "IRS1\n", + "\n", + "\n", + "\n", + "PIK3CA->IRS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C156\n", + "\n", + "SIGNOR-C156\n", + "\n", + "\n", + "\n", + "PIK3CA->SIGNOR-C156\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "PIK3CA->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2\n", + "\n", + "AKT2\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3R1\n", + "\n", + "PIK3R1\n", + "\n", + "\n", + "\n", + "PIK3CA->PIK3R1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CHEBI_16618->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IRS1->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C156->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3R1->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->IRS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1\n", + "\n", + "MAPK1\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "MAP2K1->SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "MAP2K1->SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->PPARG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->AKT2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FGFR1\n", + "\n", + "FGFR1\n", + "\n", + "\n", + "\n", + "MAPK14->FGFR1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DUSP1\n", + "\n", + "DUSP1\n", + "\n", + "\n", + "\n", + "MAPK14->DUSP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN7\n", + "\n", + "PTPN7\n", + "\n", + "\n", + "\n", + "MAPK14->PTPN7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAB1\n", + "\n", + "TAB1\n", + "\n", + "\n", + "\n", + "MAPK14->TAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CASP3\n", + "\n", + "CASP3\n", + "\n", + "\n", + "\n", + "MAPK14->CASP3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF25\n", + "\n", + "SIGNOR-PF25\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FGFR1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DUSP1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN7->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAB1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "TAB1->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CASP3->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF25->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PSEN1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C110->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "APC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF26->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MACF1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKAP11->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LRP6->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAML1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FRAT1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K4->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHLPP1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->TAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP3K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3\n", + "\n", + "MAP2K3\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K6\n", + "\n", + "MAP2K6\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K6->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c100869b-d8de-4845-8195-7c7204854b96", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "MAPK14->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"CCND1\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "615e2083-b57b-4197-9a9a-3fff22dddb38", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "GSK3A\n", + "\n", + "GSK3A\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "GSK3A->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAPK3->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1\n", + "\n", + "MAPK1\n", + "\n", + "\n", + "\n", + "MAPK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"MYC\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4cea74fa-baca-409b-bb51-d0863b309fdf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "TCF7L2\n", + "\n", + "TCF7L2\n", + "\n", + "\n", + "\n", + "CTNNB1->TCF7L2\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"TCF7L2\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b75aaed-57cc-4bd2-852b-8a882d553aa1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/4_Connect_upstream.ipynb.txt b/_sources/notebooks/4_Connect_upstream.ipynb.txt new file mode 100644 index 0000000..9d8b1a7 --- /dev/null +++ b/_sources/notebooks/4_Connect_upstream.ipynb.txt @@ -0,0 +1,1934 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c5a95f57-bbde-4966-be26-881055e5eb70", + "metadata": {}, + "source": [ + "# Connect to upstream components\n", + "\n", + "This notebook shows a new functionality of the tool to connect the input gene list. Instead of looking for a path, as the default connecting strategy of the tool, this functionality aims to find those upstream regulators that regulate as many of the input genes." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a80a2864-7e94-4a35-a2d0-5abc7db75775", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 11 µs, sys: 2 µs, total: 13 µs\n", + "Wall time: 15.7 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "20901f1d-ec6c-41c8-9984-53618bac3c0c", + "metadata": {}, + "source": [ + "## 1. Import CollecTRI interactions from Omnipath" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0bec85c0-c478-4608-b1f0-5c3aa2a1abe4", + "metadata": {}, + "outputs": [], + "source": [ + "collectri = op.interactions.CollecTRI.get()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ec5e010f-62bb-4b77-9197-719fe6edd152", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources.add_resources(collectri, name = 'collectri')\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "c13d855a-b1dd-4ec3-8402-2ef396e77889", + "metadata": {}, + "source": [ + "## 2. Define the nodes of interest and create network object with CollecTRI interactions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b52b400a-567a-415a-b7c7-5197c2668280", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"CDH1\", \"CDH2\", \"VIM\", \"LATS1\", \"LATS2\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e4206d7d-9785-467b-a913-5279701cd2d9", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "ff4d3a0a-a987-4be4-950a-d5b03d3746a5", + "metadata": {}, + "source": [ + "## 3. Connect nodes to upstream regulators\n", + "\n", + "The `connect_to_upstream_nodes` looks for the regulators of each of the input nodes, and ranks each of the regulators based on the number of the input nodes they regulate. \n", + "\n", + "The `rank` argument refers to the number of the ranked regulators that should be included in the network\n", + "The `depth` argument refers to how many steps away from the input nodes the algorithm should go. The higher the number the more regulatory layers will be included in the final network." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "589627c6-79bf-42ce-b676-5c76d1762cd1", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning: Some target genes are not present in the DataFrame and will be ignored: {'O96006'}\n", + "CPU times: user 1.68 s, sys: 2 ms, total: 1.69 s\n", + "Wall time: 1.68 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_to_upstream_nodes(rank = 1, depth=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "632aa19f-9876-45c8-bb71-d2febd297aa1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "FOXL2\n", + "\n", + "FOXL2\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "FOXL2->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR\n", + "\n", + "AR\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "AR->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "AR->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "AR->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "AR->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "AR->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "AR->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ZBED1\n", + "\n", + "ZBED1\n", + "\n", + "\n", + "\n", + "ZBED1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17535_P53539\n", + "\n", + "P17535_P53539\n", + "\n", + "\n", + "\n", + "P17535_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VSX2\n", + "\n", + "VSX2\n", + "\n", + "\n", + "\n", + "VSX2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB1\n", + "\n", + "NFKB1\n", + "\n", + "\n", + "\n", + "NFKB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO1\n", + "\n", + "FOXO1\n", + "\n", + "\n", + "\n", + "FOXO1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FUS\n", + "\n", + "FUS\n", + "\n", + "\n", + "\n", + "FUS->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q00653\n", + "\n", + "P19838_Q00653\n", + "\n", + "\n", + "\n", + "P19838_Q00653->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HIF1A\n", + "\n", + "HIF1A\n", + "\n", + "\n", + "\n", + "HIF1A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q04206\n", + "\n", + "P19838_Q04206\n", + "\n", + "\n", + "\n", + "P19838_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB2\n", + "\n", + "NFKB2\n", + "\n", + "\n", + "\n", + "NFKB2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STAT3\n", + "\n", + "STAT3\n", + "\n", + "\n", + "\n", + "STAT3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NKX3-1\n", + "\n", + "NKX3-1\n", + "\n", + "\n", + "\n", + "NKX3-1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX9\n", + "\n", + "SOX9\n", + "\n", + "\n", + "\n", + "SOX9->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q04206_Q04864\n", + "\n", + "Q04206_Q04864\n", + "\n", + "\n", + "\n", + "Q04206_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFIC\n", + "\n", + "NFIC\n", + "\n", + "\n", + "\n", + "NFIC->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "WT1\n", + "\n", + "WT1\n", + "\n", + "\n", + "\n", + "WT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17275_P17535\n", + "\n", + "P17275_P17535\n", + "\n", + "\n", + "\n", + "P17275_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q04864\n", + "\n", + "P19838_Q04864\n", + "\n", + "\n", + "\n", + "P19838_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q01201\n", + "\n", + "P19838_Q01201\n", + "\n", + "\n", + "\n", + "P19838_Q01201->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NKX2-5\n", + "\n", + "NKX2-5\n", + "\n", + "\n", + "\n", + "NKX2-5->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELB\n", + "\n", + "RELB\n", + "\n", + "\n", + "\n", + "RELB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HOXC8\n", + "\n", + "HOXC8\n", + "\n", + "\n", + "\n", + "HOXC8->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRY\n", + "\n", + "SRY\n", + "\n", + "\n", + "\n", + "SRY->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFE2L2\n", + "\n", + "NFE2L2\n", + "\n", + "\n", + "\n", + "NFE2L2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HOXB13\n", + "\n", + "HOXB13\n", + "\n", + "\n", + "\n", + "HOXB13->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15407_P17535\n", + "\n", + "P15407_P17535\n", + "\n", + "\n", + "\n", + "P15407_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF20\n", + "\n", + "TCF20\n", + "\n", + "\n", + "\n", + "TCF20->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MEIS1\n", + "\n", + "MEIS1\n", + "\n", + "\n", + "\n", + "MEIS1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYBL2\n", + "\n", + "MYBL2\n", + "\n", + "\n", + "\n", + "MYBL2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GATA4\n", + "\n", + "GATA4\n", + "\n", + "\n", + "\n", + "GATA4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARID1A\n", + "\n", + "ARID1A\n", + "\n", + "\n", + "\n", + "ARID1A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU2F1\n", + "\n", + "POU2F1\n", + "\n", + "\n", + "\n", + "POU2F1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15407_P17275\n", + "\n", + "P15407_P17275\n", + "\n", + "\n", + "\n", + "P15407_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA2\n", + "\n", + "NCOA2\n", + "\n", + "\n", + "\n", + "NCOA2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ESR2\n", + "\n", + "ESR2\n", + "\n", + "\n", + "\n", + "ESR2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SREBF1\n", + "\n", + "SREBF1\n", + "\n", + "\n", + "\n", + "SREBF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR4A1\n", + "\n", + "NR4A1\n", + "\n", + "\n", + "\n", + "NR4A1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMAD3\n", + "\n", + "SMAD3\n", + "\n", + "\n", + "\n", + "SMAD3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "E2F1\n", + "\n", + "E2F1\n", + "\n", + "\n", + "\n", + "E2F1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAX6\n", + "\n", + "PAX6\n", + "\n", + "\n", + "\n", + "PAX6->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SP1\n", + "\n", + "SP1\n", + "\n", + "\n", + "\n", + "SP1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q01201\n", + "\n", + "Q00653_Q01201\n", + "\n", + "\n", + "\n", + "Q00653_Q01201->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA4\n", + "\n", + "NCOA4\n", + "\n", + "\n", + "\n", + "NCOA4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17275_P53539\n", + "\n", + "P17275_P53539\n", + "\n", + "\n", + "\n", + "P17275_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUNB\n", + "\n", + "JUNB\n", + "\n", + "\n", + "\n", + "JUNB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SFPQ\n", + "\n", + "SFPQ\n", + "\n", + "\n", + "\n", + "SFPQ->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HNF4A\n", + "\n", + "HNF4A\n", + "\n", + "\n", + "\n", + "HNF4A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRF\n", + "\n", + "SRF\n", + "\n", + "\n", + "\n", + "SRF->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR3C1\n", + "\n", + "NR3C1\n", + "\n", + "\n", + "\n", + "NR3C1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAXX\n", + "\n", + "DAXX\n", + "\n", + "\n", + "\n", + "DAXX->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HEYL\n", + "\n", + "HEYL\n", + "\n", + "\n", + "\n", + "HEYL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q01201_Q04864\n", + "\n", + "Q01201_Q04864\n", + "\n", + "\n", + "\n", + "Q01201_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOR2\n", + "\n", + "NCOR2\n", + "\n", + "\n", + "\n", + "NCOR2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P05412\n", + "\n", + "P01100_P05412\n", + "\n", + "\n", + "\n", + "P01100_P05412->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EZH2\n", + "\n", + "EZH2\n", + "\n", + "\n", + "\n", + "EZH2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VHL\n", + "\n", + "VHL\n", + "\n", + "\n", + "\n", + "VHL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXP1\n", + "\n", + "FOXP1\n", + "\n", + "\n", + "\n", + "FOXP1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CEBPD\n", + "\n", + "CEBPD\n", + "\n", + "\n", + "\n", + "CEBPD->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q01201_Q04206\n", + "\n", + "Q01201_Q04206\n", + "\n", + "\n", + "\n", + "Q01201_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOR1\n", + "\n", + "NCOR1\n", + "\n", + "\n", + "\n", + "NCOR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P17535\n", + "\n", + "P05412_P17535\n", + "\n", + "\n", + "\n", + "P05412_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "USF2\n", + "\n", + "USF2\n", + "\n", + "\n", + "\n", + "USF2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYB\n", + "\n", + "MYB\n", + "\n", + "\n", + "\n", + "MYB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXH1\n", + "\n", + "FOXH1\n", + "\n", + "\n", + "\n", + "FOXH1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHB1\n", + "\n", + "PHB1\n", + "\n", + "\n", + "\n", + "PHB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P17275\n", + "\n", + "P01100_P17275\n", + "\n", + "\n", + "\n", + "P01100_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF21\n", + "\n", + "TCF21\n", + "\n", + "\n", + "\n", + "TCF21->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TGFB1I1\n", + "\n", + "TGFB1I1\n", + "\n", + "\n", + "\n", + "TGFB1I1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXN1\n", + "\n", + "FOXN1\n", + "\n", + "\n", + "\n", + "FOXN1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "REST\n", + "\n", + "REST\n", + "\n", + "\n", + "\n", + "REST->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HEY1\n", + "\n", + "HEY1\n", + "\n", + "\n", + "\n", + "HEY1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "REL\n", + "\n", + "REL\n", + "\n", + "\n", + "\n", + "REL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGR1\n", + "\n", + "EGR1\n", + "\n", + "\n", + "\n", + "EGR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXM1\n", + "\n", + "FOXM1\n", + "\n", + "\n", + "\n", + "FOXM1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP63\n", + "\n", + "TP63\n", + "\n", + "\n", + "\n", + "TP63->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NSD2\n", + "\n", + "NSD2\n", + "\n", + "\n", + "\n", + "NSD2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PURA\n", + "\n", + "PURA\n", + "\n", + "\n", + "\n", + "PURA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ZEB1\n", + "\n", + "ZEB1\n", + "\n", + "\n", + "\n", + "ZEB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMAD4\n", + "\n", + "SMAD4\n", + "\n", + "\n", + "\n", + "SMAD4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LEF1\n", + "\n", + "LEF1\n", + "\n", + "\n", + "\n", + "LEF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ESR1\n", + "\n", + "ESR1\n", + "\n", + "\n", + "\n", + "ESR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELA\n", + "\n", + "RELA\n", + "\n", + "\n", + "\n", + "RELA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3\n", + "\n", + "FOXO3\n", + "\n", + "\n", + "\n", + "FOXO3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LHX3\n", + "\n", + "LHX3\n", + "\n", + "\n", + "\n", + "LHX3->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "E2F4\n", + "\n", + "E2F4\n", + "\n", + "\n", + "\n", + "E2F4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P17275\n", + "\n", + "P05412_P17275\n", + "\n", + "\n", + "\n", + "P05412_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "MYC->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YBX1\n", + "\n", + "YBX1\n", + "\n", + "\n", + "\n", + "YBX1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P53539\n", + "\n", + "P05412_P53539\n", + "\n", + "\n", + "\n", + "P05412_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1\n", + "\n", + "CREB1\n", + "\n", + "\n", + "\n", + "CREB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HDAC1\n", + "\n", + "HDAC1\n", + "\n", + "\n", + "\n", + "HDAC1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR5A1\n", + "\n", + "NR5A1\n", + "\n", + "\n", + "\n", + "NR5A1->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KAT5\n", + "\n", + "KAT5\n", + "\n", + "\n", + "\n", + "KAT5->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXA1\n", + "\n", + "FOXA1\n", + "\n", + "\n", + "\n", + "FOXA1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RUNX2\n", + "\n", + "RUNX2\n", + "\n", + "\n", + "\n", + "RUNX2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P17535\n", + "\n", + "P01100_P17535\n", + "\n", + "\n", + "\n", + "P01100_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMARCC1\n", + "\n", + "SMARCC1\n", + "\n", + "\n", + "\n", + "SMARCC1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "URI1\n", + "\n", + "URI1\n", + "\n", + "\n", + "\n", + "URI1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MED1\n", + "\n", + "MED1\n", + "\n", + "\n", + "\n", + "MED1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PA2G4\n", + "\n", + "PA2G4\n", + "\n", + "\n", + "\n", + "PA2G4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STAT5A\n", + "\n", + "STAT5A\n", + "\n", + "\n", + "\n", + "STAT5A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG\n", + "\n", + "PPARG\n", + "\n", + "\n", + "\n", + "PPARG->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIAS2\n", + "\n", + "PIAS2\n", + "\n", + "\n", + "\n", + "PIAS2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NRF1\n", + "\n", + "NRF1\n", + "\n", + "\n", + "\n", + "NRF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NONO\n", + "\n", + "NONO\n", + "\n", + "\n", + "\n", + "NONO->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P15407\n", + "\n", + "P05412_P15407\n", + "\n", + "\n", + "\n", + "P05412_P15407->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GATA2\n", + "\n", + "GATA2\n", + "\n", + "\n", + "\n", + "GATA2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA1\n", + "\n", + "NCOA1\n", + "\n", + "\n", + "\n", + "NCOA1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15408_P17535\n", + "\n", + "P15408_P17535\n", + "\n", + "\n", + "\n", + "P15408_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DNMT1\n", + "\n", + "DNMT1\n", + "\n", + "\n", + "\n", + "DNMT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q04206\n", + "\n", + "Q00653_Q04206\n", + "\n", + "\n", + "\n", + "Q00653_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YY1\n", + "\n", + "YY1\n", + "\n", + "\n", + "\n", + "YY1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ETV1\n", + "\n", + "ETV1\n", + "\n", + "\n", + "\n", + "ETV1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15408_P17275\n", + "\n", + "P15408_P17275\n", + "\n", + "\n", + "\n", + "P15408_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TWIST1\n", + "\n", + "TWIST1\n", + "\n", + "\n", + "\n", + "TWIST1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN\n", + "\n", + "JUN\n", + "\n", + "\n", + "\n", + "JUN->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUND\n", + "\n", + "JUND\n", + "\n", + "\n", + "\n", + "JUND->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXD2\n", + "\n", + "FOXD2\n", + "\n", + "\n", + "\n", + "FOXD2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ELF3\n", + "\n", + "ELF3\n", + "\n", + "\n", + "\n", + "ELF3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNW1\n", + "\n", + "SNW1\n", + "\n", + "\n", + "\n", + "SNW1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q04864\n", + "\n", + "Q00653_Q04864\n", + "\n", + "\n", + "\n", + "Q00653_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA3\n", + "\n", + "NCOA3\n", + "\n", + "\n", + "\n", + "NCOA3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LHX4\n", + "\n", + "LHX4\n", + "\n", + "\n", + "\n", + "LHX4->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GABPA\n", + "\n", + "GABPA\n", + "\n", + "\n", + "\n", + "GABPA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAF1\n", + "\n", + "TAF1\n", + "\n", + "\n", + "\n", + "TAF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53\n", + "\n", + "TP53\n", + "\n", + "\n", + "\n", + "TP53->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ERG\n", + "\n", + "ERG\n", + "\n", + "\n", + "\n", + "ERG->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P15408\n", + "\n", + "P05412_P15408\n", + "\n", + "\n", + "\n", + "P05412_P15408->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6174ce2-b592-4970-9e1e-a936ab4937c9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/5_build_phosphosite_network.ipynb.txt b/_sources/notebooks/5_build_phosphosite_network.ipynb.txt new file mode 100644 index 0000000..c60cf83 --- /dev/null +++ b/_sources/notebooks/5_build_phosphosite_network.ipynb.txt @@ -0,0 +1,1007 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4feb78a3-acc2-455c-b206-c37b7ea47932", + "metadata": {}, + "source": [ + "# Build network based on kinase-phosphosite interactions\n", + "\n", + "This notebook provides the code to create a network based on kinase-substrate interactions and the annotated effect of phosphorylation (based on PhosphositePlus) on the activity of the substrate." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.41 s, sys: 1.63 s, total: 7.04 s\n", + "Wall time: 5.17 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, phosphosite\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "e41d36f1-b603-4d04-bea5-972c03764c92", + "metadata": {}, + "source": [ + "## 1. Specify kinase-substrate interaction file and phosphosite effect annotation\n", + "\n", + "In this example, both files we utilize are from PhosphositePlus." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "17d662bc-dc7f-4597-9a42-d9da7bdd1ed3", + "metadata": {}, + "outputs": [], + "source": [ + "kinase_int_file = (\"../neko/_data/Kinase_Substrate_Dataset\")\n", + "phospho_effect_file = (\"../neko/_data/Regulatory_sites\")" + ] + }, + { + "cell_type": "markdown", + "id": "d0fd3a1c-8419-4aa7-a7bd-30f92df14c69", + "metadata": {}, + "source": [ + "## 2. Add interactions as a resource database\n", + "\n", + "The *_process_psp_interactions_* function parses the provided files to create an interaction database in the Omnipath format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4d4cfe2f-fe7c-4764-9100-9543ac1a9a1b", + "metadata": {}, + "outputs": [], + "source": [ + "resources = phosphosite()" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 3. Define a set of phosphosites we are interested in" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a3fea926-81f1-4826-b91c-3b04124de715", + "metadata": {}, + "outputs": [], + "source": [ + "genes = ['AKT1S1_T246', 'GSK3B_S9', 'AKT1_S473', 'HSPB1_S78', 'HSPB1_S82', 'MAPK14_T180', 'MAPK14_Y182', 'MAP2K1_S218', 'MAP2K1_S222', 'RPS6KA1_S380', 'MTOR_S2448', 'JUN_S63', 'MAPK3_T202', 'MAPK3_Y204']" + ] + }, + { + "cell_type": "markdown", + "id": "59d3c824-ad97-43ae-9bf4-6657e7bcf72f", + "metadata": {}, + "source": [ + "## 4. Build network" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9c824c50", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.43 s, sys: 156 ms, total: 2.59 s\n", + "Wall time: 2.58 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1 = Network(genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "65f04b49-f5dc-4fe1-bc20-7a4094f011b3", + "metadata": {}, + "source": [ + "
\n", + "\n", + "**Note**\n", + " \n", + "Neko is based on UniProt IDs. It is still possible to use databases with other IDs, but an error message will appear during the translation progress, as in the example below. \n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9a07d77b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error: node GSK3B is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAPKAPK2 is not present in the resources database\n", + "Error: node MAPKAPK2 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node CDK2 is not present in the resources database\n", + "Error: node CDK2 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node RPS6KA1 is not present in the resources database\n", + "Error: node RPS6KA1 is not present in the resources database\n", + "Error: node MTOR is not present in the resources database\n", + "Error: node MTOR is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node PDPK1 is not present in the resources database\n", + "Error: node PDPK1 is not present in the resources database\n", + "Error: node PRKACA is not present in the resources database\n", + "Error: node PRKACA is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node MAP3K11 is not present in the resources database\n", + "Error: node MAP3K11 is not present in the resources database\n", + "Error: node MAP2K4 is not present in the resources database\n", + "Error: node MAP2K4 is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node ARAF is not present in the resources database\n", + "Error: node ARAF is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node RAF1 is not present in the resources database\n", + "Error: node RAF1 is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node CDK1 is not present in the resources database\n", + "Error: node CDK1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "CPU times: user 724 ms, sys: 11.1 ms, total: 735 ms\n", + "Wall time: 733 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(algorithm= 'bfs',only_signed=True, connect_with_bias=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "152b9434", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "GSK3B_S9\n", + "\n", + "GSK3B_S9\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B_S9->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TBK1_S172\n", + "\n", + "TBK1_S172\n", + "\n", + "\n", + "\n", + "GSK3B->TBK1_S172\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S51\n", + "\n", + "SRC_S51\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_S51\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_Y419\n", + "\n", + "SRC_Y419\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_Y419\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K11_S789\n", + "\n", + "MAP3K11_S789\n", + "\n", + "\n", + "\n", + "GSK3B->MAP3K11_S789\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S493\n", + "\n", + "SRC_S493\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_S493\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TBK1\n", + "\n", + "TBK1\n", + "\n", + "\n", + "\n", + "TBK1_S172->TBK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_T308\n", + "\n", + "AKT1_T308\n", + "\n", + "\n", + "\n", + "TBK1->AKT1_T308\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473\n", + "\n", + "AKT1_S473\n", + "\n", + "\n", + "\n", + "TBK1->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1\n", + "\n", + "AKT1\n", + "\n", + "\n", + "\n", + "AKT1_T308->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1->GSK3B_S9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1S1_T246\n", + "\n", + "AKT1S1_T246\n", + "\n", + "\n", + "\n", + "AKT1->AKT1S1_T246\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR_S2448\n", + "\n", + "MTOR_S2448\n", + "\n", + "\n", + "\n", + "AKT1->MTOR_S2448\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14_T180\n", + "\n", + "MAPK14_T180\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "MAPK14_T180->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2_T222\n", + "\n", + "MAPKAPK2_T222\n", + "\n", + "\n", + "\n", + "MAPK14->MAPKAPK2_T222\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2\n", + "\n", + "MAPKAPK2\n", + "\n", + "\n", + "\n", + "MAPKAPK2_T222->MAPKAPK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14_Y182\n", + "\n", + "MAPK14_Y182\n", + "\n", + "\n", + "\n", + "MAPK14_Y182->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1_S218\n", + "\n", + "MAP2K1_S218\n", + "\n", + "\n", + "\n", + "MAP2K1\n", + "\n", + "MAP2K1\n", + "\n", + "\n", + "\n", + "MAP2K1_S218->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T202\n", + "\n", + "MAPK3_T202\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3_T202\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T207\n", + "\n", + "MAPK3_T207\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3_T207\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAPK3_T202->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK2_T160\n", + "\n", + "CDK2_T160\n", + "\n", + "\n", + "\n", + "MAPK3->CDK2_T160\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1_S380\n", + "\n", + "RPS6KA1_S380\n", + "\n", + "\n", + "\n", + "MAPK3->RPS6KA1_S380\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK2\n", + "\n", + "CDK2\n", + "\n", + "\n", + "\n", + "CDK2_T160->CDK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S477\n", + "\n", + "AKT1_S477\n", + "\n", + "\n", + "\n", + "CDK2->AKT1_S477\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S477->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1_S222\n", + "\n", + "MAP2K1_S222\n", + "\n", + "\n", + "\n", + "MAP2K1_S222->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T207->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1\n", + "\n", + "RPS6KA1\n", + "\n", + "\n", + "\n", + "RPS6KA1_S380->RPS6KA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1->GSK3B_S9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR\n", + "\n", + "MTOR\n", + "\n", + "\n", + "\n", + "MTOR_S2448->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_Y204\n", + "\n", + "MAPK3_Y204\n", + "\n", + "\n", + "\n", + "MAPK3_Y204->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "SRC_S51->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PDPK1_Y376\n", + "\n", + "PDPK1_Y376\n", + "\n", + "\n", + "\n", + "SRC->PDPK1_Y376\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKD1_Y463\n", + "\n", + "PRKD1_Y463\n", + "\n", + "\n", + "\n", + "SRC->PRKD1_Y463\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET_Y905\n", + "\n", + "RET_Y905\n", + "\n", + "\n", + "\n", + "SRC->RET_Y905\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF_Y302\n", + "\n", + "ARAF_Y302\n", + "\n", + "\n", + "\n", + "SRC->ARAF_Y302\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1_Y340\n", + "\n", + "RAF1_Y340\n", + "\n", + "\n", + "\n", + "SRC->RAF1_Y340\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1_Y15\n", + "\n", + "CDK1_Y15\n", + "\n", + "\n", + "\n", + "SRC->CDK1_Y15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PDPK1\n", + "\n", + "PDPK1\n", + "\n", + "\n", + "\n", + "PDPK1_Y376->PDPK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA_T198\n", + "\n", + "PRKACA_T198\n", + "\n", + "\n", + "\n", + "PDPK1->PRKACA_T198\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PRKACA_T198->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HSPB1_S78\n", + "\n", + "HSPB1_S78\n", + "\n", + "\n", + "\n", + "PRKACA->HSPB1_S78\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_Y419->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKD1\n", + "\n", + "PRKD1\n", + "\n", + "\n", + "\n", + "PRKD1_Y463->PRKD1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HSPB1_S82\n", + "\n", + "HSPB1_S82\n", + "\n", + "\n", + "\n", + "PRKD1->HSPB1_S82\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN_S63\n", + "\n", + "JUN_S63\n", + "\n", + "\n", + "\n", + "PRKD1->JUN_S63\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K11\n", + "\n", + "MAP3K11\n", + "\n", + "\n", + "\n", + "MAP3K11_S789->MAP3K11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4_S257\n", + "\n", + "MAP2K4_S257\n", + "\n", + "\n", + "\n", + "MAP3K11->MAP2K4_S257\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4\n", + "\n", + "MAP2K4\n", + "\n", + "\n", + "\n", + "MAP2K4_S257->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4->MAPK14_T180\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET\n", + "\n", + "RET\n", + "\n", + "\n", + "\n", + "RET_Y905->RET\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET->MAPK14_Y182\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET->MAPK3_Y204\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S493->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF\n", + "\n", + "ARAF\n", + "\n", + "\n", + "\n", + "ARAF_Y302->ARAF\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF->MAP2K1_S218\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1\n", + "\n", + "RAF1\n", + "\n", + "\n", + "\n", + "RAF1_Y340->RAF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1->MAP2K1_S222\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDK1_Y15->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_S343\n", + "\n", + "MAPK3_S343\n", + "\n", + "\n", + "\n", + "CDK1->MAPK3_S343\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_S343->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d1902496-e08c-4628-bdb0-f4d0b83c82f3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/6_ontology.ipynb.txt b/_sources/notebooks/6_ontology.ipynb.txt new file mode 100644 index 0000000..c33a384 --- /dev/null +++ b/_sources/notebooks/6_ontology.ipynb.txt @@ -0,0 +1,363 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Connect to downstream Gene Ontology terms.\n", + "\n", + "This notebook showcases the functionality of Omniflow that connects the existing nodes of a network to a phenotype of interest. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.88 s, sys: 1.59 s, total: 7.46 s\n", + "Wall time: 5.06 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 1. Build network\n", + "\n", + "Please see the [Network building](https://omniflow-project.readthedocs.io/en/latest/notebooks/network_building.html) tutorial for detailed explanations of each step." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "370180cc", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 19.7 ms, sys: 123 µs, total: 19.8 ms\n", + "Wall time: 19.6 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)" + ] + }, + { + "cell_type": "markdown", + "id": "8ed135d3-9f71-4cec-9381-96c63fba766e", + "metadata": {}, + "source": [ + "### 2. Connect to Gene Ontology (GO) term\n", + "\n", + "Connect the nodes of the Network with markers of a certain phenotype, from Gene Ontology. \n", + "\n", + "The _connect_genes_to_phenotype_ function will look for interactions between the nodes of the network and genes annotated with a GO term of interest. The argument _compress_ replaces the individual phenotype-specific genes into one phenotype node.\n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "We suggest to the users to choose gene ontology terms lower in the hierarcy (e.g., execution phase of apoptosis _versus_ apoptosis) to avoid the inclusion of too many genes.\n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fa499a38-c22a-4a0e-b1d4-3ffb10e4a370", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start requesting genes from Gene Ontology\n", + "Fetching from: https://golr-aux.geneontology.io/solr/select?defType=edismax&qt=standard&indent=on&wt=csv&rows=100000&start=0&fl=bioentity_label&facet=true&facet.mincount=1&facet.sort=count&json.nl=arrarr&facet.limit=25&hl=true&hl.simple.pre=%3Cem%20class=%22hilite%22%3E&hl.snippets=1000&csv.encapsulator=&csv.separator=%09&csv.header=false&csv.mv.separator=%7C&fq=document_category:%22annotation%22&fq=isa_partof_closure:%22GO:0001837%22&fq=taxon_subset_closure_label:%22Homo%20sapiens%22&fq=type:%22protein%22&fq=annotation_class_label:%22epithelial%20to%20mesenchymal%20transition%22&facet.field=aspect&facet.field=taxon_subset_closure_label&facet.field=type&facet.field=evidence_subset_closure_label&facet.field=regulates_closure_label&facet.field=isa_partof_closure_label&facet.field=annotation_class_label&facet.field=qualifier&facet.field=annotation_extension_class_closure_label&facet.field=assigned_by&facet.field=panther_family_label&q=*:*\n", + "Done\n", + "Starting connecting network's nodes to: ['DACT3', 'SNAI1', 'RBPJ', 'ROCK2', 'TGFBR2', 'RFLNB', 'AKNA', 'GSK3B', 'WNT5A', 'NOTCH1', 'LOXL3', 'BMP7', 'FLNA', 'FAM83D', 'TRIM28', 'AMELX', 'EPB41L5', 'SLC39A6', 'DLG5', 'ROCK1', 'SOX9', 'ENG', 'SP6', 'SLC39A10', 'FOXF2', 'FGFR1', 'WNT11', 'NCAM1', 'BMP2', 'HNRNPAB', 'HMGA2', 'LIMS1', 'IGF1', 'CTNNB1', 'DDX5', 'TGFB1', 'TGFB2', 'TGFBR3L', 'SMAD4', 'PPP3R1', 'S100A4', 'FGFR2', 'NOG', 'CUL7', 'HGF', 'NOTCH4', 'WNT4', 'TGFBR3', 'TGFBR1', 'LEF1', 'HIF1A', 'DDX17', 'SNAI2', 'LOXL2']\n", + "CPU times: user 414 ms, sys: 4.23 ms, total: 419 ms\n", + "Wall time: 1.44 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_genes_to_phenotype(id_accession=\"GO:0001837\", phenotype=\"epithelial to mesenchymal transition\", only_signed=True, compress=True, maxlen=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "33300268-bcf6-442b-97be-c7718922a939", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "epithelial_to_mesenchymal_transition\n", + "\n", + "epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "SRC->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "NOTCH1->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7ba750f3-8440-4bf6-a37b-5c917f334fc9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P12931Q05397stimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12931epithelial_to_mesenchymal_transitioninhibitionACSN:10593980;ACSN:12123611;ACSN:15782139;ACSN...
2P46531epithelial_to_mesenchymal_transitionstimulationBioGRID:12644465;BioGRID:22143792;BioGRID:3096...
3Q05397epithelial_to_mesenchymal_transitionbimodalnan
4P46531epithelial_to_mesenchymal_transitionNaNstimulationGene Ontology
\n", + "
" + ], + "text/plain": [ + " source target Type Effect \\\n", + "0 P12931 Q05397 stimulation \n", + "1 P12931 epithelial_to_mesenchymal_transition inhibition \n", + "2 P46531 epithelial_to_mesenchymal_transition stimulation \n", + "3 Q05397 epithelial_to_mesenchymal_transition bimodal \n", + "4 P46531 epithelial_to_mesenchymal_transition NaN stimulation \n", + "\n", + " References \n", + "0 Adhesome:10085298;Adhesome:10592173;Adhesome:1... \n", + "1 ACSN:10593980;ACSN:12123611;ACSN:15782139;ACSN... \n", + "2 BioGRID:12644465;BioGRID:22143792;BioGRID:3096... \n", + "3 nan \n", + "4 Gene Ontology " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_net1.edges" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff7e1fd6-53fd-4985-9866-417b743486b2", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/7_tissue_mapping.ipynb.txt b/_sources/notebooks/7_tissue_mapping.ipynb.txt new file mode 100644 index 0000000..a8d6df2 --- /dev/null +++ b/_sources/notebooks/7_tissue_mapping.ipynb.txt @@ -0,0 +1,501 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Map tissue expression\n", + "\n", + "This notebook explores how you can explore whether the nodes in your network are expressed in a tissue of interest. The annotations are accessed from the Annotation object of Omnipath, and are based on expression data from the Human Protein Atlas." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.01 s, sys: 1.56 s, total: 7.57 s\n", + "Wall time: 5.17 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "## 1. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN\n", + "9 PTK2B Q14289 NaN" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "3e9006ec-00d2-453d-8b8f-e939938e9068", + "metadata": {}, + "source": [ + "## 2. Check if the genes are annotated in the tissue of interest (e.g., in colorectal cancer)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9540f33d-68f8-4c98-b68e-3e3d1497467e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "80151a3033954c7fa432793ba3ac15cb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6be86b4c527b4b4c8daaee10cb5f8a8f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "938c2adaa3d942fe85b19157c20d7025", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e32beb2f17c64e868bd4cd0f9207bd77", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "06c3b91dfd154c9bb5fda9b2395ef29a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cfb49cab545748538ecc178511211064", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ab64e58ee2a444edad4b08fa9d50a997", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "812a372fa0c74f2ea040c03cbd5ca784", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "51ecd65707fd449785a2d8f5d5d85c5b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "99c44916b0cd42b2857a5f406cbd0522", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Genesymbol in_tissue\n", + "0 SRC True\n", + "1 NOTCH1 True\n", + "2 PTK2 True\n", + "3 CDH1 True\n", + "4 CDH2 True\n", + "5 VIM True\n", + "6 MAP4K4 True\n", + "7 LATS1 True\n", + "8 LATS2 True\n", + "9 PTK2B True\n" + ] + } + ], + "source": [ + "annot = Ontology()\n", + "results_df = annot.check_tissue_annotations(genes_df = new_net1.nodes, tissue = 'colorectal cancer')\n", + "print(results_df)" + ] + }, + { + "cell_type": "markdown", + "id": "6a05e120-424b-405f-be04-f8c3725f950b", + "metadata": {}, + "source": [ + "## 3. Color nodes based on their presence/absence in the tissue of interest\n", + "\n", + "The `tissue_mapping` functions highligts as light blue all the nodes of the network that are expressed in the used-defined system." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fbd98405-045a-4316-8174-e96e9a71d9ee", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "network_visualizer = NetworkVisualizer(new_net1)\n", + "network_visualizer.tissue_mapping(results_df)\n", + "network_visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b0dc52f-e16b-428e-a05e-07a2035cc2f7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/8_Compare_networks.ipynb.txt b/_sources/notebooks/8_Compare_networks.ipynb.txt new file mode 100644 index 0000000..7463cdf --- /dev/null +++ b/_sources/notebooks/8_Compare_networks.ipynb.txt @@ -0,0 +1,224 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Network comparison\n", + "\n", + "In some cases, it might be of interest to compare two networks with each other. For instance, you might want to compare an existing network with the Neko-generated network, or compare the resulting networks from two different network construction strategies.\n", + "\n", + "The following code shows the comparison of two networks, built with different input parameters of the `complete_connections` function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.76 s, sys: 1.66 s, total: 7.42 s\n", + "Wall time: 5.09 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "from neko._methods.compare import compare_networks\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "markdown", + "id": "6a5b5adf", + "metadata": {}, + "source": [ + "## 2. Create networks.\n", + "\n", + "Please refer to the `Usage` tutorial for a detailed explanation of each step.\n" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 2A. Build first network\n", + "\n", + "For the first network, we specify that we do not want to take into account the concensus sign (i.e. activation vs inhibition) for the interactions." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)\n", + "new_net1.complete_connection(maxlen=6, algorithm=\"bfs\", only_signed=True, connect_with_bias=True, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "82052e91-dd5a-451e-b83c-7df080c1a09b", + "metadata": {}, + "source": [ + "### 2B. Build second network\n", + "\n", + "For the second network, we set the `consensus` argument to `True`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5d13c798-975b-43ef-a841-1fc6176578af", + "metadata": {}, + "outputs": [], + "source": [ + "new_net2 = Network(genes, resources = 'omnipath')\n", + "new_net2.connect_nodes(only_signed=True, consensus_only=True)\n", + "new_net2.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=True, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "017750d0-582d-4da5-a392-00eddb09e35f", + "metadata": {}, + "source": [ + "## 3. Compare networks" + ] + }, + { + "cell_type": "markdown", + "id": "9c1d69b5-1e70-456c-a702-61cb37f52dc3", + "metadata": {}, + "source": [ + "The compare_networks functions receives as input the two network objects of interest. Its output is two dataframes; one for the comparison of the edges and for the comparison of nodes. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "381a43b7-032f-40f7-8846-924901ff0161", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "interaction_comparison, node_comparison = compare_networks(new_net1, new_net2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3aa53d75-38bb-4210-90fa-2cf4535d49e7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " source target comparison\n", + "0 ABL1 APP Unique to Network 2\n", + "1 ABL1 BTK Unique to Network 2\n", + "2 ABL1 CDH2 Common\n", + "3 ABL1 CTNNB1 Common\n", + "4 ABL1 EGFR Common\n", + ".. ... ... ...\n", + "715 WNT1 ITGB4 Unique to Network 2\n", + "716 WNT1 LEF1 Unique to Network 2\n", + "717 WNT1 MAP3K7 Unique to Network 2\n", + "718 WNT1 NOTCH1 Unique to Network 2\n", + "719 ZYX SRC Common\n", + "\n", + "[720 rows x 3 columns]\n" + ] + } + ], + "source": [ + "print(interaction_comparison)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8a16da4d-c34f-466a-8e0f-4dfa42a635be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " node comparison\n", + "0 IKBKB Unique to Network 1\n", + "1 ROCK1 Unique to Network 1\n", + "2 SNAI2 Unique to Network 1\n", + "3 PRKG1 Unique to Network 1\n", + "4 TP63 Unique to Network 1\n", + ".. ... ...\n", + "101 PTK2B Common\n", + "102 PTEN Common\n", + "103 CDH2 Common\n", + "104 CDH1 Common\n", + "105 MAP4K4 Common\n", + "\n", + "[106 rows x 2 columns]\n" + ] + } + ], + "source": [ + "print(node_comparison)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/notebooks/9-Recreating_famous_pathways.ipynb.txt b/_sources/notebooks/9-Recreating_famous_pathways.ipynb.txt new file mode 100644 index 0000000..b64a9b6 --- /dev/null +++ b/_sources/notebooks/9-Recreating_famous_pathways.ipynb.txt @@ -0,0 +1,1009 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0dc40388-8f54-4433-aa81-9dc643697c76", + "metadata": {}, + "source": [ + "# Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a90067aa-8a9c-4ff1-8aac-4f9992094e7e", + "metadata": {}, + "outputs": [], + "source": [ + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "19dc89d3-203b-479a-9d46-3b7846c720bb", + "metadata": {}, + "source": [ + "## 1) Retrieving the MTOR Signaling from Signor using NeKo " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0abd6eae-2970-4bdf-82b5-364731270d3e", + "metadata": {}, + "outputs": [], + "source": [ + "mtor_nodes = [\"RPS6KA1\", \"SREBF1\", \"MTOR\", \"RPTOR\", \"INSR\", \"RPS6KB1\", \"RHEB\", \"EIF4EBP1\", \"INS\", \"PTEN\",\n", + " \"RPS6\", \"TFEB\", \"PIK3R1\", \"PPARGC1A\", \"PDPK1\", \"AKT1S1\", \"PPARG\", \"PIK3CA\", \"EIF4E\", \"IRS1\", \"GSK3B\", \"ULK1\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2c74b109-7324-4b4f-9c8c-5ffb828fbc32", + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c91174d0-5b4a-4ebe-aee2-002a246b3416", + "metadata": {}, + "outputs": [], + "source": [ + "seeds_number = 4\n", + "random_seeds = random.sample(mtor_nodes, seeds_number)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fbb83c00-86c2-4319-b45c-8edbce14ad42", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_seeds" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "141b4700-e3da-478a-aa6b-19e7d85aa6f4", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "d6049069-ed6f-40ae-bbc3-c65c59ee095e", + "metadata": {}, + "source": [ + "Let's compare the function commplete_connection (based on the Reciprocal Pathway Extender algorithm) with the function connect_radially (based on the Iterative Neighbor Expansion ). \n", + "We are going to create two neko_net, and apply to each of them one of the two functions. \n", + "Finally, we are going to compare the resulting networks." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a7799cae-73d3-48dc-aa73-5cfbc1c40de2", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net1 = Network(random_seeds, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "837ddb95-e22e-44ad-9ac1-6488d7a8b348", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net2 = Network(random_seeds, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "47575e89-4da0-4a9e-acfa-9d15a98abd90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 754 ms, sys: 7 ms, total: 761 ms\n", + "Wall time: 759 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net1.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=False, consensus=False)" + ] + }, + { + "cell_type": "markdown", + "id": "ae162d78-1df1-47a3-b3ce-d442324274e9", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**Note**\n", + " \n", + "The **max_len** in the function *connect_network_radially* should be kept at 1, max 2. Why? \n", + "\n", + "The Iterative Neighbour Expansion, as the name suggests, iterates through all the seed nodes and adds to the network all the interactions found. In the next step, it iterates through all the neighbors found and looks for their neighbors. Doing so, the Network size could exponentially increase, if among the neighbor nodes there are some HUB (nodes with a high degree of connection).\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5b115402-1a40-4677-9f44-bbcd5ae4bb3f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 16.9 s, sys: 2.63 ms, total: 16.9 s\n", + "Wall time: 16.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net2.connect_network_radially(max_len=2, only_signed=True, consensus=False)" + ] + }, + { + "cell_type": "markdown", + "id": "2a80e34b-cb9c-4caf-962f-4738da608fb6", + "metadata": {}, + "source": [ + "Now let's visualize the network:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "0cf992d7-91d6-4e9d-aa58-ec35be8a9fc3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "(evince:39773): Gdk-WARNING **: 10:33:59.165: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)\n" + ] + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(neko_net1, color_by='effect', noi=True)\n", + "visualizer1.render(\"./img/Complete_connection_neko_net_sample\", view=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7d120405-e5f5-4d4a-9a80-c83877a47735", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "(evince:39829): Gdk-WARNING **: 10:34:09.325: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)\n" + ] + } + ], + "source": [ + "#Visualize network\n", + "visualizer2 = NetworkVisualizer(neko_net2, color_by='effect', noi=True)\n", + "visualizer2.render(\"./img/Radial_neko_net_sample\", view=True)" + ] + }, + { + "cell_type": "markdown", + "id": "e2024355-1443-40f6-b529-8c94f80d040e", + "metadata": {}, + "source": [ + "Let's compare the Networks. We will use JUST those nodes in signor that are not complexes or protein families (so we excluded all those nodes that starts with \"SIGNOR_\").\n", + "At the following link you can find the full MTOR pathway from SIGNOR: https://signor.uniroma2.it/pathway_browser.php?beta=3.0&organism=&pathway_list=SIGNOR-MS&x=13&y=13" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9184fb6a-6a5b-4cac-ba3c-677fb646b844", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of nodes of the first NeKo network: 10\n", + "Number of nodes of the second NeKo network: 174\n" + ] + } + ], + "source": [ + "net1_nodes_size = len(neko_net1.nodes)\n", + "net2_nodes_size = len(neko_net2.nodes)\n", + "\n", + "print(\"Number of nodes of the first NeKo network: \", net1_nodes_size)\n", + "print(\"Number of nodes of the second NeKo network: \", net2_nodes_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c81afa3d-fd2c-43db-acfd-bcb457864fdd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of edges of the first NeKo network: 23\n", + "Number of edges of the second NeKo network: 639\n" + ] + } + ], + "source": [ + "net1_edges_size = len(neko_net1.edges)\n", + "net2_edges_size = len(neko_net2.edges)\n", + "\n", + "print(\"Number of edges of the first NeKo network: \", net1_edges_size)\n", + "print(\"Number of edges of the second NeKo network: \", net2_edges_size)" + ] + }, + { + "cell_type": "markdown", + "id": "8562a1af-20b7-492b-add2-f56f3da93b80", + "metadata": {}, + "source": [ + "The first consideration to do is that the RPE algorithm, is way faster than the INE one (529 ms vs 9.73 s). Despite being slower, the INE algorithm, provided a much bigger network (15 nodes vs 44, 84 edges vs 259)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "6827eeef-2f4a-4e15-8cd8-f9e00d0aef87", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']\n", + "Nodes in the MTOR pathways: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']\n", + "Nodes founded: ['MTOR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'AKT1S1', 'PPARG']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in mtor_nodes:\n", + " if node in list(neko_net1.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the MTOR pathways: \", mtor_nodes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "1c7de0cd-7056-4a95-a762-459116cd26e9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 27.27272727272727\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(mtor_nodes)) * 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8e5ed381-2eac-4dde-b664-9b8e7a7ad6c4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']\n", + "Nodes in the MTOR pathways: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']\n", + "Nodes founded: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'IRS1', 'GSK3B', 'ULK1']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in mtor_nodes:\n", + " if node in list(neko_net2.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the MTOR pathways: \", mtor_nodes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3ce92129-f927-4172-95eb-f71c84188c8f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 68.18181818181817\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(mtor_nodes)) * 100)" + ] + }, + { + "cell_type": "markdown", + "id": "98534d1b-0922-491d-8c26-2f8439c5dae7", + "metadata": {}, + "source": [ + "As expected, due to the network size, the INE algorithm managed to capture more genes belonging to the MTOR pathway compared to the RPE algorithm. This was expected also because the RPE algorithm aims at finding the minimal set of genes that can connect all the seed nodes given by the user, while the INE algorithm does not take into account the shortest paths, but homogeneously explores the surroundings." + ] + }, + { + "cell_type": "markdown", + "id": "c9834d56-3487-484e-8f9b-24f0601b5af0", + "metadata": {}, + "source": [ + "## 2) Retrieving the EGF/EGFR pathway (source: wikipathway) using Omnipath" + ] + }, + { + "cell_type": "markdown", + "id": "0cbdb936-fd71-419a-906a-6a5d7ffcd905", + "metadata": {}, + "source": [ + "The MTOR pathways we saw in use case 2 is a reletavely small pathway. We decided to test the INE and RPE algorithm to retrieve a bigger one, the EGF/EGFR pathway as shown in wikipathway, fetching interactions from Omnipath." + ] + }, + { + "cell_type": "markdown", + "id": "4bfbaca8-e8b2-48ea-8972-474961f19fba", + "metadata": {}, + "source": [ + "In order to do so, we can proceed with the installation of the python package pywikipathways to quickly retrieve the genes belonging to the EGF/EGFR pathway (WP437, https://www.wikipathways.org/pathways/WP437.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d70ec715-e387-475e-8816-1a6c8efa855a", + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment the following line if you do not have installed pywikipathways\n", + "!pip install pywikipathways" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "8177656d-c194-4657-8dd1-4bcdf3afd084", + "metadata": {}, + "outputs": [], + "source": [ + "import pywikipathways as pwpw" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "bd661901-52f6-4d9b-949e-cfc539113f47", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 'WP437',\n", + " 'url': 'https://classic.wikipathways.org/index.php/Pathway:WP437',\n", + " 'name': 'EGF/EGFR signaling',\n", + " 'species': 'Homo sapiens',\n", + " 'revision': '129679'}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pwpw.get_pathway_info('WP437')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "81482dd7-9e2b-411e-a1d6-55eed867d220", + "metadata": {}, + "outputs": [], + "source": [ + "egf_egfr_genes = pwpw.get_xref_list('WP437','H')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "eeec14cd-cf03-4962-a477-6b456d95b279", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "162\n" + ] + }, + { + "data": { + "text/plain": [ + "['ABI1',\n", + " 'ABL1',\n", + " 'AKT1',\n", + " 'AP2A1',\n", + " 'AP2B1',\n", + " 'AP2M1',\n", + " 'AP2S1',\n", + " 'ARF6',\n", + " 'ARHGEF1',\n", + " 'ASAP1',\n", + " 'ATF1',\n", + " 'ATXN2',\n", + " 'AURKA',\n", + " 'BCAR1',\n", + " 'BRAF',\n", + " 'CAMK2A',\n", + " 'CAV1',\n", + " 'CAV2',\n", + " 'CBL',\n", + " 'CBLB',\n", + " 'CBLC',\n", + " 'CDC42',\n", + " 'CFL1',\n", + " 'CREB1',\n", + " 'CRK',\n", + " 'CRKL',\n", + " 'CSK',\n", + " 'DNM1',\n", + " 'DOK2',\n", + " 'E2F1',\n", + " 'EGF',\n", + " 'EGFR',\n", + " 'EIF4EBP1',\n", + " 'ELK1',\n", + " 'ELK4',\n", + " 'EPN1',\n", + " 'EPS15',\n", + " 'EPS15L1',\n", + " 'EPS8',\n", + " 'ERBB2',\n", + " 'ERRFI1',\n", + " 'FOS',\n", + " 'FOSB',\n", + " 'FOXO1',\n", + " 'FOXO4',\n", + " 'GAB1',\n", + " 'GAB2',\n", + " 'GJA1',\n", + " 'GRB10',\n", + " 'GRB2',\n", + " 'HGS',\n", + " 'HRAS',\n", + " 'INPP5D',\n", + " 'INPPL1',\n", + " 'IQGAP1',\n", + " 'IQSEC1',\n", + " 'ITCH',\n", + " 'JAK1',\n", + " 'JAK2',\n", + " 'JUN',\n", + " 'JUND',\n", + " 'KRAS',\n", + " 'LIMK2',\n", + " 'MAP2K1',\n", + " 'MAP2K2',\n", + " 'MAP2K5',\n", + " 'MAP3K1',\n", + " 'MAP3K2',\n", + " 'MAP3K3',\n", + " 'MAP3K4',\n", + " 'MAP4K1',\n", + " 'MAPK1',\n", + " 'MAPK14',\n", + " 'MAPK4',\n", + " 'MAPK7',\n", + " 'MAPK8',\n", + " 'MAPK9',\n", + " 'MEF2A',\n", + " 'MEF2C',\n", + " 'MEF2D',\n", + " 'MT-CO2',\n", + " 'MTOR',\n", + " 'MYBL2',\n", + " 'NCK1',\n", + " 'NCK2',\n", + " 'NCOA3',\n", + " 'NDUFA13',\n", + " 'NEDD4',\n", + " 'NEDD8',\n", + " 'NOS3',\n", + " 'PAK1',\n", + " 'PCNA',\n", + " 'PDPK1',\n", + " 'PEBP1',\n", + " 'PIAS3',\n", + " 'PIK3C2B',\n", + " 'PIK3R1',\n", + " 'PIK3R2',\n", + " 'PLCE1',\n", + " 'PLCG1',\n", + " 'PLD1',\n", + " 'PLD2',\n", + " 'PLSCR1',\n", + " 'PRKCA',\n", + " 'PRKCB',\n", + " 'PRKCD',\n", + " 'PRKCI',\n", + " 'PRKCZ',\n", + " 'PTEN',\n", + " 'PTK2',\n", + " 'PTK2B',\n", + " 'PTK6',\n", + " 'PTPN11',\n", + " 'PTPN12',\n", + " 'PTPN5',\n", + " 'PTPRR',\n", + " 'PXDN',\n", + " 'RAB5A',\n", + " 'RAC1',\n", + " 'RAF1',\n", + " 'RALA',\n", + " 'RALB',\n", + " 'RALBP1',\n", + " 'RALGDS',\n", + " 'RAP1A',\n", + " 'RASA1',\n", + " 'REPS2',\n", + " 'RICTOR',\n", + " 'RIN1',\n", + " 'ROCK1',\n", + " 'RPS6KA1',\n", + " 'RPS6KA2',\n", + " 'RPS6KA3',\n", + " 'RPS6KA5',\n", + " 'RPS6KB1',\n", + " 'SH2D2A',\n", + " 'SH3GL2',\n", + " 'SH3GL3',\n", + " 'SH3KBP1',\n", + " 'SHC1',\n", + " 'SOS1',\n", + " 'SOS2',\n", + " 'SP1',\n", + " 'SPRY2',\n", + " 'SRC',\n", + " 'STAM',\n", + " 'STAM2',\n", + " 'STAMBP',\n", + " 'STAT1',\n", + " 'STAT3',\n", + " 'STAT5A',\n", + " 'STAT5B',\n", + " 'STMN1',\n", + " 'STXBP1',\n", + " 'SYNJ1',\n", + " 'TNK2',\n", + " 'TWIST1',\n", + " 'USP6NL',\n", + " 'USP8',\n", + " 'VAV1',\n", + " 'VAV2',\n", + " 'VAV3']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(len(egf_egfr_genes))\n", + "egf_egfr_genes" + ] + }, + { + "cell_type": "markdown", + "id": "c14a30bf-0d45-4aad-b2e5-cec37217040c", + "metadata": {}, + "source": [ + "Let's select a random number of those genes and proceed with building the network with NeKo!" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0ff8c031-2066-4809-adc4-e9fb6684c021", + "metadata": {}, + "outputs": [], + "source": [ + "seeds_number = 20\n", + "random_seeds = random.sample(egf_egfr_genes, seeds_number)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ca9cb2f7-39b4-481b-8091-64fef5eba285", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ITCH',\n", + " 'VAV3',\n", + " 'PXDN',\n", + " 'PRKCB',\n", + " 'NCOA3',\n", + " 'ARHGEF1',\n", + " 'PTEN',\n", + " 'USP6NL',\n", + " 'PTPN12',\n", + " 'PCNA',\n", + " 'CBLB',\n", + " 'PLSCR1',\n", + " 'PRKCA',\n", + " 'JUND',\n", + " 'CREB1',\n", + " 'CBLC',\n", + " 'SYNJ1',\n", + " 'GJA1',\n", + " 'KRAS',\n", + " 'NCK1']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_seeds" + ] + }, + { + "cell_type": "markdown", + "id": "e3dccd95-6ee4-42a3-8eb9-dd96141e108a", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**TIP**\n", + " \n", + "NeKo provides some built-in functions to easily plug some well-known databases, like **Omnipath**, **Signor**, **PhosphositePlus** and **Huri**. More information can be found in the Notebook #2\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "6302b5bf-0a2e-4e2c-9a88-ba3b505af6fc", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net3 = Network(random_seeds, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "89a3ad40-ef1e-467f-98dd-e9704fef09e1", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net4 = Network(random_seeds, resources = 'omnipath')" + ] + }, + { + "cell_type": "markdown", + "id": "14468b0d-9972-4e6e-8e8d-e8d9fe2d8f33", + "metadata": {}, + "source": [ + "Once again, now that we have created the NeKo network, let's use the RPE and INE algorithm to retrieve (hopefully) the full EGF/EGFR pathway. \n", + "\n", + "**To Notice!**\n", + "\n", + "Since the AllOmnipath database is very big and we have a higher number of seed nodes, the computational time / cost will be higher too! In some cases, expect both complete_connection and connect_network_radially to take minutes!" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "8c51e03a-2878-4783-ac4e-50328b8240d1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 51.6 s, sys: 8.36 ms, total: 51.6 s\n", + "Wall time: 51.6 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net3.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=False, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7291cdef-74dc-4d88-b588-b65404bb60a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 51.9 s, sys: 3.78 ms, total: 51.9 s\n", + "Wall time: 51.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net4.connect_network_radially(max_len=1, only_signed=True, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "3793c48c-1c85-47d6-bd23-548094ee8b90", + "metadata": {}, + "outputs": [], + "source": [ + "#This time the network are very big and it can be difficult to visualize them\n", + "#visualizer3 = NetworkVisualizer(neko_net3, color_by='effect', noi=True)\n", + "#visualizer3.render(\"./img/Complete_connection_neko_net_sample_EGF\", view=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "3b491a47-4d3c-4302-a44a-88fac4d2671f", + "metadata": {}, + "outputs": [], + "source": [ + "#Visualize network\n", + "#visualizer4 = NetworkVisualizer(neko_net4, color_by='effect', noi=True)\n", + "#visualizer4.render(\"./img/Radial_neko_net_sample_EGF\", view=True)" + ] + }, + { + "cell_type": "markdown", + "id": "3dfda316-09fb-48ee-a509-451fbdecdd4f", + "metadata": {}, + "source": [ + "As we did previously, let's compare network's size and check if we found nodes beloning to the EGF/EGFR pathway from wikipathway" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9edbd689-fa46-4a2c-b18e-b0321b42c9d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of nodes of the third NeKo network: 123\n", + "Number of nodes of the fourth NeKo network: 156\n" + ] + } + ], + "source": [ + "net3_nodes_size = len(neko_net3.nodes)\n", + "net4_nodes_size = len(neko_net4.nodes)\n", + "\n", + "print(\"Number of nodes of the third NeKo network: \", net3_nodes_size)\n", + "print(\"Number of nodes of the fourth NeKo network: \", net4_nodes_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "bbca2027-2e28-441c-b258-0b68587b54fd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of edges of the third NeKo network: 1417\n", + "Number of edges of the fourth NeKo network: 481\n" + ] + } + ], + "source": [ + "net3_edges_size = len(neko_net3.edges)\n", + "net4_edges_size = len(neko_net4.edges)\n", + "\n", + "print(\"Number of edges of the third NeKo network: \", net3_edges_size)\n", + "print(\"Number of edges of the fourth NeKo network: \", net4_edges_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "d4becd12-06c9-48ed-bd85-fa6f7fe7dd60", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']\n", + "Nodes in the EGF/EGFR pathways: ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']\n", + "Nodes founded: ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'CSK', 'EGFR', 'GJA1', 'HRAS', 'ITCH', 'JAK2', 'JUND', 'KRAS', 'MAP3K1', 'MAPK1', 'MAPK14', 'MAPK7', 'MAPK8', 'NCK1', 'NCOA3', 'PCNA', 'PIK3R1', 'PLCG1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'ROCK1', 'SHC1', 'SRC', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in egf_egfr_genes:\n", + " if node in list(neko_net3.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the EGF/EGFR pathways: \", egf_egfr_genes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "d2abe68e-8f47-4869-badb-a630c91c220d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 27.160493827160494\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(egf_egfr_genes)) * 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "1dd14079-baf4-4431-996d-895c2cc677cc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']\n", + "Nodes in the EGF/EGFR pathways: ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']\n", + "Nodes founded: ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CAMK2A', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'E2F1', 'EGF', 'EGFR', 'ERBB2', 'FOS', 'GAB2', 'GJA1', 'GRB2', 'ITCH', 'JAK1', 'JAK2', 'JUND', 'KRAS', 'MAP2K1', 'MAP3K1', 'MAPK1', 'MAPK7', 'MAPK8', 'MTOR', 'NCK1', 'NCOA3', 'PAK1', 'PCNA', 'PDPK1', 'PIK3R1', 'PLCG1', 'PLD1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'RIN1', 'ROCK1', 'SHC1', 'SOS1', 'SRC', 'STAT3', 'STAT5A', 'STAT5B', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in egf_egfr_genes:\n", + " if node in list(neko_net4.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the EGF/EGFR pathways: \", egf_egfr_genes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "c199f367-d0c4-4c91-8359-a6c03dc54ac7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 36.41975308641975\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(egf_egfr_genes)) * 100)" + ] + }, + { + "cell_type": "markdown", + "id": "f0cc73cc-35fe-423d-bdf8-caf91432feb9", + "metadata": {}, + "source": [ + "Once more, the INE captured better the pathway composition, recovering 40-50% of the genes in the EGF/EGFR pathway from wikipathways (by starting from 10%). This time, INE performed better than RPE. The reason for this resides within the database composition. The AllOmnipathInteraction database contains tons of interaction, which means, many possibilities to go from gene A to gene B in the shortest path possible (with max len = 3). On the other hand, INE runs with max_len = 1, so it just collects all the possible neighbors of the nodes, without looking for extended extra pathways. \n", + "\n", + "Please remember that the aim of the RPE algorithm is to reduce as much as possible the average network distance. On the other hand, the INE algorithm does not care about it." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 0000000..19a446a --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..7e4c114 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 0000000..cd1c674 --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 0000000..1fddb6e --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/nbsphinx-broken-thumbnail.svg b/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 0000000..4919ca8 --- /dev/null +++ b/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/nbsphinx-code-cells.css b/_static/nbsphinx-code-cells.css new file mode 100644 index 0000000..a3fb27c --- /dev/null +++ b/_static/nbsphinx-code-cells.css @@ -0,0 +1,259 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + diff --git a/_static/nbsphinx-gallery.css b/_static/nbsphinx-gallery.css new file mode 100644 index 0000000..365c27a --- /dev/null +++ b/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/_static/nbsphinx-no-thumbnail.svg b/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 0000000..9dca758 --- /dev/null +++ b/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/neko_logo.png b/_static/neko_logo.png new file mode 100644 index 0000000..1d68708 Binary files /dev/null and b/_static/neko_logo.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..84ab303 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..b08d58c --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/api.html b/api.html new file mode 100644 index 0000000..661a3f1 --- /dev/null +++ b/api.html @@ -0,0 +1,777 @@ + + + + + + + API Reference — neko documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

API Reference

+

This page contains the API reference for the Neko package.

+
+

Network Class

+

The main class in NeKo is the Network class. You can import it as follows:

+
from neko.core.network import Network
+
+
+

Below is a summary of the methods available in the Network class:

+
+
+class neko.core.network.Network(initial_nodes: list[str] | None = None, sif_file=None, resources=None)
+

Bases: object

+

A molecular interaction network.

+
+

The Network object is the central organizing component of the neko +module. It is the subject of all operations implemented here, including +topological algorithms, graph analysis, network visualization and +integration of database knowledge.

+
+
+
Args:

initial_nodes: A list of initial nodes to be added to the network. +sif_file: A SIF (Simple Interaction Format) file to load the network from. +resources: A pandas DataFrame containing the resources database.

+
+
+

Methods:

+
+
+add_edge(edge: DataFrame) None
+

This method adds an interaction to the list of interactions while converting it to the NeKo-network format. +It checks if the edge represents inhibition or stimulation and sets the effect accordingly. It also checks if the +nodes involved in the interaction are already present in the network, if not, it adds them.

+
+
Args:
    +
  • edge: A pandas DataFrame representing the interaction. The DataFrame should contain columns for

  • +
+

‘source’, ‘target’, ‘type’, and ‘references’. The ‘source’ and ‘target’ columns represent the nodes involved +in the interaction. The ‘type’ column represents the type of interaction. The ‘references’ column contains +the references for the interaction.

+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+add_node(node: str, from_sif: bool = False) None
+

Adds a node to the network. The node is added to the nodes DataFrame of the network. The function checks the +syntax for the genesymbol to ensure it is correct. If the node is a complex, it is added with the +‘Genesymbol’ as the complex string and ‘Uniprot’ as the node. Otherwise, it is added with the ‘Genesymbol’ as +the genesymbol and ‘Uniprot’ as the uniprot. The ‘Type’ is set as ‘NaN’ for all new nodes.

+
+
Args:
    +
  • +
    node: A string representing the node to be added. The node can be represented by either its

    Genesymbol or Uniprot identifier.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None.

  • +
+
+
+
+ +
+
+bfs_algorithm(node1: str, node2: str, maxlen: int, only_signed: bool, consensus: bool, connect_with_bias: bool) None
+

This function uses the Breadth-First Search (BFS) algorithm to find paths between two nodes in the network. +It starts from the target node and searches for paths of increasing length until it finds a path of length +maxlen. If the only_signed flag is set to True, it filters out unsigned paths. If the connect_with_bias +flag is set to True, it connects the nodes when first introduced. Args: node1: node2: only_signed: consensus: +connect_with_bias:

+
+
Args:
    +
  • node1: A string representing the source node.

  • +
  • node2: A string representing the target node.

  • +
  • maxlen: An integer representing the maximum length of the paths to be searched for. Default is 2.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
  • +
    connect_with_bias: A boolean flag indicating whether to connect the nodes when first introduced.

    Default is True.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+check_node(node: str) bool
+

This function checks if a node exists in the resources’ database.

+
+
Args:
    +
  • node: A string representing the node to be checked.

  • +
+
+
Returns:
    +
  • A boolean indicating whether the node exists in the resources’ database.

  • +
+
+
+
+ +
+
+check_nodes(nodes: list[str]) list[str]
+

This function checks if the nodes exist in the resources database and returns the nodes that are present.

+
+
Args:
    +
  • nodes: A list of node identifiers (strings). These are the nodes to be checked.

  • +
+
+
Returns:
    +
  • A list[str] of node identifiers that are present in the resources database.

  • +
+
+
+
+ +
+
+complete_connection(maxlen: int = 2, algorithm: Literal['bfs', 'dfs'] = 'dfs', minimal: bool = True, only_signed: bool = False, consensus: bool = False, connect_with_bias: bool = False) None
+

This function attempts to connect all nodes of a network object using one of the methods presented in the +Connection object. This is a core characteristic of this package and the user should have the possibility to +choose different methods to enrich its Network object.

+
+
Args:
    +
  • maxlen: The maximum length of the paths to be searched for. Default is 2.

  • +
  • +
    algorithm: The search algorithm to be used. It can be ‘bfs’ (Breadth-First Search) or ‘dfs’

    (Depth-First Search).

    +
    +
    +
  • +
  • +
    minimal: A boolean flag indicating whether to reset the object connect_network, updating the possible list

    of paths. Default is True.

    +
    +
    +
  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
  • +
    connect_with_bias: A boolean flag indicating whether to connect nodes when first

    introduced. Default is True.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_as_atopo(strategy: Literal['radial', 'complete', None] | None = None, max_len: int = 1, loops: bool = False, outputs=None, only_signed: bool = True, consensus: bool = False) None
+

This method attempts to connect all nodes of a network object in a topological manner. It iteratively +connects upstream nodes and checks if the network is connected. If not, it increases the search depth and +repeats the process. It also removes any nodes that do not have a source in the edge dataframe and are not in +the output nodes.

+
+
Args:
    +
  • strategy: The strategy to use to connect the network. It can be ‘radial’ or ‘complete’. Default is None.

  • +
  • max_len: The maximum length of the paths to be searched for. Default is 1.

  • +
  • loops: A boolean flag indicating whether to allow loops in the network. Default is False.

  • +
  • outputs: A list of output nodes to connect to. Default is None.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is True.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_component(comp_A: str | list[str], comp_B: str | list[str], maxlen: int = 2, mode: Literal['OUT', 'IN', 'ALL'] = 'OUT', only_signed: bool = False, consensus: bool = False) None
+

This function attempts to connect subcomponents of a network object using one of the methods presented in the +Connection object. This is a core characteristic of this package and the user should have the possibility to +choose different methods to enrich its Network object.

+
+
Args:
    +
  • comp_A: A string or list of strings representing the first component to connect.

  • +
  • comp_B: A string or list of strings representing the second component to connect.

  • +
  • maxlen: The maximum length of the paths to be searched for. Default is 2.

  • +
  • mode: The search mode, which can be ‘OUT’, ‘IN’, or ‘ALL’. Default is ‘OUT’.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_genes_to_phenotype(phenotype: str | None = None, id_accession: str | None = None, sub_genes: list[str] | None = None, maxlen: int = 2, only_signed: bool = False, compress: bool = False) None
+

This function connects genes to a phenotype based on the provided Args. It retrieves phenotype markers, +identifies unique Uniprot genes, and connects them to the network. It also has the option to compress the +network by substituting specified genes with the phenotype name.

+
+
Args:
    +
  • phenotype: The phenotype to connect to. If not provided, it will be retrieved using the id_accession.

  • +
  • id_accession: The accession id of the phenotype. If not provided, the phenotype parameter must be given.

  • +
  • +
    sub_genes: A list of genes to be considered for connection. If not provided, all nodes in the network are

    considered.

    +
    +
    +
  • +
  • maxlen: The maximum length of the paths to be searched for.

  • +
  • only_signed: A boolean flag to indicate whether to filter unsigned paths.

  • +
  • compress: A boolean flag to indicate whether to substitute the specified genes with the phenotype name.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_network_radially(max_len: int = 1, direction: Literal['OUT', 'IN', None] | None = None, loops: bool = False, consensus: bool = False, only_signed: bool = True) None
+

This function connects all nodes of a network object in a radial manner. It iteratively connects upstream and +downstream nodes of the initial nodes. The function also removes any nodes that do not have a source in the edge +dataframe and are not in the initial nodes.

+
+
Args:
    +
  • max_len: The maximum length of the paths to be searched for. Default is 1.

  • +
  • direction: The direction of the search. It can be ‘OUT’, ‘IN’, or None. Default is None.

  • +
  • loops: A boolean flag indicating whether to allow loops in the network. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is True.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_nodes(only_signed: bool = False, consensus_only: bool = False) None
+

Basic node connections. It adds all the interactions found in the omnipath database. +Once an interaction is found it will be added to the list of edges. +The only_signed flag makes sure that just signed interaction will be added to the network, while “consensus_only” +makes sure that just signed interaction with consensus among references will be included.

+
+
Args:
    +
  • only_signed: A boolean flag indicating whether to only add signed interactions to the network.

  • +
  • +
    consensus_only: A boolean flag indicating whether to only add signed interactions with consensus among

    references to the network.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_subgroup(group: str | DataFrame | list[str], maxlen: int = 1, only_signed: bool = False, consensus: bool = False) None
+

This function is used to connect all the nodes in a particular subgroup. It iterates over all pairs of nodes +in the subgroup and finds paths between them in the resources’ database. If a path is found, it is added to +the edge list of the network. The function also filters out unsigned paths if the only_signed flag is set +to True.

+
+
Args:
    +
  • +
    group: A list of nodes representing the subgroup to connect. Nodes can be represented as strings,

    pandas DataFrame, or list of strings.

    +
    +
    +
  • +
  • maxlen: The maximum length of the paths to be searched for in the resources’ database. Default is 1.

  • +
  • +
    only_signed: A boolean flag indicating whether to only add signed interactions to the network. Default is

    False.

    +
    +
    +
  • +
  • +
    consensus: A boolean flag indicating whether to only add signed interactions with consensus among

    references to the network. Default is False.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+connect_to_upstream_nodes(nodes_to_connect: List[str] | None = None, depth: int = 1, rank: int = 1, only_signed: bool = True, consensus: bool = False) None
+

This function connects the provided nodes to their upstream nodes in the network.

+
+
Args:
    +
  • nodes_to_connect: A list of nodes to connect. If not provided, all nodes in the network are considered.

  • +
  • depth: The depth of the search for upstream nodes.

  • +
  • rank: The rank of the search for upstream nodes.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is True.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+convert_edgelist_into_genesymbol() DataFrame
+

This function generates a new edges dataframe with the source and target identifiers translated (if possible) +in Genesymbol format.

+
+
Args:
    +
  • None

  • +
+
+
Returns:
    +
  • +
    A pandas DataFrame containing the edges with the source and target identifiers translated into Genesymbol

    format.

    +
    +
    +
  • +
+
+
+
+ +
+
+copy()
+
+ +
+
+dfs_algorithm(node1: str, node2: str, maxlen: int, only_signed: bool, consensus: bool, connect_with_bias: bool) None
+

This function uses the Depth-First Search (DFS) algorithm to find paths between two nodes in the network. It +starts from the target node and searches for paths of increasing length until it finds a path of length +maxlen. If the only_signed flag is set to True, it filters out unsigned paths. If the connect_with_bias +flag is set to True, it connects the nodes when first introduced. Args: node1: node2: maxlen: only_signed: +consensus: connect_with_bias:

+
+
Args:
    +
  • node1: A string representing the source node.

  • +
  • node2: A string representing the target node.

  • +
  • maxlen: An integer representing the maximum length of the paths to be searched for. Default is 2.

  • +
  • only_signed: A boolean flag indicating whether to filter unsigned paths. Default is False.

  • +
  • consensus: A boolean flag indicating whether to check for consensus among references. Default is False.

  • +
  • +
    connect_with_bias: A boolean flag indicating whether to connect the nodes when first introduced.

    Default is True.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+is_connected() bool
+

This function checks if the network is connected. It uses Depth-First Search (DFS) to traverse the network +and check if all nodes are visited. If all nodes are visited, the network is connected.

+
+
Args:
    +
  • None

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+modify_node_name(old_name: str, new_name: str, type: Literal['Genesymbol', 'Uniprot', 'both'] = 'Genesymbol') None
+

This function modifies the name of a node in the network. It takes the old name of the node and the new name +as input and modifies the name of the node in the nodes and in the edges DataFrame. If type is set to +‘Genesymbol’, it modifies the genesymbol name of the node in the nodes DataFrame. If type is set to +‘Uniprot’, it modifies the uniprot name of the node in the edges DataFrame. If type is set to ‘both’, +it modifies both the genesymbol and uniprot names of the node in the nodes and edges DataFrame.

+
+
Args:
    +
  • old_name: A string representing the old name of the node. - new_name: A string representing the new

  • +
+

name of the node. - type: A string indicating the type of name to be modified. It can be ‘Genesymbol’, +‘Uniprot’, or ‘both’. Default is ‘Genesymbol’.

+
+
Returns:

-None

+
+
+
+ +
+
+print_my_paths(node1: str, node2: str, maxlen: int = 2, genesymbol: bool = True) None
+

This function prints all the paths between two nodes in the network. It uses the find_paths method from the +Connections class to find all the paths between the two nodes in the Network object. If no paths are found, +it prints a warning message. If one of the selected nodes is not present in the network, it prints an error message.

+
+
Args:
    +
  • node1: A string representing the source node.

  • +
  • node2: A string representing the target node.

  • +
  • maxlen: An integer representing the maximum length of the paths to be searched for. Default is 2.

  • +
  • genesymbol: A boolean flag indicating whether to print the paths in genesymbol format. Default is True.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+remove_disconnected_nodes() None
+

This function removes nodes from the network that are not connected to any other nodes.

+

Returns: +None. The function modifies the network object in-place by removing the disconnected nodes from the nodes DataFrame.

+
+ +
+
+remove_edge(node1: str, node2: str) None
+

This function removes an edge from the network. It takes the source node and target node as input and removes +the edge from the edges DataFrame.

+
+
Args:
    +
  • node1: A string representing the source node of the edge.

  • +
  • node2: A string representing the target node of the edge.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+remove_node(node: str) None
+

Removes a node from the network. The node is removed from both the list of nodes and the list of edges.

+
+
Args:
    +
  • +
    node: A string representing the node to be removed. The node can be represented by either its

    Genesymbol or Uniprot identifier.

    +
    +
    +
  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+remove_path(path: list[str]) None
+

This function removes a path from the network. It takes a list of nodes representing the path and removes all +the edges between the nodes in the path.

+
+
Args:
    +
  • path: A list of nodes representing the path to be removed. The nodes can be represented as strings or tuples.

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+
+remove_undefined_interactions()
+

This function removes all undefined interactions from the network.

+
+
Args:
    +
  • None

  • +
+
+
Returns:
    +
  • None

  • +
+
+
+
+ +
+ +
+
+

Method Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

neko.core.network.Network.add_edge(edge)

This method adds an interaction to the list of interactions while converting it to the NeKo-network format.

neko.core.network.Network.remove_node(node)

Removes a node from the network.

neko.core.network.Network.add_node(node[, ...])

Adds a node to the network.

neko.core.network.Network.complete_connection([...])

This function attempts to connect all nodes of a network object using one of the methods presented in the Connection object.

neko.core.network.Network.connect_component(...)

This function attempts to connect subcomponents of a network object using one of the methods presented in the Connection object.

neko.core.network.Network.connect_genes_to_phenotype([...])

This function connects genes to a phenotype based on the provided Args.

neko.core.network.Network.connect_nodes([...])

Basic node connections.

neko.core.network.Network.connect_subgroup(group)

This function is used to connect all the nodes in a particular subgroup.

neko.core.network.Network.connect_to_upstream_nodes([...])

This function connects the provided nodes to their upstream nodes in the network.

neko.core.network.Network.convert_edgelist_into_genesymbol()

This function generates a new edges dataframe with the source and target identifiers translated (if possible) in Genesymbol format.

neko.core.network.Network.is_connected()

This function checks if the network is connected.

+
+

NetworkVisualizer Class Methods

+ + + + + + + + + + + + + + + +

neko._visual.visualize_network.NetworkVisualizer.tissue_mapping(...)

Color the nodes based on their expression in the tissue of interest (based on data from The Human Protein Atlas).

neko._visual.visualize_network.NetworkVisualizer.render([...])

Render the graph.

neko._visual.visualize_network.NetworkVisualizer.yfiles_visual(...)

neko._visual.visualize_network.NetworkVisualizer.vis_comparison(...)

+
+
+
+

Other Modules

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/contents.html b/contents.html new file mode 100644 index 0000000..2aaa08f --- /dev/null +++ b/contents.html @@ -0,0 +1,155 @@ + + + + + + + Contents — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..72da8a3 --- /dev/null +++ b/genindex.html @@ -0,0 +1,271 @@ + + + + + + Index — neko documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | I + | M + | N + | P + | R + | T + | V + | Y + +
+

A

+ + + +
+ +

B

+ + +
+ +

C

+ + + +
+ +

D

+ + +
+ +

I

+ + +
+ +

M

+ + +
+ +

N

+ + +
+ +

P

+ + +
+ +

R

+ + + +
+ +

T

+ + +
+ +

V

+ + +
+ +

Y

+ + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e884023 --- /dev/null +++ b/index.html @@ -0,0 +1,177 @@ + + + + + + + Neko — neko documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Neko

+Tests +Documentation +
+

Neko: Network Konstructor

+

Neko is a Python package for extracting, visualizing, converting, and studying interactions from databases into executable activity flow-based models. It’s built on top of Omnipath, Pypath, and Atopo.

+

Note: Neko is currently in development and approaching its final stages. It is not yet available on PyPI.

+
+
+

Features

+
    +
  • Network creation and manipulation

  • +
  • Connection of nodes and subnetworks

  • +
  • Gene-to-phenotype mapping

  • +
  • Network visualization

  • +
  • Interaction database integration

  • +
+
+
+

Installation

+

As Neko is still in development, you can install it directly from the GitHub repository:

+
git clone https://github.com/sysbio-curie/Neko.git
+cd Neko
+pip install -e .
+
+
+
+
+

Documentation

+

For full documentation, including API reference and detailed tutorials, visit our GitHub Pages documentation.

+
+
+

Jupyter Notebooks

+

We provide a comprehensive set of Jupyter notebooks that offer a detailed and user-friendly explanation of the package. These notebooks cover all modules of NeKo and provide a complete overview of how to use the package:

+
    +
  1. Network Building

  2. +
  3. Adding Resources

  4. +
  5. Building Phosphosite Networks

  6. +
  7. Connecting Upstream

  8. +
  9. Ontology

  10. +
  11. Tissue Mapping

  12. +
+

You can find these notebooks in the notebooks directory of the repository.

+
+
+

Acknowledgements

+

This project is a collaborative effort with Dénes Turei and Asmund Flobak.

+

Current contributors: Marco Ruscone, Eirini Tsirvouli, Andrea Checcoli, Dénes Turei.

+
+
+

version 0.9.1

+
    +
  • Network creation and manipulation: The package allows for the creation of a network of nodes and edges, with various methods for enrichment analysis. This includes adding and removing nodes and edges, loading a network from a SIF (Simple Interaction Format) file, and adding paths to the edge list of the network.

  • +
  • Connection of nodes: The package provides several methods to connect nodes in the network. This includes connecting all nodes, connecting a subgroup of nodes, connecting all nodes of a network object, and connecting subcomponents of a network object.

  • +
  • Connection of genes to phenotype: The package provides a method to connect genes to a phenotype based on provided parameters. This includes retrieving phenotype markers, identifying unique Uniprot genes, and connecting them to the network. There is also an option to compress the network by substituting specified genes with the phenotype name.

  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/1_network_building.html b/notebooks/1_network_building.html new file mode 100644 index 0000000..31196f2 --- /dev/null +++ b/notebooks/1_network_building.html @@ -0,0 +1,549 @@ + + + + + + + Usage — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Usage

+

This notebook provides the steps to build a network starting from a list of genes, and using the default functionalities of NeKo.

+
+
[1]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+import omnipath as op
+
+
+
+
+
+
+
+
+
+CPU times: user 6.12 s, sys: 1.61 s, total: 7.73 s
+Wall time: 5.23 s
+
+
+
+

1. Define the list of genes of interest

+
+
[2]:
+
+
+
+
genes = ["SRC", "NOTCH1", "FAK", "CDH1", "CDH2", "VIM", "MAP4K4", "LATS1", "LATS2", "PTK2B"]
+
+
+
+
+
+
+

2. Create a network using as input the gene set.

+
+

Note

+

NB! If no resource is specified, the default used resource by the package is omnipath.all_interactions(). To add new resources, please see the Add resources tutorial.

+
+
+

2A. Import genes as network nodes

+
+
[3]:
+
+
+
+
new_net1 = Network(genes, resources = 'omnipath')
+
+
+
+
+
+
[4]:
+
+
+
+
#Print node dataframe
+new_net1.nodes
+
+
+
+
+
+
[4]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
+
+
+
+
+

2B. Explore if the nodes are connected without introducing new intermidiate nodes

+
+
[5]:
+
+
+
+
%%time
+new_net1.connect_nodes(only_signed=True, consensus_only=True)
+
+
+
+
+
+
+
+
+
+CPU times: user 169 ms, sys: 170 µs, total: 169 ms
+Wall time: 168 ms
+
+
+
+
+

2C. Visualize the network with the following command.

+

The network picture is also exported in the working repository, in pdf format.

+
+
[6]:
+
+
+
+
visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_1_network_building_11_0.svg +
+
+
+
+

2D. Connect disconnected nodes by importing intermediate nodes.

+

The parameter maxlen sets the maximum length of the paths to be searched of.

+

The parameter algorithm sets the base algorithm to use when looking for paths in the resources. It can be ‘bfs’ (Breadth-First Search) or ‘dfs’ (Depth-First Search). The first one is faster but does not always retrieve the shortest path, while the second one retrieves all the possible shortest paths at higher computational cost.

+

The parameter only_signed forces the algorithm to look for just signed interactions.

+

The parameter consensus retrieves those interactions with a sign consensus between the references (when possible).

+

The parameter connect_with_bias, changes the base algorithm, making it look for possible connection between all the disconnected node in the network when a new bridge-gene is introduced in the network, biasing the final network topology.

+
+
[7]:
+
+
+
+
%%time
+new_net1.complete_connection(maxlen=3, algorithm="bfs", only_signed=True, connect_with_bias=False, consensus=True)
+
+
+
+
+
+
+
+
+
+CPU times: user 9.08 s, sys: 6.68 ms, total: 9.08 s
+Wall time: 9.08 s
+
+
+
+
+
+

3. Visualize final network

+
+
[8]:
+
+
+
+
#Visualize a specific nodes and
+visualizer1 = NetworkVisualizer(new_net1,color_by='effect', noi=True)
+visualizer1.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_1_network_building_15_0.svg +
+
+
+
[9]:
+
+
+
+
#Visualize a specific nodes and
+visualizer1 = NetworkVisualizer(new_net1, predefined_node = "SRC",color_by='effect')
+visualizer1.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_1_network_building_16_0.svg +
+
+
+
[10]:
+
+
+
+
#We can access to the edges of the network
+new_net1.edges
+
+
+
+
+
+
[10]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetTypeEffectReferences
0P12931Q05397NonestimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12830P12931NonestimulationACSN:16039586;ACSN:16099633;ACSN:17143292;ACSN...
2P12931P19022NoneinhibitionACSN:15782139;ACSN:16371504;ACSN:16492141;ACSN...
3P12931Q14289NonestimulationAdhesome:10329689;Adhesome:10521452;Adhesome:1...
4Q14289Q05397NonestimulationAdhesome:16760434;HPRD:16760434;KEA:12960434;K...
..................
170P17612P50552NonestimulationAdhesome:10851246;Adhesome:10922374;Adhesome:8...
171Q13153O95863NonestimulationInnateDB:15833848;KEA:15833848;PhosphoSite:158...
172Q13153Q99759NonestimulationNaN
173P00519Q13188NonestimulationPhosphoSite:22590567;ProtMapper:22590567;ProtM...
174Q13315P00519NonestimulationACSN:11804596;ACSN:11877377;ACSN:12607003;ACSN...
+

175 rows × 5 columns

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/1_network_building.ipynb b/notebooks/1_network_building.ipynb new file mode 100644 index 0000000..caf29ad --- /dev/null +++ b/notebooks/1_network_building.ipynb @@ -0,0 +1,2199 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Usage\n", + "\n", + "This notebook provides the steps to build a network starting from a list of genes, and using the default functionalities of NeKo." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.12 s, sys: 1.61 s, total: 7.73 s\n", + "Wall time: 5.23 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "markdown", + "id": "6a5b5adf", + "metadata": {}, + "source": [ + "## 2. Create a network using as input the gene set. \n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! If no resource is specified, the default used resource by the package is `omnipath.all_interactions()`. To add new resources, please see the [Add resources](https://omniflow-project.readthedocs.io/en/latest/notebooks/add_resources.html#) tutorial. \n", + "\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 2A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN\n", + "9 PTK2B Q14289 NaN" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "a2759581", + "metadata": {}, + "source": [ + "### 2B. Explore if the nodes are connected without introducing new intermidiate nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a339705b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 169 ms, sys: 170 µs, total: 169 ms\n", + "Wall time: 168 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)" + ] + }, + { + "cell_type": "markdown", + "id": "2fb5674d", + "metadata": {}, + "source": [ + "### 2C. Visualize the network with the following command. \n", + "\n", + "The network picture is also exported in the working repository, in pdf format." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "db39112a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "markdown", + "id": "3c1725cc-4c08-4a85-b26c-8f59936e351d", + "metadata": {}, + "source": [ + "### 2D. Connect disconnected nodes by importing intermediate nodes.\n", + "\n", + "The parameter _*maxlen*_ sets the maximum length of the paths to be searched of. \n", + "\n", + "The parameter _*algorithm*_ sets the base algorithm to use when looking for paths in the resources. It can be 'bfs' (Breadth-First Search) or 'dfs' (Depth-First Search). The first one is faster but does not always retrieve the shortest path, while the second one retrieves all the possible shortest paths at higher computational cost.\n", + "\n", + "The parameter _*only_signed*_ forces the algorithm to look for just signed interactions. \n", + "\n", + "The parameter _*consensus*_ retrieves those interactions with a sign consensus between the references (when possible). \n", + "\n", + "The parameter _*connect_with_bias*_, changes the base algorithm, making it look for possible connection between all the disconnected node in the network when a new bridge-gene is introduced in the network, biasing the final network topology." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9a07d77b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9.08 s, sys: 6.68 ms, total: 9.08 s\n", + "Wall time: 9.08 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(maxlen=3, algorithm=\"bfs\", only_signed=True, connect_with_bias=False, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "c6510316-2f47-4e71-89e0-b93da0657897", + "metadata": {}, + "source": [ + "## 3. Visualize final network" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c3e1190e-8dec-4faa-9cfc-9f046289a4bf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SRC->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA\n", + "\n", + "RHOA\n", + "\n", + "\n", + "\n", + "SRC->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA3\n", + "\n", + "RPS6KA3\n", + "\n", + "\n", + "\n", + "SRC->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "SRC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4\n", + "\n", + "FLT4\n", + "\n", + "\n", + "\n", + "SRC->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1\n", + "\n", + "ITGB1\n", + "\n", + "\n", + "\n", + "SRC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "SRC->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1\n", + "\n", + "PAK1\n", + "\n", + "\n", + "\n", + "SRC->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1\n", + "\n", + "ABL1\n", + "\n", + "\n", + "\n", + "SRC->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A\n", + "\n", + "RAP1A\n", + "\n", + "\n", + "\n", + "CDH1->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VASP\n", + "\n", + "VASP\n", + "\n", + "\n", + "\n", + "CDH1->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53\n", + "\n", + "TP53\n", + "\n", + "\n", + "\n", + "PTK2B->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK\n", + "\n", + "LCK\n", + "\n", + "\n", + "\n", + "PTK2B->LCK\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3\n", + "\n", + "FOXO3\n", + "\n", + "\n", + "\n", + "PTK2B->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "NOTCH1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX2\n", + "\n", + "SOX2\n", + "\n", + "\n", + "\n", + "NOTCH1->SOX2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1A\n", + "\n", + "CDKN1A\n", + "\n", + "\n", + "\n", + "NOTCH1->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG\n", + "\n", + "IFNG\n", + "\n", + "\n", + "\n", + "NOTCH1->IFNG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "NOTCH1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K1\n", + "\n", + "MAP3K1\n", + "\n", + "\n", + "\n", + "EGFR->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2\n", + "\n", + "DVL2\n", + "\n", + "\n", + "\n", + "DVL2->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DVL2->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->LCK\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA\n", + "\n", + "PRKCA\n", + "\n", + "\n", + "\n", + "PRKCA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->DVL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "PRKCA->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "TP53->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "TP53->MAP4K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "LATS2->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNAI1\n", + "\n", + "SNAI1\n", + "\n", + "\n", + "\n", + "LATS2->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->SOX2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX2->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDKN1A->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1A->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K3\n", + "\n", + "MAP3K3\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K1->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPP1R12A\n", + "\n", + "PPP1R12A\n", + "\n", + "\n", + "\n", + "PLK1\n", + "\n", + "PLK1\n", + "\n", + "\n", + "\n", + "PPP1R12A->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->DVL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2\n", + "\n", + "MDM2\n", + "\n", + "\n", + "\n", + "PLK1->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PLK1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PLK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IFNG->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MDM2->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LCK->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1->FOXO3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "CDK1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAP1A->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->RAP1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->VASP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNAI1->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->SNAI1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->MAP3K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->MAP3K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3\n", + "\n", + "STK3\n", + "\n", + "\n", + "\n", + "ABL1->STK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STK3->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3->CDKN1A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM\n", + "\n", + "ATM\n", + "\n", + "\n", + "\n", + "FOXO3->ATM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->TP53\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->PLK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->MDM2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ATM->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize a specific nodes and \n", + "visualizer1 = NetworkVisualizer(new_net1,color_by='effect', noi=True)\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "80b84e81-abc2-4aae-ad1c-3ebf00355b98", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n", + "SRC->PTK2B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA3\n", + "\n", + "RPS6KA3\n", + "\n", + "\n", + "\n", + "SRC->RPS6KA3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGFR\n", + "\n", + "EGFR\n", + "\n", + "\n", + "\n", + "SRC->EGFR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RHOA\n", + "\n", + "RHOA\n", + "\n", + "\n", + "\n", + "SRC->RHOA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "SRC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT4\n", + "\n", + "FLT4\n", + "\n", + "\n", + "\n", + "SRC->FLT4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ITGB1\n", + "\n", + "ITGB1\n", + "\n", + "\n", + "\n", + "SRC->ITGB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "SRC->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAK1\n", + "\n", + "PAK1\n", + "\n", + "\n", + "\n", + "SRC->PAK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ABL1\n", + "\n", + "ABL1\n", + "\n", + "\n", + "\n", + "SRC->ABL1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH1->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKCA\n", + "\n", + "PRKCA\n", + "\n", + "\n", + "\n", + "PRKCA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PRKACA->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize a specific nodes and \n", + "visualizer1 = NetworkVisualizer(new_net1, predefined_node = \"SRC\",color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0aa6d076-5310-462e-aa0e-f69da822b962", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P12931Q05397NonestimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12830P12931NonestimulationACSN:16039586;ACSN:16099633;ACSN:17143292;ACSN...
2P12931P19022NoneinhibitionACSN:15782139;ACSN:16371504;ACSN:16492141;ACSN...
3P12931Q14289NonestimulationAdhesome:10329689;Adhesome:10521452;Adhesome:1...
4Q14289Q05397NonestimulationAdhesome:16760434;HPRD:16760434;KEA:12960434;K...
..................
170P17612P50552NonestimulationAdhesome:10851246;Adhesome:10922374;Adhesome:8...
171Q13153O95863NonestimulationInnateDB:15833848;KEA:15833848;PhosphoSite:158...
172Q13153Q99759NonestimulationNaN
173P00519Q13188NonestimulationPhosphoSite:22590567;ProtMapper:22590567;ProtM...
174Q13315P00519NonestimulationACSN:11804596;ACSN:11877377;ACSN:12607003;ACSN...
\n", + "

175 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " source target Type Effect \\\n", + "0 P12931 Q05397 None stimulation \n", + "1 P12830 P12931 None stimulation \n", + "2 P12931 P19022 None inhibition \n", + "3 P12931 Q14289 None stimulation \n", + "4 Q14289 Q05397 None stimulation \n", + ".. ... ... ... ... \n", + "170 P17612 P50552 None stimulation \n", + "171 Q13153 O95863 None stimulation \n", + "172 Q13153 Q99759 None stimulation \n", + "173 P00519 Q13188 None stimulation \n", + "174 Q13315 P00519 None stimulation \n", + "\n", + " References \n", + "0 Adhesome:10085298;Adhesome:10592173;Adhesome:1... \n", + "1 ACSN:16039586;ACSN:16099633;ACSN:17143292;ACSN... \n", + "2 ACSN:15782139;ACSN:16371504;ACSN:16492141;ACSN... \n", + "3 Adhesome:10329689;Adhesome:10521452;Adhesome:1... \n", + "4 Adhesome:16760434;HPRD:16760434;KEA:12960434;K... \n", + ".. ... \n", + "170 Adhesome:10851246;Adhesome:10922374;Adhesome:8... \n", + "171 InnateDB:15833848;KEA:15833848;PhosphoSite:158... \n", + "172 NaN \n", + "173 PhosphoSite:22590567;ProtMapper:22590567;ProtM... \n", + "174 ACSN:11804596;ACSN:11877377;ACSN:12607003;ACSN... \n", + "\n", + "[175 rows x 5 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#We can access to the edges of the network\n", + "new_net1.edges" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/2_add_resources.html b/notebooks/2_add_resources.html new file mode 100644 index 0000000..8bd0fd3 --- /dev/null +++ b/notebooks/2_add_resources.html @@ -0,0 +1,1572 @@ + + + + + + + Build network using user-defined resources — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Build network using user-defined resources

+

This notebook explores how to add other individual resources from Omnipath or other public databases.

+
+
[35]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe, signor
+import omnipath as op
+import pandas as pd
+
+
+
+
+
+
+
+
+
+CPU times: user 14 µs, sys: 1 µs, total: 15 µs
+Wall time: 16.9 µs
+
+
+
+

1. Adding a resource already in OmniPath

+
+

1A. Specify the interaction resource of interest

+
+
[36]:
+
+
+
+
collectri = op.interactions.CollecTRI.get()
+
+
+
+
+
+
+

1B. Add new resource to the Resources object

+
+
[37]:
+
+
+
+
resources = Universe()
+resources.add_resources(collectri, name = 'collectri')
+resources.build()
+
+
+
+
+
+
[38]:
+
+
+
+
resources.interactions
+
+
+
+
+
+
[38]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetis_directedis_stimulationis_inhibitionconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessourcesn_sourcesn_primary_sourcesn_referencesreferences_strippedform_complex
0P01106O14746FalseTrueFalseTrueTrueFalse82CollecTRI:10022128;CollecTRI:10491298;CollecTR...CollecTRI;DoRothEA-A_CollecTRI;ExTRI_CollecTRI...817410022128;10491298;10606235;10637317;10723141;1...False
1P17947P02818FalseTrueFalseTrueTrueFalse3CollecTRI:10022617CollecTRI;ExTRI_CollecTRI21110022617False
2COMPLEX:P15407_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
3COMPLEX:P01100_P05412P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
4COMPLEX:P01100_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
...................................................
64490Q01196Q13094FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64491Q01196Q6MZQ0FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64492Q15672P08151FalseTrueFalseTrueTrueFalse3CollecTRI:11948912CollecTRI;DoRothEA-A_CollecTRI21111948912False
64493P22415Q5SRE5FalseTrueFalseTrueTrueFalse3CollecTRI:22951020CollecTRI;DoRothEA-A_CollecTRI21122951020False
64494Q9UQR1Q5VYX0FalseTrueFalseTrueTrueFalse3CollecTRI:25295465CollecTRI;DoRothEA-A_CollecTRI21125295465False
+

64495 rows × 16 columns

+
+
+

It is important once added a new resource, to build the database as showcases in the previous cell. All those steps assure that the incoming database is compatible with the NeKo structure, possibly avoiding mistakes when running the connecting algorithms.

+

Sometimes a WARNING can suggest that some interactions could be missing; while this is limiting the amount of knowledge NeKo can extract, it does not prevent the package from working. Other possible cause of a WARNING is the absence of “consensus” columns. To avoid errors while running the package, set always consensus to False.

+
+
+
+

2. Adding a public database

+

Alternatively, the user might want to use their own interaction databases. We have already implemented the inclusion of some of widely used databases.

+

As example, we show here how to integrate the Signor 3.0 database. In order to do so, the User needs to have already downloaded the whole Signor database, available at the following link: https://signor.uniroma2.it/downloads.php or with the following code:.

+
+

2A. Add Signor database

+
+
[39]:
+
+
+
+
resources = Universe()
+resources = signor("../neko/_data/signor_db.tsv")  # this function accept only tab separated values
+resources.build()
+
+
+
+
+
+
[40]:
+
+
+
+
resources.interactions
+
+
+
+
+
+
[40]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetis_directedis_stimulationis_inhibitionform_complexconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessources
0A0A024RAD5SIGNOR-C535TrueFalseFalseTrueFalseFalseFalsemiannu31831667SIGNOR-272062
1A0A0B4J2F0P18848TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261041
2A0A0B4J2F0P35638TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261043
3A0A0B4J2F0SIGNOR-PH2TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261042
4A0AVT1SIGNOR-C496TrueFalseFalseTrueFalseFalseFalsemiannu24816100SIGNOR-270835
.......................................
28850URS000075C808_9606Q6ZN04TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272092
28851URS000075C808_9606Q86Y13TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272091
28852URS000075CF56_9606P05019TrueFalseTrueFalseFalseFalseFalsemiannu25477897SIGNOR-255793
28853URS000075CF56_9606P23759TrueFalseTrueFalseFalseFalseFalseirozzo24708856SIGNOR-256124
28854URS000075D8A0_9606P61073TrueTrueFalseFalseFalseFalseFalseLuisa20516212SIGNOR-268952
+

28855 rows × 12 columns

+
+
+

In order to avoid conflict or errors, ensure that the file contains at least the following columns: IDA, IDB, EFFECT, ANNOTATOR, PMID, SIGNOR_ID

+
+

Note

+

SIGNOR uses has different identifiers for complexes, protein family, phenotype, etc. It is possible that the network contains nodes names like “Signor_pf32” or something like this… This is not yet translated, but if you are interested in what those nodes consist of, you can use download their vocabulary for the entities: https://signor.uniroma2.it/downloads.php

+
+
+
+
+

3. Build the network

+
+

3A. Import genes as network nodes

+
+
[41]:
+
+
+
+
genes = ["SRC", "NOTCH1", "PTK2", "CDH1", "CDH2", "VIM", "MAP4K4", "LATS1", "LATS2"]
+
+
+
+
+
+
+

3B. Create network object by specifying the interaction resources

+
+
[42]:
+
+
+
+
new_net1 = Network(genes, resources = resources.interactions)
+
+
+
+
+
+
[43]:
+
+
+
+
#Print node dataframe
+new_net1.nodes
+
+
+
+
+
+
[43]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
+
+
+
+
+

3C. Build network

+

The downstream steps to connect your nodes, are the same. Please see the Network building tutorial for detailed explanations of each step.

+
+
[44]:
+
+
+
+
%%time
+new_net1.connect_nodes(only_signed=True, consensus_only=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 24.8 ms, sys: 945 µs, total: 25.8 ms
+Wall time: 25.2 ms
+
+
+
+
[45]:
+
+
+
+
visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_2_add_resources_24_0.svg +
+
+
+

Note

+

NB! It is important to note, that not all the databases have the same structure as Omnipath. In particular, if the columns “consensus” are missing, we suggest to avoid to use the flag consensus or consensus_only when using NeKo with customize databases. As a general advise, we suggest to always use consensus=False when you are using a database different from the Omnipath.

+
+
+
[46]:
+
+
+
+
%%time
+new_net1.complete_connection(maxlen=3, algorithm="bfs", only_signed=True, connect_with_bias=False, consensus=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 2.59 s, sys: 112 ms, total: 2.7 s
+Wall time: 2.7 s
+
+
+
+
[47]:
+
+
+
+
#Visualize network
+visualizer1 = NetworkVisualizer(new_net1, color_by='effect', noi=True)
+visualizer1.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_2_add_resources_27_0.svg +
+
+
+
+
+

4. Translate IDs

+

NeKo’s resource object relies on UniProt IDs. In cases where the user-defined database does not have UniProt IDs, NeKo offers the function to translate between different IDs. The translation module is based on the python package “Unipressed” (https://github.com/multimeric/Unipressed).

+

In the example below, we use the HURI database (http://www.interactome-atlas.org/) which provides protein-protein interactions (ppi) with ENSEMBL IDs.

+

To run the following example, please download the database at the following link: http://www.interactome-atlas.org/download. The example uses the HI-Union version of the database in .tsv format.

+
+
[13]:
+
+
+
+
#Import the module
+from neko.inputs.db_translator import IDTranslator
+
+
+
+
+

The IDTranslator function receives as arguments the input and output file names, together with the existing IDs and the target ones (in that case Ensembl to UniProtKB IDs).

+
+

Note

+

NB! The IDTranslator can take several minutes the first time you translate a database, depending on the size of the database.

+
+
+
[43]:
+
+
+
+
translator = IDTranslator('HI-union.tsv', 'genes_translated.csv', 'Ensembl', 'UniProtKB-Swiss-Prot', has_header=False, input_columns=['source', 'target'], processes=12)
+
+
+
+
+
+
[44]:
+
+
+
+
%%time
+translator.run()
+
+
+
+
+
+
+
+
+
2024-07-22 12:03:12,217 - IDTranslator_140412855874560 - INFO - Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot
+
+
+
+
+
+
+
2024-07-22 12:03:12,301 - IDTranslator_140412855874560 - INFO - Loaded 64006 rows with 9094 unique IDs
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Loaded 64006 rows with 9094 unique IDs
+
+
+
+
+
+
+
2024-07-22 12:03:12,314 - IDTranslator_140412855874560 - INFO - Loaded progress from checkpoint_batch_91.pkl
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Loaded progress from checkpoint_batch_91.pkl
+
+
+
+
+
+
+
+
+
+
+
+
+
2024-07-22 12:03:12,627 - IDTranslator_140412855874560 - INFO - Applying translation to dataframe...
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Applying translation to dataframe...
+
+
+
+
+
+
+
2024-07-22 12:05:01,954 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated.csv
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Results saved to genes_translated.csv
+
+
+
+
+
+
+
2024-07-22 12:05:02,150 - IDTranslator_140412855874560 - INFO - ID translation process completed in 109.93 seconds
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:ID translation process completed in 109.93 seconds
+
+
+
+
+
+
+
2024-07-22 12:05:02,170 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Original entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,173 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Translated entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,178 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Expansion factor: 1.00
+
+
+
+
+
+
+
2024-07-22 12:05:02,182 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Translation success rate: 100.00%
+
+
+
+
+
+
+
+CPU times: user 1min 49s, sys: 727 ms, total: 1min 49s
+Wall time: 1min 49s
+
+
+
+
[45]:
+
+
+
+
translator.remove_untranslated_entries()
+
+
+
+
+
+
+
+
+
2024-07-22 12:05:02,439 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated_cleaned.csv
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Results saved to genes_translated_cleaned.csv
+
+
+
+
+
+
+
2024-07-22 12:05:02,442 - IDTranslator_140412855874560 - INFO - Removed 0 untranslated entries.
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Removed 0 untranslated entries.
+
+
+
+
+
+
+
2024-07-22 12:05:02,446 - IDTranslator_140412855874560 - INFO - Cleaned database saved to genes_translated_cleaned.csv
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Cleaned database saved to genes_translated_cleaned.csv
+
+
+
+
+
+
+
2024-07-22 12:05:02,450 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Original entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,453 - IDTranslator_140412855874560 - INFO - Cleaned entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Cleaned entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,472 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Original entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,475 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Translated entry count: 64065
+
+
+
+
+
+
+
2024-07-22 12:05:02,479 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Expansion factor: 1.00
+
+
+
+
+
+
+
2024-07-22 12:05:02,483 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
+
+
+
+
+
+
+INFO:IDTranslator_140412855874560:Translation success rate: 100.00%
+
+
+
+
[14]:
+
+
+
+
huri = pd.read_csv("genes_translated_cleaned.csv", usecols=["source_UniProtKB-Swiss-Prot", "target_UniProtKB-Swiss-Prot"])
+
+
+
+
+
+
[15]:
+
+
+
+
huri.head()
+
+
+
+
+
+
[15]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
source_UniProtKB-Swiss-Prottarget_UniProtKB-Swiss-Prot
0Q9H2S6Q9NPE6
1Q9H2S6Q9BXK5
2Q9H2S6O60238
3Q9H2S6P20138
4Q9H2S6Q9UM44
+
+
+
+
[27]:
+
+
+
+
resources = Universe()
+
+
+
+
+
+
[28]:
+
+
+
+
mapping = {"source_UniProtKB-Swiss-Prot": "source", "target_UniProtKB-Swiss-Prot": "target"}
+resources.add_resources(huri, columns=mapping,  reset_index=True)
+
+
+
+
+
+
[29]:
+
+
+
+
resources.build()
+
+
+
+
+
+
[30]:
+
+
+
+
resources.interactions
+
+
+
+
+
+
[30]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetis_directedis_stimulationis_inhibitionform_complex
0Q9H2S6Q9NPE6FalseFalseFalseFalse
1Q9H2S6Q9BXK5FalseFalseFalseFalse
2Q9H2S6O60238FalseFalseFalseFalse
3Q9H2S6P20138FalseFalseFalseFalse
4Q9H2S6Q9UM44FalseFalseFalseFalse
.....................
64060B2RXH8B2RXH8FalseFalseFalseFalse
64061Q8NHW4Q6IN84FalseFalseFalseFalse
64062ENSG00000276076ENSG00000276076FalseFalseFalseFalse
64063Q9UI36Q9UI36FalseFalseFalseFalse
64064ENSG00000280987ENSG00000280987FalseFalseFalseFalse
+

64065 rows × 6 columns

+
+
+
+
[31]:
+
+
+
+
genes = ["CD33", "TNMD", "AMIGO1"]
+
+
+
+
+
+
[32]:
+
+
+
+
new_net1 = Network(genes, resources=resources.interactions)
+
+
+
+
+
+
[33]:
+
+
+
+
new_net1.connect_network_radially(max_len=1, only_signed=False, consensus=False)
+
+
+
+
+
+
[34]:
+
+
+
+
visualizer = NetworkVisualizer(new_net1, color_by='effect')
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_2_add_resources_44_0.svg +
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/2_add_resources.ipynb b/notebooks/2_add_resources.ipynb new file mode 100644 index 0000000..241b785 --- /dev/null +++ b/notebooks/2_add_resources.ipynb @@ -0,0 +1,2642 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Build network using user-defined resources\n", + "\n", + "This notebook explores how to add other individual resources from Omnipath or other public databases." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 14 µs, sys: 1 µs, total: 15 µs\n", + "Wall time: 16.9 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "2a250d98", + "metadata": {}, + "source": [ + "## 1. Adding a resource already in OmniPath" + ] + }, + { + "cell_type": "markdown", + "id": "0e6b2c56-80cd-459b-984a-fa235c1a0085", + "metadata": {}, + "source": [ + "### 1A. Specify the interaction resource of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "829de33a", + "metadata": {}, + "outputs": [], + "source": [ + "collectri = op.interactions.CollecTRI.get()" + ] + }, + { + "cell_type": "markdown", + "id": "fc585a3c", + "metadata": {}, + "source": [ + "### 1B. Add new resource to the Resources object" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "91ae2cef", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources.add_resources(collectri, name = 'collectri')\n", + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "695822e0-4bb7-4c4d-a951-0ca5125b0b1d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessourcesn_sourcesn_primary_sourcesn_referencesreferences_strippedform_complex
0P01106O14746FalseTrueFalseTrueTrueFalse82CollecTRI:10022128;CollecTRI:10491298;CollecTR...CollecTRI;DoRothEA-A_CollecTRI;ExTRI_CollecTRI...817410022128;10491298;10606235;10637317;10723141;1...False
1P17947P02818FalseTrueFalseTrueTrueFalse3CollecTRI:10022617CollecTRI;ExTRI_CollecTRI21110022617False
2COMPLEX:P15407_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
3COMPLEX:P01100_P05412P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
4COMPLEX:P01100_P17275P05412FalseTrueFalseTrueTrueFalse53CollecTRI:10022869;CollecTRI:10037172;CollecTR...CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT...414910022869;10037172;10208431;10366004;11281649;1...False
...................................................
64490Q01196Q13094FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64491Q01196Q6MZQ0FalseTrueFalseTrueTrueFalse3CollecTRI:20019798CollecTRI;DoRothEA-A_CollecTRI21120019798False
64492Q15672P08151FalseTrueFalseTrueTrueFalse3CollecTRI:11948912CollecTRI;DoRothEA-A_CollecTRI21111948912False
64493P22415Q5SRE5FalseTrueFalseTrueTrueFalse3CollecTRI:22951020CollecTRI;DoRothEA-A_CollecTRI21122951020False
64494Q9UQR1Q5VYX0FalseTrueFalseTrueTrueFalse3CollecTRI:25295465CollecTRI;DoRothEA-A_CollecTRI21125295465False
\n", + "

64495 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 P01106 O14746 False True \n", + "1 P17947 P02818 False True \n", + "2 COMPLEX:P15407_P17275 P05412 False True \n", + "3 COMPLEX:P01100_P05412 P05412 False True \n", + "4 COMPLEX:P01100_P17275 P05412 False True \n", + "... ... ... ... ... \n", + "64490 Q01196 Q13094 False True \n", + "64491 Q01196 Q6MZQ0 False True \n", + "64492 Q15672 P08151 False True \n", + "64493 P22415 Q5SRE5 False True \n", + "64494 Q9UQR1 Q5VYX0 False True \n", + "\n", + " is_inhibition consensus_direction consensus_stimulation \\\n", + "0 False True True \n", + "1 False True True \n", + "2 False True True \n", + "3 False True True \n", + "4 False True True \n", + "... ... ... ... \n", + "64490 False True True \n", + "64491 False True True \n", + "64492 False True True \n", + "64493 False True True \n", + "64494 False True True \n", + "\n", + " consensus_inhibition curation_effort \\\n", + "0 False 82 \n", + "1 False 3 \n", + "2 False 53 \n", + "3 False 53 \n", + "4 False 53 \n", + "... ... ... \n", + "64490 False 3 \n", + "64491 False 3 \n", + "64492 False 3 \n", + "64493 False 3 \n", + "64494 False 3 \n", + "\n", + " references \\\n", + "0 CollecTRI:10022128;CollecTRI:10491298;CollecTR... \n", + "1 CollecTRI:10022617 \n", + "2 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "3 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "4 CollecTRI:10022869;CollecTRI:10037172;CollecTR... \n", + "... ... \n", + "64490 CollecTRI:20019798 \n", + "64491 CollecTRI:20019798 \n", + "64492 CollecTRI:11948912 \n", + "64493 CollecTRI:22951020 \n", + "64494 CollecTRI:25295465 \n", + "\n", + " sources n_sources \\\n", + "0 CollecTRI;DoRothEA-A_CollecTRI;ExTRI_CollecTRI... 8 \n", + "1 CollecTRI;ExTRI_CollecTRI 2 \n", + "2 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "3 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "4 CollecTRI;ExTRI_CollecTRI;NTNU.Curated_CollecT... 4 \n", + "... ... ... \n", + "64490 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64491 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64492 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64493 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "64494 CollecTRI;DoRothEA-A_CollecTRI 2 \n", + "\n", + " n_primary_sources n_references \\\n", + "0 1 74 \n", + "1 1 1 \n", + "2 1 49 \n", + "3 1 49 \n", + "4 1 49 \n", + "... ... ... \n", + "64490 1 1 \n", + "64491 1 1 \n", + "64492 1 1 \n", + "64493 1 1 \n", + "64494 1 1 \n", + "\n", + " references_stripped form_complex \n", + "0 10022128;10491298;10606235;10637317;10723141;1... False \n", + "1 10022617 False \n", + "2 10022869;10037172;10208431;10366004;11281649;1... False \n", + "3 10022869;10037172;10208431;10366004;11281649;1... False \n", + "4 10022869;10037172;10208431;10366004;11281649;1... False \n", + "... ... ... \n", + "64490 20019798 False \n", + "64491 20019798 False \n", + "64492 11948912 False \n", + "64493 22951020 False \n", + "64494 25295465 False \n", + "\n", + "[64495 rows x 16 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "markdown", + "id": "23a62f81-1da2-42e8-ae04-696897ac7ae4", + "metadata": {}, + "source": [ + "It is important once added a new resource, to build the database as showcases in the previous cell. All those steps assure that the incoming database is compatible with the NeKo structure, possibly avoiding mistakes when running the connecting algorithms." + ] + }, + { + "cell_type": "markdown", + "id": "068cbc5c-93a5-46d9-b0a6-bc520ee66bfc", + "metadata": {}, + "source": [ + "Sometimes a WARNING can suggest that some interactions could be missing; while this is limiting the amount of knowledge NeKo can extract, it does not prevent the package from working. Other possible cause of a WARNING is the absence of \"consensus\" columns. To avoid errors while running the package, set always consensus to False." + ] + }, + { + "cell_type": "markdown", + "id": "ece16ef7-cf9f-4f50-ad5f-99568bdfec88", + "metadata": {}, + "source": [ + "## 2. Adding a public database\n", + "\n", + "Alternatively, the user might want to use their own interaction databases. We have already implemented the inclusion of some of widely used databases. \n", + "\n", + "As example, we show here how to integrate the [Signor 3.0](https://signor.uniroma2.it/) database. In order to do so, the User needs to have already downloaded the whole Signor database, available at the following link: [https://signor.uniroma2.it/downloads.php](https://signor.uniroma2.it/downloads.php) or with the following code:. " + ] + }, + { + "cell_type": "markdown", + "id": "8361d2b2-646b-4080-bc36-ca28c9bfab10", + "metadata": {}, + "source": [ + "### 2A. Add Signor database\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "4fd4b190-350a-4682-8f09-8c6423064038", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "c7e5fe30-55c4-467b-aa7d-5c02cfba7dd2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionform_complexconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessources
0A0A024RAD5SIGNOR-C535TrueFalseFalseTrueFalseFalseFalsemiannu31831667SIGNOR-272062
1A0A0B4J2F0P18848TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261041
2A0A0B4J2F0P35638TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261043
3A0A0B4J2F0SIGNOR-PH2TrueFalseTrueFalseFalseFalseFalsemiannu31653868SIGNOR-261042
4A0AVT1SIGNOR-C496TrueFalseFalseTrueFalseFalseFalsemiannu24816100SIGNOR-270835
.......................................
28850URS000075C808_9606Q6ZN04TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272092
28851URS000075C808_9606Q86Y13TrueTrueFalseFalseFalseFalseFalsemiannu24326307SIGNOR-272091
28852URS000075CF56_9606P05019TrueFalseTrueFalseFalseFalseFalsemiannu25477897SIGNOR-255793
28853URS000075CF56_9606P23759TrueFalseTrueFalseFalseFalseFalseirozzo24708856SIGNOR-256124
28854URS000075D8A0_9606P61073TrueTrueFalseFalseFalseFalseFalseLuisa20516212SIGNOR-268952
\n", + "

28855 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 A0A024RAD5 SIGNOR-C535 True False \n", + "1 A0A0B4J2F0 P18848 True False \n", + "2 A0A0B4J2F0 P35638 True False \n", + "3 A0A0B4J2F0 SIGNOR-PH2 True False \n", + "4 A0AVT1 SIGNOR-C496 True False \n", + "... ... ... ... ... \n", + "28850 URS000075C808_9606 Q6ZN04 True True \n", + "28851 URS000075C808_9606 Q86Y13 True True \n", + "28852 URS000075CF56_9606 P05019 True False \n", + "28853 URS000075CF56_9606 P23759 True False \n", + "28854 URS000075D8A0_9606 P61073 True True \n", + "\n", + " is_inhibition form_complex consensus_direction \\\n", + "0 False True False \n", + "1 True False False \n", + "2 True False False \n", + "3 True False False \n", + "4 False True False \n", + "... ... ... ... \n", + "28850 False False False \n", + "28851 False False False \n", + "28852 True False False \n", + "28853 True False False \n", + "28854 False False False \n", + "\n", + " consensus_stimulation consensus_inhibition curation_effort references \\\n", + "0 False False miannu 31831667 \n", + "1 False False miannu 31653868 \n", + "2 False False miannu 31653868 \n", + "3 False False miannu 31653868 \n", + "4 False False miannu 24816100 \n", + "... ... ... ... ... \n", + "28850 False False miannu 24326307 \n", + "28851 False False miannu 24326307 \n", + "28852 False False miannu 25477897 \n", + "28853 False False irozzo 24708856 \n", + "28854 False False Luisa 20516212 \n", + "\n", + " sources \n", + "0 SIGNOR-272062 \n", + "1 SIGNOR-261041 \n", + "2 SIGNOR-261043 \n", + "3 SIGNOR-261042 \n", + "4 SIGNOR-270835 \n", + "... ... \n", + "28850 SIGNOR-272092 \n", + "28851 SIGNOR-272091 \n", + "28852 SIGNOR-255793 \n", + "28853 SIGNOR-256124 \n", + "28854 SIGNOR-268952 \n", + "\n", + "[28855 rows x 12 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "markdown", + "id": "2065dada-a426-4774-80f9-7322db45efd0", + "metadata": {}, + "source": [ + "In order to avoid conflict or errors, ensure that the file contains at least the following columns: IDA, IDB, EFFECT, ANNOTATOR, PMID, SIGNOR_ID" + ] + }, + { + "cell_type": "markdown", + "id": "64b445e7-2e45-40ee-9ee9-268965b4d55b", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**Note**\n", + " \n", + "SIGNOR uses has different identifiers for complexes, protein family, phenotype, etc.\n", + "It is possible that the network contains nodes names like \"Signor_pf32\" or something like this... This is not yet translated, but if you are interested in what those nodes consist of, you can use download their vocabulary for the entities: [https://signor.uniroma2.it/downloads.php](https://signor.uniroma2.it/downloads.php)\n", + "\n", + "
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "8fe2700c-5b59-4302-9a9e-cc2de59d34af", + "metadata": {}, + "source": [ + "## 3. Build the network" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 3A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"PTK2\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\"]" + ] + }, + { + "cell_type": "markdown", + "id": "7cd015ca-f1bb-4055-9226-b4b01a0a0111", + "metadata": {}, + "source": [ + "### 3B. Create network object by specifying the interaction resources" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "a2759581", + "metadata": {}, + "source": [ + "### 3C. Build network\n", + "\n", + "The downstream steps to connect your nodes, are the same. Please see the [Network building](https://omniflow-project.readthedocs.io/en/latest/notebooks/network_building.html) tutorial for detailed explanations of each step." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a339705b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 24.8 ms, sys: 945 µs, total: 25.8 ms\n", + "Wall time: 25.2 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "db39112a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "SRC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "markdown", + "id": "7aae5ca7-5696-44ba-9e75-4a2d1eb0a2d9", + "metadata": {}, + "source": [ + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! It is important to note, that not all the databases have the same structure as Omnipath. In particular, if the columns \"consensus\" are missing, we suggest to avoid to use the flag `consensus` or `consensus_only` when using NeKo with customize databases. As a general advise, we suggest to always use `consensus=False` when you are using a database different from the Omnipath. \n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "12052b3b-854f-41a0-a762-20de5cbc7b35", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.59 s, sys: 112 ms, total: 2.7 s\n", + "Wall time: 2.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(maxlen=3, algorithm=\"bfs\", only_signed=True, connect_with_bias=False, consensus=False) " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "aca66151-159b-4bc6-85a8-4a537bb2afdf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "SRC->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "SRC->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN6\n", + "\n", + "PTPN6\n", + "\n", + "\n", + "\n", + "SRC->PTPN6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB1\n", + "\n", + "DAB1\n", + "\n", + "\n", + "\n", + "SRC->DAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "SRC->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDKN1B\n", + "\n", + "CDKN1B\n", + "\n", + "\n", + "\n", + "SRC->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TRIO\n", + "\n", + "TRIO\n", + "\n", + "\n", + "\n", + "PTK2->TRIO\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNA1\n", + "\n", + "CTNNA1\n", + "\n", + "\n", + "\n", + "CDH1->CTNNA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C21\n", + "\n", + "SIGNOR-C21\n", + "\n", + "\n", + "\n", + "CDH2->SIGNOR-C21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "HES1\n", + "\n", + "HES1\n", + "\n", + "\n", + "\n", + "NOTCH1->HES1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3\n", + "\n", + "FLT3\n", + "\n", + "\n", + "\n", + "HES1->FLT3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->PTPN6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FLT3->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN6->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB1->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC\n", + "\n", + "DCC\n", + "\n", + "\n", + "\n", + "TRIO->DCC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DCC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "CTNNA1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SGK1\n", + "\n", + "SGK1\n", + "\n", + "\n", + "\n", + "YAP1->SGK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMO\n", + "\n", + "SMO\n", + "\n", + "\n", + "\n", + "SGK1->SMO\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SGK1->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMO->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "SIGNOR-C21->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KHSRP\n", + "\n", + "KHSRP\n", + "\n", + "\n", + "\n", + "MAPK14->KHSRP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KHSRP->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->KHSRP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "MAP4K4->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3\n", + "\n", + "MAP2K3\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1\n", + "\n", + "VEPH1\n", + "\n", + "\n", + "\n", + "LATS1->VEPH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VEPH1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "VEPH1->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2->VEPH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2\n", + "\n", + "AMOTL2\n", + "\n", + "\n", + "\n", + "LATS2->AMOTL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AMOTL2->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDKN1B->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1->CDKN1B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "markdown", + "id": "72fd1618-7eb2-4084-8bc5-af27f55afcef", + "metadata": {}, + "source": [ + "## 4. Translate IDs " + ] + }, + { + "cell_type": "markdown", + "id": "7a604021-9539-4dce-beff-8395b3209a7b", + "metadata": {}, + "source": [ + "NeKo's resource object relies on UniProt IDs. In cases where the user-defined database does not have UniProt IDs, NeKo offers the function to translate between different IDs. The translation module is based on the python package \"Unipressed\" (https://github.com/multimeric/Unipressed).\n", + "\n", + "In the example below, we use the HURI database (http://www.interactome-atlas.org/) which provides protein-protein interactions (ppi) with ENSEMBL IDs.\n", + "\n", + "To run the following example, please download the database at the following link: http://www.interactome-atlas.org/download. The example uses the `HI-Union` version of the database in `.tsv` format." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "66a43b3a-4fd6-4aa4-924d-d103b6717ab3", + "metadata": {}, + "outputs": [], + "source": [ + "#Import the module\n", + "from neko.inputs.db_translator import IDTranslator" + ] + }, + { + "cell_type": "markdown", + "id": "34f940f0-552a-4660-a4fb-20f2e3463ca7", + "metadata": {}, + "source": [ + "The `IDTranslator` function receives as arguments the input and output file names, together with the existing IDs and the target ones (in that case Ensembl to UniProtKB IDs).\n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "NB! The `IDTranslator` can take several minutes the first time you translate a database, depending on the size of the database.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "8fcdcd64-429d-40ec-8ec2-8d1d39c8b25f", + "metadata": {}, + "outputs": [], + "source": [ + "translator = IDTranslator('HI-union.tsv', 'genes_translated.csv', 'Ensembl', 'UniProtKB-Swiss-Prot', has_header=False, input_columns=['source', 'target'], processes=12)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "c5c4cb0e-608d-49b5-9819-ed398600f642", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,217 - IDTranslator_140412855874560 - INFO - Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Starting ID translation process from Ensembl to UniProtKB-Swiss-Prot\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,301 - IDTranslator_140412855874560 - INFO - Loaded 64006 rows with 9094 unique IDs
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Loaded 64006 rows with 9094 unique IDs\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,314 - IDTranslator_140412855874560 - INFO - Loaded progress from checkpoint_batch_91.pkl
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Loaded progress from checkpoint_batch_91.pkl\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ea6e682b70b54a9f85465f17641d929e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing batches: 0it [00:00, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:03:12,627 - IDTranslator_140412855874560 - INFO - Applying translation to dataframe...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Applying translation to dataframe...\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:01,954 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Results saved to genes_translated.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,150 - IDTranslator_140412855874560 - INFO - ID translation process completed in 109.93 seconds
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:ID translation process completed in 109.93 seconds\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,170 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,173 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translated entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,178 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Expansion factor: 1.00\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,182 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translation success rate: 100.00%\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 49s, sys: 727 ms, total: 1min 49s\n", + "Wall time: 1min 49s\n" + ] + } + ], + "source": [ + "%%time\n", + "translator.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "273c86d0-d929-4c2b-8712-f303ffd497ee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,439 - IDTranslator_140412855874560 - INFO - Results saved to genes_translated_cleaned.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Results saved to genes_translated_cleaned.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,442 - IDTranslator_140412855874560 - INFO - Removed 0 untranslated entries.
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Removed 0 untranslated entries.\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,446 - IDTranslator_140412855874560 - INFO - Cleaned database saved to genes_translated_cleaned.csv
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Cleaned database saved to genes_translated_cleaned.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,450 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,453 - IDTranslator_140412855874560 - INFO - Cleaned entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Cleaned entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,472 - IDTranslator_140412855874560 - INFO - Original entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Original entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,475 - IDTranslator_140412855874560 - INFO - Translated entry count: 64065
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translated entry count: 64065\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,479 - IDTranslator_140412855874560 - INFO - Expansion factor: 1.00
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Expansion factor: 1.00\n" + ] + }, + { + "data": { + "text/html": [ + "
2024-07-22 12:05:02,483 - IDTranslator_140412855874560 - INFO - Translation success rate: 100.00%
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:IDTranslator_140412855874560:Translation success rate: 100.00%\n" + ] + } + ], + "source": [ + "translator.remove_untranslated_entries()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1865e7f6-251f-43eb-9c5d-1be75c07f9c1", + "metadata": {}, + "outputs": [], + "source": [ + "huri = pd.read_csv(\"genes_translated_cleaned.csv\", usecols=[\"source_UniProtKB-Swiss-Prot\", \"target_UniProtKB-Swiss-Prot\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a791bd79-37ac-451d-a683-b4446fc501b7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_UniProtKB-Swiss-Prottarget_UniProtKB-Swiss-Prot
0Q9H2S6Q9NPE6
1Q9H2S6Q9BXK5
2Q9H2S6O60238
3Q9H2S6P20138
4Q9H2S6Q9UM44
\n", + "
" + ], + "text/plain": [ + " source_UniProtKB-Swiss-Prot target_UniProtKB-Swiss-Prot\n", + "0 Q9H2S6 Q9NPE6\n", + "1 Q9H2S6 Q9BXK5\n", + "2 Q9H2S6 O60238\n", + "3 Q9H2S6 P20138\n", + "4 Q9H2S6 Q9UM44" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "huri.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "03c31d3f-da2a-4e37-8430-09f659c6325e", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3ff873f3-e984-4cd2-98e5-702190ffd49f", + "metadata": {}, + "outputs": [], + "source": [ + "mapping = {\"source_UniProtKB-Swiss-Prot\": \"source\", \"target_UniProtKB-Swiss-Prot\": \"target\"}\n", + "resources.add_resources(huri, columns=mapping, reset_index=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "10d6767e-88a1-4e08-8797-2abcb1a7ef4c", + "metadata": {}, + "outputs": [], + "source": [ + "resources.build()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "37922f45-b399-427a-a103-26fdfea2e751", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetis_directedis_stimulationis_inhibitionform_complex
0Q9H2S6Q9NPE6FalseFalseFalseFalse
1Q9H2S6Q9BXK5FalseFalseFalseFalse
2Q9H2S6O60238FalseFalseFalseFalse
3Q9H2S6P20138FalseFalseFalseFalse
4Q9H2S6Q9UM44FalseFalseFalseFalse
.....................
64060B2RXH8B2RXH8FalseFalseFalseFalse
64061Q8NHW4Q6IN84FalseFalseFalseFalse
64062ENSG00000276076ENSG00000276076FalseFalseFalseFalse
64063Q9UI36Q9UI36FalseFalseFalseFalse
64064ENSG00000280987ENSG00000280987FalseFalseFalseFalse
\n", + "

64065 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " source target is_directed is_stimulation \\\n", + "0 Q9H2S6 Q9NPE6 False False \n", + "1 Q9H2S6 Q9BXK5 False False \n", + "2 Q9H2S6 O60238 False False \n", + "3 Q9H2S6 P20138 False False \n", + "4 Q9H2S6 Q9UM44 False False \n", + "... ... ... ... ... \n", + "64060 B2RXH8 B2RXH8 False False \n", + "64061 Q8NHW4 Q6IN84 False False \n", + "64062 ENSG00000276076 ENSG00000276076 False False \n", + "64063 Q9UI36 Q9UI36 False False \n", + "64064 ENSG00000280987 ENSG00000280987 False False \n", + "\n", + " is_inhibition form_complex \n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", + "... ... ... \n", + "64060 False False \n", + "64061 False False \n", + "64062 False False \n", + "64063 False False \n", + "64064 False False \n", + "\n", + "[64065 rows x 6 columns]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "resources.interactions" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "248682b9-1652-4c97-ab20-2247e0ff8f65", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"CD33\", \"TNMD\", \"AMIGO1\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "1412d526-549b-4bf5-aede-02b6d61475ba", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9941ca2a-e7a3-4dfd-9307-1491c987fe31", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1.connect_network_radially(max_len=1, only_signed=False, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "2681f07d-d73d-46da-9f69-bb0db96be6c6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "TNMD\n", + "\n", + "TNMD\n", + "\n", + "\n", + "\n", + "BNIP3\n", + "\n", + "BNIP3\n", + "\n", + "\n", + "\n", + "TNMD->BNIP3\n", + "\n", + "\n", + "\n", + "\n", + "AMIGO1\n", + "\n", + "AMIGO1\n", + "\n", + "\n", + "\n", + "TNMD->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TMEM79\n", + "\n", + "TMEM79\n", + "\n", + "\n", + "\n", + "TNMD->TMEM79\n", + "\n", + "\n", + "\n", + "\n", + "CD33\n", + "\n", + "CD33\n", + "\n", + "\n", + "\n", + "TNMD->CD33\n", + "\n", + "\n", + "\n", + "\n", + "BNIP3->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TMEM79->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "TTMP\n", + "\n", + "TTMP\n", + "\n", + "\n", + "\n", + "CD33->TTMP\n", + "\n", + "\n", + "\n", + "\n", + "RPRM\n", + "\n", + "RPRM\n", + "\n", + "\n", + "\n", + "CD33->RPRM\n", + "\n", + "\n", + "\n", + "\n", + "CXCL9\n", + "\n", + "CXCL9\n", + "\n", + "\n", + "\n", + "CD33->CXCL9\n", + "\n", + "\n", + "\n", + "\n", + "TTMP->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "RPRM->AMIGO1\n", + "\n", + "\n", + "\n", + "\n", + "CXCL9->AMIGO1\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "279d14a9-4f0f-4d8d-b0ee-397dbf94a8b7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/3_stepwise_connection.html b/notebooks/3_stepwise_connection.html new file mode 100644 index 0000000..4f31d47 --- /dev/null +++ b/notebooks/3_stepwise_connection.html @@ -0,0 +1,460 @@ + + + + + + + Stepwise connection: a focus on the INE algorithm — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + Edit on GitHub +
  • +
+
+
+
+
+ +
+

Stepwise connection: a focus on the INE algorithm

+

This notebook provides the steps to build a network starting from a list of genes, and using the Iterative Neighbor Expansion (INE) algorithm.

+
+
[4]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe, signor
+from neko._annotations.gene_ontology import Ontology
+import omnipath as op
+import pandas as pd
+
+
+
+
+
+
+
+
+
+CPU times: user 15 µs, sys: 4 µs, total: 19 µs
+Wall time: 21 µs
+
+
+
+

1. Define the list of genes of interest

+
+
[5]:
+
+
+
+
genes = ["PIK3CA","MAP2K1","GSK3B","MAPK14","CTNNB1","AKT1","MAP3K7"]
+
+
+
+
+
+
[6]:
+
+
+
+
output_nodes_prosurvival = ['CCND1','MYC','TCF7L2']
+
+
+
+
+
+
+

2. Specify SIGNOR resource

+
+
[7]:
+
+
+
+
resources = Universe()
+resources = signor("../neko/_data/signor_db.tsv")  # this function accept only tab separated values
+resources.build()
+
+
+
+
+
+
+

3. Create a network using as input the gene set.

+
+

3A. Import genes as network nodes

+
+
[8]:
+
+
+
+
new_net = Network(initial_nodes = genes, resources=resources.interactions)
+
+
+
+
+
+
+

3B. Connect nodes

+

The INE algorith connects the input nodes by looking and introducing all their immediate neighbors into the network. If the nodes remain unconnected, the immediate neighbors of the newly introduced nodes are added into the network. The process ends either when a complete network is reached or until the user-specified threshold of expansion steps (i.e., max_len) is specified.

+

The algorithm also allows the definition of outputs, which are nodes that should be connected to the network with only incoming edges. For instance, these nodes might represent phenotypic markers (e.g., proliferation) of interest.

+

At the end of the algorithm, any nodes that do not have a source in the edge dataframe and are not in the output node are removed..

+
+
[9]:
+
+
+
+
%%time
+new_net.connect_as_atopo(max_len=1, strategy="radial",outputs=output_nodes_prosurvival)
+
+
+
+
+
+
+
+
+
+CPU times: user 7.83 s, sys: 2.45 ms, total: 7.83 s
+Wall time: 7.84 s
+
+
+
+
[10]:
+
+
+
+
new_net.edges
+
+
+
+
+
+
[10]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetTypeEffectReferences
0P31749P49840Noneinhibition11035810
1P31749P46937Noneinhibition12535517
2P31749P42345Nonestimulation15829723
3P31749P04150Noneinhibition24291004
4P31749Q01860Nonestimulation23041284
..................
190SIGNOR-PF4P01106Nonestimulation32482868
213Q16539P24385Noneinhibition8702807
229P28482P01106Nonestimulation8386367
241P49841P24385Noneinhibition16504004; 9832503; 23552696
242P49841P01106Noneinhibition11018017; 16023596; 14563837
+

150 rows × 5 columns

+
+
+
+
[11]:
+
+
+
+
visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True)
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_3_stepwise_connection_13_0.svg +
+
+
+
[12]:
+
+
+
+
visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node="CCND1")
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_3_stepwise_connection_14_0.svg +
+
+
+
[13]:
+
+
+
+
visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node="MYC")
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_3_stepwise_connection_15_0.svg +
+
+
+
[14]:
+
+
+
+
visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node="TCF7L2")
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_3_stepwise_connection_16_0.svg +
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/3_stepwise_connection.ipynb b/notebooks/3_stepwise_connection.ipynb new file mode 100644 index 0000000..e446635 --- /dev/null +++ b/notebooks/3_stepwise_connection.ipynb @@ -0,0 +1,1999 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4a9a534a-fe48-4b2a-aa2e-b5d1f34ddc18", + "metadata": {}, + "source": [ + "# Stepwise connection: a focus on the INE algorithm\n", + "\n", + "This notebook provides the steps to build a network starting from a list of genes, and using the Iterative Neighbor Expansion\n", + "(INE) algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9b0ac70e-94e7-47f1-82ad-52e97670f930", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 15 µs, sys: 4 µs, total: 19 µs\n", + "Wall time: 21 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "ffe87ac9-d554-4b52-ac5e-1a9f161521c0", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2682886d-8a3c-4042-8612-c562e2c9aae8", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"PIK3CA\",\"MAP2K1\",\"GSK3B\",\"MAPK14\",\"CTNNB1\",\"AKT1\",\"MAP3K7\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4649d1ea-6ea3-4216-ba4a-e79d400a2f10", + "metadata": {}, + "outputs": [], + "source": [ + "output_nodes_prosurvival = ['CCND1','MYC','TCF7L2']" + ] + }, + { + "cell_type": "markdown", + "id": "92ee5dca-d1bb-40fd-972c-6c93dc00b278", + "metadata": {}, + "source": [ + "## 2. Specify SIGNOR resource" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "50c901df-efd6-487b-96d6-ff80c0bcf3ef", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "a902ebc8-02f4-4737-96e9-dd53fc1441dd", + "metadata": {}, + "source": [ + "## 3. Create a network using as input the gene set. \n" + ] + }, + { + "cell_type": "markdown", + "id": "c68a3af3-755f-41d5-a783-8ea961013fe1", + "metadata": {}, + "source": [ + "### 3A. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9839c6da-9677-40ae-a0d0-d087fb26173a", + "metadata": {}, + "outputs": [], + "source": [ + "new_net = Network(initial_nodes = genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "6efbbab0-e58c-40d9-9092-fdc3d205153c", + "metadata": {}, + "source": [ + "### 3B. Connect nodes\n", + "\n", + "The INE algorith connects the input nodes by looking and introducing all their immediate neighbors into the network. If the nodes remain unconnected, the immediate neighbors of the newly introduced nodes are added into the network. The process ends either when a complete network is reached or until the user-specified threshold of expansion steps (i.e., `max_len`) is specified.\n", + "\n", + "The algorithm also allows the definition of `outputs`, which are nodes that should be connected to the network with only incoming edges. For instance, these nodes might represent phenotypic markers (e.g., proliferation) of interest.\n", + "\n", + "At the end of the algorithm, any nodes that do not have a source in the edge dataframe and are not in the output node are removed.." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "aee96adf-f29d-41f1-9dec-6d1ce8b18deb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 7.83 s, sys: 2.45 ms, total: 7.83 s\n", + "Wall time: 7.84 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net.connect_as_atopo(max_len=1, strategy=\"radial\",outputs=output_nodes_prosurvival)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a88f32d3-2f92-4cdb-bf44-1df600fa8847", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P31749P49840Noneinhibition11035810
1P31749P46937Noneinhibition12535517
2P31749P42345Nonestimulation15829723
3P31749P04150Noneinhibition24291004
4P31749Q01860Nonestimulation23041284
..................
190SIGNOR-PF4P01106Nonestimulation32482868
213Q16539P24385Noneinhibition8702807
229P28482P01106Nonestimulation8386367
241P49841P24385Noneinhibition16504004; 9832503; 23552696
242P49841P01106Noneinhibition11018017; 16023596; 14563837
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " source target Type Effect References\n", + "0 P31749 P49840 None inhibition 11035810\n", + "1 P31749 P46937 None inhibition 12535517\n", + "2 P31749 P42345 None stimulation 15829723\n", + "3 P31749 P04150 None inhibition 24291004\n", + "4 P31749 Q01860 None stimulation 23041284\n", + ".. ... ... ... ... ...\n", + "190 SIGNOR-PF4 P01106 None stimulation 32482868\n", + "213 Q16539 P24385 None inhibition 8702807\n", + "229 P28482 P01106 None stimulation 8386367\n", + "241 P49841 P24385 None inhibition 16504004; 9832503; 23552696\n", + "242 P49841 P01106 None inhibition 11018017; 16023596; 14563837\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_net.edges" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d6d150fd-0643-4509-9b50-ac4f79344341", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "AKT1\n", + "\n", + "AKT1\n", + "\n", + "\n", + "\n", + "GSK3A\n", + "\n", + "GSK3A\n", + "\n", + "\n", + "\n", + "AKT1->GSK3A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1\n", + "\n", + "YAP1\n", + "\n", + "\n", + "\n", + "AKT1->YAP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR\n", + "\n", + "MTOR\n", + "\n", + "\n", + "\n", + "AKT1->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR3C1\n", + "\n", + "NR3C1\n", + "\n", + "\n", + "\n", + "AKT1->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU5F1\n", + "\n", + "POU5F1\n", + "\n", + "\n", + "\n", + "AKT1->POU5F1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR\n", + "\n", + "AR\n", + "\n", + "\n", + "\n", + "AKT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRAF\n", + "\n", + "BRAF\n", + "\n", + "\n", + "\n", + "AKT1->BRAF\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TTC3\n", + "\n", + "TTC3\n", + "\n", + "\n", + "\n", + "AKT1->TTC3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "AKT1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1\n", + "\n", + "CREB1\n", + "\n", + "\n", + "\n", + "AKT1->CREB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1\n", + "\n", + "RAF1\n", + "\n", + "\n", + "\n", + "AKT1->RAF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP\n", + "\n", + "DAB2IP\n", + "\n", + "\n", + "\n", + "AKT1->DAB2IP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RARA\n", + "\n", + "RARA\n", + "\n", + "\n", + "\n", + "AKT1->RARA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4\n", + "\n", + "MAP2K4\n", + "\n", + "\n", + "\n", + "AKT1->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "AKT1->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN1\n", + "\n", + "PTPN1\n", + "\n", + "\n", + "\n", + "AKT1->PTPN1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K8\n", + "\n", + "MAP3K8\n", + "\n", + "\n", + "\n", + "AKT1->MAP3K8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "AKT1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1\n", + "\n", + "RAC1\n", + "\n", + "\n", + "\n", + "AKT1->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GAB2\n", + "\n", + "GAB2\n", + "\n", + "\n", + "\n", + "AKT1->GAB2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRCA1\n", + "\n", + "BRCA1\n", + "\n", + "\n", + "\n", + "AKT1->BRCA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3A->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "GSK3A->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YAP1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "NR3C1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU5F1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1\n", + "\n", + "MAP2K1\n", + "\n", + "\n", + "\n", + "BRAF->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TTC3->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->POU5F1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF72\n", + "\n", + "SIGNOR-PF72\n", + "\n", + "\n", + "\n", + "CTNNB1->SIGNOR-PF72\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG\n", + "\n", + "PPARG\n", + "\n", + "\n", + "\n", + "CTNNB1->PPARG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "CTNNB1->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF7L2\n", + "\n", + "TCF7L2\n", + "\n", + "\n", + "\n", + "CTNNB1->TCF7L2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAB2IP->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA\n", + "\n", + "PIK3CA\n", + "\n", + "\n", + "\n", + "DAB2IP->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RARA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K8->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CREB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN\n", + "\n", + "PTEN\n", + "\n", + "\n", + "\n", + "GSK3B->PTEN\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PSEN1\n", + "\n", + "PSEN1\n", + "\n", + "\n", + "\n", + "GSK3B->PSEN1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C110\n", + "\n", + "SIGNOR-C110\n", + "\n", + "\n", + "\n", + "GSK3B->SIGNOR-C110\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "APC\n", + "\n", + "APC\n", + "\n", + "\n", + "\n", + "GSK3B->APC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF26\n", + "\n", + "SIGNOR-PF26\n", + "\n", + "\n", + "\n", + "GSK3B->SIGNOR-PF26\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "GSK3B->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MACF1\n", + "\n", + "MACF1\n", + "\n", + "\n", + "\n", + "GSK3B->MACF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKAP11\n", + "\n", + "AKAP11\n", + "\n", + "\n", + "\n", + "GSK3B->AKAP11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LRP6\n", + "\n", + "LRP6\n", + "\n", + "\n", + "\n", + "GSK3B->LRP6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAML1\n", + "\n", + "MAML1\n", + "\n", + "\n", + "\n", + "GSK3B->MAML1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FRAT1\n", + "\n", + "FRAT1\n", + "\n", + "\n", + "\n", + "GSK3B->FRAT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K4\n", + "\n", + "MAP3K4\n", + "\n", + "\n", + "\n", + "GSK3B->MAP3K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHLPP1\n", + "\n", + "PHLPP1\n", + "\n", + "\n", + "\n", + "GSK3B->PHLPP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAC1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GAB2->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "BRCA1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF72->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3CA->RAC1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CHEBI_16618\n", + "\n", + "CHEBI_16618\n", + "\n", + "\n", + "\n", + "PIK3CA->CHEBI_16618\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IRS1\n", + "\n", + "IRS1\n", + "\n", + "\n", + "\n", + "PIK3CA->IRS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C156\n", + "\n", + "SIGNOR-C156\n", + "\n", + "\n", + "\n", + "PIK3CA->SIGNOR-C156\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "PIK3CA->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2\n", + "\n", + "AKT2\n", + "\n", + "\n", + "\n", + "PIK3CA->AKT2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3R1\n", + "\n", + "PIK3R1\n", + "\n", + "\n", + "\n", + "PIK3CA->PIK3R1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CHEBI_16618->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "IRS1->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C156->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF24->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT2->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIK3R1->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->IRS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1\n", + "\n", + "MAPK1\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "MAP2K1->SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "MAP2K1->SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->NR3C1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->PPARG\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->AKT2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FGFR1\n", + "\n", + "FGFR1\n", + "\n", + "\n", + "\n", + "MAPK14->FGFR1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DUSP1\n", + "\n", + "DUSP1\n", + "\n", + "\n", + "\n", + "MAPK14->DUSP1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN7\n", + "\n", + "PTPN7\n", + "\n", + "\n", + "\n", + "MAPK14->PTPN7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAB1\n", + "\n", + "TAB1\n", + "\n", + "\n", + "\n", + "MAPK14->TAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CASP3\n", + "\n", + "CASP3\n", + "\n", + "\n", + "\n", + "MAPK14->CASP3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF25\n", + "\n", + "SIGNOR-PF25\n", + "\n", + "\n", + "\n", + "MAPK14->SIGNOR-PF25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FGFR1->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DUSP1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTPN7->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAB1->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7\n", + "\n", + "MAP3K7\n", + "\n", + "\n", + "\n", + "TAB1->MAP3K7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CASP3->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF25->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTEN->PIK3CA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PSEN1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-C110->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "APC->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF26->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MACF1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKAP11->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LRP6->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAML1->CTNNB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FRAT1->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K4->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHLPP1->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->TAB1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP3K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3\n", + "\n", + "MAP2K3\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K6\n", + "\n", + "MAP2K6\n", + "\n", + "\n", + "\n", + "MAP3K7->MAP2K6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K3->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K6->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c100869b-d8de-4845-8195-7c7204854b96", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "MAPK14->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"CCND1\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "615e2083-b57b-4197-9a9a-3fff22dddb38", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "GSK3A\n", + "\n", + "GSK3A\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "GSK3A->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CCND1\n", + "\n", + "CCND1\n", + "\n", + "\n", + "\n", + "MYC->CCND1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAPK3->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "SIGNOR-PF1\n", + "\n", + "\n", + "\n", + "SIGNOR-PF1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "SIGNOR-PF4\n", + "\n", + "\n", + "\n", + "SIGNOR-PF4->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK1\n", + "\n", + "MAPK1\n", + "\n", + "\n", + "\n", + "MAPK1->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B->MYC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"MYC\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4cea74fa-baca-409b-bb51-d0863b309fdf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "TCF7L2\n", + "\n", + "TCF7L2\n", + "\n", + "\n", + "\n", + "CTNNB1->TCF7L2\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net, color_by='effect', noi=True, predefined_node=\"TCF7L2\")\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b75aaed-57cc-4bd2-852b-8a882d553aa1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/4_Connect_upstream.html b/notebooks/4_Connect_upstream.html new file mode 100644 index 0000000..17e5b59 --- /dev/null +++ b/notebooks/4_Connect_upstream.html @@ -0,0 +1,261 @@ + + + + + + + Connect to upstream components — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Connect to upstream components

+

This notebook shows a new functionality of the tool to connect the input gene list. Instead of looking for a path, as the default connecting strategy of the tool, this functionality aims to find those upstream regulators that regulate as many of the input genes.

+
+
[2]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe
+from neko._annotations.gene_ontology import Ontology
+import omnipath as op
+
+
+
+
+
+
+
+
+
+CPU times: user 11 µs, sys: 2 µs, total: 13 µs
+Wall time: 15.7 µs
+
+
+
+

1. Import CollecTRI interactions from Omnipath

+
+
[5]:
+
+
+
+
collectri = op.interactions.CollecTRI.get()
+
+
+
+
+
+
[6]:
+
+
+
+
resources = Universe()
+resources.add_resources(collectri, name = 'collectri')
+resources.build()
+
+
+
+
+
+
+

2. Define the nodes of interest and create network object with CollecTRI interactions

+
+
[7]:
+
+
+
+
genes = ["SRC", "NOTCH1", "CDH1", "CDH2", "VIM", "LATS1", "LATS2"]
+
+
+
+
+
+
[12]:
+
+
+
+
new_net1 = Network(genes, resources = resources.interactions)
+
+
+
+
+
+
+

3. Connect nodes to upstream regulators

+

The connect_to_upstream_nodes looks for the regulators of each of the input nodes, and ranks each of the regulators based on the number of the input nodes they regulate.

+

The rank argument refers to the number of the ranked regulators that should be included in the network The depth argument refers to how many steps away from the input nodes the algorithm should go. The higher the number the more regulatory layers will be included in the final network.

+
+
[13]:
+
+
+
+
%%time
+new_net1.connect_to_upstream_nodes(rank = 1, depth=2)
+
+
+
+
+
+
+
+
+
+Warning: Some target genes are not present in the DataFrame and will be ignored: {'O96006'}
+CPU times: user 1.68 s, sys: 2 ms, total: 1.69 s
+Wall time: 1.68 s
+
+
+
+
[14]:
+
+
+
+
visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)
+visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_4_Connect_upstream_10_0.svg +
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/4_Connect_upstream.ipynb b/notebooks/4_Connect_upstream.ipynb new file mode 100644 index 0000000..9d8b1a7 --- /dev/null +++ b/notebooks/4_Connect_upstream.ipynb @@ -0,0 +1,1934 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c5a95f57-bbde-4966-be26-881055e5eb70", + "metadata": {}, + "source": [ + "# Connect to upstream components\n", + "\n", + "This notebook shows a new functionality of the tool to connect the input gene list. Instead of looking for a path, as the default connecting strategy of the tool, this functionality aims to find those upstream regulators that regulate as many of the input genes." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a80a2864-7e94-4a35-a2d0-5abc7db75775", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 11 µs, sys: 2 µs, total: 13 µs\n", + "Wall time: 15.7 µs\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "20901f1d-ec6c-41c8-9984-53618bac3c0c", + "metadata": {}, + "source": [ + "## 1. Import CollecTRI interactions from Omnipath" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0bec85c0-c478-4608-b1f0-5c3aa2a1abe4", + "metadata": {}, + "outputs": [], + "source": [ + "collectri = op.interactions.CollecTRI.get()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ec5e010f-62bb-4b77-9197-719fe6edd152", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources.add_resources(collectri, name = 'collectri')\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "c13d855a-b1dd-4ec3-8402-2ef396e77889", + "metadata": {}, + "source": [ + "## 2. Define the nodes of interest and create network object with CollecTRI interactions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b52b400a-567a-415a-b7c7-5197c2668280", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"CDH1\", \"CDH2\", \"VIM\", \"LATS1\", \"LATS2\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e4206d7d-9785-467b-a913-5279701cd2d9", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "ff4d3a0a-a987-4be4-950a-d5b03d3746a5", + "metadata": {}, + "source": [ + "## 3. Connect nodes to upstream regulators\n", + "\n", + "The `connect_to_upstream_nodes` looks for the regulators of each of the input nodes, and ranks each of the regulators based on the number of the input nodes they regulate. \n", + "\n", + "The `rank` argument refers to the number of the ranked regulators that should be included in the network\n", + "The `depth` argument refers to how many steps away from the input nodes the algorithm should go. The higher the number the more regulatory layers will be included in the final network." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "589627c6-79bf-42ce-b676-5c76d1762cd1", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning: Some target genes are not present in the DataFrame and will be ignored: {'O96006'}\n", + "CPU times: user 1.68 s, sys: 2 ms, total: 1.69 s\n", + "Wall time: 1.68 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_to_upstream_nodes(rank = 1, depth=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "632aa19f-9876-45c8-bb71-d2febd297aa1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "FOXL2\n", + "\n", + "FOXL2\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "FOXL2->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AR\n", + "\n", + "AR\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "AR->VIM\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "AR->CDH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "AR->CDH2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "AR->LATS2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "AR->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "AR->NOTCH1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ZBED1\n", + "\n", + "ZBED1\n", + "\n", + "\n", + "\n", + "ZBED1->LATS1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17535_P53539\n", + "\n", + "P17535_P53539\n", + "\n", + "\n", + "\n", + "P17535_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VSX2\n", + "\n", + "VSX2\n", + "\n", + "\n", + "\n", + "VSX2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB1\n", + "\n", + "NFKB1\n", + "\n", + "\n", + "\n", + "NFKB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO1\n", + "\n", + "FOXO1\n", + "\n", + "\n", + "\n", + "FOXO1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FUS\n", + "\n", + "FUS\n", + "\n", + "\n", + "\n", + "FUS->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q00653\n", + "\n", + "P19838_Q00653\n", + "\n", + "\n", + "\n", + "P19838_Q00653->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HIF1A\n", + "\n", + "HIF1A\n", + "\n", + "\n", + "\n", + "HIF1A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q04206\n", + "\n", + "P19838_Q04206\n", + "\n", + "\n", + "\n", + "P19838_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB2\n", + "\n", + "NFKB2\n", + "\n", + "\n", + "\n", + "NFKB2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFKB2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STAT3\n", + "\n", + "STAT3\n", + "\n", + "\n", + "\n", + "STAT3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NKX3-1\n", + "\n", + "NKX3-1\n", + "\n", + "\n", + "\n", + "NKX3-1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SOX9\n", + "\n", + "SOX9\n", + "\n", + "\n", + "\n", + "SOX9->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q04206_Q04864\n", + "\n", + "Q04206_Q04864\n", + "\n", + "\n", + "\n", + "Q04206_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFIC\n", + "\n", + "NFIC\n", + "\n", + "\n", + "\n", + "NFIC->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "WT1\n", + "\n", + "WT1\n", + "\n", + "\n", + "\n", + "WT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17275_P17535\n", + "\n", + "P17275_P17535\n", + "\n", + "\n", + "\n", + "P17275_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q04864\n", + "\n", + "P19838_Q04864\n", + "\n", + "\n", + "\n", + "P19838_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P19838_Q01201\n", + "\n", + "P19838_Q01201\n", + "\n", + "\n", + "\n", + "P19838_Q01201->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NKX2-5\n", + "\n", + "NKX2-5\n", + "\n", + "\n", + "\n", + "NKX2-5->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELB\n", + "\n", + "RELB\n", + "\n", + "\n", + "\n", + "RELB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HOXC8\n", + "\n", + "HOXC8\n", + "\n", + "\n", + "\n", + "HOXC8->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRY\n", + "\n", + "SRY\n", + "\n", + "\n", + "\n", + "SRY->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NFE2L2\n", + "\n", + "NFE2L2\n", + "\n", + "\n", + "\n", + "NFE2L2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HOXB13\n", + "\n", + "HOXB13\n", + "\n", + "\n", + "\n", + "HOXB13->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15407_P17535\n", + "\n", + "P15407_P17535\n", + "\n", + "\n", + "\n", + "P15407_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF20\n", + "\n", + "TCF20\n", + "\n", + "\n", + "\n", + "TCF20->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MEIS1\n", + "\n", + "MEIS1\n", + "\n", + "\n", + "\n", + "MEIS1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYBL2\n", + "\n", + "MYBL2\n", + "\n", + "\n", + "\n", + "MYBL2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GATA4\n", + "\n", + "GATA4\n", + "\n", + "\n", + "\n", + "GATA4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARID1A\n", + "\n", + "ARID1A\n", + "\n", + "\n", + "\n", + "ARID1A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "POU2F1\n", + "\n", + "POU2F1\n", + "\n", + "\n", + "\n", + "POU2F1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15407_P17275\n", + "\n", + "P15407_P17275\n", + "\n", + "\n", + "\n", + "P15407_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA2\n", + "\n", + "NCOA2\n", + "\n", + "\n", + "\n", + "NCOA2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ESR2\n", + "\n", + "ESR2\n", + "\n", + "\n", + "\n", + "ESR2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SREBF1\n", + "\n", + "SREBF1\n", + "\n", + "\n", + "\n", + "SREBF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR4A1\n", + "\n", + "NR4A1\n", + "\n", + "\n", + "\n", + "NR4A1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMAD3\n", + "\n", + "SMAD3\n", + "\n", + "\n", + "\n", + "SMAD3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "E2F1\n", + "\n", + "E2F1\n", + "\n", + "\n", + "\n", + "E2F1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PAX6\n", + "\n", + "PAX6\n", + "\n", + "\n", + "\n", + "PAX6->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SP1\n", + "\n", + "SP1\n", + "\n", + "\n", + "\n", + "SP1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q01201\n", + "\n", + "Q00653_Q01201\n", + "\n", + "\n", + "\n", + "Q00653_Q01201->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA4\n", + "\n", + "NCOA4\n", + "\n", + "\n", + "\n", + "NCOA4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P17275_P53539\n", + "\n", + "P17275_P53539\n", + "\n", + "\n", + "\n", + "P17275_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUNB\n", + "\n", + "JUNB\n", + "\n", + "\n", + "\n", + "JUNB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SFPQ\n", + "\n", + "SFPQ\n", + "\n", + "\n", + "\n", + "SFPQ->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HNF4A\n", + "\n", + "HNF4A\n", + "\n", + "\n", + "\n", + "HNF4A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRF\n", + "\n", + "SRF\n", + "\n", + "\n", + "\n", + "SRF->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR3C1\n", + "\n", + "NR3C1\n", + "\n", + "\n", + "\n", + "NR3C1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DAXX\n", + "\n", + "DAXX\n", + "\n", + "\n", + "\n", + "DAXX->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HEYL\n", + "\n", + "HEYL\n", + "\n", + "\n", + "\n", + "HEYL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q01201_Q04864\n", + "\n", + "Q01201_Q04864\n", + "\n", + "\n", + "\n", + "Q01201_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOR2\n", + "\n", + "NCOR2\n", + "\n", + "\n", + "\n", + "NCOR2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P05412\n", + "\n", + "P01100_P05412\n", + "\n", + "\n", + "\n", + "P01100_P05412->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EZH2\n", + "\n", + "EZH2\n", + "\n", + "\n", + "\n", + "EZH2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "VHL\n", + "\n", + "VHL\n", + "\n", + "\n", + "\n", + "VHL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXP1\n", + "\n", + "FOXP1\n", + "\n", + "\n", + "\n", + "FOXP1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CEBPD\n", + "\n", + "CEBPD\n", + "\n", + "\n", + "\n", + "CEBPD->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q01201_Q04206\n", + "\n", + "Q01201_Q04206\n", + "\n", + "\n", + "\n", + "Q01201_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOR1\n", + "\n", + "NCOR1\n", + "\n", + "\n", + "\n", + "NCOR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P17535\n", + "\n", + "P05412_P17535\n", + "\n", + "\n", + "\n", + "P05412_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "USF2\n", + "\n", + "USF2\n", + "\n", + "\n", + "\n", + "USF2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYB\n", + "\n", + "MYB\n", + "\n", + "\n", + "\n", + "MYB->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXH1\n", + "\n", + "FOXH1\n", + "\n", + "\n", + "\n", + "FOXH1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PHB1\n", + "\n", + "PHB1\n", + "\n", + "\n", + "\n", + "PHB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P17275\n", + "\n", + "P01100_P17275\n", + "\n", + "\n", + "\n", + "P01100_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TCF21\n", + "\n", + "TCF21\n", + "\n", + "\n", + "\n", + "TCF21->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TGFB1I1\n", + "\n", + "TGFB1I1\n", + "\n", + "\n", + "\n", + "TGFB1I1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXN1\n", + "\n", + "FOXN1\n", + "\n", + "\n", + "\n", + "FOXN1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "REST\n", + "\n", + "REST\n", + "\n", + "\n", + "\n", + "REST->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HEY1\n", + "\n", + "HEY1\n", + "\n", + "\n", + "\n", + "HEY1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "REL\n", + "\n", + "REL\n", + "\n", + "\n", + "\n", + "REL->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "EGR1\n", + "\n", + "EGR1\n", + "\n", + "\n", + "\n", + "EGR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXM1\n", + "\n", + "FOXM1\n", + "\n", + "\n", + "\n", + "FOXM1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP63\n", + "\n", + "TP63\n", + "\n", + "\n", + "\n", + "TP63->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NSD2\n", + "\n", + "NSD2\n", + "\n", + "\n", + "\n", + "NSD2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PURA\n", + "\n", + "PURA\n", + "\n", + "\n", + "\n", + "PURA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ZEB1\n", + "\n", + "ZEB1\n", + "\n", + "\n", + "\n", + "ZEB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMAD4\n", + "\n", + "SMAD4\n", + "\n", + "\n", + "\n", + "SMAD4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LEF1\n", + "\n", + "LEF1\n", + "\n", + "\n", + "\n", + "LEF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ESR1\n", + "\n", + "ESR1\n", + "\n", + "\n", + "\n", + "ESR1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELA\n", + "\n", + "RELA\n", + "\n", + "\n", + "\n", + "RELA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RELA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXO3\n", + "\n", + "FOXO3\n", + "\n", + "\n", + "\n", + "FOXO3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LHX3\n", + "\n", + "LHX3\n", + "\n", + "\n", + "\n", + "LHX3->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "E2F4\n", + "\n", + "E2F4\n", + "\n", + "\n", + "\n", + "E2F4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P17275\n", + "\n", + "P05412_P17275\n", + "\n", + "\n", + "\n", + "P05412_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MYC\n", + "\n", + "MYC\n", + "\n", + "\n", + "\n", + "MYC->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YBX1\n", + "\n", + "YBX1\n", + "\n", + "\n", + "\n", + "YBX1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P53539\n", + "\n", + "P05412_P53539\n", + "\n", + "\n", + "\n", + "P05412_P53539->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CREB1\n", + "\n", + "CREB1\n", + "\n", + "\n", + "\n", + "CREB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HDAC1\n", + "\n", + "HDAC1\n", + "\n", + "\n", + "\n", + "HDAC1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NR5A1\n", + "\n", + "NR5A1\n", + "\n", + "\n", + "\n", + "NR5A1->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "KAT5\n", + "\n", + "KAT5\n", + "\n", + "\n", + "\n", + "KAT5->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXA1\n", + "\n", + "FOXA1\n", + "\n", + "\n", + "\n", + "FOXA1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RUNX2\n", + "\n", + "RUNX2\n", + "\n", + "\n", + "\n", + "RUNX2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P01100_P17535\n", + "\n", + "P01100_P17535\n", + "\n", + "\n", + "\n", + "P01100_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SMARCC1\n", + "\n", + "SMARCC1\n", + "\n", + "\n", + "\n", + "SMARCC1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "URI1\n", + "\n", + "URI1\n", + "\n", + "\n", + "\n", + "URI1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MED1\n", + "\n", + "MED1\n", + "\n", + "\n", + "\n", + "MED1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PA2G4\n", + "\n", + "PA2G4\n", + "\n", + "\n", + "\n", + "PA2G4->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "STAT5A\n", + "\n", + "STAT5A\n", + "\n", + "\n", + "\n", + "STAT5A->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PPARG\n", + "\n", + "PPARG\n", + "\n", + "\n", + "\n", + "PPARG->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PIAS2\n", + "\n", + "PIAS2\n", + "\n", + "\n", + "\n", + "PIAS2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NRF1\n", + "\n", + "NRF1\n", + "\n", + "\n", + "\n", + "NRF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NONO\n", + "\n", + "NONO\n", + "\n", + "\n", + "\n", + "NONO->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P15407\n", + "\n", + "P05412_P15407\n", + "\n", + "\n", + "\n", + "P05412_P15407->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GATA2\n", + "\n", + "GATA2\n", + "\n", + "\n", + "\n", + "GATA2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA1\n", + "\n", + "NCOA1\n", + "\n", + "\n", + "\n", + "NCOA1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15408_P17535\n", + "\n", + "P15408_P17535\n", + "\n", + "\n", + "\n", + "P15408_P17535->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "DNMT1\n", + "\n", + "DNMT1\n", + "\n", + "\n", + "\n", + "DNMT1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q04206\n", + "\n", + "Q00653_Q04206\n", + "\n", + "\n", + "\n", + "Q00653_Q04206->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "YY1\n", + "\n", + "YY1\n", + "\n", + "\n", + "\n", + "YY1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ETV1\n", + "\n", + "ETV1\n", + "\n", + "\n", + "\n", + "ETV1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P15408_P17275\n", + "\n", + "P15408_P17275\n", + "\n", + "\n", + "\n", + "P15408_P17275->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TWIST1\n", + "\n", + "TWIST1\n", + "\n", + "\n", + "\n", + "TWIST1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN\n", + "\n", + "JUN\n", + "\n", + "\n", + "\n", + "JUN->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUND\n", + "\n", + "JUND\n", + "\n", + "\n", + "\n", + "JUND->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FOXD2\n", + "\n", + "FOXD2\n", + "\n", + "\n", + "\n", + "FOXD2->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ELF3\n", + "\n", + "ELF3\n", + "\n", + "\n", + "\n", + "ELF3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SNW1\n", + "\n", + "SNW1\n", + "\n", + "\n", + "\n", + "SNW1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Q00653_Q04864\n", + "\n", + "Q00653_Q04864\n", + "\n", + "\n", + "\n", + "Q00653_Q04864->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CTNNB1\n", + "\n", + "CTNNB1\n", + "\n", + "\n", + "\n", + "CTNNB1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NCOA3\n", + "\n", + "NCOA3\n", + "\n", + "\n", + "\n", + "NCOA3->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "LHX4\n", + "\n", + "LHX4\n", + "\n", + "\n", + "\n", + "LHX4->FOXL2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "GABPA\n", + "\n", + "GABPA\n", + "\n", + "\n", + "\n", + "GABPA->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TAF1\n", + "\n", + "TAF1\n", + "\n", + "\n", + "\n", + "TAF1->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TP53\n", + "\n", + "TP53\n", + "\n", + "\n", + "\n", + "TP53->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ERG\n", + "\n", + "ERG\n", + "\n", + "\n", + "\n", + "ERG->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P05412_P15408\n", + "\n", + "P05412_P15408\n", + "\n", + "\n", + "\n", + "P05412_P15408->AR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer = NetworkVisualizer(new_net1, color_by='effect', noi=True)\n", + "visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6174ce2-b592-4970-9e1e-a936ab4937c9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/5_build_phosphosite_network.html b/notebooks/5_build_phosphosite_network.html new file mode 100644 index 0000000..dbd2b02 --- /dev/null +++ b/notebooks/5_build_phosphosite_network.html @@ -0,0 +1,343 @@ + + + + + + + Build network based on kinase-phosphosite interactions — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + Edit on GitHub +
  • +
+
+
+
+
+ +
+

Build network based on kinase-phosphosite interactions

+

This notebook provides the code to create a network based on kinase-substrate interactions and the annotated effect of phosphorylation (based on PhosphositePlus) on the activity of the substrate.

+
+
[1]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe, phosphosite
+from neko._annotations.gene_ontology import Ontology
+import omnipath as op
+import pandas as pd
+
+
+
+
+
+
+
+
+
+CPU times: user 5.41 s, sys: 1.63 s, total: 7.04 s
+Wall time: 5.17 s
+
+
+
+

1. Specify kinase-substrate interaction file and phosphosite effect annotation

+

In this example, both files we utilize are from PhosphositePlus.

+
+
[2]:
+
+
+
+
kinase_int_file = ("../neko/_data/Kinase_Substrate_Dataset")
+phospho_effect_file = ("../neko/_data/Regulatory_sites")
+
+
+
+
+
+
+

2. Add interactions as a resource database

+

The process_psp_interactions function parses the provided files to create an interaction database in the Omnipath format.

+
+
[3]:
+
+
+
+
resources = phosphosite()
+
+
+
+
+
+
+

3. Define a set of phosphosites we are interested in

+
+
[4]:
+
+
+
+
genes = ['AKT1S1_T246', 'GSK3B_S9', 'AKT1_S473', 'HSPB1_S78', 'HSPB1_S82', 'MAPK14_T180', 'MAPK14_Y182', 'MAP2K1_S218', 'MAP2K1_S222', 'RPS6KA1_S380', 'MTOR_S2448', 'JUN_S63', 'MAPK3_T202', 'MAPK3_Y204']
+
+
+
+
+
+
+

4. Build network

+
+
[5]:
+
+
+
+
%%time
+new_net1 = Network(genes, resources=resources.interactions)
+
+
+
+
+
+
+
+
+
+CPU times: user 2.43 s, sys: 156 ms, total: 2.59 s
+Wall time: 2.58 s
+
+
+
+

Note

+

Neko is based on UniProt IDs. It is still possible to use databases with other IDs, but an error message will appear during the translation progress, as in the example below.

+
+
+
[6]:
+
+
+
+
%%time
+new_net1.complete_connection(algorithm= 'bfs',only_signed=True, connect_with_bias=True)
+
+
+
+
+
+
+
+
+
+Error: node GSK3B is not present in the resources database
+Error: node GSK3B is not present in the resources database
+Error: node TBK1 is not present in the resources database
+Error: node TBK1 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node MAPK14 is not present in the resources database
+Error: node MAPK14 is not present in the resources database
+Error: node MAPKAPK2 is not present in the resources database
+Error: node MAPKAPK2 is not present in the resources database
+Error: node MAPK14 is not present in the resources database
+Error: node MAP2K1 is not present in the resources database
+Error: node MAP2K1 is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node CDK2 is not present in the resources database
+Error: node CDK2 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node MAP2K1 is not present in the resources database
+Error: node MAP2K1 is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node RPS6KA1 is not present in the resources database
+Error: node RPS6KA1 is not present in the resources database
+Error: node MTOR is not present in the resources database
+Error: node MTOR is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node TBK1 is not present in the resources database
+Error: node GSK3B is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node PDPK1 is not present in the resources database
+Error: node PDPK1 is not present in the resources database
+Error: node PRKACA is not present in the resources database
+Error: node PRKACA is not present in the resources database
+Error: node GSK3B is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node PRKD1 is not present in the resources database
+Error: node PRKD1 is not present in the resources database
+Error: node GSK3B is not present in the resources database
+Error: node MAP3K11 is not present in the resources database
+Error: node MAP3K11 is not present in the resources database
+Error: node MAP2K4 is not present in the resources database
+Error: node MAP2K4 is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node RET is not present in the resources database
+Error: node RET is not present in the resources database
+Error: node GSK3B is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node ARAF is not present in the resources database
+Error: node ARAF is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node RAF1 is not present in the resources database
+Error: node RAF1 is not present in the resources database
+Error: node SRC is not present in the resources database
+Error: node CDK1 is not present in the resources database
+Error: node CDK1 is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node MAPK3 is not present in the resources database
+Error: node AKT1 is not present in the resources database
+Error: node PRKD1 is not present in the resources database
+Error: node RET is not present in the resources database
+CPU times: user 724 ms, sys: 11.1 ms, total: 735 ms
+Wall time: 733 ms
+
+
+
+
[7]:
+
+
+
+
visualizer1 = NetworkVisualizer(new_net1, color_by='effect')
+visualizer1.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_5_build_phosphosite_network_12_0.svg +
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/5_build_phosphosite_network.ipynb b/notebooks/5_build_phosphosite_network.ipynb new file mode 100644 index 0000000..c60cf83 --- /dev/null +++ b/notebooks/5_build_phosphosite_network.ipynb @@ -0,0 +1,1007 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4feb78a3-acc2-455c-b206-c37b7ea47932", + "metadata": {}, + "source": [ + "# Build network based on kinase-phosphosite interactions\n", + "\n", + "This notebook provides the code to create a network based on kinase-substrate interactions and the annotated effect of phosphorylation (based on PhosphositePlus) on the activity of the substrate." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.41 s, sys: 1.63 s, total: 7.04 s\n", + "Wall time: 5.17 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, phosphosite\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "e41d36f1-b603-4d04-bea5-972c03764c92", + "metadata": {}, + "source": [ + "## 1. Specify kinase-substrate interaction file and phosphosite effect annotation\n", + "\n", + "In this example, both files we utilize are from PhosphositePlus." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "17d662bc-dc7f-4597-9a42-d9da7bdd1ed3", + "metadata": {}, + "outputs": [], + "source": [ + "kinase_int_file = (\"../neko/_data/Kinase_Substrate_Dataset\")\n", + "phospho_effect_file = (\"../neko/_data/Regulatory_sites\")" + ] + }, + { + "cell_type": "markdown", + "id": "d0fd3a1c-8419-4aa7-a7bd-30f92df14c69", + "metadata": {}, + "source": [ + "## 2. Add interactions as a resource database\n", + "\n", + "The *_process_psp_interactions_* function parses the provided files to create an interaction database in the Omnipath format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4d4cfe2f-fe7c-4764-9100-9543ac1a9a1b", + "metadata": {}, + "outputs": [], + "source": [ + "resources = phosphosite()" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 3. Define a set of phosphosites we are interested in" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a3fea926-81f1-4826-b91c-3b04124de715", + "metadata": {}, + "outputs": [], + "source": [ + "genes = ['AKT1S1_T246', 'GSK3B_S9', 'AKT1_S473', 'HSPB1_S78', 'HSPB1_S82', 'MAPK14_T180', 'MAPK14_Y182', 'MAP2K1_S218', 'MAP2K1_S222', 'RPS6KA1_S380', 'MTOR_S2448', 'JUN_S63', 'MAPK3_T202', 'MAPK3_Y204']" + ] + }, + { + "cell_type": "markdown", + "id": "59d3c824-ad97-43ae-9bf4-6657e7bcf72f", + "metadata": {}, + "source": [ + "## 4. Build network" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9c824c50", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.43 s, sys: 156 ms, total: 2.59 s\n", + "Wall time: 2.58 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1 = Network(genes, resources=resources.interactions)" + ] + }, + { + "cell_type": "markdown", + "id": "65f04b49-f5dc-4fe1-bc20-7a4094f011b3", + "metadata": {}, + "source": [ + "
\n", + "\n", + "**Note**\n", + " \n", + "Neko is based on UniProt IDs. It is still possible to use databases with other IDs, but an error message will appear during the translation progress, as in the example below. \n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9a07d77b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error: node GSK3B is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAPKAPK2 is not present in the resources database\n", + "Error: node MAPKAPK2 is not present in the resources database\n", + "Error: node MAPK14 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node CDK2 is not present in the resources database\n", + "Error: node CDK2 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAP2K1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node RPS6KA1 is not present in the resources database\n", + "Error: node RPS6KA1 is not present in the resources database\n", + "Error: node MTOR is not present in the resources database\n", + "Error: node MTOR is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node TBK1 is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node PDPK1 is not present in the resources database\n", + "Error: node PDPK1 is not present in the resources database\n", + "Error: node PRKACA is not present in the resources database\n", + "Error: node PRKACA is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node MAP3K11 is not present in the resources database\n", + "Error: node MAP3K11 is not present in the resources database\n", + "Error: node MAP2K4 is not present in the resources database\n", + "Error: node MAP2K4 is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "Error: node GSK3B is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node ARAF is not present in the resources database\n", + "Error: node ARAF is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node RAF1 is not present in the resources database\n", + "Error: node RAF1 is not present in the resources database\n", + "Error: node SRC is not present in the resources database\n", + "Error: node CDK1 is not present in the resources database\n", + "Error: node CDK1 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node MAPK3 is not present in the resources database\n", + "Error: node AKT1 is not present in the resources database\n", + "Error: node PRKD1 is not present in the resources database\n", + "Error: node RET is not present in the resources database\n", + "CPU times: user 724 ms, sys: 11.1 ms, total: 735 ms\n", + "Wall time: 733 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.complete_connection(algorithm= 'bfs',only_signed=True, connect_with_bias=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "152b9434", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "GSK3B_S9\n", + "\n", + "GSK3B_S9\n", + "\n", + "\n", + "\n", + "GSK3B\n", + "\n", + "GSK3B\n", + "\n", + "\n", + "\n", + "GSK3B_S9->GSK3B\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TBK1_S172\n", + "\n", + "TBK1_S172\n", + "\n", + "\n", + "\n", + "GSK3B->TBK1_S172\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S51\n", + "\n", + "SRC_S51\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_S51\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_Y419\n", + "\n", + "SRC_Y419\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_Y419\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K11_S789\n", + "\n", + "MAP3K11_S789\n", + "\n", + "\n", + "\n", + "GSK3B->MAP3K11_S789\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S493\n", + "\n", + "SRC_S493\n", + "\n", + "\n", + "\n", + "GSK3B->SRC_S493\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "TBK1\n", + "\n", + "TBK1\n", + "\n", + "\n", + "\n", + "TBK1_S172->TBK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_T308\n", + "\n", + "AKT1_T308\n", + "\n", + "\n", + "\n", + "TBK1->AKT1_T308\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473\n", + "\n", + "AKT1_S473\n", + "\n", + "\n", + "\n", + "TBK1->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1\n", + "\n", + "AKT1\n", + "\n", + "\n", + "\n", + "AKT1_T308->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1->GSK3B_S9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1S1_T246\n", + "\n", + "AKT1S1_T246\n", + "\n", + "\n", + "\n", + "AKT1->AKT1S1_T246\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR_S2448\n", + "\n", + "MTOR_S2448\n", + "\n", + "\n", + "\n", + "AKT1->MTOR_S2448\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S473->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14_T180\n", + "\n", + "MAPK14_T180\n", + "\n", + "\n", + "\n", + "MAPK14\n", + "\n", + "MAPK14\n", + "\n", + "\n", + "\n", + "MAPK14_T180->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2_T222\n", + "\n", + "MAPKAPK2_T222\n", + "\n", + "\n", + "\n", + "MAPK14->MAPKAPK2_T222\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2\n", + "\n", + "MAPKAPK2\n", + "\n", + "\n", + "\n", + "MAPKAPK2_T222->MAPKAPK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPKAPK2->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK14_Y182\n", + "\n", + "MAPK14_Y182\n", + "\n", + "\n", + "\n", + "MAPK14_Y182->MAPK14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1_S218\n", + "\n", + "MAP2K1_S218\n", + "\n", + "\n", + "\n", + "MAP2K1\n", + "\n", + "MAP2K1\n", + "\n", + "\n", + "\n", + "MAP2K1_S218->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T202\n", + "\n", + "MAPK3_T202\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3_T202\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T207\n", + "\n", + "MAPK3_T207\n", + "\n", + "\n", + "\n", + "MAP2K1->MAPK3_T207\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3\n", + "\n", + "MAPK3\n", + "\n", + "\n", + "\n", + "MAPK3_T202->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK2_T160\n", + "\n", + "CDK2_T160\n", + "\n", + "\n", + "\n", + "MAPK3->CDK2_T160\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1_S380\n", + "\n", + "RPS6KA1_S380\n", + "\n", + "\n", + "\n", + "MAPK3->RPS6KA1_S380\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK2\n", + "\n", + "CDK2\n", + "\n", + "\n", + "\n", + "CDK2_T160->CDK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S477\n", + "\n", + "AKT1_S477\n", + "\n", + "\n", + "\n", + "CDK2->AKT1_S477\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AKT1_S477->AKT1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K1_S222\n", + "\n", + "MAP2K1_S222\n", + "\n", + "\n", + "\n", + "MAP2K1_S222->MAP2K1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_T207->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1\n", + "\n", + "RPS6KA1\n", + "\n", + "\n", + "\n", + "RPS6KA1_S380->RPS6KA1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RPS6KA1->GSK3B_S9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR\n", + "\n", + "MTOR\n", + "\n", + "\n", + "\n", + "MTOR_S2448->MTOR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MTOR->AKT1_S473\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_Y204\n", + "\n", + "MAPK3_Y204\n", + "\n", + "\n", + "\n", + "MAPK3_Y204->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "SRC_S51->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PDPK1_Y376\n", + "\n", + "PDPK1_Y376\n", + "\n", + "\n", + "\n", + "SRC->PDPK1_Y376\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKD1_Y463\n", + "\n", + "PRKD1_Y463\n", + "\n", + "\n", + "\n", + "SRC->PRKD1_Y463\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET_Y905\n", + "\n", + "RET_Y905\n", + "\n", + "\n", + "\n", + "SRC->RET_Y905\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF_Y302\n", + "\n", + "ARAF_Y302\n", + "\n", + "\n", + "\n", + "SRC->ARAF_Y302\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1_Y340\n", + "\n", + "RAF1_Y340\n", + "\n", + "\n", + "\n", + "SRC->RAF1_Y340\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1_Y15\n", + "\n", + "CDK1_Y15\n", + "\n", + "\n", + "\n", + "SRC->CDK1_Y15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PDPK1\n", + "\n", + "PDPK1\n", + "\n", + "\n", + "\n", + "PDPK1_Y376->PDPK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA_T198\n", + "\n", + "PRKACA_T198\n", + "\n", + "\n", + "\n", + "PDPK1->PRKACA_T198\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKACA\n", + "\n", + "PRKACA\n", + "\n", + "\n", + "\n", + "PRKACA_T198->PRKACA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HSPB1_S78\n", + "\n", + "HSPB1_S78\n", + "\n", + "\n", + "\n", + "PRKACA->HSPB1_S78\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_Y419->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PRKD1\n", + "\n", + "PRKD1\n", + "\n", + "\n", + "\n", + "PRKD1_Y463->PRKD1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "HSPB1_S82\n", + "\n", + "HSPB1_S82\n", + "\n", + "\n", + "\n", + "PRKD1->HSPB1_S82\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "JUN_S63\n", + "\n", + "JUN_S63\n", + "\n", + "\n", + "\n", + "PRKD1->JUN_S63\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP3K11\n", + "\n", + "MAP3K11\n", + "\n", + "\n", + "\n", + "MAP3K11_S789->MAP3K11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4_S257\n", + "\n", + "MAP2K4_S257\n", + "\n", + "\n", + "\n", + "MAP3K11->MAP2K4_S257\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4\n", + "\n", + "MAP2K4\n", + "\n", + "\n", + "\n", + "MAP2K4_S257->MAP2K4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAP2K4->MAPK14_T180\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET\n", + "\n", + "RET\n", + "\n", + "\n", + "\n", + "RET_Y905->RET\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET->MAPK14_Y182\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RET->MAPK3_Y204\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SRC_S493->SRC\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF\n", + "\n", + "ARAF\n", + "\n", + "\n", + "\n", + "ARAF_Y302->ARAF\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ARAF->MAP2K1_S218\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1\n", + "\n", + "RAF1\n", + "\n", + "\n", + "\n", + "RAF1_Y340->RAF1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RAF1->MAP2K1_S222\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CDK1\n", + "\n", + "CDK1\n", + "\n", + "\n", + "\n", + "CDK1_Y15->CDK1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_S343\n", + "\n", + "MAPK3_S343\n", + "\n", + "\n", + "\n", + "CDK1->MAPK3_S343\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "MAPK3_S343->MAPK3\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d1902496-e08c-4628-bdb0-f4d0b83c82f3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/6_ontology.html b/notebooks/6_ontology.html new file mode 100644 index 0000000..c55a264 --- /dev/null +++ b/notebooks/6_ontology.html @@ -0,0 +1,349 @@ + + + + + + + Connect to downstream Gene Ontology terms. — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Connect to downstream Gene Ontology terms.

+

This notebook showcases the functionality of Omniflow that connects the existing nodes of a network to a phenotype of interest.

+
+
[1]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe
+from neko._annotations.gene_ontology import Ontology
+import omnipath as op
+
+
+
+
+
+
+
+
+
+CPU times: user 5.88 s, sys: 1.59 s, total: 7.46 s
+Wall time: 5.06 s
+
+
+
+

1. Build network

+

Please see the Network building tutorial for detailed explanations of each step.

+
+
[2]:
+
+
+
+
genes = ["SRC", "NOTCH1", "FAK"]
+
+
+
+
+
+
[3]:
+
+
+
+
new_net1 = Network(genes, resources = 'omnipath')
+
+
+
+
+
+
[4]:
+
+
+
+
%%time
+new_net1.connect_nodes(only_signed=True, consensus_only=True)
+
+
+
+
+
+
+
+
+
+CPU times: user 19.7 ms, sys: 123 µs, total: 19.8 ms
+Wall time: 19.6 ms
+
+
+
+
+

2. Connect to Gene Ontology (GO) term

+

Connect the nodes of the Network with markers of a certain phenotype, from Gene Ontology.

+

The connect_genes_to_phenotype function will look for interactions between the nodes of the network and genes annotated with a GO term of interest. The argument compress replaces the individual phenotype-specific genes into one phenotype node.

+
+

Note

+

We suggest to the users to choose gene ontology terms lower in the hierarcy (e.g., execution phase of apoptosis versus apoptosis) to avoid the inclusion of too many genes.

+
+
+
[5]:
+
+
+
+
%%time
+new_net1.connect_genes_to_phenotype(id_accession="GO:0001837", phenotype="epithelial to mesenchymal transition", only_signed=True, compress=True, maxlen=1)
+
+
+
+
+
+
+
+
+
+Start requesting genes from Gene Ontology
+Fetching from:  https://golr-aux.geneontology.io/solr/select?defType=edismax&qt=standard&indent=on&wt=csv&rows=100000&start=0&fl=bioentity_label&facet=true&facet.mincount=1&facet.sort=count&json.nl=arrarr&facet.limit=25&hl=true&hl.simple.pre=%3Cem%20class=%22hilite%22%3E&hl.snippets=1000&csv.encapsulator=&csv.separator=%09&csv.header=false&csv.mv.separator=%7C&fq=document_category:%22annotation%22&fq=isa_partof_closure:%22GO:0001837%22&fq=taxon_subset_closure_label:%22Homo%20sapiens%22&fq=type:%22protein%22&fq=annotation_class_label:%22epithelial%20to%20mesenchymal%20transition%22&facet.field=aspect&facet.field=taxon_subset_closure_label&facet.field=type&facet.field=evidence_subset_closure_label&facet.field=regulates_closure_label&facet.field=isa_partof_closure_label&facet.field=annotation_class_label&facet.field=qualifier&facet.field=annotation_extension_class_closure_label&facet.field=assigned_by&facet.field=panther_family_label&q=*:*
+Done
+Starting connecting network's nodes to:  ['DACT3', 'SNAI1', 'RBPJ', 'ROCK2', 'TGFBR2', 'RFLNB', 'AKNA', 'GSK3B', 'WNT5A', 'NOTCH1', 'LOXL3', 'BMP7', 'FLNA', 'FAM83D', 'TRIM28', 'AMELX', 'EPB41L5', 'SLC39A6', 'DLG5', 'ROCK1', 'SOX9', 'ENG', 'SP6', 'SLC39A10', 'FOXF2', 'FGFR1', 'WNT11', 'NCAM1', 'BMP2', 'HNRNPAB', 'HMGA2', 'LIMS1', 'IGF1', 'CTNNB1', 'DDX5', 'TGFB1', 'TGFB2', 'TGFBR3L', 'SMAD4', 'PPP3R1', 'S100A4', 'FGFR2', 'NOG', 'CUL7', 'HGF', 'NOTCH4', 'WNT4', 'TGFBR3', 'TGFBR1', 'LEF1', 'HIF1A', 'DDX17', 'SNAI2', 'LOXL2']
+CPU times: user 414 ms, sys: 4.23 ms, total: 419 ms
+Wall time: 1.44 s
+
+
+
+
[6]:
+
+
+
+
#Visualize network
+visualizer1 = NetworkVisualizer(new_net1, color_by='effect')
+visualizer1.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_6_ontology_8_0.svg +
+
+
+
[7]:
+
+
+
+
new_net1.edges
+
+
+
+
+
+
[7]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sourcetargetTypeEffectReferences
0P12931Q05397stimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12931epithelial_to_mesenchymal_transitioninhibitionACSN:10593980;ACSN:12123611;ACSN:15782139;ACSN...
2P46531epithelial_to_mesenchymal_transitionstimulationBioGRID:12644465;BioGRID:22143792;BioGRID:3096...
3Q05397epithelial_to_mesenchymal_transitionbimodalnan
4P46531epithelial_to_mesenchymal_transitionNaNstimulationGene Ontology
+
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/6_ontology.ipynb b/notebooks/6_ontology.ipynb new file mode 100644 index 0000000..c33a384 --- /dev/null +++ b/notebooks/6_ontology.ipynb @@ -0,0 +1,363 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Connect to downstream Gene Ontology terms.\n", + "\n", + "This notebook showcases the functionality of Omniflow that connects the existing nodes of a network to a phenotype of interest. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.88 s, sys: 1.59 s, total: 7.46 s\n", + "Wall time: 5.06 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 1. Build network\n", + "\n", + "Please see the [Network building](https://omniflow-project.readthedocs.io/en/latest/notebooks/network_building.html) tutorial for detailed explanations of each step." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "370180cc", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 19.7 ms, sys: 123 µs, total: 19.8 ms\n", + "Wall time: 19.6 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)" + ] + }, + { + "cell_type": "markdown", + "id": "8ed135d3-9f71-4cec-9381-96c63fba766e", + "metadata": {}, + "source": [ + "### 2. Connect to Gene Ontology (GO) term\n", + "\n", + "Connect the nodes of the Network with markers of a certain phenotype, from Gene Ontology. \n", + "\n", + "The _connect_genes_to_phenotype_ function will look for interactions between the nodes of the network and genes annotated with a GO term of interest. The argument _compress_ replaces the individual phenotype-specific genes into one phenotype node.\n", + "\n", + "
\n", + "\n", + "**Note**\n", + " \n", + "We suggest to the users to choose gene ontology terms lower in the hierarcy (e.g., execution phase of apoptosis _versus_ apoptosis) to avoid the inclusion of too many genes.\n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fa499a38-c22a-4a0e-b1d4-3ffb10e4a370", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start requesting genes from Gene Ontology\n", + "Fetching from: https://golr-aux.geneontology.io/solr/select?defType=edismax&qt=standard&indent=on&wt=csv&rows=100000&start=0&fl=bioentity_label&facet=true&facet.mincount=1&facet.sort=count&json.nl=arrarr&facet.limit=25&hl=true&hl.simple.pre=%3Cem%20class=%22hilite%22%3E&hl.snippets=1000&csv.encapsulator=&csv.separator=%09&csv.header=false&csv.mv.separator=%7C&fq=document_category:%22annotation%22&fq=isa_partof_closure:%22GO:0001837%22&fq=taxon_subset_closure_label:%22Homo%20sapiens%22&fq=type:%22protein%22&fq=annotation_class_label:%22epithelial%20to%20mesenchymal%20transition%22&facet.field=aspect&facet.field=taxon_subset_closure_label&facet.field=type&facet.field=evidence_subset_closure_label&facet.field=regulates_closure_label&facet.field=isa_partof_closure_label&facet.field=annotation_class_label&facet.field=qualifier&facet.field=annotation_extension_class_closure_label&facet.field=assigned_by&facet.field=panther_family_label&q=*:*\n", + "Done\n", + "Starting connecting network's nodes to: ['DACT3', 'SNAI1', 'RBPJ', 'ROCK2', 'TGFBR2', 'RFLNB', 'AKNA', 'GSK3B', 'WNT5A', 'NOTCH1', 'LOXL3', 'BMP7', 'FLNA', 'FAM83D', 'TRIM28', 'AMELX', 'EPB41L5', 'SLC39A6', 'DLG5', 'ROCK1', 'SOX9', 'ENG', 'SP6', 'SLC39A10', 'FOXF2', 'FGFR1', 'WNT11', 'NCAM1', 'BMP2', 'HNRNPAB', 'HMGA2', 'LIMS1', 'IGF1', 'CTNNB1', 'DDX5', 'TGFB1', 'TGFB2', 'TGFBR3L', 'SMAD4', 'PPP3R1', 'S100A4', 'FGFR2', 'NOG', 'CUL7', 'HGF', 'NOTCH4', 'WNT4', 'TGFBR3', 'TGFBR1', 'LEF1', 'HIF1A', 'DDX17', 'SNAI2', 'LOXL2']\n", + "CPU times: user 414 ms, sys: 4.23 ms, total: 419 ms\n", + "Wall time: 1.44 s\n" + ] + } + ], + "source": [ + "%%time\n", + "new_net1.connect_genes_to_phenotype(id_accession=\"GO:0001837\", phenotype=\"epithelial to mesenchymal transition\", only_signed=True, compress=True, maxlen=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "33300268-bcf6-442b-97be-c7718922a939", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "SRC->PTK2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "epithelial_to_mesenchymal_transition\n", + "\n", + "epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "SRC->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "PTK2->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "NOTCH1->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "NOTCH1->epithelial_to_mesenchymal_transition\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(new_net1, color_by='effect')\n", + "visualizer1.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7ba750f3-8440-4bf6-a37b-5c917f334fc9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sourcetargetTypeEffectReferences
0P12931Q05397stimulationAdhesome:10085298;Adhesome:10592173;Adhesome:1...
1P12931epithelial_to_mesenchymal_transitioninhibitionACSN:10593980;ACSN:12123611;ACSN:15782139;ACSN...
2P46531epithelial_to_mesenchymal_transitionstimulationBioGRID:12644465;BioGRID:22143792;BioGRID:3096...
3Q05397epithelial_to_mesenchymal_transitionbimodalnan
4P46531epithelial_to_mesenchymal_transitionNaNstimulationGene Ontology
\n", + "
" + ], + "text/plain": [ + " source target Type Effect \\\n", + "0 P12931 Q05397 stimulation \n", + "1 P12931 epithelial_to_mesenchymal_transition inhibition \n", + "2 P46531 epithelial_to_mesenchymal_transition stimulation \n", + "3 Q05397 epithelial_to_mesenchymal_transition bimodal \n", + "4 P46531 epithelial_to_mesenchymal_transition NaN stimulation \n", + "\n", + " References \n", + "0 Adhesome:10085298;Adhesome:10592173;Adhesome:1... \n", + "1 ACSN:10593980;ACSN:12123611;ACSN:15782139;ACSN... \n", + "2 BioGRID:12644465;BioGRID:22143792;BioGRID:3096... \n", + "3 nan \n", + "4 Gene Ontology " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_net1.edges" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff7e1fd6-53fd-4985-9866-417b743486b2", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/7_tissue_mapping.html b/notebooks/7_tissue_mapping.html new file mode 100644 index 0000000..bf83740 --- /dev/null +++ b/notebooks/7_tissue_mapping.html @@ -0,0 +1,412 @@ + + + + + + + Map tissue expression — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Map tissue expression

+

This notebook explores how you can explore whether the nodes in your network are expressed in a tissue of interest. The annotations are accessed from the Annotation object of Omnipath, and are based on expression data from the Human Protein Atlas.

+
+
[1]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe
+from neko._annotations.gene_ontology import Ontology
+import omnipath as op
+
+
+
+
+
+
+
+
+
+CPU times: user 6.01 s, sys: 1.56 s, total: 7.57 s
+Wall time: 5.17 s
+
+
+
+

1. Import genes as network nodes

+
+
[2]:
+
+
+
+
genes = ["SRC", "NOTCH1", "FAK", "CDH1", "CDH2", "VIM", "MAP4K4", "LATS1", "LATS2", "PTK2B"]
+
+
+
+
+
+
[3]:
+
+
+
+
new_net1 = Network(genes, resources = 'omnipath')
+
+
+
+
+
+
[4]:
+
+
+
+
#Print node dataframe
+new_net1.nodes
+
+
+
+
+
+
[4]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
+
+
+
+
+

2. Check if the genes are annotated in the tissue of interest (e.g., in colorectal cancer)

+
+
[5]:
+
+
+
+
annot = Ontology()
+results_df = annot.check_tissue_annotations(genes_df = new_net1.nodes, tissue = 'colorectal cancer')
+print(results_df)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  Genesymbol  in_tissue
+0        SRC       True
+1     NOTCH1       True
+2       PTK2       True
+3       CDH1       True
+4       CDH2       True
+5        VIM       True
+6     MAP4K4       True
+7      LATS1       True
+8      LATS2       True
+9      PTK2B       True
+
+
+
+
+

3. Color nodes based on their presence/absence in the tissue of interest

+

The tissue_mapping functions highligts as light blue all the nodes of the network that are expressed in the used-defined system.

+
+
[6]:
+
+
+
+
network_visualizer = NetworkVisualizer(new_net1)
+network_visualizer.tissue_mapping(results_df)
+network_visualizer.render()
+
+
+
+
+
+
+
+
+../_images/notebooks_7_tissue_mapping_9_0.svg +
+
+
+
[ ]:
+
+
+
+

+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/7_tissue_mapping.ipynb b/notebooks/7_tissue_mapping.ipynb new file mode 100644 index 0000000..a8d6df2 --- /dev/null +++ b/notebooks/7_tissue_mapping.ipynb @@ -0,0 +1,501 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Map tissue expression\n", + "\n", + "This notebook explores how you can explore whether the nodes in your network are expressed in a tissue of interest. The annotations are accessed from the Annotation object of Omnipath, and are based on expression data from the Human Protein Atlas." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.01 s, sys: 1.56 s, total: 7.57 s\n", + "Wall time: 5.17 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "## 1. Import genes as network nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fad00bec-ba72-4943-bf1e-9c60f58f17a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenesymbolUniprotType
0SRCP12931NaN
1NOTCH1P46531NaN
2PTK2Q05397NaN
3CDH1P12830NaN
4CDH2P19022NaN
5VIMP08670NaN
6MAP4K4O95819NaN
7LATS1O95835NaN
8LATS2Q9NRM7NaN
9PTK2BQ14289NaN
\n", + "
" + ], + "text/plain": [ + " Genesymbol Uniprot Type\n", + "0 SRC P12931 NaN\n", + "1 NOTCH1 P46531 NaN\n", + "2 PTK2 Q05397 NaN\n", + "3 CDH1 P12830 NaN\n", + "4 CDH2 P19022 NaN\n", + "5 VIM P08670 NaN\n", + "6 MAP4K4 O95819 NaN\n", + "7 LATS1 O95835 NaN\n", + "8 LATS2 Q9NRM7 NaN\n", + "9 PTK2B Q14289 NaN" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Print node dataframe\n", + "new_net1.nodes" + ] + }, + { + "cell_type": "markdown", + "id": "3e9006ec-00d2-453d-8b8f-e939938e9068", + "metadata": {}, + "source": [ + "## 2. Check if the genes are annotated in the tissue of interest (e.g., in colorectal cancer)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9540f33d-68f8-4c98-b68e-3e3d1497467e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "80151a3033954c7fa432793ba3ac15cb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6be86b4c527b4b4c8daaee10cb5f8a8f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "938c2adaa3d942fe85b19157c20d7025", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e32beb2f17c64e868bd4cd0f9207bd77", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "06c3b91dfd154c9bb5fda9b2395ef29a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cfb49cab545748538ecc178511211064", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ab64e58ee2a444edad4b08fa9d50a997", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "812a372fa0c74f2ea040c03cbd5ca784", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "51ecd65707fd449785a2d8f5d5d85c5b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "99c44916b0cd42b2857a5f406cbd0522", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "0.00B [00:00, ?B/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Genesymbol in_tissue\n", + "0 SRC True\n", + "1 NOTCH1 True\n", + "2 PTK2 True\n", + "3 CDH1 True\n", + "4 CDH2 True\n", + "5 VIM True\n", + "6 MAP4K4 True\n", + "7 LATS1 True\n", + "8 LATS2 True\n", + "9 PTK2B True\n" + ] + } + ], + "source": [ + "annot = Ontology()\n", + "results_df = annot.check_tissue_annotations(genes_df = new_net1.nodes, tissue = 'colorectal cancer')\n", + "print(results_df)" + ] + }, + { + "cell_type": "markdown", + "id": "6a05e120-424b-405f-be04-f8c3725f950b", + "metadata": {}, + "source": [ + "## 3. Color nodes based on their presence/absence in the tissue of interest\n", + "\n", + "The `tissue_mapping` functions highligts as light blue all the nodes of the network that are expressed in the used-defined system." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fbd98405-045a-4316-8174-e96e9a71d9ee", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "SRC\n", + "\n", + "SRC\n", + "\n", + "\n", + "\n", + "NOTCH1\n", + "\n", + "NOTCH1\n", + "\n", + "\n", + "\n", + "PTK2\n", + "\n", + "PTK2\n", + "\n", + "\n", + "\n", + "CDH1\n", + "\n", + "CDH1\n", + "\n", + "\n", + "\n", + "CDH2\n", + "\n", + "CDH2\n", + "\n", + "\n", + "\n", + "VIM\n", + "\n", + "VIM\n", + "\n", + "\n", + "\n", + "MAP4K4\n", + "\n", + "MAP4K4\n", + "\n", + "\n", + "\n", + "LATS1\n", + "\n", + "LATS1\n", + "\n", + "\n", + "\n", + "LATS2\n", + "\n", + "LATS2\n", + "\n", + "\n", + "\n", + "PTK2B\n", + "\n", + "PTK2B\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "network_visualizer = NetworkVisualizer(new_net1)\n", + "network_visualizer.tissue_mapping(results_df)\n", + "network_visualizer.render()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b0dc52f-e16b-428e-a05e-07a2035cc2f7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/8_Compare_networks.html b/notebooks/8_Compare_networks.html new file mode 100644 index 0000000..36c9651 --- /dev/null +++ b/notebooks/8_Compare_networks.html @@ -0,0 +1,290 @@ + + + + + + + Network comparison — neko documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Network comparison

+

In some cases, it might be of interest to compare two networks with each other. For instance, you might want to compare an existing network with the Neko-generated network, or compare the resulting networks from two different network construction strategies.

+

The following code shows the comparison of two networks, built with different input parameters of the complete_connections function.

+
+
[1]:
+
+
+
+
%%time
+from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe
+from neko._annotations.gene_ontology import Ontology
+from neko._methods.compare import compare_networks
+import omnipath as op
+
+
+
+
+
+
+
+
+
+CPU times: user 5.76 s, sys: 1.66 s, total: 7.42 s
+Wall time: 5.09 s
+
+
+
+

1. Define the list of genes of interest

+
+
[2]:
+
+
+
+
genes = ["SRC", "NOTCH1", "FAK", "CDH1", "CDH2", "VIM", "MAP4K4", "LATS1", "LATS2", "PTK2B"]
+
+
+
+
+
+
+

2. Create networks.

+

Please refer to the Usage tutorial for a detailed explanation of each step.

+
+

2A. Build first network

+

For the first network, we specify that we do not want to take into account the concensus sign (i.e. activation vs inhibition) for the interactions.

+
+
[3]:
+
+
+
+
new_net1 = Network(genes, resources = 'omnipath')
+new_net1.connect_nodes(only_signed=True, consensus_only=True)
+new_net1.complete_connection(maxlen=6, algorithm="bfs", only_signed=True, connect_with_bias=True, consensus=True)
+
+
+
+
+
+
+

2B. Build second network

+

For the second network, we set the consensus argument to True.

+
+
[4]:
+
+
+
+
new_net2 = Network(genes, resources = 'omnipath')
+new_net2.connect_nodes(only_signed=True, consensus_only=True)
+new_net2.complete_connection(maxlen=3, algorithm="dfs", only_signed=True, connect_with_bias=True, consensus=True)
+
+
+
+
+
+
+
+

3. Compare networks

+

The compare_networks functions receives as input the two network objects of interest. Its output is two dataframes; one for the comparison of the edges and for the comparison of nodes.

+
+
[5]:
+
+
+
+
interaction_comparison, node_comparison = compare_networks(new_net1, new_net2)
+
+
+
+
+
+
[6]:
+
+
+
+
print(interaction_comparison)
+
+
+
+
+
+
+
+
+
+    source  target           comparison
+0     ABL1     APP  Unique to Network 2
+1     ABL1     BTK  Unique to Network 2
+2     ABL1    CDH2               Common
+3     ABL1  CTNNB1               Common
+4     ABL1    EGFR               Common
+..     ...     ...                  ...
+715   WNT1   ITGB4  Unique to Network 2
+716   WNT1    LEF1  Unique to Network 2
+717   WNT1  MAP3K7  Unique to Network 2
+718   WNT1  NOTCH1  Unique to Network 2
+719    ZYX     SRC               Common
+
+[720 rows x 3 columns]
+
+
+
+
[7]:
+
+
+
+
print(node_comparison)
+
+
+
+
+
+
+
+
+
+       node           comparison
+0     IKBKB  Unique to Network 1
+1     ROCK1  Unique to Network 1
+2     SNAI2  Unique to Network 1
+3     PRKG1  Unique to Network 1
+4      TP63  Unique to Network 1
+..      ...                  ...
+101   PTK2B               Common
+102    PTEN               Common
+103    CDH2               Common
+104    CDH1               Common
+105  MAP4K4               Common
+
+[106 rows x 2 columns]
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/8_Compare_networks.ipynb b/notebooks/8_Compare_networks.ipynb new file mode 100644 index 0000000..7463cdf --- /dev/null +++ b/notebooks/8_Compare_networks.ipynb @@ -0,0 +1,224 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55b5595c-fec9-41c3-b756-b95cd0c52048", + "metadata": {}, + "source": [ + "# Network comparison\n", + "\n", + "In some cases, it might be of interest to compare two networks with each other. For instance, you might want to compare an existing network with the Neko-generated network, or compare the resulting networks from two different network construction strategies.\n", + "\n", + "The following code shows the comparison of two networks, built with different input parameters of the `complete_connections` function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c317de8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 5.76 s, sys: 1.66 s, total: 7.42 s\n", + "Wall time: 5.09 s\n" + ] + } + ], + "source": [ + "%%time\n", + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe\n", + "from neko._annotations.gene_ontology import Ontology\n", + "from neko._methods.compare import compare_networks\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "7fe1b7d5", + "metadata": {}, + "source": [ + "## 1. Define the list of genes of interest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79c09e13", + "metadata": {}, + "outputs": [], + "source": [ + "genes = [\"SRC\", \"NOTCH1\", \"FAK\", \"CDH1\", \"CDH2\", \"VIM\", \"MAP4K4\", \"LATS1\", \"LATS2\", \"PTK2B\"]" + ] + }, + { + "cell_type": "markdown", + "id": "6a5b5adf", + "metadata": {}, + "source": [ + "## 2. Create networks.\n", + "\n", + "Please refer to the `Usage` tutorial for a detailed explanation of each step.\n" + ] + }, + { + "cell_type": "markdown", + "id": "2910c871-fdfc-4d20-b76f-af213f06a3f0", + "metadata": {}, + "source": [ + "### 2A. Build first network\n", + "\n", + "For the first network, we specify that we do not want to take into account the concensus sign (i.e. activation vs inhibition) for the interactions." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcf68a99-8454-41e3-8816-c3f976d04c0b", + "metadata": {}, + "outputs": [], + "source": [ + "new_net1 = Network(genes, resources = 'omnipath')\n", + "new_net1.connect_nodes(only_signed=True, consensus_only=True)\n", + "new_net1.complete_connection(maxlen=6, algorithm=\"bfs\", only_signed=True, connect_with_bias=True, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "82052e91-dd5a-451e-b83c-7df080c1a09b", + "metadata": {}, + "source": [ + "### 2B. Build second network\n", + "\n", + "For the second network, we set the `consensus` argument to `True`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5d13c798-975b-43ef-a841-1fc6176578af", + "metadata": {}, + "outputs": [], + "source": [ + "new_net2 = Network(genes, resources = 'omnipath')\n", + "new_net2.connect_nodes(only_signed=True, consensus_only=True)\n", + "new_net2.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=True, consensus=True)" + ] + }, + { + "cell_type": "markdown", + "id": "017750d0-582d-4da5-a392-00eddb09e35f", + "metadata": {}, + "source": [ + "## 3. Compare networks" + ] + }, + { + "cell_type": "markdown", + "id": "9c1d69b5-1e70-456c-a702-61cb37f52dc3", + "metadata": {}, + "source": [ + "The compare_networks functions receives as input the two network objects of interest. Its output is two dataframes; one for the comparison of the edges and for the comparison of nodes. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "381a43b7-032f-40f7-8846-924901ff0161", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "interaction_comparison, node_comparison = compare_networks(new_net1, new_net2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3aa53d75-38bb-4210-90fa-2cf4535d49e7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " source target comparison\n", + "0 ABL1 APP Unique to Network 2\n", + "1 ABL1 BTK Unique to Network 2\n", + "2 ABL1 CDH2 Common\n", + "3 ABL1 CTNNB1 Common\n", + "4 ABL1 EGFR Common\n", + ".. ... ... ...\n", + "715 WNT1 ITGB4 Unique to Network 2\n", + "716 WNT1 LEF1 Unique to Network 2\n", + "717 WNT1 MAP3K7 Unique to Network 2\n", + "718 WNT1 NOTCH1 Unique to Network 2\n", + "719 ZYX SRC Common\n", + "\n", + "[720 rows x 3 columns]\n" + ] + } + ], + "source": [ + "print(interaction_comparison)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8a16da4d-c34f-466a-8e0f-4dfa42a635be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " node comparison\n", + "0 IKBKB Unique to Network 1\n", + "1 ROCK1 Unique to Network 1\n", + "2 SNAI2 Unique to Network 1\n", + "3 PRKG1 Unique to Network 1\n", + "4 TP63 Unique to Network 1\n", + ".. ... ...\n", + "101 PTK2B Common\n", + "102 PTEN Common\n", + "103 CDH2 Common\n", + "104 CDH1 Common\n", + "105 MAP4K4 Common\n", + "\n", + "[106 rows x 2 columns]\n" + ] + } + ], + "source": [ + "print(node_comparison)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/9-Recreating_famous_pathways.html b/notebooks/9-Recreating_famous_pathways.html new file mode 100644 index 0000000..59e0ce8 --- /dev/null +++ b/notebooks/9-Recreating_famous_pathways.html @@ -0,0 +1,987 @@ + + + + + + + Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo — neko documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + Edit on GitHub +
  • +
+
+
+
+
+ +
+

Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo

+
+
[7]:
+
+
+
+
from neko.core.network import Network
+from neko._visual.visualize_network import NetworkVisualizer
+from neko.inputs import Universe, signor
+import omnipath as op
+
+
+
+
+
+

1) Retrieving the MTOR Signaling from Signor using NeKo

+
+
[2]:
+
+
+
+
mtor_nodes = ["RPS6KA1", "SREBF1", "MTOR", "RPTOR", "INSR", "RPS6KB1", "RHEB", "EIF4EBP1", "INS", "PTEN",
+             "RPS6", "TFEB", "PIK3R1", "PPARGC1A", "PDPK1", "AKT1S1", "PPARG", "PIK3CA", "EIF4E", "IRS1", "GSK3B", "ULK1"]
+
+
+
+
+
+
[3]:
+
+
+
+
import random
+
+
+
+
+
+
[4]:
+
+
+
+
seeds_number = 4
+random_seeds = random.sample(mtor_nodes, seeds_number)
+
+
+
+
+
+
[5]:
+
+
+
+
random_seeds
+
+
+
+
+
+
[5]:
+
+
+
+
+['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']
+
+
+
+
[8]:
+
+
+
+
resources = Universe()
+resources = signor("../neko/_data/signor_db.tsv")  # this function accept only tab separated values
+resources.build()
+
+
+
+
+

Let’s compare the function commplete_connection (based on the Reciprocal Pathway Extender algorithm) with the function connect_radially (based on the Iterative Neighbor Expansion ). We are going to create two neko_net, and apply to each of them one of the two functions. Finally, we are going to compare the resulting networks.

+
+
[9]:
+
+
+
+
neko_net1 = Network(random_seeds, resources = resources.interactions)
+
+
+
+
+
+
[10]:
+
+
+
+
neko_net2 = Network(random_seeds, resources = resources.interactions)
+
+
+
+
+
+
[11]:
+
+
+
+
%%time
+neko_net1.complete_connection(maxlen=3, algorithm="dfs", only_signed=True, connect_with_bias=False, consensus=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 754 ms, sys: 7 ms, total: 761 ms
+Wall time: 759 ms
+
+
+
+

Note

+

The max_len in the function connect_network_radially should be kept at 1, max 2. Why?

+

The Iterative Neighbour Expansion, as the name suggests, iterates through all the seed nodes and adds to the network all the interactions found. In the next step, it iterates through all the neighbors found and looks for their neighbors. Doing so, the Network size could exponentially increase, if among the neighbor nodes there are some HUB (nodes with a high degree of connection).

+
+
+
[12]:
+
+
+
+
%%time
+neko_net2.connect_network_radially(max_len=2, only_signed=True, consensus=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 16.9 s, sys: 2.63 ms, total: 16.9 s
+Wall time: 16.9 s
+
+
+

Now let’s visualize the network:

+
+
[13]:
+
+
+
+
#Visualize network
+visualizer1 = NetworkVisualizer(neko_net1, color_by='effect', noi=True)
+visualizer1.render("./img/Complete_connection_neko_net_sample", view=True)
+
+
+
+
+
+
+
+
+
+
+(evince:39773): Gdk-WARNING **: 10:33:59.165: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)
+
+
+
+
[14]:
+
+
+
+
#Visualize network
+visualizer2 = NetworkVisualizer(neko_net2, color_by='effect', noi=True)
+visualizer2.render("./img/Radial_neko_net_sample", view=True)
+
+
+
+
+
+
+
+
+
+
+(evince:39829): Gdk-WARNING **: 10:34:09.325: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)
+
+
+

Let’s compare the Networks. We will use JUST those nodes in signor that are not complexes or protein families (so we excluded all those nodes that starts with “SIGNOR_”). At the following link you can find the full MTOR pathway from SIGNOR: https://signor.uniroma2.it/pathway_browser.php?beta=3.0&organism=&pathway_list=SIGNOR-MS&x=13&y=13

+
+
[15]:
+
+
+
+
net1_nodes_size = len(neko_net1.nodes)
+net2_nodes_size = len(neko_net2.nodes)
+
+print("Number of nodes of the first NeKo network: ", net1_nodes_size)
+print("Number of nodes of the second NeKo network: ", net2_nodes_size)
+
+
+
+
+
+
+
+
+
+Number of nodes of the first NeKo network:  10
+Number of nodes of the second NeKo network:  174
+
+
+
+
[16]:
+
+
+
+
net1_edges_size = len(neko_net1.edges)
+net2_edges_size = len(neko_net2.edges)
+
+print("Number of edges of the first NeKo network: ", net1_edges_size)
+print("Number of edges of the second NeKo network: ", net2_edges_size)
+
+
+
+
+
+
+
+
+
+Number of edges of the first NeKo network:  23
+Number of edges of the second NeKo network:  639
+
+
+

The first consideration to do is that the RPE algorithm, is way faster than the INE one (529 ms vs 9.73 s). Despite being slower, the INE algorithm, provided a much bigger network (15 nodes vs 44, 84 edges vs 259)

+
+
[17]:
+
+
+
+
nodes_found = []
+for node in mtor_nodes:
+    if node in list(neko_net1.nodes["Genesymbol"]):
+        nodes_found.append(node)
+
+print("Initial nodes: ", random_seeds)
+print("Nodes in the MTOR pathways: ", mtor_nodes)
+print("Nodes founded: ", nodes_found)
+
+
+
+
+
+
+
+
+
+Initial nodes:  ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']
+Nodes in the MTOR pathways:  ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']
+Nodes founded:  ['MTOR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'AKT1S1', 'PPARG']
+
+
+
+
[18]:
+
+
+
+
print("Percentage of genes covered: ", (len(nodes_found)/len(mtor_nodes)) * 100)
+
+
+
+
+
+
+
+
+
+Percentage of genes covered:  27.27272727272727
+
+
+
+
[19]:
+
+
+
+
nodes_found = []
+for node in mtor_nodes:
+    if node in list(neko_net2.nodes["Genesymbol"]):
+        nodes_found.append(node)
+
+print("Initial nodes: ", random_seeds)
+print("Nodes in the MTOR pathways: ", mtor_nodes)
+print("Nodes founded: ", nodes_found)
+
+
+
+
+
+
+
+
+
+Initial nodes:  ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']
+Nodes in the MTOR pathways:  ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']
+Nodes founded:  ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'IRS1', 'GSK3B', 'ULK1']
+
+
+
+
[20]:
+
+
+
+
print("Percentage of genes covered: ", (len(nodes_found)/len(mtor_nodes)) * 100)
+
+
+
+
+
+
+
+
+
+Percentage of genes covered:  68.18181818181817
+
+
+

As expected, due to the network size, the INE algorithm managed to capture more genes belonging to the MTOR pathway compared to the RPE algorithm. This was expected also because the RPE algorithm aims at finding the minimal set of genes that can connect all the seed nodes given by the user, while the INE algorithm does not take into account the shortest paths, but homogeneously explores the surroundings.

+
+
+

2) Retrieving the EGF/EGFR pathway (source: wikipathway) using Omnipath

+

The MTOR pathways we saw in use case 2 is a reletavely small pathway. We decided to test the INE and RPE algorithm to retrieve a bigger one, the EGF/EGFR pathway as shown in wikipathway, fetching interactions from Omnipath.

+

In order to do so, we can proceed with the installation of the python package pywikipathways to quickly retrieve the genes belonging to the EGF/EGFR pathway (WP437, https://www.wikipathways.org/pathways/WP437.html).

+
+
[19]:
+
+
+
+
# uncomment the following line if you do not have installed pywikipathways
+!pip install pywikipathways
+
+
+
+
+
+
[21]:
+
+
+
+
import pywikipathways as pwpw
+
+
+
+
+
+
[22]:
+
+
+
+
pwpw.get_pathway_info('WP437')
+
+
+
+
+
+
[22]:
+
+
+
+
+{'id': 'WP437',
+ 'url': 'https://classic.wikipathways.org/index.php/Pathway:WP437',
+ 'name': 'EGF/EGFR signaling',
+ 'species': 'Homo sapiens',
+ 'revision': '129679'}
+
+
+
+
[23]:
+
+
+
+
egf_egfr_genes = pwpw.get_xref_list('WP437','H')
+
+
+
+
+
+
[24]:
+
+
+
+
print(len(egf_egfr_genes))
+egf_egfr_genes
+
+
+
+
+
+
+
+
+
+162
+
+
+
+
[24]:
+
+
+
+
+['ABI1',
+ 'ABL1',
+ 'AKT1',
+ 'AP2A1',
+ 'AP2B1',
+ 'AP2M1',
+ 'AP2S1',
+ 'ARF6',
+ 'ARHGEF1',
+ 'ASAP1',
+ 'ATF1',
+ 'ATXN2',
+ 'AURKA',
+ 'BCAR1',
+ 'BRAF',
+ 'CAMK2A',
+ 'CAV1',
+ 'CAV2',
+ 'CBL',
+ 'CBLB',
+ 'CBLC',
+ 'CDC42',
+ 'CFL1',
+ 'CREB1',
+ 'CRK',
+ 'CRKL',
+ 'CSK',
+ 'DNM1',
+ 'DOK2',
+ 'E2F1',
+ 'EGF',
+ 'EGFR',
+ 'EIF4EBP1',
+ 'ELK1',
+ 'ELK4',
+ 'EPN1',
+ 'EPS15',
+ 'EPS15L1',
+ 'EPS8',
+ 'ERBB2',
+ 'ERRFI1',
+ 'FOS',
+ 'FOSB',
+ 'FOXO1',
+ 'FOXO4',
+ 'GAB1',
+ 'GAB2',
+ 'GJA1',
+ 'GRB10',
+ 'GRB2',
+ 'HGS',
+ 'HRAS',
+ 'INPP5D',
+ 'INPPL1',
+ 'IQGAP1',
+ 'IQSEC1',
+ 'ITCH',
+ 'JAK1',
+ 'JAK2',
+ 'JUN',
+ 'JUND',
+ 'KRAS',
+ 'LIMK2',
+ 'MAP2K1',
+ 'MAP2K2',
+ 'MAP2K5',
+ 'MAP3K1',
+ 'MAP3K2',
+ 'MAP3K3',
+ 'MAP3K4',
+ 'MAP4K1',
+ 'MAPK1',
+ 'MAPK14',
+ 'MAPK4',
+ 'MAPK7',
+ 'MAPK8',
+ 'MAPK9',
+ 'MEF2A',
+ 'MEF2C',
+ 'MEF2D',
+ 'MT-CO2',
+ 'MTOR',
+ 'MYBL2',
+ 'NCK1',
+ 'NCK2',
+ 'NCOA3',
+ 'NDUFA13',
+ 'NEDD4',
+ 'NEDD8',
+ 'NOS3',
+ 'PAK1',
+ 'PCNA',
+ 'PDPK1',
+ 'PEBP1',
+ 'PIAS3',
+ 'PIK3C2B',
+ 'PIK3R1',
+ 'PIK3R2',
+ 'PLCE1',
+ 'PLCG1',
+ 'PLD1',
+ 'PLD2',
+ 'PLSCR1',
+ 'PRKCA',
+ 'PRKCB',
+ 'PRKCD',
+ 'PRKCI',
+ 'PRKCZ',
+ 'PTEN',
+ 'PTK2',
+ 'PTK2B',
+ 'PTK6',
+ 'PTPN11',
+ 'PTPN12',
+ 'PTPN5',
+ 'PTPRR',
+ 'PXDN',
+ 'RAB5A',
+ 'RAC1',
+ 'RAF1',
+ 'RALA',
+ 'RALB',
+ 'RALBP1',
+ 'RALGDS',
+ 'RAP1A',
+ 'RASA1',
+ 'REPS2',
+ 'RICTOR',
+ 'RIN1',
+ 'ROCK1',
+ 'RPS6KA1',
+ 'RPS6KA2',
+ 'RPS6KA3',
+ 'RPS6KA5',
+ 'RPS6KB1',
+ 'SH2D2A',
+ 'SH3GL2',
+ 'SH3GL3',
+ 'SH3KBP1',
+ 'SHC1',
+ 'SOS1',
+ 'SOS2',
+ 'SP1',
+ 'SPRY2',
+ 'SRC',
+ 'STAM',
+ 'STAM2',
+ 'STAMBP',
+ 'STAT1',
+ 'STAT3',
+ 'STAT5A',
+ 'STAT5B',
+ 'STMN1',
+ 'STXBP1',
+ 'SYNJ1',
+ 'TNK2',
+ 'TWIST1',
+ 'USP6NL',
+ 'USP8',
+ 'VAV1',
+ 'VAV2',
+ 'VAV3']
+
+
+

Let’s select a random number of those genes and proceed with building the network with NeKo!

+
+
[25]:
+
+
+
+
seeds_number = 20
+random_seeds = random.sample(egf_egfr_genes, seeds_number)
+
+
+
+
+
+
[26]:
+
+
+
+
random_seeds
+
+
+
+
+
+
[26]:
+
+
+
+
+['ITCH',
+ 'VAV3',
+ 'PXDN',
+ 'PRKCB',
+ 'NCOA3',
+ 'ARHGEF1',
+ 'PTEN',
+ 'USP6NL',
+ 'PTPN12',
+ 'PCNA',
+ 'CBLB',
+ 'PLSCR1',
+ 'PRKCA',
+ 'JUND',
+ 'CREB1',
+ 'CBLC',
+ 'SYNJ1',
+ 'GJA1',
+ 'KRAS',
+ 'NCK1']
+
+
+
+

TIP

+

NeKo provides some built-in functions to easily plug some well-known databases, like Omnipath, Signor, PhosphositePlus and Huri. More information can be found in the Notebook #2

+
+
+
[29]:
+
+
+
+
neko_net3 = Network(random_seeds, resources = 'omnipath')
+
+
+
+
+
+
[30]:
+
+
+
+
neko_net4 = Network(random_seeds, resources = 'omnipath')
+
+
+
+
+

Once again, now that we have created the NeKo network, let’s use the RPE and INE algorithm to retrieve (hopefully) the full EGF/EGFR pathway.

+

To Notice!

+

Since the AllOmnipath database is very big and we have a higher number of seed nodes, the computational time / cost will be higher too! In some cases, expect both complete_connection and connect_network_radially to take minutes!

+
+
[31]:
+
+
+
+
%%time
+neko_net3.complete_connection(maxlen=3, algorithm="dfs", only_signed=True, connect_with_bias=False, consensus=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 51.6 s, sys: 8.36 ms, total: 51.6 s
+Wall time: 51.6 s
+
+
+
+
[32]:
+
+
+
+
%%time
+neko_net4.connect_network_radially(max_len=1, only_signed=True, consensus=False)
+
+
+
+
+
+
+
+
+
+CPU times: user 51.9 s, sys: 3.78 ms, total: 51.9 s
+Wall time: 51.9 s
+
+
+
+
[37]:
+
+
+
+
#This time the network are very big and it can be difficult to visualize them
+#visualizer3 = NetworkVisualizer(neko_net3, color_by='effect', noi=True)
+#visualizer3.render("./img/Complete_connection_neko_net_sample_EGF", view=True)
+
+
+
+
+
+
[38]:
+
+
+
+
#Visualize network
+#visualizer4 = NetworkVisualizer(neko_net4, color_by='effect', noi=True)
+#visualizer4.render("./img/Radial_neko_net_sample_EGF", view=True)
+
+
+
+
+

As we did previously, let’s compare network’s size and check if we found nodes beloning to the EGF/EGFR pathway from wikipathway

+
+
[33]:
+
+
+
+
net3_nodes_size = len(neko_net3.nodes)
+net4_nodes_size = len(neko_net4.nodes)
+
+print("Number of nodes of the third NeKo network: ", net3_nodes_size)
+print("Number of nodes of the fourth NeKo network: ", net4_nodes_size)
+
+
+
+
+
+
+
+
+
+Number of nodes of the third NeKo network:  123
+Number of nodes of the fourth NeKo network:  156
+
+
+
+
[34]:
+
+
+
+
net3_edges_size = len(neko_net3.edges)
+net4_edges_size = len(neko_net4.edges)
+
+print("Number of edges of the third NeKo network: ", net3_edges_size)
+print("Number of edges of the fourth NeKo network: ", net4_edges_size)
+
+
+
+
+
+
+
+
+
+Number of edges of the third NeKo network:  1417
+Number of edges of the fourth NeKo network:  481
+
+
+
+
[35]:
+
+
+
+
nodes_found = []
+for node in egf_egfr_genes:
+    if node in list(neko_net3.nodes["Genesymbol"]):
+        nodes_found.append(node)
+
+print("Initial nodes: ", random_seeds)
+print("Nodes in the EGF/EGFR pathways: ", egf_egfr_genes)
+print("Nodes founded: ", nodes_found)
+
+
+
+
+
+
+
+
+
+Initial nodes:  ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']
+Nodes in the EGF/EGFR pathways:  ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']
+Nodes founded:  ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'CSK', 'EGFR', 'GJA1', 'HRAS', 'ITCH', 'JAK2', 'JUND', 'KRAS', 'MAP3K1', 'MAPK1', 'MAPK14', 'MAPK7', 'MAPK8', 'NCK1', 'NCOA3', 'PCNA', 'PIK3R1', 'PLCG1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'ROCK1', 'SHC1', 'SRC', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']
+
+
+
+
[36]:
+
+
+
+
print("Percentage of genes covered: ", (len(nodes_found)/len(egf_egfr_genes)) * 100)
+
+
+
+
+
+
+
+
+
+Percentage of genes covered:  27.160493827160494
+
+
+
+
[37]:
+
+
+
+
nodes_found = []
+for node in egf_egfr_genes:
+    if node in list(neko_net4.nodes["Genesymbol"]):
+        nodes_found.append(node)
+
+print("Initial nodes: ", random_seeds)
+print("Nodes in the EGF/EGFR pathways: ", egf_egfr_genes)
+print("Nodes founded: ", nodes_found)
+
+
+
+
+
+
+
+
+
+Initial nodes:  ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']
+Nodes in the EGF/EGFR pathways:  ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']
+Nodes founded:  ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CAMK2A', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'E2F1', 'EGF', 'EGFR', 'ERBB2', 'FOS', 'GAB2', 'GJA1', 'GRB2', 'ITCH', 'JAK1', 'JAK2', 'JUND', 'KRAS', 'MAP2K1', 'MAP3K1', 'MAPK1', 'MAPK7', 'MAPK8', 'MTOR', 'NCK1', 'NCOA3', 'PAK1', 'PCNA', 'PDPK1', 'PIK3R1', 'PLCG1', 'PLD1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'RIN1', 'ROCK1', 'SHC1', 'SOS1', 'SRC', 'STAT3', 'STAT5A', 'STAT5B', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']
+
+
+
+
[38]:
+
+
+
+
print("Percentage of genes covered: ", (len(nodes_found)/len(egf_egfr_genes)) * 100)
+
+
+
+
+
+
+
+
+
+Percentage of genes covered:  36.41975308641975
+
+
+

Once more, the INE captured better the pathway composition, recovering 40-50% of the genes in the EGF/EGFR pathway from wikipathways (by starting from 10%). This time, INE performed better than RPE. The reason for this resides within the database composition. The AllOmnipathInteraction database contains tons of interaction, which means, many possibilities to go from gene A to gene B in the shortest path possible (with max len = 3). On the other hand, INE runs with max_len = 1, so it just +collects all the possible neighbors of the nodes, without looking for extended extra pathways.

+

Please remember that the aim of the RPE algorithm is to reduce as much as possible the average network distance. On the other hand, the INE algorithm does not care about it.

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/notebooks/9-Recreating_famous_pathways.ipynb b/notebooks/9-Recreating_famous_pathways.ipynb new file mode 100644 index 0000000..b64a9b6 --- /dev/null +++ b/notebooks/9-Recreating_famous_pathways.ipynb @@ -0,0 +1,1009 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0dc40388-8f54-4433-aa81-9dc643697c76", + "metadata": {}, + "source": [ + "# Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a90067aa-8a9c-4ff1-8aac-4f9992094e7e", + "metadata": {}, + "outputs": [], + "source": [ + "from neko.core.network import Network\n", + "from neko._visual.visualize_network import NetworkVisualizer\n", + "from neko.inputs import Universe, signor\n", + "import omnipath as op" + ] + }, + { + "cell_type": "markdown", + "id": "19dc89d3-203b-479a-9d46-3b7846c720bb", + "metadata": {}, + "source": [ + "## 1) Retrieving the MTOR Signaling from Signor using NeKo " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0abd6eae-2970-4bdf-82b5-364731270d3e", + "metadata": {}, + "outputs": [], + "source": [ + "mtor_nodes = [\"RPS6KA1\", \"SREBF1\", \"MTOR\", \"RPTOR\", \"INSR\", \"RPS6KB1\", \"RHEB\", \"EIF4EBP1\", \"INS\", \"PTEN\",\n", + " \"RPS6\", \"TFEB\", \"PIK3R1\", \"PPARGC1A\", \"PDPK1\", \"AKT1S1\", \"PPARG\", \"PIK3CA\", \"EIF4E\", \"IRS1\", \"GSK3B\", \"ULK1\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2c74b109-7324-4b4f-9c8c-5ffb828fbc32", + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c91174d0-5b4a-4ebe-aee2-002a246b3416", + "metadata": {}, + "outputs": [], + "source": [ + "seeds_number = 4\n", + "random_seeds = random.sample(mtor_nodes, seeds_number)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fbb83c00-86c2-4319-b45c-8edbce14ad42", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_seeds" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "141b4700-e3da-478a-aa6b-19e7d85aa6f4", + "metadata": {}, + "outputs": [], + "source": [ + "resources = Universe()\n", + "resources = signor(\"../neko/_data/signor_db.tsv\") # this function accept only tab separated values\n", + "resources.build()" + ] + }, + { + "cell_type": "markdown", + "id": "d6049069-ed6f-40ae-bbc3-c65c59ee095e", + "metadata": {}, + "source": [ + "Let's compare the function commplete_connection (based on the Reciprocal Pathway Extender algorithm) with the function connect_radially (based on the Iterative Neighbor Expansion ). \n", + "We are going to create two neko_net, and apply to each of them one of the two functions. \n", + "Finally, we are going to compare the resulting networks." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a7799cae-73d3-48dc-aa73-5cfbc1c40de2", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net1 = Network(random_seeds, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "837ddb95-e22e-44ad-9ac1-6488d7a8b348", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net2 = Network(random_seeds, resources = resources.interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "47575e89-4da0-4a9e-acfa-9d15a98abd90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 754 ms, sys: 7 ms, total: 761 ms\n", + "Wall time: 759 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net1.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=False, consensus=False)" + ] + }, + { + "cell_type": "markdown", + "id": "ae162d78-1df1-47a3-b3ce-d442324274e9", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**Note**\n", + " \n", + "The **max_len** in the function *connect_network_radially* should be kept at 1, max 2. Why? \n", + "\n", + "The Iterative Neighbour Expansion, as the name suggests, iterates through all the seed nodes and adds to the network all the interactions found. In the next step, it iterates through all the neighbors found and looks for their neighbors. Doing so, the Network size could exponentially increase, if among the neighbor nodes there are some HUB (nodes with a high degree of connection).\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5b115402-1a40-4677-9f44-bbcd5ae4bb3f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 16.9 s, sys: 2.63 ms, total: 16.9 s\n", + "Wall time: 16.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net2.connect_network_radially(max_len=2, only_signed=True, consensus=False)" + ] + }, + { + "cell_type": "markdown", + "id": "2a80e34b-cb9c-4caf-962f-4738da608fb6", + "metadata": {}, + "source": [ + "Now let's visualize the network:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "0cf992d7-91d6-4e9d-aa58-ec35be8a9fc3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "(evince:39773): Gdk-WARNING **: 10:33:59.165: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)\n" + ] + } + ], + "source": [ + "#Visualize network\n", + "visualizer1 = NetworkVisualizer(neko_net1, color_by='effect', noi=True)\n", + "visualizer1.render(\"./img/Complete_connection_neko_net_sample\", view=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7d120405-e5f5-4d4a-9a80-c83877a47735", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "(evince:39829): Gdk-WARNING **: 10:34:09.325: ../../../gdk/wayland/gdkcursor-wayland.c:242 cursor image size (64x64) not an integermultiple of scale (3)\n" + ] + } + ], + "source": [ + "#Visualize network\n", + "visualizer2 = NetworkVisualizer(neko_net2, color_by='effect', noi=True)\n", + "visualizer2.render(\"./img/Radial_neko_net_sample\", view=True)" + ] + }, + { + "cell_type": "markdown", + "id": "e2024355-1443-40f6-b529-8c94f80d040e", + "metadata": {}, + "source": [ + "Let's compare the Networks. We will use JUST those nodes in signor that are not complexes or protein families (so we excluded all those nodes that starts with \"SIGNOR_\").\n", + "At the following link you can find the full MTOR pathway from SIGNOR: https://signor.uniroma2.it/pathway_browser.php?beta=3.0&organism=&pathway_list=SIGNOR-MS&x=13&y=13" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9184fb6a-6a5b-4cac-ba3c-677fb646b844", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of nodes of the first NeKo network: 10\n", + "Number of nodes of the second NeKo network: 174\n" + ] + } + ], + "source": [ + "net1_nodes_size = len(neko_net1.nodes)\n", + "net2_nodes_size = len(neko_net2.nodes)\n", + "\n", + "print(\"Number of nodes of the first NeKo network: \", net1_nodes_size)\n", + "print(\"Number of nodes of the second NeKo network: \", net2_nodes_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c81afa3d-fd2c-43db-acfd-bcb457864fdd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of edges of the first NeKo network: 23\n", + "Number of edges of the second NeKo network: 639\n" + ] + } + ], + "source": [ + "net1_edges_size = len(neko_net1.edges)\n", + "net2_edges_size = len(neko_net2.edges)\n", + "\n", + "print(\"Number of edges of the first NeKo network: \", net1_edges_size)\n", + "print(\"Number of edges of the second NeKo network: \", net2_edges_size)" + ] + }, + { + "cell_type": "markdown", + "id": "8562a1af-20b7-492b-add2-f56f3da93b80", + "metadata": {}, + "source": [ + "The first consideration to do is that the RPE algorithm, is way faster than the INE one (529 ms vs 9.73 s). Despite being slower, the INE algorithm, provided a much bigger network (15 nodes vs 44, 84 edges vs 259)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "6827eeef-2f4a-4e15-8cd8-f9e00d0aef87", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']\n", + "Nodes in the MTOR pathways: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']\n", + "Nodes founded: ['MTOR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'AKT1S1', 'PPARG']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in mtor_nodes:\n", + " if node in list(neko_net1.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the MTOR pathways: \", mtor_nodes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "1c7de0cd-7056-4a95-a762-459116cd26e9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 27.27272727272727\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(mtor_nodes)) * 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8e5ed381-2eac-4dde-b664-9b8e7a7ad6c4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['AKT1S1', 'RPS6KB1', 'PTEN', 'PPARGC1A']\n", + "Nodes in the MTOR pathways: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'RHEB', 'EIF4EBP1', 'INS', 'PTEN', 'RPS6', 'TFEB', 'PIK3R1', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'EIF4E', 'IRS1', 'GSK3B', 'ULK1']\n", + "Nodes founded: ['RPS6KA1', 'SREBF1', 'MTOR', 'RPTOR', 'INSR', 'RPS6KB1', 'PTEN', 'PPARGC1A', 'PDPK1', 'AKT1S1', 'PPARG', 'PIK3CA', 'IRS1', 'GSK3B', 'ULK1']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in mtor_nodes:\n", + " if node in list(neko_net2.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the MTOR pathways: \", mtor_nodes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3ce92129-f927-4172-95eb-f71c84188c8f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 68.18181818181817\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(mtor_nodes)) * 100)" + ] + }, + { + "cell_type": "markdown", + "id": "98534d1b-0922-491d-8c26-2f8439c5dae7", + "metadata": {}, + "source": [ + "As expected, due to the network size, the INE algorithm managed to capture more genes belonging to the MTOR pathway compared to the RPE algorithm. This was expected also because the RPE algorithm aims at finding the minimal set of genes that can connect all the seed nodes given by the user, while the INE algorithm does not take into account the shortest paths, but homogeneously explores the surroundings." + ] + }, + { + "cell_type": "markdown", + "id": "c9834d56-3487-484e-8f9b-24f0601b5af0", + "metadata": {}, + "source": [ + "## 2) Retrieving the EGF/EGFR pathway (source: wikipathway) using Omnipath" + ] + }, + { + "cell_type": "markdown", + "id": "0cbdb936-fd71-419a-906a-6a5d7ffcd905", + "metadata": {}, + "source": [ + "The MTOR pathways we saw in use case 2 is a reletavely small pathway. We decided to test the INE and RPE algorithm to retrieve a bigger one, the EGF/EGFR pathway as shown in wikipathway, fetching interactions from Omnipath." + ] + }, + { + "cell_type": "markdown", + "id": "4bfbaca8-e8b2-48ea-8972-474961f19fba", + "metadata": {}, + "source": [ + "In order to do so, we can proceed with the installation of the python package pywikipathways to quickly retrieve the genes belonging to the EGF/EGFR pathway (WP437, https://www.wikipathways.org/pathways/WP437.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d70ec715-e387-475e-8816-1a6c8efa855a", + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment the following line if you do not have installed pywikipathways\n", + "!pip install pywikipathways" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "8177656d-c194-4657-8dd1-4bcdf3afd084", + "metadata": {}, + "outputs": [], + "source": [ + "import pywikipathways as pwpw" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "bd661901-52f6-4d9b-949e-cfc539113f47", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 'WP437',\n", + " 'url': 'https://classic.wikipathways.org/index.php/Pathway:WP437',\n", + " 'name': 'EGF/EGFR signaling',\n", + " 'species': 'Homo sapiens',\n", + " 'revision': '129679'}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pwpw.get_pathway_info('WP437')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "81482dd7-9e2b-411e-a1d6-55eed867d220", + "metadata": {}, + "outputs": [], + "source": [ + "egf_egfr_genes = pwpw.get_xref_list('WP437','H')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "eeec14cd-cf03-4962-a477-6b456d95b279", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "162\n" + ] + }, + { + "data": { + "text/plain": [ + "['ABI1',\n", + " 'ABL1',\n", + " 'AKT1',\n", + " 'AP2A1',\n", + " 'AP2B1',\n", + " 'AP2M1',\n", + " 'AP2S1',\n", + " 'ARF6',\n", + " 'ARHGEF1',\n", + " 'ASAP1',\n", + " 'ATF1',\n", + " 'ATXN2',\n", + " 'AURKA',\n", + " 'BCAR1',\n", + " 'BRAF',\n", + " 'CAMK2A',\n", + " 'CAV1',\n", + " 'CAV2',\n", + " 'CBL',\n", + " 'CBLB',\n", + " 'CBLC',\n", + " 'CDC42',\n", + " 'CFL1',\n", + " 'CREB1',\n", + " 'CRK',\n", + " 'CRKL',\n", + " 'CSK',\n", + " 'DNM1',\n", + " 'DOK2',\n", + " 'E2F1',\n", + " 'EGF',\n", + " 'EGFR',\n", + " 'EIF4EBP1',\n", + " 'ELK1',\n", + " 'ELK4',\n", + " 'EPN1',\n", + " 'EPS15',\n", + " 'EPS15L1',\n", + " 'EPS8',\n", + " 'ERBB2',\n", + " 'ERRFI1',\n", + " 'FOS',\n", + " 'FOSB',\n", + " 'FOXO1',\n", + " 'FOXO4',\n", + " 'GAB1',\n", + " 'GAB2',\n", + " 'GJA1',\n", + " 'GRB10',\n", + " 'GRB2',\n", + " 'HGS',\n", + " 'HRAS',\n", + " 'INPP5D',\n", + " 'INPPL1',\n", + " 'IQGAP1',\n", + " 'IQSEC1',\n", + " 'ITCH',\n", + " 'JAK1',\n", + " 'JAK2',\n", + " 'JUN',\n", + " 'JUND',\n", + " 'KRAS',\n", + " 'LIMK2',\n", + " 'MAP2K1',\n", + " 'MAP2K2',\n", + " 'MAP2K5',\n", + " 'MAP3K1',\n", + " 'MAP3K2',\n", + " 'MAP3K3',\n", + " 'MAP3K4',\n", + " 'MAP4K1',\n", + " 'MAPK1',\n", + " 'MAPK14',\n", + " 'MAPK4',\n", + " 'MAPK7',\n", + " 'MAPK8',\n", + " 'MAPK9',\n", + " 'MEF2A',\n", + " 'MEF2C',\n", + " 'MEF2D',\n", + " 'MT-CO2',\n", + " 'MTOR',\n", + " 'MYBL2',\n", + " 'NCK1',\n", + " 'NCK2',\n", + " 'NCOA3',\n", + " 'NDUFA13',\n", + " 'NEDD4',\n", + " 'NEDD8',\n", + " 'NOS3',\n", + " 'PAK1',\n", + " 'PCNA',\n", + " 'PDPK1',\n", + " 'PEBP1',\n", + " 'PIAS3',\n", + " 'PIK3C2B',\n", + " 'PIK3R1',\n", + " 'PIK3R2',\n", + " 'PLCE1',\n", + " 'PLCG1',\n", + " 'PLD1',\n", + " 'PLD2',\n", + " 'PLSCR1',\n", + " 'PRKCA',\n", + " 'PRKCB',\n", + " 'PRKCD',\n", + " 'PRKCI',\n", + " 'PRKCZ',\n", + " 'PTEN',\n", + " 'PTK2',\n", + " 'PTK2B',\n", + " 'PTK6',\n", + " 'PTPN11',\n", + " 'PTPN12',\n", + " 'PTPN5',\n", + " 'PTPRR',\n", + " 'PXDN',\n", + " 'RAB5A',\n", + " 'RAC1',\n", + " 'RAF1',\n", + " 'RALA',\n", + " 'RALB',\n", + " 'RALBP1',\n", + " 'RALGDS',\n", + " 'RAP1A',\n", + " 'RASA1',\n", + " 'REPS2',\n", + " 'RICTOR',\n", + " 'RIN1',\n", + " 'ROCK1',\n", + " 'RPS6KA1',\n", + " 'RPS6KA2',\n", + " 'RPS6KA3',\n", + " 'RPS6KA5',\n", + " 'RPS6KB1',\n", + " 'SH2D2A',\n", + " 'SH3GL2',\n", + " 'SH3GL3',\n", + " 'SH3KBP1',\n", + " 'SHC1',\n", + " 'SOS1',\n", + " 'SOS2',\n", + " 'SP1',\n", + " 'SPRY2',\n", + " 'SRC',\n", + " 'STAM',\n", + " 'STAM2',\n", + " 'STAMBP',\n", + " 'STAT1',\n", + " 'STAT3',\n", + " 'STAT5A',\n", + " 'STAT5B',\n", + " 'STMN1',\n", + " 'STXBP1',\n", + " 'SYNJ1',\n", + " 'TNK2',\n", + " 'TWIST1',\n", + " 'USP6NL',\n", + " 'USP8',\n", + " 'VAV1',\n", + " 'VAV2',\n", + " 'VAV3']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(len(egf_egfr_genes))\n", + "egf_egfr_genes" + ] + }, + { + "cell_type": "markdown", + "id": "c14a30bf-0d45-4aad-b2e5-cec37217040c", + "metadata": {}, + "source": [ + "Let's select a random number of those genes and proceed with building the network with NeKo!" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0ff8c031-2066-4809-adc4-e9fb6684c021", + "metadata": {}, + "outputs": [], + "source": [ + "seeds_number = 20\n", + "random_seeds = random.sample(egf_egfr_genes, seeds_number)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ca9cb2f7-39b4-481b-8091-64fef5eba285", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ITCH',\n", + " 'VAV3',\n", + " 'PXDN',\n", + " 'PRKCB',\n", + " 'NCOA3',\n", + " 'ARHGEF1',\n", + " 'PTEN',\n", + " 'USP6NL',\n", + " 'PTPN12',\n", + " 'PCNA',\n", + " 'CBLB',\n", + " 'PLSCR1',\n", + " 'PRKCA',\n", + " 'JUND',\n", + " 'CREB1',\n", + " 'CBLC',\n", + " 'SYNJ1',\n", + " 'GJA1',\n", + " 'KRAS',\n", + " 'NCK1']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_seeds" + ] + }, + { + "cell_type": "markdown", + "id": "e3dccd95-6ee4-42a3-8eb9-dd96141e108a", + "metadata": {}, + "source": [ + "### \n", + "
\n", + "\n", + "**TIP**\n", + " \n", + "NeKo provides some built-in functions to easily plug some well-known databases, like **Omnipath**, **Signor**, **PhosphositePlus** and **Huri**. More information can be found in the Notebook #2\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "6302b5bf-0a2e-4e2c-9a88-ba3b505af6fc", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net3 = Network(random_seeds, resources = 'omnipath')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "89a3ad40-ef1e-467f-98dd-e9704fef09e1", + "metadata": {}, + "outputs": [], + "source": [ + "neko_net4 = Network(random_seeds, resources = 'omnipath')" + ] + }, + { + "cell_type": "markdown", + "id": "14468b0d-9972-4e6e-8e8d-e8d9fe2d8f33", + "metadata": {}, + "source": [ + "Once again, now that we have created the NeKo network, let's use the RPE and INE algorithm to retrieve (hopefully) the full EGF/EGFR pathway. \n", + "\n", + "**To Notice!**\n", + "\n", + "Since the AllOmnipath database is very big and we have a higher number of seed nodes, the computational time / cost will be higher too! In some cases, expect both complete_connection and connect_network_radially to take minutes!" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "8c51e03a-2878-4783-ac4e-50328b8240d1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 51.6 s, sys: 8.36 ms, total: 51.6 s\n", + "Wall time: 51.6 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net3.complete_connection(maxlen=3, algorithm=\"dfs\", only_signed=True, connect_with_bias=False, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7291cdef-74dc-4d88-b588-b65404bb60a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 51.9 s, sys: 3.78 ms, total: 51.9 s\n", + "Wall time: 51.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "neko_net4.connect_network_radially(max_len=1, only_signed=True, consensus=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "3793c48c-1c85-47d6-bd23-548094ee8b90", + "metadata": {}, + "outputs": [], + "source": [ + "#This time the network are very big and it can be difficult to visualize them\n", + "#visualizer3 = NetworkVisualizer(neko_net3, color_by='effect', noi=True)\n", + "#visualizer3.render(\"./img/Complete_connection_neko_net_sample_EGF\", view=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "3b491a47-4d3c-4302-a44a-88fac4d2671f", + "metadata": {}, + "outputs": [], + "source": [ + "#Visualize network\n", + "#visualizer4 = NetworkVisualizer(neko_net4, color_by='effect', noi=True)\n", + "#visualizer4.render(\"./img/Radial_neko_net_sample_EGF\", view=True)" + ] + }, + { + "cell_type": "markdown", + "id": "3dfda316-09fb-48ee-a509-451fbdecdd4f", + "metadata": {}, + "source": [ + "As we did previously, let's compare network's size and check if we found nodes beloning to the EGF/EGFR pathway from wikipathway" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9edbd689-fa46-4a2c-b18e-b0321b42c9d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of nodes of the third NeKo network: 123\n", + "Number of nodes of the fourth NeKo network: 156\n" + ] + } + ], + "source": [ + "net3_nodes_size = len(neko_net3.nodes)\n", + "net4_nodes_size = len(neko_net4.nodes)\n", + "\n", + "print(\"Number of nodes of the third NeKo network: \", net3_nodes_size)\n", + "print(\"Number of nodes of the fourth NeKo network: \", net4_nodes_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "bbca2027-2e28-441c-b258-0b68587b54fd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of edges of the third NeKo network: 1417\n", + "Number of edges of the fourth NeKo network: 481\n" + ] + } + ], + "source": [ + "net3_edges_size = len(neko_net3.edges)\n", + "net4_edges_size = len(neko_net4.edges)\n", + "\n", + "print(\"Number of edges of the third NeKo network: \", net3_edges_size)\n", + "print(\"Number of edges of the fourth NeKo network: \", net4_edges_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "d4becd12-06c9-48ed-bd85-fa6f7fe7dd60", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']\n", + "Nodes in the EGF/EGFR pathways: ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']\n", + "Nodes founded: ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'CSK', 'EGFR', 'GJA1', 'HRAS', 'ITCH', 'JAK2', 'JUND', 'KRAS', 'MAP3K1', 'MAPK1', 'MAPK14', 'MAPK7', 'MAPK8', 'NCK1', 'NCOA3', 'PCNA', 'PIK3R1', 'PLCG1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'ROCK1', 'SHC1', 'SRC', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in egf_egfr_genes:\n", + " if node in list(neko_net3.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the EGF/EGFR pathways: \", egf_egfr_genes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "d2abe68e-8f47-4869-badb-a630c91c220d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 27.160493827160494\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(egf_egfr_genes)) * 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "1dd14079-baf4-4431-996d-895c2cc677cc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial nodes: ['ITCH', 'VAV3', 'PXDN', 'PRKCB', 'NCOA3', 'ARHGEF1', 'PTEN', 'USP6NL', 'PTPN12', 'PCNA', 'CBLB', 'PLSCR1', 'PRKCA', 'JUND', 'CREB1', 'CBLC', 'SYNJ1', 'GJA1', 'KRAS', 'NCK1']\n", + "Nodes in the EGF/EGFR pathways: ['ABI1', 'ABL1', 'AKT1', 'AP2A1', 'AP2B1', 'AP2M1', 'AP2S1', 'ARF6', 'ARHGEF1', 'ASAP1', 'ATF1', 'ATXN2', 'AURKA', 'BCAR1', 'BRAF', 'CAMK2A', 'CAV1', 'CAV2', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CFL1', 'CREB1', 'CRK', 'CRKL', 'CSK', 'DNM1', 'DOK2', 'E2F1', 'EGF', 'EGFR', 'EIF4EBP1', 'ELK1', 'ELK4', 'EPN1', 'EPS15', 'EPS15L1', 'EPS8', 'ERBB2', 'ERRFI1', 'FOS', 'FOSB', 'FOXO1', 'FOXO4', 'GAB1', 'GAB2', 'GJA1', 'GRB10', 'GRB2', 'HGS', 'HRAS', 'INPP5D', 'INPPL1', 'IQGAP1', 'IQSEC1', 'ITCH', 'JAK1', 'JAK2', 'JUN', 'JUND', 'KRAS', 'LIMK2', 'MAP2K1', 'MAP2K2', 'MAP2K5', 'MAP3K1', 'MAP3K2', 'MAP3K3', 'MAP3K4', 'MAP4K1', 'MAPK1', 'MAPK14', 'MAPK4', 'MAPK7', 'MAPK8', 'MAPK9', 'MEF2A', 'MEF2C', 'MEF2D', 'MT-CO2', 'MTOR', 'MYBL2', 'NCK1', 'NCK2', 'NCOA3', 'NDUFA13', 'NEDD4', 'NEDD8', 'NOS3', 'PAK1', 'PCNA', 'PDPK1', 'PEBP1', 'PIAS3', 'PIK3C2B', 'PIK3R1', 'PIK3R2', 'PLCE1', 'PLCG1', 'PLD1', 'PLD2', 'PLSCR1', 'PRKCA', 'PRKCB', 'PRKCD', 'PRKCI', 'PRKCZ', 'PTEN', 'PTK2', 'PTK2B', 'PTK6', 'PTPN11', 'PTPN12', 'PTPN5', 'PTPRR', 'PXDN', 'RAB5A', 'RAC1', 'RAF1', 'RALA', 'RALB', 'RALBP1', 'RALGDS', 'RAP1A', 'RASA1', 'REPS2', 'RICTOR', 'RIN1', 'ROCK1', 'RPS6KA1', 'RPS6KA2', 'RPS6KA3', 'RPS6KA5', 'RPS6KB1', 'SH2D2A', 'SH3GL2', 'SH3GL3', 'SH3KBP1', 'SHC1', 'SOS1', 'SOS2', 'SP1', 'SPRY2', 'SRC', 'STAM', 'STAM2', 'STAMBP', 'STAT1', 'STAT3', 'STAT5A', 'STAT5B', 'STMN1', 'STXBP1', 'SYNJ1', 'TNK2', 'TWIST1', 'USP6NL', 'USP8', 'VAV1', 'VAV2', 'VAV3']\n", + "Nodes founded: ['ABL1', 'AKT1', 'ARHGEF1', 'BCAR1', 'CAMK2A', 'CBL', 'CBLB', 'CBLC', 'CDC42', 'CREB1', 'E2F1', 'EGF', 'EGFR', 'ERBB2', 'FOS', 'GAB2', 'GJA1', 'GRB2', 'ITCH', 'JAK1', 'JAK2', 'JUND', 'KRAS', 'MAP2K1', 'MAP3K1', 'MAPK1', 'MAPK7', 'MAPK8', 'MTOR', 'NCK1', 'NCOA3', 'PAK1', 'PCNA', 'PDPK1', 'PIK3R1', 'PLCG1', 'PLD1', 'PLSCR1', 'PRKCA', 'PRKCB', 'PTEN', 'PTK2', 'PTK2B', 'PTPN11', 'PTPN12', 'PXDN', 'RAC1', 'RIN1', 'ROCK1', 'SHC1', 'SOS1', 'SRC', 'STAT3', 'STAT5A', 'STAT5B', 'SYNJ1', 'USP6NL', 'VAV1', 'VAV3']\n" + ] + } + ], + "source": [ + "nodes_found = []\n", + "for node in egf_egfr_genes:\n", + " if node in list(neko_net4.nodes[\"Genesymbol\"]):\n", + " nodes_found.append(node)\n", + "\n", + "print(\"Initial nodes: \", random_seeds)\n", + "print(\"Nodes in the EGF/EGFR pathways: \", egf_egfr_genes)\n", + "print(\"Nodes founded: \", nodes_found)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "c199f367-d0c4-4c91-8359-a6c03dc54ac7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage of genes covered: 36.41975308641975\n" + ] + } + ], + "source": [ + "print(\"Percentage of genes covered: \", (len(nodes_found)/len(egf_egfr_genes)) * 100)" + ] + }, + { + "cell_type": "markdown", + "id": "f0cc73cc-35fe-423d-bdf8-caf91432feb9", + "metadata": {}, + "source": [ + "Once more, the INE captured better the pathway composition, recovering 40-50% of the genes in the EGF/EGFR pathway from wikipathways (by starting from 10%). This time, INE performed better than RPE. The reason for this resides within the database composition. The AllOmnipathInteraction database contains tons of interaction, which means, many possibilities to go from gene A to gene B in the shortest path possible (with max len = 3). On the other hand, INE runs with max_len = 1, so it just collects all the possible neighbors of the nodes, without looking for extended extra pathways. \n", + "\n", + "Please remember that the aim of the RPE algorithm is to reduce as much as possible the average network distance. On the other hand, the INE algorithm does not care about it." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000..8d4dbba Binary files /dev/null and b/objects.inv differ diff --git a/search.html b/search.html new file mode 100644 index 0000000..285df4e --- /dev/null +++ b/search.html @@ -0,0 +1,137 @@ + + + + + + Search — neko documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2022-2024, Sysbio-Curie.

+
+ + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..b34a543 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"1) Retrieving the MTOR Signaling from Signor using NeKo": [[26, "1)-Retrieving-the-MTOR-Signaling-from-Signor-using-NeKo"]], "1. Adding a resource already in OmniPath": [[19, "1.-Adding-a-resource-already-in-OmniPath"]], "1. Build network": [[23, "1.-Build-network"]], "1. Define the list of genes of interest": [[18, "1.-Define-the-list-of-genes-of-interest"], [20, "1.-Define-the-list-of-genes-of-interest"], [25, "1.-Define-the-list-of-genes-of-interest"]], "1. Import CollecTRI interactions from Omnipath": [[21, "1.-Import-CollecTRI-interactions-from-Omnipath"]], "1. Import genes as network nodes": [[24, "1.-Import-genes-as-network-nodes"]], "1. Specify kinase-substrate interaction file and phosphosite effect annotation": [[22, "1.-Specify-kinase-substrate-interaction-file-and-phosphosite-effect-annotation"]], "1A. Specify the interaction resource of interest": [[19, "1A.-Specify-the-interaction-resource-of-interest"]], "1B. Add new resource to the Resources object": [[19, "1B.-Add-new-resource-to-the-Resources-object"]], "2) Retrieving the EGF/EGFR pathway (source: wikipathway) using Omnipath": [[26, "2)-Retrieving-the-EGF/EGFR-pathway-(source:-wikipathway)-using-Omnipath"]], "2. Add interactions as a resource database": [[22, "2.-Add-interactions-as-a-resource-database"]], "2. Adding a public database": [[19, "2.-Adding-a-public-database"]], "2. Check if the genes are annotated in the tissue of interest (e.g., in colorectal cancer)": [[24, "2.-Check-if-the-genes-are-annotated-in-the-tissue-of-interest-(e.g.,-in-colorectal-cancer)"]], "2. Connect to Gene Ontology (GO) term": [[23, "2.-Connect-to-Gene-Ontology-(GO)-term"]], "2. Create a network using as input the gene set.": [[18, "2.-Create-a-network-using-as-input-the-gene-set."]], "2. Create networks.": [[25, "2.-Create-networks."]], "2. Define the nodes of interest and create network object with CollecTRI interactions": [[21, "2.-Define-the-nodes-of-interest-and-create-network-object-with-CollecTRI-interactions"]], "2. Specify SIGNOR resource": [[20, "2.-Specify-SIGNOR-resource"]], "2A. Add Signor database": [[19, "2A.-Add-Signor-database"]], "2A. Build first network": [[25, "2A.-Build-first-network"]], "2A. Import genes as network nodes": [[18, "2A.-Import-genes-as-network-nodes"]], "2B. Build second network": [[25, "2B.-Build-second-network"]], "2B. Explore if the nodes are connected without introducing new intermidiate nodes": [[18, "2B.-Explore-if-the-nodes-are-connected-without-introducing-new-intermidiate-nodes"]], "2C. Visualize the network with the following command.": [[18, "2C.-Visualize-the-network-with-the-following-command."]], "2D. Connect disconnected nodes by importing intermediate nodes.": [[18, "2D.-Connect-disconnected-nodes-by-importing-intermediate-nodes."]], "3. Build the network": [[19, "3.-Build-the-network"]], "3. Color nodes based on their presence/absence in the tissue of interest": [[24, "3.-Color-nodes-based-on-their-presence/absence-in-the-tissue-of-interest"]], "3. Compare networks": [[25, "3.-Compare-networks"]], "3. Connect nodes to upstream regulators": [[21, "3.-Connect-nodes-to-upstream-regulators"]], "3. Create a network using as input the gene set.": [[20, "3.-Create-a-network-using-as-input-the-gene-set."]], "3. Define a set of phosphosites we are interested in": [[22, "3.-Define-a-set-of-phosphosites-we-are-interested-in"]], "3. Visualize final network": [[18, "3.-Visualize-final-network"]], "3A. Import genes as network nodes": [[19, "3A.-Import-genes-as-network-nodes"], [20, "3A.-Import-genes-as-network-nodes"]], "3B. Connect nodes": [[20, "3B.-Connect-nodes"]], "3B. Create network object by specifying the interaction resources": [[19, "3B.-Create-network-object-by-specifying-the-interaction-resources"]], "3C. Build network": [[19, "3C.-Build-network"]], "4. Build network": [[22, "4.-Build-network"]], "4. Translate IDs": [[19, "4.-Translate-IDs"]], "API Reference": [[15, null], [16, null]], "Acknowledgements": [[17, "acknowledgements"]], "Build network based on kinase-phosphosite interactions": [[22, null]], "Build network using user-defined resources": [[19, null]], "Connect to downstream Gene Ontology terms.": [[23, null]], "Connect to upstream components": [[21, null]], "Contents": [[16, null]], "Documentation": [[17, "documentation"]], "Features": [[17, "features"]], "Installation": [[17, "installation"]], "Jupyter Notebooks": [[17, "jupyter-notebooks"]], "Map tissue expression": [[24, null]], "Method Details": [[15, "method-details"]], "Neko": [[17, null]], "Neko: Network Konstructor": [[17, "neko-network-konstructor"]], "Network Class": [[15, "network-class"]], "Network comparison": [[25, null]], "NetworkVisualizer Class Methods": [[15, "networkvisualizer-class-methods"]], "Notebooks": [[16, null]], "Other Modules": [[15, "other-modules"]], "Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo": [[26, null]], "Stepwise connection: a focus on the INE algorithm": [[20, null]], "Usage": [[18, null]], "neko._visual.visualize_network.NetworkVisualizer.render": [[0, null]], "neko._visual.visualize_network.NetworkVisualizer.tissue_mapping": [[1, null]], "neko._visual.visualize_network.NetworkVisualizer.vis_comparison": [[2, null]], "neko._visual.visualize_network.NetworkVisualizer.yfiles_visual": [[3, null]], "neko.core.network.Network.add_edge": [[4, null]], "neko.core.network.Network.add_node": [[5, null]], "neko.core.network.Network.complete_connection": [[6, null]], "neko.core.network.Network.connect_component": [[7, null]], "neko.core.network.Network.connect_genes_to_phenotype": [[8, null]], "neko.core.network.Network.connect_nodes": [[9, null]], "neko.core.network.Network.connect_subgroup": [[10, null]], "neko.core.network.Network.connect_to_upstream_nodes": [[11, null]], "neko.core.network.Network.convert_edgelist_into_genesymbol": [[12, null]], "neko.core.network.Network.is_connected": [[13, null]], "neko.core.network.Network.remove_node": [[14, null]], "version 0.9.1": [[17, "version-0-9-1"]]}, "docnames": ["_autosummary/neko._visual.visualize_network.NetworkVisualizer.render", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual", "_autosummary/neko.core.network.Network.add_edge", "_autosummary/neko.core.network.Network.add_node", "_autosummary/neko.core.network.Network.complete_connection", "_autosummary/neko.core.network.Network.connect_component", "_autosummary/neko.core.network.Network.connect_genes_to_phenotype", "_autosummary/neko.core.network.Network.connect_nodes", "_autosummary/neko.core.network.Network.connect_subgroup", "_autosummary/neko.core.network.Network.connect_to_upstream_nodes", "_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol", "_autosummary/neko.core.network.Network.is_connected", "_autosummary/neko.core.network.Network.remove_node", "api", "contents", "index", "notebooks/1_network_building", "notebooks/2_add_resources", "notebooks/3_stepwise_connection", "notebooks/4_Connect_upstream", "notebooks/5_build_phosphosite_network", "notebooks/6_ontology", "notebooks/7_tissue_mapping", "notebooks/8_Compare_networks", "notebooks/9-Recreating_famous_pathways"], "envversion": {"nbsphinx": 4, "sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1}, "filenames": ["_autosummary/neko._visual.visualize_network.NetworkVisualizer.render.rst", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.tissue_mapping.rst", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.vis_comparison.rst", "_autosummary/neko._visual.visualize_network.NetworkVisualizer.yfiles_visual.rst", "_autosummary/neko.core.network.Network.add_edge.rst", "_autosummary/neko.core.network.Network.add_node.rst", "_autosummary/neko.core.network.Network.complete_connection.rst", "_autosummary/neko.core.network.Network.connect_component.rst", "_autosummary/neko.core.network.Network.connect_genes_to_phenotype.rst", "_autosummary/neko.core.network.Network.connect_nodes.rst", "_autosummary/neko.core.network.Network.connect_subgroup.rst", "_autosummary/neko.core.network.Network.connect_to_upstream_nodes.rst", "_autosummary/neko.core.network.Network.convert_edgelist_into_genesymbol.rst", "_autosummary/neko.core.network.Network.is_connected.rst", "_autosummary/neko.core.network.Network.remove_node.rst", "api.rst", "contents.rst", "index.rst", "notebooks/1_network_building.ipynb", "notebooks/2_add_resources.ipynb", "notebooks/3_stepwise_connection.ipynb", "notebooks/4_Connect_upstream.ipynb", "notebooks/5_build_phosphosite_network.ipynb", "notebooks/6_ontology.ipynb", "notebooks/7_tissue_mapping.ipynb", "notebooks/8_Compare_networks.ipynb", "notebooks/9-Recreating_famous_pathways.ipynb"], "indexentries": {"add_edge() (neko.core.network.network method)": [[4, "neko.core.network.Network.add_edge", false], [15, "neko.core.network.Network.add_edge", false]], "add_node() (neko.core.network.network method)": [[5, "neko.core.network.Network.add_node", false], [15, "neko.core.network.Network.add_node", false]], "bfs_algorithm() (neko.core.network.network method)": [[15, "neko.core.network.Network.bfs_algorithm", false]], "check_node() (neko.core.network.network method)": [[15, "neko.core.network.Network.check_node", false]], "check_nodes() (neko.core.network.network method)": [[15, "neko.core.network.Network.check_nodes", false]], "complete_connection() (neko.core.network.network method)": [[6, "neko.core.network.Network.complete_connection", false], [15, "neko.core.network.Network.complete_connection", false]], "connect_as_atopo() (neko.core.network.network method)": [[15, "neko.core.network.Network.connect_as_atopo", false]], "connect_component() (neko.core.network.network method)": [[7, "neko.core.network.Network.connect_component", false], [15, "neko.core.network.Network.connect_component", false]], "connect_genes_to_phenotype() (neko.core.network.network method)": [[8, "neko.core.network.Network.connect_genes_to_phenotype", false], [15, "neko.core.network.Network.connect_genes_to_phenotype", false]], "connect_network_radially() (neko.core.network.network method)": [[15, "neko.core.network.Network.connect_network_radially", false]], "connect_nodes() (neko.core.network.network method)": [[9, "neko.core.network.Network.connect_nodes", false], [15, "neko.core.network.Network.connect_nodes", false]], "connect_subgroup() (neko.core.network.network method)": [[10, "neko.core.network.Network.connect_subgroup", false], [15, "neko.core.network.Network.connect_subgroup", false]], "connect_to_upstream_nodes() (neko.core.network.network method)": [[11, "neko.core.network.Network.connect_to_upstream_nodes", false], [15, "neko.core.network.Network.connect_to_upstream_nodes", false]], "convert_edgelist_into_genesymbol() (neko.core.network.network method)": [[12, "neko.core.network.Network.convert_edgelist_into_genesymbol", false], [15, "neko.core.network.Network.convert_edgelist_into_genesymbol", false]], "copy() (neko.core.network.network method)": [[15, "neko.core.network.Network.copy", false]], "dfs_algorithm() (neko.core.network.network method)": [[15, "neko.core.network.Network.dfs_algorithm", false]], "is_connected() (neko.core.network.network method)": [[13, "neko.core.network.Network.is_connected", false], [15, "neko.core.network.Network.is_connected", false]], "modify_node_name() (neko.core.network.network method)": [[15, "neko.core.network.Network.modify_node_name", false]], "network (class in neko.core.network)": [[15, "neko.core.network.Network", false]], "print_my_paths() (neko.core.network.network method)": [[15, "neko.core.network.Network.print_my_paths", false]], "remove_disconnected_nodes() (neko.core.network.network method)": [[15, "neko.core.network.Network.remove_disconnected_nodes", false]], "remove_edge() (neko.core.network.network method)": [[15, "neko.core.network.Network.remove_edge", false]], "remove_node() (neko.core.network.network method)": [[14, "neko.core.network.Network.remove_node", false], [15, "neko.core.network.Network.remove_node", false]], "remove_path() (neko.core.network.network method)": [[15, "neko.core.network.Network.remove_path", false]], "remove_undefined_interactions() (neko.core.network.network method)": [[15, "neko.core.network.Network.remove_undefined_interactions", false]], "render() (neko._visual.visualize_network.networkvisualizer method)": [[0, "neko._visual.visualize_network.NetworkVisualizer.render", false]], "tissue_mapping() (neko._visual.visualize_network.networkvisualizer method)": [[1, "neko._visual.visualize_network.NetworkVisualizer.tissue_mapping", false]], "vis_comparison() (neko._visual.visualize_network.networkvisualizer method)": [[2, "neko._visual.visualize_network.NetworkVisualizer.vis_comparison", false]], "yfiles_visual() (neko._visual.visualize_network.networkvisualizer method)": [[3, "neko._visual.visualize_network.NetworkVisualizer.yfiles_visual", false]]}, "objects": {"neko._visual.visualize_network.NetworkVisualizer": [[0, 0, 1, "", "render"], [1, 0, 1, "", "tissue_mapping"], [2, 0, 1, "", "vis_comparison"], [3, 0, 1, "", "yfiles_visual"]], "neko.core.network": [[15, 1, 1, "", "Network"]], "neko.core.network.Network": [[15, 0, 1, "", "add_edge"], [15, 0, 1, "", "add_node"], [15, 0, 1, "", "bfs_algorithm"], [15, 0, 1, "", "check_node"], [15, 0, 1, "", "check_nodes"], [15, 0, 1, "", "complete_connection"], [15, 0, 1, "", "connect_as_atopo"], [15, 0, 1, "", "connect_component"], [15, 0, 1, "", "connect_genes_to_phenotype"], [15, 0, 1, "", "connect_network_radially"], [15, 0, 1, "", "connect_nodes"], [15, 0, 1, "", "connect_subgroup"], [15, 0, 1, "", "connect_to_upstream_nodes"], [15, 0, 1, "", "convert_edgelist_into_genesymbol"], [15, 0, 1, "", "copy"], [15, 0, 1, "", "dfs_algorithm"], [15, 0, 1, "", "is_connected"], [15, 0, 1, "", "modify_node_name"], [15, 0, 1, "", "print_my_paths"], [15, 0, 1, "", "remove_disconnected_nodes"], [15, 0, 1, "", "remove_edge"], [15, 0, 1, "", "remove_node"], [15, 0, 1, "", "remove_path"], [15, 0, 1, "", "remove_undefined_interactions"]]}, "objnames": {"0": ["py", "method", "Python method"], "1": ["py", "class", "Python class"]}, "objtypes": {"0": "py:method", "1": "py:class"}, "terms": {"": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "0": [18, 19, 20, 23, 24, 25, 26], "00": 19, "0001837": 23, "01": [19, 24], "02": 19, "03": 19, "04": 22, "05": 19, "06": 23, "07": 19, "08": 18, "09": [23, 25, 26], "1": [10, 11, 15], "10": [18, 20, 26], "100": [19, 26], "1000": 23, "100000": 23, "10022128": 19, "10022617": 19, "10022869": 19, "10037172": 19, "10085298": [18, 23], "101": 25, "102": 25, "10208431": 19, "103": 25, "10329689": 18, "10366004": 19, "104": 25, "10491298": 19, "105": 25, "10521452": 18, "10592173": [18, 23], "10593980": 23, "106": 25, "10606235": 19, "10637317": 19, "10723141": 19, "10851246": 18, "109": 19, "10922374": 18, "11": [20, 21, 22, 26], "11018017": 20, "11035810": 20, "112": 19, "11281649": 19, "11804596": 18, "11877377": 18, "11948912": 19, "12": [18, 19, 20, 21, 26], "12123611": 23, "123": [23, 26], "12535517": 20, "12607003": 18, "12644465": 23, "12960434": 18, "129679": 26, "13": [19, 20, 21, 26], "14": [19, 20, 21, 26], "1417": 26, "14563837": 20, "15": [19, 20, 21, 26], "150": [19, 20], "156": [22, 26], "15782139": [18, 23], "158": 18, "15829723": 20, "15833848": 18, "16": [19, 26], "16023596": 20, "16039586": 18, "160493827160494": 26, "16099633": 18, "162": 26, "16371504": 18, "16492141": 18, "165": 26, "16504004": 20, "16760434": 18, "168": 18, "169": 18, "17": [22, 24, 26], "170": [18, 19], "171": 18, "17143292": 18, "172": 18, "173": [18, 19], "174": [18, 26], "175": 18, "178": 19, "18": 26, "18181818181817": 26, "182": 19, "19": [20, 23, 26], "190": 20, "1min": 19, "2": [6, 7, 8, 15], "20": 26, "20019798": 19, "2024": 19, "20516212": 19, "20class": 23, "20mesenchym": 23, "20sapien": 23, "20to": 23, "20transit": 23, "21": [20, 26], "213": 20, "217": 19, "22": [19, 23, 26], "22143792": 23, "22590567": 18, "229": 20, "22951020": 19, "22annot": 23, "22epitheli": 23, "22go": 23, "22hilit": 23, "22homo": 23, "22protein": 23, "23": [18, 23, 26], "23041284": 20, "23552696": 20, "24": [19, 26], "241": 20, "242": [20, 26], "24291004": 20, "24326307": 19, "24708856": 19, "24816100": 19, "25": [19, 23, 26], "25295465": 19, "25477897": 19, "255793": 19, "256124": 19, "259": 26, "26": 26, "261041": 19, "261042": 19, "261043": 19, "268952": 19, "27": [19, 26], "270835": 19, "272062": 19, "272091": 19, "272092": 19, "27272727272727": 26, "28": 19, "28850": 19, "28851": 19, "28852": 19, "28853": 19, "28854": 19, "28855": 19, "29": [19, 26], "3": [23, 26], "30": [19, 26], "301": 19, "3096": 23, "31": [19, 26], "314": 19, "31653868": 19, "31831667": 19, "32": [19, 26], "32482868": 20, "325": 26, "33": [19, 26], "34": [19, 26], "35": [19, 26], "36": [19, 26], "37": [19, 26], "38": [19, 26], "39": [19, 21, 23, 26], "39773": 26, "39829": 26, "3cem": 23, "3e": 23, "4": [18, 20, 23, 24, 25, 26], "40": [19, 26], "41": [19, 22], "414": 23, "419": 23, "41975308641975": 26, "42": [19, 25], "43": [19, 22], "439": 19, "44": [19, 23, 26], "442": 19, "446": 19, "45": [19, 20], "450": 19, "453": 19, "46": [19, 23], "47": 19, "472": 19, "475": 19, "479": 19, "481": 26, "483": 19, "49": 19, "5": [18, 19, 20, 21, 22, 23, 24, 25, 26], "50": 26, "51": 26, "529": 26, "53": 19, "56": 24, "57": 24, "58": 22, "59": [19, 22, 23, 26], "6": [18, 19, 20, 21, 22, 23, 24, 25, 26], "61": 18, "627": 19, "63": [22, 26], "639": 26, "64006": 19, "64060": 19, "64061": 19, "64062": 19, "64063": 19, "64064": 19, "64065": 19, "64490": 19, "64491": 19, "64492": 19, "64493": 19, "64494": 19, "64495": 19, "64x64": 26, "66": 25, "68": [18, 21, 26], "69": 21, "7": [18, 19, 20, 21, 22, 23, 24, 25, 26], "715": 25, "716": 25, "717": 25, "718": 25, "719": 25, "720": 25, "724": 22, "727": 19, "73": [18, 26], "733": 22, "735": 22, "74": 19, "754": 26, "759": 26, "76": 25, "761": 26, "78": 26, "7c": 23, "8": [18, 19, 20, 23, 24, 26], "82": 19, "83": 20, "8386367": 20, "84": [20, 26], "8702807": 20, "88": 23, "9": [18, 19, 20, 24, 26], "9094": 19, "93": 19, "945": 19, "954": 19, "9832503": 20, "A": [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 26], "As": [17, 19, 26], "At": [20, 26], "For": [17, 20, 25], "IN": [7, 15], "INE": [16, 26], "INS": 26, "If": [0, 5, 8, 10, 11, 13, 15, 18, 20], "In": [19, 22, 25, 26], "It": [4, 6, 8, 9, 10, 13, 15, 17, 18, 19, 22], "Its": 25, "On": 26, "The": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "There": 17, "These": [15, 17], "To": [18, 19, 26], "_annot": [20, 21, 22, 23, 24, 25], "_data": [19, 20, 22, 26], "_method": 25, "_visual": [18, 19, 20, 21, 22, 23, 24, 25, 26], "a0a024rad5": 19, "a0a0b4j2f0": 19, "a0avt1": 19, "a_collectri": 19, "abi1": 26, "abl1": [25, 26], "about": 26, "absenc": 19, "accept": [19, 20, 26], "access": [8, 15, 18, 24], "accordingli": [4, 15], "account": [25, 26], "acsn": [18, 23], "activ": [17, 22, 25], "ad": [5, 9, 10, 15, 17, 20], "add": [4, 5, 9, 10, 15, 18, 26], "add_edg": 15, "add_nod": 15, "add_resourc": [19, 21], "adhesom": [18, 23], "advis": 19, "again": 26, "aim": [21, 26], "akna": 23, "akt1": [20, 22, 26], "akt1_s473": 22, "akt1s1": 26, "akt1s1_t246": 22, "algorith": 20, "algorithm": [6, 15, 16, 18, 19, 21, 22, 25, 26], "all": [5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 18, 19, 20, 24, 26], "all_interact": 18, "allomnipath": 26, "allomnipathinteract": 26, "allow": [15, 17, 20], "alreadi": [4, 15], "also": [4, 8, 10, 15, 17, 18, 20, 26], "altern": 19, "alwai": [18, 19], "amelx": 23, "amigo1": 19, "among": [6, 7, 9, 10, 11, 15, 26], "amount": 19, "amp": 23, "an": [4, 9, 15, 17, 22, 25, 26], "analysi": [15, 17], "andrea": 17, "ani": [15, 20], "annot": [1, 19, 23], "annotation_class_label": 23, "annotation_extension_class_closure_label": 23, "ap2a1": 26, "ap2b1": 26, "ap2m1": 26, "ap2s1": 26, "api": 17, "apoptosi": 23, "app": 25, "appear": 22, "append": 26, "appli": [19, 26], "approach": 17, "ar": [4, 8, 11, 13, 15, 19, 20, 21, 26], "araf": 22, "arf6": 26, "arg": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "argument": [19, 21, 23, 25], "arhgef1": 26, "arrarr": 23, "asap1": 26, "asmund": 17, "aspect": 23, "assigned_bi": 23, "assur": 19, "atf1": 26, "atla": [1, 19, 24], "atopo": 17, "attempt": [6, 7, 15], "atxn2": 26, "aurka": 26, "aux": 23, "avail": [15, 17, 19], "averag": 26, "avoid": [19, 23], "awai": 21, "b": 26, "b2rxh8": 19, "base": [1, 8, 15, 16, 17, 18, 19, 21, 26], "basic": [9, 15], "bcar1": 26, "becaus": 26, "being": 26, "belon": 26, "belong": 26, "below": [15, 19, 22], "beta": 26, "better": 26, "between": [10, 15, 18, 19, 23], "bf": [6, 15, 18, 19, 22, 25], "bfs_algorithm": 15, "bias": 18, "big": 26, "bigger": 26, "bimod": 23, "bioentity_label": 23, "biogrid": 23, "blue": 24, "bmp2": 23, "bmp7": 23, "bool": [0, 5, 6, 7, 8, 9, 10, 11, 13, 15], "boolean": [6, 7, 8, 9, 10, 11, 15], "both": [14, 15, 22, 26], "braf": 26, "breadth": [6, 15, 18], "bridg": 18, "btk": 25, "build": [16, 17, 18, 20, 21, 26], "built": [17, 25, 26], "c": 26, "c496": 19, "c535": 19, "camk2a": 26, "can": [5, 6, 7, 10, 14, 15, 17, 18, 19, 24, 26], "captur": 26, "care": 26, "case": [19, 25, 26], "caus": 19, "cav1": 26, "cav2": 26, "cbl": 26, "cblb": 26, "cblc": 26, "ccnd1": 20, "cd": 17, "cd33": 19, "cdc42": 26, "cdh1": [18, 19, 21, 24, 25], "cdh2": [18, 19, 21, 24, 25], "cdk1": 22, "cdk2": 22, "cell": 19, "central": 15, "certain": 23, "cfl1": 26, "chang": 18, "characterist": [6, 7, 15], "checcoli": 17, "check": [4, 5, 6, 7, 11, 13, 15, 26], "check_nod": 15, "check_tissue_annot": 24, "checkpoint_batch_91": 19, "choos": [6, 7, 15, 23], "class": 16, "classic": 26, "clean": 19, "clone": 17, "co2": 26, "code": [19, 22, 25], "collabor": 17, "collect": 26, "collectr": 19, "collectri": 19, "color": [0, 1], "color_bi": [18, 19, 20, 21, 22, 23, 26], "column": [4, 15, 18, 19, 20, 25], "com": [17, 19], "common": 25, "commplete_connect": 26, "comp_a": [7, 15], "comp_b": [7, 15], "compar": 26, "compare_network": 25, "comparison": 16, "compat": 19, "complet": [15, 17, 19, 20], "complete_connect": [15, 18, 19, 22, 25, 26], "complete_connection_neko_net_sampl": 26, "complete_connection_neko_net_sample_egf": 26, "complex": [5, 15, 19, 26], "compon": [7, 15, 16], "composit": 26, "comprehens": 17, "compress": [8, 15, 17, 23], "comput": [18, 26], "concensu": 25, "conflict": 19, "connect": [6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 19, 26], "connect_as_atopo": [15, 20], "connect_compon": 15, "connect_genes_to_phenotyp": [15, 23], "connect_network": [6, 15], "connect_network_radi": [15, 19, 26], "connect_nod": [15, 18, 19, 23, 25], "connect_radi": 26, "connect_subgroup": 15, "connect_to_upstream_nod": [15, 21], "connect_with_bia": [6, 15, 18, 19, 22, 25, 26], "consensu": [6, 7, 9, 10, 11, 15, 18, 19, 25, 26], "consensus_direct": 19, "consensus_inhibit": 19, "consensus_onli": [9, 15, 18, 19, 23, 25], "consensus_stimul": 19, "consid": [8, 11, 15], "consider": 26, "consist": 19, "construct": 25, "contain": [1, 4, 12, 15, 19, 26], "contributor": 17, "convert": [4, 15, 17], "convert_edgelist_into_genesymbol": 15, "copi": 15, "core": [15, 18, 19, 20, 21, 22, 23, 24, 25, 26], "correct": [5, 15], "cost": [18, 26], "could": [19, 26], "count": [19, 23], "cover": [17, 26], "cpu": [18, 19, 20, 21, 22, 23, 24, 25, 26], "creat": [16, 22], "creation": 17, "creb1": 26, "crk": 26, "crkl": 26, "csk": 26, "csv": [19, 23], "ctnnb1": [20, 23, 25], "cul7": 23, "curated_collect": 19, "curation_effort": 19, "curi": 17, "current": 17, "cursor": 26, "custom": 19, "dact3": 23, "data": [1, 24], "databas": [9, 10, 15, 17, 26], "datafram": [1, 4, 5, 10, 12, 15, 18, 19, 20, 21, 24, 25], "db_translat": 19, "ddx17": 23, "ddx5": 23, "decid": 26, "default": [6, 7, 10, 11, 15, 18, 21], "defin": [16, 24], "definit": 20, "deftyp": 23, "degre": 26, "depend": 19, "depth": [6, 11, 13, 15, 18, 21], "despit": 26, "detail": [16, 17, 19, 23, 25], "develop": 17, "df": [6, 13, 15, 18, 25, 26], "dfs_algorithm": 15, "did": 26, "differ": [6, 7, 15, 19, 25], "difficult": 26, "direct": [2, 3, 15], "directli": 17, "directori": 17, "disconnect": 15, "displai": 0, "distanc": 26, "dlg5": 23, "dnm1": 26, "do": [15, 19, 20, 25, 26], "document_categori": 23, "doe": [18, 19, 26], "dok2": 26, "done": 23, "dorothea": 19, "download": 19, "downstream": [15, 16, 19], "due": 26, "dure": 22, "d\u00e9ne": 17, "e": [17, 20, 23, 25], "e2f1": 26, "each": [1, 19, 21, 23, 25, 26], "easili": 26, "edg": [4, 9, 10, 12, 14, 15, 17, 18, 20, 23, 25, 26], "edismax": 23, "effect": [4, 15, 18, 19, 20, 21, 23, 26], "effort": 17, "egf_egfr_gen": 26, "egfr": 25, "eif4": 26, "eif4ebp1": 26, "eirini": 17, "either": [5, 14, 15, 20], "elk1": 26, "elk4": 26, "encapsul": 23, "end": 20, "eng": 23, "enrich": [6, 7, 15, 17], "ensembl": 19, "ensg00000276076": 19, "ensg00000280987": 19, "ensur": [5, 15, 19], "entiti": 19, "entri": 19, "epb41l5": 23, "epitheli": 23, "epithelial_to_mesenchymal_transit": 23, "epn1": 26, "eps15": 26, "eps15l1": 26, "eps8": 26, "erbb2": 26, "errfi1": 26, "error": [15, 19, 22], "etc": 19, "evidence_subset_closure_label": 23, "evinc": 26, "exampl": [19, 22], "exclud": 26, "execut": [17, 23], "exist": [15, 19, 23, 25], "expans": [19, 20, 26], "expect": 26, "explan": [17, 19, 23, 25], "explor": [19, 24, 26], "exponenti": 26, "export": 18, "express": [1, 16], "extend": 26, "extra": 26, "extract": [17, 19], "extri_collectri": 19, "facet": 23, "factor": 19, "fak": [18, 23, 24, 25], "fals": [0, 5, 6, 7, 8, 9, 10, 11, 15, 18, 19, 23, 26], "fam83d": 23, "famili": [19, 26], "famou": 16, "faster": [18, 26], "fetch": [23, 26], "fgfr1": 23, "fgfr2": 23, "field": 23, "file": [0, 15, 17, 19], "filter": [6, 7, 8, 10, 11, 15], "final": [17, 21, 26], "find": [10, 15, 17, 21, 26], "find_path": 15, "first": [6, 7, 13, 15, 18, 19, 26], "fl": 23, "flag": [6, 7, 8, 9, 10, 11, 15, 19], "flna": 23, "flobak": 17, "flow": 17, "fo": 26, "focu": 16, "follow": [15, 19, 25, 26], "forc": 18, "form_complex": 19, "format": [4, 12, 15, 17, 18, 19, 22], "fosb": 26, "found": [9, 10, 15, 26], "fourth": 26, "foxf2": 23, "foxo1": 26, "foxo4": 26, "fq": 23, "friendli": 17, "from": [1, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "from_sif": [5, 15], "full": [17, 26], "function": [5, 6, 7, 8, 10, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26], "g": [20, 23], "gab1": 26, "gab2": 26, "gdk": 26, "gdkcursor": 26, "gene": [1, 8, 15, 16, 17, 21, 22, 26], "gene_ontologi": [20, 21, 22, 23, 24, 25], "geneontologi": 23, "gener": [12, 15, 19, 25], "genes_df": 24, "genes_transl": 19, "genes_translated_clean": 19, "genesymbol": [5, 12, 14, 15, 18, 19, 24, 26], "get": [19, 21], "get_pathway_info": 26, "get_xref_list": 26, "git": 17, "github": [17, 19], "given": [8, 15, 26], "gja1": 26, "go": [21, 26], "golr": 23, "graph": [0, 15], "graph_layout": [2, 3], "grb10": 26, "grb2": 26, "group": [10, 15], "gsk3b": [20, 22, 23, 26], "gsk3b_s9": 22, "h": 26, "ha": [1, 8, 15, 19], "hand": 26, "has_head": 19, "have": [6, 7, 15, 19, 20, 26], "head": 19, "header": 23, "here": [15, 19], "hg": 26, "hgf": 23, "hi": 19, "hierarci": 23, "hif1a": 23, "high": 26, "higher": [18, 21, 26], "highlight": 0, "highlight_color": 0, "highlight_nod": 0, "highligt": 24, "hl": 23, "hmga2": 23, "hnrnpab": 23, "homo": 26, "homogen": 26, "hopefulli": 26, "how": [17, 19, 21, 24], "hprd": 18, "hra": 26, "hspb1_s78": 22, "hspb1_s82": 22, "html": 26, "http": [17, 19, 23, 26], "hub": 26, "human": [1, 24], "huri": [19, 26], "i": [5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 22, 25, 26], "id": [8, 15, 22, 26], "id_access": [8, 15, 23], "ida": 19, "idb": 19, "identifi": [5, 8, 12, 14, 15, 17, 19], "idtransl": 19, "idtranslator_140412855874560": 19, "igf1": 23, "ignor": 21, "ikbkb": 25, "imag": 26, "img": 26, "immedi": 20, "implement": [15, 19], "import": [15, 22, 23, 25, 26], "in_tissu": 24, "includ": [9, 15, 17, 21], "inclus": [19, 23], "incom": [19, 20], "increas": [15, 26], "indent": 23, "index": 26, "indic": [1, 6, 7, 8, 9, 10, 11, 15], "individu": [19, 23], "info": 19, "inform": 26, "inhibit": [4, 15, 18, 20, 23, 25], "initi": [15, 26], "initial_nod": [15, 20], "innatedb": 18, "inpp5d": 26, "inppl1": 26, "input": [15, 19, 21, 22, 23, 24, 25, 26], "input_column": 19, "insr": 26, "instal": 26, "instanc": [20, 25], "instead": 21, "int": [6, 7, 8, 10, 11, 15], "int_comparison": 2, "integ": 15, "integermultipl": 26, "integr": [15, 17, 19], "interact": [4, 9, 10, 15, 16, 17, 18, 20, 23, 25, 26], "interaction_comparison": 25, "interactom": 19, "interest": [1, 23], "introduc": [6, 15, 20], "involv": [4, 15], "io": 23, "iqgap1": 26, "iqsec1": 26, "irozzo": 19, "irs1": 26, "is_connect": 15, "is_direct": 19, "is_inhibit": 19, "is_stimul": 19, "isa_partof_closur": 23, "isa_partof_closure_label": 23, "itch": 26, "iter": [10, 15, 20, 26], "itgb4": 25, "its": [5, 6, 7, 14, 15, 17], "jak1": 26, "jak2": 26, "json": 23, "jun": 26, "jun_s63": 22, "jund": 26, "just": [9, 15, 18, 26], "k": 18, "kea": 18, "kept": 26, "kinas": 16, "kinase_int_fil": 22, "kinase_substrate_dataset": 22, "knowledg": [15, 19], "known": 26, "kra": 26, "lats1": [18, 19, 21, 24, 25], "lats2": [18, 19, 21, 24, 25], "layer": 21, "least": 19, "lef1": [23, 25], "len": 26, "length": [6, 7, 8, 10, 15, 18], "let": 26, "light": 24, "lightyellow": 0, "like": [19, 26], "limit": [19, 23], "limk2": 26, "lims1": 23, "line": 26, "link": [19, 26], "list": [0, 4, 6, 7, 8, 9, 10, 11, 14, 15, 17, 21, 26], "liter": [6, 7, 15], "load": [15, 17, 19], "look": [18, 20, 21, 23, 26], "loop": 15, "lower": 23, "loxl2": 23, "loxl3": 23, "luisa": 19, "m": [18, 19, 20, 21, 22, 23, 26], "main": 15, "make": [9, 15, 18], "manag": 26, "mani": [21, 23, 26], "manipul": 17, "manner": 15, "map": [16, 17, 19], "map2k1": [20, 22, 26], "map2k1_s218": 22, "map2k1_s222": 22, "map2k2": 26, "map2k4": 22, "map2k5": 26, "map3k1": 26, "map3k11": 22, "map3k2": 26, "map3k3": 26, "map3k4": 26, "map3k7": [20, 25], "map4k1": 26, "map4k4": [18, 19, 24, 25], "mapk1": 26, "mapk14": [20, 22, 26], "mapk14_t180": 22, "mapk14_y182": 22, "mapk3": 22, "mapk3_t202": 22, "mapk3_y204": 22, "mapk4": 26, "mapk7": 26, "mapk8": 26, "mapk9": 26, "mapkapk2": 22, "marco": 17, "marker": [8, 15, 17, 20, 23], "max": 26, "max_len": [15, 19, 20, 26], "maximum": [6, 7, 8, 10, 15, 18], "maxlen": [6, 7, 8, 10, 15, 18, 19, 23, 25, 26], "mean": 26, "mef2a": 26, "mef2c": 26, "mef2d": 26, "mesenchym": 23, "messag": [15, 22], "method": [4, 6, 7, 16, 17], "miannu": 19, "might": [19, 20, 25], "mincount": 23, "minim": [6, 15, 26], "minut": [19, 26], "miss": 19, "mistak": 19, "mode": [7, 15], "model": 17, "modifi": 15, "modify_node_nam": 15, "modul": [16, 17, 19], "molecular": 15, "more": [21, 26], "mt": 26, "mtor": 22, "mtor_nod": 26, "mtor_s2448": 22, "much": 26, "multimer": 19, "must": [8, 15], "mv": 23, "mybl2": 26, "myc": 20, "n_primary_sourc": 19, "n_refer": 19, "n_sourc": 19, "name": [0, 8, 15, 17, 19, 21, 26], "nan": [5, 15, 18, 19, 23, 24], "nb": [18, 19], "ncam1": 23, "nck1": 26, "nck2": 26, "ncoa3": 26, "ndufa13": 26, "nedd4": 26, "nedd8": 26, "need": 19, "neighbor": [20, 26], "neighbour": 26, "neko": [15, 16, 18, 19, 20, 21, 22, 23, 24, 25], "neko_net": 26, "neko_net1": 26, "neko_net2": 26, "neko_net3": 26, "neko_net4": 26, "net1_edges_s": 26, "net1_nodes_s": 26, "net2_edges_s": 26, "net2_nodes_s": 26, "net3_edges_s": 26, "net3_nodes_s": 26, "net4_edges_s": 26, "net4_nodes_s": 26, "network": [0, 16, 26], "network_visu": 24, "networkvisu": [18, 19, 20, 21, 22, 23, 24, 25, 26], "new": [5, 12, 15, 21], "new_nam": 15, "new_net": 20, "new_net1": [18, 19, 21, 22, 23, 24, 25], "new_net2": 25, "newli": 20, "next": 26, "nl": 23, "node": [0, 1, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 17, 22, 23, 25, 26], "node1": 15, "node2": 15, "node_comparison": [2, 25], "nodes_found": 26, "nodes_to_connect": [11, 15], "nog": 23, "noi": [18, 19, 20, 21, 26], "none": [0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 20], "nos3": 26, "notch1": [18, 19, 21, 23, 24, 25], "notch4": 23, "note": [17, 18, 19, 22, 23, 26], "notebook": [18, 19, 20, 21, 22, 23, 24, 26], "notic": 26, "now": 26, "ntnu": 19, "number": [21, 26], "o14746": 19, "o60238": 19, "o95819": [18, 19, 24], "o95835": [18, 19, 24], "o95863": 18, "o96006": 21, "object": [6, 7, 15, 17, 24, 25], "offer": [17, 19], "old": 15, "old_nam": 15, "omniflow": 23, "omnipath": [9, 15, 17, 18, 20, 22, 23, 24, 25], "onc": [9, 15, 19, 26], "one": [6, 7, 15, 18, 23, 25, 26], "ones": 19, "onli": [9, 10, 15, 19, 20, 26], "only_sign": [6, 7, 8, 9, 10, 11, 15, 18, 19, 22, 23, 25, 26], "ontologi": [16, 17, 20, 21, 22, 24, 25], "op": [18, 19, 20, 21, 22, 23, 24, 25, 26], "oper": 15, "option": [8, 15, 17], "order": [19, 26], "org": [19, 26], "organ": [15, 26], "origin": 19, "other": [16, 19, 22, 25, 26], "otherwis": [5, 15], "our": 17, "out": [7, 10, 15], "output": [0, 15, 19, 20, 25], "output_fil": 0, "output_nodes_prosurviv": 20, "over": [10, 15], "overview": 17, "own": 19, "p00519": 18, "p01100_p05412": 19, "p01100_p17275": 19, "p01106": [19, 20], "p02818": 19, "p04150": 20, "p05019": 19, "p05412": 19, "p08151": 19, "p08670": [18, 19, 24], "p12830": [18, 19, 24], "p12931": [18, 19, 23, 24], "p15407_p17275": 19, "p17612": 18, "p17947": 19, "p18848": 19, "p19022": [18, 19, 24], "p20138": 19, "p22415": 19, "p23759": 19, "p24385": 20, "p28482": 20, "p31749": 20, "p35638": 19, "p42345": 20, "p46531": [18, 19, 23, 24], "p46937": 20, "p49840": 20, "p49841": 20, "p50552": 18, "p61073": 19, "packag": [6, 7, 15, 17, 18, 19, 26], "page": [15, 17], "pair": [10, 15], "pak1": 26, "panda": [4, 10, 12, 15, 19, 20, 22], "panther_family_label": 23, "paramet": [8, 15, 17, 18, 25], "pars": 22, "particular": [10, 15, 19], "path": [6, 7, 8, 10, 11, 15, 17, 18, 21, 26], "pathwai": 16, "pathway_brows": 26, "pathway_list": 26, "pcna": 26, "pd": [19, 20, 22], "pdf": 18, "pdpk1": [22, 26], "pebp1": 26, "percentag": 26, "perform": 26, "pf4": 20, "ph2": 19, "phase": 23, "phenotyp": [8, 15, 17, 19, 20, 23], "phospho_effect_fil": 22, "phosphoryl": 22, "phosphosit": [16, 17, 18], "phosphositeplu": [22, 26], "php": [19, 26], "pias3": 26, "pictur": 18, "pik3c2b": 26, "pik3ca": [20, 26], "pik3r1": 26, "pik3r2": 26, "pip": [17, 26], "pkl": 19, "place": 15, "plce1": 26, "plcg1": 26, "pld1": 26, "pld2": 26, "pleas": [18, 19, 23, 25, 26], "plscr1": 26, "plug": 26, "pmid": 19, "possibl": [6, 7, 12, 15, 18, 19, 22, 26], "possibli": 19, "pparg": 26, "ppargc1a": 26, "ppi": 19, "ppp3r1": 23, "pre": 23, "predefined_nod": [18, 20], "present": [4, 6, 7, 15, 21, 22], "prevent": 19, "previou": 19, "previous": 26, "print": [15, 18, 19, 24, 25, 26], "print_my_path": 15, "prkaca": 22, "prkca": 26, "prkcb": 26, "prkcd": 26, "prkci": 26, "prkcz": 26, "prkd1": 22, "prkg1": 25, "proce": 26, "process": [15, 19, 20], "process_psp_interact": 22, "progress": [19, 22], "project": 17, "prolifer": 20, "prot": 19, "protein": [1, 19, 24, 26], "protm": 18, "protmapp": 18, "provid": [8, 11, 15, 17, 18, 19, 20, 22, 26], "pten": [25, 26], "ptk2": [18, 19, 24, 26], "ptk2b": [18, 24, 25, 26], "ptk6": 26, "ptpn11": 26, "ptpn12": 26, "ptpn5": 26, "ptprr": 26, "pwpw": 26, "pxdn": 26, "pypath": 17, "pypi": 17, "python": [17, 19, 26], "pywikipathwai": 26, "q": 23, "q01196": 19, "q01860": 20, "q05397": [18, 19, 23, 24], "q13094": 19, "q13153": 18, "q13188": 18, "q13315": 18, "q14289": [18, 24], "q15672": 19, "q16539": 20, "q5sre5": 19, "q5vyx0": 19, "q6in84": 19, "q6mzq0": 19, "q6zn04": 19, "q86y13": 19, "q8nhw4": 19, "q99759": 18, "q9bxk5": 19, "q9h2s6": 19, "q9npe6": 19, "q9nrm7": [18, 19, 24], "q9ui36": 19, "q9um44": 19, "q9uqr1": 19, "qt": 23, "qualifi": 23, "quickli": 26, "rab5a": 26, "rac1": 26, "radial": [15, 20], "radial_neko_net_sampl": 26, "radial_neko_net_sample_egf": 26, "raf1": [22, 26], "rala": 26, "ralb": 26, "ralbp1": 26, "ralgd": 26, "random": 26, "random_se": 26, "rank": [11, 15, 21], "rap1a": 26, "rasa1": 26, "rate": 19, "rbpj": 23, "re": 16, "reach": 20, "read_csv": 19, "reason": 26, "receiv": [19, 25], "reciproc": 26, "recov": 26, "reduc": 26, "refer": [4, 6, 7, 9, 10, 11, 17, 18, 19, 20, 21, 23, 25], "references_strip": 19, "regulates_closure_label": 23, "regulatori": 21, "regulatory_sit": 22, "reletav": 26, "reli": 19, "remain": 20, "rememb": 26, "remov": [14, 15, 17, 19, 20], "remove_disconnected_nod": 15, "remove_edg": 15, "remove_nod": 15, "remove_path": 15, "remove_undefined_interact": 15, "remove_untranslated_entri": 19, "render": [18, 19, 20, 21, 22, 23, 24, 26], "repeat": 15, "replac": 23, "repositori": [17, 18], "repres": [4, 5, 7, 10, 14, 15, 20], "reps2": 26, "request": 23, "reset": [6, 15], "reset_index": 19, "resid": 26, "resourc": [10, 15, 16, 17, 18, 21, 23, 24, 25, 26], "result": [1, 19, 25, 26], "results_df": 24, "ret": 22, "retriev": [8, 15, 17, 18], "return": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "revis": 26, "rflnb": 23, "rheb": 26, "rictor": 26, "rin1": 26, "rock1": [23, 25, 26], "rock2": 23, "row": [18, 19, 20, 23, 25], "rpe": 26, "rps6": 26, "rps6ka1": [22, 26], "rps6ka1_s380": 22, "rps6ka2": 26, "rps6ka3": 26, "rps6ka5": 26, "rps6kb1": 26, "rptor": 26, "run": [19, 26], "ruscon": 17, "s100a4": 23, "same": 19, "sampl": 26, "sapien": 26, "save": 19, "saw": 26, "scale": 26, "search": [6, 7, 8, 10, 11, 13, 15, 18], "second": [7, 15, 18, 19, 26], "see": [18, 19, 23], "seed": 26, "seeds_numb": 26, "select": [1, 15, 23, 26], "separ": [19, 20, 23, 26], "set": [4, 5, 10, 15, 17, 19, 25, 26], "sever": [17, 19], "sh2d2a": 26, "sh3gl2": 26, "sh3gl3": 26, "sh3kbp1": 26, "shc1": 26, "shortest": [18, 26], "should": [4, 6, 7, 15, 20, 21, 26], "show": [19, 21, 25], "showcas": [19, 23], "shown": 26, "sif": [15, 17], "sif_fil": 15, "sign": [9, 10, 15, 18, 25], "signor": 16, "signor_": 26, "signor_db": [19, 20, 26], "signor_id": 19, "signor_pf32": 19, "simpl": [15, 17, 23], "sinc": 26, "size": [19, 26], "slc39a10": 23, "slc39a6": 23, "slower": 26, "smad4": 23, "small": 26, "snai1": 23, "snai2": [23, 25], "snippet": 23, "so": [19, 26], "solr": 23, "some": [19, 21, 25, 26], "someth": 19, "sometim": 19, "sort": 23, "sos1": 26, "sos2": 26, "sourc": [4, 12, 15, 18, 19, 20, 23, 25], "source_uniprotkb": 19, "sox9": 23, "sp1": 26, "sp6": 23, "speci": 26, "specif": [18, 23], "specifi": [8, 15, 17, 18, 25], "spry2": 26, "src": [18, 19, 21, 22, 23, 24, 25, 26], "srebf1": 26, "stage": 17, "stam": 26, "stam2": 26, "stambp": 26, "standard": 23, "start": [15, 18, 19, 20, 23, 26], "stat1": 26, "stat3": 26, "stat5a": 26, "stat5b": 26, "step": [18, 19, 20, 21, 23, 25, 26], "stepwis": 16, "still": [17, 22], "stimul": [4, 15, 18, 20, 23], "stmn1": 26, "str": [0, 5, 7, 8, 10, 11, 14, 15], "strategi": [15, 20, 21, 25], "string": [5, 7, 10, 14, 15], "structur": 19, "studi": 17, "stxbp1": 26, "sub_gen": [8, 15], "subcompon": [7, 15, 17], "subgroup": [10, 15, 17], "subject": 15, "subnetwork": 17, "substitut": [8, 15, 17], "success": 19, "suggest": [19, 23, 26], "summari": 15, "sure": [9, 15], "surround": 26, "swiss": 19, "sy": [18, 19, 20, 21, 22, 23, 24, 25, 26], "symbol": 1, "synj1": 26, "syntax": [5, 15], "sysbio": 17, "system": 24, "tab": [19, 20, 26], "take": [15, 19, 25, 26], "target": [4, 12, 15, 18, 19, 20, 21, 23, 25], "target_uniprotkb": 19, "taxon_subset_closure_label": 23, "tbk1": 22, "tcf7l2": 20, "term": 16, "test": 26, "tfeb": 26, "tgfb1": 23, "tgfb2": 23, "tgfbr1": 23, "tgfbr2": 23, "tgfbr3": 23, "tgfbr3l": 23, "than": 26, "thei": 21, "them": [4, 8, 10, 15, 17, 26], "thi": [4, 6, 7, 8, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26], "third": 26, "those": [18, 19, 21, 26], "threshold": 20, "through": 26, "time": [18, 19, 20, 21, 22, 23, 24, 25, 26], "tip": 26, "tissu": [1, 16, 17], "tissue_df": 1, "tissue_map": 24, "tnk2": 26, "tnmd": 19, "togeth": 19, "ton": 26, "too": [23, 26], "tool": 21, "top": 17, "topolog": 15, "topologi": 18, "total": [18, 19, 20, 21, 22, 23, 24, 25, 26], "tp63": 25, "transit": 23, "translat": [12, 15, 22], "travers": [13, 15], "trim28": 23, "true": [0, 6, 10, 11, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26], "tsirvouli": 17, "tsv": [19, 20, 26], "tupl": 15, "turei": 17, "tutori": [17, 18, 19, 23, 25], "twist1": 26, "two": [15, 25, 26], "type": [4, 5, 15, 18, 19, 20, 23, 24], "ulk1": 26, "uncom": 26, "unconnect": 20, "undefin": 15, "union": 19, "unipress": 19, "uniprot": [5, 8, 14, 15, 17, 18, 19, 22, 24], "uniprotkb": 19, "uniqu": [8, 15, 17, 19, 25], "uniroma2": [19, 26], "univers": [19, 20, 21, 22, 23, 24, 25, 26], "unsign": [6, 7, 8, 10, 11, 15], "until": [15, 20], "untransl": 19, "updat": [6, 15], "upstream": [11, 15, 16, 17], "url": 26, "urs000075c808_9606": 19, "urs000075cf56_9606": 19, "urs000075d8a0_9606": 19, "us": [0, 6, 7, 8, 10, 13, 15, 16, 17, 22, 24], "usag": [16, 25], "usecol": 19, "user": [6, 7, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26], "usp6nl": 26, "usp8": 26, "util": 22, "v": [25, 26], "valu": [19, 20, 26], "variou": 17, "vav1": 26, "vav2": 26, "vav3": 26, "veri": 26, "version": 19, "versu": 23, "view": [0, 26], "vim": [18, 19, 21, 24, 25], "visit": [13, 15, 17], "visual": [15, 17, 19, 20, 21, 23, 26], "visualize_network": [18, 19, 20, 21, 22, 23, 24, 25, 26], "visualizer1": [18, 19, 22, 23, 26], "visualizer2": 26, "visualizer3": 26, "visualizer4": 26, "vocabulari": 19, "wa": 26, "wai": 26, "wall": [18, 19, 20, 21, 22, 23, 24, 25, 26], "want": [19, 25], "warn": [15, 19, 21, 26], "wayland": 26, "we": [17, 18, 19, 23, 25, 26], "well": 26, "what": 19, "when": [6, 15, 18, 19, 20], "where": 19, "whether": [1, 6, 7, 8, 9, 10, 11, 15, 24], "which": [7, 15, 19, 20, 26], "while": [4, 9, 15, 18, 19, 26], "whole": 19, "why": 26, "wide": 19, "wikipathwai": 16, "within": 26, "without": 26, "wnt1": 25, "wnt11": 23, "wnt4": 23, "wnt5a": 23, "work": [18, 19], "wp437": 26, "wt": 23, "www": [19, 26], "x": [25, 26], "y": 26, "yet": [17, 19], "you": [15, 17, 19, 24, 25, 26], "your": [19, 24], "zyx": 25, "\u00b5": [18, 19, 20, 21, 23]}, "titles": ["neko._visual.visualize_network.NetworkVisualizer.render", "neko._visual.visualize_network.NetworkVisualizer.tissue_mapping", "neko._visual.visualize_network.NetworkVisualizer.vis_comparison", "neko._visual.visualize_network.NetworkVisualizer.yfiles_visual", "neko.core.network.Network.add_edge", "neko.core.network.Network.add_node", "neko.core.network.Network.complete_connection", "neko.core.network.Network.connect_component", "neko.core.network.Network.connect_genes_to_phenotype", "neko.core.network.Network.connect_nodes", "neko.core.network.Network.connect_subgroup", "neko.core.network.Network.connect_to_upstream_nodes", "neko.core.network.Network.convert_edgelist_into_genesymbol", "neko.core.network.Network.is_connected", "neko.core.network.Network.remove_node", "API Reference", "Contents", "Neko", "Usage", "Build network using user-defined resources", "Stepwise connection: a focus on the INE algorithm", "Connect to upstream components", "Build network based on kinase-phosphosite interactions", "Connect to downstream Gene Ontology terms.", "Map tissue expression", "Network comparison", "Re-creating famous pathways from SIGNOR and WIKIPATHWAYS using NeKo"], "titleterms": {"0": 17, "1": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "1a": 19, "1b": 19, "2": [18, 19, 20, 21, 22, 23, 24, 25, 26], "2a": [18, 19, 25], "2b": [18, 25], "2c": 18, "2d": 18, "3": [18, 19, 20, 21, 22, 24, 25], "3a": [19, 20], "3b": [19, 20], "3c": 19, "4": [19, 22], "9": 17, "INE": 20, "_visual": [0, 1, 2, 3], "absenc": 24, "acknowledg": 17, "ad": 19, "add": [19, 22], "add_edg": 4, "add_nod": 5, "algorithm": 20, "alreadi": 19, "annot": [22, 24], "api": [15, 16], "ar": [18, 22, 24], "base": [22, 24], "build": [19, 22, 23, 25], "cancer": 24, "check": 24, "class": 15, "collectri": 21, "color": 24, "colorect": 24, "command": 18, "compar": 25, "comparison": 25, "complete_connect": 6, "compon": 21, "connect": [18, 20, 21, 23], "connect_compon": 7, "connect_genes_to_phenotyp": 8, "connect_nod": 9, "connect_subgroup": 10, "connect_to_upstream_nod": 11, "content": 16, "convert_edgelist_into_genesymbol": 12, "core": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "creat": [18, 19, 20, 21, 25, 26], "databas": [19, 22], "defin": [18, 19, 20, 21, 22, 25], "detail": 15, "disconnect": 18, "document": 17, "downstream": 23, "e": 24, "effect": 22, "egf": 26, "egfr": 26, "explor": 18, "express": 24, "famou": 26, "featur": 17, "file": 22, "final": 18, "first": 25, "focu": 20, "follow": 18, "from": [21, 26], "g": 24, "gene": [18, 19, 20, 23, 24, 25], "go": 23, "id": 19, "import": [18, 19, 20, 21, 24], "input": [18, 20], "instal": 17, "interact": [19, 21, 22], "interest": [18, 19, 20, 21, 22, 24, 25], "intermedi": 18, "intermidi": 18, "introduc": 18, "is_connect": 13, "jupyt": 17, "kinas": 22, "konstructor": 17, "list": [18, 20, 25], "map": 24, "method": 15, "modul": 15, "mtor": 26, "neko": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 26], "network": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25], "networkvisu": [0, 1, 2, 3, 15], "new": [18, 19], "node": [18, 19, 20, 21, 24], "notebook": [16, 17], "object": [19, 21], "omnipath": [19, 21, 26], "ontologi": 23, "other": 15, "pathwai": 26, "phosphosit": 22, "presenc": 24, "public": 19, "re": 26, "refer": [15, 16], "regul": 21, "remove_nod": 14, "render": 0, "resourc": [19, 20, 22], "retriev": 26, "second": 25, "set": [18, 20, 22], "signal": 26, "signor": [19, 20, 26], "sourc": 26, "specifi": [19, 20, 22], "stepwis": 20, "substrat": 22, "term": 23, "tissu": 24, "tissue_map": 1, "translat": 19, "upstream": 21, "us": [18, 19, 20, 26], "usag": 18, "user": 19, "version": 17, "vis_comparison": 2, "visual": 18, "visualize_network": [0, 1, 2, 3], "we": 22, "wikipathwai": 26, "without": 18, "yfiles_visu": 3}}) \ No newline at end of file