# Edited Ques: @printf not printing anythin in following

Why @printf at the end is not printing anything for the following ?
Note iTensors is a package. So you might ignore the code.

using ITensors
using Printf
function ITensors.op(::OpName"expτSS", ::SiteType"S=1/2", s1::Index, s2::Index; τ)
h =
1 / 2 * op(“S+”, s1) * op(“S-”, s2) +
1 / 2 * op(“S-”, s1) * op(“S+”, s2) +
op(“Sz”, s1) * op(“Sz”, s2)
return exp(τ * h)
end
function main(; N=10, cutoff=1E-8, δτ=0.1, beta_max=2.0)
s = siteinds(“S=1/2”, N; conserve_qns=true)
gates = ops([(“expτSS”, (n, n + 1), (τ=-δτ / 2,)) for n in 1:(N - 1)], s)
append!(gates, reverse(gates))
rho = MPO(s, “Id”) ./ √2
terms = OpSum()
for j in 1:(N - 1)
terms += 1 / 2, “S+”, j, “S-”, j + 1
terms += 1 / 2, “S-”, j, “S+”, j + 1
terms += “Sz”, j, “Sz”, j + 1
end
H = MPO(terms, s)
for β in 0:δτ:beta_max
energy = inner(rho, H)
@printf(“β = %.2f energy = %.8f\n”, β, energy)
rho = apply(gates, rho; cutoff)
rho = rho / tr(rho)
end
return nothing
end

Hi @_SACHIN

Welcome to Julia It’s always good idea to

• post a minimal working example
• put your code in code block
• post errors you get by running the mwe

The following code worked on my Julia 1.7

``````using Printf
δτ=1
beta_max=10
energy = 1.0
for β in 0:δτ:beta_max
@printf("β = %.2f energy = %.8f\n", β, energy)
end
``````

output:

``````β = 0.00 energy = 1.00000000
β = 1.00 energy = 1.00000000
β = 2.00 energy = 1.00000000
β = 3.00 energy = 1.00000000
β = 4.00 energy = 1.00000000
β = 5.00 energy = 1.00000000
β = 6.00 energy = 1.00000000
β = 7.00 energy = 1.00000000
β = 8.00 energy = 1.00000000
β = 9.00 energy = 1.00000000
β = 10.00 energy = 1.00000000

``````
1 Like

Oops, I get `ERROR: UndefVarError: @printf not defined` on Julia 1.9.0?

``````using Printf
``````

And I’ve fixed it. Thanks @goerch !

1 Like

Might be OP’s problem then, too 1 Like

no, I am using “using Printf”

The difference between @_SACHIN and @yashi is the line `energy = inner(rho.H)`. The code blocks are not the same.

What is the value of `energy`?

1 Like
``````using ITensors
using Printf
function ITensors.op(::OpName"expτSS", ::SiteType"S=1/2", s1::Index, s2::Index; τ)
h =
1 / 2 * op("S+", s1) * op("S-", s2) +
1 / 2 * op("S-", s1) * op("S+", s2) +
op("Sz", s1) * op("Sz", s2)
return exp(τ * h)
end
function main(; N=10, cutoff=1E-8, δτ=0.1, beta_max=2.0)
s = siteinds("S=1/2", N; conserve_qns=true)
gates = ops([("expτSS", (n, n + 1), (τ=-δτ / 2,)) for n in 1:(N - 1)], s)
append!(gates, reverse(gates))
rho = MPO(s, "Id") ./ √2
terms = OpSum()
for j in 1:(N - 1)
terms += 1 / 2, "S+", j, "S-", j + 1
terms += 1 / 2, "S-", j, "S+", j + 1
terms += "Sz", j, "Sz", j + 1
end
H = MPO(terms, s)
for β in 0:δτ:beta_max
energy = inner(rho, H)
@printf("β = %.2f energy = %.8f\n", β, energy)
rho = apply(gates, rho; cutoff)
rho = rho / tr(rho)
end
return nothing
end
``````
``````julia> main()
β = 0.00 energy = 0.00000000
β = 0.10 energy = -0.17283071
β = 0.20 energy = -0.35297829
β = 0.30 energy = -0.53907929
β = 0.40 energy = -0.72957328
β = 0.50 energy = -0.92249295
β = 0.60 energy = -1.11609434
β = 0.70 energy = -1.30848387
β = 0.80 energy = -1.49784914
β = 0.90 energy = -1.68252460
β = 1.00 energy = -1.86105195
β = 1.10 energy = -2.03222170
β = 1.20 energy = -2.19509440
β = 1.30 energy = -2.34900281
β = 1.40 energy = -2.49353817
β = 1.50 energy = -2.62853829
β = 1.60 energy = -2.75405200
β = 1.70 energy = -2.87026069
β = 1.80 energy = -2.97746496
β = 1.90 energy = -3.07607951
β = 2.00 energy = -3.16658443

