Full API
Autogenerated API list
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 state
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 — ConstantSingle-mode vacuum state
QuantumSymbolics.AmplifierCPTP — TypeAmplifierCPTP(r::Number, noise::Int)Amplification CPTP map, defined by the squeezing amplitude parameter r and thermal noise parameter noise.
QuantumSymbolics.AttenuatorCPTP — TypeAttenuatorCPTP(theta::Number, noise::Int)Attenuation CPTP map, defined by the beam splitter rotation parameter theta and thermal noise parameter noise.
QuantumSymbolics.BeamSplitterOp — TypeTwo-mode beamsplitter operator in defined Fock basis.
QuantumSymbolics.BosonicThermalState — TypeThermal bosonic state in defined Fock basis.
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)]
0.25 + 0.0im ⋅ ⋅ ⋅
⋅ 0.25 + 0.0im ⋅ ⋅
⋅ ⋅ 0.25 + 0.0im ⋅
⋅ ⋅ ⋅ 0.25 + 0.0im
julia> express(MixedState(X1⊗X2), CliffordRepr())
𝒟ℯ𝓈𝓉𝒶𝒷
𝒳ₗ━━
+ X_
+ _X
𝒮𝓉𝒶𝒷
𝒵ₗ━━
+ Z_
+ _ZQuantumSymbolics.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.0imQuantumSymbolics.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.QuantumToolboxRepr — TypeRepresentation using kets, bras, density matrices, and superoperators governed by QuantumToolbox.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|AQuantumSymbolics.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
ABQuantumSymbolics.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.0imQuantumSymbolics.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
2AQuantumSymbolics.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.0imQuantumSymbolics.TwoSqueezeOp — TypeTwo-mode squeezing operator in defined Fock basis.
QuantumSymbolics.TwoSqueezedState — TypeTwo-mode squeezed vacuum state, or EPR state, in defined Fock basis.
Base.conj — Methodconj(x::Symbolic{AbstractKet})
conj(x::Symbolic{AbstractBra})
conj(x::Symbolic{AbstractOperator})
conj(x::Symbolic{AbstractSuperOperator})Symbolic complex conjugate operation. See also SConjugate.
Base.exp — Methodexp(x::Symbolic{AbstractOperator})Symbolic exponential 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 adjoint operation. See also SDagger.
QuantumInterface.dagger — Methoddagger(x::Symbolic{AbstractKet})Symbolic adjoint operation. See also SDagger.
QuantumInterface.dagger — Methoddagger(x::Symbolic{AbstractOperator})Symbolic adjoint operation. See also SDagger.
QuantumInterface.express — Methodexpress(s, repr::AbstractRepresentation=QuantumOpticsRepr()[, use::AbstractUse])The main interface for expressing symbolic 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)
⋅ 1.0 + 0.0im
1.0 + 0.0im ⋅
julia> express(QuantumSymbolics.X, CliffordRepr(), UseAsOperation())
sX
julia> express(QuantumSymbolics.X, CliffordRepr(), UseAsObservable())
+ XQuantumInterface.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.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 - qsimplify_fock
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 operator of type SOperator. By default, the defined basis is the spin-1/2 basis.
julia> @op A
A
julia> @op B FockBasis(2)
B