Skip to content

Commit 8b9a0c1

Browse files
authored
Standardise names to factorize_layout, inv_layout, etc. and use inv_l… (#236)
* Standardise names to factorize_layout, inv_layout, etc. and use inv_layout with Triangular * tests pass * Update factorizations.jl * Update factorizations.jl
1 parent 3024074 commit 8b9a0c1

6 files changed

+83
-56
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ArrayLayouts"
22
uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
33
authors = ["Sheehan Olver <solver@mac.com>"]
4-
version = "1.9.4"
4+
version = "1.10"
55

66
[deps]
77
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"

ext/ArrayLayoutsSparseArraysExt.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module ArrayLayoutsSparseArraysExt
22

33
using ArrayLayouts
4-
using ArrayLayouts: _copyto!
4+
using ArrayLayouts: copyto!_layout
55
using SparseArrays
66
# Specifying the full namespace is necessary because of https://github.com/JuliaLang/julia/issues/48533
77
# See https://github.com/JuliaStats/LogExpFunctions.jl/pull/63
@@ -11,10 +11,10 @@ import Base: copyto!
1111

1212
# ambiguity from sparsematrix.jl
1313
copyto!(dest::LayoutMatrix, src::SparseArrays.AbstractSparseMatrixCSC) =
14-
_copyto!(dest, src)
14+
copyto!_layout(dest, src)
1515

1616
copyto!(dest::SubArray{<:Any,2,<:LayoutMatrix}, src::SparseArrays.AbstractSparseMatrixCSC) =
17-
_copyto!(dest, src)
17+
copyto!_layout(dest, src)
1818

1919
@inline LinearAlgebra.dot(a::LayoutArray{<:Number}, b::SparseArrays.SparseVectorUnion{<:Number}) =
2020
ArrayLayouts.dot(a,b)

src/ArrayLayouts.jl

+18-16
Original file line numberDiff line numberDiff line change
@@ -256,27 +256,29 @@ end
256256
\(A::Diagonal, B::Diagonal{<:Any,<:LayoutVector}) = ldiv(A, B)
257257

258258

259-
_copyto!(_, _, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N} =
259+
copyto!_layout(_, _, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N} =
260260
invoke(copyto!, Tuple{AbstractArray{T,N},AbstractArray{V,N}}, dest, src)
261261

262+
const _copyto! = copyto!_layout # TODO: deprecate
262263

263-
_copyto!(dest, src) = _copyto!(MemoryLayout(dest), MemoryLayout(src), dest, src)
264-
copyto!(dest::LayoutArray{<:Any,N}, src::LayoutArray{<:Any,N}) where N = _copyto!(dest, src)
265-
copyto!(dest::AbstractArray{<:Any,N}, src::LayoutArray{<:Any,N}) where N = _copyto!(dest, src)
266-
copyto!(dest::LayoutArray{<:Any,N}, src::AbstractArray{<:Any,N}) where N = _copyto!(dest, src)
267264

268-
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::SubArray{<:Any,N,<:LayoutArray}) where N = _copyto!(dest, src)
269-
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::LayoutArray{<:Any,N}) where N = _copyto!(dest, src)
270-
copyto!(dest::LayoutArray{<:Any,N}, src::SubArray{<:Any,N,<:LayoutArray}) where N = _copyto!(dest, src)
271-
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::AbstractArray{<:Any,N}) where N = _copyto!(dest, src)
272-
copyto!(dest::AbstractArray{<:Any,N}, src::SubArray{<:Any,N,<:LayoutArray}) where N = _copyto!(dest, src)
265+
copyto!_layout(dest, src) = copyto!_layout(MemoryLayout(dest), MemoryLayout(src), dest, src)
266+
copyto!(dest::LayoutArray{<:Any,N}, src::LayoutArray{<:Any,N}) where N = copyto!_layout(dest, src)
267+
copyto!(dest::AbstractArray{<:Any,N}, src::LayoutArray{<:Any,N}) where N = copyto!_layout(dest, src)
268+
copyto!(dest::LayoutArray{<:Any,N}, src::AbstractArray{<:Any,N}) where N = copyto!_layout(dest, src)
273269

