I have a function coded for “normal” `1:n`

axes that

- takes a matrix,
- does some manipulation, including slices, LU, etc,
- gets a vector.

I want to generalize this to work with arrays of custom indexes (eg `OffsetArray`

), with the following in mind: it should only work for matrices which have the same `axes`

along both dimensions, and then use this to “wrap” the resulting vector. I just don’t know how to generalize this — the trick that I am missing is that in general I don’t know the constructor for the general array type.

Perhaps I should use a modifying version of `op`

with `similar`

? But then I would have to calculate result types.

M(W)E:

```
using LinearAlgebra, OffsetArrays
op_internal(A::AbstractMatrix) = normalize(vcat(A[end, 1:(end-1)], one(eltype(A))), 1)
function op(A)
if Base.has_offset_axes(A)
axes(A, 1) == axes(A, 2) || error("matrix not square")
## FIXME --- how to extract A as a matrix for op_internal, then wrap the result?
else
op_internal(A)
end
end
O = ones(3, 3) .* 2
op(O) # works
# below: missing code, want OffsetArray([0.4, 0.4, 0.2], 2:4)
op(OffsetArray(O, 2:4, 2:4))
```