diff --git a/2022-round-1/arpitadash/nx_dev_test_output.txt b/2022-round-1/arpitadash/nx_dev_test_output.txt new file mode 100644 index 0000000..a5e65aa --- /dev/null +++ b/2022-round-1/arpitadash/nx_dev_test_output.txt @@ -0,0 +1,380 @@ +============================= test session starts ============================= +platform win32 -- Python 3.10.2, pytest-7.1.1, pluggy-1.0.0 +rootdir: D:\Arpita\Outreachy\networkx\networkx +plugins: cov-3.0.0 +collected 4891 items / 3 skipped + +networkx\algorithms\approximation\tests\test_approx_clust_coeff.py ..... [ 0%] +. [ 0%] +networkx\algorithms\approximation\tests\test_clique.py ........ [ 0%] +networkx\algorithms\approximation\tests\test_connectivity.py ........... [ 0%] +....... [ 0%] +networkx\algorithms\approximation\tests\test_distance_measures.py ...... [ 0%] +.. [ 0%] +networkx\algorithms\approximation\tests\test_dominating_set.py ... [ 0%] +networkx\algorithms\approximation\tests\test_kcomponents.py ............ [ 1%] +.... [ 1%] +networkx\algorithms\approximation\tests\test_matching.py . [ 1%] +networkx\algorithms\approximation\tests\test_maxcut.py ..... [ 1%] +networkx\algorithms\approximation\tests\test_ramsey.py . [ 1%] +networkx\algorithms\approximation\tests\test_steinertree.py .... [ 1%] +networkx\algorithms\approximation\tests\test_traveling_salesman.py ..... [ 1%] +...............................s......s. [ 2%] +networkx\algorithms\approximation\tests\test_treewidth.py ............ [ 2%] +networkx\algorithms\approximation\tests\test_vertex_cover.py .... [ 2%] +networkx\algorithms\assortativity\tests\test_connectivity.py .......... [ 2%] +networkx\algorithms\assortativity\tests\test_correlation.py ............ [ 3%] +....... [ 3%] +networkx\algorithms\assortativity\tests\test_mixing.py ................. [ 3%] +.. [ 3%] +networkx\algorithms\assortativity\tests\test_neighbor_degree.py ...... [ 3%] +networkx\algorithms\assortativity\tests\test_pairs.py ........... [ 4%] +networkx\algorithms\bipartite\tests\test_basic.py ............... [ 4%] +networkx\algorithms\bipartite\tests\test_centrality.py ...... [ 4%] +networkx\algorithms\bipartite\tests\test_cluster.py ......... [ 4%] +networkx\algorithms\bipartite\tests\test_covering.py .... [ 4%] +networkx\algorithms\bipartite\tests\test_edgelist.py .............. [ 4%] +networkx\algorithms\bipartite\tests\test_generators.py .......... [ 5%] +networkx\algorithms\bipartite\tests\test_matching.py ................... [ 5%] +. [ 5%] +networkx\algorithms\bipartite\tests\test_matrix.py ........... [ 5%] +networkx\algorithms\bipartite\tests\test_project.py ................. [ 6%] +networkx\algorithms\bipartite\tests\test_redundancy.py ... [ 6%] +networkx\algorithms\bipartite\tests\test_spectral_bipartivity.py ... [ 6%] +networkx\algorithms\centrality\tests\test_betweenness_centrality.py .... [ 6%] +..................................... [ 7%] +networkx\algorithms\centrality\tests\test_betweenness_centrality_subset.py . [ 7%] +................ [ 7%] +networkx\algorithms\centrality\tests\test_closeness_centrality.py ...... [ 7%] +....... [ 7%] +networkx\algorithms\centrality\tests\test_current_flow_betweenness_centrality.py . [ 7%] +............... [ 8%] +networkx\algorithms\centrality\tests\test_current_flow_betweenness_centrality_subset.py . [ 8%] +........ [ 8%] +networkx\algorithms\centrality\tests\test_current_flow_closeness.py ... [ 8%] +networkx\algorithms\centrality\tests\test_degree_centrality.py ....... [ 8%] +networkx\algorithms\centrality\tests\test_dispersion.py ... [ 8%] +networkx\algorithms\centrality\tests\test_eigenvector_centrality.py .... [ 8%] +........ [ 8%] +networkx\algorithms\centrality\tests\test_group.py ..................... [ 9%] +... [ 9%] +networkx\algorithms\centrality\tests\test_harmonic_centrality.py ....... [ 9%] +...... [ 9%] +networkx\algorithms\centrality\tests\test_katz_centrality.py ........... [ 9%] +............... [ 10%] +networkx\algorithms\centrality\tests\test_load_centrality.py ........... [ 10%] +...... [ 10%] +networkx\algorithms\centrality\tests\test_percolation_centrality.py ... [ 10%] +networkx\algorithms\centrality\tests\test_reaching.py .............. [ 10%] +networkx\algorithms\centrality\tests\test_second_order_centrality.py ... [ 10%] +.... [ 10%] +networkx\algorithms\centrality\tests\test_subgraph.py ..... [ 10%] +networkx\algorithms\centrality\tests\test_trophic.py .......... [ 11%] +networkx\algorithms\centrality\tests\test_voterank.py ..... [ 11%] +networkx\algorithms\coloring\tests\test_coloring.py ................ [ 11%] +networkx\algorithms\community\tests\test_asyn_fluid.py ..... [ 11%] +networkx\algorithms\community\tests\test_centrality.py ..... [ 11%] +networkx\algorithms\community\tests\test_kclique.py ........ [ 12%] +networkx\algorithms\community\tests\test_kernighan_lin.py ........ [ 12%] +networkx\algorithms\community\tests\test_label_propagation.py .......... [ 12%] +. [ 12%] +networkx\algorithms\community\tests\test_louvain.py ........ [ 12%] +networkx\algorithms\community\tests\test_lukes.py .... [ 12%] +networkx\algorithms\community\tests\test_modularity_max.py ............. [ 12%] +.... [ 12%] +networkx\algorithms\community\tests\test_quality.py ....... [ 13%] +networkx\algorithms\community\tests\test_utils.py .... [ 13%] +networkx\algorithms\components\tests\test_attracting.py .... [ 13%] +networkx\algorithms\components\tests\test_biconnected.py ............. [ 13%] +networkx\algorithms\components\tests\test_connected.py ........ [ 13%] +networkx\algorithms\components\tests\test_semiconnected.py ........ [ 13%] +networkx\algorithms\components\tests\test_strongly_connected.py ........ [ 14%] +...... [ 14%] +networkx\algorithms\components\tests\test_weakly_connected.py ...... [ 14%] +networkx\algorithms\connectivity\tests\test_connectivity.py ............ [ 14%] +...................... [ 14%] +networkx\algorithms\connectivity\tests\test_cuts.py .................... [ 15%] +. [ 15%] +networkx\algorithms\connectivity\tests\test_disjoint_paths.py .......... [ 15%] +........ [ 15%] +networkx\algorithms\connectivity\tests\test_edge_augmentation.py ....... [ 15%] +............. [ 16%] +networkx\algorithms\connectivity\tests\test_edge_kcomponents.py ........ [ 16%] +............. [ 16%] +networkx\algorithms\connectivity\tests\test_kcomponents.py .sss...... [ 16%] +networkx\algorithms\connectivity\tests\test_kcutsets.py s........s..... [ 17%] +networkx\algorithms\connectivity\tests\test_stoer_wagner.py ..... [ 17%] +networkx\algorithms\flow\tests\test_gomory_hu.py ....s.... [ 17%] +networkx\algorithms\flow\tests\test_maxflow.py ......................... [ 17%] +.. [ 17%] +networkx\algorithms\flow\tests\test_maxflow_large_graph.py ...s.. [ 18%] +networkx\algorithms\flow\tests\test_mincost.py ................... [ 18%] +networkx\algorithms\flow\tests\test_networksimplex.py .................. [ 18%] +.... [ 18%] +networkx\algorithms\isomorphism\tests\test_ismags.py .......... [ 19%] +networkx\algorithms\isomorphism\tests\test_isomorphism.py .... [ 19%] +networkx\algorithms\isomorphism\tests\test_isomorphvf2.py .............. [ 19%] +. [ 19%] +networkx\algorithms\isomorphism\tests\test_match_helpers.py .. [ 19%] +networkx\algorithms\isomorphism\tests\test_temporalisomorphvf2.py ...... [ 19%] +...... [ 19%] +networkx\algorithms\isomorphism\tests\test_tree_isomorphism.py ..... [ 19%] +networkx\algorithms\isomorphism\tests\test_vf2userfunc.py .............. [ 20%] +.............. [ 20%] +networkx\algorithms\link_analysis\tests\test_hits.py ........ [ 20%] +networkx\algorithms\link_analysis\tests\test_pagerank.py ............... [ 20%] +..................................... [ 21%] +networkx\algorithms\minors\tests\test_contraction.py ................... [ 22%] +............ [ 22%] +networkx\algorithms\operators\tests\test_all.py .................. [ 22%] +networkx\algorithms\operators\tests\test_binary.py .................... [ 23%] +networkx\algorithms\operators\tests\test_product.py .................... [ 23%] +....... [ 23%] +networkx\algorithms\operators\tests\test_unary.py ... [ 23%] +networkx\algorithms\shortest_paths\tests\test_astar.py ............. [ 24%] +networkx\algorithms\shortest_paths\tests\test_dense.py ........ [ 24%] +networkx\algorithms\shortest_paths\tests\test_dense_numpy.py ....... [ 24%] +networkx\algorithms\shortest_paths\tests\test_generic.py ............... [ 24%] +....... [ 24%] +networkx\algorithms\shortest_paths\tests\test_unweighted.py ............ [ 25%] + [ 25%] +networkx\algorithms\shortest_paths\tests\test_weighted.py .............. [ 25%] +....................................... [ 26%] +networkx\algorithms\tests\test_asteroidal.py . [ 26%] +networkx\algorithms\tests\test_boundary.py ............. [ 26%] +networkx\algorithms\tests\test_bridges.py ...... [ 26%] +networkx\algorithms\tests\test_chains.py .... [ 26%] +networkx\algorithms\tests\test_chordal.py .......... [ 26%] +networkx\algorithms\tests\test_clique.py .............. [ 27%] +networkx\algorithms\tests\test_cluster.py .............................. [ 27%] +.......... [ 27%] +networkx\algorithms\tests\test_communicability.py .. [ 27%] +networkx\algorithms\tests\test_core.py ............. [ 28%] +networkx\algorithms\tests\test_covering.py ........ [ 28%] +networkx\algorithms\tests\test_cuts.py ................. [ 28%] +networkx\algorithms\tests\test_cycles.py ............................... [ 29%] +... [ 29%] +networkx\algorithms\tests\test_d_separation.py ............. [ 29%] +networkx\algorithms\tests\test_dag.py .................................. [ 30%] +................... [ 30%] +networkx\algorithms\tests\test_distance_measures.py .................... [ 31%] +............. [ 31%] +networkx\algorithms\tests\test_distance_regular.py ....... [ 31%] +networkx\algorithms\tests\test_dominance.py ...................... [ 32%] +networkx\algorithms\tests\test_dominating.py ..... [ 32%] +networkx\algorithms\tests\test_efficiency.py ....... [ 32%] +networkx\algorithms\tests\test_euler.py .............................. [ 32%] +networkx\algorithms\tests\test_graph_hashing.py ........................ [ 33%] + [ 33%] +networkx\algorithms\tests\test_graphical.py ............. [ 33%] +networkx\algorithms\tests\test_hierarchy.py ..... [ 33%] +networkx\algorithms\tests\test_hybrid.py .. [ 33%] +networkx\algorithms\tests\test_isolate.py ... [ 33%] +networkx\algorithms\tests\test_link_prediction.py ...................... [ 34%] +................................................... [ 35%] +networkx\algorithms\tests\test_lowest_common_ancestors.py .............. [ 35%] +........... [ 35%] +networkx\algorithms\tests\test_matching.py ............................. [ 36%] +............... [ 36%] +networkx\algorithms\tests\test_max_weight_clique.py ..... [ 36%] +networkx\algorithms\tests\test_mis.py ........ [ 37%] +networkx\algorithms\tests\test_moral.py . [ 37%] +networkx\algorithms\tests\test_node_classification.py ............... [ 37%] +networkx\algorithms\tests\test_node_classification_deprecations.py .... [ 37%] +networkx\algorithms\tests\test_non_randomness.py ...... [ 37%] +networkx\algorithms\tests\test_planar_drawing.py ............ [ 37%] +networkx\algorithms\tests\test_planarity.py ............................ [ 38%] +.. [ 38%] +networkx\algorithms\tests\test_polynomials.py ........ [ 38%] +networkx\algorithms\tests\test_reciprocity.py ..... [ 38%] +networkx\algorithms\tests\test_regular.py ............. [ 38%] +networkx\algorithms\tests\test_richclub.py ........ [ 39%] +networkx\algorithms\tests\test_similarity.py ........................... [ 39%] +................. [ 39%] +networkx\algorithms\tests\test_simple_paths.py ......................... [ 40%] +................................................ [ 41%] +networkx\algorithms\tests\test_smallworld.py .... [ 41%] +networkx\algorithms\tests\test_smetric.py .. [ 41%] +networkx\algorithms\tests\test_sparsifiers.py ....... [ 41%] +networkx\algorithms\tests\test_structuralholes.py ............ [ 41%] +networkx\algorithms\tests\test_summarization.py ................. [ 42%] +networkx\algorithms\tests\test_swap.py ............. [ 42%] +networkx\algorithms\tests\test_threshold.py .................. [ 42%] +networkx\algorithms\tests\test_tournament.py ..................... [ 43%] +networkx\algorithms\tests\test_triads.py ........ [ 43%] +networkx\algorithms\tests\test_vitality.py ...... [ 43%] +networkx\algorithms\tests\test_voronoi.py .......... [ 43%] +networkx\algorithms\tests\test_wiener.py .... [ 43%] +networkx\algorithms\traversal\tests\test_beamsearch.py .. [ 44%] +networkx\algorithms\traversal\tests\test_bfs.py .............. [ 44%] +networkx\algorithms\traversal\tests\test_dfs.py ................. [ 44%] +networkx\algorithms\traversal\tests\test_edgebfs.py ................ [ 44%] +networkx\algorithms\traversal\tests\test_edgedfs.py ............... [ 45%] +networkx\algorithms\tree\tests\test_branchings.py ...................... [ 45%] +..... [ 45%] +networkx\algorithms\tree\tests\test_coding.py .............. [ 46%] +networkx\algorithms\tree\tests\test_decomposition.py ..... [ 46%] +networkx\algorithms\tree\tests\test_mst.py ............................. [ 46%] +................. [ 47%] +networkx\algorithms\tree\tests\test_operations.py ... [ 47%] +networkx\algorithms\tree\tests\test_recognition.py ..................... [ 47%] +.... [ 47%] +networkx\classes\tests\test_coreviews.py ............................... [ 48%] +.......................... [ 48%] +networkx\classes\tests\test_digraph.py ................................. [ 49%] +............................................... [ 50%] +networkx\classes\tests\test_digraph_historical.py ...................... [ 50%] +.................... [ 51%] +networkx\classes\tests\test_filters.py ........... [ 51%] +networkx\classes\tests\test_function.py ................................ [ 52%] +.................................... [ 53%] +networkx\classes\tests\test_graph.py ................................... [ 53%] +........................... [ 54%] +networkx\classes\tests\test_graph_historical.py ........................ [ 54%] +.......... [ 54%] +networkx\classes\tests\test_graphviews.py .............................. [ 55%] +..... [ 55%] +networkx\classes\tests\test_multidigraph.py ............................ [ 56%] +................................................................. [ 57%] +networkx\classes\tests\test_multigraph.py .............................. [ 58%] +................................................ [ 59%] +networkx\classes\tests\test_ordered.py ..... [ 59%] +networkx\classes\tests\test_reportviews.py ............................. [ 59%] +........................................................................ [ 61%] +........................................................................ [ 62%] +................................................................ [ 64%] +networkx\classes\tests\test_special.py ................................. [ 64%] +........................................................................ [ 66%] +........................................................................ [ 67%] +........................................................................ [ 69%] +........................................................................ [ 70%] +........................................................................ [ 72%] +........................................................................ [ 73%] +........................................................................ [ 75%] +........................................................................ [ 76%] +... [ 76%] +networkx\classes\tests\test_subgraphviews.py ........................... [ 77%] +..... [ 77%] +networkx\drawing\tests\test_layout.py .......................... [ 77%] +networkx\drawing\tests\test_pylab.py ................................... [ 78%] +........................................................ [ 79%] +networkx\generators\tests\test_atlas.py ........ [ 79%] +networkx\generators\tests\test_classic.py .............................. [ 80%] + [ 80%] +networkx\generators\tests\test_cographs.py . [ 80%] +networkx\generators\tests\test_community.py ................ [ 80%] +networkx\generators\tests\test_degree_seq.py ................... [ 81%] +networkx\generators\tests\test_directed.py ........ [ 81%] +networkx\generators\tests\test_duplication.py ....... [ 81%] +networkx\generators\tests\test_ego.py .. [ 81%] +networkx\generators\tests\test_expanders.py .... [ 81%] +networkx\generators\tests\test_geometric.py ....................... [ 82%] +networkx\generators\tests\test_harary_graph.py .. [ 82%] +networkx\generators\tests\test_internet_as_graphs.py ..... [ 82%] +networkx\generators\tests\test_intersection.py .... [ 82%] +networkx\generators\tests\test_interval_graph.py ........ [ 82%] +networkx\generators\tests\test_joint_degree_seq.py .... [ 82%] +networkx\generators\tests\test_lattice.py ...................... [ 83%] +networkx\generators\tests\test_line.py .............................. [ 83%] +networkx\generators\tests\test_mycielski.py ... [ 83%] +networkx\generators\tests\test_nonisomorphic_trees.py ..... [ 83%] +networkx\generators\tests\test_random_clustered.py .... [ 83%] +networkx\generators\tests\test_random_graphs.py ........................ [ 84%] +....................................... [ 85%] +networkx\generators\tests\test_small.py ................................ [ 85%] +....... [ 85%] +networkx\generators\tests\test_spectral_graph_forge.py . [ 85%] +networkx\generators\tests\test_stochastic.py ...... [ 86%] +networkx\generators\tests\test_sudoku.py ...... [ 86%] +networkx\generators\tests\test_trees.py ....... [ 86%] +networkx\generators\tests\test_triads.py .. [ 86%] +networkx\linalg\tests\test_algebraic_connectivity.py ................... [ 86%] +.................................................................... [ 88%] +networkx\linalg\tests\test_attrmatrix.py ..... [ 88%] +networkx\linalg\tests\test_bethehessian.py . [ 88%] +networkx\linalg\tests\test_graphmatrix.py .... [ 88%] +networkx\linalg\tests\test_laplacian.py .... [ 88%] +networkx\linalg\tests\test_modularity.py ... [ 88%] +networkx\linalg\tests\test_spectrum.py ..... [ 88%] +networkx\readwrite\json_graph\tests\test_adjacency.py ...... [ 88%] +networkx\readwrite\json_graph\tests\test_cytoscape.py ........ [ 88%] +networkx\readwrite\json_graph\tests\test_jit.py ..... [ 89%] +networkx\readwrite\json_graph\tests\test_node_link.py ......... [ 89%] +networkx\readwrite\json_graph\tests\test_tree.py .... [ 89%] +networkx\readwrite\tests\test_adjlist.py .................. [ 89%] +networkx\readwrite\tests\test_edgelist.py .......................... [ 90%] +networkx\readwrite\tests\test_getattr_nxyaml_removal.py .... [ 90%] +networkx\readwrite\tests\test_gexf.py ..................... [ 90%] +networkx\readwrite\tests\test_gml.py ..................... [ 91%] +networkx\readwrite\tests\test_gpickle.py .. [ 91%] +networkx\readwrite\tests\test_graph6.py ............... [ 91%] +networkx\readwrite\tests\test_graphml.py ..................sssssssssssss [ 92%] +ssssssssssssssssssssssssssssss [ 92%] +networkx\readwrite\tests\test_leda.py .. [ 92%] +networkx\readwrite\tests\test_p2g.py ... [ 92%] +networkx\readwrite\tests\test_pajek.py ........ [ 93%] +networkx\readwrite\tests\test_sparse6.py ................ [ 93%] +networkx\readwrite\tests\test_text.py ....... [ 93%] +networkx\testing\tests\test_utils.py ..................... [ 93%] +networkx\tests\test_all_random_functions.py s [ 93%] +networkx\tests\test_convert.py ............... [ 94%] +networkx\tests\test_convert_numpy.py ................................... [ 94%] +........................................ [ 95%] +networkx\tests\test_convert_pandas.py ...................... [ 96%] +networkx\tests\test_convert_scipy.py ..................... [ 96%] +networkx\tests\test_exceptions.py ....... [ 96%] +networkx\tests\test_import.py .. [ 96%] +networkx\tests\test_lazy_imports.py .... [ 96%] +networkx\tests\test_relabel.py ....................... [ 97%] +networkx\utils\tests\test__init.py . [ 97%] +networkx\utils\tests\test_contextmanager.py . [ 97%] +networkx\utils\tests\test_decorators.py ................................ [ 98%] +... [ 98%] +networkx\utils\tests\test_heaps.py .. [ 98%] +networkx\utils\tests\test_mapped_queue.py .............................. [ 98%] +.......... [ 98%] +networkx\utils\tests\test_misc.py ...................................... [ 99%] + [ 99%] +networkx\utils\tests\test_random_sequence.py .... [ 99%] +networkx\utils\tests\test_rcm.py .. [ 99%] +networkx\utils\tests\test_unionfind.py ..... [100%] + +============================== warnings summary =============================== +networkx\drawing\tests\test_pylab.py:419 + D:\Arpita\Outreachy\networkx\networkx\networkx\drawing\tests\test_pylab.py:419: PytestUnknownMarkWarning: Unknown pytest.mark.mpl_image_compare - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html + @pytest.mark.mpl_image_compare + +networkx\utils\decorators.py:292 + D:\Arpita\Outreachy\networkx\networkx\networkx\utils\decorators.py:292: DeprecationWarning: preserve_random_state is deprecated and will be removed in 3.0. + warnings.warn(msg, DeprecationWarning) + +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_held_karp_ascent +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_ascent_fractional_solution +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_ascent_method_asymmetric +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_held_karp_ascent_asymmetric_3 +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_held_karp_ascent_fractional_asymmetric +networkx/algorithms/approximation/tests/test_traveling_salesman.py::test_asadpour_tsp + D:\Arpita\Outreachy\networkx\networkx\networkx\algorithms\approximation\traveling_salesman.py:679: OptimizeWarning: A_eq does not appear to be of full row rank. To improve performance, check the problem formulation for redundant equality constraints. + program_result = optimize.linprog(c, A_eq=a_eq, b_eq=b_eq) + +networkx/classes/tests/test_ordered.py::TestOrderedFeatures::test_subgraph_order + D:\Arpita\Outreachy\networkx\networkx\networkx\classes\tests\test_ordered.py:22: DeprecationWarning: OrderedDiGraph is deprecated and will be removed in version 3.0. + Use `DiGraph` instead, which guarantees order is preserved for + Python >= 3.7 + + cls.G = nx.OrderedDiGraph() + +networkx/linalg/tests/test_algebraic_connectivity.py::TestSpectralOrdering::test_cycle[lobpcg-False-expected_order0] + D:\Arpita\Outreachy\networkx\networkx\networkx\linalg\algebraicconnectivity.py:301: UserWarning: Exited at iteration 10 with accuracies + [0.02743716] + not reaching the requested tolerance 1e-08. + sigma, X = sp.sparse.linalg.lobpcg( + +networkx/linalg/tests/test_algebraic_connectivity.py::TestSpectralOrdering::test_cycle[lobpcg-True-expected_order1] + D:\Arpita\Outreachy\networkx\networkx\networkx\linalg\algebraicconnectivity.py:301: UserWarning: Exited at iteration 10 with accuracies + [0.00056623] + not reaching the requested tolerance 1e-08. + sigma, X = sp.sparse.linalg.lobpcg( + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +========== 4838 passed, 56 skipped, 11 warnings in 219.55s (0:03:39) ========== diff --git a/2022-round-1/arpitadash/nx_notebook.ipynb b/2022-round-1/arpitadash/nx_notebook.ipynb new file mode 100644 index 0000000..bd95c86 --- /dev/null +++ b/2022-round-1/arpitadash/nx_notebook.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3a926d35", + "metadata": {}, + "source": [ + "# Tasks\n", + "\n", + "* Create a random erdos-renyi graph with 100 nodes and a edge probability of 0.3\n", + "* Plot the degree_centrality distribution (a histogram of the degree centrality values).\n", + "* Change the edge probability of the erdos-reyni graph to 0.6 and plot the degree centrality distribution again.\n", + "* Infer the changes in the plots, why does the degree centrality distribution change. Create a markdown cell in the jupyter notebook and write what you can infer from the plots.\n", + "* Create a random barabasi_albert_graph with 100 nodes and attach 3 edges to a new node in the graph (m=3).\n", + "* Plot the degree_centrality distribution (a histogram of the degree histogram).\n", + "* Infer the changes in the plots, why does the degree centrality distribution change between these 2 random graph generators \n", + "* Create a markdown cell in the jupyter notebook and write what you can infer from the plots." + ] + }, + { + "cell_type": "markdown", + "id": "3ab15c61", + "metadata": {}, + "source": [ + "# Import Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "934a2d7a", + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "a0033437", + "metadata": {}, + "source": [ + "## Plotting graphs" + ] + }, + { + "cell_type": "markdown", + "id": "fb946843", + "metadata": {}, + "source": [ + "Creating a function that plots the histogram of the degree distribution in the graph. First, we store the degree of all nodes. Then, using the matplotlib histogram function, we plot the histogram distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "5fbb376a", + "metadata": {}, + "outputs": [], + "source": [ + "def create_and_plot_graph(G,prob='NA'):\n", + " deg = [d for n,d in G.degree()]\n", + " first_edge, last_edge = np.min(deg), np.max(deg)\n", + " n, bins, patches = plt.hist(x=deg, bins=20, color='#0504aa', alpha=0.7, rwidth=0.75)\n", + "# plt.xlim([first_edge-1, last_edge+1])\n", + " plt.xlim([0,100])\n", + " plt.title(str(G)+' probability: '+str(prob))\n", + " plt.ylabel('# of nodes')\n", + " plt.xlabel('Degree')\n", + " plt.grid('on')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "d3e429ff", + "metadata": {}, + "source": [ + "## Erdos-Renyi Graph" + ] + }, + { + "cell_type": "markdown", + "id": "c4fd6a26", + "metadata": {}, + "source": [ + "Erdos-Renyi algorithm is a random graph generator. The graphs generated are chosen only if the edge probability is higher than a certain specified value. Higher the probability, more the number of edges. \n", + "$G(n,p)$ is the graph where $n$ is the number of nodes in the graph, and $p$ is the edge probability." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "89a41c0b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAicElEQVR4nO3de5wcVZ338c+XBAQyQLgMyE0CQccHUblEBUGdCAIiSnZFBYEFRKOLrqyLD6KLiq647rqPrqwryhoFAZERIUp2XURluKyAEkDlNmoQJFyEQBKY4AqB3/PHOZ2pNNU9nZnpy0x/36/XvKaqTlWdU6dP1a9OVXW1IgIzM7Nq67W7AGZm1pkcIMzMrJQDhJmZlXKAMDOzUg4QZmZWygHCzMxKOUA0SNIZki6Y4HW+QNKwpGl15glJu05kvp1G0j2SDmx3OWppxmffbpJm5bY1vd1lGavxtBtJg5LeXSNtrf2yOK+koyX9aOylnlwmbYCQdKSkGyWtkvRwHj5JktpdtkZFxB8ioicinoH6jbYRknaXdIWkZZKe8wUXSVtIuizX2b2S3lmV/s48fZWkhZK2GGtZuoWkfSRdKekxSY9I+q6kbQvpMyWdl9vow5LOqFp+D0nXSlopaamkjxfSdpN0k6Tl+e/HknZr4eZ1per9sirtwog4qDI+kSdwuS0slvRk/r/HKPMfKenOvL8ukfSaiShH0aQMEJJOAb4EfB54PrAN8D5gP2CDGsvUPEufQp4GBoATa6T/O/AUqb6OBs6W9BKA/P9rwLE5/UngK80u8BSwOXAOMAvYCXgC+GYh/YvAxjn9lcCxkk4opH8buAbYAngdcJKkt+S0B4AjctpWwA+A7zRpOzrKZO7ZjIWkDYDvAxeQ2tR5wPfz9LL53wD8E3ACsAnwWuDuCS9YREyqP2AzYBXw1lHmOxc4G/ivPP+BwJuAW4DHgfuAMwrzzwICmE/aMR8EPlxIP4N08P0W6SBwOzCnRt6fAv4tD6+f8/98Ht8I+F/STl/JczpwJvBMThsGvpznD1Lw+y2wgnSQ1yjbvmv6aNeaNoMUHF5UmHY+8Lk8/Fng24W02Xn+TWrkUbNcpBOP04F7gYdznW1WWPbYnPYo8PfAPcCBhWVPA5bk9AFgi5y2IWkHejTn+Qtgmxrlq6zjCeAO4C8KaccD1wH/AiwHfg+8sZC+M3B1XvZK4MvABQ22z72AJwrjy4BXFMY/BlxbGH8S2K0w/l3goyXrnQ68H3hylH1jAant3g98BpiW06bl7V1GOpC8v9L2Ctt8Td7mH+fP84LCuvcBfpbr/ZdAf1V93p2X/T1wdI3ynQFcAlyc570ZeHkh/R7gI8CvgD/nbX4LaV9bAQwC/6dq/o/mz3c5KTBvmNM2BxYBj+S0RcAOhWUHgX8Efk46HnyfkXY2q6puBoF3F9tOHr4mz7eKtM++A7gNeHMhn/Vzne85Srs5KH9mKkz7A3BIjfl/BpzYSJscz1/LD/DjLjAcAqyufHh15jsXWEnqVaxHOrj0Ay/N4y8D/gjMq2oUF5EOpi/Njaty4DqDdPA+lLSz/SNwQ428Xw/8Og+/mnSgurGQ9svRGmJhXZEb90zgBblMpY2msExZgNiTqoML8GHg8jz8feAjVenDwN418qhZLuBdwO+AXYAe4FLg/Jy2W17va4HnAV/In2elnk8GbgB2yOlfAy7Kae8FLiedkU8D9gY2rVG+twHb5c/6HaSdeNucdjypt/WevJ6/Jp0UVALc9blcz8vlfILGA8TfFtsF6eDwysL43wPLC+OfBT5HOpD0AUspBJQ8z4pcR88Cp9fJ+7JcXzOArUkHv/fmtPcBdwE7kk5Orqpqe9eTAsgGwP6kg+YFOW17UlA+NNfnG/J4b87rcaAvz7st8JIa5Tsj1/sReXs/TAoo6+f0e4Bbcxk3Al6UP7c35PlPJbWrDQrz31bYpv8BPpPTtgTemtvKJqTAu7BQlkHSAXn3vA3fK2zvLBoIEIX9YNfC+KnAxYXxwxk5FiwCTqtRNx8Cflg1bRFwSsm800gnb6fl+lhKOonZaF2Pp6O254leYbP/gGOAh6qmVc5s/gS8Nk87F/jWKOv6V+CLVY3ixYX0fwYWFBr3jwtpuwF/qrHeSi9hy/whfix/iD2k3sVZozXEqga4f2F8oFYjK8xTFiBeU1Jv7wEG8/BPgPdVpd9P4Uyx0XLldZ1USOsjHRimA58AvlNIq/RsKgHiTuCAQvq2hWXflT/rl42h3dwKHJ6Hjwd+V0jbOG/P80nBbjUwo5D+bRoIEKSTjseA1xSmXUAKkJvkz2UJ8OdC+qtJO/nqXIZP1Vj3DOAk4E010rchnXVvVJh2FHBVHv5p8fMlnbFGrtfKNm9cVe7KAfMj5ABfSL8COC6XawXpYFz3AEXah4rBcz1Sb+c1efwe4F2F9I8DA1Xzr2mTef7iNh0KLKmR9x6sHZgHyb3nwv78FOngO4uxB4jtSCcUm+bxS4BTG2g7H6ewX+RpF1K4ylGVRwA3kfaPrUjB8cx13S9G+5uM9yAeBbYqXqOMiFdHxMycVtym+4oLSnqVpKvyzcSVpLOqrarWX1zmXtKHUfFQYfhJYMOya6UR8SfSh/c60hno1aQD23552tUNbGdRdb4967g8pLP2TaumbUpqzI2kr0u5tiPVXcW9pAPRNjltTR1HxCrS51axE3CZpBWSVpACxjN52fNJB6bvSHpA0j9LWr+sYJL+StKthfXsztqf9ZqyR8STebAnl295Llex/HXlG5U/BE6OiGsLSR8knbj8ltRLu4h0skB+COC/gU+Terg7AgdLOql6/bk8XwW+JWnrkiLsRDrLfrCwzV8j9SSgqt6rtmk74LFCPVA1707A2yrrzeven9QjW0Xqob0v5/2fkl5cUr7nrDcins11sV1ZOlXtKM9/H6lHUzb/mv1V0saSvpYfunicdDloZtW9yOpl1+e5x4N1EhEPkA7Wb5U0E3gj6UA/mnXZ//6U//9bRDwYEctIPd5Dx1ToOiZjgLiedKZ0eAPzRtX4t0k3+naMiM1IO1z1U087FoZfQLr0MBZXky4n7Um6Vn41cDDpRuU1DZZ3Iv0GmC7phYVpLydd3yX/f3klQdIupEssvxlDXg+QDioVlTPUP5LOGNfUsaSNST2tivtI9wNmFv42jIj7I+LpiPhUROxGOvM+DPir6swl7QT8B/ABYMt88nAbz/2syzwIbC5pRlX5a8r5/Rj4h4g4v5gWEY9FxNER8fyIeAlpn/t5Tt4FeCYivhURqyNiKekmdK0dfT1Sb2f7krT7SPvFVoV62zTnWdmu6rZd3OYt8mdRUZz3PlIPoviZzIiIz+VtvCIi3kA6m72LVPe1FD/79UiXEov7WHEfWKsd5ScUdyT1IsrKWdxfTyH1XF8VEZuSTtRg7TZQvezTpEuC43Ue6UrH24DrI+L+UeaHtP+9rOopzJcxsn+uERHLSYG1WFdNOXZMugAREStIl2m+IukISZtIWi8/Ejaj7sKpm/9YRPyvpFcC7yyZ5+P57OMlpCcELh5jUa8mHbzuiIinyN1U4PcR8UiNZf5IOmiMiZINyU9ySdpQ0vNgzRnopcCnJc2QtB8pyFYOaBcCb5b0mnxw/DRwaUTU60HUchHwIUk7S+ohXWe/OCJWk7rch0naPz+h8WnWbodfBc7MB10k9Uo6PA/PlfTSfBb4OGmHfrYk/xmkHeaRvNwJpB7EqCLiXlLv71OSNpC0P/DmWvNL2p50+ebLEfHVkvTZkraUNE3SG0kPQXwmJ/8mzaJ35jb8fNLZ+K/ysm+QtGdedlPSWeJyUq+qutwPAj8C/p+kTfP6Zkt6XZ5lAPigpB0kbU669Fm9zWfkbd63apsvILWNg3NZNpTUn9e1jaTDc5v5M+lMuOwzqdhb0l/mnvff5mVuqDHvAPAmSQfknuIpef6fFeZ5fy7HFqT7O5X9dRPSmfaKnPbJkvUfo/Qo8cakdnhJlDzaOoqyfXYh6WGFk0kPaDRikNRT/qCk50n6QJ7+0xrzfxP4G0lb58/zQ6R7FhNroq9ZteqP9Jjmz0mXNh4BbiTtfJUbWOeSb1gVljmC1JV8IlfmmqdTeO5TTA9RuHZIun5afKqjMn/pzXLS5YqngU/mcZGe6Dm71jqAfUkHjeWM3Keovsb5nO0qWV/x755C+hakxruK9ITEO6uWf2eevorCUx018qpZLtIB/xOkM89HyI/uFeY9LudT6ymmvwOG8ue0BPhsTjsqT19F2jHPqlP/Z5LuB1S631dT4zpy9faQdvhrSQe7uk8xkQ48kedd81dIf3tuT0+S7oMcXLX860k9zJWkNvcf5HsBpDPQu/I6HwH+kzr3X0hPMZ1NOrtcSXpi78icNp30yO2jpBvD1U8xzc7b/ATpHtI55PtvOf1VuQ4fK5TlBaRew9U5vxWkA91uNcp3Bms/xXQLsFchfU07KEz7C9JTSitzPi+pmr/yFNMK0pl7pe62y2UZJu1T763a3kHWforpclLvC9btHsT7SD2wFcDbC9O/TmqnPYVpPwQ+Vufz2xNYTApsN1N48ol0H/OHhfH1SY+hryC1m7PIT3BN5F/lqY2uJ2kWI09UrG5zcczaStLFwF0RUXbmPdZ1nkEKwsdM1Do7laRPkB4pn9TbOukuMZnZxJP0inxJaj1Jh5AuPy5sc7EmpXxJ60RSL2xSc4AwM0iP+A6SLsmcBfx1RNzS1hJNQpLeQ7q0+sOIqPUwyqThS0xmZlbKPQgzMys1KV6INXPmzNh11yn9xuuGrVq1ihkzRnuatzu4Lka4Lka4LkYsXrx4WUT0jnX5SREgttlmG2666aZ2F6MjDA4O0t/f3+5idATXxQjXxQjXxQhJo74FoB5fYjIzs1IOEGZmVsoBwszMSjlAmJlZKQcIMzMr5QBhZmalHCDMzKyUA4SZmZVygDAzs1IOEGZT3Lx51zFv3nXtLoZNQg4QZmZWygHCzMxKOUCYmVkpBwgzMyvlAGFmZqUcIMzMrJQDhJmZlXKAMDOzUg4QZmZWqmkBQtI3JD0s6baStFMkhaStmpW/mZmNTzN7EOcCh1RPlLQjcBDwhybmbWZm49S0ABER1wCPlSR9ETgViGblbWZm49fSexCSDgfuj4hftjJfMzNbd4po3om8pFnAoojYXdLGwFXAQRGxUtI9wJyIWFZj2fnAfIDe3t69BwYGmlbOyWR4eJienp52F6MjuC5G1KuLJUuGAZg9uzvqyu1ixNy5cxdHxJyxLt/KAPFS4CfAkzl5B+AB4JUR8VC99fT19cXQ0FDTyjmZDA4O0t/f3+5idATXxYh6dVF51ffChfu3sETt43YxQtK4AsT0iSxMPRHxa2DryvhoPQgzM2uvZj7mehFwPdAnaamkE5uVl5mZTbym9SAi4qhR0mc1K28zMxs/f5PazMxKOUCYmVkpBwgzMyvlAGFmZqUcIMzMrJQDhJmZlXKAMDOzUg4QZmZWygHCbBKZN++6Ne9WMms2BwgzMyvlAGFmZqUcIMzMrJQDhJmZlXKAMDOzUg4QZmZWygHCzMxKOUCYmVkpBwgzMyvlAGFmZqWaFiAkfUPSw5JuK0z7vKS7JP1K0mWSZjYrfzMzG59m9iDOBQ6pmnYlsHtEvAz4DfDRJuZvZmbj0LQAERHXAI9VTftRRKzOozcAOzQrfzMzGx9FRPNWLs0CFkXE7iVplwMXR8QFNZadD8wH6O3t3XtgYKBp5ZxMhoeH6enpaXcxOkI31sWSJcMAzJ699nbXq4tay0xV3dguapk7d+7iiJgz1uXbEiAk/T0wB/jLaKAAfX19MTQ01JxCTjKDg4P09/e3uxgdoRvrovKq74UL919rer26qLXMVNWN7aIWSeMKENMnsjCNkHQ8cBhwQCPBwczM2qOlAULSIcCpwOsi4slW5m1mZuummY+5XgRcD/RJWirpRODLwCbAlZJulfTVZuVvZmbj07QeREQcVTJ5QbPyMzOzieVvUpuZWSkHCDMzK+UAYWZmpRwgzMyslAOEmZmVcoAwM7NSDhBmZlbKAcLMzEo5QJiZWSkHCDMzK+UAYWZmpRwgzMyslAOEmZmVcoAwM7NSDhBmZlbKAcLMzEo5QJiZWSkHCDMzK+UAYWZmpZoWICR9Q9LDkm4rTNtC0pWSfpv/b96s/M3MbHya2YM4FzikatppwE8i4oXAT/K4mZl1oKYFiIi4BnisavLhwHl5+DxgXrPyNzOz8VFENG/l0ixgUUTsnsdXRMTMPCxgeWW8ZNn5wHyA3t7evQcGBppWzslkeHiYnp6edhejI3RjXSxZMgzA7Nlrb3e9uqi1zFTVje2ilrlz5y6OiDljXb5tASKPL4+IUe9D9PX1xdDQUNPKOZkMDg7S39/f7mJ0hG6si3nzrgNg4cL915pery5qLTNVdWO7qEXSuAJEq59i+qOkbQHy/4dbnL+ZmTWo1QHiB8Bxefg44Pstzt/MzBo0aoCQdLKkTZUskHSzpIMaWO4i4HqgT9JSSScCnwPeIOm3wIF53MzMOtD0BuZ5V0R8SdLBwObAscD5wI/qLRQRR9VIOmDdimhmZu3QyCUm5f+HAudHxO2FaWZmNkU1EiAWS/oRKUBcIWkT4NnmFsvMzNqtkUtMJwJ7AHdHxJOStgROaGqpzMys7RrpQQSwG/DBPD4D2LBpJTIzs47QSID4CrAvULnp/ATw700rkZmZdYRGLjG9KiL2knQLQEQsl7RBk8tlZmZt1kgP4mlJ00iXmpDUi29Sm5lNeY0EiLOAy4CtJZ0JXAd8tqmlMjOzthv1ElNEXChpMekLbgLmRcSdTS+ZmZm1Vc0AIWmLwujDwEXFtIio/q0HMzObQur1IBaT7jsIeAGwPA/PBP4A7NzswpmZWfvUvAcRETtHxC7Aj4E3R8RWEbElcBijvIfJzMwmv0ZuUu8TEf9VGYmIHwKvbl6RzMysEzTyPYgHJJ0OXJDHjwYeaF6RzMysEzTSgzgK6CU96noZsDUj36o2M7MpqpHHXB8DTs5vcY2IGG5+sczMrN0a+UW5l+bXbNwG3C5psaTdm180MzNrp0YuMX0N+LuI2CkidgJOAc5pbrHMzKzdGgkQMyLiqspIRAySXvk9ZpI+JOl2SbdJukiSXx9uZtZhGgkQd0v6uKRZ+e904O6xZihpe9JvS8yJiN2BacCRY12fmZk1RyMB4l2kp5guzX+9edp4TAc2kjQd2Bg/Nmtm1nEUEa3PVDoZOBP4E/CjiDi6ZJ75wHyA3t7evQcGBlpbyA41PDxMT09Pu4vREbqxLpYsSQ8Rzp7ds9ZwvbooztcNurFd1DJ37tzFETFnrMuPGiAkvQj4MDCLwmOxEfH6MWUobQ58D3gHsAL4LnBJRFxQa5m+vr4YGhoaS3ZTzuDgIP39/e0uRkfoxrqYN+86ABYu3H+t4Xp1UZyvG3Rju6hF0rgCRCPfpP4u8FXg68AzY82o4EDg9xHxCICkS0mv7qgZIMzMrPUaCRCrI+LsCczzD8A+kjYmXWI6ALhpAtdvZmYToJGb1JdLOknStpK2qPyNNcOIuBG4BLgZ+HUug79XYWbWYRrpQRyX///fwrQAdhlrphHxSeCTY13ezMyar5F3MfmHgczMulAjl5jMzKwLOUCYmVmpmgFC0n75//NaVxwzM+sU9XoQZ+X/17eiIGZm1lnq3aR+WtI5wPaSzqpOjIgPNq9YZmbWbvUCxGGkbz0fDCxuTXHMzKxT1AwQEbEM+I6kOyPily0sk5mZdYBGvij3qKTLgP3y+LXAyRGxtHnFMusurXqhXiWfVuRlk18jj7l+E/gBsF3+uzxPMzOzKayRALF1RHwzIlbnv3NJPxpkZmZTWCMBYpmkYyRNy3/HAI82u2BmZtZejf7k6NuBh4AHgSOAE5pZKDMza79GXtZ3L/CWFpTFzMw6iN/FZGZmpRwgzMyslAOEmZmVGjVASDq9MOw3u5qZdYl6r/v+iKR9SU8tVfjNrmZmXaJeD+Iu4G3ALpKulfQfwJaS+sabqaSZki6RdJekO3MgMjOzDlIvQKwAPgb8DugHvpSnnybpZ+PM90vAf0fEi4GXA3eOc31mZjbB6n0P4mDgE8Bs4AvAr4BVETGuL8lJ2gx4LXA8QEQ8BTw1nnWamdnEU0TUn0H6JXAisBdwJjAELI+IN48pQ2kP4BzgDlLvYTHp7bCrquabD8wH6O3t3XtgYGAs2U05w8PD9PT0tLsYHWEq1cWSJcMAzJ7ds9Zwo/MtW7aSlSunlS5XtkwjeU1WU6ldjNfcuXMXR8ScsS7fSID454g4NQ/fEhF7Stoq/17EumcozQFuAPaLiBslfQl4PCI+XmuZvr6+GBoaGkt2U87g4CD9/f3tLkZHmEp1UXzdd71Xf9eab8GCRVx++czS5cqWaSSvyWoqtYvxkjSuADHqY66V4JAdn6eNKThkS4GlEXFjHr+E1DsxM7MOsk5flJuIX5aLiIeA+wpPQx1AutxkZmYdpJFflGuGvwEulLQBcDd+O6yZWcdpS4CIiFuBMV8XMzOz5vO7mMzMrJQDhJmZlXKAMDOzUg4QZmZWygHCzMxKOUCYmVkpBwgzMyvlAGFmZqXa9U1qM2ui8b6Er/qlftad3IMwM7NSDhBmZlbKAcLMzEo5QJiZWSkHCDMzK+UAYWZmpRwgzMyslAOEmZmVcoAwM7NSbQsQkqZJukXSonaVwczMamtnD+Jk4M425m9mZnW0JUBI2gF4E/D1duRvZmaja1cP4l+BU4Fn25S/mZmNQhHR2gylw4BDI+IkSf3AhyPisJL55gPzAXp7e/ceGBhoaTk71fDwMD09Pe0uRkeYzHWxZMnwmuHZs3vWjNcaHm2+ZctWsnLltAlbX/V8k8lkbhcTbe7cuYsjYs5Yl29HgPhH4FhgNbAhsClwaUQcU2uZvr6+GBoaalEJO9vg4CD9/f3tLkZHmMx1Uf067eLrucuGR5tvwYJFXH75zAlb32R+3fdkbhcTTdK4AkTLLzFFxEcjYoeImAUcCfy0XnAwM7P28PcgzMysVFt/US4iBoHBdpbBzMzKuQdhZmalHCDMzKyUA4SZmZVygDAzs1IOEGZmVsoBwszMSjlAmJlZKQcIMzMr1dYvyplNZZP5fUZm4B6EmZnV4ABhZmalHCDMzKyUA4SZmZVygDAzs1IOEGZmVsoBwszMSjlAmJlZKQcIMzMr5QBhZmalWh4gJO0o6SpJd0i6XdLJrS6DmZmNrh3vYloNnBIRN0vaBFgs6cqIuKMNZTEzsxpa3oOIiAcj4uY8/ARwJ7B9q8thZmb1KSLal7k0C7gG2D0iHq9Kmw/MB+jt7d17YGCg9QXsQMPDw/T09LS7GB2h0+tiyZLhNcOzZ/esGS8O10tbl/mWLVvJypXTJmx91fPV265O0+ntopXmzp27OCLmjHX5tgUIST3A1cCZEXFpvXn7+vpiaGioNQXrcIODg/T397e7GB2h0+ui+nXflfHicL20dZlvwYJFXH75zAlbX71XlXf6a8w7vV20kqRxBYi2PMUkaX3ge8CFowUHMzNrj3Y8xSRgAXBnRHyh1fmbmVlj2tGD2A84Fni9pFvz36FtKIeZmdXR8sdcI+I6QK3O18zM1o2/SW1mZqUcIMzMrJQDhJmZlXKAMDOzUg4QZmZWygHCzMxKOUCYmVkpBwgzMyvVjt+DMJvU6r3wbqrqhm2053IPwszMSjlAmJlZKQcIMzMr5QBhZmalHCDMzKyUA4SZmZVygDAzs1IOEGZmVsoBwszMSjlAmJlZqbYECEmHSBqS9DtJp7WjDGZmVl/LA4SkacC/A28EdgOOkrRbq8thZmb1taMH8UrgdxFxd0Q8BXwHOLwN5TAzszra8TbX7YH7CuNLgVdVzyRpPjA/j/5Z0m0tKNtksBWwrN2F6BBtrwupfHhd5quVto7zramLCVrfOqd1kLa3iw7SN56FO/Z13xFxDnAOgKSbImJOm4vUEVwXI1wXI1wXI1wXIyTdNJ7l23GJ6X5gx8L4DnmamZl1kHYEiF8AL5S0s6QNgCOBH7ShHGZmVkfLLzFFxGpJHwCuAKYB34iI20dZ7Jzml2zScF2McF2McF2McF2MGFddKCImqiBmZjaF+JvUZmZWygHCzMxKdXSA6OZXckjaUdJVku6QdLukk/P0LSRdKem3+f/m7S5rq0iaJukWSYvy+M6Sbszt4+L80MOUJ2mmpEsk3SXpTkn7dmu7kPShvH/cJukiSRt2S7uQ9A1JDxe/I1arHSg5K9fJryTt1UgeHRsg/EoOVgOnRMRuwD7A+/P2nwb8JCJeCPwkj3eLk4E7C+P/BHwxInYFlgMntqVUrfcl4L8j4sXAy0l10nXtQtL2wAeBORGxO+mhlyPpnnZxLnBI1bRa7eCNwAvz33zg7EYy6NgAQZe/kiMiHoyIm/PwE6SDwPakOjgvz3YeMK8tBWwxSTsAbwK+nscFvB64JM/SFXUhaTPgtcACgIh4KiJW0KXtgvQk5kaSpgMbAw/SJe0iIq4BHquaXKsdHA58K5IbgJmSth0tj04OEGWv5Ni+TWVpK0mzgD2BG4FtIuLBnPQQsE27ytVi/wqcCjybx7cEVkTE6jzeLe1jZ+AR4Jv5ctvXJc2gC9tFRNwP/AvwB1JgWAkspjvbRUWtdjCm42knBwgDJPUA3wP+NiIeL6ZFekZ5yj+nLOkw4OGIWNzusnSA6cBewNkRsSewiqrLSV3ULjYnnRnvDGwHzOC5l1y61kS0g04OEF3/Sg5J65OCw4URcWme/MdK1zD/f7hd5Wuh/YC3SLqHdKnx9aTr8DPzpQXonvaxFFgaETfm8UtIAaMb28WBwO8j4pGIeBq4lNRWurFdVNRqB2M6nnZygOjqV3Lka+wLgDsj4guFpB8Ax+Xh44Dvt7psrRYRH42IHSJiFqkd/DQijgauAo7Is3VLXTwE3Cep8pbOA4A76MJ2Qbq0tI+kjfP+UqmLrmsXBbXawQ+Av8pPM+0DrCxciqqpo79JLelQ0rXnyis5zmxviVpH0v7AtcCvGbnu/jHSfYgB4AXAvcDbI6L6RtWUJakf+HBEHCZpF1KPYgvgFuCYiPhzG4vXEpL2IN2s3wC4GziBdLLXde1C0qeAd5Ce+rsFeDfp2vqUbxeSLgL6Sa83/yPwSWAhJe0gB9Avky7BPQmcEBGjvum1owOEmZm1TydfYjIzszZygDAzs1IOEGZmVsoBwszMSjlAmJlZqZb/opxZp5D0DOkx4vVJj0l+i/SSt2frLmjWJRwgrJv9KSL2AJC0NfBtYFPS8+TjImlaRDwz3vWYtZMvMZkBEfEw6TXIH8jfNp0m6fOSfpHfn/9eAEnrSfpK/i2GKyX9l6Qjcto9kv5J0s3A2yQdJOl6STdL+m5+rxaS9pZ0taTFkq5o5K2aZu3gAGGWRcTdpG/tb036DYGVEfEK4BXAeyTtDPwlMIv0GyXHAvtWrebRiNgL+DFwOnBgHr8J+Lv8fq1/A46IiL2BbwBd84YAm1x8icms3EHAyyq9A2Az0o+t7A98N9+neEjSVVXLXZz/70MKIv+T3nLABsD1QB+wO3Blnj6N9Kpqs47jAGGW5Xc7PUN6A6aAv4mIK6rmOXSU1ayqzApcGRFHVS3/UuD2iKjueZh1HF9iMgMk9QJfBb6c36N/BfDX+ZIQkl6Uf5jnf4C35nsR25BellbmBmA/Sbvm5WdIehEwBPRK2jdPX1/SS5q5bWZj5R6EdbONJN3KyGOu5wOVV6t/nXSv4eb8JsxHSD/f+D1GXit9H3Az6ZfM1hIRj0g6HrhI0vPy5NMj4jf5stVZ+edDp5PeWHz7xG+e2fj4ba5m60hST0QMS9oS+DmwX/6dBrMpxT0Is3W3SNJM0o3nf3BwsKnKPQgzMyvlm9RmZlbKAcLMzEo5QJiZWSkHCDMzK+UAYWZmpf4/7n/kE4FxEgAAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Creating an erdos-renyi graph or a #binomial graph with 100 nodes and edge-probability distribution of 0.3\n", + "G = nx.erdos_renyi_graph(100,0.3,seed=4812)\n", + "create_and_plot_graph(G,0.3)\n", + "# Creating an erdos-renyi graph with 100 nodes and an edge probability of 0.6\n", + "G2=nx.erdos_renyi_graph(100,0.6,seed=4812)\n", + "create_and_plot_graph(G2,0.6)" + ] + }, + { + "cell_type": "markdown", + "id": "428135b3", + "metadata": {}, + "source": [ + "### Inference\n", + "The higher the probability parameter, the more the number of edges are generated. Hence, even though the number of nodes remain the same, the edges generated when the probability is 0.6 is more in number. \n", + "The expected degrees of the graphs would be $n*p$, where $n$ is the number of nodes and $p$ is the edge-probability. Hence, in the case $p=0.3$, the expected degree of the nodes is $\\approx30$. On performing a similar analysis in the case where $p=0.6$, the expected degree of the nodes is $approx60$. \n", + "The clustering of the degrees around the expected probabilities can be observed from the degree centrality distribution as well. " + ] + }, + { + "cell_type": "markdown", + "id": "a0ea8127", + "metadata": {}, + "source": [ + "## Barabasi Albert Graph" + ] + }, + { + "cell_type": "markdown", + "id": "406f8ed4", + "metadata": {}, + "source": [ + "Barabasi-Albert algorithm generates graphs based on a preferential attachment. New nodes attach to existing nodes that have higher existing connections. It is one of the most popular random graph generator algorithms for scale-free networks.\n", + "$G(n,m)$ where $n$ is the number of nodes and $m$ is the number of edges that connect a new node with existing nodes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78981787", + "metadata": {}, + "outputs": [], + "source": [ + "# Visualizing how the barabasi albert graph grows\n", + "gs1 = nx.star_graph(3)\n", + "nx.draw(gs1,pos=nx.circular_layout(gs1),with_labels=True)\n", + "plt.show()\n", + "#Creating a random graph with 8 nodes and 3 edges\n", + "Gb1 = nx.barabasi_albert_graph(8,3,seed=7)\n", + "nx.draw(Gb1,pos=nx.circular_layout(Gb1),with_labels=True)\n", + "plt.show()\n", + "# Initial graph when adding an extra node\n", + "Gb2 = nx.barabasi_albert_graph(9,3,seed=7,initial_graph=Gb1)\n", + "nx.draw(Gb2,pos=nx.circular_layout(Gb2),with_labels=True)\n", + "plt.show()\n", + "# No intial graph when adding an extra node\n", + "gs2 = nx.barabasi_albert_graph(9,3,seed=7)\n", + "nx.draw(gs2,pos=nx.circular_layout(gs2),with_labels=True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "7c0b00fc", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "G3 = nx.barabasi_albert_graph(1000,3,seed=4182)\n", + "create_and_plot_graph(G3)" + ] + }, + { + "cell_type": "markdown", + "id": "205902e4", + "metadata": {}, + "source": [ + "### Inference\n", + "The degree centrality distribution in graphs generated by Barabasi-Albert algorithm follow the *power-law distribution*. This is expected since the preferential attachment rule ensures that new nodes connect to existing nodes that are highly connected." + ] + }, + { + "cell_type": "markdown", + "id": "db6454c9", + "metadata": {}, + "source": [ + "## Comparison between the 2 algorithms\n", + "The **Erdos-Renyi** algorithm generates random graphs that ensure that the degree of the nodes can be manipulated by fixed an edge probability. The edge probability dictates the probability of an edge existing between 2 nodes. The degree of the nodes tend to cluster around $n*p$ where $n$ is the number of nodes and $p$ is the edge probability.\n", + " $\\newline$\n", + "On the other hand, **Barabasi-Albert** algorithm is a scale-free algorithm whose degree distribution follows power-law. New nodes preferentially attach themselves to existing nodes that show a high degree. Hence, the number of nodes that show a very high degree are few in number." + ] + } + ], + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2022-round-1/arpitadash/nx_tutorial_script.py b/2022-round-1/arpitadash/nx_tutorial_script.py new file mode 100644 index 0000000..a3eda76 --- /dev/null +++ b/2022-round-1/arpitadash/nx_tutorial_script.py @@ -0,0 +1,29 @@ +import networkx as nx +import matplotlib.pyplot as plt + +#Creating a networkX digraph +G=nx.DiGraph() +#Adding nodes of int, str and tuple type +G.add_node(1) +G.add_node("string1") +G.add_node((6,2)) +G.add_node('string2') +G.add_nodes_from([2,3,5]) +G.add_nodes_from([(4,{'color':'red'})]) +#Adding edges between the nodes +G.add_edge(4,1) +G.add_edges_from([(1,2),(1,3),(1,'string1'),(2,3),('string2',1),(1,'string2'),(1,(6,2)),(2,5),((6,2),'string2'),('string2',4)]) +#Calculating shortest path between all nodes in the graph +p=nx.shortest_path(G) +print('Printing shortest path') +#Storing existing nodes in the graph +G_node_list = G.nodes +for index,node in enumerate(G_node_list): + print('From',node) + for index2,node2 in enumerate(G_node_list): + if index!=index2 and nx.has_path(G, node, node2): + print('To', node2, ':', p[node][node2]) +#Plotting the graph +nx.draw(G,pos=nx.circular_layout(G),with_labels=True) +plt.show() + diff --git a/2022-round-1/arpitadash/nx_version.txt b/2022-round-1/arpitadash/nx_version.txt new file mode 100644 index 0000000..860487c --- /dev/null +++ b/2022-round-1/arpitadash/nx_version.txt @@ -0,0 +1 @@ +2.7.1