code: def _isomorphisms(q, g, check_varprops=True):
      
      # convert MRSs to be more graph-like, and add some indices
      qig = _IsoGraph(q, varprops=check_varprops)  # qig = q isograph
      gig = _IsoGraph(g, varprops=check_varprops)  # gig = q isograph
      # qsigs, qsigidx = _isomorphism_sigs(q, check_varprops)
      # gsigs, gsigidx = _isomorphism_sigs(g, check_varprops)
      # (it would be nice to not have to do this... maybe later)
      # qadj = _isomorphism_adj(q, qsigidx)
      # gadj = _isomorphism_adj(g, gsigidx)
      # the degree of each node is useful (but can it be combined with adj?)
      # qdeg = _isomorphism_deg(qadj)
      # gdeg = _isomorphism_deg(gadj)
  
      u_s = _isomorphism_choose_start_q_vertex(qig, gig, subgraph=False)
      q_ = _isomorphism_rewrite_to_NECtree(u_s, qig)
      for v_s in gsigs.get(qsigidx[u_s], []):
          cr = _isomorphism_explore_CR(q_, {v_s}, qig, gig)
          if cr is None:
              continue
          order = _isomorphism_determine_matching_order(q_, cr)
          update_state(M,F,{u_s}, {v_s})
          subraph_search(q, q_, g, order, 1)  # 1="the first query vertex to match"
          restore_state(M, F, {u_s}, {v_s})
docs: Inspired by Turbo_ISO: http://dl.acm.org/citation.cfm?id=2465300