Utilities Module

The utilities module contains helper functions and utility classes.

Constants

class qepsilon.utilities.Constants[source]

Bases: object

Class whose members are fundamental constants.

Inner Unit:

  • Length: \(\mu m\)

  • Time: \(\mu s\)

  • Energy: \(\hbar \times \text{MHz}\)

hbar_MHz = 1.0
hbar_Hz = 1e-06
eV = 1519267447.9961274
meV = 1519267.4479961274
Ry = 20670686669.19867
mRy = 20670686.66919867
Hartree = 41341373338.36848
Joule = 9.482521450074861e+27
amu_cc = 1.4151886697821243e+18
kb = 130920.29413420703
speed_of_light = 299792458
amu = 15.746097527595264
epsilon0 = 3.637509257036412e-08
elementary_charge = 1.0
cm = 10000
mm = 1000
um = 1.0
nm = 0.001
Angstrom = 0.0001
bohr_radius = 5.2917721092e-05
ms = 1000
us = 1
ns = 0.001
ps = 1e-06
fs = 1e-09
class qepsilon.utilities.Constants_Metal[source]

Bases: object

Class whose members are fundamental constants.

Inner Unit:

  • Length: \(\text{pm}\)

  • Time: \(\text{ps}\)

  • Energy: \(\hbar \times \text{THz}\)

hbar = 1.0
hbar_THz = 1.0
hbar_MHz = 1e-06
hbar_Hz = 1e-12
eV = 1519.2674479961272
meV = 1.5192674479961272
Ry = 20670.68666919867
mRy = 20.67068666919867
Hartree = 41341.37333836847
Joule = 9.48252145007486e+21
amu_cc = 1415188669782.1243
kb = 0.130920294134207
speed_of_light = 299792458
amu = 1.5746097527595264e-05
epsilon0 = None
elementary_charge = 1.0
cm = 10000000000.0
mm = 1000000000.0
um = 1000000.0
nm = 1000.0
Angstrom = 100
pm = 1
bohr_radius = 52.917721092
s = 1000000000000.0
ms = 1000000000.0
us = 1000000.0
ns = 1000.0
ps = 1
fs = 0.001
As = 1e-06
time_au = 2.4188843265864e-05
cm_inverse_energy = 0.1883651567308853

Utility Functions

qepsilon.utilities.compose(op_sequence: list[Tensor])[source]

This function composes a sequence of operators. :param op_sequence: a list of operators.

qepsilon.utilities.ABAd(A: Tensor, B: Tensor)[source]

This function computes A @ B @ A.conj().T.

qepsilon.utilities.apply_to_pse(pse: Tensor, ops: Tensor)[source]

This function applies an operator to pure state ensemble. :param pse: the pure state ensemble to be acted on. Shape: (nb, ns). :param ops: the operator to be applied. Shape: (nb, ns, ns) or (ns, ns).

Returns:

the pure state ensemble after applying the operator. Shape: (nb, ns).

Return type:

pse_new

qepsilon.utilities.expectation_pse(pse: Tensor, ops: Tensor)[source]

This function computes the expectation value of an operator on a pure state ensemble: <psi|ops|psi>/<psi|psi>. :param pse: the pure state ensemble. Shape: (nb, ns). :param ops: the operator. Shape: (nb, ns, ns) or (ns, ns).

Returns:

the expectation value. Shape: (nb).

Return type:

exp

qepsilon.utilities.trace(rho: Tensor)[source]

This function traces out the density matrix. :param rho: the density matrix to be traced out. Shape: (nb, ns, ns) or (ns, ns).

Returns:

a (nb) tensor or a scalar, the trace of the density matrix.

Return type:

trace

qepsilon.utilities.qubitconf2idx(config: Tensor)[source]

This function converts a binary qubit/spin configuration to an index. :param config: a 0 or 1 tensor that specifies the qubit/spin configuration. Shape: (#qubits). Example for 2-qubit system: [0, 1] means \(| 01 \rangle\). :param By our convention of Pauli-operator composition: :type By our convention of Pauli-operator composition: \(| 11...1 \rangle\) :param the all-qubit-up configuration: :type the all-qubit-up configuration: \(| 11...1 \rangle\)

Returns:

an integer, the index of the configuration.

Return type:

idx

qepsilon.utilities.idx2qubitconf(idx: int, n_qubits: int)[source]

This function converts an index to a binary number.