GFQL Chain Matcher#
Chain enables combining multiple matchers into a single matcher, e.g., for mining paths and subgraphs.
- class graphistry.compute.chain.Chain(chain)#
Bases:
ASTSerializable
- Parameters:
chain (List[ASTObject])
- classmethod from_json(d)#
Convert a JSON AST into a list of ASTObjects
- Parameters:
d (Dict[str, None | bool | str | float | int | List[None | bool | str | float | int | List[JSONVal] | Dict[str, JSONVal]] | Dict[str, None | bool | str | float | int | List[JSONVal] | Dict[str, JSONVal]]])
- Return type:
- to_json(validate=True)#
Convert a list of ASTObjects into a JSON AST
- Return type:
Dict[str, None | bool | str | float | int | List[None | bool | str | float | int | List[JSONVal] | Dict[str, JSONVal]] | Dict[str, None | bool | str | float | int | List[JSONVal] | Dict[str, JSONVal]]]
- validate()#
- Return type:
None
- graphistry.compute.chain.chain(self, ops, engine=EngineAbstract.AUTO)#
Chain a list of ASTObject (node/edge) traversal operations
Return subgraph of matches according to the list of node & edge matchers If any matchers are named, add a correspondingly named boolean-valued column to the output
For direct calls, exposes convenience List[ASTObject]. Internal operational should prefer Chain.
Use engine=’cudf’ to force automatic GPU acceleration mode
- Parameters:
- Returns:
Plotter
- Return type:
Plotter
Example: Find nodes of some type
from graphistry.ast import n people_nodes_df = g.chain([ n({"type": "person"}) ])._nodes
Example: Find 2-hop edge sequences with some attribute
from graphistry.ast import e_forward g_2_hops = g.chain([ e_forward({"interesting": True}, hops=2) ]) g_2_hops.plot()
Example: Find any node 1-2 hops out from another node, and label each hop
from graphistry.ast import n, e_undirected g_2_hops = g.chain([ n({g._node: "a"}), e_undirected(name="hop1"), e_undirected(name="hop2") ]) print('# first-hop edges:', len(g_2_hops._edges[ g_2_hops._edges.hop1 == True ]))
Example: Transaction nodes between two kinds of risky nodes
from graphistry.ast import n, e_forward, e_reverse g_risky = g.chain([ n({"risk1": True}), e_forward(to_fixed=True), n({"type": "transaction"}, name="hit"), e_reverse(to_fixed=True), n({"risk2": True}) ]) print('# hits:', len(g_risky._nodes[ g_risky._nodes.hit ]))
Example: Filter by multiple node types at each step using is_in
from graphistry.ast import n, e_forward, e_reverse, is_in g_risky = g.chain([ n({"type": is_in(["person", "company"])}), e_forward({"e_type": is_in(["owns", "reviews"])}, to_fixed=True), n({"type": is_in(["transaction", "account"])}, name="hit"), e_reverse(to_fixed=True), n({"risk2": True}) ]) print('# hits:', len(g_risky._nodes[ g_risky._nodes.hit ]))
Example: Run with automatic GPU acceleration
import cudf import graphistry e_gdf = cudf.from_pandas(df) g1 = graphistry.edges(e_gdf, 's', 'd') g2 = g1.chain([ ... ])
Example: Run with automatic GPU acceleration, and force GPU mode
import cudf import graphistry e_gdf = cudf.from_pandas(df) g1 = graphistry.edges(e_gdf, 's', 'd') g2 = g1.chain([ ... ], engine='cudf')