@@ -25,15 +25,15 @@ const BlockDiagonal{T,VT<:Matrix{T}} = BlockMatrix{T,<:Diagonal{VT}}
25
25
26
26
BlockDiagonal (A) = mortar (Diagonal (A))
27
27
28
- function sizes_from_blocks (A:: Diagonal , _)
28
+ function sizes_from_blocks (A:: Diagonal , _)
29
29
# for k = 1:length(A.du)
30
30
# size(A.du[k],1) == sz[1][k] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
31
31
# size(A.du[k],2) == sz[2][k+1] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
32
32
# size(A.dl[k],1) == sz[1][k+1] || throw(ArgumentError("block sizes of lower diagonal inconsisent with diagonal"))
33
33
# size(A.dl[k],2) == sz[2][k] || throw(ArgumentError("block sizes of lower diagonal inconsisent with diagonal"))
34
34
# end
35
35
(size .(A. diag, 1 ), size .(A. diag,2 ))
36
- end
36
+ end
37
37
38
38
39
39
# Block Bi/Tridiagonal
@@ -43,7 +43,7 @@ const BlockBidiagonal{T,VT<:Matrix{T}} = BlockMatrix{T,<:Bidiagonal{VT}}
43
43
BlockTridiagonal (A,B,C) = mortar (Tridiagonal (A,B,C))
44
44
BlockBidiagonal (A, B, uplo) = mortar (Bidiagonal (A,B,uplo))
45
45
46
- function sizes_from_blocks (A:: Tridiagonal , _)
46
+ function sizes_from_blocks (A:: Tridiagonal , _)
47
47
# for k = 1:length(A.du)
48
48
# size(A.du[k],1) == sz[1][k] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
49
49
# size(A.du[k],2) == sz[2][k+1] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
@@ -53,7 +53,7 @@ function sizes_from_blocks(A::Tridiagonal, _)
53
53
(size .(A. d, 1 ), size .(A. d,2 ))
54
54
end
55
55
56
- function sizes_from_blocks (A:: Bidiagonal , _)
56
+ function sizes_from_blocks (A:: Bidiagonal , _)
57
57
# for k = 1:length(A.du)
58
58
# size(A.du[k],1) == sz[1][k] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
59
59
# size(A.du[k],2) == sz[2][k+1] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
@@ -83,21 +83,44 @@ checksquareblocks(A) = blockisequal(axes(A)...) || throw(DimensionMismatch("bloc
83
83
84
84
for op in (:- , :+ )
85
85
@eval begin
86
- function $op (A:: BlockTridiagonal , λ:: UniformScaling )
86
+ function $op (A:: BlockDiagonal , λ:: UniformScaling )
87
+ checksquareblocks (A)
88
+ mortar (Diagonal (broadcast ($ op, A. blocks. diag, Ref (λ))))
89
+ end
90
+ function $op (λ:: UniformScaling , A:: BlockDiagonal )
91
+ checksquareblocks (A)
92
+ mortar (Diagonal (broadcast ($ op, Ref (λ), A. blocks. diag)))
93
+ end
94
+
95
+ function $op (A:: BlockTridiagonal , λ:: UniformScaling )
87
96
checksquareblocks (A)
88
97
mortar (Tridiagonal (A. blocks. dl, broadcast ($ op, A. blocks. d, Ref (λ)), A. blocks. du))
89
98
end
90
- function $op (λ:: UniformScaling , A:: BlockTridiagonal )
99
+ function $op (λ:: UniformScaling , A:: BlockTridiagonal )
91
100
checksquareblocks (A)
92
101
mortar (Tridiagonal (broadcast ($ op,A. blocks. dl), broadcast ($ op, Ref (λ), A. blocks. d), broadcast ($ op,A. blocks. du)))
93
102
end
94
- function $op (A:: BlockBidiagonal , λ:: UniformScaling )
103
+ function $op (A:: BlockBidiagonal , λ:: UniformScaling )
95
104
checksquareblocks (A)
96
105
mortar (Bidiagonal (broadcast ($ op, A. blocks. dv, Ref (λ)), A. blocks. ev, A. blocks. uplo))
97
106
end
98
- function $op (λ:: UniformScaling , A:: BlockBidiagonal )
107
+ function $op (λ:: UniformScaling , A:: BlockBidiagonal )
99
108
checksquareblocks (A)
100
109
mortar (Bidiagonal (broadcast ($ op, Ref (λ), A. blocks. dv), broadcast ($ op,A. blocks. ev), A. blocks. uplo))
101
110
end
102
111
end
103
- end
112
+ end
113
+
114
+ function replace_in_print_matrix (A:: BlockDiagonal , i:: Integer , j:: Integer , s:: AbstractString )
115
+ bi = findblockindex .(axes (A), (i,j))
116
+ I,J = block .(bi)
117
+ i,j = blockindex .(bi)
118
+ Int (J- I) == 0 ? s : Base. replace_with_centered_mark (s)
119
+ end
120
+
121
+ function replace_in_print_matrix (A:: BlockTridiagonal , i:: Integer , j:: Integer , s:: AbstractString )
122
+ bi = findblockindex .(axes (A), (i,j))
123
+ I,J = block .(bi)
124
+ i,j = blockindex .(bi)
125
+ - 1 ≤ Int (J- I) ≤ 1 ? s : Base. replace_with_centered_mark (s)
126
+ end
0 commit comments