From 5752977f01cef4c1d35df191e3a08222f9b23065 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 15 Feb 2023 21:08:02 +0530 Subject: [PATCH] Cases in broadcasting columns --- src/generic/broadcast.jl | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/generic/broadcast.jl b/src/generic/broadcast.jl index d43f6d98..4bbf9a9e 100644 --- a/src/generic/broadcast.jl +++ b/src/generic/broadcast.jl @@ -395,12 +395,20 @@ function _left_colvec_banded_broadcast!(dest::AbstractMatrix, f, (A,B)::Tuple{Ab (d_l ≥ min(l,m-1) && d_u ≥ min(u,n-1)) || throw(BandError(dest)) if d_l == B_l == l && d_u == B_u == u - for j=rowsupport(dest) - for k = max(1,j-u):min(j+min(A_l,l),m) - inbands_setindex!(dest, f(A[k], inbands_getindex(B, k, j)), k, j) + if A_l >= l + for j=rowsupport(dest) + for k = max(1,j-u):min(j+l,m) + inbands_setindex!(dest, f(A[k], inbands_getindex(B, k, j)), k, j) + end end - for k = max(1,j-u,j+A_l+1):min(j+l,m) - inbands_setindex!(dest, f(zero(T), inbands_getindex(B, k, j)), k, j) + else + for j=rowsupport(dest) + for k = max(1,j-u):min(j+A_l,m) + inbands_setindex!(dest, f(A[k], inbands_getindex(B, k, j)), k, j) + end + for k = max(1,j-u,j+A_l+1):min(j+l,m) + inbands_setindex!(dest, f(zero(T), inbands_getindex(B, k, j)), k, j) + end end end else @@ -445,12 +453,20 @@ function _right_colvec_banded_broadcast!(dest::AbstractMatrix, f, (A,B)::Tuple{A (d_l ≥ min(l,m-1) && d_u ≥ min(u,n-1)) || throw(BandError(dest)) if d_l == A_l == l && d_u == A_u == u - for j=rowsupport(dest) - for k = max(1,j-u):min(j+min(l,B_l),m) - inbands_setindex!(dest, f(inbands_getindex(A, k, j), B[k]), k, j) + if B_l >= l + for j=rowsupport(dest) + for k = max(1,j-u):min(j+l,m) + inbands_setindex!(dest, f(inbands_getindex(A, k, j), B[k]), k, j) + end end - for k = max(1,j-u,j+B_l+1):min(j+l,m) - inbands_setindex!(dest, f(inbands_getindex(A, k, j), zero(V)), k, j) + else + for j=rowsupport(dest) + for k = max(1,j-u):min(j+B_l,m) + inbands_setindex!(dest, f(inbands_getindex(A, k, j), B[k]), k, j) + end + for k = max(1,j-u,j+B_l+1):min(j+l,m) + inbands_setindex!(dest, f(inbands_getindex(A, k, j), zero(V)), k, j) + end end end else