hqs_quantum_solver.spinless_fermions#
Operators for spinless fermions.
Functions
|
Annihilation operator for a spinless fermions system. |
|
The spinless fermion anomalous pairing term. |
|
Creation operator for a spinless fermions system. |
|
The spinless fermion hopping term. |
|
The identity operator. |
|
The spinless fermion interaction term. |
|
Returns the terms corresonding to a Lattice Builder configuration or instance. |
|
Term for the number operator. |
|
Zero operator for a spinless fermion system. |
Classes
Operator acting on a space representing spinless fermions. |
|
The vector space for spinless fermions. |
- class Operator#
Operator acting on a space representing spinless fermions.
- property H#
Hermitian adjoint.
Returns the Hermitian adjoint of self, aka the Hermitian conjugate or Hermitian transpose. For a complex matrix, the Hermitian adjoint is equal to the conjugate transpose.
Can be abbreviated self.H instead of self.adjoint().
- Returns:
A_H – Hermitian adjoint of self.
- Return type:
LinearOperator
- property T#
Transpose this linear operator.
Returns a LinearOperator that represents the transpose of this one. Can be abbreviated self.T instead of self.transpose().
- __init__(expression: Expression, *, domain: VectorSpace, codomain: VectorSpace | None = None, transpose: bool = False, dtype: DTypeLike | None = None, operator_type: SparseMatrixFactory | None = None) None #
Constructor.
- Parameters:
expression (Expression) – The operator expression.
domain (VectorSpace) – The domain of the operator.
codomain (VectorSpace) – The codomain of the operator.
transpose (bool) – When true, construct the transpose of the operator.
dtype (DTypeLike) – Force a specific dtype.
operator_type (OperatorFactory | None) – The operator backend.
- static __new__(cls, *args, **kwargs)#
- adjoint()#
Hermitian adjoint.
Returns the Hermitian adjoint of self, aka the Hermitian conjugate or Hermitian transpose. For a complex matrix, the Hermitian adjoint is equal to the conjugate transpose.
Can be abbreviated self.H instead of self.adjoint().
- Returns:
A_H – Hermitian adjoint of self.
- Return type:
LinearOperator
- property codomain: VectorSpace#
The codomain of the operator.
- property domain: VectorSpace#
The domain of the operator.
- dot(x: ndarray, out: ndarray | None = None) ndarray #
Compute the dot product of operator with array; optional
out
to avoid reallocation.When represented by NumPy this operation would be
A @ x
.- Parameters:
x (np.ndarray) – The vector/array to dot product with.
out (Optional[np.ndarray]) – Optional array to store results and avoid reallocation.
- Returns:
The result of the dot product,
A @ x
.- Return type:
np.ndarray
- dot_add(x: ndarray, out: ndarray, z: float | complex = 1.0) None #
Compute the dot product of operator with array and add it to
out
array.When represented by NumPy this operation would be
out += z * (A @ x)
.- Parameters:
x (np.ndarray) – The vector/array to dot product with.
out (np.ndarray) – The array to which the outcome will be added.
z (complex) – scalar prefactor before addition, defaults to unity.
- dot_h(x: ndarray, out: ndarray | None = None) ndarray #
Compute the dot product of operator adjoint with array, allows optional
out
.When represented by NumPy this operation would be
A.conj().T @ x
. Though transpose returns only a view of a matrix, conjugate returns a copy, hence this method.- Parameters:
x (np.ndarray) – The vector/array to dot product with.
out (Optional[np.ndarray]) – Optional array to store results and avoid reallocation.
- Returns:
The result of the dot product,
A.conj().T @ x
.- Return type:
np.ndarray
- property dtype: OperatorDType#
The NumPy dtype.
- matmat(X)#
Matrix-matrix multiplication.
Performs the operation y=A@X where A is an MxN linear operator and X dense N*K matrix or ndarray.
- Parameters:
X ({matrix, ndarray}) – An array with shape (N,K).
- Returns:
Y – A matrix or ndarray with shape (M,K) depending on the type of the X argument.
- Return type:
{matrix, ndarray}
Notes
This matmat wraps any user-specified matmat routine or overridden _matmat method to ensure that y has the correct type.
- matvec(x)#
Matrix-vector multiplication.
Performs the operation y=A@x where A is an MxN linear operator and x is a column vector or 1-d array.
- Parameters:
x ({matrix, ndarray}) – An array with shape (N,) or (N,1).
- Returns:
y – A matrix or ndarray with shape (M,) or (M,1) depending on the type and shape of the x argument.
- Return type:
{matrix, ndarray}
Notes
This matvec wraps the user-specified matvec routine or overridden _matvec method to ensure that y has the correct shape and type.
- rdot(x: ndarray) ndarray #
Compute the dot product of array with operator.
When represented by NumPy this operation would be
x @ A
.- Parameters:
x (np.ndarray) – The vector/array to dot product with.
- Returns:
The result of the dot product,
x @ A
.- Return type:
np.ndarray
- rdot_h(x: ndarray) ndarray #
Compute the dot product of array with operator adjoint.
When represented by NumPy this operation would be
x @ A.conj().T
.- Parameters:
x (np.ndarray) – The vector/array to dot product with.
- Returns:
The result of the dot product,
x @ A.conj().T
.- Return type:
np.ndarray
- rmatmat(X)#
Adjoint matrix-matrix multiplication.
Performs the operation y = A^H @ x where A is an MxN linear operator and x is a column vector or 1-d array, or 2-d array. The default implementation defers to the adjoint.
- Parameters:
X ({matrix, ndarray}) – A matrix or 2D array.
- Returns:
Y – A matrix or 2D array depending on the type of the input.
- Return type:
{matrix, ndarray}
Notes
This rmatmat wraps the user-specified rmatmat routine.
- rmatvec(x)#
Adjoint matrix-vector multiplication.
Performs the operation y = A^H @ x where A is an MxN linear operator and x is a column vector or 1-d array.
- Parameters:
x ({matrix, ndarray}) – An array with shape (M,) or (M,1).
- Returns:
y – A matrix or ndarray with shape (N,) or (N,1) depending on the type and shape of the x argument.
- Return type:
{matrix, ndarray}
Notes
This rmatvec wraps the user-specified rmatvec routine or overridden _rmatvec method to ensure that y has the correct shape and type.
- property shape: tuple[int, int]#
Returns the shape tuple of the class.
- Returns:
The tuple containing the dimensions of the class.
- Return type:
Tuple[int, …]
- todense() ndarray #
Return the operator as a dense matrix.
- Returns:
The operator as a dense matrix.
- Return type:
np.ndarray
- transpose()#
Transpose this linear operator.
Returns a LinearOperator that represents the transpose of this one. Can be abbreviated self.T instead of self.transpose().
- class VectorSpace#
The vector space for spinless fermions.
The space is spanned by vectors of the form
\[\prod_{j=0}^{M-1} (c_j^\dagger)^{n_j} \ket{0} \quad\text{where}\quad n_j \in \{ 0, 1 \},\]and \(c_j^\dagger\) is the creation operator for site \(j\).
The vector space contains all vectors from the set above where the total particle number is equal to
\[\left( \texttt{particle_number_offset} + k \cdot \texttt{particle_number_stride} \right)\]for \(k \in \mathbb{Z}\).
- sites#
The number of sites.
- Type:
int
- particle_number_offset#
The offset of the restriction of the total particle number.
- Type:
int
- particle_number_stride#
The stride of the restriction of the total particle number.
- Type:
int
- __init__(*, sites: int, particle_numbers: Literal['even', 'odd'] | int | tuple[int, int]) None #
Create VectorSpace.
- Parameters:
sites (int) – The number of sites.
particle_numbers ("even" | "odd" | int | tuple[int, int]) –
Restricts the states of the system.
"even"
Restricts to states having an even number of particles.
"odd"
Restricts to states having an odd number of particle.
int
Restricts to states that have the the given number of particles.
tuple[int, int]
Given the tuple
(offset, stride)
restricts to states that have a particle number equal tooffset
plus an integer multiple ofstride
.
- all_occupations() Iterator[list[int]] #
Iterator over all possible occupation configurations.
- Returns:
The iterator.
- Return type:
Iterator[list[int]]
- copy(*, particle_number_change: int) VectorSpace #
Returns a new vector space with a different value for particles.
- Parameters:
particle_number_change (int) – The value to be added to the number of particles. Allowed to be negative.
- property dim: int#
The dimension of the vector space.
- fock_state(occupation: list[int]) ndarray #
Returns an element of the occupancy number basis.
- Parameters:
occupation (list[int]) – The occupation number per site. Must be 0 or 1.
- occupation(fock_state: ndarray, decimal: int = 7) tuple[int, list[int]] #
Given a fock state, returns the corresponding occupations.
- Parameters:
fock_state (ndarray) – A vector representing a fock state of the current vector space.
decimal (int) – The number of decimals the input vector has to coninside with to a fock state representation.
- Returns:
The sign and occupation numbers of the state.
- Return type:
tuple[int, list[int]]
- annihilation(*, site: int | None = None, coef: ArrayLike | None = None) Expression #
Annihilation operator for a spinless fermions system.
Either
site
orcoef
needs to be specified.- Parameters:
site (int) – When specified return a annihilation operator for a specific site.
coef (ArrayLike) – When specified return a linear combination of annihilation operators. The coef array contains the coefficients, where the i-th entry corresponds to the annihilation operator at the i-th site.
- anomalous_pairing(coef: ArrayLike) Expression #
The spinless fermion anomalous pairing term.
- Parameters:
coef (ArrayLike) –
The “anomalous pairing” matrix \(D\). To define the pairing part, you should define the upper triangular part of the matrix
U
. Defining this matrix adds\[\sum_{j,k=0}^{M-1} D_{jk} \, \hat{c}_j \hat{c}_k + D_{jk}^* \, \hat{c}_k^\dagger \hat{c}_j^\dagger\]to the Hamiltonian.
- creation(*, site: int | None = None, coef: ArrayLike | None = None) Expression #
Creation operator for a spinless fermions system.
Either
site
orcoef
needs to be specified.- Parameters:
site (int) – When specified return a creation operator for a specific site.
coef (ArrayLike) – When specified return a linear combination of creation operators. The coef array contains the coefficients, where the i-th entry corresponds to the creation operator at the i-th site.
- hopping(coef: ArrayLike) Expression #
The spinless fermion hopping term.
- Parameters:
coef (ArrayLike) –
The “hopping” matrix \(h_0\). The diagonal elements of \(h_0\) define the vector \(\varepsilon\) from the HQS Lattice Documentation, and the off-diagonal elements the matrix \(t\). In other words, defining the attribute h0 adds
\[\sum_{j,k=0}^{M-1} (h_0)_{jk} \, \hat{c}_j^\dagger \hat{c}_k = \sum_{j\not=k} (h_0)_{jk} \, \hat{c}_j^\dagger \hat{c}_k + \sum_{j=0}^{M-1} (h_0)_{jj} \, \hat{n}_j\]to the Hamiltonian to be defined.
- identity() Expression[MatrixEntryGenerator] #
The identity operator.
- Returns:
Term describing the identity operator.
- Return type:
Expression
- interaction(coef: ArrayLike) Expression #
The spinless fermion interaction term.
- Parameters:
coef (ArrayLike) –
The “interaction” matrix \(U\). To define the interaction part, you should define the upper triangular part of the matrix
U
. DefiningU
, adds\[\sum_{j,k=0}^{M-1} U_{jk}\, \left(\hat{n}_j - \tfrac12\middle) \middle(\hat{n}_k - \tfrac12\right)\]to the Hamiltonian to be defined.
Note
The cofficient matrix must be real-valued.
- lattice_terms(lattice: dict[str, Any] | lb.models.LatticeBuilderInputSpinless | lb.Builder) Expression #
Returns the terms corresonding to a Lattice Builder configuration or instance.
- number(*, site: int | None = None, coef: ArrayLike | None = None) Expression #
Term for the number operator.
The term is defined by
\[\hat{c}_k^\dagger \hat{c}_k\]if
site
is given and\[\sum_j \varepsilon_j \, \hat{c}_j^\dagger \hat{c}_j\]is
coef
is given.- Parameters:
site (int) – Specifies the index k.
coef (ArrayLike) – Specifies the coefficients \(\varepsilon_j\).
- Returns:
The operator expression.
- Return type:
Expression
- zero() Expression[MatrixEntryGenerator] #
Zero operator for a spinless fermion system.
- Returns:
The operator expression.
- Return type:
Expression