annotate LazyTensors/src/LazyTensors.jl @ 184:6945c15a6a7a boundary_conditions

Rename package LazyTensor to LazyTensors
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 20 Jun 2019 21:14:20 +0200
parents LazyTensor/src/LazyTensor.jl@b7397ae8afaf
children 715ff09bb2ce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
184
6945c15a6a7a Rename package LazyTensor to LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents: 180
diff changeset
1 module LazyTensors
180
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 Mapping{T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 Describes a mapping of a D dimension tensor to an R dimension tensor.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 The action of the mapping is implemented through the method
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 apply(t::Mapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 The size of range tensor should be dependent on the size of the domain tensor
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 and the type should implement the methods
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 range_size(::Mapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 domain_size(::Mapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 to allow querying for one or the other.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 Optionally the action of the transpose may be defined through
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 apply_transpose(t::Mapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 abstract type Mapping{T,R,D} end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 apply(t::Mapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 Return the result of the mapping for a given index.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 function apply end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 export apply
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 apply_transpose(t::Mapping{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {R,D,T}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 Return the result of the transposed mapping for a given index.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 function apply_transpose end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 export apply_transpose
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 Return the dimension of the range space of a given mapping
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 range_dim(::Mapping{T,R,D}) where {T,R,D} = R
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 Return the dimension of the domain space of a given mapping
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 domain_dim(::Mapping{T,R,D}) where {T,R,D} = D
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 export range_dim, domain_dim
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 range_size(M::Mapping, domain_size)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 Return the resulting range size for the mapping applied to a given domain_size
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 function range_size end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 domain_size(M::Mapping, range_size)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 Return the resulting domain size for the mapping applied to a given range_size
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 function domain_size end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 export range_size, domain_size
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 # TODO: Think about boundschecking!
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 Operator{T,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 A `Mapping{T,D,D}` where the range and domain tensor have the same number of
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 dimensions and the same size.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 abstract type Operator{T,D} <: Mapping{T,D,D} end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 domain_size(::Operator{T,D}, range_size::NTuple{D,Integer}) where {T,D} = range_size
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 range_size(::Operator{T,D}, domain_size::NTuple{D,Integer}) where {T,D} = domain_size
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 MappingTranspose{T,R,D} <: Mapping{T,D,R}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 Struct for lazy transpose of a Mapping.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 If a mapping implements the the `apply_transpose` method this allows working with
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 the transpose of mapping `m` by using `m'`. `m'` will work as a regular Mapping lazily calling
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 the appropriate methods of `m`.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 struct MappingTranspose{T,R,D} <: Mapping{T,D,R}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 tm::Mapping{T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 # # TBD: Should this be implemented on a type by type basis or through a trait to provide earlier errors?
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 Base.adjoint(t::Mapping) = MappingTranspose(t)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 Base.adjoint(t::MappingTranspose) = t.tm
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100 apply(tm::MappingTranspose{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {T,R,D} = apply_transpose(tm.tm, v, I...)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 apply_transpose(tm::MappingTranspose{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,D} = apply(tm.tm, v, I...)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 range_size(tmt::MappingTranspose{T,R,D}, d_size::NTuple{R,Integer}) where {T,R,D} = domain_size(tmt.tm, domain_size)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104 domain_size(tmt::MappingTranspose{T,R,D}, r_size::NTuple{D,Integer}) where {T,R,D} = range_size(tmt.tm, range_size)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
107 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108 Application{T,R,D} <: AbstractArray{T,R}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 Struct for lazy application of a Mapping. Created using `*`.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 Allows the result of a `Mapping` applied to a vector to be treated as an `AbstractArray`.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 With a mapping `m` and a vector `v` the Application object can be created by `m*v`.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 The actual result will be calcualted when indexing into `m*v`.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 """
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 struct Application{T,R,D} <: AbstractArray{T,R}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117 t::Mapping{T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 o::AbstractArray{T,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119 end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121 Base.:*(tm::Mapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = Application(tm,o)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 Base.getindex(ta::Application{T,R,D}, I::Vararg) where {T,R,D} = apply(ta.t, ta.o, I...)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124 Base.size(ta::Application{T,R,D}) where {T,R,D} = range_size(ta.t,size(ta.o))
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 # TODO: What else is needed to implement the AbstractArray interface?
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
126
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
127
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
128 # # We need the associativity to be a→b→c = a→(b→c), which is the case for '→'
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
129 Base.:*(args::Union{Mapping{T}, AbstractArray{T}}...) where T = foldr(*,args)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
130 # # Should we overload some other infix binary operator?
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
131 # →(tm::Mapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = Application(tm,o)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
132 # TODO: We need to be really careful about good error messages.
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
133 # For example what happens if you try to multiply Application with a Mapping(wrong order)?
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
134
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
135
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
136
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
137 # struct TensorMappingComposition{T,R,K,D} <: Mapping{T,R,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
138 # t1::Mapping{T,R,K}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
139 # t2::Mapping{T,K,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
140 # end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
141
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
142 # Base.:∘(s::Mapping{T,R,K}, t::Mapping{T,K,D}) where {T,R,K,D} = TensorMappingComposition(s,t)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
143
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
144 # function range_size(tm::TensorMappingComposition{T,R,K,D}, domain_size::NTuple{D,Integer}) where {T,R,K,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
145 # range_size(tm.t1, domain_size(tm.t2, domain_size))
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
146 # end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
147
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
148 # function domain_size(tm::TensorMappingComposition{T,R,K,D}, range_size::NTuple{R,Integer}) where {T,R,K,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
149 # domain_size(tm.t1, domain_size(tm.t2, range_size))
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
150 # end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
151
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
152 # function apply(c::TensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
153 # apply(c.t1, Application(c.t2,v), I...)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
154 # end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
155
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
156 # function apply_transpose(c::TensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D}
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
157 # apply_transpose(c.t2, Application(c.t1',v), I...)
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
158 # end
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
159
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
160 # # Have i gone too crazy with the type parameters? Maybe they aren't all needed?
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
161
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
162 # export →
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
163
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
164
b7397ae8afaf Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
165 end # module