pydot v1.0.2 Release Notes

Release Date: 2008-02-14 // about 16 years ago
  • The release 1.0.2 of pydot boasts the following:

    • ๐Ÿ“œ The parser has been improved a lot. It passes all of GraphViz's regression tests (which I consider quite an accomplishment seeing the kind of crazy constructs on those )
    • Different charsets should now be dealt with properly.
    • The search of GraphViz's executables has been improved for all platforms. On Windows, paths and registry keys are searched. On Unix now it should exhibit the same behavior as the traditional shell path search. (Thanks Andy Gimblett and many others)
    • ๐Ÿ Double-quoted paths in Windows are nor properly handled. The os.path.exists() check fails if a valid path is enclosed within quotes.
    • 'type' keyword has been changed everywhere to 'graph_type'
    • ๐Ÿ‘ Better handling of Node/Edge/Graph defaults. Added methods: set_graph_defaults, set_node_defaults, set_edge_defaults, get_graph_defaults, get_node_defaults, get_edge_defaults
    • Now it's possible to use rank to lay out nodes at the same level

      graph = pydot.Dot('graphname', graph_type='digraph') subg = pydot.Subgraph('', rank='same') subg.add_node(pydot.Node('a')) graph.add_subgraph(subg) subg.add_node(pydot.Node('b')) subg.add_node(pydot.Node('c'))

    • ๐Ÿ‘ Multiple main graphs in a file are now supported, will be returned as a list of graph instances

    • Handling of shapefiles Dot().set_shape_files()

    • โž• Added method "add_style()" to the Node class to easily append styles to a node

    • โšก๏ธ Attribute lists updated to reflect the available ones in graphviz 2.16

    • โž• Added error reporting when rendering graphs with GraphViz executables. There was an often reported problem where the output graphs would have 0 size. In most cases this was due to Graphviz missing a library for a format that pydot assumed to be there. Now the error given by the executable will be reported instead of being silently ignored (Thanks Jarno)

    • ๐Ÿ‘Œ Improved parsing of identifiers

    • โž• Added non-GraphViz attributes needed by dot2tex

    • Jose Fonseca contributed a fix dealing with quoted strings the the dot parsing module

    • โšก๏ธ setup.py updated so that it's possible to install pydot through Setuptools' easy_install

    • Edge()'s can be created passing two Node objects as well as, the previously supported, two strings with node names. Warning: when passing two Node instances, the attributes won't be taken into account. The edge will only read the Nodes' names to create an edge, the Nodes must be separately added to the graph so all their attributes are "remembered".

    • Substituted all str()'s for unicode()'s

    • It's possible now to manually specify the path to GraphViz's executables in the case they can't be found automatically. The method 'set_graphviz_executables(paths)' will take a dictionary specifying the location of the executables. Please refer to the documentation for usage detailed information.

    • ๐Ÿ›  And too many bugfixes to list...

    ๐ŸŽ Performance:

    The new pydot stores graphs and their objects using a hierarchy of nested dictionaries and lists. Graph, Node, Edge objects are mere proxies to the data and are created on demand. So that now it's possible to have a graph with a 1 million edges and there will not be a single Edge instance (only if requested, then they will be created on demand, mapping the data and providing with all the methods to act on the data in the global dictionary).

    Storing a graph with 1 million edges in pydot 1.0 has approximately the same memory requirements (~813MiB) as dealing with one with only 40.000 edges in pydot 0.9 (~851MiB), the 40.000 edges graph needs ~35MiB in pydot 1.0 . Handling graphs should be much faster, as no linear searches are performed in pydot 1.0