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)