loopsToColourSpec[directedGraph_]:=Normal[Diagonal[AdjacencyMatrix[directedGraph]]]removeIlicitEdges[V_,E_]:=Graph[V,DeleteCases[If[ContainsAll[V,{#[[1]],#[[2]]}],#,Null]&/@E,Null],VertexLabelsAll]rewriteStep[L_,R_,G_]:=Module[{el=EdgeList[L],vl=VertexList[L],vg=VertexList[G],eg=EdgeList[G],er=EdgeList[R],vr=VertexList[R]},vr=vr/.Thread[##+VertexCount[G]]&[Complement[vr,vl]];Counts[CanonicalGraph[removeIlicitEdges[Union[Complement[vg,vl/.#],vr/.#],Union[Complement[eg,el/.#],er/.#]]]&/@IGVF2FindSubisomorphisms[{SimpleGraph[L],"VertexColors"loopsToColourSpec[L]},{SimpleGraph[G],"VertexColors"loopsToColourSpec[G]}]]]rewriteStep[rules_List,init_Graph]:=Merge[rewriteStep[#[[1]],#[[2]],init]&/@rules,Total]rewriteProbs[rules_List,init_Graph]:=#/If[Total[Values[#]]0,1,Total[Values[#]]]&[rewriteStep[rules,init]]randomMultiwayPath[rules_,init_,0_]:={}randomMultiwayPath[rules_,init_,steps_]:=Prepend[randomMultiwayPath[rules,#,steps-1],#]&[RandomChoice[(Values[#]Keys[#])&[rewriteProbs[rules,init]]]]rewriteMultiway[rules_,init_,steps_]:=Module[{graph=DirectedGraph[{}],leaves={init},newEdges},For[i=1,i≤steps,i+=1,newEdges=Flatten[Function[s,Function[r,DirectedEdge[s,#[[1]],{r[[2]],#[[2]]}]&/@Normal[rewriteStep[r[[1,1]],r[[1,2]],s]]]/@Thread[rulesRange[Length[rules]]]]/@leaves,2];graph=GraphUnion[graph,DirectedGraph[newEdges]];leaves=DeleteDuplicates[newEdges[[;;,2]]]];graph]multiwayPlot[g1_]:={Graph[g1,VertexLabelsThread[VertexList[g1]Range[VertexCount[g1]]]],Thread[(GraphPlot[#,GraphLayout"SpringElectricalEmbedding",ImageSize100]&/@VertexList[g1])Range[VertexCount[g1]]]}inj[F_,G_]:=Length[IGVF2FindSubisomorphisms[{SimpleGraph[F],"VertexColors"loopsToColourSpec[F]},{SimpleGraph[G],"VertexColors"loopsToColourSpec[G]}]]