julia>
``````

Hey, How you are able to get the results successfully.

I am not able to get that.

``````β = 0.00 energy = 0.00000000
ERROR: LoadError: MethodError: no method matching /(::MPO, ::Float64)
Closest candidates are:
/(::StridedArray{P, N} where N, ::Real) where P<:Dates.Period at /buildworker/worker
/package_linux64/build/usr/share/julia/stdlib/v1.6/Dates/src/deprecated.jl:44
/(::Union{SparseArrays.SparseVector{Tv, Ti}, SubArray{Tv, 1, var"#s814",
Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, false} where var"#s814"
<:SparseArrays.AbstractSparseMatrixCSC{Tv, Ti}, SubArray{Tv, 1, var"#s814",
Tuple{Base.Slice{Base.OneTo{Int64}}}, false} where var"#s814"
<:SparseArrays.AbstractSparseVector{Tv, Ti}} where {Tv, Ti}, ::Number) at /buildworker/worker/
package_linux64/build/usr/share/julia/stdlib/v1.6/SparseArrays/src/sparsevector.jl:1450
/(::Complex, ::Real) at complex.jl:333

...

Stacktrace:
 main(; N::Int64, cutoff::Float64, δτ::Float64, beta_max::Float64)
@ Main /media/sachin/data/sachin/chumbak/simulations/itensors/scripts_org/test_p.jl:26
 main()
@ Main /media/sachin/data/sachin/chumbak/simulations/itensors/scripts_org/test_p.jl:11
 top-level scope
@ /media/sachin/data/sachin/chumbak/simulations/itensors/scripts_org/test_p.jl:30``````

Because the code you are running (I suppose it is the one you posted on stackoverflow) is substantially different from @yashi’s (which works for me).

No, I don’t think both are different. Btw, I also tried to run the same code which is posted here, and getting the same error. Could you please see to it.

@goerch

See if run the same as it is in yashi, then also I get the same error.

`````` using ITensors
using Printf
function ITensors.op(::OpName"expτSS", ::SiteType"S=1/2", s1::Index, s2::Index; τ)
h =
1 / 2 * op("S+", s1) * op("S-", s2) +
1 / 2 * op("S-", s1) * op("S+", s2) +
op("Sz", s1) * op("Sz", s2)
return exp(τ * h)
end
function main(; N=10, cutoff=1E-8, δτ=0.1, beta_max=2.0)
s = siteinds("S=1/2", N; conserve_qns=true)
gates = ops([("expτSS", (n, n + 1), (τ=-δτ / 2,)) for n in 1:(N - 1)], s)
append!(gates, reverse(gates))
rho = MPO(s, "Id") ./ √2
terms = OpSum()
for j in 1:(N - 1)
terms += 1 / 2, "S+", j, "S-", j + 1
terms += 1 / 2, "S-", j, "S+", j + 1
terms += "Sz", j, "Sz", j + 1
end
H = MPO(terms, s)
for β in 0:δτ:beta_max
energy = inner(rho, H)
@printf("β = %.2f energy = %.8f\n", β, energy)
rho = apply(gates, rho; cutoff)
rho = rho / tr(rho)
end
return nothing
end
main()``````

Pl tell me whether you are able to run the same ?

I copied the code you just posted, pasted and saved it to a new file and `include`-d it in the REPL. This works for me without problems.

Could you show us the error you are seeing somehow?

See the error : Getting an Error in running a Julia program - Stack Overflow

OK, when I run the stack overflow code I first get

``````ERROR: UndefVarError: H not defined
``````

for

`````` @show inner(rho, H)
``````

Removing that line I then see

``````ERROR: MethodError: no method matching *(::MPO, ::typeof(main))
``````

here

``````  rho = apply(gates, rho; cutoff)main
``````

Removing `main` from that line

``````  rho = apply(gates, rho; cutoff)
``````

makes the program work for me.

oh! that was a typo in stackoverflow code.

I am getting the same error. could you please see the error and let me possibilities for it ?

Same program is working in REPL

but why now not on my computer ?

@goerch Looks like I have old version of itensors.

1 Like