[VTK ARB] Dependency generations and visualisation - take 2

Andrew Maclean a.maclean at cas.edu.au
Tue Aug 24 20:09:40 EDT 2010


Thanks.
Give us a couple of days, I have just realised how to specify a
particular kit and optionally all or one or several classes in it. The
trick is to make sure dependencies on other kits are picked up.

Regards
   Andrew


On Tue, 2010-08-24 at 08:56 -0400, Jeff Baumes wrote:
> I like it. These should be good tools to have on hand as we figure out
> the new kit boundaries.
> 
> 
> Jeff
> 
> On Sun, Aug 22, 2010 at 6:28 PM, Andrew Maclean <a.maclean at cas.edu.au>
> wrote:
>         Hi Jeff,
>           This extends your idea of looking at the includes, by
>         allowing the
>         user to specify a particular class and (optionally) restrict
>         the depth
>         of the subsequent tree.
>         
>         You can select a particular class and view all the includes
>         for that
>         class. Optionally you can control the depth of the tree and
>         create an
>         output suitable for graphviz. To do this, use get_subgraph.py
>         and run it
>         using vtkdepends.py as input.
>         
>         python depends.py > vtkdepends.txt
>         
>         Here we select a particular class (vtkParametricTorus), the
>         topmost two
>         levels of the tree and format for subsequent use by graphviz.
>         python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus
>         -g -d 2 >
>         x
>         dot -Tps -O x
>         
>         Here we select a particular class (vtkParametricTorus), all
>         levels of
>         the tree and run it dependsview.py.
>         python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus
>         > x
>         vtkpython dependsview.py x
>         
>         
>         
>         One issue I have is that I get a segfault if I restrich the
>         depth of the
>         tree output and run dependsview.py.
>         e.g
>         python get_subgraph.py -i vtkdepends.txt -c vtkParametricTorus
>         -d 2 > x
>         vtkpython dependsview.py x
>         
>         Produces this output:
>         Total number of classes:  5
>         Top Ten:
>          18
>         vtkMath 7
>         vtkObjectFactory 7
>         vtkParametricTorus 3
>         vtkParametricFunction 1
>          0
>         Segmentation fault
>         
>         
>         Regards
>           Andrew
>         
>         
>         
>         On Thu, 2010-08-19 at 11:43 -0400, Jeff Baumes wrote:
>         > I attempted some custom scripts to see the include structure
>         of VTK.
>         >
>         >
>         > python depends.py > vtkdepends.txt
>         > vtkpython dependsview.py vtkdepends.txt
>         >
>         >
>         > The first will create a two-column list of all includes from
>         one class
>         > to another in VTK and must be called from the root of VTK
>         source. The
>         > second visualizes the data with VTK itself and prints out
>         the classes
>         > with the highest number of connections. Since the network
>         makes a
>         > so-called "hairball", the second script optionally takes a
>         maximum
>         > linkage cutoff to simplify the graph, e.g.
>         >
>         >
>         > vtkpython dependsview.py vtkdepends.txt 10
>         >
>         >
>         > will remove any classes with more than 10 links. Nodes are
>         colored by
>         > number of connections.
>         >
>         >
>         > Jeff
>         >
>         > On Wed, Aug 18, 2010 at 10:31 PM, Andrew Maclean
>         > <a.maclean at cas.edu.au> wrote:
>         >         Hey Bill, need some python practice?
>         >
>         >         This could be useful in looking at the examples.
>         >
>         >         I attach a python script taken from
>         >
>         http://furius.ca/pubcode/pub/conf/common/bin/depends-dot.html
>         >         And modified so that just the executable and the VTK
>         nodes of
>         >         the graph
>         >         are traversed.
>         >
>         >         Run it as:
>         >         python depends-dot ./Executable_File > depends.dot
>         >         Then:
>         >         neato -Tps -O depends.dot
>         >         Or:
>         >         dot -Tps -O depends.dot
>         >
>         >         As you know you can also run:
>         >         cmake --graphviz=g.dot ..
>         >         Assuming the source is in ..
>         >         Then:
>         >         neato -Tps -O g.dot
>         >         Or:
>         >         dot -Tps -O g.dot
>         >
>         >         However the python script (as modified) displays a
>         lot more
>         >         information.
>         >         My modifications are:
>         >                    # Eliminate /usr or /lib libraries and
>         keep the
>         >         first level
>         >         VTK links.
>         >                    #if fn.find('/usr') == -1 and
>         fn.find('/lib') == -1
>         >         and
>         >         dfn.find('VTK') != -1:
>         >                    # Just the executable and the VTK nodes
>         of the
>         >         graph are
>         >         traversed.
>         >                    if dfn.find('VTK') != -1:
>         >                       print '"%s" -> "%s";' % (fn, dfn)
>         >
>         >         Just uncomment the first if statement to just get
>         the
>         >         first-level
>         >         linkages to libraries.
>         >
>         >         This might be a good start in visualising
>         dependencies.
>         >
>         >         I also found  perl script called cinclude2dot that
>          produces
>         >         an include
>         >         dependency graph see:
>         http://www.flourish.org/cinclude2dot/ .
>         >         The
>         >         problem with this one is that it cannot follow links
>         to
>         >         includes in
>         >         other directories. My perl is not good enough but it
>         may be
>         >         possible to
>         >         parse CMakeCache.txt to pick up the include paths
>         and traverse
>         >         those
>         >         directories too.
>         >         I ran this on the vtk directory and the output
>         is ... well ...
>         >         spectacular and unreadable.
>         >         Try:
>         >         ./cinclude2dot --merge module > source.dot
>         >
>         >
>         >         The python script focuses on libraries and the perl
>         one
>         >         focuses on
>         >         includes. So the approaches are different. However I
>         feel the
>         >         perl one
>         >         could be more useful with the --merge module option
>         since in
>         >         general vtk
>         >         include names reflect class names.
>         >
>         >         Regards
>         >           Andrew
>         >
>         >
>         >         --
>         >         ___________________________________________
>         >         Andrew J. P. Maclean
>         >         Centre for Autonomous Systems
>         >         The Rose Street Building J04
>         >         The University of Sydney  2006  NSW
>         >         AUSTRALIA
>         >         Ph: +61 2 9351 3283
>         >         Fax: +61 2 9351 7474
>         >         URL: http://www.acfr.usyd.edu.au/
>         >         ___________________________________________
>         >
>         >         _______________________________________________
>         >         Arb mailing list
>         >         Arb at vtk.org
>         >
>         http://public.kitware.com/cgi-bin/mailman/listinfo/arb
>         >
>         >
>         >
>         >
>         > --
>         > Jeff Baumes, Ph.D.
>         > Technical Lead, Kitware Inc.
>         > (518) 881-4932
>         >
>         
>         --
>         ___________________________________________
>         Andrew J. P. Maclean
>         Centre for Autonomous Systems
>         The Rose Street Building J04
>         The University of Sydney  2006  NSW
>         AUSTRALIA
>         Ph: +61 2 9351 3283
>         Fax: +61 2 9351 7474
>         URL: http://www.acfr.usyd.edu.au/
>         ___________________________________________
>         
> 
> 
> 
> -- 
> Jeff Baumes, Ph.D.
> Technical Lead, Kitware Inc.
> (518) 881-4932
> 

-- 
___________________________________________
Andrew J. P. Maclean
Centre for Autonomous Systems
The Rose Street Building J04
The University of Sydney  2006  NSW
AUSTRALIA
Ph: +61 2 9351 3283
Fax: +61 2 9351 7474
URL: http://www.acfr.usyd.edu.au/
___________________________________________




More information about the Arb mailing list