Skip to content

Commit 723ae63

Browse files
authored
Merge branch 'master' into dk/mul
2 parents ea04628 + 508e77f commit 723ae63

File tree

11 files changed

+81
-25
lines changed

11 files changed

+81
-25
lines changed

.ci/create_sysimage.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using PackageCompiler, Libdl
2+
3+
function create_sysimage_linear_algebra()
4+
sysimage = tempname() * "." * Libdl.dlext
5+
6+
if haskey(ENV, "BUILDKITE")
7+
ncores = Sys.CPU_THREADS
8+
else
9+
ncores = ceil(Int, Sys.CPU_THREADS / 2)
10+
end
11+
12+
withenv("JULIA_IMAGE_THREADS" => ncores) do
13+
create_sysimage(["LinearAlgebra", "Test", "Distributed", "Dates", "Printf", "Random"]; sysimage_path=sysimage, incremental=false, filter_stdlibs=true)
14+
end
15+
return sysimage, ncores
16+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
include("create_sysimage.jl")
2+
sysimage, ncores = create_sysimage_linear_algebra()
3+
doc_file = joinpath(@__DIR__, "..", "docs", "make.jl")
4+
withenv("JULIA_NUM_THREADS" => 1) do
5+
run(`$(Base.julia_cmd()) --sysimage=$sysimage --project=$(dirname(doc_file)) $doc_file`)
6+
end

.ci/create_sysimage_and_run_tests.jl

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
1-
using PackageCompiler, Libdl
2-
3-
sysimage = tempname() * "." * Libdl.dlext
4-
5-
if haskey(ENV, "BUILDKITE")
6-
ncores = Sys.CPU_THREADS
7-
else
8-
ncores = ceil(Int, Sys.CPU_THREADS / 2)
9-
end
10-
11-
withenv("JULIA_IMAGE_THREADS" => ncores) do
12-
create_sysimage(["LinearAlgebra", "Test", "Distributed", "Dates", "Printf", "Random"]; sysimage_path=sysimage, incremental=false, filter_stdlibs=true)
13-
end
14-
1+
include("create_sysimage.jl")
2+
sysimage, ncores = create_sysimage_linear_algebra()
153
current_dir = @__DIR__
164
cmd = """Base.runtests(["LinearAlgebra"]; propagate_project=true, ncores=$ncores)"""
175
withenv("JULIA_NUM_THREADS" => 1) do

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ jobs:
2121
version: 'nightly'
2222
- name: Generate docs
2323
run: |
24-
julia --project --color=yes -e ''
25-
julia --project --color=yes -e 'using Pkg; Pkg.respect_sysimage_versions(false); Pkg.activate("docs"); Pkg.develop(PackageSpec(path = pwd()))'
26-
julia --project=docs --color=yes docs/make.jl
24+
julia --color=yes --project=.ci -e 'using Pkg; Pkg.instantiate()'
25+
julia --color=yes --project=docs -e 'using Pkg; Pkg.instantiate()'
26+
julia --color=yes --project=.ci .ci/create_sysimage_and_run_docs.jl
2727
env:
2828
DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
2929
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

docs/Project.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[deps]
22
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
33
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
4+
5+
[sources]
6+
LinearAlgebra = {path = ".."}

src/bidiag.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ end
161161
# we explicitly compare the possible bands as b.band may be constant-propagated
162162
return @inbounds A.ev[b.index]
163163
else
164-
return diagzero(A, Tuple(_cartinds(b))...)
164+
return diagzero(A, b)
165165
end
166166
end
167167

src/cholesky.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ julia> C.U
6565
⋅ ⋅ 3.0
6666
6767
julia> C.L
68-
3×3 LowerTriangular{Float64, Adjoint{Matrix{Float64}}}:
68+
3×3 LowerTriangular{Float64, Adjoint{Float64, Matrix{Float64}}}:
6969
2.0 ⋅ ⋅
7070
6.0 1.0 ⋅
7171
-8.0 5.0 3.0
@@ -530,7 +530,7 @@ julia> C.U
530530
⋅ ⋅ 3.0
531531
532532
julia> C.L
533-
3×3 LowerTriangular{Float64, Adjoint{Matrix{Float64}}}:
533+
3×3 LowerTriangular{Float64, Adjoint{Float64, Matrix{Float64}}}:
534534
2.0 ⋅ ⋅
535535
6.0 1.0 ⋅
536536
-8.0 5.0 3.0

