diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed99e8e..ae5fd97 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,7 @@ jobs: fail-fast: false matrix: version: + - 'lts' - 'nightly' - '1' os: @@ -37,7 +38,7 @@ jobs: - x64 steps: - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v1 + - uses: julia-actions/setup-julia@v2.2 with: version: ${{ matrix.version }} arch: ${{ matrix.arch }} diff --git a/src/eigenGeneral.jl b/src/eigenGeneral.jl index d858e38..893800b 100644 --- a/src/eigenGeneral.jl +++ b/src/eigenGeneral.jl @@ -29,6 +29,14 @@ function LinearAlgebra.ldiv!(H::HessenbergMatrix, B::AbstractVecOrMat) end (\)(H::HessenbergMatrix, B::AbstractVecOrMat) = ldiv!(copy(H), copy(B)) +if VERSION < v"1.10" + # ensure tests pass on Julia v1.6 + copy_similar(A::AbstractArray, ::Type{T}) where {T} = copyto!(similar(A, T, size(A)), A) + eigtype(T) = promote_type(Float32, typeof(zero(T)/sqrt(abs2(one(T))))) + eigencopy_oftype(A, S) = copy_similar(A, S) + LinearAlgebra.eigvals(A::HessenbergMatrix{T}; kws...) where T = LinearAlgebra.eigvals!(eigencopy_oftype(A, eigtype(T)); kws...) +end + # Hessenberg factorization struct HessenbergFactorization{T,S<:StridedMatrix,U} <: Factorization{T} data::S diff --git a/test/eigenselfadjoint.jl b/test/eigenselfadjoint.jl index 8f097d9..e6f6c4f 100644 --- a/test/eigenselfadjoint.jl +++ b/test/eigenselfadjoint.jl @@ -120,22 +120,10 @@ using Test, GenericLinearAlgebra, LinearAlgebra, Quaternions @testset "issue 123" begin M = Hermitian([ - big"-0.4080898675832881399369478084264191594976530854542904557798567397269356887436951"; - big"-0.1032324294981949906363774065395184125237581835226155628209100984396171211818558"; - big"-1.0795157507124452910839896877334667387210301781514938067860918240771876343947"; - big"0.9172086645212876240254394768180975107502376572771647296150618931226550446699544";; - big"-0.1032324294981949906363774065395184125237581835226155628209100984396171211818558"; - big"-0.9819956883377066621250198846550622559246996804965712336465013506629992739010227"; - big"0.1882735697944729855991976669864503854920622386133987141371224931350749728226066"; - big"-0.1599663084136352437739757607131301560774255778371317602542426234968564801904052";; - big"-1.0795157507124452910839896877334667387210301781514938067860918240771876343947"; - big"0.1882735697944729855991976669864503854920622386133987141371224931350749728226066"; - big"0.9688026817149176598146701814747478080649943014810992426739997593840858865727305"; - big"-1.672789745967021000172452940954243617442140494364475046869527486458478435262502";; - big"0.9172086645212876240254394768180975107502376572771647296150618931226550446699544"; - big"-0.1599663084136352437739757607131301560774255778371317602542426234968564801904052"; - big"-1.672789745967021000172452940954243617442140494364475046869527486458478435262502"; - big"0.4212828742060771422472975116067336073573584644697624467523583310058490760719874" + big"-0.4080898675832881399369478084264191594976530854542904557798567397269356887436951" big"-0.1032324294981949906363774065395184125237581835226155628209100984396171211818558" big"-1.0795157507124452910839896877334667387210301781514938067860918240771876343947" big"0.9172086645212876240254394768180975107502376572771647296150618931226550446699544"; + big"-0.1032324294981949906363774065395184125237581835226155628209100984396171211818558" big"-0.9819956883377066621250198846550622559246996804965712336465013506629992739010227" big"0.1882735697944729855991976669864503854920622386133987141371224931350749728226066" big"-0.1599663084136352437739757607131301560774255778371317602542426234968564801904052"; + big"-1.0795157507124452910839896877334667387210301781514938067860918240771876343947" big"0.1882735697944729855991976669864503854920622386133987141371224931350749728226066" big"0.9688026817149176598146701814747478080649943014810992426739997593840858865727305" big"-1.672789745967021000172452940954243617442140494364475046869527486458478435262502"; + big"0.9172086645212876240254394768180975107502376572771647296150618931226550446699544" big"-0.1599663084136352437739757607131301560774255778371317602542426234968564801904052" big"-1.672789745967021000172452940954243617442140494364475046869527486458478435262502" big"0.4212828742060771422472975116067336073573584644697624467523583310058490760719874" ]) F = eigen(M) @test M * F.vectors ≈ F.vectors * Diagonal(F.values) @@ -160,9 +148,12 @@ using Test, GenericLinearAlgebra, LinearAlgebra, Quaternions @testset "#133" begin A = SymTridiagonal{BigFloat}(randn(5), randn(4)) T = Tridiagonal(A) - @test eigvals(A) == eigvals(T) == eigvals(A; sortby=LinearAlgebra.eigsortby) == eigvals(T; sortby=LinearAlgebra.eigsortby) == eigvals!(deepcopy(A); sortby=LinearAlgebra.eigsortby) - @test eigen(A).values == eigen(T).values == eigen(A; sortby=LinearAlgebra.eigsortby).values == eigen(T; sortby=LinearAlgebra.eigsortby).values - # compare abs to avoid sign issues - @test abs.(eigen(A).vectors) == abs.(eigen(T).vectors) == abs.(eigen(A; sortby=LinearAlgebra.eigsortby).vectors) == abs.(eigen(T; sortby=LinearAlgebra.eigsortby).vectors) + if VERSION ≥ v"1.10" + # The following depends on more recent behaviour of eigvals/eigen in stdlib + @test eigvals(A) == eigvals(T) == eigvals(A; sortby=LinearAlgebra.eigsortby) == eigvals(T; sortby=LinearAlgebra.eigsortby) == eigvals!(deepcopy(A); sortby=LinearAlgebra.eigsortby) + @test eigen(A).values == eigen(T).values == eigen(A; sortby=LinearAlgebra.eigsortby).values == eigen(T; sortby=LinearAlgebra.eigsortby).values + # compare abs to avoid sign issues + @test abs.(eigen(A).vectors) == abs.(eigen(T).vectors) == abs.(eigen(A; sortby=LinearAlgebra.eigsortby).vectors) == abs.(eigen(T; sortby=LinearAlgebra.eigsortby).vectors) + end end end