Mercurial > repos > public > sbplib_julia
comparison src/LazyTensors/tensor_mapping.jl @ 333:01b851161018 refactor/combine_to_one_package
Start converting to one package by moving all the files to their correct location
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 25 Sep 2020 13:06:02 +0200 |
parents | LazyTensors/src/tensor_mapping.jl@e21dcda55163 |
children | 7fe43d902a27 |
comparison
equal
deleted
inserted
replaced
332:535f1bff4bcc | 333:01b851161018 |
---|---|
1 """ | |
2 TensorMapping{T,R,D} | |
3 | |
4 Describes a mapping of a D dimension tensor to an R dimension tensor. | |
5 The action of the mapping is implemented through the method | |
6 | |
7 apply(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} | |
8 | |
9 The size of range tensor should be dependent on the size of the domain tensor | |
10 and the type should implement the methods | |
11 | |
12 range_size(::TensorMapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} | |
13 domain_size(::TensorMapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D} | |
14 | |
15 to allow querying for one or the other. | |
16 | |
17 Optionally the action of the transpose may be defined through | |
18 apply_transpose(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} | |
19 """ | |
20 abstract type TensorMapping{T,R,D} end | |
21 export TensorMapping | |
22 | |
23 """ | |
24 apply(t::TensorMapping{T,R,D}, v::AbstractArray{T,D}, I::Vararg) where {R,D,T} | |
25 | |
26 Return the result of the mapping for a given index. | |
27 """ | |
28 function apply end | |
29 export apply | |
30 | |
31 """ | |
32 apply_transpose(t::TensorMapping{T,R,D}, v::AbstractArray{T,R}, I::Vararg) where {R,D,T} | |
33 | |
34 Return the result of the transposed mapping for a given index. | |
35 """ | |
36 function apply_transpose end | |
37 export apply_transpose | |
38 | |
39 """ | |
40 Return the dimension of the range space of a given mapping | |
41 """ | |
42 range_dim(::TensorMapping{T,R,D}) where {T,R,D} = R | |
43 | |
44 """ | |
45 Return the dimension of the domain space of a given mapping | |
46 """ | |
47 domain_dim(::TensorMapping{T,R,D}) where {T,R,D} = D | |
48 | |
49 export range_dim, domain_dim | |
50 | |
51 """ | |
52 range_size(M::TensorMapping, domain_size) | |
53 | |
54 Return the resulting range size for the mapping applied to a given domain_size | |
55 """ | |
56 function range_size end | |
57 | |
58 """ | |
59 domain_size(M::TensorMapping, range_size) | |
60 | |
61 Return the resulting domain size for the mapping applied to a given range_size | |
62 """ | |
63 function domain_size end | |
64 | |
65 """ | |
66 Dummy type for representing dimensions of tensormappings when domain_size is unknown | |
67 """ | |
68 struct UnknownDim end | |
69 export range_size, domain_size, TensorMappingDim, UnknownDim | |
70 | |
71 # TODO: Think about boundschecking! | |
72 | |
73 | |
74 """ | |
75 TensorOperator{T,D} | |
76 | |
77 A `TensorMapping{T,D,D}` where the range and domain tensor have the same number of | |
78 dimensions and the same size. | |
79 """ | |
80 abstract type TensorOperator{T,D} <: TensorMapping{T,D,D} end | |
81 export TensorOperator | |
82 domain_size(::TensorOperator{T,D}, range_size::NTuple{D,Integer}) where {T,D} = range_size | |
83 range_size(::TensorOperator{T,D}, domain_size::NTuple{D,Integer}) where {T,D} = domain_size |