Skip to content

Errow when showing operators containing symbolic variables #184

@mabuni1998

Description

@mabuni1998

When working with symbolic variables, they combine almost seamlessly with the quantum optics operators (nice!). But when printing the operator, an error occurs.

MWE:

using Symbolics
using QuantumOptics

@variables α
ba = FockBasis(2)
a = dense(destroy(ba))
H1 = α * dagger(a) * a

Producing:

ERROR: MethodError: no method matching round(::Num, ::RoundingMode{:Nearest})
This error has been manually thrown, explicitly, so the method may exist but be intentionally marked as unimplemented.

Closest candidates are:
  round(::Real, ::RoundingMode; digits, sigdigits, base)
   @ Base floatfuncs.jl:50
  round(::Type{T}, ::Any, ::RoundingMode) where T>:Missing
   @ Base missing.jl:148
  round(::Type{T}, ::Any, ::RoundingMode) where T
   @ Base rounding.jl:479
  ...

Stacktrace:
  [1] round(x::Num, r::RoundingMode{:Nearest}; digits::Nothing, sigdigits::Nothing, base::Nothing)
    @ Base .\floatfuncs.jl:56
  [2] round(x::Num, r::RoundingMode{:Nearest})
    @ Base .\floatfuncs.jl:50
  [3] _round_invstep(x::Num, invstep::Num, r::RoundingMode{:Nearest})
    @ Base .\floatfuncs.jl:77
  [4] _round_digits(x::Num, r::RoundingMode{:Nearest}, digits::Int32, base::Int64)
    @ Base .\floatfuncs.jl:115
  [5] round(x::Num, r::RoundingMode{:Nearest}; digits::Int32, sigdigits::Nothing, base::Nothing)
    @ Base .\floatfuncs.jl:68
  [6] round(z::Complex{Num}, rr::RoundingMode{:Nearest}, ri::RoundingMode{:Nearest}; kwargs::@Kwargs{digits::Int32})
    @ Base .\complex.jl:1113
  [7] (::Base.Broadcast.var"#29#30"{@Kwargs{digits::Int32}, typeof(round)})(args::Complex{Num})
    @ Base.Broadcast .\broadcast.jl:1306
  [8] _broadcast_getindex_evalf
    @ .\broadcast.jl:673 [inlined]
  [9] _broadcast_getindex
    @ .\broadcast.jl:646 [inlined]
 [10] getindex
    @ .\broadcast.jl:605 [inlined]
 [11] copy(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#29#30"{@Kwargs{digits::Int32}, typeof(round)}, Tuple{Matrix{Complex{Num}}}})
    @ Base.Broadcast .\broadcast.jl:906
 [12] materialize
    @ .\broadcast.jl:867 [inlined]
 [13] show(stream::IOContext{Base.TTY}, x::Operator{FockBasis{Int64}, FockBasis{Int64}, Matrix{Complex{Num}}})
    @ QuantumOpticsBase C:\Users\mabun\.julia\packages\QuantumOpticsBase\bXZS2\src\printing.jl:79
 [14] show(io::IOContext{Base.TTY}, ::MIME{Symbol("text/plain")}, x::Operator{FockBasis{Int64}, FockBasis{Int64}, Matrix{Complex{Num}}})
    @ Base.Multimedia .\multimedia.jl:47
 [15] (::REPL.var"#68#69"{REPL.REPLDisplay{REPL.LineEditREPL}, MIME{Symbol("text/plain")}, Base.RefValue{Any}})(io::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:367
 [16] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:661
 [17] display(d::REPL.REPLDisplay, mime::MIME{Symbol("text/plain")}, x::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:353
 [18] display(d::REPL.REPLDisplay, x::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:372
 [19] display(x::Any)
    @ Base.Multimedia .\multimedia.jl:340
 [20] #invokelatest#2
    @ .\essentials.jl:1055 [inlined]
 [21] invokelatest
    @ .\essentials.jl:1052 [inlined]
 [22] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:237
 [23] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:276
 [24] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:179
 [25] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:38
 [26] #67
    @ c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:150 [inlined]
 [27] with_logstate(f::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, logstate::Base.CoreLogging.LogState)
    @ Base.CoreLogging .\logging\logging.jl:522
 [28] with_logger
    @ .\logging\logging.jl:632 [inlined]
 [29] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:263
 [30] #invokelatest#2
    @ .\essentials.jl:1055 [inlined]
 [31] invokelatest(::Any)
    @ Base .\essentials.jl:1052
 [32] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:34

The error occurs due to the show function for dense operators:

function show(stream::IO, x::DenseOpType)
    summary(stream, x)
    print(stream, "\n")
    if !_std_order
        if !haskey(stream, :compact)
            stream = IOContext(stream, :compact => true)
        end
        Base.print_array(stream, round.(x.data; digits=machineprecorder))
    else
        showarray_stdord(stream, round.(x.data; digits=machineprecorder), x.basis_l.shape, x.basis_r.shape, false, header=false)
    end
end

where round.(x.data; digits=machineprecorder) throws an error when the data is symbolic.

A similar error occurs for a non-dense operator:

a = destroy(ba)
H1 = α * dagger(a) * a

giving:

Closest candidates are:
  round(::Real, ::RoundingMode; digits, sigdigits, base)
   @ Base floatfuncs.jl:50
  round(::Type{T}, ::Any, ::RoundingMode) where T>:Missing
   @ Base missing.jl:148
  round(::Type{T}, ::Any, ::RoundingMode) where T
   @ Base rounding.jl:479
  ...

Stacktrace:
  [1] round(x::Num, r::RoundingMode{:Nearest}; digits::Nothing, sigdigits::Nothing, base::Nothing)
    @ Base .\floatfuncs.jl:56
  [2] round(x::Num, r::RoundingMode{:Nearest})
    @ Base .\floatfuncs.jl:50
  [3] _round_invstep(x::Num, invstep::Num, r::RoundingMode{:Nearest})
    @ Base .\floatfuncs.jl:77
  [4] _round_digits(x::Num, r::RoundingMode{:Nearest}, digits::Int32, base::Int64)
    @ Base .\floatfuncs.jl:115
  [5] round(x::Num, r::RoundingMode{:Nearest}; digits::Int32, sigdigits::Nothing, base::Nothing)
    @ Base .\floatfuncs.jl:68
  [6] round(z::Complex{Num}, rr::RoundingMode{:Nearest}, ri::RoundingMode{:Nearest}; kwargs::@Kwargs{digits::Int32})
    @ Base .\complex.jl:1113
  [7] (::Base.Broadcast.var"#29#30"{@Kwargs{digits::Int32}, typeof(round)})(args::Complex{Num})
    @ Base.Broadcast .\broadcast.jl:1306
  [8] _noshapecheck_map
    @ C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\SparseArrays\src\higherorderfns.jl:180 [inlined]
  [9] copy(bc::Base.Broadcast.Broadcasted{SparseArrays.HigherOrderFns.SparseMatStyle, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#29#30"{@Kwargs{digits::Int32}, typeof(round)}, Tuple{SparseArrays.SparseMatrixCSC{Complex{Num}, Int64}}})
    @ SparseArrays.HigherOrderFns C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\SparseArrays\src\higherorderfns.jl:195
 [10] materialize
    @ .\broadcast.jl:867 [inlined]
 [11] show(stream::IOContext{Base.TTY}, x::Operator{FockBasis{Int64}, FockBasis{Int64}, SparseArrays.SparseMatrixCSC{Complex{Num}, Int64}})
    @ QuantumOpticsBase C:\Users\mabun\.julia\packages\QuantumOpticsBase\bXZS2\src\printing.jl:94
 [12] show(io::IOContext{Base.TTY}, ::MIME{Symbol("text/plain")}, x::Operator{FockBasis{Int64}, FockBasis{Int64}, SparseArrays.SparseMatrixCSC{Complex{Num}, Int64}})
    @ Base.Multimedia .\multimedia.jl:47
 [13] (::REPL.var"#68#69"{REPL.REPLDisplay{REPL.LineEditREPL}, MIME{Symbol("text/plain")}, Base.RefValue{Any}})(io::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:367
 [14] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:661
 [15] display(d::REPL.REPLDisplay, mime::MIME{Symbol("text/plain")}, x::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:353
 [16] display(d::REPL.REPLDisplay, x::Any)
    @ REPL C:\Users\mabun\.julia\juliaup\julia-1.11.1+0.x64.w64.mingw32\share\julia\stdlib\v1.11\REPL\src\REPL.jl:372
 [17] display(x::Any)
    @ Base.Multimedia .\multimedia.jl:340
 [18] #invokelatest#2
    @ .\essentials.jl:1055 [inlined]
 [19] invokelatest
    @ .\essentials.jl:1052 [inlined]
 [20] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:237
 [21] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:276
 [22] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:179
 [23] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:38
 [24] #67
    @ c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:150 [inlined]
 [25] with_logstate(f::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, logstate::Base.CoreLogging.LogState)       
    @ Base.CoreLogging .\logging\logging.jl:522
 [26] with_logger
    @ .\logging\logging.jl:632 [inlined]
 [27] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:263
 [28] #invokelatest#2
    @ .\essentials.jl:1055 [inlined]
 [29] invokelatest(::Any)
    @ Base .\essentials.jl:1052
 [30] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer c:\Users\mabun\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:34

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions