View source on GitHub |
Base class for FermionOperator and QubitOperator.
openfermion.ops.SymbolicOperator(
term=None, coefficient=1.0
)
A SymbolicOperator stores an object which represents a weighted
sum of terms; each term is a product of individual factors
of the form (index
, action
), where index
is a nonnegative integer
and the possible values for action
are determined by the subclass.
For instance, for the subclass FermionOperator, action
can be 1 or 0,
indicating raising or lowering, and for QubitOperator, action
is from
the set {'X', 'Y', 'Z'}.
The coefficients of the terms are stored in a dictionary whose
keys are the terms.
SymbolicOperators of the same type can be added or multiplied together.
Note | |
---|---|
Adding SymbolicOperators is faster using += (as this is done by in-place addition). Specifying the coefficient during initialization is faster than multiplying a SymbolicOperator with a scalar. |
Methods
accumulate
@classmethod
accumulate( operators, start=None )
Sums over SymbolicOperators.
compress
compress(
abs_tol=EQ_TOLERANCE
)
Eliminates all terms with coefficients close to zero and removes small imaginary and real parts.
Args | |
---|---|
abs_tol
|
float
Absolute tolerance, must be at least 0.0 |
get_operator_groups
get_operator_groups(
num_groups
)
Gets a list of operators with a few terms.
Args | |
---|---|
num_groups
|
int
How many operators to get in the end. |
Returns | |
---|---|
operators
|
[self.__class__]
A list of operators summing up to self. |
get_operators
get_operators()
Gets a list of operators with a single term.
Returns | |
---|---|
operators
|
[self.__class__]
A generator of the operators in self. |
identity
@classmethod
identity()
Returns: multiplicative_identity (SymbolicOperator): A symbolic operator u with the property that ux = xu = x for all operators x of the same class.
induced_norm
induced_norm(
order=1
)
Compute the induced p-norm of the operator.
If we represent an operator as \(\sum_{j} w_j H_j\) where \(w_j\) are scalar coefficients then this norm is \(\left(\sum_{j} \| w_j \|^p \right)^{\frac{1}{p} }\) where \(p\) is the order of the induced norm
Args | |
---|---|
order
|
int
the order of the induced norm. |
isclose
isclose(
other, tol=EQ_TOLERANCE
)
Check if other (SymbolicOperator) is close to self.
Comparison is done for each term individually. Return True if the difference between each term in self and other is less than EQ_TOLERANCE
Args | |
---|---|
other
|
SymbolicOperator
SymbolicOperator to compare against. |
many_body_order
many_body_order()
Compute the many-body order of a SymbolicOperator.
The many-body order of a SymbolicOperator is the maximum length of a term with nonzero coefficient.
Returns | |
---|---|
int |
zero
@classmethod
zero()
Returns: additive_identity (SymbolicOperator): A symbolic operator o with the property that o+x = x+o = x for all operators x of the same class.
__add__
__add__(
addend
)
Args: addend (SymbolicOperator): The operator to add.
Returns | |
---|---|
sum (SymbolicOperator) |
__div__
__div__(
divisor
)
For compatibility with Python 2.
__eq__
__eq__(
other
)
Approximate numerical equality (not true equality).
__iter__
__iter__()
__mul__
__mul__(
multiplier
)
Return self * multiplier for a scalar, or a SymbolicOperator.
Args | |
---|---|
multiplier
|
A scalar, or a SymbolicOperator. |
Returns | |
---|---|
product (SymbolicOperator) |
Raises | |
---|---|
TypeError
|
Invalid type cannot be multiply with SymbolicOperator. |
__ne__
__ne__(
other
)
Return self!=value.
__neg__
__neg__()
Returns: negation (SymbolicOperator)
__pow__
__pow__(
exponent
)
Exponentiate the SymbolicOperator.
Args | |
---|---|
exponent
|
int
The exponent with which to raise the operator. |
Returns | |
---|---|
exponentiated (SymbolicOperator) |
Raises | |
---|---|
ValueError
|
Can only raise SymbolicOperator to non-negative integer powers. |
__radd__
__radd__(
addend
)
Args: addend (SymbolicOperator): The operator to add.
Returns | |
---|---|
sum (SymbolicOperator) |
__rmul__
__rmul__(
multiplier
)
Return multiplier * self for a scalar.
We only define rmul for scalars because the left multiply exist for SymbolicOperator and left multiply is also queried as the default behavior.
Args | |
---|---|
multiplier
|
A scalar to multiply by. |
Returns | |
---|---|
product
|
A new instance of SymbolicOperator. |
Raises | |
---|---|
TypeError
|
Object of invalid type cannot multiply SymbolicOperator. |
__rsub__
__rsub__(
subtrahend
)
Args: subtrahend (SymbolicOperator): The operator to subtract.
Returns | |
---|---|
difference (SymbolicOperator) |
__sub__
__sub__(
subtrahend
)
Args: subtrahend (SymbolicOperator): The operator to subtract.
Returns | |
---|---|
difference (SymbolicOperator) |
__truediv__
__truediv__(
divisor
)
Return self / divisor for a scalar.
Note | |
---|---|
This is always floating point division. |
Args | |
---|---|
divisor
|
A scalar to divide by. |
Returns | |
---|---|
A new instance of SymbolicOperator. |
Raises | |
---|---|
TypeError
|
Cannot divide local operator by non-scalar type. |