test_class.declarator: testGraph1
test_class.modifier: private static
test_class.original_string: private static GenericGraph<Integer> testGraph1;
test_class.type: GenericGraph<Integer>
test_class.var_name: testGraph1
test_class.declarator: testGraph2
test_class.modifier: private static
test_class.original_string: private static GenericGraph<Integer> testGraph2;
test_class.type: GenericGraph<Integer>
test_class.var_name: testGraph2
test_class.file: singa-mathematics/src/test/java/bio/singa/mathematics/algorithms/graphs/MaximumCommonSubgraphFinderTest.java
test_class.identifier: MaximumCommonSubgraphFinderTest
test_case.body: @Test
      void findMaximumCommonSubgraph() {
          MaximumCommonSubgraphFinder<GenericNode<Integer>, GenericEdge<Integer>, Vector2D, Integer, GenericGraph<Integer>>
                  mcs = new MaximumCommonSubgraphFinder<>(testGraph1, testGraph2, (n1, n2) -> true, (e1, e2) -> true);
          List<GenericGraph<Integer>> cliqueGraphs = mcs.getMaximumCliquesAsGraphs();
          assertEquals(2, cliqueGraphs.size());
      }
test_case.class_method_signature: MaximumCommonSubgraphFinderTest.findMaximumCommonSubgraph()
test_case.full_signature: @Test void findMaximumCommonSubgraph()
test_case.identifier: findMaximumCommonSubgraph
test_case.invocations: getMaximumCliquesAsGraphs assertEquals size
test_case.modifiers: @Test
test_case.parameters: ()
test_case.return: void
test_case.signature: void findMaximumCommonSubgraph()
focal_class.declarator: logger = LoggerFactory.getLogger(MaximumCommonSubgraphFinder.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(MaximumCommonSubgraphFinder.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: graph1
focal_class.modifier: private final
focal_class.original_string: private final GraphType graph1;
focal_class.type: GraphType
focal_class.var_name: graph1
focal_class.declarator: graph2
focal_class.modifier: private final
focal_class.original_string: private final GraphType graph2;
focal_class.type: GraphType
focal_class.var_name: graph2
focal_class.declarator: nodeCondition
focal_class.modifier: private final
focal_class.original_string: private final BiFunction<NodeType, NodeType, Boolean> nodeCondition;
focal_class.type: BiFunction<NodeType, NodeType, Boolean>
focal_class.var_name: nodeCondition
focal_class.declarator: edgeCondition
focal_class.modifier: private final
focal_class.original_string: private final BiFunction<EdgeType, EdgeType, Boolean> edgeCondition;
focal_class.type: BiFunction<EdgeType, EdgeType, Boolean>
focal_class.var_name: edgeCondition
focal_class.declarator: maximumCliques
focal_class.modifier: private
focal_class.original_string: private List<Set<GenericNode<Pair<NodeType>>>> maximumCliques;
focal_class.type: List<Set<GenericNode<Pair<NodeType>>>>
focal_class.var_name: maximumCliques
focal_class.file: singa-mathematics/src/main/java/bio/singa/mathematics/algorithms/graphs/MaximumCommonSubgraphFinder.java
focal_class.identifier: MaximumCommonSubgraphFinder
focal_class.class_method_signature: MaximumCommonSubgraphFinder.MaximumCommonSubgraphFinder(GraphType graph1, GraphType graph2,
                                         BiFunction<NodeType, NodeType, Boolean> nodeCondition,
                                         BiFunction<EdgeType, EdgeType, Boolean> edgeCondition)
focal_class.full_signature: public  MaximumCommonSubgraphFinder(GraphType graph1, GraphType graph2,
                                         BiFunction<NodeType, NodeType, Boolean> nodeCondition,
                                         BiFunction<EdgeType, EdgeType, Boolean> edgeCondition)
focal_class.identifier: MaximumCommonSubgraphFinder
focal_class.modifiers: public
focal_class.parameters: (GraphType graph1, GraphType graph2,
                                         BiFunction<NodeType, NodeType, Boolean> nodeCondition,
                                         BiFunction<EdgeType, EdgeType, Boolean> edgeCondition)
focal_class.signature:  MaximumCommonSubgraphFinder(GraphType graph1, GraphType graph2,
                                         BiFunction<NodeType, NodeType, Boolean> nodeCondition,
                                         BiFunction<EdgeType, EdgeType, Boolean> edgeCondition)
focal_class.class_method_signature: MaximumCommonSubgraphFinder.getMaximumCliques()
focal_class.full_signature: public List<Set<GenericNode<Pair<NodeType>>>> getMaximumCliques()
focal_class.identifier: getMaximumCliques
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: List<Set<GenericNode<Pair<NodeType>>>>
focal_class.signature: List<Set<GenericNode<Pair<NodeType>>>> getMaximumCliques()
focal_class.class_method_signature: MaximumCommonSubgraphFinder.detectMaximumCliques(GraphType graph1, GraphType graph2)
focal_class.full_signature: private void detectMaximumCliques(GraphType graph1, GraphType graph2)
focal_class.identifier: detectMaximumCliques
focal_class.modifiers: private
focal_class.parameters: (GraphType graph1, GraphType graph2)
focal_class.return: void
focal_class.signature: void detectMaximumCliques(GraphType graph1, GraphType graph2)
focal_class.class_method_signature: MaximumCommonSubgraphFinder.getMaximumCliquesAsGraphs()
focal_class.full_signature: public List<GraphType> getMaximumCliquesAsGraphs()
focal_class.identifier: getMaximumCliquesAsGraphs
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: List<GraphType>
focal_class.signature: List<GraphType> getMaximumCliquesAsGraphs()
focal_method.body: public List<GraphType> getMaximumCliquesAsGraphs() {
          if (maximumCliques.isEmpty()) {
              throw new NoSuchElementException("no maximum cliques found between graphs " + graph1 + " and " + graph2);
          } else {
              ArrayList<GraphType> cliqueGraphs = new ArrayList<>();
              for (Set<GenericNode<Pair<NodeType>>> maximumClique : maximumCliques) {
                  GraphType cliqueGraph = (GraphType) graph1.getCopy();
                  Set<IdentifierType> cliqueIdentifiers = maximumClique.stream()
                          .map(GenericNode::getContent)
                          .map(Pair::getFirst)
                          .map(NodeType::getIdentifier)
                          .collect(Collectors.toSet());
                  Set<NodeType> nodesToDelete = cliqueGraph.getNodes().stream()
                          .filter(node -> !cliqueIdentifiers.contains(node.getIdentifier()))
                          .collect(Collectors.toSet());
                  nodesToDelete.forEach(cliqueGraph::removeNode);
                  cliqueGraphs.add(cliqueGraph);
              }
              return cliqueGraphs;
          }
      }
focal_method.class_method_signature: MaximumCommonSubgraphFinder.getMaximumCliquesAsGraphs()
focal_method.full_signature: public List<GraphType> getMaximumCliquesAsGraphs()
focal_method.identifier: getMaximumCliquesAsGraphs
focal_method.invocations: isEmpty getCopy collect map map map stream toSet collect filter stream getNodes contains getIdentifier toSet forEach add
focal_method.modifiers: public
focal_method.parameters: ()
focal_method.return: List<GraphType>
focal_method.signature: List<GraphType> getMaximumCliquesAsGraphs()