Full API

Autogenerated API list

QuantumSymbolics.CreateConstant

Creation operator, also available as the constant âꜛ, in an infinite dimension Fock basis. There is no unicode dagger superscript, so we use the uparrow

source
QuantumSymbolics.NConstant

Number operator, also available as the constant , in an infinite dimension Fock basis.

source
QuantumSymbolics.CreateOpType

Creation (raising) operator.

julia> f = FockState(2)
|2⟩

julia> create = CreateOp()
a†

julia> qsimplify(create*f, rewriter=qsimplify_fock)
(sqrt(3))|3⟩
source
QuantumSymbolics.DestroyOpType

Annihilation (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⟩
source
QuantumSymbolics.DisplaceOpType

Displacement operator in defined Fock basis.

julia> f = FockState(0)
|0⟩

julia> displace = DisplaceOp(im)
D(im)

julia> qsimplify(displace*f, rewriter=qsimplify_fock)
|im⟩
source
QuantumSymbolics.IdentityOpType

The 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)
source
QuantumSymbolics.KrausReprType

Kraus 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₃†)
source
QuantumSymbolics.MixedStateType

Completely 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
source
QuantumSymbolics.NumberOpType

Number operator.

julia> f = FockState(2)
|2⟩

julia> num = NumberOp()
n

julia> qsimplify(num*f, rewriter=qsimplify_fock)
2|2⟩
source
QuantumSymbolics.PauliNoiseCPTPType

Single-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
source
QuantumSymbolics.PhaseShiftOpType

Phase-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⟩
source
QuantumSymbolics.SAddType

Addition of quantum objects (kets, operators, or bras).

julia> @ket k₁; @ket k₂;

julia> k₁ + k₂
(|k₁⟩+|k₂⟩)
source
QuantumSymbolics.SConjugateType

Complex conjugate of quantum objects (kets, bras, operators).

julia> @op A; @ket k;

julia> conj(A)
Aˣ

julia> conj(k)
|k⟩ˣ
source
QuantumSymbolics.SDaggerType

Dagger, 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⁻¹
source
QuantumSymbolics.SPartialTraceType

Partial 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|)
source
QuantumSymbolics.SProjectorType

Projector 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
source
QuantumSymbolics.SScaledType

Scaling 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
source
QuantumSymbolics.STraceType

Trace 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⟩
source
QuantumSymbolics.STransposeType

Transpose 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⟩ᵀ
source
QuantumSymbolics.SVecType

Vectorization of a symbolic operator.

julia> @op A; @op B;

julia> vec(A)
|A⟩⟩

julia> vec(A+B)
(|A⟩⟩+|B⟩⟩)
source
QuantumSymbolics.SqueezeOpType

Squeezing operator in defined Fock basis.

julia> S = SqueezeOp(pi)
S(π)

julia> qsimplify(S*vac, rewriter=qsimplify_fock)
|0,π⟩
source
QuantumSymbolics.StabilizerStateType

State 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
source
Base.conjMethod
conj(x::Symbolic{AbstractKet})
conj(x::Symbolic{AbstractBra})
conj(x::Symbolic{AbstractOperator})
conj(x::Symbolic{AbstractSuperOperator})

Symbolic transpose operation. See also SConjugate.

source
Base.transposeMethod
transpose(x::Symbolic{AbstractKet})
transpose(x::Symbolic{AbstractBra})
transpose(x::Symbolic{AbstractOperator})

Symbolic transpose operation. See also STranspose.

source
Base.vecMethod
vec(x::Symbolic{AbstractOperator})

Symbolic vector representation of an operator. See also SVec.

source
QuantumSymbolics.expressFunction
express(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
source
QuantumSymbolics.qexpandMethod
qexpand(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₂⟩)
source
QuantumSymbolics.qsimplifyMethod
qsimplify(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𝕀
source
QuantumSymbolics.@braMacro
@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₂|
source
QuantumSymbolics.@ketMacro
@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₂⟩
source
QuantumSymbolics.@opMacro
@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
source