Skip to content

Commit f82ada8

Browse files
authored
Delta tensors (#6)
1 parent fa39f45 commit f82ada8

File tree

5 files changed

+67
-2
lines changed

5 files changed

+67
-2
lines changed

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
name = "DiagonalArrays"
22
uuid = "74fd4be6-21e2-4f6f-823a-4360d37c7a77"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.2.2"
4+
version = "0.2.3"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
88
DerivableInterfaces = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f"
9+
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"
910
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1011
SparseArraysBase = "0d5efcca-f356-4864-8770-e1ed8d78f208"
1112

1213
[compat]
1314
ArrayLayouts = "1.10.4"
1415
DerivableInterfaces = "0.3.7"
16+
FillArrays = "1.13.0"
1517
LinearAlgebra = "1.10.0"
1618
SparseArraysBase = "0.2.1"
1719
julia = "1.10"

src/DiagonalArrays.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ include("diagonalarray/diagonalarray.jl")
1212
include("diagonalarray/diagonalmatrix.jl")
1313
include("diagonalarray/diagonalvector.jl")
1414
include("diagonalarray/arraylayouts.jl")
15+
include("diagonalarray/delta.jl")
1516

1617
end

src/diagonalarray/delta.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using FillArrays: Ones
2+
3+
function delta(elt::Type, size::Tuple{Vararg{Int}})
4+
return DiagonalArray(Ones{elt}(minimum(size)), size)
5+
end
6+
function δ(elt::Type, size::Tuple{Vararg{Int}})
7+
return delta(elt, size)
8+
end
9+
function delta(elt::Type, size::Int...)
10+
return delta(elt, size)
11+
end
12+
function δ(elt::Type, size::Int...)
13+
return delta(elt, size...)
14+
end
15+
function delta(size::Tuple{Vararg{Int}})
16+
return delta(Float64, size)
17+
end
18+
function δ(size::Tuple{Vararg{Int}})
19+
return delta(size)
20+
end
21+
function delta(size::Int...)
22+
return delta(size)
23+
end
24+
function δ(size::Int...)
25+
return delta(size...)
26+
end

test/Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[deps]
22
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
33
DiagonalArrays = "74fd4be6-21e2-4f6f-823a-4360d37c7a77"
4+
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"
45
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
56
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
67
SparseArraysBase = "0d5efcca-f356-4864-8770-e1ed8d78f208"

test/test_basics.jl

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Test: @test, @testset, @test_broken, @inferred
2-
using DiagonalArrays: DiagonalArrays, DiagonalArray, DiagonalMatrix, diaglength, diagonal
2+
using DiagonalArrays:
3+
DiagonalArrays, DiagonalArray, DiagonalMatrix, δ, delta, diaglength, diagonal, diagview
4+
using FillArrays: Fill, Ones
35
using SparseArraysBase: SparseArrayDOK, storedlength
46
using LinearAlgebra: Diagonal
57

@@ -52,5 +54,38 @@ using LinearAlgebra: Diagonal
5254
@test @inferred(diagonal(rand(2))) isa AbstractMatrix
5355
@test diagonal(zeros(Int, 2)) isa Diagonal
5456
end
57+
@testset "delta" begin
58+
for (a, elt′) in (
59+
(delta(2, 3), Float64),
60+
(δ(2, 3), Float64),
61+
(delta((2, 3)), Float64),
62+
(δ((2, 3)), Float64),
63+
(delta(Bool, 2, 3), Bool),
64+
(δ(Bool, 2, 3), Bool),
65+
(delta(Bool, (2, 3)), Bool),
66+
(δ(Bool, (2, 3)), Bool),
67+
)
68+
@test eltype(a) === elt′
69+
@test diaglength(a) == 2
70+
@test a isa DiagonalArray{elt′}
71+
@test size(a) == (2, 3)
72+
@test diaglength(a) == 2
73+
@test storedlength(a) == 2
74+
@test a == DiagonalArray(ones(2), (2, 3))
75+
@test diagview(a) == ones(2)
76+
@test diagview(a) isa Ones{elt′}
77+
78+
a′ = 2a
79+
@test diagview(a′) == 2ones(2)
80+
# TODO: Fix this. Mapping doesn't preserve
81+
# the diagonal structure properly.
82+
# https://github.com/ITensor/DiagonalArrays.jl/issues/7
83+
@test_broken diagview(a′) isa Fill
84+
85+
b = randn(elt, (3, 4))
86+
a_dest = a * b
87+
@test a_dest Array(a) * Array(b)
88+
end
89+
end
5590
end
5691
end

0 commit comments

Comments
 (0)