|
188 | 188 | end |
189 | 189 | end |
190 | 190 |
|
191 | | - @testset "diagonal" begin |
192 | | - @testset "Array + Diagonal" begin |
193 | | - n = 128 |
194 | | - A = AT(rand(Float32, (n,n))) |
195 | | - d = AT(rand(Float32, n)) |
196 | | - D = Diagonal(d) |
197 | | - B = A + D |
198 | | - @test collect(B) ≈ collect(A) + collect(D) |
199 | | - end |
200 | | - |
201 | | - @testset "copy diagonal" begin |
202 | | - a = AT(rand(Float32, 10)) |
203 | | - D = Diagonal(a) |
204 | | - C = copy(D) |
205 | | - @test C isa Diagonal |
206 | | - @test C.diag isa AT |
207 | | - @test collect(D) == collect(C) |
208 | | - end |
209 | | - |
210 | | - @testset "cholesky + Diagonal" begin |
211 | | - n = 128 |
212 | | - # Add one in order prevent failures due to random numbers being zero |
213 | | - d = AT(zeros(Float32, n) .+ one(Float32)) |
214 | | - D = Diagonal(d) |
215 | | - F = collect(D) |
216 | | - @test collect(cholesky(D).U) ≈ collect(cholesky(F).U) |
217 | | - @test collect(cholesky(D).L) ≈ collect(cholesky(F).L) |
218 | | - |
219 | | - d = AT([1f0, 2f0, -1f0, 0f0]) |
220 | | - D = Diagonal(d) |
221 | | - @test cholesky(D, check = false).info == 3 |
222 | | - end |
223 | | - |
224 | | - @testset "\\ + Diagonal" begin |
225 | | - n = 128 |
226 | | - d = AT(rand(Float32, n)) |
227 | | - D = Diagonal(d) |
228 | | - b = AT(rand(Float32, n)) |
229 | | - B = AT(rand(Float32, n, n)) |
230 | | - @test collect(D \ b) ≈ Diagonal(collect(d)) \ collect(b) |
231 | | - @test collect(D \ B) ≈ Diagonal(collect(d)) \ collect(B) |
232 | | - |
233 | | - d = ones(Float32, n) |
234 | | - d[rand(1:n)] = 0 |
235 | | - d = AT(d) |
236 | | - D = Diagonal(d) |
237 | | - @test_throws SingularException D \ B |
238 | | - end |
239 | | - |
240 | | - @testset "mul! + Diagonal" begin |
241 | | - @testset "$elty" for elty in (Float32, ComplexF32) |
242 | | - if !(elty in eltypes) |
243 | | - continue |
244 | | - end |
245 | | - n = 128 |
246 | | - d = AT(rand(elty, n)) |
247 | | - D = Diagonal(d) |
248 | | - B = AT(rand(elty, n, n)) |
249 | | - X = AT(zeros(elty, n, n)) |
250 | | - Y = zeros(elty, n, n) |
251 | | - α = rand(elty) |
252 | | - β = rand(elty) |
253 | | - mul!(X, D, B) |
254 | | - mul!(Y, Diagonal(collect(d)), collect(B)) |
255 | | - @test collect(X) ≈ Y |
256 | | - mul!(X, D, adjoint(B)) |
257 | | - mul!(Y, Diagonal(collect(d)), collect(adjoint(B))) |
258 | | - @test collect(X) ≈ Y |
259 | | - mul!(X, D, B, α, β) |
260 | | - mul!(Y, Diagonal(collect(d)), collect(B), α, β) |
261 | | - @test collect(X) ≈ Y |
262 | | - mul!(X, B, D) |
263 | | - mul!(Y, collect(B), Diagonal(collect(d))) |
264 | | - @test collect(X) ≈ Y |
265 | | - mul!(X, B, D, α, β) |
266 | | - mul!(Y, collect(B), Diagonal(collect(d)), α, β) |
267 | | - @test collect(X) ≈ Y |
268 | | - a = AT(rand(elty, n)) |
269 | | - b = AT(rand(elty, n)) |
270 | | - C = Diagonal(d) |
271 | | - B = Diagonal(b) |
272 | | - A = Diagonal(a) |
273 | | - mul!(C, A, B) |
274 | | - @test collect(C.diag) ≈ collect(A.diag) .* collect(B.diag) |
275 | | - a = AT(diagm(rand(elty, n))) |
276 | | - b = AT(diagm(rand(elty, n))) |
277 | | - C = Diagonal(d) |
278 | | - mul!(C, a, b) |
279 | | - @test collect(C) ≈ Diagonal(collect(a) * collect(b)) |
280 | | - a = transpose(AT(diagm(rand(elty, n)))) |
281 | | - b = adjoint(AT(diagm(rand(elty, n)))) |
282 | | - C = Diagonal(d) |
283 | | - mul!(C, a, b) |
284 | | - @test collect(C) ≈ Diagonal(collect(a) * collect(b)) |
285 | | - end |
286 | | - end |
287 | | - |
288 | | - @testset "ldiv! + Diagonal" begin |
289 | | - n = 128 |
290 | | - d = AT(rand(Float32, n)) |
291 | | - D = Diagonal(d) |
292 | | - b = AT(rand(Float32, n)) |
293 | | - B = AT(rand(Float32, n, n)) |
294 | | - X = AT(zeros(Float32, n, n)) |
295 | | - Y = zeros(Float32, n, n) |
296 | | - ldiv!(X, D, B) |
297 | | - ldiv!(Y, Diagonal(collect(d)), collect(B)) |
298 | | - @test collect(X) ≈ Y |
299 | | - ldiv!(D, B) |
300 | | - @test collect(B) ≈ collect(X) |
301 | | - |
302 | | - d = ones(Float32, n) |
303 | | - d[rand(1:n)] = 0 |
304 | | - d = AT(d) |
305 | | - D = Diagonal(d) |
306 | | - B = AT(rand(Float32, n, n)) |
307 | | - |
308 | | - @test_throws SingularException ldiv!(X, D, B) |
309 | | - |
310 | | - # two-argument version throws SingularException |
311 | | - @test_throws SingularException ldiv!(D, B) |
312 | | - end |
313 | | - |
314 | | - @testset "$f with diagonal $d" for f in (triu, triu!, tril, tril!), |
315 | | - d in -2:2 |
316 | | - A = randn(Float32, 10, 10) |
317 | | - @test compare(f, AT, A, d) |
318 | | - |
319 | | - A_empty = randn(Float32, 0, 0) |
320 | | - @test compare(f, AT, A_empty, d) |
321 | | - end |
322 | | - end |
323 | | - |
324 | 191 | @testset "diagm" begin |
325 | 192 | @testset "$elty" for elty in (Float32, ComplexF32) |
326 | 193 | m = 128 |
|
421 | 288 | @test isone(A) == false |
422 | 289 | end |
423 | 290 | end |
| 291 | +end |
424 | 292 |
|
425 | | - @testset "kron" begin |
426 | | - @testset "$T, $opa, $opb" for T in eltypes, opa in (vec, identity, transpose, adjoint), opb in (vec, identity, transpose, adjoint) |
427 | | - @test compare(kron, AT, opa(rand(T, 32, 64)), opb(rand(T, 128, 16))) |
| 293 | +@testsuite "linalg/kron" (AT, eltypes) -> begin |
| 294 | + @testset "$T, $opa, $opb" for T in eltypes, opa in (vec, identity, transpose, adjoint), opb in (vec, identity, transpose, adjoint) |
| 295 | + @test compare(kron, AT, opa(rand(T, 32, 64)), opb(rand(T, 128, 16))) |
| 296 | + end |
| 297 | +end |
| 298 | + |
| 299 | +@testsuite "linalg/diagonal" (AT, eltypes) -> begin |
| 300 | + @testset "Array + Diagonal" begin |
| 301 | + n = 128 |
| 302 | + A = AT(rand(Float32, (n,n))) |
| 303 | + d = AT(rand(Float32, n)) |
| 304 | + D = Diagonal(d) |
| 305 | + B = A + D |
| 306 | + @test collect(B) ≈ collect(A) + collect(D) |
| 307 | + end |
| 308 | + |
| 309 | + @testset "copy diagonal" begin |
| 310 | + a = AT(rand(Float32, 10)) |
| 311 | + D = Diagonal(a) |
| 312 | + C = copy(D) |
| 313 | + @test C isa Diagonal |
| 314 | + @test C.diag isa AT |
| 315 | + @test collect(D) == collect(C) |
| 316 | + end |
| 317 | + |
| 318 | + @testset "cholesky + Diagonal" begin |
| 319 | + n = 128 |
| 320 | + # Add one in order prevent failures due to random numbers being zero |
| 321 | + d = AT(zeros(Float32, n) .+ one(Float32)) |
| 322 | + D = Diagonal(d) |
| 323 | + F = collect(D) |
| 324 | + @test collect(cholesky(D).U) ≈ collect(cholesky(F).U) |
| 325 | + @test collect(cholesky(D).L) ≈ collect(cholesky(F).L) |
| 326 | + |
| 327 | + d = AT([1f0, 2f0, -1f0, 0f0]) |
| 328 | + D = Diagonal(d) |
| 329 | + @test cholesky(D, check = false).info == 3 |
| 330 | + end |
| 331 | + |
| 332 | + @testset "\\ + Diagonal" begin |
| 333 | + n = 128 |
| 334 | + d = AT(rand(Float32, n)) |
| 335 | + D = Diagonal(d) |
| 336 | + b = AT(rand(Float32, n)) |
| 337 | + B = AT(rand(Float32, n, n)) |
| 338 | + @test collect(D \ b) ≈ Diagonal(collect(d)) \ collect(b) |
| 339 | + @test collect(D \ B) ≈ Diagonal(collect(d)) \ collect(B) |
| 340 | + |
| 341 | + d = ones(Float32, n) |
| 342 | + d[rand(1:n)] = 0 |
| 343 | + d = AT(d) |
| 344 | + D = Diagonal(d) |
| 345 | + @test_throws SingularException D \ B |
| 346 | + end |
| 347 | + |
| 348 | + @testset "mul! + Diagonal" begin |
| 349 | + @testset "$elty" for elty in (Float32, ComplexF32) |
| 350 | + if !(elty in eltypes) |
| 351 | + continue |
| 352 | + end |
| 353 | + n = 128 |
| 354 | + d = AT(rand(elty, n)) |
| 355 | + D = Diagonal(d) |
| 356 | + B = AT(rand(elty, n, n)) |
| 357 | + X = AT(zeros(elty, n, n)) |
| 358 | + Y = zeros(elty, n, n) |
| 359 | + α = rand(elty) |
| 360 | + β = rand(elty) |
| 361 | + mul!(X, D, B) |
| 362 | + mul!(Y, Diagonal(collect(d)), collect(B)) |
| 363 | + @test collect(X) ≈ Y |
| 364 | + mul!(X, D, adjoint(B)) |
| 365 | + mul!(Y, Diagonal(collect(d)), collect(adjoint(B))) |
| 366 | + @test collect(X) ≈ Y |
| 367 | + mul!(X, D, B, α, β) |
| 368 | + mul!(Y, Diagonal(collect(d)), collect(B), α, β) |
| 369 | + @test collect(X) ≈ Y |
| 370 | + mul!(X, B, D) |
| 371 | + mul!(Y, collect(B), Diagonal(collect(d))) |
| 372 | + @test collect(X) ≈ Y |
| 373 | + mul!(X, B, D, α, β) |
| 374 | + mul!(Y, collect(B), Diagonal(collect(d)), α, β) |
| 375 | + @test collect(X) ≈ Y |
| 376 | + a = AT(rand(elty, n)) |
| 377 | + b = AT(rand(elty, n)) |
| 378 | + C = Diagonal(d) |
| 379 | + B = Diagonal(b) |
| 380 | + A = Diagonal(a) |
| 381 | + mul!(C, A, B) |
| 382 | + @test collect(C.diag) ≈ collect(A.diag) .* collect(B.diag) |
| 383 | + a = AT(diagm(rand(elty, n))) |
| 384 | + b = AT(diagm(rand(elty, n))) |
| 385 | + C = Diagonal(d) |
| 386 | + mul!(C, a, b) |
| 387 | + @test collect(C) ≈ Diagonal(collect(a) * collect(b)) |
| 388 | + a = transpose(AT(diagm(rand(elty, n)))) |
| 389 | + b = adjoint(AT(diagm(rand(elty, n)))) |
| 390 | + C = Diagonal(d) |
| 391 | + mul!(C, a, b) |
| 392 | + @test collect(C) ≈ Diagonal(collect(a) * collect(b)) |
428 | 393 | end |
429 | 394 | end |
| 395 | + |
| 396 | + @testset "ldiv! + Diagonal" begin |
| 397 | + n = 128 |
| 398 | + d = AT(rand(Float32, n)) |
| 399 | + D = Diagonal(d) |
| 400 | + b = AT(rand(Float32, n)) |
| 401 | + B = AT(rand(Float32, n, n)) |
| 402 | + X = AT(zeros(Float32, n, n)) |
| 403 | + Y = zeros(Float32, n, n) |
| 404 | + ldiv!(X, D, B) |
| 405 | + ldiv!(Y, Diagonal(collect(d)), collect(B)) |
| 406 | + @test collect(X) ≈ Y |
| 407 | + ldiv!(D, B) |
| 408 | + @test collect(B) ≈ collect(X) |
| 409 | + |
| 410 | + d = ones(Float32, n) |
| 411 | + d[rand(1:n)] = 0 |
| 412 | + d = AT(d) |
| 413 | + D = Diagonal(d) |
| 414 | + B = AT(rand(Float32, n, n)) |
| 415 | + |
| 416 | + @test_throws SingularException ldiv!(X, D, B) |
| 417 | + |
| 418 | + # two-argument version throws SingularException |
| 419 | + @test_throws SingularException ldiv!(D, B) |
| 420 | + end |
| 421 | + |
| 422 | + @testset "$f with diagonal $d" for f in (triu, triu!, tril, tril!), |
| 423 | + d in -2:2 |
| 424 | + A = randn(Float32, 10, 10) |
| 425 | + @test compare(f, AT, A, d) |
| 426 | + |
| 427 | + A_empty = randn(Float32, 0, 0) |
| 428 | + @test compare(f, AT, A_empty, d) |
| 429 | + end |
430 | 430 | end |
431 | 431 |
|
432 | 432 | @testsuite "linalg/mul!/vector-matrix" (AT, eltypes)->begin |
|
0 commit comments