changeset 177:87747870441e boundary_conditions

Steal Vidars changes from 24779d423243 that make TensorMappings.jl compile
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 17 Jun 2019 09:43:35 +0200
parents bcd2029c590d
children 39d3a837bc6b
files TensorMappings.jl
diffstat 1 files changed, 9 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
diff -r bcd2029c590d -r 87747870441e TensorMappings.jl
--- a/TensorMappings.jl	Wed Jun 12 15:12:03 2019 +0200
+++ b/TensorMappings.jl	Mon Jun 17 09:43:35 2019 +0200
@@ -31,8 +31,8 @@
 apply(tm::TensorMappingTranspose{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {T,R,D} = apply_transpose(tm.tm, v, I...)
 apply_transpose(tm::TensorMappingTranspose{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,D} = apply(tm.tm, v, I...)
 
-range_size(tmt::TensorMappingTranspose{T,R,D}, domain_size::NTuple{D,Integer}) = domain_size(tmt.tm, domain_size)
-domain_size(tmt::TensorMappingTranspose{T,R,D}, range_size::NTuple{D,Integer}) = range_size(tmt.tm, range_size)
+range_size(tmt::TensorMappingTranspose{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} = domain_size(tmt.tm, domain_size)
+domain_size(tmt::TensorMappingTranspose{T,R,D}, range_size::NTuple{D,Integer}) where {T,R,D} = range_size(tmt.tm, range_size)
 
 
 
@@ -41,17 +41,15 @@
 	o::AbstractArray{T,D}
 end
 
-Base.size(ta::TensorApplication) = range_size(ta.t,size(ta.o))
-Base.getindex(tm::TensorApplication, I::Vararg) = apply(tm.t, tm.o, I...)
+Base.size(ta::TensorApplication{T,R,D}) where {T,R,D} = range_size(ta.t,size(ta.o))
+Base.getindex(ta::TensorApplication{T,R,D}, I::Vararg) where {T,R,D} = apply(ta.t, ta.o, I...)
 # TODO: What else is needed to implement the AbstractArray interface?
-
-→(t::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(t,o)
+import Base.*
+→(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(tm,o)
 # Should we overload some other infix binary operator?
 # We need the associativity to be a→b→c = a→(b→c), which is the case for '→'
-
-import Base.*
 *(args::Union{TensorMapping{T}, AbstractArray{T}}...) where T = foldr(*,args)
-*(t::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(t,o)
+*(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(tm,o)
 # We need to be really careful about good error messages.
 # For example what happens if you try to multiply TensorApplication with a TensorMapping(wrong order)?
 
@@ -65,11 +63,11 @@
 import Base.∘
 ∘(s::TensorMapping{T,R,K}, t::TensorMapping{T,K,D}) where {T,R,K,D} = TensorMappingComposition(s,t)
 
-function range_size(tm::TensorMappingComposition{T,R,K,D}, domain_size::NTuple{D,Integer}) where {T,R,D}
+function range_size(tm::TensorMappingComposition{T,R,K,D}, domain_size::NTuple{D,Integer}) where {T,R,K,D}
 	range_size(tm.t1, domain_size(tm.t2, domain_size))
 end
 
-function domain_size(tm::TensorMappingComposition{T,R,K,D}, range_size::NTuple{R,Integer}) where {T,R,D}
+function domain_size(tm::TensorMappingComposition{T,R,K,D}, range_size::NTuple{R,Integer}) where {T,R,K,D}
 	domain_size(tm.t1, domain_size(tm.t2, range_size))
 end