Mercurial > repos > public > sbplib_julia
comparison src/RegionIndices/RegionIndices.jl @ 2057:8a2a0d678d6f feature/lazy_tensors/pretty_printing
Merge default
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Tue, 10 Feb 2026 22:41:19 +0100 |
| parents | 3ada7e9be4d6 |
| children |
comparison
equal
deleted
inserted
replaced
| 1110:c0bff9f6e0fb | 2057:8a2a0d678d6f |
|---|---|
| 11 i::T | 11 i::T |
| 12 | 12 |
| 13 Index{R,T}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) | 13 Index{R,T}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) |
| 14 Index{R}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) | 14 Index{R}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) |
| 15 Index(i::T, ::Type{R}) where {R<:Region,T<:Integer} = Index{R,T}(i) | 15 Index(i::T, ::Type{R}) where {R<:Region,T<:Integer} = Index{R,T}(i) |
| 16 Index(t::Tuple{T, DataType}) where {R<:Region,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? | 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? |
| 17 end | 17 end |
| 18 | 18 |
| 19 export Index | 19 export Index |
| 20 | 20 |
| 21 # Index(R::Type{<:Region}) = Index{R} | 21 # Index(R::Type{<:Region}) = Index{R} |
| 23 ## Vill kunna skriva | 23 ## Vill kunna skriva |
| 24 ## IndexTupleType(Int, (Lower, Interior)) | 24 ## IndexTupleType(Int, (Lower, Interior)) |
| 25 Index(R::Type{<:Region}, T::Type{<:Integer}) = Index{R,T} | 25 Index(R::Type{<:Region}, T::Type{<:Integer}) = Index{R,T} |
| 26 IndexTupleType(T::Type{<:Integer},R::NTuple{N, DataType} where N) = Tuple{Index.(R, T)...} | 26 IndexTupleType(T::Type{<:Integer},R::NTuple{N, DataType} where N) = Tuple{Index.(R, T)...} |
| 27 | 27 |
| 28 Base.convert(::Type{T}, i::Index{R,T} where R) where T = i.i | 28 Base.convert(::Type{T}, i::Index{R,T} where R) where T <: Integer = i.i |
| 29 Base.convert(::Type{CartesianIndex}, I::NTuple{N,Index} where N) = CartesianIndex(convert.(Int, I)) | 29 Base.convert(::Type{CartesianIndex}, I::NTuple{N,Index} where N) = CartesianIndex(convert.(Int, I)) |
| 30 | 30 |
| 31 Base.Int(I::Index) = I.i | 31 Base.Int(I::Index) = I.i |
| 32 Base.to_index(I::Index) = Int(I) #How to get this to work for all cases?? | 32 Base.to_index(I::Index) = Int(I) #How to get this to work for all cases?? |
| 33 Base.getindex(A::AbstractArray{T,N}, I::NTuple{N,Index}) where {T,N} = A[I...] #Is this ok?? | |
| 34 | 33 |
| 35 function Index(i::Integer, boundary_width::Integer, dim_size::Integer) | 34 function Index(i::Integer, boundary_width::Integer, dim_size::Integer) |
| 36 return Index{getregion(i,boundary_width,dim_size)}(i) | 35 return Index{getregion(i,boundary_width,dim_size)}(i) |
| 37 end | 36 end |
| 38 | 37 |
| 39 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) | 38 IndexTuple(t::Vararg{Tuple{Integer, DataType}}) = Index.(t) |
| 40 export IndexTuple | 39 export IndexTuple |
| 41 | 40 |
| 42 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types. | 41 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types. |
| 43 # For example the following works: | 42 # For example the following works: |
| 44 # (Lower(),Upper()) isa NTuple{2, Region} -> true | 43 # (Lower(),Upper()) isa NTuple{2, Region} -> true |
