code: public static Iterable<MutableIntTuple> wrappingIterable(
          IntTuple bounds, final Iterable<? extends MutableIntTuple> delegate)
      {
          Objects.requireNonNull(delegate, "The delegate is null");
          IntTuple localBounds = IntTuples.copy(bounds);
          return () -> IntTupleIterators.wrappingIteratorInternal(
              localBounds, delegate.iterator());
      }
docs: Creates an iterable from the given delegate that creates iterators
  that return the {@link IntTuple}s created by the iterators of the
  given delegate, wrapping at the given bounds.<br>
  <br>
  <b>Note:</b> The caller is responsible for making sure that
  the tuples returned by the given delegate have the same
  {@link Tuple#getSize()} as the given bounds. This method can
  not check this internally. If the sizes are different, the
  behavior of the returned iterable is unspecified.
  
  @param bounds The bounds. A copy of this tuple will be stored internally.
  @param delegate The delegate
  @return The iterable