Skip to content

Commit 03080e3

Browse files
committed
use Accessors
1 parent f663d05 commit 03080e3

File tree

2 files changed

+12
-34
lines changed

2 files changed

+12
-34
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ authors = ["ITensor developers <[email protected]> and contributors"]
44
version = "0.2.0"
55

66
[deps]
7+
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
78
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
89
BlockSparseArrays = "2c9a651f-6452-4ace-a6ac-809f4280fbb4"
910
BroadcastMapConversion = "4a4adec5-520f-4750-bb37-d5e66b4ddeb2"
@@ -20,6 +21,7 @@ TypeParameterAccessors = "7e5a90cf-f82e-492e-a09b-e3e26432c138"
2021
WignerSymbols = "9f57e263-0b3d-5e2e-b1be-24f2bb48858b"
2122

2223
[compat]
24+
Accessors = "0.1.39"
2325
BlockArrays = "1.2.0"
2426
BlockSparseArrays = "0.2.0"
2527
BroadcastMapConversion = "0.1.0"

src/fusiontensor/base_interface.jl

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
# This files defines Base functions for FusionTensor
22

3+
using Accessors: @set
4+
35
using BlockSparseArrays: @view!
46

5-
function Base.:*(x::Number, ft::FusionTensor)
6-
return FusionTensor(
7-
x * data_matrix(ft), codomain_axes(ft), domain_axes(ft), trees_block_mapping(ft)
8-
)
9-
end
7+
set_data_matrix(ft::FusionTensor, data_matrix) = @set ft.data_matrix = data_matrix
108

11-
function Base.:*(ft::FusionTensor, x::Number)
12-
return FusionTensor(
13-
x * data_matrix(ft), codomain_axes(ft), domain_axes(ft), trees_block_mapping(ft)
14-
)
15-
end
9+
Base.:*(x::Number, ft::FusionTensor) = set_data_matrix(ft, x * data_matrix(ft))
10+
Base.:*(ft::FusionTensor, x::Number) = set_data_matrix(ft, x * data_matrix(ft))
1611

1712
# tensor contraction is a block data_matrix product.
1813
function Base.:*(left::FusionTensor, right::FusionTensor)
@@ -26,32 +21,17 @@ Base.:+(ft::FusionTensor) = ft
2621
# tensor addition is a block data_matrix add.
2722
function Base.:+(left::FusionTensor, right::FusionTensor)
2823
@assert matching_axes(axes(left), axes(right))
29-
new_data_matrix = data_matrix(left) + data_matrix(right)
30-
return FusionTensor(
31-
new_data_matrix, codomain_axes(left), domain_axes(left), trees_block_mapping(left)
32-
)
24+
return set_data_matrix(left, data_matrix(left) + data_matrix(right))
3325
end
3426

35-
function Base.:-(ft::FusionTensor)
36-
new_data_matrix = -data_matrix(ft)
37-
return FusionTensor(
38-
new_data_matrix, codomain_axes(ft), domain_axes(ft), trees_block_mapping(ft)
39-
)
40-
end
27+
Base.:-(ft::FusionTensor) = set_data_matrix(ft, -data_matrix(ft))
4128

4229
function Base.:-(left::FusionTensor, right::FusionTensor)
4330
@assert matching_axes(axes(left), axes(right))
44-
new_data_matrix = data_matrix(left) - data_matrix(right)
45-
return FusionTensor(
46-
new_data_matrix, codomain_axes(left), domain_axes(left), trees_block_mapping(left)
47-
)
31+
return set_data_matrix(left, data_matrix(left) - data_matrix(right))
4832
end
4933

50-
function Base.:/(ft::FusionTensor, x::Number)
51-
return FusionTensor(
52-
data_matrix(ft) / x, codomain_axes(ft), domain_axes(ft), trees_block_mapping(ft)
53-
)
54-
end
34+
Base.:/(ft::FusionTensor, x::Number) = set_data_matrix(ft, data_matrix(ft) / x)
5535

5636
Base.Array(ft::FusionTensor) = Array(to_array(ft))
5737

@@ -75,11 +55,7 @@ Base.axes(ft::FusionTensor) = (codomain_axes(ft)..., domain_axes(ft)...)
7555

7656
# conj is defined as coefficient wise complex conjugation, without axis dual
7757
Base.conj(ft::FusionTensor{<:Real}) = ft # same object for real element type
78-
function Base.conj(ft::FusionTensor)
79-
return FusionTensor(
80-
conj(data_matrix(ft)), codomain_axes(ft), domain_axes(ft), trees_block_mapping(ft)
81-
)
82-
end
58+
Base.conj(ft::FusionTensor) = set_data_matrix(ft, conj(data_matrix(ft)))
8359

8460
function Base.copy(ft::FusionTensor)
8561
return FusionTensor(

0 commit comments

Comments
 (0)