From fba4c289aff6706f808142709b70854dc45b7518 Mon Sep 17 00:00:00 2001 From: safreita1 Date: Wed, 17 Feb 2021 22:58:51 -0800 Subject: [PATCH] Updated documentation + added citations --- attacks.py | 30 +++++++++--------- defenses.py | 35 ++++++++++----------- docs/build/doctrees/attacks.doctree | Bin 93016 -> 97679 bytes docs/build/doctrees/defenses.doctree | Bin 95619 -> 100381 bytes docs/build/doctrees/environment.pickle | Bin 126363 -> 130709 bytes docs/build/doctrees/measures.doctree | Bin 88368 -> 78078 bytes docs/build/html/attacks.html | 42 ++++++++++++++----------- docs/build/html/bibliography.html | 36 ++++++++++++++------- docs/build/html/defenses.html | 37 +++++++++++----------- docs/build/html/measures.html | 36 ++++++++++----------- docs/build/html/searchindex.js | 2 +- 11 files changed, 118 insertions(+), 100 deletions(-) diff --git a/attacks.py b/attacks.py index 626099c..b8989bb 100644 --- a/attacks.py +++ b/attacks.py @@ -131,7 +131,7 @@ def get_node_eig(graph, k=3): def get_node_id(graph, k=3): """ - Get k nodes to attack based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to attack based on Initial Degree (ID) Removal :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of nodes to attack @@ -147,7 +147,7 @@ def get_node_id(graph, k=3): def get_node_rd(graph, k=3): """ - Get k nodes to attack based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to attack based on Recalculated Degree (RD) Removal :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of nodes to attack @@ -168,11 +168,12 @@ def get_node_rd(graph, k=3): def get_node_ib(graph, k=3, approx=np.inf): """ - Get k nodes to attack based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to attack based on Initial Betweenness (IB) Removal :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of nodes to attack - :param approx: number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation + :param approx: number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n + is the number of nodes in the graph :return: a list of nodes to attack """ @@ -185,11 +186,12 @@ def get_node_ib(graph, k=3, approx=np.inf): def get_node_rb(graph, k=3, approx=np.inf): """ - Get k nodes to attack based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to attack based on Recalculated Betweenness (RB) Removal :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of nodes to attack - :param approx: number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation + :param approx: number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n + is the number of nodes in the graph :return: a list of nodes to attack """ @@ -219,7 +221,7 @@ def get_node_rnd(graph, k=3): def get_edge_line_ns(graph, k=3): """ - Get k edges to attack using Netshield by transforming the graph into a line graph + Get k edges to attack using Netshield by transforming the graph into a line graph :cite:`tong2010vulnerability,tong2012gelling` :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -237,7 +239,7 @@ def get_edge_line_ns(graph, k=3): def get_edge_line_pr(graph, k=3): """ - Get k edges to attack using PageRank by transforming the graph into a line graph + Get k edges to attack using PageRank by transforming the graph into a line graph :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -251,7 +253,7 @@ def get_edge_line_pr(graph, k=3): def get_edge_line_eig(graph, k=3): """ - Get k edges to attack using eigenvector centrality by transforming the graph into a line graph + Get k edges to attack using eigenvector centrality by transforming the graph into a line graph :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -265,7 +267,7 @@ def get_edge_line_eig(graph, k=3): def get_edge_line_deg(graph, k=3): """ - Get k edges to attack using degree centrality by transforming the graph into a line graph + Get k edges to attack using degree centrality by transforming the graph into a line graph :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -279,7 +281,7 @@ def get_edge_line_deg(graph, k=3): def get_edge_id(graph, k=3): """ - Get k edges to attack based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k edges to attack based on Initial Degree (ID) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -295,7 +297,7 @@ def get_edge_id(graph, k=3): def get_edge_rd(graph, k=3): """ - Get k edges to attack based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k edges to attack based on Recalculated Degree (RD) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -316,7 +318,7 @@ def get_edge_rd(graph, k=3): def get_edge_ib(graph, k=3, approx=np.inf): """ - Get k edges to attack based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k edges to attack based on Initial Betweenness (IB) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of edges to attack @@ -333,7 +335,7 @@ def get_edge_ib(graph, k=3, approx=np.inf): def get_edge_rb(graph, k=3, approx=np.inf): """ - Get k edges to attack based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k edges to attack based on Recalculated Betweenness (RB) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of edges to attack diff --git a/defenses.py b/defenses.py index 9c3f6c0..dafa82d 100644 --- a/defenses.py +++ b/defenses.py @@ -21,7 +21,7 @@ def run_defense_method(graph, method, k=3, seed=None): """ - Runs a specified defense on an undirected graph, returning a list of nodes to defend + Runs a specified defense on an undirected graph, returning a list of nodes to defend. :param graph: an undirected NetworkX graph :param method: a string representing one of the attack methods @@ -42,7 +42,7 @@ def run_defense_method(graph, method, k=3, seed=None): def get_defense_methods(): """ - Gets a list of available defense methods as a list of functions + Gets a list of available defense methods as a list of functions. :return: a list of all defense functions """ @@ -52,7 +52,7 @@ def get_defense_methods(): def get_defense_category(method): """ - Gets the defense category e.g., 'node', 'edge' defense + Gets the defense category e.g., 'node', 'edge' defense. :param method: a string representing the defense method :return: a string representing the defense type ('node' or 'edge') @@ -68,7 +68,7 @@ def get_defense_category(method): def get_node_ns(graph, k=3): """ - Get k nodes to defend based on the Netshield algorithm: http://tonghanghang.org/pdfs/icdm10_netshield.pdf + Get k nodes to defend based on the Netshield algorithm :cite:`tong2010vulnerability,chen2015node`. :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -81,7 +81,7 @@ def get_node_ns(graph, k=3): def get_node_pr(graph, k=3): """ - Get k nodes to defend based on top PageRank entries + Get k nodes to defend based on top PageRank entries :cite:`page1999pagerank`. :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -106,7 +106,7 @@ def get_node_eig(graph, k=3): def get_node_ib(graph, k=3, approx=np.inf): """ - Get k nodes to defend based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to defend based on Initial Betweenness (IB) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -121,7 +121,7 @@ def get_node_ib(graph, k=3, approx=np.inf): def get_node_rb(graph, k=3, approx=np.inf): """ - Get k nodes to defend based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to defend based on Recalculated Betweenness (RB) Removal :cite:`holme2002attack` :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -136,7 +136,7 @@ def get_node_rb(graph, k=3, approx=np.inf): def get_node_id(graph, k=3): """ - Get k nodes to defend based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to defend based on Initial Degree (ID) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -149,7 +149,7 @@ def get_node_id(graph, k=3): def get_node_rd(graph, k=3): """ - Get k nodes to defend based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf + Get k nodes to defend based on Recalculated Degree (RD) Removal :cite:`holme2002attack`. :param graph: an undirected NetworkX graph :param k: number of nodes to defend @@ -175,7 +175,6 @@ def get_node_rnd(graph, k=3): def get_central_edges(graph, k, method='eig'): """ Internal function to compute edge PageRank, eigenvector centrality and degree centrality - Based on: http://www.cs.cmu.edu/~htong/pdfs/cikm12_tong.pdf :param graph: undirected NetworkX graph :param k: int number of nodes to defend @@ -210,7 +209,7 @@ def get_central_edges(graph, k, method='eig'): def add_edge_pr(graph, k=3): """ - Get k edges to defend based on top edge PageRank entries + Get k edges to defend based on top edge PageRank entries :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to add @@ -225,7 +224,7 @@ def add_edge_pr(graph, k=3): def add_edge_eig(graph, k=3): """ - Get k edges to defend based on top edge eigenvector centrality entries + Get k edges to defend based on top edge eigenvector centrality entries :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to add @@ -240,7 +239,7 @@ def add_edge_eig(graph, k=3): def add_edge_degree(graph, k=3): """ - Add k edges to defend based on top edge degree centrality entries + Add k edges to defend based on top edge degree centrality entries :cite:`tong2012gelling`. :param graph: an undirected NetworkX graph :param k: number of edges to add @@ -280,7 +279,7 @@ def add_edge_rnd(graph, k=3): def add_edge_pref(graph, k=3): """ - Adds an edge connecting two nodes with the lowest degrees. + Adds an edge connecting two nodes with the lowest degrees :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of edges to add @@ -311,7 +310,7 @@ def add_edge_pref(graph, k=3): def rewire_edge_rnd(graph, k=3): """ - Removes a random edge and adds one using 'add_edge_rnd()' + Removes a random edge and adds one randomly :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of edges to rewire @@ -333,7 +332,7 @@ def rewire_edge_rnd(graph, k=3): def rewire_edge_rnd_neighbor(graph, k=3): """ - Removes a random edge and adds one using 'add_edge_rnd()' + Randomly selects a neighbor of a node and removes the edge; then adds a random edge :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of edges to rewire @@ -362,7 +361,7 @@ def rewire_edge_rnd_neighbor(graph, k=3): def rewire_edge_pref(graph, k=3): """ - Selects node with highest degree, randomly removes a neighbor; adds edge to random node in graph + Selects node with highest degree, randomly removes a neighbor; adds edge to random node in graph :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of edges to rewire @@ -391,7 +390,7 @@ def rewire_edge_pref(graph, k=3): def rewire_edge_pref_rnd(graph, k=3): """ - Selects an edge, disconnects the higher degree node, and reconnects to a random one. + Selects an edge, disconnects the higher degree node, and reconnects to a random one :cite:`beygelzimer2005improving`. :param graph: an undirected NetworkX graph :param k: number of edges to rewire diff --git a/docs/build/doctrees/attacks.doctree b/docs/build/doctrees/attacks.doctree index b76cb65033392b4853d55e9c819e4f9a630ff3b0..36ec1a1868e6b3b07618151191100192194ca88e 100644 GIT binary patch literal 97679 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 Pq=ai6Y&n1i(#`)LDy$;! delta 12848 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 OG*5!4(8n%j{r(MNSxZj< diff --git a/docs/build/doctrees/defenses.doctree b/docs/build/doctrees/defenses.doctree index fd21ebb1951816a089a1d1c06ab2956af71ac6ab..3b433de618baff2be6d11af32efa7e0e8d8fffc9 100644 GIT binary patch literal 100381 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 F{u{C<#^L|~ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 80f41eb449a0808f6ca27b5710d1df480c2f9c02..8a341aa6bfe05f131adb461db5e018c70e0cd2d7 100644 GIT binary patch delta 7845 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 QTCElvXPhiPdYhF0FV6miDF6Tf delta 5017 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 V82csbDvJwsnK_fhwBOkH{{Y(>uJ-@{ diff --git a/docs/build/doctrees/measures.doctree b/docs/build/doctrees/measures.doctree index 1282f710bb6944911f73afdd9c98ff296148d270..b28411cc9406d22348a8265dcf2f6355a4502840 100644 GIT binary patch literal 78078 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

Q;4EWqU<_Kj-=_wBG>1A`O6QnsKC_RnV6! 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

attacks.get_edge_ib(graph, k=3, approx=inf)
-

Get k edges to attack based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

+

Get k edges to attack based on Initial Betweenness (IB) Removal [13].

Parameters
    @@ -284,7 +284,7 @@
    attacks.get_edge_id(graph, k=3)
    -

    Get k edges to attack based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

    +

    Get k edges to attack based on Initial Degree (ID) Removal [13].

    Parameters
      @@ -301,7 +301,7 @@
      attacks.get_edge_line_deg(graph, k=3)
      -

      Get k edges to attack using degree centrality by transforming the graph into a line graph

      +

      Get k edges to attack using degree centrality by transforming the graph into a line graph [16].

      Parameters
        @@ -318,7 +318,7 @@
        attacks.get_edge_line_eig(graph, k=3)
        -

        Get k edges to attack using eigenvector centrality by transforming the graph into a line graph

        +

        Get k edges to attack using eigenvector centrality by transforming the graph into a line graph [16].

        Parameters
          @@ -335,7 +335,7 @@
          attacks.get_edge_line_ns(graph, k=3)
          -

          Get k edges to attack using Netshield by transforming the graph into a line graph

          +

          Get k edges to attack using Netshield by transforming the graph into a line graph [17,16]

          Parameters
            @@ -352,7 +352,7 @@
            attacks.get_edge_line_pr(graph, k=3)
            -

            Get k edges to attack using PageRank by transforming the graph into a line graph

            +

            Get k edges to attack using PageRank by transforming the graph into a line graph [16].

            Parameters
              @@ -369,7 +369,7 @@
              attacks.get_edge_rb(graph, k=3, approx=inf)
              -

              Get k edges to attack based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

              +

              Get k edges to attack based on Recalculated Betweenness (RB) Removal [13].

              Parameters
                @@ -387,7 +387,7 @@
                attacks.get_edge_rd(graph, k=3)
                -

                Get k edges to attack based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                +

                Get k edges to attack based on Recalculated Degree (RD) Removal [13].

                Parameters
                  @@ -438,17 +438,20 @@
                  attacks.get_node_ib(graph, k=3, approx=inf)
                  -

                  Get k nodes to attack based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                  +

                  Get k nodes to attack based on Initial Betweenness (IB) Removal [2].

                  Parameters
                  • graph – an undirected NetworkX graph

                  • k – number of nodes to attack

                  • -
                  • approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation

                  • +
                  • approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n

                  -
                  Returns
                  -

                  a list of nodes to attack

                  +
                  +

                  is the number of nodes in the graph

                  +
                  +
                  Returns
                  +

                  a list of nodes to attack

                  @@ -456,7 +459,7 @@
                  attacks.get_node_id(graph, k=3)
                  -

                  Get k nodes to attack based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                  +

                  Get k nodes to attack based on Initial Degree (ID) Removal [2].

                  Parameters
                    @@ -507,17 +510,20 @@
                    attacks.get_node_rb(graph, k=3, approx=inf)
                    -

                    Get k nodes to attack based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                    +

                    Get k nodes to attack based on Recalculated Betweenness (RB) Removal [2].

                    Parameters
                    • graph – an undirected NetworkX graph

                    • k – number of nodes to attack

                    • -
                    • approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation

                    • +
                    • approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n

                    -
                    Returns
                    -

                    a list of nodes to attack

                    +
                    +

                    is the number of nodes in the graph

                    +
                    +
                    Returns
                    +

                    a list of nodes to attack

                    @@ -525,7 +531,7 @@
                    attacks.get_node_rd(graph, k=3)
                    -

                    Get k nodes to attack based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                    +

                    Get k nodes to attack based on Recalculated Degree (RD) Removal [2].

                    Parameters
                    diff --git a/docs/build/html/defenses.html b/docs/build/html/defenses.html index f751948..68cd823 100644 --- a/docs/build/html/defenses.html +++ b/docs/build/html/defenses.html @@ -241,7 +241,7 @@
                    defenses.add_edge_degree(graph, k=3)
                    -

                    Add k edges to defend based on top edge degree centrality entries

                    +

                    Add k edges to defend based on top edge degree centrality entries [16].

                    Parameters
                      @@ -258,7 +258,7 @@
                      defenses.add_edge_eig(graph, k=3)
                      -

                      Get k edges to defend based on top edge eigenvector centrality entries

                      +

                      Get k edges to defend based on top edge eigenvector centrality entries [16].

                      Parameters
                        @@ -275,7 +275,7 @@
                        defenses.add_edge_pr(graph, k=3)
                        -

                        Get k edges to defend based on top edge PageRank entries

                        +

                        Get k edges to defend based on top edge PageRank entries [16].

                        Parameters
                          @@ -292,7 +292,7 @@
                          defenses.add_edge_pref(graph, k=3)
                          -

                          Adds an edge connecting two nodes with the lowest degrees.

                          +

                          Adds an edge connecting two nodes with the lowest degrees [2].

                          Parameters
                            @@ -326,8 +326,7 @@
                            defenses.get_central_edges(graph, k, method='eig')
                            -

                            Internal function to compute edge PageRank, eigenvector centrality and degree centrality -Based on: http://www.cs.cmu.edu/~htong/pdfs/cikm12_tong.pdf

                            +

                            Internal function to compute edge PageRank, eigenvector centrality and degree centrality

                            Parameters
                              @@ -345,7 +344,7 @@
                              defenses.get_defense_category(method)
                              -

                              Gets the defense category e.g., ‘node’, ‘edge’ defense

                              +

                              Gets the defense category e.g., ‘node’, ‘edge’ defense.

                              Parameters

                              method – a string representing the defense method

                              @@ -359,7 +358,7 @@
                              defenses.get_defense_methods()
                              -

                              Gets a list of available defense methods as a list of functions

                              +

                              Gets a list of available defense methods as a list of functions.

                              Returns

                              a list of all defense functions

                              @@ -387,7 +386,7 @@
                              defenses.get_node_ib(graph, k=3, approx=inf)
                              -

                              Get k nodes to defend based on Initial Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                              +

                              Get k nodes to defend based on Initial Betweenness (IB) Removal [13].

                              Parameters
                                @@ -408,7 +407,7 @@
                                defenses.get_node_id(graph, k=3)
                                -

                                Get k nodes to defend based on Initial Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                                +

                                Get k nodes to defend based on Initial Degree (ID) Removal [13].

                                Parameters
                                  @@ -425,7 +424,7 @@
                                  defenses.get_node_ns(graph, k=3)
                                  -

                                  Get k nodes to defend based on the Netshield algorithm: http://tonghanghang.org/pdfs/icdm10_netshield.pdf

                                  +

                                  Get k nodes to defend based on the Netshield algorithm [17,5].

                                  Parameters
                                    @@ -442,7 +441,7 @@
                                    defenses.get_node_pr(graph, k=3)
                                    -

                                    Get k nodes to defend based on top PageRank entries

                                    +

                                    Get k nodes to defend based on top PageRank entries [15].

                                    Parameters
                                      @@ -459,7 +458,7 @@
                                      defenses.get_node_rb(graph, k=3, approx=inf)
                                      -

                                      Get k nodes to defend based on Recalculated Betweenness Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                                      +

                                      Get k nodes to defend based on Recalculated Betweenness (RB) Removal [13]

                                      Parameters
                                        @@ -480,7 +479,7 @@
                                        defenses.get_node_rd(graph, k=3)
                                        -

                                        Get k nodes to defend based on Recalculated Degree Removal: https://arxiv.org/pdf/cond-mat/0202410.pdf

                                        +

                                        Get k nodes to defend based on Recalculated Degree (RD) Removal [13].

                                        Parameters
                                          @@ -519,7 +518,7 @@
                                          defenses.rewire_edge_pref(graph, k=3)
                                          -

                                          Selects node with highest degree, randomly removes a neighbor; adds edge to random node in graph

                                          +

                                          Selects node with highest degree, randomly removes a neighbor; adds edge to random node in graph [2].

                                          Parameters
                                            @@ -536,7 +535,7 @@
                                            defenses.rewire_edge_pref_rnd(graph, k=3)
                                            -

                                            Selects an edge, disconnects the higher degree node, and reconnects to a random one.

                                            +

                                            Selects an edge, disconnects the higher degree node, and reconnects to a random one [2].

                                            Parameters
                                              @@ -553,7 +552,7 @@
                                              defenses.rewire_edge_rnd(graph, k=3)
                                              -

                                              Removes a random edge and adds one using ‘add_edge_rnd()’

                                              +

                                              Removes a random edge and adds one randomly [2].

                                              Parameters
                                                @@ -570,7 +569,7 @@
                                                defenses.rewire_edge_rnd_neighbor(graph, k=3)
                                                -

                                                Removes a random edge and adds one using ‘add_edge_rnd()’

                                                +

                                                Randomly selects a neighbor of a node and removes the edge; then adds a random edge [2].

                                                Parameters
                                                  @@ -587,7 +586,7 @@
                                                  defenses.run_defense_method(graph, method, k=3, seed=None)
                                                  -

                                                  Runs a specified defense on an undirected graph, returning a list of nodes to defend

                                                  +

                                                  Runs a specified defense on an undirected graph, returning a list of nodes to defend.

                                                  Parameters
                                                    diff --git a/docs/build/html/measures.html b/docs/build/html/measures.html index 6fa5c32..7ee73ae 100644 --- a/docs/build/html/measures.html +++ b/docs/build/html/measures.html @@ -201,7 +201,7 @@

                                                    The larger the algebraic connectivity, the more robust the graph. This is due to it’s close connection to edge connectivity, where it serves as a lower bound: 0 < \(u_2\) < node connectivity < edge connectivity. This means that a network with larger algebraic connectivity -is harder to disconnect [10,5].

                                                    +is harder to disconnect [11,6].

                                                    Parameters

                                                    graph – undirected NetworkX graph

                                                    @@ -218,7 +218,7 @@

                                                    The global clustering coefficient is based on the number of triplets of nodes in the graph, and provides an indication of how well nodes tend to cluster together. The larger the average global clustering coefficient, the more robust the graph i.e., more triangles –> -better connected –> more robust graph [5].

                                                    +better connected –> more robust graph [6].

                                                    Parameters

                                                    graph – undirected NetworkX graph

                                                    @@ -235,7 +235,7 @@

                                                    The average distance between all pairs of nodes in the graph. The smaller the average shortest path distance, the more robust the graph. This can be viewed through the lens of network connectivity i.e., -smaller avg. distance –> better connected graph [5].

                                                    +smaller avg. distance –> better connected graph [6].

                                                    Undefined for disconnected graphs.

                                                    Parameters
                                                    @@ -253,7 +253,7 @@

                                                    Similar to vertex betweenness, edge betweenness is defined as the number of shortest paths that pass through an edge e out of the total possible shortest paths. The smaller the average edge betweenness, the more robust the graph. We can view this as the -load of the network being better distributed and less dependent on a few edges [5].

                                                    +load of the network being better distributed and less dependent on a few edges [6].

                                                    Parameters
                                                      @@ -273,7 +273,7 @@

                                                      The average inverse distance between all pairs of nodes in the graph. The larger the average inverse shortest path distance, the more robust the graph. This can be viewed through the lens of network connectivity i.e., larger average inverse distance -–> better connected graph –> more robust graph [5].

                                                      +–> better connected graph –> more robust graph [6].

                                                      Resolves the issue of not working for disconnected graphs in the avg_distance() function.

                                                      Parameters
                                                      @@ -291,7 +291,7 @@

                                                      The average vertex betweenness of a graph is the summation of vertex betweenness for every node in the graph. The smaller the average vertex betweenness, the more robust the graph. We can view this as the load of the network being better distributed and -less dependent on a few nodes [5].

                                                      +less dependent on a few nodes [6].

                                                      Parameters
                                                        @@ -310,7 +310,7 @@ measures.diameter(graph)

                                                        The diameter of a connected graph is the longest shortest path between all pairs of nodes. The smaller the diameter the more robust the graph i.e., smaller diameter –> -better connected graph –> more robust graph [5].

                                                        +better connected graph –> more robust graph [6].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -326,7 +326,7 @@ measures.edge_connectivity(graph)

                                                        Measures the minimal number of edges that can be removed to disconnect the graph. Larger edge connectivity –> harder to disconnect graph –> -more robust graph [7].

                                                        +more robust graph [8].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -343,7 +343,7 @@

                                                        This measure views a graph as an electrical circuit where an edge \((i, j)\) corresponds to a resister of \(r_{ij} = 1\) Ohm and a node i corresponds to a junction. We say the effective graph resistance R is the sum of resistances for all distinct pairs of vertices -The smaller the effective resistance, the more robust the graph [6,11,5].

                                                        +The smaller the effective resistance, the more robust the graph [6,7,12].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -358,7 +358,7 @@
                                                        measures.generalized_robustness_index(graph, k=30)

                                                        This can be considered a fast approximation of spectral scaling. The smaller the value, the more robust the graph. -Also helps determine if a graph has many bridges (bad for robustness) [12].

                                                        +Also helps determine if a graph has many bridges (bad for robustness) [14].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -400,7 +400,7 @@ measures.natural_connectivity(graph, k=inf)

                                                        Natural connectivity has a physical and structural interpretation that is tied to the connectivity properties of a network, identifying alternative pathways in a network through the weighted number of closed walks. -The larger the natural connectivity (average eigenvalue of adjacency matrix), the more robust the graph [3].

                                                        +The larger the natural connectivity (average eigenvalue of adjacency matrix), the more robust the graph [4].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -416,7 +416,7 @@ measures.node_connectivity(graph)

                                                        Measures the minimal number of vertices that can be removed to disconnect the graph. Larger vertex (node) connectivity –> harder to disconnect graph -–> more robust graph [7].

                                                        +–> more robust graph [8].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -433,7 +433,7 @@

                                                        The number of spanning trees T is the number of unique spanning trees that can be found in a graph. The larger the number of spanning trees, the more robust the graph. This can be viewed from the perspective of network connectivity, where a larger set of -spanning trees means more alternative pathways in the network [1,5].

                                                        +spanning trees means more alternative pathways in the network [1,6].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -447,7 +447,7 @@
                                                        measures.odd_subgraph_centrality(i, lam, u)
                                                        -

                                                        Calculates the number of odd length closed walks that a node participates in [9]. +

                                                        Calculates the number of odd length closed walks that a node participates in [10]. Used in the calculation of spectral scaling and generalized robustness index.

                                                        Parameters
                                                        @@ -489,7 +489,7 @@ (\(\lambda_1 - \lambda_2\)) is called the spectral gap \(\lambda_d\). The larger the spectral gap, the more robust the graph. Has an advantage over spectral radius since it accounts for -undesirable bridges in the network [2,12].

                                                        +undesirable bridges in the network [3,14].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -505,7 +505,7 @@ measures.spectral_radius(graph)

                                                        The largest eigenvalue \(\lambda_1\) of an adjacency matrix A is called the spectral radius. The larger the spectral radius, the more robust the graph. This can be viewed from its close relationship to the -“path” or “loop: capacity in a network [13,4].

                                                        +“path” or “loop: capacity in a network [5,17].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        @@ -519,8 +519,8 @@
                                                        measures.spectral_scaling(graph, k=inf)
                                                        -

                                                        Spectral scaling is a combination of spectral gap and subgraph centrality that helps determine if a graph has -many bridges (bad for robustness). The smaller the value, the more robust the graph [8].

                                                        +

                                                        Spectral scaling is a combination of the spectral gap and subgraph centrality. Spectral scaling takes into account +if a graph has many bridges (bad for robustness). The smaller the value, the more robust the graph [9].

                                                        Parameters

                                                        graph – undirected NetworkX graph

                                                        diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 65cbc71..6edab41 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["attacks","bibliography","cascading","defenses","diffusion","graphs","index","intro","measures","modules","simulations","tutorials/tutorial-1","tutorials/tutorial-2","tutorials/tutorial-3","tutorials/tutorial-4","tutorials/tutorial-5","tutorials/tutorials","utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":7,sphinx:56},filenames:["attacks.rst","bibliography.rst","cascading.rst","defenses.rst","diffusion.rst","graphs.rst","index.rst","intro.rst","measures.rst","modules.rst","simulations.rst","tutorials/tutorial-1.rst","tutorials/tutorial-2.rst","tutorials/tutorial-3.rst","tutorials/tutorial-4.rst","tutorials/tutorial-5.rst","tutorials/tutorials.rst","utils.rst"],objects:{"":{attacks:[0,0,0,"-"],cascading:[2,0,0,"-"],defenses:[3,0,0,"-"],diffusion:[4,0,0,"-"],graphs:[5,0,0,"-"],measures:[8,0,0,"-"],simulations:[10,0,0,"-"],utils:[17,0,0,"-"]},"attacks.Attack":{reset_simulation:[0,2,1,""],run_single_sim:[0,2,1,""],track_simulation:[0,2,1,""]},"cascading.Cascading":{reset_simulation:[2,2,1,""],run_single_sim:[2,2,1,""],track_simulation:[2,2,1,""]},"defenses.Defense":{reset_simulation:[3,2,1,""],run_single_sim:[3,2,1,""],track_simulation:[3,2,1,""]},"diffusion.Diffusion":{get_effective_strength:[4,2,1,""],reset_simulation:[4,2,1,""],run_single_sim:[4,2,1,""],track_simulation:[4,2,1,""]},"simulations.Simulation":{child_class:[10,2,1,""],create_simulation_gif:[10,2,1,""],draw_graph:[10,2,1,""],get_effective_strength:[10,2,1,""],get_graph_coordinates:[10,2,1,""],get_plot_title:[10,2,1,""],get_visual_settings:[10,2,1,""],plot_graph_transition:[10,2,1,""],plot_network:[10,2,1,""],plot_results:[10,2,1,""],reset_simulation:[10,2,1,""],run_simulation:[10,2,1,""],run_single_sim:[10,2,1,""]},attacks:{Attack:[0,1,1,""],get_attack_category:[0,3,1,""],get_attack_methods:[0,3,1,""],get_edge_ib:[0,3,1,""],get_edge_id:[0,3,1,""],get_edge_line_deg:[0,3,1,""],get_edge_line_eig:[0,3,1,""],get_edge_line_ns:[0,3,1,""],get_edge_line_pr:[0,3,1,""],get_edge_rb:[0,3,1,""],get_edge_rd:[0,3,1,""],get_edge_rnd:[0,3,1,""],get_node_eig:[0,3,1,""],get_node_ib:[0,3,1,""],get_node_id:[0,3,1,""],get_node_ns:[0,3,1,""],get_node_pr:[0,3,1,""],get_node_rb:[0,3,1,""],get_node_rd:[0,3,1,""],get_node_rnd:[0,3,1,""],main:[0,3,1,""],run_attack_method:[0,3,1,""]},cascading:{Cascading:[2,1,1,""],main:[2,3,1,""]},defenses:{Defense:[3,1,1,""],add_edge_degree:[3,3,1,""],add_edge_eig:[3,3,1,""],add_edge_pr:[3,3,1,""],add_edge_pref:[3,3,1,""],add_edge_rnd:[3,3,1,""],get_central_edges:[3,3,1,""],get_defense_category:[3,3,1,""],get_defense_methods:[3,3,1,""],get_node_eig:[3,3,1,""],get_node_ib:[3,3,1,""],get_node_id:[3,3,1,""],get_node_ns:[3,3,1,""],get_node_pr:[3,3,1,""],get_node_rb:[3,3,1,""],get_node_rd:[3,3,1,""],get_node_rnd:[3,3,1,""],main:[3,3,1,""],rewire_edge_pref:[3,3,1,""],rewire_edge_pref_rnd:[3,3,1,""],rewire_edge_rnd:[3,3,1,""],rewire_edge_rnd_neighbor:[3,3,1,""],run_defense_method:[3,3,1,""]},diffusion:{Diffusion:[4,1,1,""],main:[4,3,1,""]},graphs:{as_733:[5,3,1,""],barbasi_albert:[5,3,1,""],c4_graph:[5,3,1,""],ca_astro_ph:[5,3,1,""],ca_grqc:[5,3,1,""],ca_hep_th:[5,3,1,""],cit_hep_th:[5,3,1,""],clustered_scale_free:[5,3,1,""],dblp:[5,3,1,""],electrical:[5,3,1,""],email_eu_all:[5,3,1,""],enron_email:[5,3,1,""],erdos_reyni:[5,3,1,""],get_graph_options:[5,3,1,""],get_graph_urls:[5,3,1,""],graph_loader:[5,3,1,""],k4_1_graph:[5,3,1,""],k4_2_graph:[5,3,1,""],karate:[5,3,1,""],o4_graph:[5,3,1,""],oregeon_1:[5,3,1,""],p2p_gnuetella08:[5,3,1,""],p4_graph:[5,3,1,""],roadnet_ca:[5,3,1,""],s4_graph:[5,3,1,""],two_c4_0_bridge:[5,3,1,""],two_c4_1_bridge:[5,3,1,""],two_c4_2_bridge:[5,3,1,""],two_c4_3_bridge:[5,3,1,""],watts_strogatz:[5,3,1,""],wdn_ky2:[5,3,1,""],wiki_vote:[5,3,1,""]},measures:{algebraic_connectivity:[8,3,1,""],average_clustering_coefficient:[8,3,1,""],avg_distance:[8,3,1,""],avg_edge_betweenness:[8,3,1,""],avg_inverse_distance:[8,3,1,""],avg_vertex_betweenness:[8,3,1,""],diameter:[8,3,1,""],edge_connectivity:[8,3,1,""],effective_resistance:[8,3,1,""],generalized_robustness_index:[8,3,1,""],get_measures:[8,3,1,""],largest_connected_component:[8,3,1,""],natural_connectivity:[8,3,1,""],node_connectivity:[8,3,1,""],num_spanning_trees:[8,3,1,""],odd_subgraph_centrality:[8,3,1,""],run_measure:[8,3,1,""],spectral_gap:[8,3,1,""],spectral_radius:[8,3,1,""],spectral_scaling:[8,3,1,""]},simulations:{Simulation:[10,1,1,""]},utils:{curved_edges:[17,3,1,""],get_adjacency_spectrum:[17,3,1,""],get_laplacian:[17,3,1,""],get_laplacian_spectrum:[17,3,1,""],get_sparse_graph:[17,3,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"001":[7,15],"00208":[4,15],"005":15,"0202410":[0,3],"046105":1,"100":[2,7,14],"1000":[7,11],"1091":1,"1096":1,"113":1,"126":1,"1311":1,"1395":1,"1425":1,"1970":7,"1973":1,"2000":[7,14],"2005":1,"2006":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2491":1,"2506":1,"268":1,"281":1,"28th":1,"298":1,"300":11,"305":1,"325":1,"333":1,"3751":1,"3756":1,"400":7,"435":1,"48h":1,"4999":7,"5000":[4,7,15],"5064":1,"563":1,"574":1,"733":5,"814":12,"942":1,"953":1,"999":11,"break":[1,11,12],"class":[0,2,3,4,10],"default":11,"final":12,"float":[2,4,8,10],"function":[0,3,7,8,10,11,12,16,17],"import":[0,2,3,4,7,11,12,13,14,15],"int":[3,7,11,12,13,14],"new":5,"return":[0,3,4,5,8,10,11,17],"true":[7,11,12,13,14,15,17],"while":[7,12,14],For:[5,7,11,14,15],Has:8,Not:7,SIS:[4,15],The:[1,4,7,8,10,11,12,13,14,15],Then:[10,13],There:[12,13,14],Used:8,Using:7,__main__:11,__name__:11,_approx:11,_epidem:15,abdol:1,abil:[7,13,15],abl:[12,14],abov:[11,14,15],abs:11,acceler:7,accord:[7,8,10,14],account:[8,11],across:[7,11,12],act:12,add:[3,5,12,13],add_edge_degre:3,add_edge_eig:3,add_edge_pr:3,add_edge_pref:3,add_edge_preferenti:13,add_edge_random:13,add_edge_rnd:3,added:[3,13],adding:[5,11,13],addit:[0,2,3,7,11,12,13,14,15],aditya:1,adjac:[8,11,17],advantag:[8,11],affect:11,after:[5,8,12,13,15],again:[4,15],against:14,aggreg:12,akoglu:1,albert:[5,7],algebra:[1,8],algebraic_connect:8,algorithm:[0,1,3,10],all:[0,3,5,7,8,10,11,12],allow:[5,7,8,14],almost:13,along:11,also:[7,8,14],altern:[7,8],altogeth:13,alwai:13,amin:1,amount:[2,12,14],anaconda:7,ani:[5,7,15],anomali:1,append:11,applic:[1,11,13],approx:[0,3],approx_result:11,approxim:[0,3,8,12,16],approximation_:11,arang:[14,15],aris:14,arpita:1,arrai:13,arxiv:[0,1,3],as19971108:5,as_733:[5,15],aspect:16,assist:15,associ:11,astroph:5,atlas2:10,attach:[0,5],attack:[1,2,3,6,7,9,10,13,14,16],attack_approx:[7,12,13,14],attacks_run:12,attempt:15,attent:12,augment:[7,15],auto:7,autonom:15,auxiliari:14,avail:[0,3,5,8],averag:[8,10,11,12,13],average_clustering_coeffici:8,average_edge_between:11,average_edge_betweenness_approx:11,average_vertex_between:11,average_vertex_betweenness_approx:11,avg:8,avg_dist:8,avg_edge_between:8,avg_inverse_dist:8,avg_vertex_between:[8,11],axes:11,axi:11,b_list:15,b_u:11,b_v:12,background:[6,15],bad:8,bar:11,bara:1,barabasi:[5,7],barbasi_albert:5,base:[0,2,3,4,7,8,10,11,12,13,14],baselin:15,becom:[4,12,14,15],been:15,begin:[7,12,14],being:[4,8],believ:7,below:[7,11,12,13,14,15],benefit:12,best:13,beta:15,better:[8,11,13],betweeen:11,between:[0,2,3,4,8,11,12,13,14,15],beyondbeneath:17,bezier:17,bezier_precis:17,bibliographi:6,bipart:1,birth:[4,15],blackout:14,block:11,blue:[7,14],both:[7,11,14],bottleneck:11,bottom:[14,15,17],bound:8,boyd:1,bridg:[8,11,12],briefli:11,built:7,bundl:[7,10,14,15],c4_graph:5,c_v:14,ca_astro_ph:5,ca_grqc:5,ca_hep_th:5,calcul:[8,11],calcult:11,call:[7,8],cambridg:1,campaign:15,can:[7,8,10,11,12,13,14,15],candid:12,capac:[7,8,14],captur:15,carefulli:12,cascad:[6,9,10,12,13,16],categor:13,categori:[0,3,11,13],caus:[7,12,14],cdc:1,cdot:15,central:[0,3,8,11,12,13,14],certain:[8,12],challeng:7,chan:1,charalampo:1,chau:1,chen:1,child:10,child_class:10,chines:1,chosen:4,christo:1,cikm12_tong:3,circuit:[8,11],cit:5,cit_hep_th:5,clf:[12,13,14,15],clone:7,close:[8,11,15],closer:11,cluster:[5,8,11],clustered_scale_fre:5,cmap:10,cmu:3,code:[11,12,13,14,15,17],coeffici:[8,11],collaps:[7,14],collect:[10,12,13,15],color:[7,10,14],com:[5,7,17],combin:[8,11],come:[7,12],common:[7,11,13],commun:[1,14],compar:[12,13,16],comparison:[11,15],compil:10,complet:5,complex:[1,7],compon:[5,7,8,12],comput:[3,7,12,15,17],computation:11,concept:15,cond:[0,3],condens:1,condit:[7,12,14],confer:1,configur:[14,15],connect:[1,3,5,7,8,11,12,13,15],consid:[7,8,11,12,13,14],contain:[5,7,8,10,11,12,13,15],content:6,continu:7,contrast:12,control:1,coordin:10,copi:15,core:16,correl:11,correspond:[8,10,11,12],cost:13,counterpart:[7,11],creaet:[7,14],creat:[7,12,14,15],create_simulation_gif:10,creation:5,critic:[7,12,14,15],cross:7,csf:11,csr:17,cure:4,current:[0,2,3,4,10],curv:[10,17],curved_edg:17,custom:5,cycl:5,czechoslovak:1,damag:[7,12],dark:[7,14],data:[1,5,11],dataset:[5,7,14],dblp:5,death:[4,15],decid:10,decis:[1,12],decreas:[11,15],def:[11,12,13,14,15],defaultdict:[12,13,14,15],defend:[0,3,6,7,14,15,16],defens:[0,6,7,9,10,13,14,15],defin:[7,8,11],definit:7,degre:[0,1,3,12,13],delai:14,delta:15,delta_v:12,demand:14,denot:11,depend:[8,11,12],depth:[11,16],describ:11,design:[7,14],desir:11,destroi:12,detail:7,detect:1,determin:[8,11],diagon:5,diamet:8,diamond:5,dictionari:[3,5],differ:[8,11,16],diffus:[6,7,9,10,15],directori:7,disast:7,disciplinari:7,disconnect:[3,5,8,12,13],discoveri:[1,7],discuss:[11,12,14],diseas:[7,15],disrupt:12,dissemin:[6,7,16],dist_ratio:17,distanc:8,distinct:[0,3,8,11],distribut:[1,8,11,12,13,14],dive:15,divers:7,document:5,don:7,down:12,download:[5,7],draw:[10,14],draw_graph:10,due:[7,8],duen:1,dure:7,each:[0,2,3,4,5,7,10,11,12,13,14,15,16],earli:7,easi:7,edg:[0,1,3,5,8,10,11,12,13,15,17],edge_attack:12,edge_connect:8,edge_defens:13,edge_defense_run:13,edge_styl:[7,12,13,14,15],edu:[3,5],effect:[1,4,7,8,11,12,13,14,15],effective_resist:[7,8,11],effective_resistance_approx:11,efficaci:[11,12],effici:1,eig:3,eigenpair:17,eigenvalu:[4,8,11,17],eigenvector:[0,3,8,11,13,17],eigvals_onli:17,electr:[5,7,8,11,14],eliassi:1,ellen:1,els:[11,12,14,15],email:5,email_eu_al:5,enabl:[14,15,17],end:[11,14],endem:15,enemi:7,engin:[1,7],enron:5,enron_email:5,entiti:[6,7,13,16],entri:[0,3],enumer:[11,14,15],environ:7,epidem:15,equip:[7,12],equival:12,erdo:5,erdos_reyni:5,ernesto:1,eros:7,error:[8,11],esfahanian:1,estim:1,estrada:1,etc:13,euall:5,european:1,evalu:[8,13],evaluat:7,evenli:11,everi:[0,4,8,11],exampl:[5,6,12,15],exist:5,exist_ok:[11,12,13,14,15],expans:[1,11],expect:13,experi:[7,14],extend:11,extens:11,extra:14,fa_it:[7,12,13,14,15],fact:[11,13],factor:4,fail:[7,14],failur:[2,6,10,12,13,16],fall:[11,12],faloutso:1,fals:[7,12,13,14,15,17],far:12,fast:[1,8,11,12],feasibl:11,few:[7,8,12,14,15],fiedler:1,field:7,fig:11,figsiz:[11,12,13,14,15],figur:[7,11,12,13,14,15],file:[7,10,14],find:[11,17],first:[4,5,7,11],fix:5,flu:15,focu:[12,14],folder:7,follow:[7,11,12,15],forc:10,force_atla:[7,14,15],forese:7,formal:11,format:[5,11,12,13,14,15,17],found:8,four:[10,12],frac:[11,15],fraction:[8,14],fractur:12,fragkisko:1,frame:[7,14],framework:[1,7],free:[5,11],fresh:7,from:[5,7,8,11,12,13,14,15,17],full:11,fundament:7,gap:[8,11],gather:11,gener:[1,5,7,8,11,12,13],generalized_robustness_index:8,geq:14,get:[0,3,4,5,7,10,16,17],get_adjacency_spectrum:17,get_attack_categori:0,get_attack_method:0,get_central_edg:3,get_defense_categori:3,get_defense_method:3,get_edge_ib:0,get_edge_id:0,get_edge_line_deg:0,get_edge_line_eig:0,get_edge_line_n:0,get_edge_line_pr:0,get_edge_rb:0,get_edge_rd:0,get_edge_rnd:0,get_effective_strength:[4,10,15],get_graph_coordin:10,get_graph_opt:5,get_graph_url:[5,7],get_laplacian:17,get_laplacian_spectrum:17,get_measur:8,get_node_eig:[0,3],get_node_ib:[0,3],get_node_id:[0,3],get_node_n:[0,3],get_node_pr:[0,3],get_node_rb:[0,3],get_node_rd:[0,3],get_node_rnd:[0,3],get_plot_titl:10,get_sparse_graph:17,get_visual_set:10,getcwd:[11,12,13,14,15],ghosh:1,gif_anim:[7,12,13,14,15],gif_snap:[7,12,14,15],git:7,github:[7,17],given:15,global:[8,12],gnutella08:5,goal:7,goe:[7,14],going:11,good:[0,3,8,11],govern:14,gradient:[7,14],graph:[0,1,2,3,4,6,8,9,10,11,12,13,14,15,17],graph_load:[5,7,11,12,13,14,15],graph_result:11,graph_typ:[5,7,11,12,13],grid:[7,14],group:11,grqc:5,guez:1,hack:7,hand:[13,15],handl:14,hanghang:1,harder:8,has:[4,7,8,11,12,13,14,15],hau:1,have:[11,14,15],heal:15,held:1,help:[7,8,13,14,15,16],helper:[7,10,12],hepth:5,here:7,heurist:[7,13],high:[7,11,12,13,14],higher:[3,7,13,14],highest:[3,12],highli:[7,11,12],highlight:[13,15,16],histori:7,horng:1,hossein:1,hovareshti:1,how:[7,8,11,12,13,14,15],howev:[7,11,12,14],html:5,htong:3,http:[0,3,5,7,17],icdm10_netshield:[0,3],id_nod:[0,3,14],idea:7,ideal:13,identifi:[8,12,13],idx:[14,15],ieee:1,iii:[12,13],imag:[7,14],immun:1,implement:[5,10,11,12,14],improv:13,includ:[11,13],increas:[13,14,15],increment:11,independ:13,index:[6,8,11],indic:[7,8,11,14],induc:14,inf:[0,3,8,11,17],infect:[4,7,15],infecti:15,inform:[0,2,3,4,10,12,13,17],ing:7,initi:[0,2,3,4,12,13,14],innov:7,insid:7,insight:7,instal:6,instead:12,integ:[0,2,3,8],interconnect:7,intern:[1,3,17],interplai:1,interpret:8,introduct:6,intuit:11,invers:[8,11],investig:7,issu:[7,8],item:[12,13,14,15],iter:[0,2,3,4,10],its:[1,5,8,12,13,14],itself:10,jamakov:1,john:1,join:5,jointli:1,journal:1,juan:1,junction:[8,11],just:[11,14],k4_1_graph:5,k4_2_graph:5,k_a:[7,13,14],k_avg:11,k_d:[0,3,7,14],k_start:11,k_step:11,k_valu:11,karat:5,karate_club_graph:5,keep:[0,2,3,4,5],kei:[7,12,13,14],kentucki:[12,13],kirchoff:11,klein:11,knowledg:[1,7,13],known:[11,13],konect:5,kooij:1,kwarg:[0,2,3,4,5,10],l_max:14,l_v:14,label:[11,12,13,14,15],lack:11,lai:10,lam:8,lambda_1:[8,11,15],lambda_2:8,lambda_:15,lambda_d:8,laplacian:[11,17],larg:[1,8,10,11,13],larger:[7,8,14,15],largest:[5,7,8,12],largest_connected_compon:[7,8,14,15],law:11,layout:10,lcc:[12,13],lead:7,left:[12,15],legend:[11,12,13,14,15],leman:1,len:[7,8,11,12,13,14,15],length:[8,11],less:[8,12,13],let:[12,15],level:13,leverag:15,like:[14,15],line:[0,14,15],line_label:14,linear:1,link:[5,7],linux:7,list:[0,3,5,7,8,10,11,12,13,14,15],littl:15,load:[2,5,7,8,11,14],loc:11,local:12,log:[11,15],longest:8,look:[7,12],loop:8,low:[7,11,12,13,14],lower:8,lowest:[3,13],mac:7,made:7,main:[0,2,3,4,7,14],maintain:14,major:12,make:[1,12],makedir:[11,12,13,14,15],malliaro:1,mani:[8,11,12,14,15],manipul:1,market:15,mat:[0,3],mathemat:1,matplotlib:[10,11,12,13,15],matrix:[8,11,17],matter:1,max:14,maxim:[7,12,15],maximum:[2,14],mean:[8,11,15],measur:[0,1,6,9,12,13,16],measures_graph:11,measures_spectr:11,mechan:[13,14,15],meet:14,megalooikonom:1,mention:7,method:[0,3,7,11,12,13,15],metric_nam:11,mieghem:1,min:[7,15],mine:1,minim:[1,8,15],miroslav:1,miss:7,mitig:13,model:[4,5,10,14,15],modifi:13,modul:6,monitor:[13,15],more:[8,11,15],most:[7,12,14],motiv:6,mp4:[7,10,14],mu_i:11,much:11,multipl:[12,14,15],must:5,n_rm:[12,13],n_s:11,name:10,natur:[7,8,11,12,14],natural_connect:[8,11],natural_connectivity_approx:11,ncol:11,nearest:5,nearli:[7,15],neighbor:[3,4,5,12,13,14,15],neq:11,netshield:[0,3,7,15],network:[1,2,5,6,8,10,11,14,15,16],networkx:[0,2,3,5,8,17],next:[11,12],node:[0,1,2,3,4,5,7,8,10,11,12,13,14,15],node_attack:12,node_connect:8,node_styl:[7,12,13,14,15],nodes:14,non:[4,16],none:[0,3,5,7,8,12,13,14,15],normal:[7,12,14],now:[11,12,15],ns_node:[7,15],num_measur:11,num_spanning_tre:8,number:[0,2,3,5,7,8,10,11,12,15,17],number_spanning_tre:11,number_spanning_trees_approx:11,numer:[7,11],numpi:[11,15],o4_graph:5,object:10,observ:[7,12,13,14],obtain:[0,3,12,17],obust:7,occur:[7,8,12,14,15],odd:[8,11],odd_subgraph_centr:8,off:[7,11,14],offens:7,offlin:14,often:[12,14],oftentim:7,ohm:[8,11],one:[0,3,7,11,12,13,15],onli:[5,12,14,15,17],oolbox:7,oper:[7,13,14],opportun:7,opsahl:5,optim:[1,7,13],option:[0,2,3,5],order:[0,3,5,11,12,14,15],oregeon_1:5,oregon1_010331:5,oregon:15,oregon_1:5,org:[0,3,5],origin:[7,11,14,17],orthogon:13,other:[13,15],our:[7,12],out:[8,10,11],outbreak:15,outperform:13,output:10,over:[7,8,10,11,12,13,14,15],overhead:12,overload:[7,14],overview:13,p2p:5,p2p_gnuetella08:5,p4_graph:5,page:[1,6],pagerank:[0,3,13],pair:[8,11],param:[7,11,12,13,14,15],paramet:[0,2,3,4,5,8,10,11,12,17],parent:[0,2,3,10],part:7,particip:[8,11],particular:[13,15],pass:[8,11],path:[5,8,11,12],pathcollect:10,pathwai:8,pdf:[0,3,11,12,13,14,15],pedram:1,perform:13,period:15,perspect:[7,8],physic:[1,8],piec:12,place:7,plot:[7,10,11,12,13,14,15],plot_graph_transit:10,plot_network:10,plot_result:[7,10,11,12,13,14,15],plot_transit:[7,12,13,14,15],plt:[11,12,13,14,15],polar:17,popul:7,pos:[10,17],posit:10,possibl:[8,11,12,14],potenti:7,power:[7,14],powergrid:5,practic:11,prakash:1,precis:[8,11,17],preferenti:13,preprint:1,preprocess:5,present:14,press:1,prevent:[13,14],previou:[14,15],primari:12,print:[7,11,12,13],priori:13,probabl:[4,5,15],problem:7,proceed:1,process:[5,12,14,15],product:14,promin:15,propag:15,propaganda:7,properti:[5,8,11],protect:14,prove:11,provid:[7,8,10,13,16],pyplot:[11,12,13,15],python:7,qualiti:11,quantifi:7,quickli:7,rabil:7,rad:1,radiu:[4,7,8,15],randic:11,random:[3,4,5,11,12,13,17],randomli:[0,3,7,11,13],rang:[11,12,13],raph:7,rate:[4,15],rb_node:[7,12,13,14],reason:11,recalcul:[0,3,12],reconnect:[3,13],recov:[4,7,15],red:[7,12,14],redistribut:14,reduc:[7,12,13,15],redund:[2,14],refer:5,region:12,regul:7,regularli:12,relationship:[8,15],reli:12,remain:[12,15],remit:7,remov:[0,3,8,12,13,15],repeat:12,replac:11,repres:[0,2,3,5,7,8,10,11,12,14],reproduc:[0,3,7],requir:[13,14,15],research:7,reserv:14,reset:[0,2,3,4],reset_simul:[0,2,3,4,10],resist:[1,7,8,11],resolv:8,respect:12,result:[7,10,11,12,13,14,15],result_norm:[14,15],result_typ:11,resurg:7,review:1,rewir:[1,3,5,13,15],rewire_edge_pref:3,rewire_edge_pref_rnd:3,rewire_edge_preferenti:13,rewire_edge_preferential_random:13,rewire_edge_random:13,rewire_edge_random_neighbor:13,rewire_edge_rnd:3,rewire_edge_rnd_neighbor:3,reyni:5,rich:7,right:[11,12,15],rightarrow:14,ring:5,rnd:12,roadnet:5,roadnet_ca:5,robert:1,robust:[1,6,8,13,16],robust_measur:[7,14,15],robustifi:13,rodr:1,roughli:12,round:11,rout:7,run:[0,2,3,4,5,7,8,10,11,12,13,14,15],run_analysi:11,run_attack_method:0,run_defense_method:3,run_epidemic_experi:15,run_measur:[7,8,11],run_simul:[7,10,12,13,14,15],run_single_sim:[0,2,3,4,10],s4_graph:5,saberi:1,sabotag:7,safreita1:7,sai:[8,11,15],same:[12,13],save:[7,10,14],save_dir:[11,12,13,14,15],savefig:[11,12,13,14,15],sc_:11,scale:[5,7,8,11,14],scheme:10,scienc:7,scipi:17,search:6,second:8,section:7,see:[0,2,3,11,12],seed:[0,3,5,7,11,12,13,14,15],select:[0,3,7,11,12,13,14],separ:12,seri:[7,14],serv:8,set:[0,3,8,10,11,12,14,15],set_titl:11,set_xlabel:11,set_ylabel:11,set_yscal:11,sever:[12,13],share:10,shortest:[8,11],show:[7,11,12,13,14,15],showcas:12,shown:[13,15],siam:1,signific:[7,12],sim_info:10,similar:8,simpl:7,simpli:11,simul:[0,2,3,4,6,9,12,14,15],simultan:11,sinc:[8,11,12],singl:[0,2,3,7],sinh:11,sir:[4,15],sis_param:[7,15],size:[7,10,14],slightli:11,slope:11,small:8,smaller:[8,11],snap:5,snapshot:[7,10,14],social:[1,5],softwar:7,some:[7,11,13],somewher:12,span:[7,8],spars:[11,17],specif:[5,7],specifi:[0,3,5,8],spectral:[1,4,7,8,10,11,14,15],spectral_gap:8,spectral_radiu:[7,8],spectral_result:11,spectral_sc:8,speed:11,spieksma:1,split:12,spread:[7,13,15],sqrt:11,stabl:5,stack:11,stamp:7,standard:7,stanford:5,star:5,start:[7,11,12,16],start_:11,state:[7,15],step:[0,2,3,4,7,10,11,12,13,14,15],step_:11,stephen:1,stop:[8,17],store:10,str:[12,13],straight:10,strategi:[0,3,12,13,14],strength:[4,14,15],strictli:11,string:[0,3,4,5,8,10],strogatz:5,stronger:[12,13,15],structur:[1,7,8,12,13],studi:[7,12,15],subgraph:[8,11],subplot:11,substack:11,substat:[7,14],success:[12,13],suffer:12,sum:[8,11],sum_:11,summar:[14,15],summat:[8,11],support:[5,11,14],suscept:[4,7,15],sys:[12,13],system:[1,7,14,15],tag:10,take:[10,11,12,14,15],target:[1,7,12,13,14],tau:15,techniq:7,techniqu:[3,7,13,15],tend:8,test:12,textbf:11,than:[12,13],thei:[7,11,12,13],them:[5,14,15],theori:1,thi:[0,2,3,4,7,8,11,12,13,14,15],think:11,three:[11,12,13],threshold:[14,15],through:[8,11,12],tied:[8,15],tiger:[5,7,11,12,13,14,15,16],time:[0,2,3,4,7,8,14,15],timeout:8,tina:1,titl:[10,12,13,14,15],togeth:8,toi:5,tol:17,tong:1,tonghanghang:[0,3],top:[0,3,15,17],topic:[1,15],topolog:[1,5,13],total:[8,11,12],tqdm:11,track:[0,2,3,4],track_simul:[0,2,3,4],trade:11,transact:1,transform:0,transmiss:15,tree:8,triangl:[5,8],triplet:8,tsourakaki:1,tupl:[0,3,10],turn:[7,14],tutori:[6,7],two:[3,5,11,12,13,15],two_c4_0_bridg:5,two_c4_1_bridg:5,two_c4_2_bridg:5,two_c4_3_bridg:5,type:[0,3,14,17],typic:[12,13],u_2:8,uki:5,uknowledg:5,undefin:8,under:[7,12,14],underli:15,understand:7,undesir:8,undirect:[0,2,3,5,8,17],unfortun:[7,12],unifi:7,uniformli:[4,14],uninfect:15,uniqu:[7,8],univers:1,untarget:7,upper:11,url:7,use:[7,11,12,15],used:[5,7,8,12,13,14],user:[5,7,8,13,14,15,16],uses:11,using:[0,3,7,10,11,12,13,14],usual:8,util:[6,9],vaccin:15,valu:[8,10,11],van:1,vari:11,variabl:11,varieti:[0,3,7,12,14],variou:12,vasileio:1,vel:1,version:[11,13],vertex:[8,11],vertic:[8,10,11],via:13,video:[7,14],view:[8,11],viru:[4,7,15],virus:[7,15],visual:[10,12,14,15],vote:5,vuln:7,vulner:[1,6,7,16],wai:[12,13],walk:[8,11],want:[5,12,15],water:[12,13,14],watt:5,watts_strogatz:5,wdn_ky2:5,wdst:5,weight:8,well:[8,11],wendi:1,wget:7,when:[7,11,12,14],where:[3,5,8,11,12,13,14,15,16],whether:[11,13],which:[7,10,11,14,15,17],whole:11,wide:15,wiki:5,wiki_vot:5,window:7,within:13,without:15,work:8,worst:13,would:12,write:14,www:3,x_data:11,x_data_:11,xlabel:[12,13,14,15],ylabel:[12,13,14,15],ylim:[12,13,14,15],yml:7,you:[5,7,11],yscale:15,zero:[11,15],zquez:1},titles:["Attacks","Bibliography","Cascading","Defense","Diffusion","Graph","Welcome to TIGER\u2019s documentation!","Introduction","Measures","TIGER","Simulation","Tutorial 1: Measuring Vulnerability and Robustness","Tutorial 2: Attacking a Network","Tutorial 3: Defending a Network","Tutorial 4: Cascading Failures","Tutorial 5: Entity Dissemination","Tutorials","Utils"],titleterms:{SIS:7,approxim:[7,11],attack:[0,12],background:7,bibliographi:1,cascad:[2,7,14],compar:11,defend:13,defens:3,diffus:4,dissemin:15,document:6,entiti:15,exampl:7,failur:[7,14],graph:[5,7],indic:6,instal:7,introduct:7,measur:[7,8,11],model:7,motiv:7,network:[7,12,13],non:11,robust:[7,11],simul:[7,10],tabl:6,tiger:[6,9],tutori:[11,12,13,14,15,16],util:17,vaccin:7,vulner:11,welcom:6}}) \ No newline at end of file +Search.setIndex({docnames:["attacks","bibliography","cascading","defenses","diffusion","graphs","index","intro","measures","modules","simulations","tutorials/tutorial-1","tutorials/tutorial-2","tutorials/tutorial-3","tutorials/tutorial-4","tutorials/tutorial-5","tutorials/tutorials","utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":7,sphinx:56},filenames:["attacks.rst","bibliography.rst","cascading.rst","defenses.rst","diffusion.rst","graphs.rst","index.rst","intro.rst","measures.rst","modules.rst","simulations.rst","tutorials/tutorial-1.rst","tutorials/tutorial-2.rst","tutorials/tutorial-3.rst","tutorials/tutorial-4.rst","tutorials/tutorial-5.rst","tutorials/tutorials.rst","utils.rst"],objects:{"":{attacks:[0,0,0,"-"],cascading:[2,0,0,"-"],defenses:[3,0,0,"-"],diffusion:[4,0,0,"-"],graphs:[5,0,0,"-"],measures:[8,0,0,"-"],simulations:[10,0,0,"-"],utils:[17,0,0,"-"]},"attacks.Attack":{reset_simulation:[0,2,1,""],run_single_sim:[0,2,1,""],track_simulation:[0,2,1,""]},"cascading.Cascading":{reset_simulation:[2,2,1,""],run_single_sim:[2,2,1,""],track_simulation:[2,2,1,""]},"defenses.Defense":{reset_simulation:[3,2,1,""],run_single_sim:[3,2,1,""],track_simulation:[3,2,1,""]},"diffusion.Diffusion":{get_effective_strength:[4,2,1,""],reset_simulation:[4,2,1,""],run_single_sim:[4,2,1,""],track_simulation:[4,2,1,""]},"simulations.Simulation":{child_class:[10,2,1,""],create_simulation_gif:[10,2,1,""],draw_graph:[10,2,1,""],get_effective_strength:[10,2,1,""],get_graph_coordinates:[10,2,1,""],get_plot_title:[10,2,1,""],get_visual_settings:[10,2,1,""],plot_graph_transition:[10,2,1,""],plot_network:[10,2,1,""],plot_results:[10,2,1,""],reset_simulation:[10,2,1,""],run_simulation:[10,2,1,""],run_single_sim:[10,2,1,""]},attacks:{Attack:[0,1,1,""],get_attack_category:[0,3,1,""],get_attack_methods:[0,3,1,""],get_edge_ib:[0,3,1,""],get_edge_id:[0,3,1,""],get_edge_line_deg:[0,3,1,""],get_edge_line_eig:[0,3,1,""],get_edge_line_ns:[0,3,1,""],get_edge_line_pr:[0,3,1,""],get_edge_rb:[0,3,1,""],get_edge_rd:[0,3,1,""],get_edge_rnd:[0,3,1,""],get_node_eig:[0,3,1,""],get_node_ib:[0,3,1,""],get_node_id:[0,3,1,""],get_node_ns:[0,3,1,""],get_node_pr:[0,3,1,""],get_node_rb:[0,3,1,""],get_node_rd:[0,3,1,""],get_node_rnd:[0,3,1,""],main:[0,3,1,""],run_attack_method:[0,3,1,""]},cascading:{Cascading:[2,1,1,""],main:[2,3,1,""]},defenses:{Defense:[3,1,1,""],add_edge_degree:[3,3,1,""],add_edge_eig:[3,3,1,""],add_edge_pr:[3,3,1,""],add_edge_pref:[3,3,1,""],add_edge_rnd:[3,3,1,""],get_central_edges:[3,3,1,""],get_defense_category:[3,3,1,""],get_defense_methods:[3,3,1,""],get_node_eig:[3,3,1,""],get_node_ib:[3,3,1,""],get_node_id:[3,3,1,""],get_node_ns:[3,3,1,""],get_node_pr:[3,3,1,""],get_node_rb:[3,3,1,""],get_node_rd:[3,3,1,""],get_node_rnd:[3,3,1,""],main:[3,3,1,""],rewire_edge_pref:[3,3,1,""],rewire_edge_pref_rnd:[3,3,1,""],rewire_edge_rnd:[3,3,1,""],rewire_edge_rnd_neighbor:[3,3,1,""],run_defense_method:[3,3,1,""]},diffusion:{Diffusion:[4,1,1,""],main:[4,3,1,""]},graphs:{as_733:[5,3,1,""],barbasi_albert:[5,3,1,""],c4_graph:[5,3,1,""],ca_astro_ph:[5,3,1,""],ca_grqc:[5,3,1,""],ca_hep_th:[5,3,1,""],cit_hep_th:[5,3,1,""],clustered_scale_free:[5,3,1,""],dblp:[5,3,1,""],electrical:[5,3,1,""],email_eu_all:[5,3,1,""],enron_email:[5,3,1,""],erdos_reyni:[5,3,1,""],get_graph_options:[5,3,1,""],get_graph_urls:[5,3,1,""],graph_loader:[5,3,1,""],k4_1_graph:[5,3,1,""],k4_2_graph:[5,3,1,""],karate:[5,3,1,""],o4_graph:[5,3,1,""],oregeon_1:[5,3,1,""],p2p_gnuetella08:[5,3,1,""],p4_graph:[5,3,1,""],roadnet_ca:[5,3,1,""],s4_graph:[5,3,1,""],two_c4_0_bridge:[5,3,1,""],two_c4_1_bridge:[5,3,1,""],two_c4_2_bridge:[5,3,1,""],two_c4_3_bridge:[5,3,1,""],watts_strogatz:[5,3,1,""],wdn_ky2:[5,3,1,""],wiki_vote:[5,3,1,""]},measures:{algebraic_connectivity:[8,3,1,""],average_clustering_coefficient:[8,3,1,""],avg_distance:[8,3,1,""],avg_edge_betweenness:[8,3,1,""],avg_inverse_distance:[8,3,1,""],avg_vertex_betweenness:[8,3,1,""],diameter:[8,3,1,""],edge_connectivity:[8,3,1,""],effective_resistance:[8,3,1,""],generalized_robustness_index:[8,3,1,""],get_measures:[8,3,1,""],largest_connected_component:[8,3,1,""],natural_connectivity:[8,3,1,""],node_connectivity:[8,3,1,""],num_spanning_trees:[8,3,1,""],odd_subgraph_centrality:[8,3,1,""],run_measure:[8,3,1,""],spectral_gap:[8,3,1,""],spectral_radius:[8,3,1,""],spectral_scaling:[8,3,1,""]},simulations:{Simulation:[10,1,1,""]},utils:{curved_edges:[17,3,1,""],get_adjacency_spectrum:[17,3,1,""],get_laplacian:[17,3,1,""],get_laplacian_spectrum:[17,3,1,""],get_sparse_graph:[17,3,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"001":[7,15],"00208":[4,15],"005":15,"046105":1,"056109":1,"100":[2,7,14],"1000":[7,11],"1091":1,"1096":1,"113":1,"126":1,"1311":1,"1395":1,"1425":1,"1970":7,"1973":1,"1999":1,"2000":[7,14],"2002":1,"2005":1,"2006":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"21st":1,"245":1,"2491":1,"2506":1,"254":1,"268":1,"281":1,"28th":1,"298":1,"300":11,"305":1,"325":1,"333":1,"357":1,"3751":1,"3756":1,"400":7,"435":1,"48h":1,"4999":7,"5000":[4,7,15],"5064":1,"563":1,"574":1,"593":1,"612":1,"733":5,"814":12,"942":1,"953":1,"999":11,"break":[1,11,12],"class":[0,2,3,4,10],"default":11,"final":12,"float":[2,4,8,10],"function":[0,3,7,8,10,11,12,16,17],"import":[0,2,3,4,7,11,12,13,14,15],"int":[3,7,11,12,13,14],"new":5,"return":[0,3,4,5,8,10,11,17],"true":[7,11,12,13,14,15,17],"while":[7,12,14],For:[5,7,11,14,15],Has:8,Not:7,SIS:[4,15],The:[1,4,7,8,10,11,12,13,14,15],Then:[10,13],There:[12,13,14],Used:8,Using:7,__main__:11,__name__:11,_approx:11,_epidem:15,abdol:1,abil:[7,13,15],abl:[12,14],abov:[11,14,15],abs:11,acceler:7,accord:[7,8,10,14],account:[8,11],acm:1,across:[7,11,12],act:12,add:[3,5,12,13],add_edge_degre:3,add_edge_eig:3,add_edge_pr:3,add_edge_pref:3,add_edge_preferenti:13,add_edge_random:13,add_edge_rnd:3,added:[3,13],adding:[5,11,13],addit:[0,2,3,7,11,12,13,14,15],aditya:1,adjac:[8,11,17],advantag:[8,11],affect:11,after:[5,8,12,13,15],again:[4,15],against:14,aggreg:12,akoglu:1,albert:[5,7],algebra:[1,8],algebraic_connect:8,algorithm:[0,1,3,10],alina:1,all:[0,3,5,7,8,10,11,12],allow:[5,7,8,14],almost:13,along:11,also:[7,8,14],altern:[7,8],altogeth:13,alwai:13,amin:1,amount:[2,12,14],anaconda:7,ani:[5,7,15],anomali:1,append:11,applic:[1,11,13],approx:[0,3],approx_result:11,approxim:[0,3,8,12,16],approximation_:11,arang:[14,15],aris:14,arpita:1,arrai:13,arxiv:1,as19971108:5,as_733:[5,15],aspect:16,assist:15,associ:11,astroph:5,atlas2:10,attach:[0,5],attack:[1,2,3,6,7,9,10,13,14,16],attack_approx:[7,12,13,14],attacks_run:12,attempt:15,attent:12,augment:[7,15],auto:7,autonom:15,auxiliari:14,avail:[0,3,5,8],averag:[8,10,11,12,13],average_clustering_coeffici:8,average_edge_between:11,average_edge_betweenness_approx:11,average_vertex_between:11,average_vertex_betweenness_approx:11,avg:8,avg_dist:8,avg_edge_between:8,avg_inverse_dist:8,avg_vertex_between:[8,11],axes:11,axi:11,b_list:15,b_u:11,b_v:12,background:[6,15],bad:8,bar:11,bara:1,barabasi:[5,7],barbasi_albert:5,base:[0,2,3,4,7,8,10,11,12,13,14],baselin:15,becom:[4,12,14,15],been:15,begin:[7,12,14],being:[4,8],believ:7,below:[7,11,12,13,14,15],benefit:12,beom:1,best:13,beta:15,better:[8,11,13],betweeen:11,between:[0,2,3,4,8,11,12,13,14,15],beygelzim:1,beyondbeneath:17,bezier:17,bezier_precis:17,bibliographi:6,bipart:1,birth:[4,15],blackout:14,block:11,blue:[7,14],both:[7,11,14],bottleneck:11,bottom:[14,15,17],bound:8,boyd:1,bridg:[8,11,12],briefli:11,brin:1,bring:1,built:7,bundl:[7,10,14,15],c4_graph:5,c_v:14,ca_astro_ph:5,ca_grqc:5,ca_hep_th:5,calcul:[8,11],calcult:11,call:[7,8],cambridg:1,campaign:15,can:[7,8,10,11,12,13,14,15],candid:12,capac:[7,8,14],captur:15,carefulli:12,cascad:[6,9,10,12,13,16],categor:13,categori:[0,3,11,13],caus:[7,12,14],cdc:1,cdot:15,central:[0,3,8,11,12,13,14],certain:[8,12],challeng:7,chan:1,chang:1,charalampo:1,chau:1,chen:1,child:10,child_class:10,chines:1,chosen:4,christo:1,circuit:[8,11],cit:5,cit_hep_th:5,citat:1,clf:[12,13,14,15],clone:7,close:[8,11,15],closer:11,cluster:[5,8,11],clustered_scale_fre:5,cmap:10,code:[11,12,13,14,15,17],coeffici:[8,11],collaps:[7,14],collect:[10,12,13,15],color:[7,10,14],com:[5,7,17],combin:[8,11],come:[7,12],common:[7,11,13],commun:[1,14],compar:[12,13,16],comparison:[11,15],compil:10,complet:5,complex:[1,7],compon:[5,7,8,12],comput:[3,7,12,15,17],computation:11,concept:15,condens:1,condit:[7,12,14],confer:1,configur:[14,15],connect:[1,3,5,7,8,11,12,13,15],consid:[7,8,11,12,13,14],contain:[5,7,8,10,11,12,13,15],content:6,continu:7,contrast:12,control:1,coordin:10,copi:15,core:16,correl:11,correspond:[8,10,11,12],cost:13,counterpart:[7,11],creaet:[7,14],creat:[7,12,14,15],create_simulation_gif:10,creation:5,critic:[7,12,14,15],cross:7,csf:11,csr:17,cure:4,current:[0,2,3,4,10],curv:[10,17],curved_edg:17,custom:5,cycl:5,czechoslovak:1,damag:[7,12],dark:[7,14],data:[1,5,11],dataset:[5,7,14],dblp:5,death:[4,15],decid:10,decis:[1,12],decreas:[11,15],def:[11,12,13,14,15],defaultdict:[12,13,14,15],defend:[0,3,6,7,14,15,16],defens:[0,6,7,9,10,13,14,15],defin:[7,8,11],definit:7,degre:[0,1,3,12,13],delai:14,delta:15,delta_v:12,demand:14,denot:11,depend:[8,11,12],depth:[11,16],describ:11,design:[7,14],desir:11,destroi:12,detail:7,detect:1,determin:[8,11],diagon:5,diamet:8,diamond:5,dictionari:[3,5],differ:[8,11,16],diffus:[6,7,9,10,15],directori:7,disast:7,disciplinari:7,disconnect:[3,5,8,12,13],discoveri:[1,7],discuss:[11,12,14],diseas:[7,15],disrupt:12,dissemin:[6,7,16],dist_ratio:17,distanc:8,distinct:[0,3,8,11],distribut:[1,8,11,12,13,14],dive:15,divers:7,document:5,don:7,down:12,download:[5,7],draw:[10,14],draw_graph:10,due:[7,8],duen:1,dure:7,each:[0,2,3,4,5,7,10,11,12,13,14,15,16],earli:7,easi:7,edg:[0,1,3,5,8,10,11,12,13,15,17],edge_attack:12,edge_connect:8,edge_defens:13,edge_defense_run:13,edge_styl:[7,12,13,14,15],edu:5,effect:[1,4,7,8,11,12,13,14,15],effective_resist:[7,8,11],effective_resistance_approx:11,efficaci:[11,12],effici:1,eig:3,eigenpair:17,eigenvalu:[4,8,11,17],eigenvector:[0,3,8,11,13,17],eigvals_onli:17,electr:[5,7,8,11,14],eliassi:1,ellen:1,els:[11,12,14,15],email:5,email_eu_al:5,enabl:[14,15,17],end:[11,14],endem:15,enemi:7,engin:[1,7],enron:5,enron_email:5,entiti:[6,7,13,16],entri:[0,3],enumer:[11,14,15],environ:7,epidem:15,equip:[7,12],equival:12,erdo:5,erdos_reyni:5,ernesto:1,eros:7,error:[8,11],esfahanian:1,estim:1,estrada:1,etc:13,euall:5,european:1,evalu:[8,13],evaluat:7,evenli:11,everi:[0,4,8,11],exampl:[5,6,12,15],exist:5,exist_ok:[11,12,13,14,15],expans:[1,11],expect:13,experi:[7,14],extend:11,extens:11,extra:14,fa_it:[7,12,13,14,15],fact:[11,13],factor:4,fail:[7,14],failur:[2,6,10,12,13,16],fall:[11,12],faloutso:1,fals:[7,12,13,14,15,17],far:12,fast:[1,8,11,12],feasibl:11,few:[7,8,12,14,15],fiedler:1,field:7,fig:11,figsiz:[11,12,13,14,15],figur:[7,11,12,13,14,15],file:[7,10,14],find:[11,17],first:[4,5,7,11],fix:5,flu:15,focu:[12,14],folder:7,follow:[7,11,12,15],forc:10,force_atla:[7,14,15],forese:7,formal:11,format:[5,11,12,13,14,15,17],found:8,four:[10,12],frac:[11,15],fraction:[8,14],fractur:12,fragkisko:1,frame:[7,14],framework:[1,7],free:[5,11],fresh:7,from:[5,7,8,11,12,13,14,15,17],full:11,fundament:7,gap:[8,11],gather:11,gell:1,gener:[1,5,7,8,11,12,13],generalized_robustness_index:8,geoffrei:1,geq:14,get:[0,3,4,5,7,10,16,17],get_adjacency_spectrum:17,get_attack_categori:0,get_attack_method:0,get_central_edg:3,get_defense_categori:3,get_defense_method:3,get_edge_ib:0,get_edge_id:0,get_edge_line_deg:0,get_edge_line_eig:0,get_edge_line_n:0,get_edge_line_pr:0,get_edge_rb:0,get_edge_rd:0,get_edge_rnd:0,get_effective_strength:[4,10,15],get_graph_coordin:10,get_graph_opt:5,get_graph_url:[5,7],get_laplacian:17,get_laplacian_spectrum:17,get_measur:8,get_node_eig:[0,3],get_node_ib:[0,3],get_node_id:[0,3],get_node_n:[0,3],get_node_pr:[0,3],get_node_rb:[0,3],get_node_rd:[0,3],get_node_rnd:[0,3],get_plot_titl:10,get_sparse_graph:17,get_visual_set:10,getcwd:[11,12,13,14,15],ghosh:1,gif_anim:[7,12,13,14,15],gif_snap:[7,12,14,15],git:7,github:[7,17],given:15,global:[8,12],gnutella08:5,goal:7,goe:[7,14],going:11,good:[0,3,8,11],govern:14,gradient:[7,14],graph:[0,1,2,3,4,6,8,9,10,11,12,13,14,15,17],graph_load:[5,7,11,12,13,14,15],graph_result:11,graph_typ:[5,7,11,12,13],grid:[7,14],grinstein:1,group:11,grqc:5,guez:1,hack:7,han:1,hand:[13,15],handl:14,hanghang:1,harder:8,has:[4,7,8,11,12,13,14,15],hau:1,have:[11,14,15],heal:15,held:1,help:[7,8,13,14,15,16],helper:[7,10,12],hepth:5,here:7,heurist:[7,13],high:[7,11,12,13,14],higher:[3,7,13,14],highest:[3,12],highli:[7,11,12],highlight:[13,15,16],histori:7,holm:1,horng:1,hossein:1,hovareshti:1,how:[7,8,11,12,13,14,15],howev:[7,11,12,14],html:5,http:[0,5,7,17],icdm10_netshield:0,id_nod:[0,3,14],idea:7,ideal:13,identifi:[8,12,13],idx:[14,15],ieee:1,iii:[12,13],imag:[7,14],immun:1,implement:[5,10,11,12,14],improv:[1,13],includ:[11,13],increas:[13,14,15],increment:11,independ:13,index:[6,8,11],indic:[7,8,11,14],induc:14,inf:[0,3,8,11,17],infect:[4,7,15],infecti:15,infolab:1,inform:[0,1,2,3,4,10,12,13,17],ing:7,initi:[0,2,3,4,12,13,14],innov:7,insid:7,insight:7,instal:6,instead:12,integ:[0,2,3,8],interconnect:7,intern:[1,3,17],interplai:1,interpret:8,introduct:6,intuit:11,invers:[8,11],investig:7,irina:1,issu:[7,8],item:[12,13,14,15],iter:[0,2,3,4,10],its:[1,5,8,12,13,14],itself:10,jamakov:1,john:1,join:5,jointli:1,journal:1,juan:1,jun:1,junction:[8,11],just:[11,14],k4_1_graph:5,k4_2_graph:5,k_a:[7,13,14],k_avg:11,k_d:[0,3,7,14],k_start:11,k_step:11,k_valu:11,karat:5,karate_club_graph:5,kee:1,keep:[0,2,3,4,5],kei:[7,12,13,14],kentucki:[12,13],kim:1,kirchoff:11,klein:11,knowledg:[1,7,13],known:[11,13],konect:5,kooij:1,kwarg:[0,2,3,4,5,10],l_max:14,l_v:14,label:[11,12,13,14,15],lack:11,lai:10,lam:8,lambda_1:[8,11,15],lambda_2:8,lambda_:15,lambda_d:8,laplacian:[11,17],larg:[1,8,10,11,13],larger:[7,8,14,15],largest:[5,7,8,12],largest_connected_compon:[7,8,14,15],law:11,lawrenc:1,layout:10,lcc:[12,13],lead:7,left:[12,15],legend:[11,12,13,14,15],leman:1,len:[7,8,11,12,13,14,15],length:[8,11],less:[8,12,13],let:[12,15],level:13,leverag:15,like:[14,15],line:[0,14,15],line_label:14,linear:1,link:[5,7],linsker:1,linux:7,list:[0,3,5,7,8,10,11,12,13,14,15],littl:15,load:[2,5,7,8,11,14],loc:11,local:12,log:[11,15],longest:8,look:[7,12],loop:8,low:[7,11,12,13,14],lower:8,lowest:[3,13],mac:7,made:7,main:[0,2,3,4,7,14],maintain:14,major:12,make:[1,12],makedir:[11,12,13,14,15],malliaro:1,manag:1,mani:[8,11,12,14,15],manipul:1,market:15,mathemat:1,matplotlib:[10,11,12,13,15],matrix:[8,11,17],matter:1,max:14,maxim:[7,12,15],maximum:[2,14],mean:[8,11,15],measur:[0,1,6,9,12,13,16],measures_graph:11,measures_spectr:11,mechan:[1,13,14,15],meet:14,megalooikonom:1,melt:1,mention:7,method:[0,3,7,11,12,13,15],metric_nam:11,michali:1,mieghem:1,min:[7,15],mine:1,minim:[1,8,15],miroslav:1,miss:7,mitig:13,model:[4,5,10,14,15],modif:1,modifi:13,modul:6,monitor:[13,15],more:[8,11,15],most:[7,12,14],motiv:6,motwani:1,mp4:[7,10,14],mu_i:11,much:11,multipl:[12,14,15],must:5,n_rm:[12,13],n_s:11,name:10,natur:[7,8,11,12,14],natural_connect:[8,11],natural_connectivity_approx:11,ncol:11,nearest:5,nearli:[7,15],neighbor:[3,4,5,12,13,14,15],neq:11,netshield:[0,3,7,15],network:[1,2,5,6,8,10,11,14,15,16],networkx:[0,2,3,5,8,17],next:[11,12],node:[0,1,2,3,4,5,7,8,10,11,12,13,14,15],node_attack:12,node_connect:8,node_styl:[7,12,13,14,15],nodes:14,non:[4,16],none:[0,3,5,7,8,12,13,14,15],normal:[7,12,14],now:[11,12,15],ns_node:[7,15],num_measur:11,num_spanning_tre:8,number:[0,2,3,5,7,8,10,11,12,15,17],number_spanning_tre:11,number_spanning_trees_approx:11,numer:[7,11],numpi:[11,15],o4_graph:5,object:10,observ:[7,12,13,14],obtain:[0,3,12,17],obust:7,occur:[7,8,12,14,15],odd:[8,11],odd_subgraph_centr:8,off:[7,11,14],offens:7,offlin:14,often:[12,14],oftentim:7,ohm:[8,11],one:[0,3,7,11,12,13,15],onli:[5,12,14,15,17],oolbox:7,oper:[7,13,14],opportun:7,opsahl:5,optim:[1,7,13],option:[0,2,3,5],order:[0,1,3,5,11,12,14,15],oregeon_1:5,oregon1_010331:5,oregon:15,oregon_1:5,org:[0,5],origin:[7,11,14,17],orthogon:13,other:[13,15],our:[7,12],out:[8,10,11],outbreak:15,outperform:13,output:10,over:[7,8,10,11,12,13,14,15],overhead:12,overload:[7,14],overview:13,p2p:5,p2p_gnuetella08:5,p4_graph:5,page:[1,6],pagerank:[0,1,3,13],pair:[8,11],param:[7,11,12,13,14,15],paramet:[0,2,3,4,5,8,10,11,12,17],parent:[0,2,3,10],part:7,particip:[8,11],particular:[13,15],pass:[8,11],path:[5,8,11,12],pathcollect:10,pathwai:8,pdf:[0,11,12,13,14,15],pedram:1,perform:13,period:15,perspect:[7,8],petter:1,physic:[1,8],physica:1,piec:12,place:7,plot:[7,10,11,12,13,14,15],plot_graph_transit:10,plot_network:10,plot_result:[7,10,11,12,13,14,15],plot_transit:[7,12,13,14,15],plt:[11,12,13,14,15],polar:17,popul:7,pos:[10,17],posit:10,possibl:[8,11,12,14],potenti:7,power:[7,14],powergrid:5,practic:11,prakash:1,precis:[8,11,17],preferenti:13,preprint:1,preprocess:5,present:14,press:1,prevent:[13,14],previou:[14,15],primari:12,print:[7,11,12,13],priori:13,probabl:[4,5,15],problem:7,proceed:1,process:[5,12,14,15],product:14,promin:15,propag:15,propaganda:7,properti:[5,8,11],protect:14,prove:11,provid:[7,8,10,13,16],pyplot:[11,12,13,15],python:7,qualiti:11,quantifi:7,quickli:7,rabil:7,rad:1,radiu:[4,7,8,15],rajeev:1,ralph:1,randic:11,random:[3,4,5,11,12,13,17],randomli:[0,3,7,11,13],rang:[11,12,13],rank:1,raph:7,rate:[4,15],rb_node:[7,12,13,14],reason:11,recalcul:[0,3,12],reconnect:[3,13],recov:[4,7,15],red:[7,12,14],redistribut:14,reduc:[7,12,13,15],redund:[2,14],refer:5,region:12,regul:7,regularli:12,relationship:[8,15],reli:12,remain:[12,15],remit:7,remov:[0,3,8,12,13,15],repeat:12,replac:11,report:1,repres:[0,2,3,5,7,8,10,11,12,14],reproduc:[0,3,7],requir:[13,14,15],research:7,reserv:14,reset:[0,2,3,4],reset_simul:[0,2,3,4,10],resist:[1,7,8,11],resolv:8,respect:12,result:[7,10,11,12,13,14,15],result_norm:[14,15],result_typ:11,resurg:7,review:1,rewir:[1,3,5,13,15],rewire_edge_pref:3,rewire_edge_pref_rnd:3,rewire_edge_preferenti:13,rewire_edge_preferential_random:13,rewire_edge_random:13,rewire_edge_random_neighbor:13,rewire_edge_rnd:3,rewire_edge_rnd_neighbor:3,reyni:5,rich:7,right:[11,12,15],rightarrow:14,ring:5,rish:1,rnd:12,roadnet:5,roadnet_ca:5,robert:1,robust:[1,6,8,13,16],robust_measur:[7,14,15],robustifi:13,rodr:1,roughli:12,round:11,rout:7,run:[0,2,3,4,5,7,8,10,11,12,13,14,15],run_analysi:11,run_attack_method:0,run_defense_method:3,run_epidemic_experi:15,run_measur:[7,8,11],run_simul:[7,10,12,13,14,15],run_single_sim:[0,2,3,4,10],s4_graph:5,saberi:1,sabotag:7,safreita1:7,sai:[8,11,15],same:[12,13],save:[7,10,14],save_dir:[11,12,13,14,15],savefig:[11,12,13,14,15],sc_:11,scale:[5,7,8,11,14],scheme:10,scienc:7,scipi:17,search:6,second:8,section:7,see:[0,2,3,11,12],seed:[0,3,5,7,11,12,13,14,15],select:[0,3,7,11,12,13,14],separ:12,sergei:1,seri:[7,14],serv:8,set:[0,3,8,10,11,12,14,15],set_titl:11,set_xlabel:11,set_ylabel:11,set_yscal:11,seung:1,sever:[12,13],share:10,shortest:[8,11],show:[7,11,12,13,14,15],showcas:12,shown:[13,15],siam:1,signific:[7,12],sim_info:10,similar:8,simpl:7,simpli:11,simul:[0,2,3,4,6,9,12,14,15],simultan:11,sinc:[8,11,12],singl:[0,2,3,7],sinh:11,sir:[4,15],sis_param:[7,15],size:[7,10,14],slightli:11,slope:11,small:8,smaller:[8,11],snap:5,snapshot:[7,10,14],social:[1,5],softwar:7,some:[7,11,13],somewher:12,span:[7,8],spars:[11,17],specif:[5,7],specifi:[0,3,5,8],spectral:[1,4,7,8,10,11,14,15],spectral_gap:8,spectral_radiu:[7,8],spectral_result:11,spectral_sc:8,speed:11,spieksma:1,split:12,spread:[7,13,15],sqrt:11,stabl:5,stack:11,stamp:7,standard:7,stanford:[1,5],star:5,start:[7,11,12,16],start_:11,state:[7,15],statist:1,step:[0,2,3,4,7,10,11,12,13,14,15],step_:11,stephen:1,stop:[8,17],store:10,str:[12,13],straight:10,strategi:[0,3,12,13,14],strength:[4,14,15],strictli:11,string:[0,3,4,5,8,10],strogatz:5,stronger:[12,13,15],structur:[1,7,8,12,13],studi:[7,12,15],subgraph:[8,11],subplot:11,substack:11,substat:[7,14],success:[12,13],suffer:12,sum:[8,11],sum_:11,summar:[14,15],summat:[8,11],support:[5,11,14],suscept:[4,7,15],sys:[12,13],system:[1,7,14,15],tag:10,take:[8,10,11,12,14,15],target:[1,7,12,13,14],tau:15,technic:1,techniq:7,techniqu:[3,7,13,15],tend:8,terri:1,test:12,textbf:11,than:[12,13],thei:[7,11,12,13],them:[5,14,15],theori:1,thi:[0,2,3,4,7,8,11,12,13,14,15],think:11,three:[11,12,13],threshold:[14,15],through:[8,11,12],tied:[8,15],tiger:[5,7,11,12,13,14,15,16],time:[0,2,3,4,7,8,14,15],timeout:8,tina:1,titl:[10,12,13,14,15],togeth:8,toi:5,tol:17,tong:1,tonghanghang:0,top:[0,3,15,17],topic:[1,15],topolog:[1,5,13],total:[8,11,12],tqdm:11,track:[0,2,3,4],track_simul:[0,2,3,4],trade:11,transact:1,transform:0,transmiss:15,tree:8,triangl:[5,8],triplet:8,tsourakaki:1,tupl:[0,3,10],turn:[7,14],tutori:[6,7],two:[3,5,11,12,13,15],two_c4_0_bridg:5,two_c4_1_bridg:5,two_c4_2_bridg:5,two_c4_3_bridg:5,type:[0,3,14,17],typic:[12,13],u_2:8,uki:5,uknowledg:5,undefin:8,under:[7,12,14],underli:15,understand:7,undesir:8,undirect:[0,2,3,5,8,17],unfortun:[7,12],unifi:7,uniformli:[4,14],uninfect:15,uniqu:[7,8],univers:1,untarget:7,upper:11,url:7,use:[7,11,12,15],used:[5,7,8,12,13,14],user:[5,7,8,13,14,15,16],uses:11,using:[0,7,10,11,12,13,14],usual:8,util:[6,9],vaccin:15,valu:[8,10,11],van:1,vari:11,variabl:11,varieti:[0,3,7,12,14],variou:12,vasileio:1,vel:1,version:[11,13],vertex:[8,11],vertic:[8,10,11],via:13,video:[7,14],view:[8,11],viru:[4,7,15],virus:[7,15],visual:[10,12,14,15],vote:5,vuln:7,vulner:[1,6,7,16],wai:[12,13],walk:[8,11],want:[5,12,15],water:[12,13,14],watt:5,watts_strogatz:5,wdn_ky2:5,wdst:5,web:1,weight:8,well:[8,11],wendi:1,wget:7,when:[7,11,12,14],where:[0,3,5,8,11,12,13,14,15,16],whether:[11,13],which:[7,10,11,14,15,17],whole:11,wide:15,wiki:5,wiki_vot:5,window:7,winograd:1,within:13,without:15,work:8,worst:13,would:12,write:14,x_data:11,x_data_:11,xlabel:[12,13,14,15],ylabel:[12,13,14,15],ylim:[12,13,14,15],yml:7,yoon:1,you:[5,7,11],yscale:15,zero:[11,15],zquez:1},titles:["Attacks","Bibliography","Cascading","Defense","Diffusion","Graph","Welcome to TIGER\u2019s documentation!","Introduction","Measures","TIGER","Simulation","Tutorial 1: Measuring Vulnerability and Robustness","Tutorial 2: Attacking a Network","Tutorial 3: Defending a Network","Tutorial 4: Cascading Failures","Tutorial 5: Entity Dissemination","Tutorials","Utils"],titleterms:{SIS:7,approxim:[7,11],attack:[0,12],background:7,bibliographi:1,cascad:[2,7,14],compar:11,defend:13,defens:3,diffus:4,dissemin:15,document:6,entiti:15,exampl:7,failur:[7,14],graph:[5,7],indic:6,instal:7,introduct:7,measur:[7,8,11],model:7,motiv:7,network:[7,12,13],non:11,robust:[7,11],simul:[7,10],tabl:6,tiger:[6,9],tutori:[11,12,13,14,15,16],util:17,vaccin:7,vulner:11,welcom:6}}) \ No newline at end of file