Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Use graph algorithms from the Python package NetworkX without any Python programming
ResourceFunction["NetworkXObject"][] returns a configured PythonObject for the Python package NetworkX in a new Python session. | |
ResourceFunction["NetworkXObject"][session] uses the specified running ExternalSessionObject session. | |
ResourceFunction["NetworkXObject"][…,"func"[args,opts]] executes the function func with the specified arguments and options. |
Create a NetworkX object:
| In[1]:= |
| Out[1]= |
Construct an undirected graph from an edge list:
| In[2]:= |
| In[3]:= |
| Out[3]= |
Import the Python object as a Graph:
| In[4]:= |
| Out[4]= | ![]() |
The imported graph is a standard Wolfram Language object:
| In[5]:= |
| Out[5]= |
| In[6]:= |
| Out[6]= | ![]() |
Get a directed graph:
| In[7]:= |
| Out[7]= |
| In[8]:= |
| Out[8]= | ![]() |
| In[9]:= |
| Out[9]= |
Clean up the Python session:
| In[10]:= |
An undirected graph supporting multiple edges between vertices:
| In[11]:= |
| Out[11]= |
| In[12]:= |
| In[13]:= |
| Out[13]= |
| In[14]:= |
| Out[14]= | ![]() |
| In[15]:= |
| Out[15]= |
A directed multigraph:
| In[16]:= |
| Out[16]= |
| In[17]:= |
| Out[17]= | ![]() |
| In[18]:= |
| Out[18]= |
| In[19]:= |
Create an empty graph:
| In[20]:= |
| Out[20]= |
| In[21]:= |
| Out[21]= |
Nodes and edges of the graph are given as continuously updated NodeView and EdgeView objects:
| In[22]:= |
| Out[22]= | ![]() |
| In[23]:= |
| Out[23]= |
Add one node at a time:
| In[24]:= |
Examine nodes:
| In[25]:= |
| Out[25]= |
| In[26]:= |
| Out[26]= |
Remove a node:
| In[27]:= |
| In[28]:= |
| Out[28]= |
Add nodes from a list:
| In[29]:= |
| In[30]:= |
| Out[30]= |
Remove several nodes:
| In[31]:= |
| In[32]:= |
| Out[32]= |
| In[33]:= |
| In[34]:= |
| Out[34]= |
| In[35]:= |
| Out[35]= |
Add nodes along with node attributes specified as an Association:
| In[36]:= |
| In[37]:= |
| Out[37]= |
Retrieve the specified node attribute:
| In[38]:= |
| Out[38]= |
Check the attributes of the imported graph:
| In[39]:= |
| Out[39]= | ![]() |
| In[40]:= |
| Out[40]= |
| In[41]:= |
| Out[41]= |
| In[42]:= |
Create a new graph:
| In[43]:= |
| Out[43]= |
| In[44]:= |
| Out[44]= |
To add a node attribute after a node is created, get a reference to the Python dictionary of node attributes:
| In[45]:= |
| In[46]:= |
| Out[46]= | ![]() |
Adding a key→value pair to the dictionary adds an attribute to the graph:
| In[47]:= |
| Out[47]= |
| In[48]:= |
| Out[48]= |
| In[49]:= |
Create a new graph:
| In[50]:= |
| Out[50]= |
| In[51]:= |
| Out[51]= |
Grow the graph by adding one edge at a time:
| In[52]:= |
| In[53]:= |
| Out[53]= |
Add a list of edges:
| In[54]:= |
Add a list of edges with attributes:
| In[55]:= |
| In[56]:= |
| Out[56]= |
Check the attributes in the imported graph:
| In[57]:= |
| Out[57]= | ![]() |
| In[58]:= |
| Out[58]= |
| In[59]:= |
| Out[59]= |
To add an edge attribute after an edge is created, assign a key→value pair to the dictionary of edge attributes:
| In[60]:= |
| Out[60]= | ![]() |
| In[61]:= |
| Out[61]= |
Confirm the assignment for the edge 12:
| In[62]:= |
| Out[62]= |
Remove a single edge:
| In[63]:= |
| In[64]:= |
| Out[64]= |
Remove several edges:
| In[65]:= |
| In[66]:= |
| Out[66]= |
| In[67]:= |
Create a new empty graph:
| In[68]:= |
| Out[68]= |
Incorporate nodes from one graph into another:
| In[69]:= |
| Out[69]= | ![]() |
| In[70]:= |
| Out[70]= |
| In[71]:= |
| In[72]:= |
| Out[72]= |
| In[73]:= |
| Out[73]= | ![]() |
| In[74]:= |
Create a new empty graph:
| In[75]:= |
| Out[75]= |
Use one graph as a node in another:
| In[76]:= |
| Out[76]= |
| In[77]:= |
| Out[77]= |
| In[78]:= |
| In[79]:= |
| Out[79]= |
| In[80]:= |
| Out[80]= | ![]() |
| In[81]:= |
Create a new empty graph:
| In[82]:= |
| Out[82]= |
| In[83]:= |
| Out[83]= |
Add a node "spam":
| In[84]:= |
Add four nodes "s", "p", "a", "m":
| In[85]:= |
| In[86]:= |
| Out[86]= |
| In[87]:= |
Create a new empty graph:
| In[88]:= |
| Out[88]= |
| In[89]:= |
| Out[89]= |
Incorporate edges from one graph into another:
| In[90]:= |
| Out[90]= | ![]() |
| In[91]:= |
| Out[91]= |
| In[92]:= |
| In[93]:= |
| Out[93]= |
| In[94]:= |
| Out[94]= | ![]() |
| In[95]:= |
Create a new multi-digraph graph:
| In[96]:= |
| Out[96]= |
| In[97]:= |
| Out[97]= |
Add edges with weights:
| In[98]:= |
| In[99]:= |
| Out[99]= |
| In[100]:= |
| Out[100]= |
| In[101]:= |
Create a new multi-digraph:
| In[102]:= |
| Out[102]= |
Count nodes and edges in a graph:
| In[103]:= |
| Out[103]= |
| In[104]:= |
| Out[104]= | ![]() |
| In[105]:= |
| Out[105]= |
| In[106]:= |
| Out[106]= |
| In[107]:= |
Create a new multi-digraph:
| In[108]:= |
| Out[108]= |
| In[109]:= |
| Out[109]= |
| In[110]:= |
| Out[110]= | ![]() |
Test whether a node is in the graph:
| In[111]:= |
| Out[111]= | ![]() |
| In[112]:= |
| Out[112]= |
Test if an edge is in the graph:
| In[113]:= |
| Out[113]= |
Test if an edge with a specific tag is in the graph:
| In[114]:= |
| Out[114]= |
Use the DirectedEdge wrapper in the edge specification:
| In[115]:= |
| Out[115]= |
| In[116]:= |
Create a new multi-digraph:
| In[117]:= |
| Out[117]= |
| In[118]:= |
| Out[118]= |
Get an Association of neighbors (adjacencies) as a property of the graph:
| In[119]:= |
| Out[119]= |
| In[120]:= |
| Out[120]= |
Alternatively, use the "Adjacency" method to get a list of tuples rather than an Association:
| In[121]:= |
| Out[121]= | ![]() |
| In[122]:= |
| Out[122]= |
| In[123]:= |
Create a new multi-digraph:
| In[124]:= |
| Out[124]= |
| In[125]:= |
| Out[125]= |
Get an object containing vertex degrees for all vertices in the graph:
| In[126]:= |
| Out[126]= |
| In[127]:= |
| Out[127]= |
The degree of a specific vertex:
| In[128]:= |
| Out[128]= |
| In[129]:= |
Create a new multi-digraph:
| In[130]:= |
| Out[130]= |
| In[131]:= |
| Out[131]= |
Get a list of neighbors for a node:
| In[132]:= |
| Out[132]= | ![]() |
| In[133]:= |
| Out[133]= |
Or equivalently, for a directed graph:
| In[134]:= |
| Out[134]= |
Predecessors of a node of a directed graph:
| In[135]:= |
| Out[135]= |
| In[136]:= |
Create a new graph:
| In[137]:= |
| Out[137]= |
| In[138]:= |
| Out[138]= |
Use the special attribute "weight" to create a waited graph:
| In[139]:= |
Alternatively, use the AddWeightedEdgesFrom method:
| In[140]:= |
Compute the weighted adjacency matrix on the Python side:
| In[141]:= |
| Out[141]= | ![]() |
Import the matrix as SparseArray:
| In[142]:= |
| Out[142]= |
| In[143]:= |
| Out[143]= |
The imported graph is weighted too:
| In[144]:= |
| Out[144]= | ![]() |
| In[145]:= |
| Out[145]= |
| In[146]:= |
| Out[146]= |
| In[147]:= |
| Out[147]= |
Compare with the adjacency matrix computed in Python:
| In[148]:= |
| Out[148]= |
| In[149]:= |
Create a new NetworkX object:
| In[150]:= |
| Out[150]= |
| In[151]:= |
Undirected and directed graphs with self-loops and a single edge between nodes:
| In[152]:= |
| Out[152]= | ![]() |
| In[153]:= |
| Out[153]= | ![]() |
| In[154]:= |
| Out[154]= |
Undirected and directed graphs possibly with parallel edges between nodes:
| In[155]:= |
| Out[155]= | ![]() |
| In[156]:= |
| Out[156]= | ![]() |
| In[157]:= |
| Out[157]= |
Edges in imported multigraphs are tagged:
| In[158]:= |
| Out[158]= |
| In[159]:= |
Build a graph incrementally:
| In[160]:= |
| Out[160]= |
| In[161]:= |
| In[162]:= |
| In[163]:= |
| Out[163]= | ![]() |
| In[164]:= |
Create from an edge list:
| In[165]:= |
| Out[165]= |
Alternatively, use the edge list in the form returned by EdgeList:
| In[166]:= |
| Out[166]= |
| In[167]:= |
| Out[167]= |
| In[168]:= |
Form an Association mapping nodes to neighbors:
| In[169]:= |
| Out[169]= |
| In[170]:= |
| Out[170]= | ![]() |
| In[171]:= |
Form a general Wolfram Language Graph:
| In[172]:= |
| Out[172]= | ![]() |
| In[173]:= |
| Out[173]= | ![]() |
From a sparse matrix graph:
| In[174]:= |
| Out[174]= |
| In[175]:= |
| Out[175]= | ![]() |
| In[176]:= |
| Out[176]= | ![]() |
| In[177]:= |
From a weighted Graph object:
| In[178]:= |
| In[179]:= |
| Out[179]= | ![]() |
| In[180]:= |
| Out[180]= |
| In[181]:= |
| Out[181]= | ![]() |
| In[182]:= |
From an edge-capacity and vertex-capacity Graph object:
| In[183]:= |
| Out[183]= | ![]() |
Send the graph through NetworkX:
| In[184]:= |
| Out[184]= |
| In[185]:= |
| Out[185]= | ![]() |
The capacity is preserved as an annotation:
| In[186]:= |
| Out[186]= |
| In[187]:= |
| Out[187]= |
| In[188]:= |
From a multigraph:
| In[189]:= |
| In[190]:= |
| Out[190]= |
| In[191]:= |
| Out[191]= | ![]() |
| In[192]:= |
From another NetworkX graph:
| In[193]:= |
| Out[193]= | ![]() |
| In[194]:= |
| Out[194]= | ![]() |
| In[195]:= |
Form a 2D NumPy array:
| In[196]:= |
| Out[196]= |
Create a graph and import it:
| In[197]:= | ![]() |
| Out[197]= | ![]() |
| In[198]:= |
| Out[198]= | ![]() |
The same NumPy array can be supplied implicitly, as long as the array is in the form of NumericArray:
| In[199]:= |
| Out[199]= | ![]() |
| In[200]:= |
Create a graph from a SciPy sparse matrix:
| In[201]:= |
| Out[201]= | ![]() |
| In[202]:= |
| Out[202]= |
| In[203]:= |
| Out[203]= | ![]() |
| In[204]:= |
| Out[204]= | ![]() |
Or from a SciPy sparse array:
| In[205]:= |
| Out[205]= | ![]() |
| In[206]:= |
| Out[206]= | ![]() |
| In[207]:= |
Create a graph directly from a SparseArray object:
| In[208]:= | ![]() |
| Out[208]= | ![]() |
| In[209]:= |
Create a data frame from a pandas object:
| In[210]:= | ![]() |
| Out[208]= |
Create a graph:
| In[211]:= |
| Out[211]= |
Or use the FromPandasAdjacency function:
| In[212]:= |
| Out[212]= |
| In[213]:= |
| Out[213]= | ![]() |
| In[214]:= |
Create a data frame representing a pandas edge list:
| In[215]:= | ![]() |
| Out[208]= |
Convert to a graph:
| In[216]:= | ![]() |
| Out[216]= |
See the Graph:
| In[217]:= |
| Out[217]= | ![]() |
See the edge list and weights:
| In[218]:= |
| Out[218]= | ![]() |
Compare with a dataset:
| In[219]:= |
| Out[219]= | ![]() |
| In[220]:= |
Explore the variety of ways to generate graphs:
| In[221]:= |
| In[222]:= |
| Out[222]= | ![]() |
| In[223]:= |
Create the first few scale-free pseudo-fractal graphs using the Dorogovtsev-Goltsev-Mendes algorithm:
| In[224]:= |
| Out[224]= | ![]() |
| In[225]:= |
A few Newman–Watts–Strogatz small-world graphs:
| In[226]:= |
| Out[226]= | ![]() |
| In[227]:= |
The specified graph from the Graph Atlas:
| In[228]:= |
| Out[228]= | ![]() |
| In[229]:= |
A Zachary’s Karate Club graph:
| In[230]:= |
| Out[230]= | ![]() |
The same graph in the Wolfram Language (but note that NetworkX version is kept on the Python side):
| In[231]:= |
| Out[231]= | ![]() |
Create a series of random Spectral Graph Forge (SGF) graphs resembling the global properties of the previous graph:
| In[232]:= |
| Out[232]= | ![]() |
| In[233]:= |
A bipartite random graph with the first n nodes in the first bipartite set and the remaining m nodes in the second:
| In[234]:= | ![]() |
| Out[234]= | ![]() |
Show the bipartite partition of the graph:
| In[235]:= |
| Out[235]= | ![]() |
| In[236]:= |
A random partition graph:
| In[237]:= |
| Out[237]= | ![]() |
| In[238]:= |
| Out[238]= |
| In[239]:= |
A Gaussian random partition graph:
| In[240]:= |
| Out[240]= | ![]() |
| In[241]:= |
| Out[241]= | ![]() |
Highlight the partitions:
| In[242]:= |
| Out[242]= | ![]() |
Explore functional interface to graph methods and assorted graph utilities:
| In[243]:= |
| Out[243]= | ![]() |
| In[244]:= |
Add a star to a graph, with the first node in the middle of the star and the other nodes connected to it:
| In[245]:= | ![]() |
| In[246]:= |
| Out[246]= | ![]() |
Add another star, with weighted edges:
| In[247]:= |
| In[248]:= |
| Out[248]= | ![]() |
| In[249]:= |
Explore available graph-theoretic algorithms:
| In[250]:= |
| Out[250]= | ![]() |
| In[251]:= |
Create a random bipartite graph with n nodes in the first bipartite set and compute the biadjacency matrix of the graph:
| In[252]:= | ![]() |
| Out[252]= |
| In[253]:= |
| Out[253]= | ![]() |
| In[254]:= |
| Out[254]= | ![]() |
Despite being smaller, the biadjacency matrix fully describes the graph:
| In[255]:= |
| Out[255]= | ![]() |
| In[256]:= |
| Out[256]= |
| In[257]:= |
Compute the clustering coefficient for nodes of a complete graph:
| In[258]:= |
| Out[258]= | ![]() |
| In[259]:= |
| Out[259]= |
The clustering coefficient for the specified nodes:
| In[260]:= |
| Out[260]= |
For a single node:
| In[261]:= |
| Out[261]= |
| In[262]:= |
Compute the average clustering coefficient for nodes of a random Erdős-Rényi (binomial) graph:
| In[263]:= |
| Out[263]= | ![]() |
| In[264]:= |
| Out[264]= |
| In[265]:= |
Find the dominating set of a random geometric graph:
| In[266]:= |
| Out[266]= | ![]() |
| In[267]:= |
| Out[267]= |
Confirm that the set of vertices form a dominating set:
| In[268]:= |
| Out[268]= | ![]() |
| In[269]:= |
| Out[269]= |
| In[270]:= |
Define a hidden Markov model (HMM) graph with five states and observation nodes:
| In[271]:= |
| Out[271]= |
| In[272]:= |
Check if states/observation nodes before "S3" are d-separated from the states/observations after "S3":
| In[273]:= |
| In[274]:= |
| In[275]:= |
| In[276]:= |
| Out[276]= |
| In[277]:= |
| Out[277]= | ![]() |
| In[278]:= |
Create an undirected moralized graph of given a directed graph:
| In[279]:= |
| Out[279]= |
| In[280]:= |
| Out[280]= |
Display the graphs:
| In[281]:= |
| Out[281]= | ![]() |
The added edge between unconnected parents that have a common child:
| In[282]:= |
| Out[282]= |
| In[283]:= |
Functions for drawing graphs include interfaces to Python packages PyGraphviz, PyDot, PyLab:
| In[284]:= |
| Out[284]= | ![]() |
| In[285]:= |
Create a Matplotlib object to draw a graph on the Python side:
| In[286]:= |
| Out[286]= |
Prepare a subplot object to plot a graph:
| In[287]:= |
| Out[287]= |
Create and plot the graph in Python:
| In[288]:= |
| Out[288]= |
| In[289]:= |
| Out[289]= |
| In[290]:= |
Import the graph image:
| In[291]:= |
| Out[291]= | ![]() |
Prepare another subplot and draw the graph with shell layout:
| In[292]:= |
| Out[292]= |
| In[293]:= | ![]() |
Import the combined image:
| In[294]:= |
| Out[294]= | ![]() |
| In[295]:= |
Display a table graph-theoretical functions for linear algebra:
| In[296]:= |
| Out[296]= | ![]() |
| In[297]:= |
Construct a simple graph with given degree sequence using the Havel-Hakimi algorithm:
| In[298]:= |
| Out[298]= | ![]() |
The Bethe Hessian matrix of the graph:
| In[299]:= |
| Out[299]= | ![]() |
| In[300]:= |
| Out[300]= | ![]() |
| In[301]:= |
Display a table of functions that import, export and process data in common graph formats:
| In[302]:= |
| Out[302]= | ![]() |
| In[303]:= |
Create a graph:
| In[304]:= |
| Out[341]= | ![]() |
Export the graph in the Graph6 format:
| In[342]:= |
| In[343]:= |
Import the file in Python:
| In[344]:= |
| Out[344]= |
| In[345]:= |
| Out[345]= | ![]() |
Import the file in the Wolfram Language:
| In[346]:= |
| Out[346]= | ![]() |
| In[347]:= |
Explore the available graph utilities:
| In[348]:= |
| Out[348]= | ![]() |
Utilities called by graph constructors that can also be called directly (and functions for converting back):
| In[349]:= |
| Out[349]= | ![]() |
| In[350]:= |
Create an edge list using "Pairwise":
| In[351]:= |
| Out[64]= | ![]() |
Partition creates an analogous list:
| In[352]:= |
| Out[352]= |
Create graphs from each to show the equivalence:
| In[353]:= |
| Out[353]= | ![]() |
| In[354]:= |
Convert a graph to a SciPy sparse array:
| In[355]:= |
| Out[355]= |
| In[356]:= |
| Out[356]= | ![]() |
Import the matrix:
| In[357]:= |
| Out[357]= |
| In[358]:= |
Control the type of returned object in graph constructors using the option CreateUsing:
| In[359]:= |
| Out[359]= | ![]() |
| In[360]:= |
| Out[360]= | ![]() |
| In[361]:= |
Functions, such as "RelabelNodes", that have the option "Copy" allow you to modify the input graph object in-place:
| In[362]:= |
| Out[362]= | ![]() |
By default, "RelabelNodes" returns a modified graph keeping the original intact:
| In[363]:= |
| Out[363]= |
Define the remapping:
| In[364]:= |
| Out[364]= |
| In[365]:= |
| Out[365]= |
Show the original and remapped vertex names:
| In[366]:= |
| Out[366]= |
Use "Copy"→False to modify the input graph in-place:
| In[367]:= |
| Out[367]= |
The graph g has changed:
| In[368]:= |
| Out[368]= | ![]() |
| In[369]:= |
The option "Seed" seeds the random number generator in functions that use randomness to generate, draw and compute properties or manipulate graphs.
Create a line graph:
| In[370]:= |
| Out[370]= |
Define a function that computes random coordinates of a graph, passing options to RandomLayout:
| In[371]:= |
Without a seed, executing the function twice produces different sets of random coordinates:
| In[372]:= |
| Out[372]= | ![]() |
Use the option "Seed" to create a reproducible random layout:
| In[373]:= |
| Out[373]= | ![]() |
| In[374]:= |
Employ algorithms that might not yet be implemented in the Wolfram Language; for instance, find an approximate solution to the asymmetric traveling salesman problem using the algorithm developed by Asadpour et al.
Create a weighted directed graph:
| In[375]:= | ![]() |
| Out[375]= | ![]() |
Import the graph in Python:
| In[376]:= |
| Out[376]= |
Find the shortest cycle starting and ending at vertex 1:
| In[377]:= |
| Out[377]= |
| In[378]:= |
Create a graph using a constructor that might not yet be implemented in the Wolfram Language, such as a directed graph constructor for the growing network with redirection (the GNR model):
| In[379]:= |
| Out[379]= | ![]() |
| In[380]:= |
Visualize data and draw conclusions from a pandas DataFrame object.
Create a small group of participants:
| In[381]:= | ![]() |
| Out[380]= |
Simulate a table exported from a JIRA bug database:
| In[382]:= |
| In[383]:= |
| Out[383]= |
Create a pandas "DataFrame" object for the database:
| In[384]:= | ![]() |
| Out[384]= |
| In[385]:= |
| Out[385]= | ![]() |
Construct a graph of the database:
| In[386]:= |
| Out[386]= |
| In[387]:= |
| Out[387]= |
Team members Boma and Pudding are apparently in the center of action:
| In[388]:= |
| Out[388]= | ![]() |
Extract all connections represented by edges of the graph:
| In[389]:= |
| Out[389]= | ![]() |
Create a table of participants sorted by activity:
| In[390]:= |
| In[391]:= |
| Out[391]= | ![]() |
| In[392]:= |
NetworkXObject[…] gives the same result as the resource function PythonObject with a special configuration:
| In[393]:= |
| Out[393]= |
| In[394]:= |
| Out[394]= |
| In[395]:= |
Get information on a NetworkX object:
| In[396]:= |
| Out[396]= |
| In[397]:= |
| Out[397]= |
Open the user guide in your default web browser:
| In[398]:= |

