Skip to content

Commit 5352af9

Browse files
committed
Add type-stable first and last
1 parent 67d3602 commit 5352af9

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

src/array_partition.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ Base.done(A::ArrayPartition,state) = done(Chain(A.x),state)
195195
Base.length(A::ArrayPartition) = sum((length(x) for x in A.x))
196196
Base.size(A::ArrayPartition) = (length(A),)
197197

198+
# redefine first and last to avoid slow and not type-stable indexing
199+
Base.first(A::ArrayPartition) = first(first(A.x))
200+
Base.last(A::ArrayPartition) = last(last(A.x))
201+
198202
## display
199203

200204
# restore the type rendering in Juno

test/partitions_test.jl

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,40 @@ K = (*).(p,p2)
2929
x = ArrayPartition([1, 2], [3.0, 4.0])
3030

3131
# similar partitions
32-
@inferred(similar(x))
33-
@inferred(similar(x, (2, 2)))
34-
@inferred(similar(x, Int))
35-
@inferred(similar(x, Int, (2, 2)))
36-
@inferred(similar(x, Int, Float64))
32+
@inferred similar(x)
33+
@inferred similar(x, (2, 2))
34+
@inferred similar(x, Int)
35+
@inferred similar(x, Int, (2, 2))
36+
@inferred similar(x, Int, Float64)
3737

3838
# zeros
39-
@inferred(zeros(x))
40-
@inferred(zeros(x, (2,2)))
39+
@inferred zeros(x)
40+
@inferred zeros(x, (2,2))
41+
@inferred zero(x)
4142

4243
# ones
43-
@inferred(ones(x))
44-
@inferred(ones(x, (2,2)))
44+
@inferred ones(x)
45+
@inferred ones(x, (2,2))
4546

4647
# vector space calculations
47-
@inferred(x+5)
48-
@inferred(5+x)
49-
@inferred(x-5)
50-
@inferred(5-x)
51-
@inferred(x*5)
52-
@inferred(5*x)
53-
@inferred(x/5)
54-
@inferred(5\x)
55-
@inferred(x+x)
56-
@inferred(x-x)
48+
@inferred x+5
49+
@inferred 5+x
50+
@inferred x-5
51+
@inferred 5-x
52+
@inferred x*5
53+
@inferred 5*x
54+
@inferred x/5
55+
@inferred 5\x
56+
@inferred x+x
57+
@inferred x-x
58+
59+
# indexing
60+
@inferred first(x)
61+
@inferred last(x)
5762

5863
# broadcasting
5964
_scalar_op(y) = y + 1
6065
# Can't do `@inferred(_scalar_op.(x))` so we wrap that in a function:
6166
_broadcast_wrapper(y) = _scalar_op.(y)
6267
# Issue #8
63-
@inferred(_broadcast_wrapper(x))
68+
@inferred _broadcast_wrapper(x)

0 commit comments

Comments
 (0)