Skip to content

Commit 59c557c

Browse files
authored
Add intersect for Inclusion, lazy adjoints (#61)
* Add intersect for Inclusion, lazy adjoints * v0.4.9 * Array materialize if axes are Base.OneTo
1 parent c599a83 commit 59c557c

File tree

6 files changed

+12
-8
lines changed

6 files changed

+12
-8
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "QuasiArrays"
22
uuid = "c4ea9172-b204-11e9-377d-29865faadc5c"
33
authors = ["Sheehan Olver <solver@mac.com>"]
4-
version = "0.4.8"
4+
version = "0.4.9"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/QuasiArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Base: @_inline_meta, DimOrInd, OneTo, @_propagate_inbounds_meta, @_noinli
1010
index_shape, to_shape, unsafe_length, @nloops, @ncall, unalias, _unaliascopy,
1111
to_index, to_indices, _to_subscript_indices, _splatmap, dataids,
1212
compute_stride1, compute_offset1, fill_to_length
13-
import Base: Slice, IdentityUnitRange, ScalarIndex, RangeIndex, view, viewindexing, ensure_indexable, index_dimsum,
13+
import Base: Slice, IdentityUnitRange, ScalarIndex, RangeIndex, view, viewindexing, mightalias, ensure_indexable, index_dimsum,
1414
check_parent_index_match, reindex, _isdisjoint, unsafe_indices, _unsafe_ind2sub,
1515
_ind2sub, _sub2ind, _ind2sub_recurse, _lookup, SubArray,
1616
parentindices, reverse, ndims, checkbounds, uncolon,

src/indices.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ in(x, S::Inclusion) = x in S.domain
189189
Base.issubset(S::Inclusion, d) = S.domain d
190190
Base.issubset(S::Inclusion, d::Inclusion) = S.domain d.domain
191191

192+
intersect(x::Inclusion...) = Inclusion{mapreduce(eltype,promote_type,x)}(intersect(map(domain,x)...))
193+
# use UnionDomain to support intervals
194+
union(x::Inclusion...) = Inclusion{mapreduce(eltype,promote_type,x)}(UnionDomain(map(domain,x)...))
195+
192196
checkindex(::Type{Bool}, inds::Inclusion{T}, i::T) where T = i inds
193197
checkindex(::Type{Bool}, inds::Inclusion, i) = i inds
194198
checkindex(::Type{Bool}, inds::Inclusion, ::Colon) = true

src/lazyquasiarrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ struct QuasiLazyLayout <: AbstractLazyLayout end
2525
MemoryLayout(::Type{<:LazyQuasiArray}) = QuasiLazyLayout()
2626
lazymaterialize(F, args::Union{AbstractQuasiArray,AbstractArray}...) = copy(ApplyQuasiArray(F, args...))
2727
concretize(A::AbstractQuasiArray) = convert(QuasiArray, A)
28-
28+
transposelayout(::QuasiLazyLayout) = QuasiLazyLayout()
2929

3030
# Inclusions are left lazy. This could be refined to only be the case where the cardinality is infinite
3131
BroadcastStyle(::Type{<:Inclusion}) = LazyQuasiArrayStyle{1}()

src/matmul.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ end
9090
struct QuasiArrayLayout <: MemoryLayout end
9191
MemoryLayout(::Type{<:AbstractQuasiArray}) = QuasiArrayLayout()
9292

93-
copy(M::Mul{QuasiArrayLayout,QuasiArrayLayout}) = QuasiArray(M)
94-
copy(M::Mul{QuasiArrayLayout}) = QuasiArray(M)
95-
copy(M::Mul{<:Any,QuasiArrayLayout}) = QuasiArray(M)
93+
_quasi_mul(M, _) = QuasiArray(M)
94+
_quasi_mul(M, ::NTuple{N,OneTo{Int}}) where N = Array(QuasiArray(M))
95+
copy(M::Mul{QuasiArrayLayout,QuasiArrayLayout}) = _quasi_mul(M, axes(M))
96+
copy(M::Mul{QuasiArrayLayout}) = _quasi_mul(M, axes(M))
97+
copy(M::Mul{<:Any,QuasiArrayLayout}) = _quasi_mul(M, axes(M))
9698
copy(M::Mul{<:AbstractLazyLayout,QuasiArrayLayout}) = ApplyQuasiArray(M)
9799
copy(M::Mul{ApplyLayout{typeof(\)},QuasiArrayLayout}) = ApplyQuasiArray(M)
98100
copy(M::Mul{QuasiArrayLayout,<:AbstractLazyLayout}) = ApplyQuasiArray(M)

src/quasiconcat.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ function getindex(f::ApplyQuasiMatrix{T,typeof(hcat)}, k::Number, j::Number) whe
1717
throw(BoundsError(f, (k,j)))
1818
end
1919

20-
union(x::Inclusion...) = Inclusion{mapreduce(eltype,promote_type,x)}(UnionDomain(map(domain,x)...))
21-
2220
"""
2321
UnionVcat
2422

0 commit comments

Comments
 (0)