Functions operating on Qobj

QuantumToolbox also provide functions (methods) that operates on QuantumObject.

You can click the function links and see the corresponding docstring for more information.

Linear algebra and attributes

Here is a table that summarizes all the supported linear algebra functions and attribute functions operating on a given QuantumObject Q:

DescriptionFunction callSynonyms
conjugateconj(Q)-
transposetranspose(Q)trans(Q)
conjugate transpositionadjoint(Q)Q', dag(Q)
partial transposepartial_transpose(Q, mask)-
dot productdot(Q1, Q2)-
generalized dot productdot(Q1, Q2, Q3)matrix_element(Q1, Q2, Q3)
tracetr(Q)-
partial traceptrace(Q, sel)-
singular valuessvdvals(Q)-
standard vector p-norm or Schatten p-normnorm(Q, p)-
normalizationnormalize(Q, p)unit(Q, p)
normalization (in-place)normalize!(Q, p)-
matrix inverseinv(Q)-
matrix square rootsqrt(Q)√(Q), sqrtm(Q)
matrix logarithmlog(Q)logm(Q)
matrix exponentialexp(Q)expm(Q)
matrix sinesin(Q)sinm(Q)
matrix cosinecos(Q)cosm(Q)
diagonal elementsdiag(Q)-
projectorproj(Q)-
puritypurity(Q)-
permutepermute(Q, order)-
remove small elementstidyup(Q, tol)-
remove small elements (in-place)tidyup!(Q, tol)-
get dataget_data(Q)-
get coherenceget_coherence(Q)-

Eigenvalue decomposition

Examples

ψ = normalize(basis(4, 1) + basis(4, 2))
Quantum Object:   type=Ket   dims=[4]   size=(4,)
4-element Vector{ComplexF64}:
                0.0 + 0.0im
 0.7071067811865475 + 0.0im
 0.7071067811865475 + 0.0im
                0.0 + 0.0im
ψ'
Quantum Object:   type=Bra   dims=[4]   size=(1, 4)
1×4 adjoint(::Vector{ComplexF64}) with eltype ComplexF64:
 0.0-0.0im  0.707107-0.0im  0.707107-0.0im  0.0-0.0im
ρ = coherent_dm(5, 1)
Quantum Object:   type=Operator   dims=[5]   size=(5, 5)   ishermitian=true
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744+0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054+0.0im   0.260936+0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207+0.0im    0.14614+0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267+0.0im  0.0882269+0.0im     0.035077+0.0im  0.0211765+0.0im
diag(ρ)
5-element Vector{ComplexF64}:
   0.3679111729923387 + 0.0im
   0.3675770456232403 + 0.0im
  0.18523331233838003 + 0.0im
  0.05810197190350208 + 0.0im
 0.021176497142538265 + 0.0im
get_data(ρ)
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744+0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054+0.0im   0.260936+0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207+0.0im    0.14614+0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267+0.0im  0.0882269+0.0im     0.035077+0.0im  0.0211765+0.0im
norm(ρ)
0.9999999999999996
sqrtm(ρ)
Quantum Object:   type=Operator   dims=[5]   size=(5, 5)   ishermitian=true
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744-0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054-0.0im   0.260936-0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207-0.0im    0.14614-0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267-0.0im  0.0882269-0.0im     0.035077-0.0im  0.0211765+0.0im
tr(ρ)
0.9999999999999993 + 0.0im
eigenenergies(ρ)
5-element Vector{Float64}:
 -3.188562758433179e-17
 -7.70881124130806e-18
  2.0684351320241445e-17
  1.0235138990670176e-16
  0.9999999999999996
result = eigenstates(ρ)
EigsolveResult:   type=Operator   dims=[5]
values:
5-element Vector{ComplexF64}:
 -2.8177392874225097e-17 + 0.0im
   3.416070845000482e-17 + 0.0im
   7.728341127110703e-17 + 0.0im
   8.881784197001252e-16 + 0.0im
      0.9999999999999994 + 0.0im
vectors:
5×5 Matrix{ComplexF64}:
  0.349081+0.0im   0.699533+0.0im  …  -0.0892167+0.0im  -0.606557+0.0im
 -0.698381+0.0im  -0.132457+0.0im     -0.0891762+0.0im  -0.606281+0.0im
  0.596321+0.0im  -0.648729+0.0im     -0.0633045+0.0im  -0.430387+0.0im
 -0.186568+0.0im  -0.268811+0.0im     -0.0354544+0.0im  -0.241044+0.0im
       0.0+0.0im        0.0+0.0im       0.989355+0.0im  -0.145521-0.0im
λ, ψ = result
λ # eigenvalues
5-element Vector{ComplexF64}:
 -2.8177392874225097e-17 + 0.0im
   3.416070845000482e-17 + 0.0im
   7.728341127110703e-17 + 0.0im
   8.881784197001252e-16 + 0.0im
      0.9999999999999994 + 0.0im
ψ # eigenvectors
5-element Vector{QuantumObject{Vector{ComplexF64}, KetQuantumObject, 1}}:
 Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.34908090726365426 + 0.0im
  -0.6983812275352181 + 0.0im
   0.5963209517322131 + 0.0im
 -0.18656769210014237 + 0.0im
                  0.0 + 0.0im
 Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.6995328227558701 + 0.0im
 -0.1324572834510804 + 0.0im
 -0.6487290623177562 + 0.0im
 -0.2688112751584079 + 0.0im
                 0.0 + 0.0im
 Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.11369058957774669 + 0.0im
 -0.34523801249281383 + 0.0im
 -0.18523271117272722 + 0.0im
   0.9130027422100534 + 0.0im
                  0.0 + 0.0im
 Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  -0.08921674125585327 + 0.0im
   -0.0891762198903574 + 0.0im
  -0.06330447537681073 + 0.0im
 -0.035454413343867425 + 0.0im
    0.9893550944213416 + 0.0im
 Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  -0.6065568176126116 + 0.0im
   -0.606281325477901 + 0.0im
 -0.43038739797812414 + 0.0im
 -0.24104350624628368 + 0.0im
 -0.14552146626026788 - 0.0im
λ, ψ, T = result
T # transformation matrix
5×5 Matrix{ComplexF64}:
  0.349081+0.0im   0.699533+0.0im  …  -0.0892167+0.0im  -0.606557+0.0im
 -0.698381+0.0im  -0.132457+0.0im     -0.0891762+0.0im  -0.606281+0.0im
  0.596321+0.0im  -0.648729+0.0im     -0.0633045+0.0im  -0.430387+0.0im
 -0.186568+0.0im  -0.268811+0.0im     -0.0354544+0.0im  -0.241044+0.0im
       0.0+0.0im        0.0+0.0im       0.989355+0.0im  -0.145521-0.0im