qnet.algebra.core.state_algebra module¶
This module implements the algebra of states in a Hilbert space
For more details see State (Ket-) Algebra.
Summary¶
Classes:
BasisKet |
Local basis state, identified by index or label |
Bra |
The associated dual/adjoint state for any ket |
BraKet |
The symbolic inner product between two states |
CoherentStateKet |
Local coherent state, labeled by a complex amplitude |
KetBra |
Outer product of two states |
KetIndexedSum |
Indexed sum over Kets |
KetPlus |
Sum of states |
KetSymbol |
Symbolic state |
LocalKet |
A state on a LocalSpace |
OperatorTimesKet |
Product of an operator and a state. |
ScalarTimesKet |
Product of a Scalar coefficient and a ket |
State |
Base class for states in a Hilbert space |
StateDerivative |
Symbolic partial derivative of a state |
TensorKet |
A tensor product of kets |
Data:
TrivialKet |
TrivialKet constant (singleton) object. |
ZeroKet |
ZeroKet constant (singleton) object for the null-state. |
__all__: BasisKet, Bra, BraKet, CoherentStateKet, KetBra, KetIndexedSum, KetPlus, KetSymbol, LocalKet, OperatorTimesKet, ScalarTimesKet, State, StateDerivative, TensorKet, TrivialKet, ZeroKet
Reference¶
-
class
qnet.algebra.core.state_algebra.State(*args, **kwargs)[source]¶ Bases:
qnet.algebra.core.abstract_quantum_algebra.QuantumExpressionBase class for states in a Hilbert space
-
isket¶ Whether the state represents a ket
-
isbra¶ Wether the state represents a bra (adjoint ket)
-
bra¶ The bra associated with a ket
-
ket¶ The ket associated with a bra
-
-
class
qnet.algebra.core.state_algebra.KetSymbol(label, *sym_args, hs)[source]¶ Bases:
qnet.algebra.core.abstract_quantum_algebra.QuantumSymbol,qnet.algebra.core.state_algebra.StateSymbolic state
See
QuantumSymbol.
-
class
qnet.algebra.core.state_algebra.LocalKet(*args, hs)[source]¶ Bases:
qnet.algebra.core.state_algebra.StateA state on a
LocalSpaceThis does not include operations, even if these operations only involve states acting on the same local space
-
space¶ The
HilbertSpaceon which the operator acts non-trivially
-
kwargs¶ The dictionary of keyword-only arguments for the instantiation of the Expression
-
-
qnet.algebra.core.state_algebra.ZeroKet= ZeroKet[source]¶ ZeroKet constant (singleton) object for the null-state.
-
qnet.algebra.core.state_algebra.TrivialKet= TrivialKet[source]¶ TrivialKet constant (singleton) object. This is the neutral element under the state tensor-product.
-
class
qnet.algebra.core.state_algebra.BasisKet(label_or_index, *, hs)[source]¶ Bases:
qnet.algebra.core.state_algebra.LocalKet,qnet.algebra.core.state_algebra.KetSymbolLocal basis state, identified by index or label
Basis kets are orthornormal, and the
next()andprev()methods can be used to move between basis states.Parameters: - label_or_index – If str, the label of the basis state (must be an
element of hs.basis_labels). If int, the (zero-based)
index of the basis state. This works if hs has an unknown
dimension. For a symbolic index, label_or_index can be an
instance of an appropriate subclass of
SymbolicLabelBase - hs (LocalSpace) – The Hilbert space in which the basis is defined
Raises: ValueError– if label_or_index is not in the Hilbert spaceTypeError– if label_or_index is not of an appropriate typeBasisNotSetError– if label_or_index is a str but no basis is defined for hs
Note
Basis states that are instantiated via a label or via an index are equivalent:
>>> hs = LocalSpace('tls', basis=('g', 'e')) >>> BasisKet('g', hs=hs) == BasisKet(0, hs=hs) True >>> print(ascii(BasisKet(0, hs=hs))) |g>^(tls)
When instantiating the
BasisKetviacreate(), an integer label outside the range of the underlying Hilbert space results in aZeroKet:>>> BasisKet.create(-1, hs=0) ZeroKet >>> BasisKet.create(2, hs=LocalSpace('tls', dimension=2)) ZeroKet
-
simplifications= [<function basis_ket_zero_outside_hs>]¶
-
args¶ Tuple containing label_or_index as its only element.
-
index¶ The index of the state in the Hilbert space basis
>>> hs = LocalSpace('tls', basis=('g', 'e')) >>> BasisKet('g', hs=hs).index 0 >>> BasisKet('e', hs=hs).index 1 >>> BasisKet(1, hs=hs).index 1
For a
BasisKetwith an indexed label, this may return a sympy expression:>>> hs = SpinSpace('s', spin='3/2') >>> i = symbols('i', cls=IdxSym) >>> lbl = SpinIndex(i/2, hs) >>> ket = BasisKet(lbl, hs=hs) >>> ket.index
i/2 + 3/2
-
next(n=1)[source]¶ Move up by n steps in the Hilbert space:
>>> hs = LocalSpace('tls', basis=('g', 'e')) >>> ascii(BasisKet('g', hs=hs).next()) '|e>^(tls)' >>> ascii(BasisKet(0, hs=hs).next()) '|e>^(tls)'
We can also go multiple steps:
>>> hs = LocalSpace('ten', dimension=10) >>> ascii(BasisKet(0, hs=hs).next(2)) '|2>^(ten)'
An increment that leads out of the Hilbert space returns zero:
>>> BasisKet(0, hs=hs).next(10) ZeroKet
- label_or_index – If str, the label of the basis state (must be an
element of hs.basis_labels). If int, the (zero-based)
index of the basis state. This works if hs has an unknown
dimension. For a symbolic index, label_or_index can be an
instance of an appropriate subclass of
-
class
qnet.algebra.core.state_algebra.CoherentStateKet(ampl, *, hs)[source]¶ Bases:
qnet.algebra.core.state_algebra.LocalKetLocal coherent state, labeled by a complex amplitude
Parameters: - hs (LocalSpace) – The local Hilbert space degree of freedom.
- ampl (Scalar) – The coherent displacement amplitude.
-
args¶ The tuple of positional arguments for the instantiation of the Expression
-
ampl¶
-
class
qnet.algebra.core.state_algebra.KetPlus(*operands)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_quantum_algebra.QuantumPlusSum of states
-
simplifications= [<function accept_bras>, <function assoc>, <function orderby>, <function collect_summands>, <function match_replace_binary>]¶
-
order_key¶
-
-
class
qnet.algebra.core.state_algebra.TensorKet(*operands)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_quantum_algebra.QuantumTimesA tensor product of kets
Each ket must belong to different degree of freedom (
LocalSpace).-
simplifications= [<function accept_bras>, <function assoc>, <function orderby>, <function filter_neutral>, <function match_replace_binary>]¶
-
order_key¶
-
classmethod
create(*ops)[source]¶ Instantiate while applying automatic simplifications
Instead of directly instantiating cls, it is recommended to use
create(), which applies simplifications to the args and keyword arguments according to thesimplificationsclass attribute, and returns an appropriate object (which may or may not be an instance of the original cls).Two simplifications of particular importance are
match_replace()andmatch_replace_binary()which apply rule-based simplifications.The
temporary_rules()context manager may be used to allow temporary modification of the automatic simplifications thatcreate()uses, in particular the rules formatch_replace()andmatch_replace_binary(). Inside the managed context, thesimplificationsclass attribute may be modified and rules can be managed withadd_rule()anddel_rules().
-
-
class
qnet.algebra.core.state_algebra.ScalarTimesKet(coeff, term)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_quantum_algebra.ScalarTimesQuantumExpressionProduct of a
Scalarcoefficient and a ketParameters: -
simplifications= [<function match_replace>]¶
-
classmethod
create(coeff, term)[source]¶ Instantiate while applying automatic simplifications
Instead of directly instantiating cls, it is recommended to use
create(), which applies simplifications to the args and keyword arguments according to thesimplificationsclass attribute, and returns an appropriate object (which may or may not be an instance of the original cls).Two simplifications of particular importance are
match_replace()andmatch_replace_binary()which apply rule-based simplifications.The
temporary_rules()context manager may be used to allow temporary modification of the automatic simplifications thatcreate()uses, in particular the rules formatch_replace()andmatch_replace_binary(). Inside the managed context, thesimplificationsclass attribute may be modified and rules can be managed withadd_rule()anddel_rules().
-
-
class
qnet.algebra.core.state_algebra.OperatorTimesKet(operator, ket)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_algebra.OperationProduct of an operator and a state.
-
simplifications= [<function match_replace>]¶
-
space¶ The
HilbertSpaceon which the operator acts non-trivially
-
operator¶
-
ket¶ The ket associated with a bra
-
-
class
qnet.algebra.core.state_algebra.StateDerivative(op, *, derivs, vals=None)[source]¶ Bases:
qnet.algebra.core.abstract_quantum_algebra.QuantumDerivative,qnet.algebra.core.state_algebra.StateSymbolic partial derivative of a state
See
QuantumDerivative.
-
class
qnet.algebra.core.state_algebra.Bra(ket)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_quantum_algebra.QuantumAdjointThe associated dual/adjoint state for any ket
-
bra¶ The bra associated with a ket
-
isket¶ False, by defintion
-
isbra¶ True, by definition
-
label¶
-
-
class
qnet.algebra.core.state_algebra.BraKet(bra, ket)[source]¶ Bases:
qnet.algebra.core.scalar_algebra.ScalarExpression,qnet.algebra.core.abstract_algebra.OperationThe symbolic inner product between two states
This mathermatically corresponds to:
\[\langle b | k \rangle\]which we define to be linear in the state \(k\) and anti-linear in \(b\).
Parameters: -
simplifications= [<function match_replace>]¶
-
ket¶ The ket of the braket
-
-
class
qnet.algebra.core.state_algebra.KetBra(ket, bra)[source]¶ Bases:
qnet.algebra.core.operator_algebra.Operator,qnet.algebra.core.abstract_algebra.OperationOuter product of two states
Parameters: -
simplifications= [<function match_replace>]¶
-
ket¶ The left factor in the product
-
bra¶ The co-state right factor in the product
This is a
Brainstance (unlike the bra given to the constructor
-
space¶ The Hilbert space of the states being multiplied
-
-
class
qnet.algebra.core.state_algebra.KetIndexedSum(term, *ranges)[source]¶ Bases:
qnet.algebra.core.state_algebra.State,qnet.algebra.core.abstract_quantum_algebra.QuantumIndexedSumIndexed sum over Kets
-
simplifications= [<function assoc_indexed>, <function indexed_sum_over_kronecker>, <function indexed_sum_over_const>, <function match_replace>]¶
-
classmethod
create(term, *ranges)[source]¶ Instantiate while applying automatic simplifications
Instead of directly instantiating cls, it is recommended to use
create(), which applies simplifications to the args and keyword arguments according to thesimplificationsclass attribute, and returns an appropriate object (which may or may not be an instance of the original cls).Two simplifications of particular importance are
match_replace()andmatch_replace_binary()which apply rule-based simplifications.The
temporary_rules()context manager may be used to allow temporary modification of the automatic simplifications thatcreate()uses, in particular the rules formatch_replace()andmatch_replace_binary(). Inside the managed context, thesimplificationsclass attribute may be modified and rules can be managed withadd_rule()anddel_rules().
-