1
- using FillArrays, LinearAlgebra, PDMats, SparseArrays, StaticArrays, ReverseDiff, Random, Base64, Test, Statistics, Quaternions
1
+ using FillArrays, LinearAlgebra, PDMats, SparseArrays, StaticArrays, ReverseDiff, Random, Test, Statistics, Quaternions
2
+
2
3
import FillArrays: AbstractFill, RectDiagonal, SquareEye
3
4
4
5
using Documenter
@@ -14,6 +15,8 @@ import .InfiniteArrays
14
15
oneton (T:: Type , sz... ) = reshape (T .(1 : prod (sz)), sz)
15
16
oneton (sz... ) = oneton (Float64, sz... )
16
17
18
+ stringmime (args... ) = sprint (show, args... )
19
+
17
20
@testset " fill array constructors and convert" begin
18
21
for (Typ, funcs) in ((Zeros, zeros), (Ones, ones))
19
22
@test Typ ((- 1 ,5 )) == Typ ((0 ,5 ))
@@ -1640,14 +1643,16 @@ end
1640
1643
1641
1644
@test Fill (2 ,3 )* A ≈ Vector (Fill (2 ,3 ))* A
1642
1645
@test Fill (2 ,0 )* A ≈ Vector (Fill (2 ,0 ))* A
1643
- @test Fill (2 ,3 ,mA)* A ≈ Matrix (Fill (2 ,3 ,mA))* A
1644
- @test Fill (2 ,3 ,la)* a ≈ Matrix (Fill (2 ,3 ,la))* a
1646
+ @test Fill (2 ,3 ,mA)* A ≈ mul! (similar (A, 3 ,nA), Fill (2 ,3 ,mA), A) ≈ Matrix (Fill (2 ,3 ,mA))* A
1647
+ @test Fill (2 ,3 ,la)* a ≈ mul! (similar (a, 3 ), Fill (2 ,3 ,la), a) ≈ Matrix (Fill (2 ,3 ,la))* a
1648
+ @test Fill (2 ,3 ,la)* a isa Fill
1645
1649
@test Ones (3 )* A ≈ Vector (Ones (3 ))* A
1646
- @test Ones (3 ,mA)* A ≈ Matrix (Ones (3 ,mA))* A
1647
- @test Ones (3 ,la)* a ≈ Matrix (Ones (3 ,la))* a
1650
+ @test Ones (3 ,mA)* A ≈ mul! (similar (A, 3 , nA), Ones (3 ,mA), A) ≈ Matrix (Ones (3 ,mA))* A
1651
+ @test Ones (3 ,la)* a ≈ mul! (similar (a, 3 ), Ones (3 ,la), a) ≈ Matrix (Ones (3 ,la))* a
1652
+ @test Ones (3 ,la)* a isa Fill
1648
1653
@test Zeros (3 )* A ≡ Zeros (3 ,nA)
1649
- @test Zeros (3 ,mA)* A == Zeros (3 ,nA)
1650
- @test Zeros (3 ,la)* a == Zeros (3 )
1654
+ @test Zeros (3 ,mA)* A == mul! ( similar (A, 3 , nA), Zeros ( 3 ,mA), A) == Zeros (3 ,nA)
1655
+ @test Zeros (3 ,la)* a == mul! ( similar (A, 3 ), Zeros ( 3 ,la), a) == Zeros (3 )
1651
1656
1652
1657
@test A* Fill (2 ,nA) ≈ A* Vector (Fill (2 ,nA))
1653
1658
@test A* Fill (2 ,nA,1 ) ≈ A* Matrix (Fill (2 ,nA,1 ))
@@ -1669,6 +1674,17 @@ end
1669
1674
1670
1675
@test Zeros (la)' * Transpose (Adjoint (a)) == 0.0
1671
1676
1677
+ F = Fill (2 , mA, 3 )
1678
+ @test transpose (A) * F ≈ transpose (Fill (2 , 3 , mA) * A)
1679
+ F = Fill (2 , la, 3 )
1680
+ FS = Fill (2 , (Base. OneTo (la), SOneTo (3 )))
1681
+ @testset for (adjf, adjT) in ((transpose, Transpose), (adjoint, Adjoint))
1682
+ @test adjf (a) * F ≈ adjf (Fill (2 , 3 , la) * a)
1683
+ @test adjf (a) * F isa adjT{<: Any , <: Fill{<:Any,1} }
1684
+ @test adjf (a) * FS ≈ adjf (Fill (2 , 3 , la) * a)
1685
+ @test axes (adjf (a) * FS, 2 ) == SOneTo (3 )
1686
+ end
1687
+
1672
1688
w = zeros (mA)
1673
1689
@test mul! (w, A, Fill (2 ,nA), true , false ) ≈ A * fill (2 ,nA)
1674
1690
w .= 2
@@ -2148,10 +2164,12 @@ end
2148
2164
@test FillArrays. nzind (A) == CartesianIndex ()
2149
2165
@test A == Fill (2 , ())
2150
2166
@test A[] === 2
2167
+ @test A[1 ] === A[1 ,1 ] === 2
2151
2168
2152
2169
e₁ = OneElement (2 , 5 )
2153
2170
@test e₁ == [0 ,1 ,0 ,0 ,0 ]
2154
2171
@test FillArrays. nzind (e₁) == CartesianIndex (2 )
2172
+ @test e₁[2 ] === e₁[2 ,1 ] === e₁[2 ,1 ,1 ] === 1
2155
2173
@test_throws BoundsError e₁[6 ]
2156
2174
2157
2175
f₁ = AbstractArray {Float64} (e₁)
@@ -2193,6 +2211,89 @@ end
2193
2211
@test A[1 ,1 ] === A[1 ,2 ] === A[2 ,1 ] === zero (S)
2194
2212
end
2195
2213
2214
+ @testset " Vector indexing" begin
2215
+ @testset " 1D" begin
2216
+ A = OneElement (2 , 2 , 4 )
2217
+ @test @inferred (A[:]) === @inferred (A[axes (A)... ]) === A
2218
+ @test @inferred (A[3 : 4 ]) isa OneElement{Int,1 }
2219
+ @test @inferred (A[3 : 4 ]) == Zeros (2 )
2220
+ @test @inferred (A[1 : 2 ]) === OneElement (2 , 2 , 2 )
2221
+ @test @inferred (A[2 : 3 ]) === OneElement (2 , 1 , 2 )
2222
+ @test @inferred (A[Base. IdentityUnitRange (2 : 3 )]) isa OneElement{Int,1 }
2223
+ @test @inferred (A[Base. IdentityUnitRange (2 : 3 )]) == OneElement (2 ,(2 ,),(Base. IdentityUnitRange (2 : 3 ),))
2224
+ @test A[:,:] == reshape (A, size (A)... , 1 )
2225
+
2226
+ @test A[reverse (axes (A,1 ))] == A[collect (reverse (axes (A,1 )))]
2227
+
2228
+ @testset " repeated indices" begin
2229
+ @test A[StepRangeLen (2 , 0 , 3 )] == A[fill (2 , 3 )]
2230
+ end
2231
+
2232
+ B = OneElement (2 , (2 ,), (Base. IdentityUnitRange (- 1 : 4 ),))
2233
+ @test @inferred (A[:]) === @inferred (A[axes (A)... ]) === A
2234
+ @test @inferred (A[3 : 4 ]) isa OneElement{Int,1 }
2235
+ @test @inferred (A[3 : 4 ]) == Zeros (2 )
2236
+ @test @inferred (A[2 : 3 ]) === OneElement (2 , 1 , 2 )
2237
+
2238
+ C = OneElement (2 , (2 ,), (Base. OneTo (big (4 )),))
2239
+ @test @inferred (C[1 : 4 ]) === OneElement (2 , 2 , 4 )
2240
+
2241
+ D = OneElement (2 , (2 ,), (InfiniteArrays. OneToInf (),))
2242
+ D2 = D[:]
2243
+ @test axes (D2) == axes (D)
2244
+ @test D2[2 ] == D[2 ]
2245
+ D3 = D[axes (D)... ]
2246
+ @test axes (D3) == axes (D)
2247
+ @test D3[2 ] == D[2 ]
2248
+ end
2249
+ @testset " 2D" begin
2250
+ A = OneElement (2 , (2 ,3 ), (4 ,5 ))
2251
+ @test @inferred (A[:,:]) === @inferred (A[axes (A)... ]) === A
2252
+ @test @inferred (A[:,1 ]) isa OneElement{Int,1 }
2253
+ @test @inferred (A[:,1 ]) == Zeros (4 )
2254
+ @test A[:, Int64 (1 )] === A[:, Int32 (1 )]
2255
+ @test @inferred (A[1 ,:]) isa OneElement{Int,1 }
2256
+ @test @inferred (A[1 ,:]) == Zeros (5 )
2257
+ @test @inferred (A[:,3 ]) === OneElement (2 , 2 , 4 )
2258
+ @test @inferred (A[2 ,:]) === OneElement (2 , 3 , 5 )
2259
+ @test @inferred (A[1 : 1 ,:]) isa OneElement{Int,2 }
2260
+ @test @inferred (A[1 : 1 ,:]) == Zeros (1 ,5 )
2261
+ @test @inferred (A[4 : 4 ,:]) isa OneElement{Int,2 }
2262
+ @test @inferred (A[4 : 4 ,:]) == Zeros (1 ,5 )
2263
+ @test @inferred (A[2 : 2 ,:]) === OneElement (2 , (1 ,3 ), (1 ,5 ))
2264
+ @test @inferred (A[1 : 4 ,:]) === OneElement (2 , (2 ,3 ), (4 ,5 ))
2265
+ @test @inferred (A[:,3 : 3 ]) === OneElement (2 , (2 ,1 ), (4 ,1 ))
2266
+ @test @inferred (A[:,1 : 5 ]) === OneElement (2 , (2 ,3 ), (4 ,5 ))
2267
+ @test @inferred (A[1 : 4 ,1 : 4 ]) === OneElement (2 , (2 ,3 ), (4 ,4 ))
2268
+ @test @inferred (A[2 : 4 ,2 : 4 ]) === OneElement (2 , (1 ,2 ), (3 ,3 ))
2269
+ @test @inferred (A[2 : 4 ,3 : 4 ]) === OneElement (2 , (1 ,1 ), (3 ,2 ))
2270
+ @test @inferred (A[4 : 4 ,5 : 5 ]) isa OneElement{Int,2 }
2271
+ @test @inferred (A[4 : 4 ,5 : 5 ]) == Zeros (1 ,1 )
2272
+ @test @inferred (A[Base. IdentityUnitRange (2 : 4 ), :]) isa OneElement{Int,2 }
2273
+ @test axes (A[Base. IdentityUnitRange (2 : 4 ), :]) == (Base. IdentityUnitRange (2 : 4 ), axes (A,2 ))
2274
+ @test @inferred (A[:,:,:]) == reshape (A, size (A)... ,1 )
2275
+
2276
+ B = OneElement (2 , (2 ,3 ), (Base. IdentityUnitRange (2 : 4 ),Base. IdentityUnitRange (2 : 5 )))
2277
+ @test @inferred (B[:,:]) === @inferred (B[axes (B)... ]) === B
2278
+ @test @inferred (B[:,3 ]) === OneElement (2 , (2 ,), (Base. IdentityUnitRange (2 : 4 ),))
2279
+ @test @inferred (B[3 : 4 , 4 : 5 ]) isa OneElement{Int,2 }
2280
+ @test @inferred (B[3 : 4 , 4 : 5 ]) == Zeros (2 ,2 )
2281
+ b = @inferred (B[Base. IdentityUnitRange (3 : 4 ), Base. IdentityUnitRange (4 : 5 )])
2282
+ @test b == Zeros (axes (b))
2283
+
2284
+ C = OneElement (2 , (2 ,3 ), (Base. OneTo (big (4 )), Base. OneTo (big (5 ))))
2285
+ @test @inferred (C[1 : 4 , 1 : 5 ]) === OneElement (2 , (2 ,3 ), Int .(size (C)))
2286
+
2287
+ D = OneElement (2 , (2 ,3 ), (InfiniteArrays. OneToInf (), InfiniteArrays. OneToInf ()))
2288
+ D2 = @inferred D[:,:]
2289
+ @test axes (D2) == axes (D)
2290
+ @test D2[2 ,3 ] == D[2 ,3 ]
2291
+ D3 = @inferred D[axes (D)... ]
2292
+ @test axes (D3) == axes (D)
2293
+ @test D3[2 ,3 ] == D[2 ,3 ]
2294
+ end
2295
+ end
2296
+
2196
2297
@testset " adjoint/transpose" begin
2197
2298
A = OneElement (3im , (2 ,4 ), (4 ,6 ))
2198
2299
@test A' === OneElement (- 3im , (4 ,2 ), (6 ,4 ))
@@ -2579,6 +2680,17 @@ end
2579
2680
end
2580
2681
end
2581
2682
2683
+ @testset " permutedims" begin
2684
+ v = OneElement (1 , (2 , 3 ), (2 , 5 ))
2685
+ @test permutedims (v) === OneElement (1 , (3 , 2 ), (5 , 2 ))
2686
+ w = OneElement (1 , 3 , 5 )
2687
+ @test permutedims (w) === OneElement (1 , (1 , 3 ), (1 , 5 ))
2688
+ x = OneElement (1 , (1 , 2 , 3 ), (4 , 5 , 6 ))
2689
+ @test permutedims (x, (1 , 2 , 3 )) === x
2690
+ @test permutedims (x, (3 , 2 , 1 )) === OneElement (1 , (3 , 2 , 1 ), (6 , 5 , 4 ))
2691
+ @test permutedims (x, [2 , 3 , 1 ]) === OneElement (1 , (2 , 3 , 1 ), (5 , 6 , 4 ))
2692
+ @test_throws BoundsError permutedims (x, (2 , 1 ))
2693
+ end
2582
2694
@testset " show" begin
2583
2695
B = OneElement (2 , (1 , 2 ), (3 , 4 ))
2584
2696
@test repr (B) == " OneElement(2, (1, 2), (3, 4))"
0 commit comments