From 4c6ffdfddaab09778cac13fcc44a942f3451e6bc Mon Sep 17 00:00:00 2001 From: Graham Smith Date: Fri, 8 Jan 2021 10:59:27 -0700 Subject: [PATCH 1/2] Resolve overwritten Base.similar from OffsetArrays --- src/abstractarray.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/abstractarray.jl b/src/abstractarray.jl index e5ac05c8..b9c2ae3c 100644 --- a/src/abstractarray.jl +++ b/src/abstractarray.jl @@ -175,7 +175,7 @@ function Base.similar(A::AxisArray) return unsafe_reconstruct(A, p; axes=map(assign_indices, axes(A), axes(p))) end -function Base.similar(::Type{T}, shape::Tuple{DimOrAxes,Vararg{DimOrAxes}}) where {T<:AbstractArray} +function Base.similar(::Type{T}, shape::S) where {T<:AbstractArray, DoA<:DimOrAxes, S<:Tuple{DoA,Vararg{DoA}}} p = similar(T, Base.to_shape(shape)) axs = map((key, axis) -> compose_axis(key, axis, NoChecks), shape, axes(p)) return AxisArray{eltype(p),ndims(p),typeof(p),typeof(axs)}(p, axs; checks=NoChecks) From d8c5af866384aac62866a85116fe65658ad47db3 Mon Sep 17 00:00:00 2001 From: Graham Smith Date: Fri, 8 Jan 2021 15:21:20 -0700 Subject: [PATCH 2/2] Fix `similar` stack overflow --- src/abstract_axis.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/abstract_axis.jl b/src/abstract_axis.jl index c68deb8e..b94efeab 100644 --- a/src/abstract_axis.jl +++ b/src/abstract_axis.jl @@ -63,6 +63,7 @@ Base.pairs(axis::AbstractAxis) = Base.Iterators.Pairs(a, keys(axis)) # This is required for performing `similar` on arrays Base.to_shape(axis::AbstractAxis) = length(axis) +Base.to_shape(r::IdentityUnitRange) = length(r) Base.haskey(axis::AbstractAxis, key) = key in keys(axis)