@@ -703,7 +703,9 @@ complex(x::AbstractSparseVector) =
703
703
704
704
# ## Concatenation
705
705
706
- function hcat {Tv,Ti} (X:: AbstractSparseVector{Tv,Ti} ...)
706
+ promote_indtype {Tv,Ti} (X:: SparseVector{Tv,Ti} , Xs:: SparseVector... ) = promote_type (Ti, promote_indtype (Xs... ))
707
+
708
+ function typed_hcat {Tv,Ti<:Integer} (:: Type{SparseMatrixCSC{Tv,Ti}} , X:: AbstractSparseVector... )
707
709
# check sizes
708
710
n = length (X)
709
711
m = length (X[1 ])
@@ -731,8 +733,15 @@ function hcat{Tv,Ti}(X::AbstractSparseVector{Tv,Ti}...)
731
733
colptr[n+ 1 ] = roff
732
734
SparseMatrixCSC {Tv,Ti} (m, n, colptr, nzrow, nzval)
733
735
end
736
+ typed_hcat (:: Type{SparseMatrixCSC} , X:: AbstractSparseVector... ) =
737
+ typed_hcat (SparseMatrixCSC{promote_eltype (X... )}, X... )
738
+ typed_hcat {Tv} (:: Type{SparseMatrixCSC{Tv}} , X:: AbstractSparseVector... ) =
739
+ typed_hcat (SparseMatrixCSC{Tv,promote_indtype (X... )}, X... )
740
+ typed_hcat {T<:SparseMatrixCSC} (:: Type{T} , Xin:: AbstractVector... ) =
741
+ typed_hcat (T, map (sparse, Xin)... )
734
742
735
- function vcat {Tv,Ti} (X:: AbstractSparseVector{Tv,Ti} ...)
743
+ typed_vcat {T<:SparseVector} (:: Type{T} ) = T (0 )
744
+ function typed_vcat {Tv,Ti<:Integer} (:: Type{SparseVector{Tv,Ti}} , X:: AbstractSparseVector... )
736
745
# check sizes
737
746
n = length (X)
738
747
tnnz = 0
@@ -759,11 +768,18 @@ function vcat{Tv,Ti}(X::AbstractSparseVector{Tv,Ti}...)
759
768
end
760
769
SparseVector (len, rnzind, rnzval)
761
770
end
771
+ typed_vcat (:: Type{SparseVector} , X:: AbstractSparseVector... ) =
772
+ typed_vcat (SparseVector{promote_eltype (X... )}, X... )
773
+ typed_vcat {Tv} (:: Type{SparseVector{Tv}} , X:: AbstractSparseVector... ) =
774
+ typed_vcat (SparseVector{Tv,promote_indtype (X... )}, X... )
775
+ typed_vcat {T<:SparseVector} (:: Type{T} , Xin:: AbstractVector... ) =
776
+ typed_vcat (T, map (sparse, Xin)... )
777
+
778
+ hcat (Xin:: Union{Vector, AbstractSparseVector, SparseMatrixCSC} ...) = typed_hcat (SparseMatrixCSC, Xin... )
762
779
763
- hcat (Xin:: Union{AbstractSparseVector, SparseMatrixCSC} ...) = hcat (map (SparseMatrixCSC, Xin)... )
764
- vcat (Xin:: Union{AbstractSparseVector, SparseMatrixCSC} ...) = vcat (map (SparseMatrixCSC, Xin)... )
765
- hcat (Xin:: Union{Vector, AbstractSparseVector} ...) = hcat (map (sparse, Xin)... )
766
- vcat (Xin:: Union{Vector, AbstractSparseVector} ...) = vcat (map (sparse, Xin)... )
780
+ vcat (Xin:: Union{AbstractSparseVector, SparseMatrixCSC} ...) = typed_vcat (SparseMatrixCSC, Xin... )
781
+ vcat (Xin:: Union{Vector, AbstractSparseVector} ...) = typed_vcat (SparseVector, Xin... )
782
+ vcat (Xin:: AbstractSparseVector... ) = typed_vcat (SparseVector, Xin... )
767
783
768
784
# ## math functions
769
785
0 commit comments