Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased](https://github.com/qutip/QuantumToolbox.jl/tree/main)

- Rename `sparse_to_dense` as `to_dense` and `dense_to_sparse` as `to_sparse`. ([#392])
- Change name of `MultiSiteOperator` to `multisite_operator`. ([#394])

## [v0.26.0]
Release date: 2025-02-09
Expand Down Expand Up @@ -118,3 +119,4 @@ Release date: 2024-11-13
[#388]: https://github.com/qutip/QuantumToolbox.jl/issues/388
[#389]: https://github.com/qutip/QuantumToolbox.jl/issues/389
[#392]: https://github.com/qutip/QuantumToolbox.jl/issues/392
[#394]: https://github.com/qutip/QuantumToolbox.jl/issues/394
2 changes: 1 addition & 1 deletion docs/src/resources/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ fidelity

```@docs
Lattice
MultiSiteOperator
multisite_operator
DissipativeIsing
```

Expand Down
6 changes: 3 additions & 3 deletions docs/src/users_guide/cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ hy = 0.0
hz = 0.0
γ = 1

Sx = mapreduce(i -> MultiSiteOperator(latt, i=>sigmax()), +, 1:latt.N)
Sy = mapreduce(i -> MultiSiteOperator(latt, i=>sigmay()), +, 1:latt.N)
Sz = mapreduce(i -> MultiSiteOperator(latt, i=>sigmaz()), +, 1:latt.N)
Sx = mapreduce(i -> multisite_operator(latt, i=>sigmax()), +, 1:latt.N)
Sy = mapreduce(i -> multisite_operator(latt, i=>sigmay()), +, 1:latt.N)
Sz = mapreduce(i -> multisite_operator(latt, i=>sigmaz()), +, 1:latt.N)

H, c_ops = DissipativeIsing(Jx, Jy, Jz, hx, hy, hz, γ, latt; boundary_condition = Val(:periodic_bc), order = 1)
e_ops = [Sx, Sy, Sz]
Expand Down
4 changes: 4 additions & 0 deletions src/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,7 @@
} = error(
"The parameter order of `correlation_2op_1t` has been changed, please use `?correlation_2op_1t` to check the updated docstring.",
)

MultiSiteOperator(dims::Union{AbstractVector,Tuple}, pairs::Pair{<:Integer,<:QuantumObject}...) = error(

Check warning on line 97 in src/deprecated.jl

View check run for this annotation

Codecov / codecov/patch

src/deprecated.jl#L97

Added line #L97 was not covered by tests
"`MultiSiteOperator` has been deprecated and will be removed in next major release, please use `multisite_operator` instead.",
)
24 changes: 12 additions & 12 deletions src/spin_lattice.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export Lattice, MultiSiteOperator, DissipativeIsing
export Lattice, multisite_operator, DissipativeIsing

@doc raw"""
Lattice
Expand All @@ -15,7 +15,7 @@

#Definition of many-body operators
@doc raw"""
MultiSiteOperator(dims::Union{AbstractVector, Tuple}, pairs::Pair{<:Integer,<:QuantumObject}...)
multisite_operator(dims::Union{AbstractVector, Tuple}, pairs::Pair{<:Integer,<:QuantumObject}...)

A Julia function for generating a multi-site operator ``\\hat{O} = \\hat{O}_i \\hat{O}_j \\cdots \\hat{O}_k``. The function takes a vector of dimensions `dims` and a list of pairs `pairs` where the first element of the pair is the site index and the second element is the operator acting on that site.

Expand All @@ -28,7 +28,7 @@

# Example
```jldoctest
julia> op = MultiSiteOperator(Val(8), 5=>sigmax(), 7=>sigmaz());
julia> op = multisite_operator(Val(8), 5=>sigmax(), 7=>sigmaz());

julia> op.dims
8-element SVector{8, Int64} with indices SOneTo(8):
Expand All @@ -42,7 +42,7 @@
2
```
"""
function MultiSiteOperator(dims::Union{AbstractVector,Tuple}, pairs::Pair{<:Integer,<:QuantumObject}...)
function multisite_operator(dims::Union{AbstractVector,Tuple}, pairs::Pair{<:Integer,<:QuantumObject}...)

Check warning on line 45 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L45

Added line #L45 was not covered by tests
sites_unsorted = collect(first.(pairs))
idxs = sortperm(sites_unsorted)
_sites = sites_unsorted[idxs]
Expand All @@ -61,13 +61,13 @@

return QuantumObject(data; type = Operator, dims = dims)
end
function MultiSiteOperator(N::Union{Integer,Val}, pairs::Pair{<:Integer,<:QuantumObject}...)
function multisite_operator(N::Union{Integer,Val}, pairs::Pair{<:Integer,<:QuantumObject}...)

Check warning on line 64 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L64

Added line #L64 was not covered by tests
dims = ntuple(j -> 2, makeVal(N))

return MultiSiteOperator(dims, pairs...)
return multisite_operator(dims, pairs...)

Check warning on line 67 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L67

Added line #L67 was not covered by tests
end
function MultiSiteOperator(latt::Lattice, pairs::Pair{<:Integer,<:QuantumObject}...)
return MultiSiteOperator(makeVal(latt.N), pairs...)
function multisite_operator(latt::Lattice, pairs::Pair{<:Integer,<:QuantumObject}...)
return multisite_operator(makeVal(latt.N), pairs...)

Check warning on line 70 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L69-L70

Added lines #L69 - L70 were not covered by tests
end

#Definition of nearest-neighbour sites on lattice
Expand Down Expand Up @@ -127,25 +127,25 @@
boundary_condition::Union{Symbol,Val} = Val(:periodic_bc),
order::Integer = 1,
)
S = [MultiSiteOperator(latt, i => sigmam()) for i in 1:latt.N]
S = [multisite_operator(latt, i => sigmam()) for i in 1:latt.N]

Check warning on line 130 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L130

Added line #L130 was not covered by tests
c_ops = sqrt(γ) .* S

op_sum(S, i::CartesianIndex) =
S[latt.lin_idx[i]] * sum(S[latt.lin_idx[nearest_neighbor(i, latt, makeVal(boundary_condition); order = order)]])

H = 0
if (Jx != 0 || hx != 0)
S = [MultiSiteOperator(latt, i => sigmax()) for i in 1:latt.N]
S = [multisite_operator(latt, i => sigmax()) for i in 1:latt.N]

Check warning on line 138 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L138

Added line #L138 was not covered by tests
H += Jx / 2 * mapreduce(i -> op_sum(S, i), +, latt.car_idx) #/2 because we are double counting
H += hx * sum(S)
end
if (Jy != 0 || hy != 0)
S = [MultiSiteOperator(latt, i => sigmay()) for i in 1:latt.N]
S = [multisite_operator(latt, i => sigmay()) for i in 1:latt.N]

Check warning on line 143 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L143

Added line #L143 was not covered by tests
H += Jy / 2 * mapreduce(i -> op_sum(S, i), +, latt.car_idx)
H += hy * sum(S)
end
if (Jz != 0 || hz != 0)
S = [MultiSiteOperator(latt, i => sigmaz()) for i in 1:latt.N]
S = [multisite_operator(latt, i => sigmaz()) for i in 1:latt.N]

Check warning on line 148 in src/spin_lattice.jl

View check run for this annotation

Codecov / codecov/patch

src/spin_lattice.jl#L148

Added line #L148 was not covered by tests
H += Jz / 2 * mapreduce(i -> op_sum(S, i), +, latt.car_idx)
H += hz * sum(S)
end
Expand Down
12 changes: 6 additions & 6 deletions test/core-test/low_rank_dynamics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
i = 1
for j in 1:N_modes
i += 1
i <= M && (ϕ[i] = MultiSiteOperator(latt, j => sigmap()) * ϕ[1])
i <= M && (ϕ[i] = multisite_operator(latt, j => sigmap()) * ϕ[1])
end
for k in 1:N_modes-1
for l in k+1:N_modes
i += 1
i <= M && (ϕ[i] = MultiSiteOperator(latt, k => sigmap(), l => sigmap()) * ϕ[1])
i <= M && (ϕ[i] = multisite_operator(latt, k => sigmap(), l => sigmap()) * ϕ[1])
end
end
for i in i+1:M
Expand All @@ -43,11 +43,11 @@
hz = 0.0
γ = 1

Sx = mapreduce(i -> MultiSiteOperator(latt, i => sigmax()), +, 1:latt.N)
Sy = mapreduce(i -> MultiSiteOperator(latt, i => sigmay()), +, 1:latt.N)
Sz = mapreduce(i -> MultiSiteOperator(latt, i => sigmaz()), +, 1:latt.N)
Sx = mapreduce(i -> multisite_operator(latt, i => sigmax()), +, 1:latt.N)
Sy = mapreduce(i -> multisite_operator(latt, i => sigmay()), +, 1:latt.N)
Sz = mapreduce(i -> multisite_operator(latt, i => sigmaz()), +, 1:latt.N)
SFxx = mapreduce(
x -> MultiSiteOperator(latt, x[1] => sigmax(), x[2] => sigmax()),
x -> multisite_operator(latt, x[1] => sigmax(), x[2] => sigmax()),
+,
Iterators.product(1:latt.N, 1:latt.N),
)
Expand Down