pyblock.tensor

pyblock.tensor.tensor

Block-sparse tensor and tensor network.

class pyblock.tensor.tensor.SubTensor(q_labels=None, reduced=None, cgs=None)

Bases: object

A block in block-sparse tensor.

Attributes:
q_labels : tuple(DirectProdGroup..)
Quantum labels for this sub-tensor block. Each element in the tuple corresponds one rank of the tensor.
rank : int
Rank of the tensor. rank == len(q_labels).
ng : int
Number of sub-symmetry groups. ng == q_labels[0].ng.
reduced : numpy.ndarray
Rank-rank dense reduced matrix.
reduced_shape : tuple(int..)
Shape of reduced
cgs : list(numpy.ndarray)
A list of CG factors of length ng with each element being Rank-rank dense reduced matrix representing CG coefficients for projected quantum numbers in each sub-symmetry group.
T

Transpose.

add_noise(noise)

Add noise to reduced matrix by random numbers in [-0.5 * noise, 0.5 * noise).

Args:
noise : float
prefactor for the noise.
build_random()

Set reduced matrix with random numbers in [0, 1).

build_rank3_cg()

Generate cgs for rank-3 tensor.

build_zero()

Set reduced matrix to zero.

equal_shape(o)
class pyblock.tensor.tensor.Tensor(blocks=None, tags=None, contractor=None)

Bases: object

Block-sparse tensor.

Attributes:
blocks : list(SubTensor)
A list of (non-zero) blocks.
tags : set(str or int)
Tags of the tensor for labeling the type or site index of the tensor.
contractor :
If not None, this is used to perform specialized tensor contraction and diagonalization.
add_noise(noise)

Add noise to reduced matrix by random numbers in [-0.5 * noise, 0.5 * noise).

Args:
noise : float
prefactor for the noise.
add_tags(tags)

Add the tags, return self for chain notation.

align(o)
build_identity()

Set the reduced matrix to identity. Not work for general situations.

build_random()

Fill the reduced matrix with random numbers in [0, 1).

build_rank3_cg()

Generate CG coefficients for rank-3 tensor.

build_zero()

Fill the reduced matrix with zero.

static contract(tsa, tsb, idxa, idxb, target_q_labels=None)

Contract two Tensor to form a new Tensor.

Args:
tsa : Tensor
Tensor a, as left operand.
tsb : Tensor
Tensor b, as right operand.
idxa : list(int)
Indices to be contracted in tensor a.
idxb : list(int)
Indices to be contracted in tensor b.
target_q_labels : None or DirectProdGroup or [DirectProdGroup]
If None, this is contraction of states. For all other cases, this is contraction of operators. If DirectProdGroup, the resulting direct product operator will have the specific quantum label. If [DirectProdGroup], the resulting direct product operator will have mixed quantum labels (not very useful).
Returns:
tensor : Tensor
The contracted Tensor.
copy()

Shallow copy.

deep_copy()

Deep copy.

diag_eigs(k=-1, limit=None)
equal_shape(o)
fit(o, v)
fuse_index(idxl, fused, target=None, equal=None)
get_diag_density_matrix(trace_right, noise=0.0)
left_canonicalize(mode='reduced')

Left canonicalization (using QR factorization).

Returns:
r_blocks : dict((DirectProdGroup, ) -> numpy.ndarray)
The R matrix for each right-index quantum label.
left_multiply(mats)

Left Multiplication. Currently only used for multiplying R obtained from right-canonicalization.

Args:
mats : dict((DirectProdGroup, ) -> numpy.ndarray)
The R matrix for each right-index quantum label.
modify(other)

Modify the blocks according to another Tensor’s blocks.

n_blocks

Number of (non-zero) blocks.

ng

Number of sub-symmetry groups.

norm()
static operator_init(basis, repr, op_q_labels)

Build tensor for single-site primiary operator. When this is a tensor operator, repr and op_q_labels will contain multiple items. cgs and reduced will be calculated.

Args:
basis : list(DirectProdGroup)
Site basis.
repr : list(numpy.ndarray)
A list of dense matrices for different op_q_label s.
op_q_labels : list(DirectProdGroup)
A list of operator quantum labels.
Returns:
tensor : Tensor
Operator Tensor.
static partial_trace(ts, idx_l, idx_r, target_q_labels=None)

Partial trace of a tensor. The indices in idx_l will be combined. The indices in idx_r will also be combined. Then for each tensor block with q_label[idx_l] == q_label[idx_r], the term will be included, with its reduced matrix traced in corresponding indices.

Args:
ts : Tensor
Tensor to be traced.
idx_l : list(int)
Left traced indices.
idx_r : list(int)
Right traced indices.
target_q_labels : None
Defaults to None. Currently only the default is implemented.
Returns:
tensor : Tensor
The resulting Tensor with indices idx_l and idx_r are traced.
rank

