@@ -44,83 +44,66 @@ Base.show(io::IO, N::PrintShow) = print(io, N.c)
44
44
45
45
show (io:: IO , B:: Operator ; kw... ) = summary (io, B)
46
46
47
- function show (io:: IO , mimetype:: MIME"text/plain" , @nospecialize (B:: Operator ); header:: Bool = true )
48
- header && summary (io, B)
49
- dsp = domainspace (B)
47
+ struct CharLinedMatrix{T,A<: AbstractMatrix{T} } <: AbstractMatrix{Union{T,PrintShow}}
48
+ arr :: A
49
+ sz :: NTuple{2,Bool}
50
+ isbanded :: Bool
51
+ end
52
+ Base. size (A:: CharLinedMatrix ) = size (A. arr) .+ A. sz
53
+
54
+ function Base. getindex (C:: CharLinedMatrix , k:: Int , j:: Int )
55
+ @boundscheck checkbounds (C, k, j)
56
+ BM = C. arr
57
+ if j in axes (BM,2 ) && k in axes (BM,1 )
58
+ return C. arr[k,j]
59
+ end
60
+ sz1, sz2 = size (C)
61
+ if C. isbanded && all (C. sz)
62
+ bw1, bw2 = bandwidths (BM)
63
+ if k in max (1 ,sz1- bw2): sz1+ min (0 ,bw1) && j == sz2
64
+ PrintShow (' ⋱' )
65
+ elseif k == sz1 && j in max (1 ,sz2- bw1): sz2+ min (0 ,bw2)
66
+ PrintShow (' ⋱' )
67
+ else
68
+ PrintShow (' ⋅' )
69
+ end
70
+ elseif all (C. sz)
71
+ if k == 1 && j == sz2
72
+ PrintShow (' ⋯' )
73
+ elseif k in 2 : sz1 && j == sz2
74
+ PrintShow (' ⋱' )
75
+ elseif k == sz1 && j == 1
76
+ PrintShow (' ⋮' )
77
+ elseif k == sz1 && j in 2 : sz2
78
+ PrintShow (' ⋱' )
79
+ end
80
+ elseif C. sz[1 ]
81
+ if k == sz1 && j in 1 : sz2
82
+ PrintShow (' ⋮' )
83
+ end
84
+ elseif C. sz[2 ]
85
+ if k in 1 : sz1 && j == sz2
86
+ PrintShow (' ⋯' )
87
+ end
88
+ end
89
+ end
50
90
51
- sz1_B, sz2_B = size (B)
91
+ function Base. replace_in_print_matrix (C:: CharLinedMatrix , k:: Integer , j:: Integer , s:: AbstractString )
92
+ if CartesianIndex (k,j) in CartesianIndices (C. arr)
93
+ Base. replace_in_print_matrix (C. arr, k, j, s)
94
+ else
95
+ s
96
+ end
97
+ end
52
98
53
- iocompact = haskey (io, :compact ) ? io : IOContext (io, :compact => true )
99
+ function show (io:: IO , mimetype:: MIME"text/plain" , @nospecialize (B:: Operator ); header:: Bool = true )
100
+ header && summary (io, B)
54
101
55
- if ! isambiguous (domainspace (B)) && ( eltype (B) <: Number )
102
+ if ! isambiguous (domainspace (B)) && eltype (B) <: Number
56
103
println (io)
57
- if isbanded (B) && isinf (sz1_B) && isinf (sz2_B)
58
- BM= B[1 : 10 ,1 : 10 ]
59
-
60
- M= Matrix {Union{eltype(B), PrintShow}} (undef,11 ,11 )
61
- fill! (M,PrintShow (' ⋅' ))
62
- for j = 1 : size (BM,2 ),k = colrange (BM,j)
63
- M[k,j]= BM[k,j]
64
- end
65
-
66
- for k= max (1 ,11 - bandwidth (B,2 )): 11
67
- M[k,end ]= PrintShow (' ⋱' )
68
- end
69
- for j= max (1 ,11 - bandwidth (B,1 )): 10
70
- M[end ,j]= PrintShow (' ⋱' )
71
- end
72
-
73
- print_array (iocompact, M)
74
- elseif isinf (sz1_B) && isinf (sz2_B)
75
- BM= B[1 : 10 ,1 : 10 ]
76
-
77
- M= Matrix {Union{eltype(B), PrintShow}} (undef,11 ,11 )
78
- for I in CartesianIndices (axes (BM))
79
- M[I]= BM[Tuple (I)... ] # not certain if indexing with CartesianIndex is implemented
80
- end
81
-
82
- M[1 ,end ]= PrintShow (' ⋯' )
83
- M[end ,1 ]= PrintShow (' ⋮' )
84
-
85
- for k= 2 : 11
86
- M[k,end ]= PrintShow (' ⋱' )
87
- end
88
- for k= 2 : 11
89
- M[end ,k]= PrintShow (' ⋱' )
90
- end
91
-
92
- print_array (iocompact, M)
93
- elseif isinf (sz1_B)
94
- sz2int = Int (sz2_B):: Int
95
- BM= B[1 : 10 ,1 : sz2int]
96
-
97
- M= Matrix {Union{eltype(B), PrintShow}} (undef,11 ,sz2int)
98
- for I in CartesianIndices (axes (BM))
99
- M[I]= BM[Tuple (I)... ]
100
- end
101
- for k= 1 : sz2int
102
- M[end ,k]= PrintShow (' ⋮' )
103
- end
104
-
105
- print_array (iocompact, M)
106
- elseif isinf (sz2_B)
107
- sz1int = Int (sz1_B):: Int
108
- BM= B[1 : sz1int,1 : 10 ]
109
-
110
- M= Matrix {Union{eltype(B), PrintShow}} (undef,sz1int,11 )
111
- for I in CartesianIndices (axes (BM))
112
- M[I]= BM[Tuple (I)... ]
113
- end
114
- for k= 1 : sz1int
115
- M[k,end ]= PrintShow (' ⋯' )
116
- end
117
-
118
- print_array (iocompact, M)
119
- else
120
- sz1int = Int (sz1_B):: Int
121
- sz2int = Int (sz2_B):: Int
122
- print_array (iocompact, AbstractMatrix (B)[1 : sz1int,1 : sz2int])
123
- end
104
+ sz1, sz2 = min .(size (B), 10 )
105
+ C = CharLinedMatrix (B[1 : sz1, 1 : sz2], isinf .(size (B)), isbanded (B))
106
+ print_array (io, C)
124
107
end
125
108
end
126
109
0 commit comments