| In[399]:= |
Some of the functions and classes available in the NetworkX module:
| In[400]:= |
| Out[400]= |
| In[401]:= |
| Out[401]= |
| In[402]:= |
Information on a function:
| In[403]:= |
| Out[403]= | ![]() |
Web documentation of a function:
| In[404]:= |

| In[405]:= |
Functions similar to the given one; click the function name to go to the web documentation:
| In[406]:= |
| Out[406]= |
| In[407]:= |
| Out[407]= | ![]() |
| In[408]:= |
Aliases defined for a function or class:
| In[409]:= |
| Out[409]= |
| In[410]:= |
| Out[410]= |
| In[411]:= |
NetworkX Graph objects are analogous to Graph, but keep the objects on the Python side:
| In[412]:= |
| Out[412]= | ![]() |
| In[413]:= |
| Out[413]= |
Similarly, many graph properties and functions closely correspond to Wolfram Language functions:
| In[414]:= |
| Out[414]= |
| In[415]:= |
| Out[415]= |
| In[416]:= |
Functions of the same name might be defined in different modules:
| In[417]:= |
| Out[417]= |
| In[418]:= |
| In[419]:= |
| Out[419]= | ![]() |
Functions defined for both general and bipartite graphs:
| In[420]:= |
| Out[420]= | ![]() |
| In[421]:= |
Define a bipartite graph in the Wolfram Language and NetworkX:
| In[422]:= |
| Out[422]= | ![]() |
| In[423]:= |
| Out[423]= |
The general function "ClosenessCentrality" function can be accessed by an unqualified name, returning the same values as the corresponding Wolfram Language function ClosenessCentrality:
| In[424]:= |
| Out[424]= |
| In[425]:= |
| Out[425]= |
Use a qualified name to access the bipartite version of the function:
| In[426]:= |
| Out[426]= |
| In[427]:= |
NetworkX uses zero-based indexes, while the Wolfram Language Graph uses one-based node indexes:
| In[428]:= |
| Out[428]= |
| In[429]:= |
| Out[429]= |
See the vertex indexing from NetworkX:
| In[430]:= |
| Out[430]= |
Compare with the default indexing in Graph:
| In[431]:= |
| Out[431]= |
Use "RelabelNodes" to index the nodes differently:
| In[432]:= |
| Out[432]= |
Now the indices are identical:
| In[433]:= |
| Out[433]= |
| In[434]:= |
When constructing graphs from Graph, NetworkXObject may not pass all annotations:
| In[435]:= | ![]() |
| Out[435]= |
| In[436]:= |
| Out[436]= |
Use "SetNodeAttributes" to pass the annotations:
| In[437]:= |
| Out[437]= |
| In[438]:= |
| In[439]:= |
| Out[439]= |
| In[440]:= |
NetworkXObject choses the type of edges in graph constructors based on the graph type, effectively discarding the DirectedEdge and UndirectedEdge wrappers:
| In[441]:= |
| Out[441]= |
| In[442]:= |
| Out[442]= |
Similarly, the wrappers are discarded in all other functions:
| In[443]:= |
| Out[443]= |
| In[444]:= |
An attempt to call a function by an unqualified name might fail if the function is defined in multiple contexts:
| In[445]:= |
| Out[445]= | ![]() |
Use a qualified name to call the bipartite version of the function:
| In[446]:= |
| Out[446]= |
| In[447]:= |
| Out[447]= | ![]() |
Use an unqualified name to call the general function:
| In[448]:= |
| Out[448]= |
| In[449]:= |
| Out[449]= | ![]() |
| In[450]:= |
Wolfram Language 12.3 (May 2021) or above
This work is licensed under a Creative Commons Attribution 4.0 International License