QuantumSymbolics.jl reference
You can also consult the complete QuantumSymbolics.jl
documentation.
Autogenerated API list for QuantumSymbolics
QuantumSymbolics.CNOT
— ConstantCNOT gate
QuantumSymbolics.CPHASE
— ConstantCPHASE gate
QuantumSymbolics.Create
— ConstantCreation operator, also available as the constant âꜛ
, in an infinite dimension Fock basis. There is no unicode dagger superscript, so we use the uparrow
QuantumSymbolics.Destroy
— ConstantAnnihilation operator, also available as the constant â
, in an infinite dimension Fock basis.
QuantumSymbolics.F₁
— ConstantSingle photon basis state of n
QuantumSymbolics.H
— ConstantHadamard gate
QuantumSymbolics.I
— ConstantIdentity operator in qubit basis
QuantumSymbolics.N
— ConstantNumber operator, also available as the constant n̂
, in an infinite dimension Fock basis.
QuantumSymbolics.Pm
— ConstantPauli "minus" operator, also available as the constant σ₋
QuantumSymbolics.Pp
— ConstantPauli "plus" operator, also available as the constant σ₊
QuantumSymbolics.X
— ConstantPauli X operator, also available as the constant σˣ
QuantumSymbolics.X1
— ConstantBasis state of σˣ
QuantumSymbolics.X2
— ConstantBasis state of σˣ
QuantumSymbolics.Y
— ConstantPauli Y operator, also available as the constant σʸ
QuantumSymbolics.Y1
— ConstantBasis state of σʸ
QuantumSymbolics.Y2
— ConstantBasis state of σʸ
QuantumSymbolics.Z
— ConstantPauli Z operator, also available as the constant σᶻ
QuantumSymbolics.Z1
— ConstantBasis state of σᶻ
QuantumSymbolics.Z2
— ConstantBasis state of σᶻ
QuantumSymbolics.vac
— ConstantVacuum basis state of n
QuantumSymbolics.AbstractRepresentation
— TypeAn abstract type for the supported representation of quantum objects.
QuantumSymbolics.CliffordRepr
— TypeRepresentation using tableaux governed by QuantumClifford.jl
QuantumSymbolics.CoherentState
— TypeCoherent state in defined Fock basis.
QuantumSymbolics.CreateOp
— TypeCreation (raising) operator.
julia> f = FockState(2)
|2⟩
julia> create = CreateOp()
a†
julia> qsimplify(create*f, rewriter=qsimplify_fock)
(sqrt(3))|3⟩
QuantumSymbolics.DephasingCPTP
— TypeSingle-qubit dephasing CPTP map
QuantumSymbolics.DestroyOp
— TypeAnnihilation (lowering or destroy) operator in defined Fock basis.
julia> f = FockState(2)
|2⟩
julia> destroy = DestroyOp()
a
julia> qsimplify(destroy*f, rewriter=qsimplify_fock)
(sqrt(2))|1⟩
QuantumSymbolics.DisplaceOp
— TypeDisplacement operator in defined Fock basis.
julia> f = FockState(0)
|0⟩
julia> displace = DisplaceOp(im)
D(im)
julia> qsimplify(displace*f, rewriter=qsimplify_fock)
|im⟩
QuantumSymbolics.FockState
— TypeFock state in defined Fock basis.
QuantumSymbolics.GateCPTP
— TypeA unitary gate followed by a CPTP map
QuantumSymbolics.IdentityOp
— TypeThe identity operator for a given basis
julia> IdentityOp(X1⊗X2)
𝕀
julia> express(IdentityOp(Z2))
Operator(dim=2x2)
basis: Spin(1/2)sparse([1, 2], [1, 2], ComplexF64[1.0 + 0.0im, 1.0 + 0.0im], 2, 2)
QuantumSymbolics.KrausRepr
— TypeKraus representation of a quantum channel
julia> @op A₁; @op A₂; @op A₃;
julia> K = kraus(A₁, A₂, A₃)
𝒦(A₁,A₂,A₃)
julia> @op ρ;
julia> K*ρ
(A₁ρA₁†+A₂ρA₂†+A₃ρA₃†)
QuantumSymbolics.MixedState
— TypeCompletely depolarized state
julia> MixedState(X1⊗X2)
𝕄
julia> express(MixedState(X1⊗X2))
Operator(dim=4x4)
basis: [Spin(1/2) ⊗ Spin(1/2)]sparse([1, 2, 3, 4], [1, 2, 3, 4], ComplexF64[0.25 + 0.0im, 0.25 + 0.0im, 0.25 + 0.0im, 0.25 + 0.0im], 4, 4)
julia> express(MixedState(X1⊗X2), CliffordRepr())
𝒟ℯ𝓈𝓉𝒶𝒷
𝒳ₗ━━
+ X_
+ _X
𝒮𝓉𝒶𝒷
𝒵ₗ━━
+ Z_
+ _Z
QuantumSymbolics.NumberOp
— TypeNumber operator.
julia> f = FockState(2)
|2⟩
julia> num = NumberOp()
n
julia> qsimplify(num*f, rewriter=qsimplify_fock)
2|2⟩
QuantumSymbolics.PauliNoiseCPTP
— TypeSingle-qubit Pauli noise CPTP map
julia> apply!(express(Z1), [1], express(PauliNoiseCPTP(1/4,1/4,1/4)))
Operator(dim=2x2)
basis: Spin(1/2)
0.5+0.0im 0.0+0.0im
0.0+0.0im 0.5+0.0im
QuantumSymbolics.PhaseShiftOp
— TypePhase-shift operator in defined Fock basis.
julia> c = CoherentState(im)
|im⟩
julia> phase = PhaseShiftOp(pi)
U(π)
julia> qsimplify(phase*c, rewriter=qsimplify_fock)
|1.2246467991473532e-16 - 1.0im⟩
QuantumSymbolics.QuantumMCRepr
— TypeSimilar to QuantumOpticsRepr
, but using trajectories instead of superoperators.
QuantumSymbolics.QuantumOpticsRepr
— TypeRepresentation using kets, bras, density matrices, and superoperators governed by QuantumOptics.jl
.
QuantumSymbolics.SAdd
— TypeAddition of quantum objects (kets, operators, or bras).
julia> @ket k₁; @ket k₂;
julia> k₁ + k₂
(|k₁⟩+|k₂⟩)
QuantumSymbolics.SAnticommutator
— TypeSymbolic anticommutator of two operators.
julia> @op A; @op B;
julia> anticommutator(A, B)
{A,B}
QuantumSymbolics.SApplyBra
— TypeSymbolic application of an operator on a bra (from the right).
julia> @bra b; @op A;
julia> b*A
⟨b|A
QuantumSymbolics.SApplyKet
— TypeSymbolic application of an operator on a ket (from the left).
julia> @ket k; @op A;
julia> A*k
A|k⟩
QuantumSymbolics.SBra
— TypeSymbolic bra
QuantumSymbolics.SBraKet
— TypeSymbolic inner product of a bra and a ket.
julia> @bra b; @ket k;
julia> b*k
⟨b||k⟩
QuantumSymbolics.SCommutator
— TypeSymbolic commutator of two operators.
julia> @op A; @op B;
julia> commutator(A, B)
[A,B]
julia> commutator(A, A)
𝟎
QuantumSymbolics.SConjugate
— TypeComplex conjugate of quantum objects (kets, bras, operators).
julia> @op A; @ket k;
julia> conj(A)
Aˣ
julia> conj(k)
|k⟩ˣ
QuantumSymbolics.SDagger
— TypeDagger, i.e., adjoint of quantum objects (kets, bras, operators).
julia> @ket a; @op A;
julia> dagger(2*im*A*a)
(0 - 2im)|a⟩†A†
julia> @op B;
julia> dagger(A*B)
B†A†
julia> ℋ = SHermitianOperator(:ℋ); U = SUnitaryOperator(:U);
julia> dagger(ℋ)
ℋ
julia> dagger(U)
U⁻¹
QuantumSymbolics.SExpOperator
— TypeExponential of a symbolic operator.
julia> @op A; @op B;
julia> exp(A)
exp(A)
QuantumSymbolics.SHermitianOperator
— TypeSymbolic Hermitian operator
QuantumSymbolics.SHermitianUnitaryOperator
— TypeSymbolic Hermitian and unitary operator
QuantumSymbolics.SInvOperator
— TypeInverse of an operator.
julia> @op A;
julia> inv(A)
A⁻¹
julia> inv(A)*A
𝕀
QuantumSymbolics.SKet
— TypeSymbolic ket
QuantumSymbolics.SMulOperator
— TypeSymbolic application of operator on operator.
julia> @op A; @op B;
julia> A*B
AB
QuantumSymbolics.SOperator
— TypeSymbolic operator
QuantumSymbolics.SOuterKetBra
— TypeSymbolic outer product of a ket and a bra.
julia> @bra b; @ket k;
julia> k*b
|k⟩⟨b|
QuantumSymbolics.SPartialTrace
— TypePartial trace over system i of a composite quantum system
julia> @op 𝒪 SpinBasis(1//2)⊗SpinBasis(1//2);
julia> op = ptrace(𝒪, 1)
tr1(𝒪)
julia> QuantumSymbolics.basis(op)
Spin(1/2)
julia> @op A; @op B;
julia> ptrace(A⊗B, 1)
(tr(A))B
julia> @ket k; @bra b;
julia> factorizable = A ⊗ (k*b)
(A⊗|k⟩⟨b|)
julia> ptrace(factorizable, 1)
(tr(A))|k⟩⟨b|
julia> ptrace(factorizable, 2)
(⟨b||k⟩)A
julia> mixed_state = (A⊗(k*b)) + ((k*b)⊗B)
((A⊗|k⟩⟨b|)+(|k⟩⟨b|⊗B))
julia> ptrace(mixed_state, 1)
((0 + ⟨b||k⟩)B+(tr(A))|k⟩⟨b|)
julia> ptrace(mixed_state, 2)
((0 + ⟨b||k⟩)A+(tr(B))|k⟩⟨b|)
QuantumSymbolics.SProjector
— TypeProjector for a given ket.
julia> projector(X1⊗X2)
𝐏[|X₁⟩|X₂⟩]
julia> express(projector(X2))
Operator(dim=2x2)
basis: Spin(1/2)
0.5+0.0im -0.5-0.0im
-0.5+0.0im 0.5+0.0im
QuantumSymbolics.SScaled
— TypeScaling of a quantum object (ket, operator, or bra) by a number.
julia> @ket k
|k⟩
julia> 2*k
2|k⟩
julia> @op A
A
julia> 2*A
2A
QuantumSymbolics.SSuperOpApply
— TypeSymbolic application of a superoperator on an operator
julia> @op A; @superop S;
julia> S*A
S[A]
QuantumSymbolics.SSuperOperator
— TypeSymbolic superoperator
QuantumSymbolics.STrace
— TypeTrace of an operator
julia> @op A; @op B;
julia> tr(A)
tr(A)
julia> tr(commutator(A, B))
0
julia> @bra b; @ket k;
julia> tr(k*b)
⟨b||k⟩
QuantumSymbolics.STranspose
— TypeTranspose of quantum objects (kets, bras, operators).
julia> @op A; @op B; @ket k;
julia> transpose(A)
Aᵀ
julia> transpose(A+B)
(Aᵀ+Bᵀ)
julia> transpose(k)
|k⟩ᵀ
QuantumSymbolics.SUnitaryOperator
— TypeSymbolic unitary operator
QuantumSymbolics.SVec
— TypeVectorization of a symbolic operator.
julia> @op A; @op B;
julia> vec(A)
|A⟩⟩
julia> vec(A+B)
(|A⟩⟩+|B⟩⟩)
QuantumSymbolics.SZeroBra
— TypeSymbolic zero bra
QuantumSymbolics.SZeroKet
— TypeSymbolic zero ket
QuantumSymbolics.SZeroOperator
— TypeSymbolic zero operator
QuantumSymbolics.SqueezeOp
— TypeSqueezing operator in defined Fock basis.
julia> S = SqueezeOp(pi)
S(π)
julia> qsimplify(S*vac, rewriter=qsimplify_fock)
|0,π⟩
QuantumSymbolics.SqueezedState
— TypeSqueezed vacuum state in defined Fock basis.
QuantumSymbolics.StabilizerState
— TypeState defined by a stabilizer tableau
For full functionality you also need to import the QuantumClifford
library.
julia> using QuantumClifford, QuantumOptics # needed for the internal representation of the stabilizer tableaux and the conversion to a ket
julia> StabilizerState(S"XX ZZ")
𝒮₂
julia> express(StabilizerState(S"-X"))
Ket(dim=2)
basis: Spin(1/2)
0.7071067811865475 + 0.0im
-0.7071067811865475 + 0.0im
Base.conj
— Methodconj(x::Symbolic{AbstractKet})
conj(x::Symbolic{AbstractBra})
conj(x::Symbolic{AbstractOperator})
conj(x::Symbolic{AbstractSuperOperator})
Symbolic transpose operation. See also SConjugate
.
Base.exp
— Methodexp(x::Symbolic{AbstractOperator})
Symbolic inverse of an operator. See also SExpOperator
.
Base.inv
— Methodinv(x::Symbolic{AbstractOperator})
Symbolic inverse of an operator. See also SInvOperator
.
Base.transpose
— Methodtranspose(x::Symbolic{AbstractKet})
transpose(x::Symbolic{AbstractBra})
transpose(x::Symbolic{AbstractOperator})
Symbolic transpose operation. See also STranspose
.
Base.vec
— Methodvec(x::Symbolic{AbstractOperator})
Symbolic vector representation of an operator. See also SVec
.
LinearAlgebra.tr
— Methodtr(x::Symbolic{AbstractOperator})
Symbolic trace operation. See also STrace
.
QuantumInterface.dagger
— Methoddagger(x::Symbolic{AbstractBra})
Symbolic transpose operation. See also SDagger
.
QuantumInterface.dagger
— Methoddagger(x::Symbolic{AbstractKet})
Symbolic transpose operation. See also SDagger
.
QuantumInterface.dagger
— Methoddagger(x::Symbolic{AbstractOperator})
Symbolic transpose operation. See also SDagger
.
QuantumInterface.projector
— Methodprojector(x::Symbolic{AbstractKet})
Symbolic projection operation. See also SProjector
.
QuantumInterface.ptrace
— Methodptrace(x::Symbolic{AbstractOperator})
Symbolic partial trace operation. See also SPartialTrace
.
QuantumSymbolics.anticommutator
— FunctionThe anticommutator of two operators.
QuantumSymbolics.commutator
— FunctionThe commutator of two operators.
QuantumSymbolics.consistent_representation
— MethodPick a representation that is consistent with given representations and appropriate for the given state.
QuantumSymbolics.express
— Functionexpress(s, repr::AbstractRepresentation=QuantumOpticsRepr()[, use::AbstractUse])
The main interface for expressing quantum objects in various representations.
julia> express(X1)
Ket(dim=2)
basis: Spin(1/2)
0.7071067811865475 + 0.0im
0.7071067811865475 + 0.0im
julia> express(X1, CliffordRepr())
𝒟ℯ𝓈𝓉𝒶𝒷
+ Z
𝒮𝓉𝒶𝒷
+ X
julia> express(QuantumSymbolics.X)
Operator(dim=2x2)
basis: Spin(1/2)sparse([2, 1], [1, 2], ComplexF64[1.0 + 0.0im, 1.0 + 0.0im], 2, 2)
julia> express(QuantumSymbolics.X, CliffordRepr(), UseAsOperation())
sX
julia> express(QuantumSymbolics.X, CliffordRepr(), UseAsObservable())
+ X
QuantumSymbolics.qexpand
— Methodqexpand(s)
Manually expand a symbolic expression of quantum objects.
julia> @op A; @op B; @op C;
julia> qexpand(commutator(A, B))
(-1BA+AB)
julia> qexpand(A⊗(B+C))
((A⊗B)+(A⊗C))
julia> @ket k₁; @ket k₂;
julia> qexpand(A*(k₁+k₂))
(A|k₁⟩+A|k₂⟩)
QuantumSymbolics.qsimplify
— Methodqsimplify(s; rewriter=nothing)
Manually simplify a symbolic expression of quantum objects.
If the keyword rewriter
is not specified, then qsimplify
will apply every defined rule to the expression. For performance or single-purpose motivations, the user has the option to define a specific rewriter for qsimplify
to apply to the expression. The defined rewriters for simplification are the following objects: - qsimplify_pauli
- qsimplify_commutator
- qsimplify_anticommutator
julia> qsimplify(σʸ*commutator(σˣ*σᶻ, σᶻ))
(0 - 2im)Z
julia> qsimplify(anticommutator(σˣ, σˣ), rewriter=qsimplify_anticommutator)
2𝕀
QuantumSymbolics.@bra
— Macro@bra(name, basis=SpinBasis(1//2))
Define a symbolic bra of type SBra
. By default, the defined basis is the spin-1/2 basis.
julia> @bra b₁
⟨b₁|
julia> @bra b₂ FockBasis(2)
⟨b₂|
QuantumSymbolics.@ket
— Macro@ket(name, basis=SpinBasis(1//2))
Define a symbolic ket of type SKet
. By default, the defined basis is the spin-1/2 basis.
julia> @ket k₁
|k₁⟩
julia> @ket k₂ FockBasis(2)
|k₂⟩
QuantumSymbolics.@op
— Macro@op(name, basis=SpinBasis(1//2))
Define a symbolic ket of type SOperator
. By default, the defined basis is the spin-1/2 basis.
julia> @op A
A
julia> @op B FockBasis(2)
B