123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # -*- coding: utf-8 -*-
- """
- This generate diagram of the (raw)ios and formats
- Author: Julia Sprenger
- """
- import pygraphviz
- import neo
- # from datetime import datetime
- #
- # import numpy as np
- # import quantities as pq
- # from matplotlib import pyplot
- # from matplotlib.patches import Rectangle, ArrowStyle, FancyArrowPatch
- # from matplotlib.font_manager import FontProperties
- #
- # from neo.test.generate_datasets import fake_neo
- #
- # line_heigth = .22
- # fontsize = 10.5
- # left_text_shift = .1
- # dpi = 100
- default_style = {'shape': 'rectangle',
- 'color': 'black',
- 'fontcolor': 'black'}
- IO_style = default_style.copy()
- IO_style['fontsize'] = '30'
- IO_style['penwidth'] = 6
- styles = {'IO': {'ro': IO_style.copy(),
- 'rw': IO_style.copy(),
- 'raw': IO_style.copy()
- },
- 'main': default_style.copy(),
- 'ext': default_style.copy()}
- styles['IO']['ro']['color'] = '#20B2AA '
- styles['IO']['rw']['color'] = '#4169E1 '
- styles['IO']['raw']['color'] = '#008080 '
- styles['ext']['shape'] = 'circle'
- styles['ext']['fillcolor'] = 'red'
- styles['ext']['style'] = 'filled'
- # styles['ext']['fixedsize'] = 'True'
- def generate_diagram(filename, plot_extensions=False):
- dia = pygraphviz.AGraph(strict=False, splines='true')
- G=dia
- G.node_attr['fontname'] = 'Arial'
- # G.node_attr['shape'] = 'circle'
- # G.node_attr['fixedsize'] = 'true'
- # G.node_attr['sep'] = '-100'
- G.node_attr['fixedsize'] = 'False'
- # G.graph_attr['overlap'] = 'False'
- G.graph_attr['packMode'] = 'clust'
- # G.graph_attr['levelsgap'] = -500
- G.node_attr['fontsize'] = '20'
- G.edge_attr['minlen'] = '0'
- # G.node_attr['style'] = 'filled'
- # G.graph_attr['outputorder'] = 'edgesfirst'
- # G.graph_attr['splines'] = "compound"
- G.graph_attr['label'] = "NEO {}".format(neo.__version__)
- G.graph_attr['ratio'] = '1.0'
- # G.edge_attr['color'] = '#1100FF'
- G.edge_attr['style'] = 'setlinewidth(4)'
- dia.add_node('NEO', shape='circle', fontsize=50)
- for io in neo.io.iolist:
- io_name = io.name
- rawio = False
- if issubclass(io, neo.io.basefromrawio.BaseFromRaw):
- rawio = True
- if io_name == 'BaseIO':
- io_name = io.__name__.rstrip('RawIO')
- if io_name is None:
- try:
- io_name = io.__name__.rstrip('IO')
- except:
- continue
- if 'example' in io_name:
- continue
- if io.is_writable and io.is_readable:
- mode = 'rw'
- elif io.is_readable:
- mode = 'ro'
- if rawio:
- mode = 'raw'
- dia.add_node(io_name, **styles['IO'][mode])
- dia.add_edge('NEO', io_name)
- if plot_extensions:
- for ext in io.extensions:
- dia.add_node(ext, **styles['ext'])
- dia.add_edge(io_name, ext, minlen=0)
- dia.layout(prog='fdp') #neato, dot, twopi, circo, fdp, nop, wc, acyclic, gvpr, gvcolor,
- # ccomps, sccmap, tred, sfdp.
- for ext in ['png', 'svg', 'eps']:
- dia.draw('{}.{}'.format(filename, ext))
- if __name__ == '__main__':
- generate_diagram('IODiagram', plot_extensions=False)
- generate_diagram('IODiagram_ext', plot_extensions=True)
- # pyplot.show()
|