annotate TensorMappings.jl @ 178:64b9751b3cb2 boundary_conditions

Fix error in getindex for TensorApplicationExpression
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 17 Jun 2019 10:41:20 +0200
parents 24779d423243
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 module TensorMappings
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 # Needs a better name ImplicitTensorMappings? Get rid of "Tensor" in the name_
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 abstract type TensorMapping{T,R,D} end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 range_dim(::TensorMapping{T,R,D}) where {T,R,D} = R
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 domain_dim(::TensorMapping{T,R,D}) where {T,R,D} = D
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
8 # range_size(::TensorMapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D}
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
9 # domain_size(::TensorMapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D}
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 # apply(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} =
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 # apply_transpose(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} =
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
13 # Implementing apply_transpose and domain_size is only needed if you want to take transposes of the TensorMapping.
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
14 # TODO: Think about boundschecking!
158
a3fac8298e3c Add domain_size() method
Jonatan Werpers <jonatan@werpers.com>
parents: 157
diff changeset
15
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
16 abstract type TensorOperator{T,D} <: TensorMapping{T,D,D} end
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
17 domain_size(::TensorOperator{T,D}, range_size::NTuple{D,Integer}) where {T,D} = range_size
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
18 range_size(::TensorOperator{T,D}, domain_size::NTuple{D,Integer}) where {T,D} = domain_size
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 # Allow using the ' operator:
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 struct TensorMappingTranspose{T,R,D} <: TensorMapping{T,D,R}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 tm::TensorMapping{T,R,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
27 Base.adjoint(t::TensorMapping) = TensorMappingTranspose(t)
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
28 # TBD: Should this be implemented on a type by type basis or through a trait to provide earlier errors?
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 Base.adjoint(t::TensorMappingTranspose) = t.tm
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 apply(tm::TensorMappingTranspose{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {T,R,D} = apply_transpose(tm.tm, v, I...)
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 apply_transpose(tm::TensorMappingTranspose{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,D} = apply(tm.tm, v, I...)
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
34 range_size(tmt::TensorMappingTranspose{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} = domain_size(tmt.tm, domain_size)
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
35 domain_size(tmt::TensorMappingTranspose{T,R,D}, range_size::NTuple{D,Integer}) where {T,R,D} = range_size(tmt.tm, range_size)
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
157
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
37
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
38
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 struct TensorApplication{T,R,D} <: AbstractArray{T,R}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 t::TensorMapping{R,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 o::AbstractArray{T,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
44 Base.size(ta::TensorApplication{T,R,D}) where {T,R,D} = range_size(ta.t,size(ta.o))
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
45 Base.getindex(ta::TensorApplication{T,R,D}, I::Vararg) where {T,R,D} = apply(ta.t, ta.o, I...)
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
46 # TODO: What else is needed to implement the AbstractArray interface?
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
47 import Base.*
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
48 →(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(tm,o)
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 # Should we overload some other infix binary operator?
160
d33b13d2d92b Move things around in TensorMappings and improve the comments
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
50 # We need the associativity to be a→b→c = a→(b→c), which is the case for '→'
157
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
51 *(args::Union{TensorMapping{T}, AbstractArray{T}}...) where T = foldr(*,args)
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
52 *(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplication(tm,o)
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
53 *(scalar, ta::TensorApplication{T,R,D}) where {T,R,D} = scalar*ta.o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
54 *(ta::TensorApplication{T,R,D}, scalar::Number) where {T,R,D} = scalar*ta
157
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
55 # We need to be really careful about good error messages.
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
56 # For example what happens if you try to multiply TensorApplication with a TensorMapping(wrong order)?
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
57
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
58 # NOTE: TensorApplicationExpressions attempt to handle the situation when a TensorMapping
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
59 # acts on a TensorApplication +- AbstractArray, such that the expression still can be
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
60 # evaluated lazily per index.
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
61 # TODO: Better naming of both struct and members
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
62 # Since this is a lower layer which shouldnt be exposed, my opinion is that
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
63 # we can afford to be quite verbose.
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
64 struct TensorApplicationExpression{T,R,D} <: AbstractArray{T,R}
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
65 ta::TensorApplication{R,D}
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
66 o::AbstractArray{T,D}
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
67 end
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
68 Base.size(tae::TensorApplicationExpression) = size(tae.ta) #TODO: Not sure how to handle this
178
64b9751b3cb2 Fix error in getindex for TensorApplicationExpression
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 176
diff changeset
69 Base.getindex(tae::TensorApplicationExpression, I::Vararg) = tae.ta[I...] + tae.o[I...]
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
70 import Base.+
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
71 import Base.-
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
72 +(ta::TensorApplication{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = TensorApplicationExpression(ta,o)
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
73 +(o::AbstractArray{T,D},ta::TensorApplication{T,R,D}) where {T,R,D} = ta + o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
74 -(ta::TensorApplication{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = ta + -o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
75 -(o::AbstractArray{T,D},ta::TensorApplication{T,R,D}) where {T,R,D} = -ta + o
157
63b495d5dbc7 Add *-operator for tensor application
Jonatan Werpers <jonatan@werpers.com>
parents: 156
diff changeset
76
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
77 # NOTE: Another (quite neat) way to handle lazy evaluation of
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
78 # TensorApplication + AbstractArray is by using broadcasting.
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
79 # However, with the drafted implementation below a
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
80 # TensorApplication+AbstractArray now results in a generic function and we would
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
81 # then need to define TensorMapping*generic function which does not seem like a
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
82 # good idea.
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
83 # NOTE: Could one use MappedArrays.jl instead?
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
84 #
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
85 # # Lazy evaluations of expressions on TensorApplications
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
86 # # TODO: Need to decide on some good naming here.
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
87 # +(ta::TensorApplication,o::AbstractArray) = I -> ta[I] + o[I]
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
88 # +(o::AbstractArray,ta::TensorApplication) = ta+o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
89 # *(scalar::Number,ta::TensorApplication) = I -> scalar*ta[I]
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
90 # *(ta::TensorApplication,scalar::Number) = scalar*ta
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
91 # -(ta::TensorApplication,o::AbstractArray) = ta + -o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
92 # -(o::AbstractArray + ta::TensorApplication) = -ta + o
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
93
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
94 struct TensorMappingComposition{T,R,K,D} <: TensorMapping{T,R,D} where K<:typeof(R)
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 t1::TensorMapping{T,R,K}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 t2::TensorMapping{T,K,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99 import Base.∘
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100 ∘(s::TensorMapping{T,R,K}, t::TensorMapping{T,K,D}) where {T,R,K,D} = TensorMappingComposition(s,t)
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
102 function range_size(tm::TensorMappingComposition{T,R,K,D}, domain_size::NTuple{D,Integer}) where {T,R,K,D}
161
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
103 range_size(tm.t1, domain_size(tm.t2, domain_size))
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
104 end
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
105
176
24779d423243 Attempt to handle TensorMappings acting on expressions of TensorApplications and AbstractArrays
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 163
diff changeset
106 function domain_size(tm::TensorMappingComposition{T,R,K,D}, range_size::NTuple{R,Integer}) where {T,R,K,D}
161
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
107 domain_size(tm.t1, domain_size(tm.t2, range_size))
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
108 end
ea01b5550ff6 Add some missing methods in TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
109
155
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 function apply(c::TensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 apply(c.t1, TensorApplication(c.t2,v), I...)
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 function apply_transpose(c::TensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D}
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 apply_transpose(c.t2, TensorApplication(c.t1',v), I...)
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 end
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 # Have i gone too crazy with the type parameters? Maybe they aren't all needed?
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121 export apply
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 export apply_transpose
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 export range_dim
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124 export domain_dim
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 export range_size
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
126 export →
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
127
9fdbae11dd77 Add sketch of how Implicitly definied tensor mappings might work
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
128
163
766403c677b1 Add comment and sketch for automatic dimension expansion
Jonatan Werpers <jonatan@werpers.com>
parents: 162
diff changeset
129 # # Automatic dimension expansion?
766403c677b1 Add comment and sketch for automatic dimension expansion
Jonatan Werpers <jonatan@werpers.com>
parents: 162
diff changeset
130 # struct TensorOperator1dAd2d{T,I} <: TensorOperator{T,2}
766403c677b1 Add comment and sketch for automatic dimension expansion
Jonatan Werpers <jonatan@werpers.com>
parents: 162
diff changeset
131 # t::TensorOperator{T,1}
766403c677b1 Add comment and sketch for automatic dimension expansion
Jonatan Werpers <jonatan@werpers.com>
parents: 162
diff changeset
132 # end
766403c677b1 Add comment and sketch for automatic dimension expansion
Jonatan Werpers <jonatan@werpers.com>
parents: 162
diff changeset
133
162
be50c5e40121 Add missing newline at end of TensorMappings.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 161
diff changeset
134 end #module