@@ -164,26 +164,44 @@ Base.repeat(xs::TrackedArray; kw...) = track(repeat, xs; kw...)
164164end
165165
166166for (T, S) in [(:TrackedArray , :TrackedArray ), (:TrackedArray , :AbstractArray ), (:AbstractArray , :TrackedArray )]
167- @eval Base. vcat (A:: $T , B:: $S , Cs:: AbstractArray... ) = track (vcat, A, B, Cs... )
168- @eval Base. hcat (A:: $T , B:: $S , Cs:: AbstractArray... ) = track (hcat, A, B, Cs... )
167+ for op in (:vcat , :hcat )
168+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: AbstractArray... ) = track ($ (op), A, B, Cs... )
169+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: TrackedArray... ) = track ($ (op), A, B, Cs... )
170+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: AbstractArray{<:Number} ...) = track ($ (op), A, B, Cs... )
171+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: TrackedArray{<:Number} ...) = track ($ (op), A, B, Cs... )
172+ @eval Base.$ (op)(A:: $T , B:: $S ) = track ($ (op), A, B)
173+ end
169174end
170175for (T, S) in [(:TrackedVector , :TrackedVector ), (:TrackedVector , :AbstractVector ), (:AbstractVector , :TrackedVector )]
171- @eval Base. vcat (A:: $T , B:: $S , Cs:: AbstractVector... ) = track (vcat, A, B, Cs... )
176+ for op in (:vcat , :hcat )
177+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: AbstractVector... ) = track ($ (op), A, B, Cs... )
178+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: TrackedVector... ) = track ($ (op), A, B, Cs... )
179+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: AbstractVector{<:Number} ...) = track ($ (op), A, B, Cs... )
180+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: TrackedVector{<:Number} ...) = track ($ (op), A, B, Cs... )
181+ @eval Base.$ (op)(A:: $T , B:: $S ) = track ($ (op), A, B)
182+ end
172183end
173184for (T, S) in [(:TrackedVecOrMat , :TrackedVecOrMat ), (:TrackedVecOrMat , :AbstractVecOrMat ), (:AbstractVecOrMat , :TrackedVecOrMat )]
174- @eval Base. vcat (A:: $T , B:: $S , Cs:: AbstractVecOrMat... ) = track (vcat, A, B, Cs... )
175- @eval Base. hcat (A:: $T , B:: $S , Cs:: AbstractVecOrMat... ) = track (hcat, A, B, Cs... )
185+ for op in (:vcat , :hcat )
186+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: AbstractVecOrMat... ) = track ($ (op), A, B, Cs... )
187+ @eval Base.$ (op)(A:: $T , B:: $S , Cs:: TrackedVecOrMat... ) = track ($ (op), A, B, Cs... )
188+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: AbstractVecOrMat{<:Number} ...) = track ($ (op), A, B, Cs... )
189+ @eval Base.$ (op)(A:: $T{<:Number} , B:: $S{<:Number} , Cs:: TrackedVecOrMat{<:Number} ...) = track ($ (op), A, B, Cs... )
190+ @eval Base.$ (op)(A:: $T , B:: $S ) = track ($ (op), A, B)
191+ end
176192end
177193for (T, S) in [(:TrackedArray , :Real ), (:Real , :TrackedArray ), (:TrackedArray , :TrackedArray )]
178- @eval Base. vcat (A:: $T , B:: $S , Cs:: Union{AbstractArray, Real} ...) = track (vcat, A, B, Cs... )
179- @eval Base. hcat (A:: $T , B:: $S , Cs:: Union{AbstractArray, Real} ...) = track (hcat, A, B, Cs... )
194+ @eval Base. vcat (A:: $T , B:: $S , Cs:: Union{TrackedArray, AbstractArray, Real} ...) = track (vcat, A, B, Cs... )
195+ @eval Base. hcat (A:: $T , B:: $S , Cs:: Union{TrackedArray, AbstractArray, Real} ...) = track (hcat, A, B, Cs... )
196+ if T == :Real || S == :Real
197+ @eval Base. vcat (A:: $T , B:: $S ) = track (vcat, A, B)
198+ @eval Base. hcat (A:: $T , B:: $S ) = track (hcat, A, B)
199+ end
180200end
181201for (T, S) in [(:TrackedReal , :Real ), (:Real , :TrackedReal ), (:TrackedReal , :TrackedReal )]
182202 @eval Base. vcat (A:: $T , B:: $S , Cs:: Real... ) = track (vcat, A, B, Cs... )
183203 @eval Base. hcat (A:: $T , B:: $S , Cs:: Real... ) = track (hcat, A, B, Cs... )
184204end
185- Base. vcat (A:: TrackedVecOrMat{T1, <:AbstractArray} , B:: TrackedVecOrMat{T2, <:AbstractArray} ) where {T1, T2} = track (vcat, A, B)
186- Base. hcat (A:: TrackedVecOrMat{T1, <:AbstractArray} , B:: TrackedVecOrMat{T2, <:AbstractArray} ) where {T1, T2} = track (hcat, A, B)
187205
188206Base. vcat (A:: TrackedArray ) = track (vcat, A)
189207Base. hcat (A:: TrackedArray ) = track (hcat, A)
0 commit comments