NetworkX Query Tool
Project description
networkx-query
Versions following Semantic Versioning
Overview
NetworkX Query Tool (preview)
See documentation.
Installation
Install this library directly into an activated virtual environment:
$ pip install networkx-query
or add it to your Poetry project:
$ poetry add networkx-query
Usage
Searching node:
import networkx as nx
from networkx_query import search_nodes, search_edges
g = nx.DiGraph()
g.add_node(1, product="chocolate")
g.add_node(2, product="milk")
g.add_node(3, product="coat")
g.add_edge(1, 2, action="shake")
g.add_edge(3, 2, action="produce")
for node_id in search_nodes(g, {"==": [("product",), "chocolate"]}):
print(node_id)
>> 1
for edge_id in search_edges(g, {"eq": [("action",), "produce"]}):
print(edge_id)
>> (3, 2)
You could do the same with edges using search_edges
.
API
search_edges and search_nodes are based on prepare_query which return an Evaluator.
Evaluator are function with this signature: (context) -> bool
Context is a dictionnary like structure (with in and [] methods, and support contains or (iter and getitem))
Query language
Define a json query language like json-query-language against nodes or edges attributes.
A Path is a single string or a tuple of string which represente a path in a tree (here a dictionnary).
Expressions
All those expression are evaluate against a context wich is a dictionnary like (as can be a NodeDataView or an EdgeDataView).
Main expression syntax turn around this:
{
operator_name : parameters
}
Basic matching expression
Test if a node/edge has an attribute named "my_property":
{
"has" : "my_property"
}
Test if a node/edge has an attribute product : { "definition": { "name": xxx }} with xxx equals to "chocolate".
{
"eq" : [ ("product", "definition", "name"), "chocolate"]
}
We support this operators:
Name | Alias | Parameters | Description |
---|---|---|---|
has | Path | Check if path exists in context. | |
contains | Path, str | Check if an attribut (specifed with path) exists and contains specified value. | |
eq | == |
Path, Any | Check if an attribut (specifed with path) exists and equals specified value. |
neq | != |
Path, Any | Check if an attribut (specifed with path) did not exists or not equals specified value. |
gt | < |
Path, Any | Check if an attribut (specifed with path) exists and greather that specified value. |
lt | < |
Path, Any | Check if an attribut (specifed with path) exists and lower that specified value. |
gte | >= |
Path, Any | Check if an attribut (specifed with path) exists and greather or equals that specified value. |
lte | <= |
Path, Any | Check if an attribut (specifed with path) exists and lower or equals that specified value. |
in | := |
Path, List[Any] | Check if an attribut (specifed with path) exists and attribut value in specified values. |
Boolean composition of matching expression
We support this operators:
Name | Alias | Parameters | Description |
---|---|---|---|
and | && |
list of query | Define And operator. |
or | || | list of query | Define Or operator. |
xor | list of query | Define xor operator. | |
nxor | list of query | Define nxor operator. | |
not | ! |
query | Define Not operator. |
By default, a list of expressions is equivalent of an "AND" of this expressions.
Example:
{
'not': {
'has': ['group']
},
'has': 'application',
'eq': [('_link', 'other', 'weight'), 2]
}
is equivalent to:
{
'and': [
{
'not': [
{
'has': ['group']
}
]
},
{
'has': ['application']
},
{
'eq': [('_link', 'other', 'weight'), 2]
}
]
}
Wished Features
- add match node, edges, path specification
- add set expression on node/edges with constraints
- add path condition between node
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for networkx_query-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dfaea3ea9311ed84f8c0301baead84f8e5459bb75148e9859a545b8e4b5db815 |
|
MD5 | dd53a56d23aed16d7b7d335dc3443557 |
|
BLAKE2b-256 | 20d4e439f63404cf3916e487a4198ec67f4a9e1abd89c11a4308e7d26118e503 |