FusionAtlasPaths={"~/projects/fusionatlas/code/package/"};
$Path=$Path~Join~FusionAtlasPaths;
<<FusionAtlas`

DisplayBigraph[gd1=BigraphWithDuals[GradedBigraph[{{1}},{{1}},{{1}},{{1},{1}},{{1,0},{0,1}},{{1,0},{0,1},{0,1}}],DualData[{1},{1},{1,2},{2,1,3}]]]

DisplayBigraph[gd2=BigraphWithDuals[GradedBigraph[{{1}},{{1}},{{1}},{{1},{1}},{{0,1},{0,1}},{{0,1}}],DualData[{1},{1},{1,2},{1}]]]

GraphToString[{gd1,gd2}]

FindBigraphPairExtensionsUpToDepth[Sqrt[3+(Sqrt[3])]+(10.^(-3))][gd1,gd2,1]

{vines,weeds,{}}=FindBigraphPairExtensionsUpToDepth[Sqrt[3+(Sqrt[3])]+(10.^(-3))][gd1,gd2,∞];

DisplayBigraph/@vines

DisplayBigraph/@weeds

L=3+(Sqrt[3]);

Weeds[{gd1,gd2}]={};

tikzTree[{gd1,gd2}]

g1=gd1[[1]];
g2=gd2[[1]];

DisplayBigraph/@(g1extensions=FusionAtlas`PairOdometer`Private`FindBigraphExtensionsUpToRankJavaNoCanonicalize[Sqrt[3+(Sqrt[3])]+(10.^(-3))][g1,∞])

DisplayBigraph/@(gd1extensions=If[EvenQ[GraphDepth[g1]],
(* adding an odd layer, no new dual data *)
BigraphWithDuals[#,gd1[[2]]]&/@g1extensions,
(* adding an even layer, so add all possible dual data *)
Flatten[Function[{g},BigraphWithDuals[g,gd1[[2]]~Join~#]&/@DualDataList[RankAtDepth[g,GraphDepth[g]]]]/@g1extensions]
])

DisplayBigraph/@(g2extensions=FusionAtlas`PairOdometer`Private`FindBigraphExtensionsUpToRankJavaNoCanonicalize[Sqrt[3+(Sqrt[3])]+(10.^(-3))][g2,∞])

DisplayBigraph/@(gd2extensions=If[EvenQ[GraphDepth[g2]],
(* adding an odd layer, no new dual data *)
BigraphWithDuals[#,gd2[[2]]]&/@g2extensions,
(* adding an even layer, so add all possible dual data *)
Flatten[Function[{g},BigraphWithDuals[g,gd2[[2]]~Join~#]&/@DualDataList[RankAtDepth[g,GraphDepth[g]]]]/@g2extensions]
])

DisplayBigraph/@(pairs=Cases[Flatten[Outer[List,gd1extensions,gd2extensions],1],{h1_,h2_}/;(EvenQ[GraphDepth[h1]]∨RankAtDepth[h1,GraphDepth[h1]]==RankAtDepth[h2,GraphDepth[h2]])∧PartialOcneanuTest[h1,h2]])

GraphToString/@pairs