def p(*delta, **metadata)
      delta = delta.compact.empty? ? @delta : delta
      Pattern.new(@source, delta: delta, size: @size, **@metadata.merge(metadata))
    end
def p(*delta, **metadata)
      delta = delta.compact.empty? ? @delta : delta
      Pattern.new(@source, delta: delta, size: @size, **@metadata.merge(metadata))
    end
Returns a new Pattern with the same +source+, but with +delta+ overriden
 and +metadata+ merged.

 @param delta [Array<Numeric>, Pattern<Numeric>, Numeric]
 @param metadata [Hash]
 @return [Pattern]