def __init__(self, pattern_graph, criteria_sets=None, vertex_tags=None, start_vertex=None):
self.criteria_sets = criteria_sets<EOL>if vertex_tags is None:<EOL><INDENT>vertex_tags = {}<EOL><DEDENT>self.vertex_tags = vertex_tags<EOL>if start_vertex is None:<EOL><INDENT>self.start_vertex = pattern_graph.central_vertex<EOL><DEDENT>else:<EOL><INDENT>self.start_vertex = start_vertex<EOL><DEDENT>self._set_pattern_graph(pattern_graph)<EOL>Pattern.__init__(self)<EOL>
Arguments:
  | ``pattern_graph`` -- the pattern that has to be found in the subject
                         graph.
  | ``criteria_sets`` -- Criteria sets associate additional conditions
                         with vertices and edges, and can also introduce
                         global match conditions.
  | ``vertex_tags`` -- vertex tags can reduce the symmetry of the
      pattern_graph pattern. An example case where this is useful:
      Consider atoms 0, 1, 2 that are bonded in this order. We want to
      compute the distance from atom 2 to the line (0, 1). In this case
      the matches (0->a, 1->b, 2->c) and (0->c, 1->b, 2->a) correspond
      to different internal coordinates. We want the graph search to
      return the two solutions. In order to do this, set
      ``vertex_tags={0:0, 1:0, 2:1}``. This means that vertex 0 and 1
      are equivalent, but that vertex 2 has a different nature. In the
      case of a bending angle, only one match like (0->a, 1->b, 2->c) is
      sufficient and we do not want to reduce the symmetry of the
      ``pattern_graph``. In this case, one should not use vertex_tags at
      all.
  | ``start_vertex``  --  The first vertex in the pattern graph that is
      linked with a vertex in the subject graph. A wise choice can
      improve the performance of a graph search. If not given, the
      central vertex is take as start_vertex