scikit-network 0.32.0__tar.gz → 0.33.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-network might be problematic. Click here for more details.
- {scikit-network-0.32.0 → scikit-network-0.33.0}/AUTHORS.rst +0 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/HISTORY.rst +13 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/PKG-INFO +16 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/visualization.rst +1 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/PKG-INFO +16 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/setup.cfg +2 -2
- {scikit-network-0.32.0 → scikit-network-0.33.0}/setup.py +3 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/__init__.py +1 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/diffusion.py +4 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/knn.py +4 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/metrics.py +3 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/propagation.py +6 -5
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/leiden.py +2 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/louvain.py +3 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_kcenters.py +5 -37
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/__init__.py +1 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/base.py +7 -2
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/load.py +18 -21
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/models.py +15 -15
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/parse.py +19 -17
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_API.py +3 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_base.py +2 -2
- scikit-network-0.33.0/sknetwork/data/tests/test_toy_graphs.py +68 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/toy_graphs.py +35 -43
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/base.py +3 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/louvain_embedding.py +0 -26
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/svd.py +0 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_louvain_embedding.py +9 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_svd.py +6 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/gnn_classifier.py +1 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/louvain_hierarchy.py +10 -6
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/paris.cpp +703 -701
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/paris.pyx +4 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_metrics.py +4 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/push.cpp +69 -69
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/diffusion.py +6 -4
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/cliques.cpp +69 -69
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/core.cpp +69 -69
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/__init__.py +1 -1
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/values.py +5 -3
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/graphs.py +1 -1
- scikit-network-0.32.0/sknetwork/data/tests/test_toy_graphs.py +0 -68
- {scikit-network-0.32.0 → scikit-network-0.33.0}/CONTRIBUTING.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/LICENSE +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/MANIFEST.in +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/README.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/Makefile +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/authors.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/conf.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/contributing.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/first_steps.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/genindex.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/glossary.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/history.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/make.bat +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/readme.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/classification.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/clustering.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/data.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/embedding.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/gnn.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/hierarchy.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/linalg.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/linkpred.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/path.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/ranking.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/regression.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/topology.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/reference/utils.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/classification/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/clustering/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/data/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/embedding/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/gnn/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/hierarchy/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/linkpred/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/overview/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/path/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/ranking/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/regression/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/topology/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/docs/tutorials/visualization/index.rst +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/SOURCES.txt +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/dependency_links.txt +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/not-zip-safe +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/requires.txt +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/scikit_network.egg-info/top_level.txt +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/base_rank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/pagerank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_diffusion.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_knn.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_metrics.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_pagerank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_propagation.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/vote.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/classification/vote.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/kcenters.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/leiden_core.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/leiden_core.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/louvain_core.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/louvain_core.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/metrics.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/propagation_clustering.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_leiden.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_louvain.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_metrics.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/test_graphs.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_load.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_models.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_parse.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_test_graphs.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/data/timeout.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/force_atlas.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/random_projection.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/spectral.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/spring.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_force_atlas.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_random_projection.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_spectral.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_spring.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/activation.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/base_activation.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/base_layer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/layer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/loss.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/neighbor_sampler.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/optimizer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_activation.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_base_layer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_gnn_classifier.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_layers.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_loss.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_neigh_sampler.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_optimizer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_utils.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/gnn/utils.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/metrics.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_algos.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/basics.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/diteration.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/diteration.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/eig_solver.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/laplacian.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/normalizer.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/operators.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/polynome.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/ppr_solver.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/push.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/sparse_lowrank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/svd_solver.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_eig.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_laplacian.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_normalization.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_operators.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_polynome.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_ppr.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_sparse_lowrank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_svd.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linkpred/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linkpred/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linkpred/nn.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linkpred/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/linkpred/tests/test_nn.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/log.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/dag.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/distances.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/search.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/shortest_path.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_dag.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_distances.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_search.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_shortest_path.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/betweenness.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/betweenness.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/closeness.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/hits.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/katz.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/pagerank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_betweenness.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_closeness.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_hits.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_pagerank.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_postprocess.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/tests/test_API.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/regression/tests/test_diffusion.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/sknetwork.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/test_base.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/test_log.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/cliques.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/core.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/cycles.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.pxd +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/structure.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_cliques.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_core.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_cycles.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_structure.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_triangles.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_wl.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/triangles.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/triangles.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman_core.cpp +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman_core.pyx +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/check.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/format.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/membership.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/neighbors.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_check.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_format.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_membership.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_neighbors.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_tfidf.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_values.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/utils/tfidf.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/colors.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/dendrograms.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/tests/__init__.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/tests/test_dendrograms.py +0 -0
- {scikit-network-0.32.0 → scikit-network-0.33.0}/sknetwork/visualization/tests/test_graphs.py +0 -0
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
History
|
|
3
3
|
=======
|
|
4
4
|
|
|
5
|
-
0.
|
|
5
|
+
0.33.0 (2024-07-16)
|
|
6
|
+
-------------------
|
|
7
|
+
|
|
8
|
+
* Add Python 3.12
|
|
9
|
+
* Drop Python 3.8
|
|
10
|
+
|
|
11
|
+
0.32.1 (2024-04-02)
|
|
12
|
+
-------------------
|
|
13
|
+
|
|
14
|
+
* Fix documentation
|
|
15
|
+
* Fix wheel upload
|
|
16
|
+
|
|
17
|
+
0.32.0 (2024-03-29)
|
|
6
18
|
-------------------
|
|
7
19
|
|
|
8
20
|
* Add Leiden clustering algorithm
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scikit-network
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33.0
|
|
4
4
|
Summary: Graph algorithms
|
|
5
5
|
Home-page: https://github.com/sknetwork-team/scikit-network
|
|
6
6
|
Author: Scikit-network team
|
|
@@ -15,11 +15,11 @@ Classifier: Intended Audience :: Science/Research
|
|
|
15
15
|
Classifier: License :: OSI Approved :: BSD License
|
|
16
16
|
Classifier: Natural Language :: English
|
|
17
17
|
Classifier: Programming Language :: Cython
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
23
|
Description-Content-Type: text/x-rst
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
License-File: AUTHORS.rst
|
|
@@ -116,7 +116,19 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
|
|
|
116
116
|
History
|
|
117
117
|
=======
|
|
118
118
|
|
|
119
|
-
0.
|
|
119
|
+
0.33.0 (2024-07-16)
|
|
120
|
+
-------------------
|
|
121
|
+
|
|
122
|
+
* Add Python 3.12
|
|
123
|
+
* Drop Python 3.8
|
|
124
|
+
|
|
125
|
+
0.32.1 (2024-04-02)
|
|
126
|
+
-------------------
|
|
127
|
+
|
|
128
|
+
* Fix documentation
|
|
129
|
+
* Fix wheel upload
|
|
130
|
+
|
|
131
|
+
0.32.0 (2024-03-29)
|
|
120
132
|
-------------------
|
|
121
133
|
|
|
122
134
|
* Add Leiden clustering algorithm
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scikit-network
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33.0
|
|
4
4
|
Summary: Graph algorithms
|
|
5
5
|
Home-page: https://github.com/sknetwork-team/scikit-network
|
|
6
6
|
Author: Scikit-network team
|
|
@@ -15,11 +15,11 @@ Classifier: Intended Audience :: Science/Research
|
|
|
15
15
|
Classifier: License :: OSI Approved :: BSD License
|
|
16
16
|
Classifier: Natural Language :: English
|
|
17
17
|
Classifier: Programming Language :: Cython
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
23
|
Description-Content-Type: text/x-rst
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
License-File: AUTHORS.rst
|
|
@@ -116,7 +116,19 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
|
|
|
116
116
|
History
|
|
117
117
|
=======
|
|
118
118
|
|
|
119
|
-
0.
|
|
119
|
+
0.33.0 (2024-07-16)
|
|
120
|
+
-------------------
|
|
121
|
+
|
|
122
|
+
* Add Python 3.12
|
|
123
|
+
* Drop Python 3.8
|
|
124
|
+
|
|
125
|
+
0.32.1 (2024-04-02)
|
|
126
|
+
-------------------
|
|
127
|
+
|
|
128
|
+
* Fix documentation
|
|
129
|
+
* Fix wheel upload
|
|
130
|
+
|
|
131
|
+
0.32.0 (2024-03-29)
|
|
120
132
|
-------------------
|
|
121
133
|
|
|
122
134
|
* Add Leiden clustering algorithm
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[bumpversion]
|
|
2
|
-
current_version = 0.
|
|
2
|
+
current_version = 0.33.0
|
|
3
3
|
commit = True
|
|
4
4
|
tag = True
|
|
5
5
|
|
|
@@ -21,7 +21,7 @@ test = pytest
|
|
|
21
21
|
collect_ignore = ['setup.py']
|
|
22
22
|
|
|
23
23
|
[options]
|
|
24
|
-
python_requires = >=3.
|
|
24
|
+
python_requires = >=3.9
|
|
25
25
|
|
|
26
26
|
[egg_info]
|
|
27
27
|
tag_build =
|
|
@@ -135,10 +135,10 @@ setup(
|
|
|
135
135
|
'License :: OSI Approved :: BSD License',
|
|
136
136
|
'Natural Language :: English',
|
|
137
137
|
'Programming Language :: Cython',
|
|
138
|
-
'Programming Language :: Python :: 3.8',
|
|
139
138
|
'Programming Language :: Python :: 3.9',
|
|
140
139
|
'Programming Language :: Python :: 3.10',
|
|
141
|
-
'Programming Language :: Python :: 3.11'
|
|
140
|
+
'Programming Language :: Python :: 3.11',
|
|
141
|
+
'Programming Language :: Python :: 3.12'
|
|
142
142
|
],
|
|
143
143
|
description="Graph algorithms",
|
|
144
144
|
install_requires=requirements,
|
|
@@ -153,7 +153,7 @@ setup(
|
|
|
153
153
|
test_suite='tests',
|
|
154
154
|
tests_require=test_requirements,
|
|
155
155
|
url='https://github.com/sknetwork-team/scikit-network',
|
|
156
|
-
version='0.
|
|
156
|
+
version='0.33.0',
|
|
157
157
|
zip_safe=False,
|
|
158
158
|
ext_modules=ext_modules,
|
|
159
159
|
include_dirs=[numpy.get_include()],
|
|
@@ -55,7 +55,7 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
55
55
|
>>> labels_true = graph.labels
|
|
56
56
|
>>> labels = {0: labels_true[0], 33: labels_true[33]}
|
|
57
57
|
>>> labels_pred = diffusion.fit_predict(adjacency, labels)
|
|
58
|
-
>>>
|
|
58
|
+
>>> round(np.mean(labels_pred == labels_true), 2)
|
|
59
59
|
0.97
|
|
60
60
|
|
|
61
61
|
References
|
|
@@ -74,8 +74,9 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
74
74
|
self.scale = scale
|
|
75
75
|
|
|
76
76
|
def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray],
|
|
77
|
-
labels: Optional[Union[dict,
|
|
78
|
-
|
|
77
|
+
labels: Optional[Union[dict, list, np.ndarray]] = None,
|
|
78
|
+
labels_row: Optional[Union[dict, list, np.ndarray]] = None,
|
|
79
|
+
labels_col: Optional[Union[dict, list, np.ndarray]] = None, force_bipartite: bool = False) \
|
|
79
80
|
-> 'DiffusionClassifier':
|
|
80
81
|
"""Compute the solution to the Dirichlet problem (temperatures at equilibrium).
|
|
81
82
|
|
|
@@ -55,7 +55,7 @@ class NNClassifier(BaseClassifier):
|
|
|
55
55
|
>>> labels_true = graph.labels
|
|
56
56
|
>>> labels = {0: labels_true[0], 33: labels_true[33]}
|
|
57
57
|
>>> labels_pred = classifier.fit_predict(adjacency, labels)
|
|
58
|
-
>>>
|
|
58
|
+
>>> round(np.mean(labels_pred == labels_true), 2)
|
|
59
59
|
0.82
|
|
60
60
|
"""
|
|
61
61
|
def __init__(self, n_neighbors: int = 3, embedding_method: Optional[BaseEmbedding] = None, normalize: bool = True):
|
|
@@ -97,8 +97,9 @@ class NNClassifier(BaseClassifier):
|
|
|
97
97
|
|
|
98
98
|
return probs, labels
|
|
99
99
|
|
|
100
|
-
def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, dict] = None,
|
|
101
|
-
labels_row: Union[np.ndarray,
|
|
100
|
+
def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, list, dict] = None,
|
|
101
|
+
labels_row: Union[np.ndarray, list, dict] = None,
|
|
102
|
+
labels_col: Union[np.ndarray, list, dict] = None) -> 'NNClassifier':
|
|
102
103
|
"""Node classification by k-nearest neighbors in the embedding space.
|
|
103
104
|
|
|
104
105
|
Parameters
|
|
@@ -34,7 +34,7 @@ def get_accuracy_score(labels_true: np.ndarray, labels_pred: np.ndarray) -> floa
|
|
|
34
34
|
>>> import numpy as np
|
|
35
35
|
>>> labels_true = np.array([0, 0, 1, 1])
|
|
36
36
|
>>> labels_pred = np.array([0, 0, 0, 1])
|
|
37
|
-
>>> get_accuracy_score(labels_true, labels_pred)
|
|
37
|
+
>>> round(get_accuracy_score(labels_true, labels_pred), 2)
|
|
38
38
|
0.75
|
|
39
39
|
"""
|
|
40
40
|
check_vector_format(labels_true, labels_pred)
|
|
@@ -105,7 +105,7 @@ def get_f1_score(labels_true: np.ndarray, labels_pred: np.ndarray, return_precis
|
|
|
105
105
|
>>> import numpy as np
|
|
106
106
|
>>> labels_true = np.array([0, 0, 1, 1])
|
|
107
107
|
>>> labels_pred = np.array([0, 0, 0, 1])
|
|
108
|
-
>>>
|
|
108
|
+
>>> round(get_f1_score(labels_true, labels_pred), 2)
|
|
109
109
|
0.67
|
|
110
110
|
"""
|
|
111
111
|
values = set(labels_true[labels_true >= 0]) | set(labels_pred[labels_pred >= 0])
|
|
@@ -188,7 +188,7 @@ def get_average_f1_score(labels_true: np.ndarray, labels_pred: np.ndarray, avera
|
|
|
188
188
|
>>> import numpy as np
|
|
189
189
|
>>> labels_true = np.array([0, 0, 1, 1])
|
|
190
190
|
>>> labels_pred = np.array([0, 0, 0, 1])
|
|
191
|
-
>>>
|
|
191
|
+
>>> round(get_average_f1_score(labels_true, labels_pred), 2)
|
|
192
192
|
0.73
|
|
193
193
|
"""
|
|
194
194
|
if average == 'micro':
|
|
@@ -91,19 +91,20 @@ class Propagation(BaseClassifier):
|
|
|
91
91
|
labels = labels[index_seed]
|
|
92
92
|
return index_seed.astype(np.int32), index_remain.astype(np.int32), labels.astype(np.int32)
|
|
93
93
|
|
|
94
|
-
def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, dict] = None,
|
|
95
|
-
labels_row: Union[np.ndarray,
|
|
94
|
+
def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, list, dict] = None,
|
|
95
|
+
labels_row: Union[np.ndarray, list, dict] = None,
|
|
96
|
+
labels_col: Union[np.ndarray, list, dict] = None) -> 'Propagation':
|
|
96
97
|
"""Node classification by label propagation.
|
|
97
98
|
|
|
98
99
|
Parameters
|
|
99
100
|
----------
|
|
100
101
|
input_matrix : sparse.csr_matrix, np.ndarray
|
|
101
102
|
Adjacency matrix or biadjacency matrix of the graph.
|
|
102
|
-
labels :
|
|
103
|
+
labels : array, list or dict
|
|
103
104
|
Known labels. Negative values ignored.
|
|
104
|
-
labels_row :
|
|
105
|
+
labels_row : array, list or dict
|
|
105
106
|
Known labels of rows, for bipartite graphs.
|
|
106
|
-
labels_col :
|
|
107
|
+
labels_col : array, list or dict
|
|
107
108
|
Known labels of columns, for bipartite graphs.
|
|
108
109
|
|
|
109
110
|
Returns
|
|
@@ -76,7 +76,8 @@ class Leiden(Louvain):
|
|
|
76
76
|
References
|
|
77
77
|
----------
|
|
78
78
|
* Traag, V. A., Waltman, L., & Van Eck, N. J. (2019).
|
|
79
|
-
|
|
79
|
+
`From Louvain to Leiden: guaranteeing well-connected communities`, Scientific reports.
|
|
80
|
+
|
|
80
81
|
"""
|
|
81
82
|
|
|
82
83
|
def __init__(self, resolution: float = 1, modularity: str = 'dugue', tol_optimization: float = 1e-3,
|
|
@@ -131,9 +131,9 @@ class Louvain(BaseClustering, Log):
|
|
|
131
131
|
increase :
|
|
132
132
|
Gain in modularity after optimization.
|
|
133
133
|
"""
|
|
134
|
-
labels = labels.astype(np.
|
|
135
|
-
indices = adjacency.indices
|
|
136
|
-
indptr = adjacency.indptr
|
|
134
|
+
labels = labels.astype(np.int64)
|
|
135
|
+
indices = adjacency.indices.astype(np.int64)
|
|
136
|
+
indptr = adjacency.indptr.astype(np.int64)
|
|
137
137
|
data = adjacency.data.astype(np.float32)
|
|
138
138
|
out_weights = out_weights.astype(np.float32)
|
|
139
139
|
in_weights = in_weights.astype(np.float32)
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import unittest
|
|
5
5
|
|
|
6
6
|
from sknetwork.clustering import KCenters
|
|
7
|
-
from sknetwork.data import karate_club, painters, star_wars
|
|
8
7
|
from sknetwork.data.test_graphs import *
|
|
9
8
|
|
|
10
9
|
|
|
@@ -13,7 +12,7 @@ class TestKCentersClustering(unittest.TestCase):
|
|
|
13
12
|
def test_kcenters(self):
|
|
14
13
|
# Test undirected graph
|
|
15
14
|
n_clusters = 2
|
|
16
|
-
adjacency =
|
|
15
|
+
adjacency = test_graph()
|
|
17
16
|
n_row = adjacency.shape[0]
|
|
18
17
|
kcenters = KCenters(n_clusters=n_clusters)
|
|
19
18
|
labels = kcenters.fit_predict(adjacency)
|
|
@@ -22,7 +21,7 @@ class TestKCentersClustering(unittest.TestCase):
|
|
|
22
21
|
|
|
23
22
|
# Test directed graph
|
|
24
23
|
n_clusters = 3
|
|
25
|
-
adjacency =
|
|
24
|
+
adjacency = test_digraph()
|
|
26
25
|
n_row = adjacency.shape[0]
|
|
27
26
|
kcenters = KCenters(n_clusters=n_clusters, directed=True)
|
|
28
27
|
labels = kcenters.fit_predict(adjacency)
|
|
@@ -31,7 +30,7 @@ class TestKCentersClustering(unittest.TestCase):
|
|
|
31
30
|
|
|
32
31
|
# Test bipartite graph
|
|
33
32
|
n_clusters = 2
|
|
34
|
-
biadjacency =
|
|
33
|
+
biadjacency = test_bigraph()
|
|
35
34
|
n_row, n_col = biadjacency.shape
|
|
36
35
|
kcenters = KCenters(n_clusters=n_clusters)
|
|
37
36
|
kcenters.fit(biadjacency)
|
|
@@ -40,41 +39,10 @@ class TestKCentersClustering(unittest.TestCase):
|
|
|
40
39
|
self.assertEqual(len(kcenters.labels_col_), n_col)
|
|
41
40
|
self.assertEqual(len(set(labels)), n_clusters)
|
|
42
41
|
|
|
43
|
-
def test_kcenters_centers(self):
|
|
44
|
-
# Test centers for undirected graphs
|
|
45
|
-
n_clusters = 2
|
|
46
|
-
adjacency = karate_club()
|
|
47
|
-
kcenters = KCenters(n_clusters=n_clusters)
|
|
48
|
-
kcenters.fit(adjacency)
|
|
49
|
-
centers = kcenters.centers_
|
|
50
|
-
self.assertEqual(n_clusters, len(set(centers)))
|
|
51
|
-
|
|
52
|
-
# Test centers for bipartite graphs
|
|
53
|
-
n_clusters = 2
|
|
54
|
-
biadjacency = star_wars()
|
|
55
|
-
n_row, n_col = biadjacency.shape
|
|
56
|
-
for position in ["row", "col", "both"]:
|
|
57
|
-
kcenters = KCenters(n_clusters=n_clusters, center_position=position)
|
|
58
|
-
kcenters.fit(biadjacency)
|
|
59
|
-
centers_row = kcenters.centers_row_
|
|
60
|
-
centers_col = kcenters.centers_col_
|
|
61
|
-
if position == "row":
|
|
62
|
-
self.assertEqual(n_clusters, len(set(centers_row)))
|
|
63
|
-
self.assertTrue(np.all(centers_row < n_row))
|
|
64
|
-
self.assertTrue(centers_col is None)
|
|
65
|
-
if position == "col":
|
|
66
|
-
self.assertEqual(n_clusters, len(set(centers_col)))
|
|
67
|
-
self.assertTrue(np.all((centers_col < n_col) & (0 <= centers_col)))
|
|
68
|
-
self.assertTrue(centers_row is None)
|
|
69
|
-
if position == "both":
|
|
70
|
-
self.assertEqual(n_clusters, len(set(centers_row)) + len(set(centers_col)))
|
|
71
|
-
self.assertTrue(np.all(centers_row < n_row))
|
|
72
|
-
self.assertTrue(np.all((centers_col < n_col) & (0 <= centers_col)))
|
|
73
|
-
|
|
74
42
|
def test_kcenters_error(self):
|
|
75
43
|
# Test value errors
|
|
76
|
-
adjacency =
|
|
77
|
-
biadjacency =
|
|
44
|
+
adjacency = test_graph()
|
|
45
|
+
biadjacency = test_bigraph()
|
|
78
46
|
|
|
79
47
|
# test n_clusters error
|
|
80
48
|
kcenters = KCenters(n_clusters=1)
|
|
@@ -6,10 +6,10 @@ Created in May 2023
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class
|
|
9
|
+
class Dataset(dict):
|
|
10
10
|
"""Container object for datasets.
|
|
11
11
|
Dictionary-like object that exposes its keys as attributes.
|
|
12
|
-
>>> dataset =
|
|
12
|
+
>>> dataset = Dataset(name='dataset')
|
|
13
13
|
>>> dataset['name']
|
|
14
14
|
'dataset'
|
|
15
15
|
>>> dataset.name
|
|
@@ -26,3 +26,8 @@ class Bunch(dict):
|
|
|
26
26
|
return self[key]
|
|
27
27
|
except KeyError:
|
|
28
28
|
raise AttributeError(key)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# alias for Dataset
|
|
32
|
+
Bunch = Dataset
|
|
33
|
+
|
|
@@ -19,15 +19,12 @@ import numpy as np
|
|
|
19
19
|
from scipy import sparse
|
|
20
20
|
|
|
21
21
|
from sknetwork.data.parse import from_csv, load_labels, load_header, load_metadata
|
|
22
|
-
from sknetwork.data.base import
|
|
22
|
+
from sknetwork.data.base import Dataset
|
|
23
23
|
from sknetwork.utils.check import is_square
|
|
24
24
|
from sknetwork.log import Log
|
|
25
25
|
|
|
26
26
|
NETSET_URL = 'https://netset.telecom-paris.fr'
|
|
27
27
|
|
|
28
|
-
# former name of Dataset
|
|
29
|
-
Bunch = Bunch
|
|
30
|
-
|
|
31
28
|
|
|
32
29
|
def is_within_directory(directory, target):
|
|
33
30
|
"""Utility function."""
|
|
@@ -89,7 +86,7 @@ def clean_data_home(data_home: Optional[Union[str, Path]] = None):
|
|
|
89
86
|
|
|
90
87
|
|
|
91
88
|
def load_netset(name: Optional[str] = None, data_home: Optional[Union[str, Path]] = None,
|
|
92
|
-
verbose: bool = True) -> Optional[
|
|
89
|
+
verbose: bool = True) -> Optional[Dataset]:
|
|
93
90
|
"""Load a dataset from the `NetSet collection
|
|
94
91
|
<https://netset.telecom-paris.fr/>`_.
|
|
95
92
|
|
|
@@ -105,10 +102,10 @@ def load_netset(name: Optional[str] = None, data_home: Optional[Union[str, Path]
|
|
|
105
102
|
|
|
106
103
|
Returns
|
|
107
104
|
-------
|
|
108
|
-
dataset : :class:`
|
|
105
|
+
dataset : :class:`Dataset`
|
|
109
106
|
Returned dataset.
|
|
110
107
|
"""
|
|
111
|
-
dataset =
|
|
108
|
+
dataset = Dataset()
|
|
112
109
|
dataset_folder = NETSET_URL + '/datasets/'
|
|
113
110
|
folder_npz = NETSET_URL + '/datasets_npz/'
|
|
114
111
|
|
|
@@ -167,7 +164,7 @@ def load_netset(name: Optional[str] = None, data_home: Optional[Union[str, Path]
|
|
|
167
164
|
|
|
168
165
|
|
|
169
166
|
def load_konect(name: str, data_home: Optional[Union[str, Path]] = None, auto_numpy_bundle: bool = True,
|
|
170
|
-
verbose: bool = True) ->
|
|
167
|
+
verbose: bool = True) -> Dataset:
|
|
171
168
|
"""Load a dataset from the `Konect database
|
|
172
169
|
<http://konect.cc/networks/>`_.
|
|
173
170
|
|
|
@@ -186,7 +183,7 @@ def load_konect(name: str, data_home: Optional[Union[str, Path]] = None, auto_nu
|
|
|
186
183
|
|
|
187
184
|
Returns
|
|
188
185
|
-------
|
|
189
|
-
dataset : :class:`
|
|
186
|
+
dataset : :class:`Dataset`
|
|
190
187
|
Object with the following attributes:
|
|
191
188
|
|
|
192
189
|
* `adjacency` or `biadjacency`: the adjacency/biadjacency matrix for the dataset
|
|
@@ -240,7 +237,7 @@ def load_konect(name: str, data_home: Optional[Union[str, Path]] = None, auto_nu
|
|
|
240
237
|
logger.print_log('Loading from local bundle...')
|
|
241
238
|
return load_from_numpy_bundle(name + '_bundle', data_path)
|
|
242
239
|
|
|
243
|
-
dataset =
|
|
240
|
+
dataset = Dataset()
|
|
244
241
|
path = data_konect / name / name
|
|
245
242
|
if not path.exists() or len(listdir(path)) == 0:
|
|
246
243
|
raise Exception("No data downloaded.")
|
|
@@ -269,7 +266,7 @@ def load_konect(name: str, data_home: Optional[Union[str, Path]] = None, auto_nu
|
|
|
269
266
|
else:
|
|
270
267
|
dataset.meta.name = name
|
|
271
268
|
else:
|
|
272
|
-
dataset.meta =
|
|
269
|
+
dataset.meta = Dataset()
|
|
273
270
|
dataset.meta.name = name
|
|
274
271
|
|
|
275
272
|
if auto_numpy_bundle:
|
|
@@ -280,12 +277,12 @@ def load_konect(name: str, data_home: Optional[Union[str, Path]] = None, auto_nu
|
|
|
280
277
|
return dataset
|
|
281
278
|
|
|
282
279
|
|
|
283
|
-
def save_to_numpy_bundle(data:
|
|
280
|
+
def save_to_numpy_bundle(data: Dataset, bundle_name: str, data_home: Optional[Union[str, Path]] = None):
|
|
284
281
|
"""Save a dataset in the specified data home to a collection of Numpy and Pickle files for faster subsequent loads.
|
|
285
282
|
|
|
286
283
|
Parameters
|
|
287
284
|
----------
|
|
288
|
-
data:
|
|
285
|
+
data: Dataset
|
|
289
286
|
Data to save.
|
|
290
287
|
bundle_name: str
|
|
291
288
|
Name to be used for the bundle folder.
|
|
@@ -317,7 +314,7 @@ def load_from_numpy_bundle(bundle_name: str, data_home: Optional[Union[str, Path
|
|
|
317
314
|
|
|
318
315
|
Returns
|
|
319
316
|
-------
|
|
320
|
-
data:
|
|
317
|
+
data: Dataset
|
|
321
318
|
Data.
|
|
322
319
|
"""
|
|
323
320
|
data_home = get_data_home(data_home)
|
|
@@ -326,7 +323,7 @@ def load_from_numpy_bundle(bundle_name: str, data_home: Optional[Union[str, Path
|
|
|
326
323
|
raise FileNotFoundError('No bundle at ' + str(data_path))
|
|
327
324
|
else:
|
|
328
325
|
files = listdir(data_path)
|
|
329
|
-
data =
|
|
326
|
+
data = Dataset()
|
|
330
327
|
for file in files:
|
|
331
328
|
if len(file.split('.')) == 2:
|
|
332
329
|
file_name, file_extension = file.split('.')
|
|
@@ -340,7 +337,7 @@ def load_from_numpy_bundle(bundle_name: str, data_home: Optional[Union[str, Path
|
|
|
340
337
|
return data
|
|
341
338
|
|
|
342
339
|
|
|
343
|
-
def save(folder: Union[str, Path], data: Union[sparse.csr_matrix,
|
|
340
|
+
def save(folder: Union[str, Path], data: Union[sparse.csr_matrix, Dataset]):
|
|
344
341
|
"""Save a dataset or a CSR matrix in the current directory to a collection of Numpy and Pickle files for faster
|
|
345
342
|
subsequent loads. Supported attribute types include sparse matrices, NumPy arrays, strings and objects Dataset.
|
|
346
343
|
|
|
@@ -348,13 +345,13 @@ def save(folder: Union[str, Path], data: Union[sparse.csr_matrix, Bunch]):
|
|
|
348
345
|
----------
|
|
349
346
|
folder : str or :class:`pathlib.Path`
|
|
350
347
|
Name of the bundle folder.
|
|
351
|
-
data : Union[sparse.csr_matrix,
|
|
348
|
+
data : Union[sparse.csr_matrix, Dataset]
|
|
352
349
|
Data to save.
|
|
353
350
|
|
|
354
351
|
Example
|
|
355
352
|
-------
|
|
356
353
|
>>> from sknetwork.data import save
|
|
357
|
-
>>> dataset =
|
|
354
|
+
>>> dataset = Dataset()
|
|
358
355
|
>>> dataset.adjacency = sparse.csr_matrix(np.random.random((3, 3)) < 0.5)
|
|
359
356
|
>>> dataset.names = np.array(['a', 'b', 'c'])
|
|
360
357
|
>>> save('dataset', dataset)
|
|
@@ -366,7 +363,7 @@ def save(folder: Union[str, Path], data: Union[sparse.csr_matrix, Bunch]):
|
|
|
366
363
|
if folder.exists():
|
|
367
364
|
shutil.rmtree(folder)
|
|
368
365
|
if isinstance(data, sparse.csr_matrix):
|
|
369
|
-
dataset =
|
|
366
|
+
dataset = Dataset()
|
|
370
367
|
if is_square(data):
|
|
371
368
|
dataset.adjacency = data
|
|
372
369
|
else:
|
|
@@ -388,13 +385,13 @@ def load(folder: Union[str, Path]):
|
|
|
388
385
|
|
|
389
386
|
Returns
|
|
390
387
|
-------
|
|
391
|
-
data:
|
|
388
|
+
data: Dataset
|
|
392
389
|
Data.
|
|
393
390
|
|
|
394
391
|
Example
|
|
395
392
|
-------
|
|
396
393
|
>>> from sknetwork.data import save
|
|
397
|
-
>>> dataset =
|
|
394
|
+
>>> dataset = Dataset()
|
|
398
395
|
>>> dataset.adjacency = sparse.csr_matrix(np.random.random((3, 3)) < 0.5)
|
|
399
396
|
>>> dataset.names = np.array(['a', 'b', 'c'])
|
|
400
397
|
>>> save('dataset', dataset)
|