graphblas-algorithms


Namegraphblas-algorithms JSON
Version 2023.10.0 PyPI version JSON
download
home_page
SummaryGraph algorithms written in GraphBLAS and backend for NetworkX
upload_time2023-10-19 02:57:18
maintainer
docs_urlNone
authorJim Kitchen, Graphblas-algorithms contributors
requires_python>=3.9
licenseApache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2022 Anaconda, Inc Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
keywords graphblas graph sparse matrix lagraph suitesparse networks graph theory mathematics network discrete mathematics math
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![GraphBLAS Algorithms](https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/logo-name-medium.svg)
<br>
[![conda-forge](https://img.shields.io/conda/vn/conda-forge/graphblas-algorithms.svg)](https://anaconda.org/conda-forge/graphblas-algorithms)
[![pypi](https://img.shields.io/pypi/v/graphblas-algorithms.svg)](https://pypi.python.org/pypi/graphblas-algorithms/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/graphblas-algorithms)](https://pypi.python.org/pypi/graphblas-algorithms/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/python-graphblas/graphblas-algorithms/blob/main/LICENSE)
<br>
[![Tests](https://github.com/python-graphblas/graphblas-algorithms/workflows/Tests/badge.svg?branch=main)](https://github.com/python-graphblas/graphblas-algorithms/actions)
[![Coverage](https://codecov.io/gh/python-graphblas/graphblas-algorithms/branch/main/graph/badge.svg)](https://codecov.io/gh/python-graphblas/graphblas-algorithms)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7329185.svg)](https://doi.org/10.5281/zenodo.7329185)
[![Discord](https://img.shields.io/badge/Chat-Discord-blue)](https://discord.com/invite/vur45CbwMz)
<!--- [![Docs](https://readthedocs.org/projects/graphblas-algorithms/badge/?version=latest)](https://graphblas-algorithms.readthedocs.io/en/latest/) --->

`graphblas-algorithms` is a collection of GraphBLAS algorithms written using
[`python-graphblas`](https://python-graphblas.readthedocs.io/en/latest/).
It may be used directly or as an experimental
[backend to NetworkX](https://networkx.org/documentation/stable/reference/classes/index.html#backends).

Why use GraphBLAS Algorithms? Because it is *fast*, *flexible*, and *familiar* by using the NetworkX API.

Are we missing any [algorithms](#Plugin-Algorithms) that you want?
[Please let us know!](https://github.com/python-graphblas/graphblas-algorithms/issues)
<br>
<img src="https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/graphblas-vs-networkx.png" alt="GraphBLAS vs NetworkX" title="Even faster than scipy.sparse!" width="640" />
<br>
<img src="https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/graphblas-vs-igraph.png" alt="GraphBLAS vs igraph" title="igraph may use different algorithms for PageRank" width="600" />

### Installation
```
conda install -c conda-forge graphblas-algorithms
```
```
pip install graphblas-algorithms
```

## Basic Usage

First, create a GraphBLAS Matrix.

```python
import graphblas as gb

M = gb.Matrix.from_coo(
  [0, 0, 1, 2, 2, 3],
  [1, 3, 0, 0, 1, 2],
  [1., 2., 3., 4., 5., 6.],
  nrows=4, ncols=4, dtype='float32'
)
```

Next wrap the Matrix as `ga.Graph`.

```python
import graphblas_algorithms as ga

G = ga.Graph(M)
```

Finally call an algorithm.

```python
hubs, authorities = ga.hits(G)
```

When the result is a value per node, a `gb.Vector` will be returned.
In the case of [HITS](https://en.wikipedia.org/wiki/HITS_algorithm),
two Vectors are returned representing the hubs and authorities values.

Algorithms whose result is a subgraph will return `ga.Graph`.

## Plugin for NetworkX

Dispatching to plugins is a new feature in Networkx 3.0.
When both `networkx` and `graphblas-algorithms` are installed in an
environment, calls to NetworkX algorithms can be dispatched to the
equivalent version in `graphblas-algorithms`.

### Dispatch Example
```python
import networkx as nx
import graphblas_algorithms as ga

# Generate a random graph (5000 nodes, 1_000_000 edges)
G = nx.erdos_renyi_graph(5000, 0.08)

# Explicitly convert to ga.Graph
G2 = ga.Graph.from_networkx(G)

# Pass G2 to NetworkX's k_truss
T5 = nx.k_truss(G2, 5)
```

`G2` is not a `nx.Graph`, but it does have an attribute
`__networkx_plugin__ = "graphblas"`. This tells NetworkX to
dispatch the k_truss call to graphblas-algorithms. This link
connection exists because graphblas-algorithms registers
itself as a "networkx.plugin" entry point.

The result `T5` is a `ga.Graph` representing the 5-truss structure of the
original graph. To convert to a NetworkX Graph, use:
```python
T5.to_networkx()
```

Note that even with the conversions to and from `ga.Graph`, this example still runs 10x
faster than using the native NetworkX k-truss implementation. Speed improvements scale
with graph size, so larger graphs will see an even larger speed-up relative to NetworkX.

### Plugin Algorithms

The following NetworkX algorithms have been implemented
by graphblas-algorithms and can be used following the
dispatch pattern shown above.

[//]: # (Begin auto-generated code)

```
graphblas_algorithms.nxapi
├── boundary
│   ├── edge_boundary
│   └── node_boundary
├── centrality
│   ├── degree_alg
│   │   ├── degree_centrality
│   │   ├── in_degree_centrality
│   │   └── out_degree_centrality
│   ├── eigenvector
│   │   └── eigenvector_centrality
│   └── katz
│       └── katz_centrality
├── cluster
│   ├── average_clustering
│   ├── clustering
│   ├── generalized_degree
│   ├── square_clustering
│   ├── transitivity
│   └── triangles
├── community
│   └── quality
│       ├── inter_community_edges
│       └── intra_community_edges
├── components
│   ├── connected
│   │   ├── is_connected
│   │   └── node_connected_component
│   └── weakly_connected
│       └── is_weakly_connected
├── core
│   └── k_truss
├── cuts
│   ├── boundary_expansion
│   ├── conductance
│   ├── cut_size
│   ├── edge_expansion
│   ├── mixing_expansion
│   ├── node_expansion
│   ├── normalized_cut_size
│   └── volume
├── dag
│   ├── ancestors
│   └── descendants
├── dominating
│   └── is_dominating_set
├── efficiency_measures
│   └── efficiency
├── generators
│   └── ego
│       └── ego_graph
├── isolate
│   ├── is_isolate
│   ├── isolates
│   └── number_of_isolates
├── isomorphism
│   └── isomorph
│       ├── fast_could_be_isomorphic
│       └── faster_could_be_isomorphic
├── linalg
│   ├── bethehessianmatrix
│   │   └── bethe_hessian_matrix
│   ├── graphmatrix
│   │   └── adjacency_matrix
│   ├── laplacianmatrix
│   │   ├── laplacian_matrix
│   │   └── normalized_laplacian_matrix
│   └── modularitymatrix
│       ├── directed_modularity_matrix
│       └── modularity_matrix
├── link_analysis
│   ├── hits_alg
│   │   └── hits
│   └── pagerank_alg
│       ├── google_matrix
│       └── pagerank
├── lowest_common_ancestors
│   └── lowest_common_ancestor
├── operators
│   ├── binary
│   │   ├── compose
│   │   ├── difference
│   │   ├── disjoint_union
│   │   ├── full_join
│   │   ├── intersection
│   │   ├── symmetric_difference
│   │   └── union
│   └── unary
│       ├── complement
│       └── reverse
├── reciprocity
│   ├── overall_reciprocity
│   └── reciprocity
├── regular
│   ├── is_k_regular
│   └── is_regular
├── shortest_paths
│   ├── dense
│   │   ├── floyd_warshall
│   │   ├── floyd_warshall_numpy
│   │   └── floyd_warshall_predecessor_and_distance
│   ├── generic
│   │   └── has_path
│   ├── unweighted
│   │   ├── all_pairs_shortest_path_length
│   │   ├── single_source_shortest_path_length
│   │   └── single_target_shortest_path_length
│   └── weighted
│       ├── all_pairs_bellman_ford_path_length
│       ├── bellman_ford_path
│       ├── bellman_ford_path_length
│       ├── negative_edge_cycle
│       └── single_source_bellman_ford_path_length
├── simple_paths
│   └── is_simple_path
├── smetric
│   └── s_metric
├── structuralholes
│   └── mutual_weight
├── tournament
│   ├── is_tournament
│   ├── score_sequence
│   └── tournament_matrix
├── traversal
│   └── breadth_first_search
│       ├── bfs_layers
│       └── descendants_at_distance
└── triads
    └── is_triad
```

[//]: # (End auto-generated code)

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "graphblas-algorithms",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "Erik Welch <erik.n.welch@gmail.com>, Jim Kitchen <jim22k@gmail.com>",
    "keywords": "graphblas,graph,sparse,matrix,lagraph,suitesparse,Networks,Graph Theory,Mathematics,network,discrete mathematics,math",
    "author": "Jim Kitchen, Graphblas-algorithms contributors",
    "author_email": "Erik Welch <erik.n.welch@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/0b/48/99579d5bfc2f6a9f8b30dac947c00a41eb9a410d04605c66f0e2bc9bae73/graphblas-algorithms-2023.10.0.tar.gz",
    "platform": null,
    "description": "![GraphBLAS Algorithms](https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/logo-name-medium.svg)\n<br>\n[![conda-forge](https://img.shields.io/conda/vn/conda-forge/graphblas-algorithms.svg)](https://anaconda.org/conda-forge/graphblas-algorithms)\n[![pypi](https://img.shields.io/pypi/v/graphblas-algorithms.svg)](https://pypi.python.org/pypi/graphblas-algorithms/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/graphblas-algorithms)](https://pypi.python.org/pypi/graphblas-algorithms/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/python-graphblas/graphblas-algorithms/blob/main/LICENSE)\n<br>\n[![Tests](https://github.com/python-graphblas/graphblas-algorithms/workflows/Tests/badge.svg?branch=main)](https://github.com/python-graphblas/graphblas-algorithms/actions)\n[![Coverage](https://codecov.io/gh/python-graphblas/graphblas-algorithms/branch/main/graph/badge.svg)](https://codecov.io/gh/python-graphblas/graphblas-algorithms)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7329185.svg)](https://doi.org/10.5281/zenodo.7329185)\n[![Discord](https://img.shields.io/badge/Chat-Discord-blue)](https://discord.com/invite/vur45CbwMz)\n<!--- [![Docs](https://readthedocs.org/projects/graphblas-algorithms/badge/?version=latest)](https://graphblas-algorithms.readthedocs.io/en/latest/) --->\n\n`graphblas-algorithms` is a collection of GraphBLAS algorithms written using\n[`python-graphblas`](https://python-graphblas.readthedocs.io/en/latest/).\nIt may be used directly or as an experimental\n[backend to NetworkX](https://networkx.org/documentation/stable/reference/classes/index.html#backends).\n\nWhy use GraphBLAS Algorithms? Because it is *fast*, *flexible*, and *familiar* by using the NetworkX API.\n\nAre we missing any [algorithms](#Plugin-Algorithms) that you want?\n[Please let us know!](https://github.com/python-graphblas/graphblas-algorithms/issues)\n<br>\n<img src=\"https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/graphblas-vs-networkx.png\" alt=\"GraphBLAS vs NetworkX\" title=\"Even faster than scipy.sparse!\" width=\"640\" />\n<br>\n<img src=\"https://raw.githubusercontent.com/python-graphblas/graphblas-algorithms/main/docs/_static/img/graphblas-vs-igraph.png\" alt=\"GraphBLAS vs igraph\" title=\"igraph may use different algorithms for PageRank\" width=\"600\" />\n\n### Installation\n```\nconda install -c conda-forge graphblas-algorithms\n```\n```\npip install graphblas-algorithms\n```\n\n## Basic Usage\n\nFirst, create a GraphBLAS Matrix.\n\n```python\nimport graphblas as gb\n\nM = gb.Matrix.from_coo(\n  [0, 0, 1, 2, 2, 3],\n  [1, 3, 0, 0, 1, 2],\n  [1., 2., 3., 4., 5., 6.],\n  nrows=4, ncols=4, dtype='float32'\n)\n```\n\nNext wrap the Matrix as `ga.Graph`.\n\n```python\nimport graphblas_algorithms as ga\n\nG = ga.Graph(M)\n```\n\nFinally call an algorithm.\n\n```python\nhubs, authorities = ga.hits(G)\n```\n\nWhen the result is a value per node, a `gb.Vector` will be returned.\nIn the case of [HITS](https://en.wikipedia.org/wiki/HITS_algorithm),\ntwo Vectors are returned representing the hubs and authorities values.\n\nAlgorithms whose result is a subgraph will return `ga.Graph`.\n\n## Plugin for NetworkX\n\nDispatching to plugins is a new feature in Networkx 3.0.\nWhen both `networkx` and `graphblas-algorithms` are installed in an\nenvironment, calls to NetworkX algorithms can be dispatched to the\nequivalent version in `graphblas-algorithms`.\n\n### Dispatch Example\n```python\nimport networkx as nx\nimport graphblas_algorithms as ga\n\n# Generate a random graph (5000 nodes, 1_000_000 edges)\nG = nx.erdos_renyi_graph(5000, 0.08)\n\n# Explicitly convert to ga.Graph\nG2 = ga.Graph.from_networkx(G)\n\n# Pass G2 to NetworkX's k_truss\nT5 = nx.k_truss(G2, 5)\n```\n\n`G2` is not a `nx.Graph`, but it does have an attribute\n`__networkx_plugin__ = \"graphblas\"`. This tells NetworkX to\ndispatch the k_truss call to graphblas-algorithms. This link\nconnection exists because graphblas-algorithms registers\nitself as a \"networkx.plugin\" entry point.\n\nThe result `T5` is a `ga.Graph` representing the 5-truss structure of the\noriginal graph. To convert to a NetworkX Graph, use:\n```python\nT5.to_networkx()\n```\n\nNote that even with the conversions to and from `ga.Graph`, this example still runs 10x\nfaster than using the native NetworkX k-truss implementation. Speed improvements scale\nwith graph size, so larger graphs will see an even larger speed-up relative to NetworkX.\n\n### Plugin Algorithms\n\nThe following NetworkX algorithms have been implemented\nby graphblas-algorithms and can be used following the\ndispatch pattern shown above.\n\n[//]: # (Begin auto-generated code)\n\n```\ngraphblas_algorithms.nxapi\n\u251c\u2500\u2500 boundary\n\u2502   \u251c\u2500\u2500 edge_boundary\n\u2502   \u2514\u2500\u2500 node_boundary\n\u251c\u2500\u2500 centrality\n\u2502   \u251c\u2500\u2500 degree_alg\n\u2502   \u2502   \u251c\u2500\u2500 degree_centrality\n\u2502   \u2502   \u251c\u2500\u2500 in_degree_centrality\n\u2502   \u2502   \u2514\u2500\u2500 out_degree_centrality\n\u2502   \u251c\u2500\u2500 eigenvector\n\u2502   \u2502   \u2514\u2500\u2500 eigenvector_centrality\n\u2502   \u2514\u2500\u2500 katz\n\u2502       \u2514\u2500\u2500 katz_centrality\n\u251c\u2500\u2500 cluster\n\u2502   \u251c\u2500\u2500 average_clustering\n\u2502   \u251c\u2500\u2500 clustering\n\u2502   \u251c\u2500\u2500 generalized_degree\n\u2502   \u251c\u2500\u2500 square_clustering\n\u2502   \u251c\u2500\u2500 transitivity\n\u2502   \u2514\u2500\u2500 triangles\n\u251c\u2500\u2500 community\n\u2502   \u2514\u2500\u2500 quality\n\u2502       \u251c\u2500\u2500 inter_community_edges\n\u2502       \u2514\u2500\u2500 intra_community_edges\n\u251c\u2500\u2500 components\n\u2502   \u251c\u2500\u2500 connected\n\u2502   \u2502   \u251c\u2500\u2500 is_connected\n\u2502   \u2502   \u2514\u2500\u2500 node_connected_component\n\u2502   \u2514\u2500\u2500 weakly_connected\n\u2502       \u2514\u2500\u2500 is_weakly_connected\n\u251c\u2500\u2500 core\n\u2502   \u2514\u2500\u2500 k_truss\n\u251c\u2500\u2500 cuts\n\u2502   \u251c\u2500\u2500 boundary_expansion\n\u2502   \u251c\u2500\u2500 conductance\n\u2502   \u251c\u2500\u2500 cut_size\n\u2502   \u251c\u2500\u2500 edge_expansion\n\u2502   \u251c\u2500\u2500 mixing_expansion\n\u2502   \u251c\u2500\u2500 node_expansion\n\u2502   \u251c\u2500\u2500 normalized_cut_size\n\u2502   \u2514\u2500\u2500 volume\n\u251c\u2500\u2500 dag\n\u2502   \u251c\u2500\u2500 ancestors\n\u2502   \u2514\u2500\u2500 descendants\n\u251c\u2500\u2500 dominating\n\u2502   \u2514\u2500\u2500 is_dominating_set\n\u251c\u2500\u2500 efficiency_measures\n\u2502   \u2514\u2500\u2500 efficiency\n\u251c\u2500\u2500 generators\n\u2502   \u2514\u2500\u2500 ego\n\u2502       \u2514\u2500\u2500 ego_graph\n\u251c\u2500\u2500 isolate\n\u2502   \u251c\u2500\u2500 is_isolate\n\u2502   \u251c\u2500\u2500 isolates\n\u2502   \u2514\u2500\u2500 number_of_isolates\n\u251c\u2500\u2500 isomorphism\n\u2502   \u2514\u2500\u2500 isomorph\n\u2502       \u251c\u2500\u2500 fast_could_be_isomorphic\n\u2502       \u2514\u2500\u2500 faster_could_be_isomorphic\n\u251c\u2500\u2500 linalg\n\u2502   \u251c\u2500\u2500 bethehessianmatrix\n\u2502   \u2502   \u2514\u2500\u2500 bethe_hessian_matrix\n\u2502   \u251c\u2500\u2500 graphmatrix\n\u2502   \u2502   \u2514\u2500\u2500 adjacency_matrix\n\u2502   \u251c\u2500\u2500 laplacianmatrix\n\u2502   \u2502   \u251c\u2500\u2500 laplacian_matrix\n\u2502   \u2502   \u2514\u2500\u2500 normalized_laplacian_matrix\n\u2502   \u2514\u2500\u2500 modularitymatrix\n\u2502       \u251c\u2500\u2500 directed_modularity_matrix\n\u2502       \u2514\u2500\u2500 modularity_matrix\n\u251c\u2500\u2500 link_analysis\n\u2502   \u251c\u2500\u2500 hits_alg\n\u2502   \u2502   \u2514\u2500\u2500 hits\n\u2502   \u2514\u2500\u2500 pagerank_alg\n\u2502       \u251c\u2500\u2500 google_matrix\n\u2502       \u2514\u2500\u2500 pagerank\n\u251c\u2500\u2500 lowest_common_ancestors\n\u2502   \u2514\u2500\u2500 lowest_common_ancestor\n\u251c\u2500\u2500 operators\n\u2502   \u251c\u2500\u2500 binary\n\u2502   \u2502   \u251c\u2500\u2500 compose\n\u2502   \u2502   \u251c\u2500\u2500 difference\n\u2502   \u2502   \u251c\u2500\u2500 disjoint_union\n\u2502   \u2502   \u251c\u2500\u2500 full_join\n\u2502   \u2502   \u251c\u2500\u2500 intersection\n\u2502   \u2502   \u251c\u2500\u2500 symmetric_difference\n\u2502   \u2502   \u2514\u2500\u2500 union\n\u2502   \u2514\u2500\u2500 unary\n\u2502       \u251c\u2500\u2500 complement\n\u2502       \u2514\u2500\u2500 reverse\n\u251c\u2500\u2500 reciprocity\n\u2502   \u251c\u2500\u2500 overall_reciprocity\n\u2502   \u2514\u2500\u2500 reciprocity\n\u251c\u2500\u2500 regular\n\u2502   \u251c\u2500\u2500 is_k_regular\n\u2502   \u2514\u2500\u2500 is_regular\n\u251c\u2500\u2500 shortest_paths\n\u2502   \u251c\u2500\u2500 dense\n\u2502   \u2502   \u251c\u2500\u2500 floyd_warshall\n\u2502   \u2502   \u251c\u2500\u2500 floyd_warshall_numpy\n\u2502   \u2502   \u2514\u2500\u2500 floyd_warshall_predecessor_and_distance\n\u2502   \u251c\u2500\u2500 generic\n\u2502   \u2502   \u2514\u2500\u2500 has_path\n\u2502   \u251c\u2500\u2500 unweighted\n\u2502   \u2502   \u251c\u2500\u2500 all_pairs_shortest_path_length\n\u2502   \u2502   \u251c\u2500\u2500 single_source_shortest_path_length\n\u2502   \u2502   \u2514\u2500\u2500 single_target_shortest_path_length\n\u2502   \u2514\u2500\u2500 weighted\n\u2502       \u251c\u2500\u2500 all_pairs_bellman_ford_path_length\n\u2502       \u251c\u2500\u2500 bellman_ford_path\n\u2502       \u251c\u2500\u2500 bellman_ford_path_length\n\u2502       \u251c\u2500\u2500 negative_edge_cycle\n\u2502       \u2514\u2500\u2500 single_source_bellman_ford_path_length\n\u251c\u2500\u2500 simple_paths\n\u2502   \u2514\u2500\u2500 is_simple_path\n\u251c\u2500\u2500 smetric\n\u2502   \u2514\u2500\u2500 s_metric\n\u251c\u2500\u2500 structuralholes\n\u2502   \u2514\u2500\u2500 mutual_weight\n\u251c\u2500\u2500 tournament\n\u2502   \u251c\u2500\u2500 is_tournament\n\u2502   \u251c\u2500\u2500 score_sequence\n\u2502   \u2514\u2500\u2500 tournament_matrix\n\u251c\u2500\u2500 traversal\n\u2502   \u2514\u2500\u2500 breadth_first_search\n\u2502       \u251c\u2500\u2500 bfs_layers\n\u2502       \u2514\u2500\u2500 descendants_at_distance\n\u2514\u2500\u2500 triads\n    \u2514\u2500\u2500 is_triad\n```\n\n[//]: # (End auto-generated code)\n",
    "bugtrack_url": null,
    "license": "Apache License Version 2.0, January 2004 http://www.apache.org/licenses/  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION  1. Definitions.  \"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.  \"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.  \"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.  \"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.  \"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.  \"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.  \"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).  \"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.  \"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"  \"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.  2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.  3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.  4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:  (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and  (b) You must cause any modified files to carry prominent notices stating that You changed the files; and  (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and  (d) If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.  You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.  5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.  6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.  7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.  8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.  9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.  END OF TERMS AND CONDITIONS  APPENDIX: How to apply the Apache License to your work.  To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets \"[]\" replaced with your own identifying information. (Don't include the brackets!)  The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same \"printed page\" as the copyright notice for easier identification within third-party archives.  Copyright 2022 Anaconda, Inc  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at  http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ",
    "summary": "Graph algorithms written in GraphBLAS and backend for NetworkX",
    "version": "2023.10.0",
    "project_urls": {
        "changelog": "https://github.com/python-graphblas/graphblas-algorithms/releases",
        "homepage": "https://github.com/python-graphblas/graphblas-algorithms",
        "repository": "https://github.com/python-graphblas/graphblas-algorithms"
    },
    "split_keywords": [
        "graphblas",
        "graph",
        "sparse",
        "matrix",
        "lagraph",
        "suitesparse",
        "networks",
        "graph theory",
        "mathematics",
        "network",
        "discrete mathematics",
        "math"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fcd7c98979217e0bc3fb066601eba26c75ec865b9560a4700a99c1cb87fe4dc4",
                "md5": "7fd71eac02dd65545e85fdc21ab008cc",
                "sha256": "75f135a756c4a3a52796a5967d0c9131af03596937c2f918cba6d9b714666fa3"
            },
            "downloads": -1,
            "filename": "graphblas_algorithms-2023.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7fd71eac02dd65545e85fdc21ab008cc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 97877,
            "upload_time": "2023-10-19T02:57:16",
            "upload_time_iso_8601": "2023-10-19T02:57:16.406816Z",
            "url": "https://files.pythonhosted.org/packages/fc/d7/c98979217e0bc3fb066601eba26c75ec865b9560a4700a99c1cb87fe4dc4/graphblas_algorithms-2023.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0b4899579d5bfc2f6a9f8b30dac947c00a41eb9a410d04605c66f0e2bc9bae73",
                "md5": "4efcc0c4e09419a2bf9934d14e4d2e4f",
                "sha256": "059be9faaef2697a1d29e4fd50ae11a6ee6d91bb6c1c341f6138121aca4b40f4"
            },
            "downloads": -1,
            "filename": "graphblas-algorithms-2023.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "4efcc0c4e09419a2bf9934d14e4d2e4f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 68005,
            "upload_time": "2023-10-19T02:57:18",
            "upload_time_iso_8601": "2023-10-19T02:57:18.271460Z",
            "url": "https://files.pythonhosted.org/packages/0b/48/99579d5bfc2f6a9f8b30dac947c00a41eb9a410d04605c66f0e2bc9bae73/graphblas-algorithms-2023.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-19 02:57:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "python-graphblas",
    "github_project": "graphblas-algorithms",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "graphblas-algorithms"
}
        
Elapsed time: 0.13143s