1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # coding: utf-8
- """
- Author: Sten Vercamman
- Univeristy of Antwerp
- Example code for paper: Efficient model transformations for novices
- url: http://msdl.cs.mcgill.ca/people/hv/teaching/MSBDesign/projects/Sten.Vercammen
- The main goal of this code is to give an overview, and an understandable
- implementation, of known techniques for pattern matching and solving the
- sub-graph homomorphism problem. The presented techniques do not include
- performance adaptations/optimizations. It is not optimized to be efficient
- but rather for the ease of understanding the workings of the algorithms.
- The paper does list some possible extensions/optimizations.
- It is intended as a guideline, even for novices, and provides an in-depth look
- at the workings behind various techniques for efficient pattern matching.
- """
- import graph as mg
- def printGraph(fileName, graph, matched_v={}, matched_e={}):
- if not isinstance(graph, mg.Graph):
- raise TypeError('Can only print Graph Graphs')
- with open(fileName, 'w') as f:
- f.write('digraph randomGraph {\n\n')
- for str_type, plan_vertices in graph.vertices.items():
- for plan_vertex in plan_vertices:
- vertex_str = str(id(plan_vertex)) + ' [label="'+str(str_type)+'"'
- if plan_vertex in list(matched_v.values()):
- vertex_str += ', style=dashed, style=filled]\n'
- else:
- vertex_str += ']\n'
- f.write(vertex_str)
- for out_edge in plan_vertex.outgoing_edges:
- edge_str = str(id(plan_vertex)) + ' -> ' + str(id(out_edge.tgt)) + ' [label="'+str(out_edge.type)+'"'
- if out_edge in list(matched_e.values()):
- edge_str += ', style=dashed, penwidth = 4]\n'
- else:
- edge_str += ']\n'
- f.write(edge_str)
- f.write('\n}')
|