11# This files defines Base functions for FusionTensor
22
3+ using Accessors: @set
4+
35using 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.
1813function Base.:* (left:: FusionTensor , right:: FusionTensor )
@@ -26,32 +21,17 @@ Base.:+(ft::FusionTensor) = ft
2621# tensor addition is a block data_matrix add.
2722function 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))
3325end
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
4229function 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))
4832end
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
5636Base. 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
7757Base. 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
8460function Base. copy (ft:: FusionTensor )
8561 return FusionTensor (
0 commit comments