annotate src/RegionIndices/RegionIndices.jl @ 1639:61aacc51d38a bugfix/warnings

Remove unused type parameter for method on Index
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 25 Jun 2024 15:47:05 +0200
parents 49d03d1169ef
children aba2ce166546
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
214
08b07c6eeec7 Move index.jl to its own package
Jonatan Werpers <jonatan@werpers.com>
parents: 165
diff changeset
1 module RegionIndices
08b07c6eeec7 Move index.jl to its own package
Jonatan Werpers <jonatan@werpers.com>
parents: 165
diff changeset
2
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 abstract type Region end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 struct Interior <: Region end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 struct Lower <: Region end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 struct Upper <: Region end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
542
011ca1639153 Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents: 334
diff changeset
8 export Region, Interior, Lower, Upper
218
03375aa30edd Add Tests and exports to RegionIndices
Jonatan Werpers <jonatan@werpers.com>
parents: 214
diff changeset
9
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 struct Index{R<:Region, T<:Integer}
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 i::T
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 Index{R,T}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i)
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 Index{R}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i)
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 Index(i::T, ::Type{R}) where {R<:Region,T<:Integer} = Index{R,T}(i)
1639
61aacc51d38a Remove unused type parameter for method on Index
Jonatan Werpers <jonatan@werpers.com>
parents: 1356
diff changeset
16 Index(t::Tuple{T, DataType}) where T<:Integer = Index{t[2],T}(t[1]) # TBD: This is not very specific in what types are allowed in t[2]. Can this be fixed?
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18
218
03375aa30edd Add Tests and exports to RegionIndices
Jonatan Werpers <jonatan@werpers.com>
parents: 214
diff changeset
19 export Index
03375aa30edd Add Tests and exports to RegionIndices
Jonatan Werpers <jonatan@werpers.com>
parents: 214
diff changeset
20
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 # Index(R::Type{<:Region}) = Index{R}
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 ## Vill kunna skriva
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 ## IndexTupleType(Int, (Lower, Interior))
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 Index(R::Type{<:Region}, T::Type{<:Integer}) = Index{R,T}
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 IndexTupleType(T::Type{<:Integer},R::NTuple{N, DataType} where N) = Tuple{Index.(R, T)...}
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 Base.convert(::Type{T}, i::Index{R,T} where R) where T = i.i
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 Base.convert(::Type{CartesianIndex}, I::NTuple{N,Index} where N) = CartesianIndex(convert.(Int, I))
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 Base.Int(I::Index) = I.i
274
11010bb74260 Dispatch getindex for TensorMappingApplication on region indices. Dispatch apply
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 240
diff changeset
32 Base.to_index(I::Index) = Int(I) #How to get this to work for all cases??
277
21e5c1dd6794 Add getindex-function for region indices. Update LazyArray tests. NOTE: Not sure if this is the way to go.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 274
diff changeset
33 Base.getindex(A::AbstractArray{T,N}, I::NTuple{N,Index}) where {T,N} = A[I...] #Is this ok??
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 function Index(i::Integer, boundary_width::Integer, dim_size::Integer)
165
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
36 return Index{getregion(i,boundary_width,dim_size)}(i)
96
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 end
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38
0743e1247384 Add Index type for keeping track of regions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t)
218
03375aa30edd Add Tests and exports to RegionIndices
Jonatan Werpers <jonatan@werpers.com>
parents: 214
diff changeset
40 export IndexTuple
103
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
41
144
ce56727e4232 Add TODO for switch to using Region values in some places
Jonatan Werpers <jonatan@werpers.com>
parents: 123
diff changeset
42 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types.
ce56727e4232 Add TODO for switch to using Region values in some places
Jonatan Werpers <jonatan@werpers.com>
parents: 123
diff changeset
43 # For example the following works:
ce56727e4232 Add TODO for switch to using Region values in some places
Jonatan Werpers <jonatan@werpers.com>
parents: 123
diff changeset
44 # (Lower(),Upper()) isa NTuple{2, Region} -> true
ce56727e4232 Add TODO for switch to using Region values in some places
Jonatan Werpers <jonatan@werpers.com>
parents: 123
diff changeset
45 # typeof((Lower(),Upper())) -> Tuple{Lower,Upper}
103
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
46 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::Integer, region::NTuple{Dim,DataType}) where Dim
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
47 return regionindices(gridsize, ntuple(x->closuresize,Dim), region)
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
48 end
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
49
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
50 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim
120
ebddd2a3a520 Rename getunitrange to getrange and change signature to be more specific
Jonatan Werpers <jonatan@werpers.com>
parents: 103
diff changeset
51 regions = map(getrange,gridsize,closuresize,region)
103
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
52 return CartesianIndices(regions)
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
53 end
a274d6384e91 Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 98
diff changeset
54
223
b3506cfbb9d8 Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents: 218
diff changeset
55 export regionindices
b3506cfbb9d8 Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents: 218
diff changeset
56
165
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
57 function getregion(i::Integer, boundary_width::Integer, dim_size::Integer)
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
58 if 0 < i <= boundary_width
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
59 return Lower
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
60 elseif boundary_width < i <= dim_size-boundary_width
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
61 return Interior
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
62 elseif dim_size-boundary_width < i <= dim_size
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
63 return Upper
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
64 else
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
65 error("Bounds error") # TODO: Make this more standard
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
66 end
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
67 end
9fc9167e9a4c Factor out function for geting the region of an index
Jonatan Werpers <jonatan@werpers.com>
parents: 144
diff changeset
68
240
6bce42abf43d Export getregion
Jonatan Werpers <jonatan@werpers.com>
parents: 223
diff changeset
69 export getregion
6bce42abf43d Export getregion
Jonatan Werpers <jonatan@werpers.com>
parents: 223
diff changeset
70
123
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
71 function getrange(gridsize::Integer, closuresize::Integer, region::DataType)
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
72 if region == Lower
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
73 r = 1:closuresize
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
74 elseif region == Interior
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
75 r = (closuresize+1):(gridsize - closuresize)
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
76 elseif region == Upper
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
77 r = (gridsize - closuresize + 1):gridsize
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
78 else
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
79 error("Unspecified region")
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
80 end
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
81 return r
5df4ccb19476 Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Jonatan Werpers <jonatan@werpers.com>
parents: 121
diff changeset
82 end
214
08b07c6eeec7 Move index.jl to its own package
Jonatan Werpers <jonatan@werpers.com>
parents: 165
diff changeset
83
08b07c6eeec7 Move index.jl to its own package
Jonatan Werpers <jonatan@werpers.com>
parents: 165
diff changeset
84 end # module