src/diagonal.jl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ zeroslike(::Type{M}, sz::Tuple{Integer, Vararg{Integer}}) where {M<:AbstractMatr
213213
if b.band == 0
214214
@inbounds r = D.diag[b.index]
215215
else
216-
r = diagzero(D, Tuple(_cartinds(b))...)
216+
r = diagzero(D, b)
217217
end
218218
r
219219
end
@@ -353,6 +353,13 @@ function rmul!(A::AbstractMatrix, D::Diagonal)
353353
end
354354
return A
355355
end
356+
# A' = A' * D => A = D' * A
357+
# This uses the fact that D' is a Diagonal
358+
function rmul!(A::AdjOrTransAbsMat, D::Diagonal)
359+
f = wrapperop(A)
360+
lmul!(f(D), f(A))
361+
A
362+
end
356363
# T .= T * D
357364
function rmul!(T::Tridiagonal, D::Diagonal)
358365
matmul_size_check(size(T), size(D))
@@ -388,6 +395,13 @@ function lmul!(D::Diagonal, T::Tridiagonal)
388395
end
389396
return T
390397
end
398+
# A' = D * A' => A = A * D'
399+
# This uses the fact that D' is a Diagonal
400+
function lmul!(D::Diagonal, A::AdjOrTransAbsMat)
401+
f = wrapperop(A)
402+
rmul!(f(A), f(D))
403+
A
404+
end
391405

392406
@inline function __muldiag_nonzeroalpha!(out, D::Diagonal, B, alpha::Number, beta::Number)
393407
@inbounds for j in axes(B, 2)

src/triangular.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ julia> UnitUpperTriangular(A)
139139
"""
140140
UnitUpperTriangular
141141

142-
const UpperOrUnitUpperTriangular{T,S} = Union{UpperTriangular{T,S}, UnitUpperTriangular{T,S}}
143-
const LowerOrUnitLowerTriangular{T,S} = Union{LowerTriangular{T,S}, UnitLowerTriangular{T,S}}
144-
const UpperOrLowerTriangular{T,S} = Union{UpperOrUnitUpperTriangular{T,S}, LowerOrUnitLowerTriangular{T,S}}
145-
const UnitUpperOrUnitLowerTriangular{T,S} = Union{UnitUpperTriangular{T,S}, UnitLowerTriangular{T,S}}
142+
const UpperOrUnitUpperTriangular{T,S<:AbstractMatrix{T}} = Union{UpperTriangular{T,S}, UnitUpperTriangular{T,S}}
143+
const LowerOrUnitLowerTriangular{T,S<:AbstractMatrix{T}} = Union{LowerTriangular{T,S}, UnitLowerTriangular{T,S}}
144+
const UpperOrLowerTriangular{T,S<:AbstractMatrix{T}} = Union{UpperOrUnitUpperTriangular{T,S}, LowerOrUnitLowerTriangular{T,S}}
145+
const UnitUpperOrUnitLowerTriangular{T,S<:AbstractMatrix{T}} = Union{UnitUpperTriangular{T,S}, UnitLowerTriangular{T,S}}
146146

147147
uppertriangular(M) = UpperTriangular(M)
148148
lowertriangular(M) = LowerTriangular(M)

src/tridiag.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,19 @@ end
474474
end
475475
end
476476

477+
@inline function getindex(A::SymTridiagonal, b::BandIndex)
478+
@boundscheck checkbounds(A, b)
479+
if b.band == 0
480+
return symmetric((@inbounds A.dv[b.index]), :U)::symmetric_type(eltype(A.dv))
481+
elseif b.band == -1
482+
return copy(transpose(@inbounds A.ev[b.index])) # materialized for type stability
483+
elseif b.band == 1
484+
return @inbounds A.ev[b.index]
485+
else
486+
return diagzero(A, b)
487+
end
488+
end
489+
477490
Base._reverse(A::SymTridiagonal, dims) = reverse!(Matrix(A); dims)
478491
Base._reverse(A::SymTridiagonal, dims::Colon) = SymTridiagonal(reverse(A.dv), reverse(A.ev))
479492
Base._reverse!(A::SymTridiagonal, dims::Colon) = (reverse!(A.dv); reverse!(A.ev); A)

0 commit comments

Comments
 (0)