|
1 |
| -using ..NDTensors: data, inds |
2 | 1 | using ITensors: ITensor
|
| 2 | +using ..NDTensors: data, inds |
3 | 3 |
|
4 | 4 | # TODO: Delete this, it is a hack to decide
|
5 | 5 | # if an Index is blocked.
|
@@ -34,21 +34,39 @@ function to_nameddimsarray(x::DiagTensor)
|
34 | 34 | return named(DiagonalArray(data(x), size(x)), name.(inds(x)))
|
35 | 35 | end
|
36 | 36 |
|
37 |
| -using ..NDTensors: BlockSparseTensor |
| 37 | +using ITensors: ITensors, dir, qn |
| 38 | +using ..NDTensors: BlockSparseTensor, array, blockdim, datatype, nblocks, nzblocks |
38 | 39 | using ..NDTensors.BlockSparseArrays: BlockSparseArray
|
| 40 | +using ..NDTensors.BlockSparseArrays.BlockArrays: BlockArrays, blockedrange |
| 41 | +using ..NDTensors.GradedAxes: dual, gradedrange |
| 42 | +using ..NDTensors.TypeParameterAccessors: set_ndims |
39 | 43 | # TODO: Delete once `BlockSparse` is removed.
|
40 | 44 | function to_nameddimsarray(x::BlockSparseTensor)
|
41 |
| - blockinds = map(i -> [blockdim(i, b) for b in 1:nblocks(i)], inds(x)) |
| 45 | + blockinds = map(inds(x)) do i |
| 46 | + r = gradedrange([qn(i, b) => blockdim(i, b) for b in 1:nblocks(i)]) |
| 47 | + if dir(i) == ITensors.In |
| 48 | + return dual(r) |
| 49 | + end |
| 50 | + return r |
| 51 | + end |
42 | 52 | blocktype = set_ndims(datatype(x), ndims(x))
|
43 | 53 | # TODO: Make a simpler constructor:
|
44 | 54 | # BlockSparseArray(blocktype, blockinds)
|
45 |
| - arraystorage = BlockSparseArray{eltype(x),ndims(x),blocktype}(blockinds) |
| 55 | + arraystorage = BlockSparseArray{eltype(x),ndims(x),blocktype}(undef, blockinds) |
46 | 56 | for b in nzblocks(x)
|
47 |
| - arraystorage[BlockArrays.Block(Tuple(b)...)] = x[b] |
| 57 | + arraystorage[BlockArrays.Block(Int.(Tuple(b))...)] = array(x[b]) |
48 | 58 | end
|
49 | 59 | return named(arraystorage, name.(inds(x)))
|
50 | 60 | end
|
51 | 61 |
|
| 62 | +using ITensors: QN |
| 63 | +using ..NDTensors.GradedAxes: GradedAxes |
| 64 | +GradedAxes.fuse_labels(l1::QN, l2::QN) = l1 + l2 |
| 65 | + |
| 66 | +using ITensors: QN |
| 67 | +using ..NDTensors.SymmetrySectors: SymmetrySectors |
| 68 | +SymmetrySectors.dual(l::QN) = -l |
| 69 | + |
52 | 70 | ## TODO: Add this back, define `CombinerArrays` library in NDTensors!
|
53 | 71 | ## using ..NDTensors: CombinerTensor, CombinerArray, storage
|
54 | 72 | ## # TODO: Delete when we directly use `CombinerArray` as storage.
|
|
0 commit comments