@Override
	public NeighborhoodPair generate(FunctionNode srcRoot, FunctionNode destRoot) {
		Namespace srcNamespace = getNamespace(srcRoot, sourceNodes);
		Namespace destNamespace = getNamespace(destRoot, destNodes);
		if (srcNamespace == null || destNamespace == null) {
			NeighborhoodPair pair = new NeighborhoodPair();
			pair.srcNeighbors = FunctionNode.neigborhoodAllocate();
			pair.destNeighbors = FunctionNode.neigborhoodAllocate();
			return pair;		// Empty pair
		}
		Long srcNamespaceKey = srcNamespace.getID();
		Long destNamespaceKey = destNamespace.getID();
		NeighborhoodPair pair = findPair(srcNamespaceKey, destNamespaceKey);
		if (pair == null) {
			pair = new NeighborhoodPair();
			pair.srcNeighbors =
				buildNeighborhood(srcNamespace, srcNamespaceKey, sourceNodes, sourceSets);
			pair.destNeighbors =
				buildNeighborhood(destNamespace, destNamespaceKey, destNodes, destSets);
			cachePair(srcNamespaceKey, destNamespaceKey, pair);
		}
		if (!pair.isFilledOut) {
			if (fillOutPairs(pair, 10000)) {
				pair.isFilledOut = true;
			}
		}
		return pair;
	}
A neighborhood generator that, for a given function, generates all functions
in the same namespace.  For efficiency, it caches the namespace sets it generates.
Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/NamespaceNeighborhood.java