Mercurial > repos > public > sbplib_julia
comparison test/testLazyTensors.jl @ 520:fe86ac896377 feature/inflated_tensormapping_transpose
Start refactoring split index and apply to accomodate future addition of apply_transpose
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 23 Nov 2020 21:30:11 +0100 |
parents | 27e64b3d3efa |
children | 41c1760a7770 |
comparison
equal
deleted
inserted
replaced
508:27e64b3d3efa | 520:fe86ac896377 |
---|---|
367 # Test InflatedTensorMapping mapping w. before and after | 367 # Test InflatedTensorMapping mapping w. before and after |
368 tm = InflatedTensorMapping(I(3,2), A, I(4)) | 368 tm = InflatedTensorMapping(I(3,2), A, I(4)) |
369 v = rand(domain_size(tm)...) | 369 v = rand(domain_size(tm)...) |
370 @tullio IAIv[a,b,c,d] := Ã[c,i]*v[a,b,i,d] | 370 @tullio IAIv[a,b,c,d] := Ã[c,i]*v[a,b,i,d] |
371 @test tm*v ≈ IAIv rtol=1e-14 | 371 @test tm*v ≈ IAIv rtol=1e-14 |
372 @inferred LazyTensors.split_index(tm,1,1,1,1) | |
373 | 372 |
374 # Test InflatedTensorMapping mapping w. before | 373 # Test InflatedTensorMapping mapping w. before |
375 tm = InflatedTensorMapping(I(3,2), A) | 374 tm = InflatedTensorMapping(I(3,2), A) |
376 v = rand(domain_size(tm)...) | 375 v = rand(domain_size(tm)...) |
377 @tullio IAIv[a,b,c] := Ã[c,i]*v[a,b,i] | 376 @tullio IAIv[a,b,c] := Ã[c,i]*v[a,b,i] |
378 @test tm*v ≈ IAIv rtol=1e-14 | 377 @test tm*v ≈ IAIv rtol=1e-14 |
379 @inferred LazyTensors.split_index(tm,1,1,1) | |
380 | 378 |
381 # Test InflatedTensorMapping mapping w. after | 379 # Test InflatedTensorMapping mapping w. after |
382 tm = InflatedTensorMapping(A,I(4)) | 380 tm = InflatedTensorMapping(A,I(4)) |
383 v = rand(domain_size(tm)...) | 381 v = rand(domain_size(tm)...) |
384 @tullio IAIv[c,d] := Ã[c,i]*v[i,d] | 382 @tullio IAIv[c,d] := Ã[c,i]*v[i,d] |
385 @test tm*v ≈ IAIv rtol=1e-14 | 383 @test tm*v ≈ IAIv rtol=1e-14 |
386 @inferred LazyTensors.split_index(tm,1,1) | |
387 | 384 |
388 @testset "Inference of application" begin | 385 @testset "Inference of application" begin |
389 struct ScalingOperator{T,D} <: TensorMapping{T,D,D} | 386 struct ScalingOperator{T,D} <: TensorMapping{T,D,D} |
390 λ::T | 387 λ::T |
391 size::NTuple{D,Int} | 388 size::NTuple{D,Int} |
396 LazyTensors.domain_size(m::ScalingOperator) = m.size | 393 LazyTensors.domain_size(m::ScalingOperator) = m.size |
397 | 394 |
398 tm = InflatedTensorMapping(I(2,3),ScalingOperator(2.0, (3,2)),I(3,4)) | 395 tm = InflatedTensorMapping(I(2,3),ScalingOperator(2.0, (3,2)),I(3,4)) |
399 v = rand(domain_size(tm)...) | 396 v = rand(domain_size(tm)...) |
400 | 397 |
401 @inferred LazyTensors.split_index(tm,1,2,3,2,2,4) | |
402 @inferred apply(tm,v,Index{Unknown}.((1,2,3,2,2,4))...) | 398 @inferred apply(tm,v,Index{Unknown}.((1,2,3,2,2,4))...) |
403 @inferred (tm*v)[1,2,3,2,2,4] | 399 @inferred (tm*v)[1,2,3,2,2,4] |
404 end | 400 end |
405 end | 401 end |
406 | 402 |
413 | 409 |
414 @test InflatedTensorMapping(I(2), I(2), I(2)) isa InflatedTensorMapping # The constructor should always return its type. | 410 @test InflatedTensorMapping(I(2), I(2), I(2)) isa InflatedTensorMapping # The constructor should always return its type. |
415 end | 411 end |
416 end | 412 end |
417 | 413 |
414 @testset "split_index" begin | |
415 @test LazyTensors.split_index(Val(2),Val(1),Val(2),Val(2),1,2,3,4,5,6) == ((1,2,:,5,6),(3,4)) | |
416 @test LazyTensors.split_index(Val(2),Val(3),Val(2),Val(2),1,2,3,4,5,6) == ((1,2,:,:,:,5,6),(3,4)) | |
417 @test LazyTensors.split_index(Val(3),Val(1),Val(1),Val(2),1,2,3,4,5,6) == ((1,2,3,:,5,6),(4,)) | |
418 @test LazyTensors.split_index(Val(3),Val(2),Val(1),Val(2),1,2,3,4,5,6) == ((1,2,3,:,:,5,6),(4,)) | |
419 @test LazyTensors.split_index(Val(1),Val(1),Val(2),Val(3),1,2,3,4,5,6) == ((1,:,4,5,6),(2,3)) | |
420 @test LazyTensors.split_index(Val(1),Val(2),Val(2),Val(3),1,2,3,4,5,6) == ((1,:,:,4,5,6),(2,3)) | |
421 | |
422 @test LazyTensors.split_index(Val(0),Val(1),Val(3),Val(3),1,2,3,4,5,6) == ((:,4,5,6),(1,2,3)) | |
423 @test LazyTensors.split_index(Val(3),Val(1),Val(3),Val(0),1,2,3,4,5,6) == ((1,2,3,:),(4,5,6)) | |
424 | |
425 @inferred LazyTensors.split_index(Val(2),Val(3),Val(2),Val(2),1,2,3,2,2,4) | |
426 end | |
427 | |
418 @testset "slice_tuple" begin | 428 @testset "slice_tuple" begin |
419 @test LazyTensors.slice_tuple((1,2,3),Val(1), Val(3)) == (1,2,3) | 429 @test LazyTensors.slice_tuple((1,2,3),Val(1), Val(3)) == (1,2,3) |
420 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(2), Val(5)) == (2,3,4,5) | 430 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(2), Val(5)) == (2,3,4,5) |
421 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(1), Val(3)) == (1,2,3) | 431 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(1), Val(3)) == (1,2,3) |
422 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(4), Val(6)) == (4,5,6) | 432 @test LazyTensors.slice_tuple((1,2,3,4,5,6),Val(4), Val(6)) == (4,5,6) |