Rank of the tensor.

static rank2_init_target(left, right, target)
static rank3_init_left(pre, basis, post)

Build the MPS rank-3 tensor by coupling states in pre and basis into states in post. cgs and reduced will not be calculated.

Args:
pre : dict(DirectProdGroup -> int)
Left basis.
basis : dict(DirectProdGroup -> int)
Site basis.
post : dict(DirectProdGroup -> int)
Right basis. Right basis should be obtained from truncating the direct product of left and site basis.
Returns:
tensor : Tensor
static rank3_init_right(pre, basis, post)

Build the MPS rank-3 tensor by coupling states in pre and basis into states in post. cgs and reduced will not be calculated.

Args:
pre : dict(DirectProdGroup -> int)
Right basis.
basis : dict(DirectProdGroup -> int)
Site basis.
post : dict(DirectProdGroup -> int)
Left basis. Left basis should be obtained from truncating the direct product of right and site basis.
Returns:
tensor : Tensor
right_canonicalize(mode='reduced')

Right canonicalization (using LQ factorization).

Returns:
l_blocks : dict((DirectProdGroup, ) -> numpy.ndarray)
The L matrix for each left-index quantum label.
right_multiply(mats)

Right Multiplication. Currently only used for multiplying L obtained from right-canonicalization.

Args:
mats : dict((DirectProdGroup, ) -> numpy.ndarray)
The L matrix for each left-index quantum label.
set_contractor(contractor)

Change the contractor, return self for chain notation.

set_tags(tags)

Change the tags, return self for chain notation.

sort()

Sort non-zero blocks in increasing order of quantum labels.

split(absorb_right, k=-1)

Split rank-2 block-diagonal Tensor to two tensors (using SVD).

Args:
absorb_right : bool
If absorb_right is True, singlular values will be multiplied into right Tensor. Otherwise, They will be multiplied into left Tensor.
k : int
Maximal bond length. Defaults to -1 (no truncation).
Returns:
left_tensor : Tensor
Left tensor.
right_tensor : Tensor
Right tensor.
error : float
Sum of Discarded weights.
split_using_density_matrix(dm, absorb_right, k=-1, limit=None)
svd(q_label_left, k=-1)

Singular Value Decomposition of rank-2 block-diagonal Tensor.

Args:
k : int
Maximal bond length. Defaults to -1 (no truncation).
Returns:
left_tensor : Tensor
Left tensor.
right_tensor : Tensor
Right tensor.
svd_s : list(numpy.ndarray)
A list including singular values for each tensor block.
error : float
Sum of Discarded weights (square of singular values).
to_dict(idx)
unfuse_index(idx, left, right)
zero_copy()

A deep copy with zero reduced matrices.

class pyblock.tensor.tensor.TensorNetwork(tensors=None)

Bases: object

An inefficient implementation for Quimb TensorNetwork.

Attributes:
tensors : list(Tensor)
List of tensors in the network.
add(tn)

Add a Tensor or TensorNetwork to the tensor network.

add_tags(tags)

Add tags to all tensors in the tensor network.

contract(tags, in_place=False)

Contract a sub tensor network specified by tags. If any Tensor in the sub tensor network has a contractor, the specialized contraction will be used. Currently the general contraction is not implemented.

Args:
tags : tuple(str or int..)
Tags of sub tensor network.
Kwargs:
in_place : bool
Defaults to False. Indicating whether the current tensor network should be changed.
Returns:
tn : TensorNetwork
The tensor network with selected sub tensor network replaced by its contraction.
copy()

Shallow copy.

deep_copy()

Deep copy.

remove(tags, which='all', in_place=False)

Remove a sub tensor network specified by tags.

Args:
tags : set(str or int)
Tags of sub tensor network.
Kwargs:
which : ‘all’ or ‘any’ or ‘exact’
Defaults to ‘all’. Indicating how the tags should be applied for selection.
in_place : bool
Defaults to False. Indicating whether the current tensor network should be changed.
Returns:
tn : TensorNetwork
The remaining tensor network.
remove_tags(tags)

Remove tags from all tensors in the tensor network.

replace(tags, tn, which='all')
select(tags, which='all', inverse=False)

Extract a sub tensor network specified by tags.

Args:
tags : set(str or int)
Tags of sub tensor network.
Kwargs:
which : ‘all’ or ‘any’ or ‘exact’
Defaults to ‘all’. Indicating how the tags should be applied for selection.
inverse : bool
Defaults to False. Indicating whether the selection should be inversed.
Returns:
tn : TensorNetwork
The selected tensor network.
set_contractor(contractor)

Set contractor for all tensors in the tensor network.

tags

Return a list of tags collected from all tensors in the tensor network.

zero_copy()

Deep copy with zeros.

exception pyblock.tensor.tensor.TensorNetworkError

Bases: Exception