docs: public static Pipe[] pair(ZObject[] parents, int[] hwms, boolean[] conflates)
      {
          Pipe[] pipes = new Pipe[2];
          //   Creates two pipe objects. These objects are connected by two ypipes,
          //   each to pass messages in one direction.
  
          YPipeBase<Msg> upipe1 = conflates[0] ? new YPipeConflate<>()
                  : new YPipe<Msg>(Config.MESSAGE_PIPE_GRANULARITY.getValue());
          YPipeBase<Msg> upipe2 = conflates[1] ? new YPipeConflate<>()
                  : new YPipe<Msg>(Config.MESSAGE_PIPE_GRANULARITY.getValue());
  
          pipes[0] = new Pipe(parents[0], upipe1, upipe2, hwms[1], hwms[0], conflates[0]);
          pipes[1] = new Pipe(parents[1], upipe2, upipe1, hwms[0], hwms[1], conflates[1]);
  
          pipes[0].setPeer(pipes[1]);
          pipes[1].setPeer(pipes[0]);
  
          return pipes;
      }