switching to high quality piper tts and added label translations
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
"""Hermitian conjugation."""
|
||||
|
||||
from sympy.core import Expr, sympify
|
||||
from sympy.functions.elementary.complexes import adjoint
|
||||
|
||||
__all__ = [
|
||||
'Dagger'
|
||||
]
|
||||
|
||||
|
||||
class Dagger(adjoint):
|
||||
"""General Hermitian conjugate operation.
|
||||
|
||||
Explanation
|
||||
===========
|
||||
|
||||
Take the Hermetian conjugate of an argument [1]_. For matrices this
|
||||
operation is equivalent to transpose and complex conjugate [2]_.
|
||||
|
||||
Parameters
|
||||
==========
|
||||
|
||||
arg : Expr
|
||||
The SymPy expression that we want to take the dagger of.
|
||||
evaluate : bool
|
||||
Whether the resulting expression should be directly evaluated.
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
Daggering various quantum objects:
|
||||
|
||||
>>> from sympy.physics.quantum.dagger import Dagger
|
||||
>>> from sympy.physics.quantum.state import Ket, Bra
|
||||
>>> from sympy.physics.quantum.operator import Operator
|
||||
>>> Dagger(Ket('psi'))
|
||||
<psi|
|
||||
>>> Dagger(Bra('phi'))
|
||||
|phi>
|
||||
>>> Dagger(Operator('A'))
|
||||
Dagger(A)
|
||||
|
||||
Inner and outer products::
|
||||
|
||||
>>> from sympy.physics.quantum import InnerProduct, OuterProduct
|
||||
>>> Dagger(InnerProduct(Bra('a'), Ket('b')))
|
||||
<b|a>
|
||||
>>> Dagger(OuterProduct(Ket('a'), Bra('b')))
|
||||
|b><a|
|
||||
|
||||
Powers, sums and products::
|
||||
|
||||
>>> A = Operator('A')
|
||||
>>> B = Operator('B')
|
||||
>>> Dagger(A*B)
|
||||
Dagger(B)*Dagger(A)
|
||||
>>> Dagger(A+B)
|
||||
Dagger(A) + Dagger(B)
|
||||
>>> Dagger(A**2)
|
||||
Dagger(A)**2
|
||||
|
||||
Dagger also seamlessly handles complex numbers and matrices::
|
||||
|
||||
>>> from sympy import Matrix, I
|
||||
>>> m = Matrix([[1,I],[2,I]])
|
||||
>>> m
|
||||
Matrix([
|
||||
[1, I],
|
||||
[2, I]])
|
||||
>>> Dagger(m)
|
||||
Matrix([
|
||||
[ 1, 2],
|
||||
[-I, -I]])
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [1] https://en.wikipedia.org/wiki/Hermitian_adjoint
|
||||
.. [2] https://en.wikipedia.org/wiki/Hermitian_transpose
|
||||
"""
|
||||
|
||||
@property
|
||||
def kind(self):
|
||||
"""Find the kind of a dagger of something (just the kind of the something)."""
|
||||
return self.args[0].kind
|
||||
|
||||
def __new__(cls, arg, evaluate=True):
|
||||
if hasattr(arg, 'adjoint') and evaluate:
|
||||
return arg.adjoint()
|
||||
elif hasattr(arg, 'conjugate') and hasattr(arg, 'transpose') and evaluate:
|
||||
return arg.conjugate().transpose()
|
||||
return Expr.__new__(cls, sympify(arg))
|
||||
|
||||
adjoint.__name__ = "Dagger"
|
||||
adjoint._sympyrepr = lambda a, b: "Dagger(%s)" % b._print(a.args[0])
|
||||
Reference in New Issue
Block a user