NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks. Data structures for graphs, digraphs, and multigraphs. Many standard graph algorithms. Network structure and analysis measures. Generators for classic graphs, random graphs, and synthetic networks. Nodes can be "anything" (e.g., text, images, XML records). Edges can hold arbitrary data (e.g., weights, time-series). Open source 3-clause BSD license. Well tested with over 90% code coverage. Additional benefits from Python include fast prototyping, easy to teach, and multi-platform. Find the shortest path between two nodes in an undirected graph. Python’s None object is not allowed to be used as a node. It determines whether optional function arguments have been assigned in many functions. And it can be used as a sentinel object meaning “not a node”.