From 25336da31e7053b9f2097df2d4761a346c4f11ba Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Wed, 21 May 2014 11:59:48 +0100 Subject: [PATCH] add StructuredArray --- base/exports.jl | 2 ++ base/linalg.jl | 6 ++++++ base/linalg/bidiag.jl | 2 +- base/linalg/diagonal.jl | 2 +- base/linalg/givens.jl | 2 +- base/linalg/rectfullpacked.jl | 4 ++-- base/linalg/symmetric.jl | 6 +++--- base/linalg/triangular.jl | 2 +- base/linalg/tridiag.jl | 4 ++-- 9 files changed, 19 insertions(+), 11 deletions(-) diff --git a/base/exports.jl b/base/exports.jl index a0c47747b95cb..6a25bc9aa2cca 100644 --- a/base/exports.jl +++ b/base/exports.jl @@ -91,6 +91,8 @@ export StridedMatrix, StridedVecOrMat, StridedVector, + StructuredArray, + StructuredMatrix, SubArray, SubDArray, SubOrDArray, diff --git a/base/linalg.jl b/base/linalg.jl index 3ccc3ff508521..5a341d8e5bca3 100644 --- a/base/linalg.jl +++ b/base/linalg.jl @@ -9,6 +9,8 @@ export BLAS, # Types + StructuredArray, + StructuredMatrix, SymTridiagonal, Tridiagonal, Bidiagonal, @@ -156,6 +158,10 @@ typealias BlasReal Union(Float64,Float32) typealias BlasComplex Union(Complex128,Complex64) typealias BlasChar Char +abstract StructuredArray{T,N} <: AbstractArray{T,N} +typealias StructuredMatrix{T} StructuredArray{T,2} + + if USE_BLAS64 typealias BlasInt Int64 blas_int(x) = int64(x) diff --git a/base/linalg/bidiag.jl b/base/linalg/bidiag.jl index df397a2933720..56cd660b1812b 100644 --- a/base/linalg/bidiag.jl +++ b/base/linalg/bidiag.jl @@ -1,5 +1,5 @@ # Bidiagonal matrices -type Bidiagonal{T} <: AbstractMatrix{T} +type Bidiagonal{T} <: StructuredMatrix{T} dv::AbstractVector{T} # diagonal ev::AbstractVector{T} # sub/super diagonal isupper::Bool # is upper bidiagonal (true) or lower (false) diff --git a/base/linalg/diagonal.jl b/base/linalg/diagonal.jl index b788c909285a2..84ec87400bc01 100644 --- a/base/linalg/diagonal.jl +++ b/base/linalg/diagonal.jl @@ -1,6 +1,6 @@ ## Diagonal matrices -immutable Diagonal{T} <: AbstractMatrix{T} +immutable Diagonal{T} <: StructuredMatrix{T} diag::Vector{T} end Diagonal(A::Matrix) = Diagonal(diag(A)) diff --git a/base/linalg/givens.jl b/base/linalg/givens.jl index 4da127377d26c..24ffe3722d90e 100644 --- a/base/linalg/givens.jl +++ b/base/linalg/givens.jl @@ -1,4 +1,4 @@ -immutable Givens{T} <: AbstractMatrix{T} +immutable Givens{T} <: StructuredMatrix{T} size::Int i1::Int i2::Int diff --git a/base/linalg/rectfullpacked.jl b/base/linalg/rectfullpacked.jl index 4913a0df231d4..849750077b1ca 100644 --- a/base/linalg/rectfullpacked.jl +++ b/base/linalg/rectfullpacked.jl @@ -1,6 +1,6 @@ # Rectangular Full Packed Matrices -type SymmetricRFP{T<:BlasFloat} <: AbstractMatrix{T} +type SymmetricRFP{T<:BlasFloat} <: StructuredMatrix{T} data::Vector{T} transr::Char uplo::Char @@ -12,7 +12,7 @@ function Ac_mul_A_RFP{T<:BlasFloat}(A::Matrix{T}) SymmetricRFP(C, 'N', 'U') end -type TriangularRFP{T<:BlasFloat} <: AbstractMatrix{T} +type TriangularRFP{T<:BlasFloat} <: StructuredMatrix{T} data::Vector{T} transr::Char uplo::Char diff --git a/base/linalg/symmetric.jl b/base/linalg/symmetric.jl index 7201f759fd714..9cf23793fb530 100644 --- a/base/linalg/symmetric.jl +++ b/base/linalg/symmetric.jl @@ -1,10 +1,10 @@ #Symmetric and Hermitian matrices -immutable Symmetric{T} <: AbstractMatrix{T} +immutable Symmetric{T} <: StructuredMatrix{T} S::Matrix{T} uplo::Char end Symmetric(A::Matrix, uplo::Symbol=:U) = (chksquare(A);Symmetric(A, string(uplo)[1])) -immutable Hermitian{T} <: AbstractMatrix{T} +immutable Hermitian{T} <: StructuredMatrix{T} S::Matrix{T} uplo::Char end @@ -65,4 +65,4 @@ function sqrtm{T<:Real}(A::RealHermSymComplexHerm{T}) F = eigfact(A) isposdef(F) && return F.vectors*Diagonal(sqrt(F.values))*F.vectors' return F.vectors*Diagonal(sqrt(complex(F.values)))*F.vectors' -end \ No newline at end of file +end diff --git a/base/linalg/triangular.jl b/base/linalg/triangular.jl index 1c0c18b2449e0..0a1e9cceb58dc 100644 --- a/base/linalg/triangular.jl +++ b/base/linalg/triangular.jl @@ -1,5 +1,5 @@ ## Triangular -immutable Triangular{T<:Number} <: AbstractMatrix{T} +immutable Triangular{T<:Number} <: StructuredMatrix{T} UL::Matrix{T} uplo::Char unitdiag::Char diff --git a/base/linalg/tridiag.jl b/base/linalg/tridiag.jl index 7bb252357d52b..991ae380b7206 100644 --- a/base/linalg/tridiag.jl +++ b/base/linalg/tridiag.jl @@ -1,7 +1,7 @@ #### Specialized matrix types #### ## Hermitian tridiagonal matrices -immutable SymTridiagonal{T} <: AbstractMatrix{T} +immutable SymTridiagonal{T} <: StructuredMatrix{T} dv::Vector{T} # diagonal ev::Vector{T} # subdiagonal function SymTridiagonal(dv::Vector{T}, ev::Vector{T}) @@ -140,7 +140,7 @@ function getindex{T}(A::SymTridiagonal{T}, i::Integer, j::Integer) end ## Tridiagonal matrices ## -immutable Tridiagonal{T} <: AbstractMatrix{T} +immutable Tridiagonal{T} <: StructuredMatrix{T} dl::Vector{T} # sub-diagonal d::Vector{T} # diagonal du::Vector{T} # sup-diagonal