code: @Override
      long[] generate(long[] current, StereoEncoder encoder, int[][] graph, Suppressed suppressed) {
  
          // for the stereo perception depending on how the
          // (BasicPermutationParity) is done we need to set the value to be as
          // high (or low) as possible
          for (int i : suppressed.toArray()) {
              current[i] = Long.MAX_VALUE;
          }
  
          int n = graph.length;
          long[] next = copy(current);
  
          // buffers for including adjacent invariants
          long[] unique = new long[n];
          long[] included = new long[n];
  
          while (encoder.encode(current, next)) {
              copy(next, current);
          }
  
          for (int d = 0; d < depth; d++) {
  
              for (int v = 0; v < n; v++) {
                  next[v] = next(graph, v, current, unique, included, suppressed);
              }
  
              copy(next, current);
  
              while (encoder.encode(current, next)) {
                  copy(next, current);
              }
  
          }
  
          // zero all suppressed values so they are not combined in any molecule
          // hash
          for (int i : suppressed.toArray()) {
              current[i] = 0L;
          }
  
          return current;
      }
docs: Package-private method for generating the hash for the given molecule.
  The initial invariants are passed as to the method along with an
  adjacency list representation of the graph.
  
  @param current initial invariants
  @param graph   adjacency list representation
  @return hash codes for atoms