Mercurial > repos > public > sbplib_julia
annotate LazyTensors/src/LazyTensors.jl @ 186:715ff09bb2ce boundary_conditions
Rename and export types in LazyTensors follow julia conventions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 20 Jun 2019 21:31:15 +0200 |
parents | 6945c15a6a7a |
children | 8964b3165097 |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
5 TensorMapping{T,R,D} |
180
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 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
10 apply(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} |
180
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 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
15 range_size(::TensorMapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
16 domain_size(::TensorMapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D} |
180
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 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
21 apply_transpose(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
23 abstract type TensorMapping{T,R,D} end |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
24 export TensorMapping |
180
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
27 apply(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 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
|
30 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 function apply end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 export apply |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
35 apply_transpose(t::TensorMapping{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {R,D,T} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 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
|
38 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 function apply_transpose end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 export apply_transpose |
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 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 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
|
44 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
45 range_dim(::TensorMapping{T,R,D}) where {T,R,D} = R |
180
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 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 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
|
49 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
50 domain_dim(::TensorMapping{T,R,D}) where {T,R,D} = D |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 export range_dim, domain_dim |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
55 range_size(M::TensorMapping, domain_size) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 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
|
58 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 function range_size end |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
62 domain_size(M::TensorMapping, range_size) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 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
|
65 """ |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 function domain_size end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 export range_size, domain_size |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
69 # TODO: Think about boundschecking! |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
73 TensorOperator{T,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
74 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
75 A `TensorMapping{T,D,D}` where the range and domain tensor have the same number of |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 dimensions and the same size. |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
77 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
78 abstract type TensorOperator{T,D} <: TensorMapping{T,D,D} end |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
79 export TensorOperator |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
80 domain_size(::TensorOperator{T,D}, range_size::NTuple{D,Integer}) where {T,D} = range_size |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
81 range_size(::TensorOperator{T,D}, domain_size::NTuple{D,Integer}) where {T,D} = domain_size |
180
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 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
86 LazyTensorMappingTranspose{T,R,D} <: TensorMapping{T,D,R} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
87 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
88 Struct for lazy transpose of a TensorMapping. |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
89 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
90 If a mapping implements the the `apply_transpose` method this allows working with |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
91 the transpose of mapping `m` by using `m'`. `m'` will work as a regular TensorMapping lazily calling |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
92 the appropriate methods of `m`. |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
93 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
94 struct LazyTensorMappingTranspose{T,R,D} <: TensorMapping{T,D,R} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
95 tm::TensorMapping{T,R,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
96 end |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
97 export LazyTensorMappingTranspose |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
98 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
99 # # TBD: Should this be implemented on a type by type basis or through a trait to provide earlier errors? |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
100 Base.adjoint(t::TensorMapping) = LazyTensorMappingTranspose(t) |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
101 Base.adjoint(t::LazyTensorMappingTranspose) = t.tm |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
103 apply(tm::LazyTensorMappingTranspose{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {T,R,D} = apply_transpose(tm.tm, v, I...) |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
104 apply_transpose(tm::LazyTensorMappingTranspose{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,D} = apply(tm.tm, v, I...) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
105 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
106 range_size(tmt::LazyTensorMappingTranspose{T,R,D}, d_size::NTuple{R,Integer}) where {T,R,D} = domain_size(tmt.tm, domain_size) |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
107 domain_size(tmt::LazyTensorMappingTranspose{T,R,D}, r_size::NTuple{D,Integer}) where {T,R,D} = range_size(tmt.tm, range_size) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
108 |
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 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
111 LazyTensorMappingApplication{T,R,D} <: AbstractArray{T,R} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
112 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
113 Struct for lazy application of a TensorMapping. Created using `*`. |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
114 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
115 Allows the result of a `TensorMapping` applied to a vector to be treated as an `AbstractArray`. |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
116 With a mapping `m` and a vector `v` the LazyTensorMappingApplication object can be created by `m*v`. |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
117 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
|
118 """ |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
119 struct LazyTensorMappingApplication{T,R,D} <: AbstractArray{T,R} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
120 t::TensorMapping{T,R,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
121 o::AbstractArray{T,D} |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
122 end |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
123 export LazyTensorMappingApplication |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
124 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
125 Base.:*(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = LazyTensorMappingApplication(tm,o) |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
126 |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
127 Base.getindex(ta::LazyTensorMappingApplication{T,R,D}, I::Vararg) where {T,R,D} = apply(ta.t, ta.o, I...) |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
128 Base.size(ta::LazyTensorMappingApplication{T,R,D}) where {T,R,D} = range_size(ta.t,size(ta.o)) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
129 # 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
|
130 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
131 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
132 # # We need the associativity to be a→b→c = a→(b→c), which is the case for '→' |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
133 Base.:*(args::Union{TensorMapping{T}, AbstractArray{T}}...) where T = foldr(*,args) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
134 # # Should we overload some other infix binary operator? |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
135 # →(tm::TensorMapping{T,R,D}, o::AbstractArray{T,D}) where {T,R,D} = LazyTensorMappingApplication(tm,o) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
136 # TODO: We need to be really careful about good error messages. |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
137 # For example what happens if you try to multiply LazyTensorMappingApplication with a TensorMapping(wrong order)? |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
138 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
139 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
140 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
141 # struct LazyTensorMappingComposition{T,R,K,D} <: TensorMapping{T,R,D} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
142 # t1::TensorMapping{T,R,K} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
143 # t2::TensorMapping{T,K,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
144 # end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
145 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
146 # Base.:∘(s::TensorMapping{T,R,K}, t::TensorMapping{T,K,D}) where {T,R,K,D} = LazyTensorMappingComposition(s,t) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
147 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
148 # function range_size(tm::LazyTensorMappingComposition{T,R,K,D}, domain_size::NTuple{D,Integer}) where {T,R,K,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
149 # 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
|
150 # end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
151 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
152 # function domain_size(tm::LazyTensorMappingComposition{T,R,K,D}, range_size::NTuple{R,Integer}) where {T,R,K,D} |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
153 # 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
|
154 # end |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
155 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
156 # function apply(c::LazyTensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
157 # apply(c.t1, LazyTensorMappingApplication(c.t2,v), I...) |
180
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 |
186
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
160 # function apply_transpose(c::LazyTensorMappingComposition{T,R,K,D}, v::AbstractArray{T,D}, I::Vararg) where {T,R,K,D} |
715ff09bb2ce
Rename and export types in LazyTensors follow julia conventions
Jonatan Werpers <jonatan@werpers.com>
parents:
184
diff
changeset
|
161 # apply_transpose(c.t2, LazyTensorMappingApplication(c.t1',v), I...) |
180
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
162 # end |
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 # # 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
|
165 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
166 # export → |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
167 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
168 |
b7397ae8afaf
Move tensor mappings to a package LazyTensor
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
169 end # module |