From 9a9dc5eb244ae7eb676e918db8b380fe3f6117bb Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Tue, 12 Aug 2025 15:34:06 -0400 Subject: [PATCH 1/2] improve type stability of structural zero error for triangular --- src/triangular.jl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/triangular.jl b/src/triangular.jl index 10925565..34715432 100644 --- a/src/triangular.jl +++ b/src/triangular.jl @@ -256,16 +256,15 @@ Base.@constprop :aggressive @propagate_inbounds function getindex(A::Union{Lower _shouldforwardindex(A, b) ? A.data[b] : diagzero(A.data, b) end -_zero_triangular_half_str(::Type{<:UpperOrUnitUpperTriangular}) = "lower" -_zero_triangular_half_str(::Type{<:LowerOrUnitLowerTriangular}) = "upper" +_zero_triangular_half_str(T::Type) = T <: UpperOrLowerTriangular ? "lower" : "upper" -@noinline function throw_nonzeroerror(T, @nospecialize(x), i, j) +@noinline function throw_nonzeroerror(T::DataType, @nospecialize(x), i, j) Ts = _zero_triangular_half_str(T) Tn = nameof(T) throw(ArgumentError( lazy"cannot set index in the $Ts triangular part ($i, $j) of an $Tn matrix to a nonzero value ($x)")) end -@noinline function throw_nononeerror(T, @nospecialize(x), i, j) +@noinline function throw_nononeerror(T::DataType, @nospecialize(x), i, j) Tn = nameof(T) throw(ArgumentError( lazy"cannot set index on the diagonal ($i, $j) of an $Tn matrix to a non-unit value ($x)")) @@ -311,7 +310,7 @@ end return A end -@noinline function throw_setindex_structuralzero_error(T, @nospecialize(x)) +@noinline function throw_setindex_structuralzero_error(T::DataType, @nospecialize(x)) Ts = _zero_triangular_half_str(T) Tn = nameof(T) throw(ArgumentError( From 3924f3386b41078d5fe137d31aa0422ea15cb783 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Tue, 12 Aug 2025 21:36:51 -0400 Subject: [PATCH 2/2] Update src/triangular.jl Co-authored-by: Jishnu Bhattacharya --- src/triangular.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/triangular.jl b/src/triangular.jl index 34715432..e1267ee3 100644 --- a/src/triangular.jl +++ b/src/triangular.jl @@ -256,7 +256,7 @@ Base.@constprop :aggressive @propagate_inbounds function getindex(A::Union{Lower _shouldforwardindex(A, b) ? A.data[b] : diagzero(A.data, b) end -_zero_triangular_half_str(T::Type) = T <: UpperOrLowerTriangular ? "lower" : "upper" +_zero_triangular_half_str(T::Type) = T <: UpperOrUnitUpperTriangular ? "lower" : "upper" @noinline function throw_nonzeroerror(T::DataType, @nospecialize(x), i, j) Ts = _zero_triangular_half_str(T)