changeset 203:19e579a5031f boundary_conditions

Add (/) operation for LazyArrays and enable corresponding broken tests.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 24 Jun 2019 10:51:39 +0200
parents 9e737d19fcfe
children 70e1f3401d82
files LazyTensors/src/lazy_operations.jl LazyTensors/test/runtests.jl
diffstat 2 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/LazyTensors/src/lazy_operations.jl	Mon Jun 24 09:21:03 2019 +0200
+++ b/LazyTensors/src/lazy_operations.jl	Mon Jun 24 10:51:39 2019 +0200
@@ -109,9 +109,13 @@
 Base.@propagate_inbounds Base.:-(a::AbstractArray{T,D}, b::LazyArray{T,D}) where {T,D} = a -̃ b
 Base.@propagate_inbounds Base.:*(a::LazyArray{T,D}, b::AbstractArray{T,D}) where {T,D} = a *̃ b
 Base.@propagate_inbounds Base.:*(a::AbstractArray{T,D}, b::LazyArray{T,D}) where {T,D} = b * a
-# TODO: / seems to be ambiguous
-# Base.:/(a::LazyArray{T,D},b::AbstractArray{T,D}) where {T,D} = a /̃ b
-# Base.:/(a::AbstractArray{T,D},b::LazyArray{T,D}) where {T,D} = a /̃ b
+# NOTE: Need to define (/) for AbstractVectorOrMat and Union of LazyArrays in order to avoid ambiguities
+# with (/) in the LinearAlgebra package. Not sure if it actually could be usefull.
+Base.@propagate_inbounds Base.:/(a::AbstractVecOrMat, b::Union{LazyArray{T,1}, LazyArray{T,2}})  where {T}  = a /̃ b
+Base.@propagate_inbounds Base.:/(a::Union{LazyArray{T,1}, LazyArray{T,2}}, b::AbstractVecOrMat)  where {T}  = a /̃ b
+Base.@propagate_inbounds Base.:/(a::LazyArray{T,D}, b::AbstractArray{T,D}) where {T,D} = a /̃ b
+Base.@propagate_inbounds Base.:/(a::AbstractArray{T,D}, b::LazyArray{T,D}) where {T,D} = a /̃ b
+
 
 export +̃, -̃, *̃, /̃
 
--- a/LazyTensors/test/runtests.jl	Mon Jun 24 09:21:03 2019 +0200
+++ b/LazyTensors/test/runtests.jl	Mon Jun 24 10:51:39 2019 +0200
@@ -98,13 +98,13 @@
     @test isa(v2 - v1, LazyArray)
     @test isa(v1 * v2, LazyArray)
     @test isa(v2 * v1, LazyArray)
-    @test_broken isa(v1 / v2, LazyArray)
-    @test_broken isa(v2 / v1, LazyArray)
+    @test isa(v1 / v2, LazyArray)
+    @test isa(v2 / v1, LazyArray)
     for i ∈ eachindex(v2)
         @test (v1 + v2)[i] == (v2 + v1)[i] == r_add[i]
         @test (v1 - v2)[i] == -(v2 - v1)[i] == r_sub[i]
         @test (v1 * v2)[i] == (v2 * v1)[i]  ==  r_times[i]
-        @test_broken (v1 / v2)[i] == 1/((v2 / v1)[i])  ==  r_div[i]
+        @test (v1 / v2)[i] == 1/((v2 / v1)[i])  ==  r_div[i]
     end
     @test_throws BoundsError (v1 + v2)[4]
     v2 = [1., 2, 3, 4]