Skip to content
This repository has been archived by the owner on Apr 1, 2023. It is now read-only.

Commit

Permalink
add header option
Browse files Browse the repository at this point in the history
  • Loading branch information
goropikari committed Sep 16, 2018
1 parent c8f8606 commit 44a7579
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
46 changes: 26 additions & 20 deletions src/prettyprint.jl
Expand Up @@ -41,10 +41,10 @@ end
reset_properties()

"""
dirac(state::PureState, statename::String="ψ")
dirac(io::IO, state::PureState, statename::String="ψ")
dirac(state::PureState, dims::Vector{Int}, statename::String="ψ")
dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="ψ")
dirac(state::PureState, statename::String="ψ"; header::Bool=false)
dirac(io::IO, state::PureState, statename::String="ψ"; header::Bool=false)
dirac(state::PureState, dims::Vector{Int}, statename::String="ψ"; header::Bool=false)
dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="ψ"; header::Bool=false)
Display a vector as Dirac notation.
Expand All @@ -64,7 +64,10 @@ dirac(qubitqutrit, [2,3])
|ψ⟩ = (-0.487131-0.539384im)|00⟩+(0.281063+0.573909im)|01⟩+(-0.24491-0.132634im)|02⟩+(-1.1365-1.75419im)|10⟩+(1.60954+0.155347im)|11⟩+(-0.0828287-0.42515im)|12⟩
```
"""
function dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="ψ")
function dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="ψ"; header::Bool=false)
if header
println(io, summary(state))
end
if _islatex && isdefined(Main, :IJulia) && Main.IJulia.inited # for IJulia rendering
if statename == "ψ"
statename = "\\psi"
Expand All @@ -75,21 +78,21 @@ function dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="
print_dirac(io, state, dims, statename)
end
end
dirac(state::PureState, dims::Vector{Int}, statename::String="ψ") = dirac(stdout, state, dims, statename)
function dirac(io::IO, state::PureState, statename::String="ψ")
dirac(state::PureState, dims::Vector{Int}, statename::String="ψ"; header::Bool=false) = dirac(stdout, state, dims, statename, header=header)
function dirac(io::IO, state::PureState, statename::String="ψ"; header::Bool=false)
n = log2(length(state))
@assert isinteger(n)
dims = fill(2, (Int(n), ))
dirac(io, state, dims, statename)
dirac(io, state, dims, statename, header=header)
end
dirac(state::PureState, statename::String="ψ") = dirac(stdout, state, statename)
dirac(state::PureState, statename::String="ψ"; header::Bool=false) = dirac(stdout, state, statename, header=header)

