Use even to tweak length of make_steps output

If `even` in false, `make_steps` returns an odd-length (2n-1) Vector as
it did before.  If even is `true`, `make_steps` now returns an
even-length (2n) Vector whose first (2n-1) elements are the same as
before and whose final element is the same as the final element of the
input Vector.
This commit is contained in:
David MacMahon 2021-03-24 20:21:12 -07:00
parent 0508d05299
commit 10fa36cdd9

View File

@ -185,13 +185,14 @@ make_steps(x, st, even) = x
function make_steps(x::AbstractArray, st, even) function make_steps(x::AbstractArray, st, even)
n = length(x) n = length(x)
n == 0 && return zeros(0) n == 0 && return zeros(0)
newx = zeros(2n - 1) newx = zeros(2n - (even ? 0 : 1))
newx[1] = x[1] newx[1] = x[1]
for i = 2:n for i = 2:n
idx = 2i - 1 idx = 2i - 1
newx[idx] = x[i] newx[idx] = x[i]
newx[idx - 1] = x[st == :pre ? i : i - 1] newx[idx - 1] = x[st == :pre ? i : i - 1]
end end
even && (newx[end] = x[end])
return newx return newx
end end
make_steps(t::Tuple, st, even) = Tuple(make_steps(ti, st, even) for ti in t) make_steps(t::Tuple, st, even) = Tuple(make_steps(ti, st, even) for ti in t)