@@ -5,6 +5,8 @@ using ConstructionBase: constructorof
55using DiskArrays: DiskArrays, AbstractDiskArray, Unchunked, readblock!, writeblock!
66using Serialization: deserialize, serialize
77
8+ memory (a) = a
9+
810#
911# AbstractSerializedArray
1012#
@@ -13,6 +15,9 @@ abstract type AbstractSerializedArray{T,N} <: AbstractDiskArray{T,N} end
1315const AbstractSerializedMatrix{T} = AbstractSerializedArray{T,2 }
1416const AbstractSerializedVector{T} = AbstractSerializedArray{T,1 }
1517
18+ memory (a:: AbstractSerializedArray ) = copy (a)
19+ disk (a:: AbstractSerializedArray ) = a
20+
1621function _copyto_write! (dst, src)
1722 writeblock! (dst, src, axes (src)... )
1823 return dst
@@ -30,11 +35,11 @@ function Base.copyto!(dst::AbstractArray, src::AbstractSerializedArray)
3035end
3136# Fix ambiguity error.
3237function Base. copyto! (dst:: AbstractSerializedArray , src:: AbstractSerializedArray )
33- return copyto! (dst, copy (src))
38+ return copyto! (dst, memory (src))
3439end
3540# Fix ambiguity error.
3641function Base. copyto! (dst:: AbstractDiskArray , src:: AbstractSerializedArray )
37- return copyto! (dst, copy (src))
42+ return copyto! (dst, memory (src))
3843end
3944# Fix ambiguity error.
4045function Base. copyto! (dst:: AbstractSerializedArray , src:: AbstractDiskArray )
@@ -45,26 +50,28 @@ function Base.copyto!(dst::PermutedDimsArray, src::AbstractSerializedArray)
4550 return _copyto_read! (dst, src)
4651end
4752
53+ equals_serialized (a1, a2) = memory (a1) == memory (a2)
54+
4855function Base.:(== )(a1:: AbstractSerializedArray , a2:: AbstractSerializedArray )
49- return copy (a1) == copy ( a2)
56+ return equals_serialized (a1, a2)
5057end
5158function Base.:(== )(a1:: AbstractArray , a2:: AbstractSerializedArray )
52- return a1 == copy ( a2)
59+ return equals_serialized (a1, a2)
5360end
5461function Base.:(== )(a1:: AbstractSerializedArray , a2:: AbstractArray )
55- return copy (a1) == a2
62+ return equals_serialized (a1, a2)
5663end
5764
5865# # These cause too many ambiguity errors, try bringing them back.
5966# function Base.convert(arrayt::Type{<:AbstractSerializedArray}, a::AbstractArray)
6067# return arrayt(a)
6168# end
6269# function Base.convert(arrayt::Type{<:AbstractArray}, a::AbstractSerializedArray)
63- # return convert(arrayt, copy (a))
70+ # return convert(arrayt, memory (a))
6471# end
6572# # Fixes ambiguity error.
6673# function Base.convert(arrayt::Type{<:Array}, a::AbstractSerializedArray)
67- # return convert(arrayt, copy (a))
74+ # return convert(arrayt, memory (a))
6875# end
6976
7077#
@@ -79,6 +86,8 @@ file(a::SerializedArray) = getfield(a, :file)
7986Base. axes (a:: SerializedArray ) = getfield (a, :axes )
8087arraytype (a:: SerializedArray{<:Any,<:Any,A} ) where {A} = A
8188
89+ disk (a:: AbstractArray ) = SerializedArray (a)
90+
8291function SerializedArray (file:: String , a:: AbstractArray )
8392 serialize (file, a)
8493 ax = axes (a)
@@ -114,10 +123,10 @@ function DiskArrays.readblock!(
114123 a:: SerializedArray{<:Any,N} , aout, i:: Vararg{AbstractUnitRange,N}
115124) where {N}
116125 if i == axes (a)
117- aout .= copy (a)
126+ aout .= memory (a)
118127 return a
119128 end
120- aout .= @view copy (a)[i... ]
129+ aout .= @view memory (a)[i... ]
121130 return a
122131end
123132function DiskArrays. writeblock! (
@@ -127,7 +136,7 @@ function DiskArrays.writeblock!(
127136 serialize (file (a), ain)
128137 return a
129138 end
130- a′ = copy (a)
139+ a′ = memory (a)
131140 a′[i... ] = ain
132141 serialize (file (a), a′)
133142 return a
@@ -171,7 +180,7 @@ function Base.similar(a::PermutedSerializedArray, elt::Type, dims::Tuple{Vararg{
171180end
172181
173182function materialize (a:: PermutedSerializedArray )
174- return PermutedDimsArray (copy (parent (a)), perm (a))
183+ return PermutedDimsArray (memory (parent (a)), perm (a))
175184end
176185function Base. copy (a:: PermutedSerializedArray )
177186 return copy (materialize (a))
241250# friendly on GPU. Consider special cases of strded arrays
242251# and handle with stride manipulations.
243252function Base. copy (a:: ReshapedSerializedArray{<:Any,<:Any,<:PermutedSerializedArray} )
244- a′ = reshape (copy (parent (a)), axes (a))
253+ a′ = reshape (memory (parent (a)), axes (a))
245254 return a′ isa Base. ReshapedArray ? copy (a′) : a′
246255end
247256
@@ -254,10 +263,10 @@ function DiskArrays.readblock!(
254263 a:: ReshapedSerializedArray{<:Any,N} , aout, i:: Vararg{AbstractUnitRange,N}
255264) where {N}
256265 if i == axes (a)
257- aout .= copy (a)
266+ aout .= memory (a)
258267 return a
259268 end
260- aout .= @view copy (a)[i... ]
269+ aout .= @view memory (a)[i... ]
261270 return nothing
262271end
263272function DiskArrays. writeblock! (
@@ -267,7 +276,7 @@ function DiskArrays.writeblock!(
267276 serialize (file (a), ain)
268277 return a
269278 end
270- a′ = copy (a)
279+ a′ = memory (a)
271280 a′[i... ] = ain
272281 serialize (file (a), a′)
273282 return nothing
@@ -307,17 +316,17 @@ end
307316DiskArrays. haschunks (a:: SubSerializedArray ) = Unchunked ()
308317function DiskArrays. readblock! (a:: SubSerializedArray , aout, i:: OrdinalRange... )
309318 if i == axes (a)
310- aout .= copy (a)
319+ aout .= memory (a)
311320 end
312- aout[i... ] = copy (view (a, i... ))
321+ aout[i... ] = memory (view (a, i... ))
313322 return nothing
314323end
315324function DiskArrays. writeblock! (a:: SubSerializedArray , ain, i:: OrdinalRange... )
316325 if i == axes (a)
317326 serialize (file (a), ain)
318327 return a
319328 end
320- a_parent = copy (parent (a))
329+ a_parent = memory (parent (a))
321330 pinds = parentindices (view (a. sub_parent, i... ))
322331 a_parent[pinds... ] = ain
323332 serialize (file (a), a_parent)
@@ -349,7 +358,7 @@ function Base.similar(a::TransposeSerializedArray, elt::Type, dims::Tuple{Vararg
349358end
350359
351360function materialize (a:: TransposeSerializedArray )
352- return transpose (copy (parent (a)))
361+ return transpose (memory (parent (a)))
353362end
354363function Base. copy (a:: TransposeSerializedArray )
355364 return copy (materialize (a))
@@ -392,7 +401,7 @@ function Base.similar(a::AdjointSerializedArray, elt::Type, dims::Tuple{Vararg{I
392401end
393402
394403function materialize (a:: AdjointSerializedArray )
395- return adjoint (copy (parent (a)))
404+ return adjoint (memory (parent (a)))
396405end
397406function Base. copy (a:: AdjointSerializedArray )
398407 return copy (materialize (a))
@@ -445,7 +454,7 @@ Base.size(a::BroadcastSerializedArray) = size(a.broadcasted)
445454Base. broadcastable (a:: BroadcastSerializedArray ) = a. broadcasted
446455function Base. copy (a:: BroadcastSerializedArray )
447456 # Broadcast over the materialized arrays.
448- return copy (Base. Broadcast. broadcasted (a. broadcasted. f, copy .(a. broadcasted. args)... ))
457+ return copy (Base. Broadcast. broadcasted (a. broadcasted. f, memory .(a. broadcasted. args)... ))
449458end
450459
451460function Base. copy (broadcasted:: Broadcasted{SerializedArrayStyle{N}} ) where {N}
0 commit comments