"""
dirac(state::MixedState, statename::String="ρ")
dirac(io::IO, state::MixedState, statename::String="ρ")
dirac(state::MixedState, dims::Vector{Int}, statename::String="ρ")
dirac(state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ")
dirac(io::IO, state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ")
dirac(state::MixedState, statename::String="ρ"; header::Bool=false)
dirac(io::IO, state::MixedState, statename::String="ρ"; header::Bool=false)
dirac(state::MixedState, dims::Vector{Int}, statename::String="ρ"; header::Bool=false)
dirac(state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ"; header::Bool=false)
dirac(io::IO, state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ"; header::Bool=false)
Display a matrix as Dirac notation.
# Example
Expand All @@ -107,7 +110,10 @@ julia> dirac(op2, [2,2], [3])
ρ = (-0.363602+1.11322im)|00⟩⟨0|+(-1.1365-1.75419im)|00⟩⟨1|+(0.197612+0.078787im)|00⟩⟨2|+(-0.487131-0.539384im)|01⟩⟨0|+(1.60954+0.155347im)|01⟩⟨1|+(-0.253062+0.334967im)|01⟩⟨2|+(0.281063+0.573909im)|10⟩⟨0|+(-0.0828287-0.42515im)|10⟩⟨1|+(0.212297-0.539294im)|10⟩⟨2|+(-0.24491-0.132634im)|11⟩⟨0|+(0.807711-0.0626612im)|11⟩⟨1|+(1.00625+0.288773im)|11⟩⟨2|
```
"""
function dirac(io::IO, state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ")
function dirac(io::IO, state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ"; header::Bool=false)
if header
println(io, summary(state))
end
if _islatex && isdefined(Main, :IJulia) && Main.IJulia.inited # for IJulia rendering
if statename == "ρ"
statename = "\\hat{\\rho}"
Expand All @@ -118,16 +124,16 @@ function dirac(io::IO, state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}
print_dirac(io, state, ldims, rdims, statename)
end
end
dirac(state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ") = dirac(stdout, state, ldims, rdims, statename)
dirac(state::MixedState, dims::Vector{Int}, statename::String="ρ") = dirac(stdout, state, dims, dims, statename)
function dirac(io::IO, state::MixedState, statename::String="ρ")
dirac(state::MixedState, ldims::Vector{Int}, rdims::Vector{Int}, statename::String="ρ"; header::Bool=false) = dirac(stdout, state, ldims, rdims, statename, header=header)
dirac(state::MixedState, dims::Vector{Int}, statename::String="ρ"; header::Bool=false) = dirac(stdout, state, dims, dims, statename, header=header)
function dirac(io::IO, state::MixedState, statename::String="ρ"; header::Bool=false)
row, col = size(state)
n, m = log2(row), log2(col)
@assert isinteger(n) || isinteger(m)
ldims, rdims = fill(2, (Int(n), )), fill(2, (Int(m), ))
dirac(io, state, ldims, rdims, statename)
dirac(io, state, ldims, rdims, statename, header=header)
end
dirac(state::MixedState, statename::String="ρ") = dirac(stdout, state, statename)
dirac(state::MixedState, statename::String="ρ"; header::Bool=false) = dirac(stdout, state, statename, header=header)

"""
print_dirac(io::IO, state::PureState, dims::Vector{Int}, statename::String="ψ")
Expand Down
3 changes: 3 additions & 0 deletions test/array_test.jl
Expand Up @@ -9,8 +9,10 @@
@test sprint(io -> dirac(IOContext(io, :compact=>true), ket)) == "|ψ⟩ = 0.823648|00⟩+0.910357|01⟩+0.164566|10⟩+0.177329|11⟩\n"
@test sprint(io -> dirac(IOContext(io, :compact=>false), ket)) == "|ψ⟩ = 0.8236475079774124|00⟩+0.9103565379264364|01⟩+0.16456579813368521|10⟩+0.17732884646626457|11⟩\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ket, [2,2])) == "|ψ⟩ = 0.823648|00⟩+0.910357|01⟩+0.164566|10⟩+0.177329|11⟩\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ket, [2,2], header=true)) == "4-element Array{Float64,1}\n|ψ⟩ = 0.823648|00⟩+0.910357|01⟩+0.164566|10⟩+0.177329|11⟩\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ket, [2,2], "ϕ")) == "|ϕ⟩ = 0.823648|00⟩+0.910357|01⟩+0.164566|10⟩+0.177329|11⟩\n"


DiracNotation.set_properties(newline=true)
@test sprint(dirac, ket) == "|ψ⟩ = 0.823648|00⟩\n +0.910357|01⟩\n +0.164566|10⟩\n +0.177329|11⟩\n "
@test sprint(io -> dirac(IOContext(io, :compact=>true), ket)) == "|ψ⟩ = 0.823648|00⟩\n +0.910357|01⟩\n +0.164566|10⟩\n +0.177329|11⟩\n "
Expand Down Expand Up @@ -87,6 +89,7 @@
@test sprint(io -> dirac(IOContext(io, :compact=>true), ρ)) == "ρ = 0.27888|00⟩⟨00|+0.361828|00⟩⟨01|+0.260036|00⟩⟨10|+0.575887|00⟩⟨11|+0.203477|01⟩⟨00|+0.973216|01⟩⟨01|+0.910047|01⟩⟨10|+0.868279|01⟩⟨11|+0.0423017|10⟩⟨00|+0.585812|10⟩⟨01|+0.167036|10⟩⟨10|+0.9678|10⟩⟨11|+0.0682693|11⟩⟨00|+0.539289|11⟩⟨01|+0.655448|11⟩⟨10|+0.76769|11⟩⟨11|\n"
@test sprint(io -> dirac(IOContext(io, :compact=>false), ρ)) == "ρ = 0.278880109331201|00⟩⟨00|+0.3618283907762174|00⟩⟨01|+0.26003585026904785|00⟩⟨10|+0.5758873948500367|00⟩⟨11|+0.20347655804192266|01⟩⟨00|+0.9732164043865108|01⟩⟨01|+0.910046541351011|01⟩⟨10|+0.8682787096942046|01⟩⟨11|+0.042301665932029664|10⟩⟨00|+0.5858115517433242|10⟩⟨01|+0.16703619444214968|10⟩⟨10|+0.9677995536192001|10⟩⟨11|+0.06826925550564478|11⟩⟨00|+0.5392892841426182|11⟩⟨01|+0.6554484126999125|11⟩⟨10|+0.7676903325581188|11⟩⟨11|\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ρ, [2,2], [2,2])) == "ρ = 0.27888|00⟩⟨00|+0.361828|00⟩⟨01|+0.260036|00⟩⟨10|+0.575887|00⟩⟨11|+0.203477|01⟩⟨00|+0.973216|01⟩⟨01|+0.910047|01⟩⟨10|+0.868279|01⟩⟨11|+0.0423017|10⟩⟨00|+0.585812|10⟩⟨01|+0.167036|10⟩⟨10|+0.9678|10⟩⟨11|+0.0682693|11⟩⟨00|+0.539289|11⟩⟨01|+0.655448|11⟩⟨10|+0.76769|11⟩⟨11|\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ρ, [2,2], [2,2], header=true)) == "4×4 Array{Float64,2}\nρ = 0.27888|00⟩⟨00|+0.361828|00⟩⟨01|+0.260036|00⟩⟨10|+0.575887|00⟩⟨11|+0.203477|01⟩⟨00|+0.973216|01⟩⟨01|+0.910047|01⟩⟨10|+0.868279|01⟩⟨11|+0.0423017|10⟩⟨00|+0.585812|10⟩⟨01|+0.167036|10⟩⟨10|+0.9678|10⟩⟨11|+0.0682693|11⟩⟨00|+0.539289|11⟩⟨01|+0.655448|11⟩⟨10|+0.76769|11⟩⟨11|\n"
@test sprint(io -> dirac(IOContext(io, :compact=>true), ρ, [2,2], [2,2], "ϕ")) == "ϕ = 0.27888|00⟩⟨00|+0.361828|00⟩⟨01|+0.260036|00⟩⟨10|+0.575887|00⟩⟨11|+0.203477|01⟩⟨00|+0.973216|01⟩⟨01|+0.910047|01⟩⟨10|+0.868279|01⟩⟨11|+0.0423017|10⟩⟨00|+0.585812|10⟩⟨01|+0.167036|10⟩⟨10|+0.9678|10⟩⟨11|+0.0682693|11⟩⟨00|+0.539289|11⟩⟨01|+0.655448|11⟩⟨10|+0.76769|11⟩⟨11|\n"

DiracNotation.reset_properties()
Expand Down

0 comments on commit 44a7579

Please sign in to comment.