274-
copyto!(dest::LayoutMatrix, src::AdjOrTrans{<:Any,<:LayoutArray}) = _copyto!(dest, src)
275-
copyto!(dest::LayoutMatrix, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = _copyto!(dest, src)
276-
copyto!(dest::AbstractMatrix, src::AdjOrTrans{<:Any,<:LayoutArray}) = _copyto!(dest, src)
277-
copyto!(dest::SubArray{<:Any,2,<:LayoutArray}, src::AdjOrTrans{<:Any,<:LayoutArray}) = _copyto!(dest, src)
278-
copyto!(dest::SubArray{<:Any,2,<:LayoutMatrix}, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = _copyto!(dest, src)
279-
copyto!(dest::AbstractMatrix, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = _copyto!(dest, src)
270+
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::SubArray{<:Any,N,<:LayoutArray}) where N = copyto!_layout(dest, src)
271+
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::LayoutArray{<:Any,N}) where N = copyto!_layout(dest, src)
272+
copyto!(dest::LayoutArray{<:Any,N}, src::SubArray{<:Any,N,<:LayoutArray}) where N = copyto!_layout(dest, src)
273+
copyto!(dest::SubArray{<:Any,N,<:LayoutArray}, src::AbstractArray{<:Any,N}) where N = copyto!_layout(dest, src)
274+
copyto!(dest::AbstractArray{<:Any,N}, src::SubArray{<:Any,N,<:LayoutArray}) where N = copyto!_layout(dest, src)
275+
276+
copyto!(dest::LayoutMatrix, src::AdjOrTrans{<:Any,<:LayoutArray}) = copyto!_layout(dest, src)
277+
copyto!(dest::LayoutMatrix, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = copyto!_layout(dest, src)
278+
copyto!(dest::AbstractMatrix, src::AdjOrTrans{<:Any,<:LayoutArray}) = copyto!_layout(dest, src)
279+
copyto!(dest::SubArray{<:Any,2,<:LayoutArray}, src::AdjOrTrans{<:Any,<:LayoutArray}) = copyto!_layout(dest, src)
280+
copyto!(dest::SubArray{<:Any,2,<:LayoutMatrix}, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = copyto!_layout(dest, src)
281+
copyto!(dest::AbstractMatrix, src::SubArray{<:Any,2,<:AdjOrTrans{<:Any,<:LayoutArray}}) = copyto!_layout(dest, src)
280282
if isdefined(LinearAlgebra, :copymutable_oftype)
281283
LinearAlgebra.copymutable_oftype(A::Union{LayoutArray,Symmetric{<:Any,<:LayoutMatrix},Hermitian{<:Any,<:LayoutMatrix},
282284
UpperOrLowerTriangular{<:Any,<:LayoutMatrix},

src/factorizations.jl

+56-31
Original file line numberDiff line numberDiff line change
@@ -306,21 +306,25 @@ function materialize!(M::Rmul{<:Any,<:AdjQRPackedQLayout})
306306
end
307307

308308

309-
__qr(layout, lengths, A; kwds...) = invoke(qr, Tuple{AbstractMatrix{eltype(A)}}, A; kwds...)
310-
_qr(layout, axes, A; kwds...) = __qr(layout, map(length, axes), A; kwds...)
311-
_qr(layout, axes, A, pivot::P; kwds...) where P = invoke(qr, Tuple{AbstractMatrix{eltype(A)},P}, A, pivot; kwds...)
312-
_qr!(layout, axes, A, args...; kwds...) = error(LazyString("Overload _qr!(::", typeof(layout), ", axes, A)"))
313-
_lu(layout, axes, A; kwds...) = invoke(lu, Tuple{AbstractMatrix{eltype(A)}}, A; kwds...)
314-
_lu(layout, axes, A, pivot::P; kwds...) where P = invoke(lu, Tuple{AbstractMatrix{eltype(A)},P}, A, pivot; kwds...)
315-
_lu!(layout, axes, A, args...; kwds...) = error(LazyString("Overload _lu!(::", typeof(layout), ", axes, A)"))
316-
_cholesky(layout, axes, A, ::CNoPivot=CNoPivot(); check::Bool = true) = cholesky!(cholcopy(A); check = check)
317-
_cholesky(layout, axes, A, ::CRowMaximum; tol = 0.0, check::Bool = true) = cholesky!(cholcopy(A), CRowMaximum(); tol = tol, check = check)
318-
_factorize(layout, axes, A) = qr(A) # Default to QR
319-
320-
321-
_factorize(::AbstractStridedLayout, axes, A) = lu(A)
309+
310+
_qr_layout(layout, lengths, A; kwds...) = invoke(qr, Tuple{AbstractMatrix{eltype(A)}}, A; kwds...)
311+
qr_layout(layout, axes, A; kwds...) = _qr_layout(layout, map(length, axes), A; kwds...)
312+
qr_layout(layout, axes, A, pivot::P; kwds...) where P = invoke(qr, Tuple{AbstractMatrix{eltype(A)},P}, A, pivot; kwds...)
313+
qr!_layout(layout, axes, A, args...; kwds...) = error(LazyString("Overload qr!_layout(::", typeof(layout), ", axes, A)"))
314+
lu_layout(layout, axes, A; kwds...) = invoke(lu, Tuple{AbstractMatrix{eltype(A)}}, A; kwds...)
315+
lu_layout(layout, axes, A, pivot::P; kwds...) where P = invoke(lu, Tuple{AbstractMatrix{eltype(A)},P}, A, pivot; kwds...)
316+
lu!_layout(layout, axes, A, args...; kwds...) = error(LazyString("Overload lu!_layout(::", typeof(layout), ", axes, A)"))
317+
cholesky_layout(layout, axes, A, ::CNoPivot=CNoPivot(); check::Bool = true) = cholesky!(cholcopy(A); check = check)
318+
cholesky_layout(layout, axes, A, ::CRowMaximum; tol = 0.0, check::Bool = true) = cholesky!(cholcopy(A), CRowMaximum(); tol = tol, check = check)
319+
320+
321+
322+
factorize_layout(layout, axes, A) = qr(A) # Default to QR
323+
324+
325+
factorize_layout(::AbstractStridedLayout, axes, A) = lu(A)
322326
if VERSION < v"1.8-"
323-
function _lu!(::AbstractColumnMajor, axes, A::AbstractMatrix{T}, pivot::Union{NoPivot, RowMaximum} = RowMaximum();
327+
function lu!_layout(::AbstractColumnMajor, axes, A::AbstractMatrix{T}, pivot::Union{NoPivot, RowMaximum} = RowMaximum();
324328
check::Bool = true) where T<:BlasFloat
325329
if pivot === NoPivot()
326330
return generic_lufact!(A, pivot; check = check)
@@ -330,7 +334,7 @@ if VERSION < v"1.8-"
330334
return LU{T,typeof(A)}(lpt[1], lpt[2], lpt[3])
331335
end
332336
else
333-
function _lu!(::AbstractColumnMajor, axes, A::AbstractMatrix{T}, pivot::Union{NoPivot, RowMaximum} = RowMaximum();
337+
function lu!_layout(::AbstractColumnMajor, axes, A::AbstractMatrix{T}, pivot::Union{NoPivot, RowMaximum} = RowMaximum();
334338
check::Bool = true) where T<:BlasFloat
335339
if pivot === NoPivot()
336340
return generic_lufact!(A, pivot; check = check)
@@ -375,13 +379,13 @@ end
375379

376380
_chol!(_, A, UL) = LinearAlgebra._chol!(A, UL)
377381

378-
function _cholesky!(layout, axes, A::RealHermSymComplexHerm, ::CNoPivot; check::Bool = true)
382+
function cholesky!_layout(layout, axes, A::RealHermSymComplexHerm, ::CNoPivot; check::Bool = true)
379383
C, info = _chol!(layout, A.data, A.uplo == 'U' ? UpperTriangular : LowerTriangular)
380384
check && LinearAlgebra.checkpositivedefinite(info)
381385
return Cholesky(C.data, A.uplo, info)
382386
end
383387

384-
function _cholesky!(::SymmetricLayout{<:AbstractColumnMajor}, axes, A::AbstractMatrix{<:BlasReal},
388+
function cholesky!_layout(::SymmetricLayout{<:AbstractColumnMajor}, axes, A::AbstractMatrix{<:BlasReal},
385389
::CRowMaximum; tol = 0.0, check::Bool = true)
386390
AA, piv, rank, info = LAPACK.pstrf!(A.uplo, A.data, tol)
387391
if VERSION < v"1.8"
@@ -401,7 +405,7 @@ function _inv_eye(A, ::Type{T}, (rows,cols)) where T
401405
dest
402406
end
403407

404-
function _inv(layout, axes, A)
408+
function inv_layout(layout, axes, A)
405409
T = eltype(A)
406410
(rows,cols) = axes
407411
n = checksquare(A)
@@ -414,17 +418,17 @@ end
414418

415419
macro _layoutfactorizations(Typ)
416420
esc(quote
417-
LinearAlgebra.cholesky(A::$Typ, v::ArrayLayouts.CNoPivot = ArrayLayouts.CNoPivot(); kwds...) = ArrayLayouts._cholesky(ArrayLayouts.MemoryLayout(A), axes(A), A, v; kwds...)
418-
LinearAlgebra.cholesky(A::$Typ, v::ArrayLayouts.CRowMaximum; kwds...) = ArrayLayouts._cholesky(ArrayLayouts.MemoryLayout(A), axes(A), A, v; kwds...)
419-
LinearAlgebra.cholesky!(A::LinearAlgebra.RealHermSymComplexHerm{<:Real,<:$Typ}, v::ArrayLayouts.CNoPivot = ArrayLayouts.CNoPivot(); check::Bool = true) = ArrayLayouts._cholesky!(ArrayLayouts.MemoryLayout(A), axes(A), A, v; check=check)
420-
LinearAlgebra.cholesky!(A::LinearAlgebra.RealHermSymComplexHerm{<:Real,<:$Typ}, v::ArrayLayouts.CRowMaximum; check::Bool = true, tol = 0.0) = ArrayLayouts._cholesky!(ArrayLayouts.MemoryLayout(A), axes(A), A, v; check=check, tol=tol)
421-
LinearAlgebra.qr(A::$Typ, args...; kwds...) = ArrayLayouts._qr(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
422-
LinearAlgebra.qr!(A::$Typ, args...; kwds...) = ArrayLayouts._qr!(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
423-
LinearAlgebra.lu(A::$Typ, pivot::Union{ArrayLayouts.NoPivot,ArrayLayouts.RowMaximum}; kwds...) = ArrayLayouts._lu(ArrayLayouts.MemoryLayout(A), axes(A), A, pivot; kwds...)
424-
LinearAlgebra.lu(A::$Typ{T}; kwds...) where T = ArrayLayouts._lu(ArrayLayouts.MemoryLayout(A), axes(A), A; kwds...)
425-
LinearAlgebra.lu!(A::$Typ, args...; kwds...) = ArrayLayouts._lu!(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
426-
LinearAlgebra.factorize(A::$Typ) = ArrayLayouts._factorize(ArrayLayouts.MemoryLayout(A), axes(A), A)
427-
Base.inv(A::$Typ) = ArrayLayouts._inv(ArrayLayouts.MemoryLayout(A), axes(A), A)
421+
LinearAlgebra.cholesky(A::$Typ, v::ArrayLayouts.CNoPivot = ArrayLayouts.CNoPivot(); kwds...) = ArrayLayouts.cholesky_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, v; kwds...)
422+
LinearAlgebra.cholesky(A::$Typ, v::ArrayLayouts.CRowMaximum; kwds...) = ArrayLayouts.cholesky_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, v; kwds...)
423+
LinearAlgebra.cholesky!(A::LinearAlgebra.RealHermSymComplexHerm{<:Real,<:$Typ}, v::ArrayLayouts.CNoPivot = ArrayLayouts.CNoPivot(); check::Bool = true) = ArrayLayouts.cholesky!_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, v; check=check)
424+
LinearAlgebra.cholesky!(A::LinearAlgebra.RealHermSymComplexHerm{<:Real,<:$Typ}, v::ArrayLayouts.CRowMaximum; check::Bool = true, tol = 0.0) = ArrayLayouts.cholesky!_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, v; check=check, tol=tol)
425+
LinearAlgebra.qr(A::$Typ, args...; kwds...) = ArrayLayouts.qr_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
426+
LinearAlgebra.qr!(A::$Typ, args...; kwds...) = ArrayLayouts.qr!_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
427+
LinearAlgebra.lu(A::$Typ, pivot::Union{ArrayLayouts.NoPivot,ArrayLayouts.RowMaximum}; kwds...) = ArrayLayouts.lu_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, pivot; kwds...)
428+
LinearAlgebra.lu(A::$Typ{T}; kwds...) where T = ArrayLayouts.lu_layout(ArrayLayouts.MemoryLayout(A), axes(A), A; kwds...)
429+
LinearAlgebra.lu!(A::$Typ, args...; kwds...) = ArrayLayouts.lu!_layout(ArrayLayouts.MemoryLayout(A), axes(A), A, args...; kwds...)
430+
LinearAlgebra.factorize(A::$Typ) = ArrayLayouts.factorize_layout(ArrayLayouts.MemoryLayout(A), axes(A), A)
431+
Base.inv(A::$Typ) = ArrayLayouts.inv_layout(ArrayLayouts.MemoryLayout(A), axes(A), A)
428432
LinearAlgebra.ldiv!(L::LU{<:Any,<:$Typ}, B) = ArrayLayouts.ldiv!(L, B)
429433
LinearAlgebra.ldiv!(L::LU{<:Any,<:$Typ}, B::$Typ) = ArrayLayouts.ldiv!(L, B)
430434
end)
@@ -434,11 +438,20 @@ macro layoutfactorizations(Typ)
434438
esc(quote
435439
ArrayLayouts.@_layoutfactorizations $Typ
436440
ArrayLayouts.@_layoutfactorizations SubArray{<:Any,2,<:$Typ}
437-
ArrayLayouts.@_layoutfactorizations LinearAlgebra.RealHermSymComplexHerm{<:Real,<:$Typ}
438-
ArrayLayouts.@_layoutfactorizations LinearAlgebra.RealHermSymComplexHerm{<:Real,<:SubArray{<:Real,2,<:$Typ}}
441+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.RealHermSymComplexHerm{<:Real,<:$Typ}
442+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.RealHermSymComplexHerm{<:Real,<:SubArray{<:Real,2,<:$Typ}}
443+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.LowerTriangular{<:Any,<:$Typ}
444+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.LowerTriangular{<:Any,<:SubArray{<:Any,2,<:$Typ}}
445+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UpperTriangular{<:Any,<:$Typ}
446+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UpperTriangular{<:Any,<:SubArray{<:Any,2,<:$Typ}}
447+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UnitLowerTriangular{<:Any,<:$Typ}
448+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UnitLowerTriangular{<:Any,<:SubArray{<:Any,2,<:$Typ}}
449+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UnitUpperTriangular{<:Any,<:$Typ}
450+
ArrayLayouts.@_layoutfactorizations ArrayLayouts.UnitUpperTriangular{<:Any,<:SubArray{<:Any,2,<:$Typ}}
439451
end)
440452
end
441453

454+
442455
function ldiv!(C::Cholesky{<:Any,<:AbstractMatrix}, B::LayoutArray)
443456
if C.uplo == 'L'
444457
return ldiv!(adjoint(LowerTriangular(C.factors)), ldiv!(LowerTriangular(C.factors), B))
@@ -449,3 +462,15 @@ end
449462

450463
LinearAlgebra.ldiv!(L::LU{<:Any,<:LayoutMatrix}, B::LayoutVector) = ArrayLayouts.ldiv!(L, B)
451464

465+
466+
467+
# for back compatibility, TODO: deprecate
468+
const _factorize = factorize_layout
469+
const __qr = _qr_layout
470+
const _qr = qr_layout
471+
const _qr! = qr!_layout
472+
const _lu = lu_layout
473+
const _cholesky = cholesky_layout
474+
const _cholesky! = cholesky!_layout
475+
const _lu! = lu!_layout
476+
const _inv = inv_layout

src/memorylayout.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,8 @@ sub_materialize(::DualLayout{ML}, A::AbstractMatrix{<:Real}) where ML = sub_mate
307307
sub_materialize(::DualLayout{ML}, A::AbstractMatrix) where ML<:ConjLayout = sub_materialize(adjointlayout(eltype(A), ML()), _dual_adjoint(A))'
308308
sub_materialize(::DualLayout{ML}, A::AbstractMatrix) where ML = transpose(sub_materialize(transposelayout(ML()), _dual_transpose(A)))
309309

310-
_copyto!(dlay, ::DualLayout{ML}, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N,ML} =
311-
_copyto!(dlay, ML(), dest, src)
310+
copyto!_layout(dlay, ::DualLayout{ML}, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N,ML} =
311+
copyto!_layout(dlay, ML(), dest, src)
312312

313313
# Layouts of PermutedDimsArrays
314314
"""
@@ -541,7 +541,7 @@ reshapedlayout(L::AbstractFillLayout, _) = L
541541
adjointlayout(::Type, L::AbstractFillLayout) = L
542542
transposelayout(L::AbstractFillLayout) = L
543543

544-
_copyto!(_, ::AbstractFillLayout, dest::AbstractArray{<:Any,N}, src::AbstractArray{<:Any,N}) where N =
544+
copyto!_layout(_, ::AbstractFillLayout, dest::AbstractArray{<:Any,N}, src::AbstractArray{<:Any,N}) where N =
545545
fill!(dest, getindex_value(src))
546546

547547
sub_materialize(::AbstractFillLayout, V, ax) = Fill(getindex_value(V), ax)

test/test_layouts.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ struct FooNumber <: Number end
9999
@test layout_getindex((a .+ im)',:,1:3) == (a .+ im)[1:3]'
100100
@test layout_getindex(transpose(a .+ im),:,1:3) == transpose((a .+ im)[1:3])
101101

102-
@test ArrayLayouts._copyto!(similar(a'), a') == a'
102+
@test ArrayLayouts.copyto!_layout(similar(a'), a') == a'
103103

104104
@test mul(randn(5)', Diagonal(1:5)) isa Adjoint
105105
@test mul(transpose(randn(5)), Diagonal(1:5)) isa Transpose
@@ -338,7 +338,7 @@ struct FooNumber <: Number end
338338
# as there was no strong need to delete their support
339339
v = SubArray(Fill(1,10),(1:3,))
340340
@test ArrayLayouts.sub_materialize(v) Fill(1,3)
341-
@test ArrayLayouts._copyto!(Vector{Float64}(undef,3), v) == ones(3)
341+
@test ArrayLayouts.copyto!_layout(Vector{Float64}(undef,3), v) == ones(3)
342342

343343
T = Tridiagonal(Fill(1,10), Fill(2,11), Fill(3,10))
344344
@test MemoryLayout(UpperTriangular(T)) isa BidiagonalLayout{FillLayout,FillLayout}

0 commit comments

Comments
 (0)