ITADN

Errow when showing operators containing symbolic variables

#184Openmabuni1998 创建于 2025-02-02
M
mabuni1998commented
When working with symbolic variables, they combine almost seamlessly with the quantum optics operators (nice!). But when printing the operator, an error occurs. MWE: ```julia using Symbolics using QuantumOptics @variables α ba = FockBasis(2) a = dense(destroy(ba)) H1 = α * dagger(a) * a ``` Producing: ```julia 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: ```julia 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: ```julia a = destroy(ba) H1 = α * dagger(a) * a ``` giving: ```julia 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 ```
3 条评论