ChargeInfo

Inheritance Diagram

Inheritance diagram of tenpy.linalg.charges.ChargeInfo

Methods

ChargeInfo.__init__([mod, names])

ChargeInfo.add(chinfos)

Create a ChargeInfo combining multiple charges.

ChargeInfo.change(chinfo, charge, new_qmod)

Change the qmod of a given charge.

ChargeInfo.check_valid(charges)

Check, if charges has all entries as expected from self.mod.

ChargeInfo.drop(chinfo[, charge])

Remove a charge from a ChargeInfo.

ChargeInfo.from_hdf5(hdf5_loader, h5gr, subpath)

Load instance from a HDF5 file.

ChargeInfo.make_valid([charges])

Take charges modulo self.mod.

ChargeInfo.save_hdf5(hdf5_saver, h5gr, subpath)

Export self into a HDF5 file.

ChargeInfo.shift_charges(charges, dx)

Spatial translation acting on charges.

ChargeInfo.shift_charges_horizontal(charges, ...)

Like shift_charges(), but restricted to the first dimension.

ChargeInfo.test_sanity()

Sanity check, raises ValueErrors, if something is wrong.

Class Attributes and Properties

ChargeInfo.mod

Modulo how much each of the charges is taken.

ChargeInfo.qnumber

The number of charges.

ChargeInfo.trivial_shift

class tenpy.linalg.charges.ChargeInfo(mod=[], names=None)[source]

Bases: object

Meta-data about the charge of a tensor.

Saves info about the nature of the charge of a tensor. Provides make_valid() for taking modulo m.

(This class is implemented in tenpy.linalg.charges but also imported in tenpy.linalg.np_conserved for convenience.)

The base class ChargeInfo assumes that the local conserved charge (the discrete version of a charge density) is unchanged by spatial translations.

Parameters:
  • mod (iterable of QTYPE) – The len gives the number of charges, qnumber. Each entry is a positive integer, where 1 implies a \(U(1)\) charge and N>1 implies a \(Z_N\) symmetry. Defaults to “trivial”, i.e., no charge.

  • names (list of str) – Descriptive names for the charges. Defaults to ['']*qnumber.

names

A descriptive name for each of the charges. May have ‘’ entries.

Type:

list of strings

_mask

mask (mod == 1), to speed up make_valid in pure python.

Type:

1D array bool

_mod_masked

Equivalent to self.mod[self._mask]

Type:

1D array QTYPE

_qnumber, _mod

Storage of qnumber and mod.

Notes

Instances of this class can (should) be shared between different LegCharge and Array’s.

save_hdf5(hdf5_saver, h5gr, subpath)[source]

Export self into a HDF5 file.

This method saves all the data it needs to reconstruct self with from_hdf5().

It stores the names under the path "names", and mod as dataset "U1_ZN".

Parameters:
  • hdf5_saver (Hdf5Saver) – Instance of the saving engine.

  • h5gr (:class`Group`) – HDF5 group which is supposed to represent self.

  • subpath (str) – The name of h5gr with a '/' in the end.

classmethod from_hdf5(hdf5_loader, h5gr, subpath)[source]

Load instance from a HDF5 file.

This method reconstructs a class instance from the data saved with save_hdf5().

The "U1_ZN" dataset is mandatory, 'names' are optional.

Parameters:
  • hdf5_loader (Hdf5Loader) – Instance of the loading engine.

  • h5gr (Group) – HDF5 group which is represent the object to be constructed.

  • subpath (str) – The name of h5gr with a '/' in the end.

Returns:

obj – Newly generated class instance containing the required data.

Return type:

cls

classmethod add(chinfos)[source]

Create a ChargeInfo combining multiple charges.

Parameters:

chinfos (iterable of ChargeInfo) – ChargeInfo instances to be combined into a single one (in the given order).

Returns:

chinfo – ChargeInfo combining all the given charges.

Return type:

ChargeInfo

classmethod drop(chinfo, charge=None)[source]

Remove a charge from a ChargeInfo.

Parameters:
  • chinfo (ChargeInfo) – The ChargeInfo from where to drop/remove a charge.

  • charge (int | str) – Number or name of the charge (within chinfo) which is to be dropped. None means dropping all charges.

Returns:

chinfo – ChargeInfo where the specified charge is dropped.

Return type:

ChargeInfo

classmethod change(chinfo, charge, new_qmod, new_name='')[source]

Change the qmod of a given charge.

Parameters:
  • chinfo (ChargeInfo) – The ChargeInfo for which qmod of charge should be changed.

  • new_qmod (int) – The new qmod to be set.

  • new_name (str) – The new name of the charge.

Returns:

chinfo – ChargeInfo where qmod of the specified charge was changed.

Return type:

ChargeInfo

test_sanity()[source]

Sanity check, raises ValueErrors, if something is wrong.

property qnumber

The number of charges.

property mod

Modulo how much each of the charges is taken.

Entries are 1 for a \(U(1)\) charge, and N for a \(Z_N\) symmetry.

make_valid(charges=None)[source]

Take charges modulo self.mod.

Parameters:

charges (array_like or None) – 1D or 2D array of charges, last dimension self.qnumber None defaults to trivial charges np.zeros(qnumber, dtype=QTYPE).

Returns:

A copy of charges taken modulo mod, but with x % 1 := x

Return type:

charges

check_valid(charges)[source]

Check, if charges has all entries as expected from self.mod.

Parameters:

charges (2D ndarray QTYPE_t) – Charge values to be checked.

Returns:

res – True, if all 0 <= charges <= self.mod (wherever self.mod != 1)

Return type:

bool

shift_charges(charges, dx)[source]

Spatial translation acting on charges.

Some conserved charges, such as e.g. an electric dipole moment, transform non-trivially under spatial translations. This method defines how the charges transform. See the notes on Dipole Conservation. The base class ChargeInfo only implements a trivial version, that does not change the charges.

As positions are mapped pos -> pos + dx, the charges are mapped:

charges -> shift_charges(charges, dx)
Parameters:
  • charges (2D ndarray of dtype QTYPE) – The charges to map.

  • dx ((dim + 1)D ndarray) – The difference of lattice indices, i.e. dx == lat_idx_before - lat_idx_after == [dx_0, ..., dx_{D-1}, du]. Note that these are integer values in units of the lattice vectors.

Returns:

charges – The mapped charges. Note that

Return type:

2D ndarray of dtype QTYPE

shift_charges_horizontal(charges, dx_0)[source]

Like shift_charges(), but restricted to the first dimension.

The base class ChargeInfo only implements a trivial version, that does not change the charges.

Parameters:
  • charges (2D ndarray of dtype QTYPE) – The charges to map.

  • dx_0 (float) – Number of lattice indices of the translation. Horizontal shift is a general shift by dx=[dx_0] + [0] * dim.