From 2cff2e70cd566aeee51800a0a3223f3f8cd29e77 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 13:51:15 +0200 Subject: [PATCH 01/27] Make steadystate function almost compatible with GPU arrays --- Project.toml | 2 ++ src/QuantumToolbox.jl | 1 + src/general_functions.jl | 3 +++ src/steadystate.jl | 20 +++++++++++++++----- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Project.toml b/Project.toml index 2d24fe2f..09562ba5 100644 --- a/Project.toml +++ b/Project.toml @@ -4,6 +4,7 @@ authors = ["Alberto Mercurio"] version = "0.8.2" [deps] +ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" @@ -25,6 +26,7 @@ CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" QuantumToolboxCUDAExt = "CUDA" [compat] +ArrayInterface = "6, 7" CUDA = "5" DiffEqCallbacks = "2, 3" FFTW = "1.5" diff --git a/src/QuantumToolbox.jl b/src/QuantumToolbox.jl index 4790d42e..fc0f46c7 100644 --- a/src/QuantumToolbox.jl +++ b/src/QuantumToolbox.jl @@ -30,6 +30,7 @@ import LinearMaps: LinearMap import Pkg import Random import SpecialFunctions: loggamma +using ArrayInterface: allowed_getindex, allowed_setindex! # Setting the number of threads to 1 allows # to achieve better performances for more massive parallelizations diff --git a/src/general_functions.jl b/src/general_functions.jl index 61ac28d7..3178dc76 100644 --- a/src/general_functions.jl +++ b/src/general_functions.jl @@ -442,3 +442,6 @@ Convert a quantum object from matrix ([`OperatorQuantumObject`](@ref)-type) to v """ mat2vec(A::QuantumObject{<:AbstractArray{T},OperatorQuantumObject}) where {T} = QuantumObject(mat2vec(A.data), OperatorKet, A.dims) + +_get_dense_similar(A::AbstractArray, args...) = similar(A, args...) +_get_dense_similar(A::AbstractSparseMatrix, args...) = similar(nonzeros(A), args...) diff --git a/src/steadystate.jl b/src/steadystate.jl index 5ae6400a..e26283f9 100644 --- a/src/steadystate.jl +++ b/src/steadystate.jl @@ -26,15 +26,25 @@ function _steadystate( L::QuantumObject{<:AbstractArray{T},SuperOperatorQuantumObject}, solver::SteadyStateDirectSolver, ) where {T} - L_tmp = copy(L.data) + L_tmp = L.data N = prod(L.dims) weight = norm(L_tmp, 1) / length(L_tmp) - v0 = zeros(ComplexF64, N^2) # This is not scalable for GPU arrays - v0[1] = weight - L_tmp[1, [N * (i - 1) + i for i in 1:N]] .+= weight + v0 = _get_dense_similar(L_tmp, N^2) + fill!(v0, 0) + allowed_setindex!(v0, weight, 1) # Because scalar indexing is not allowed on GPU arrays - ρss_vec = L_tmp \ v0 + idx_range = collect(1:N) + rows = _get_dense_similar(L_tmp, N) + cols = _get_dense_similar(L_tmp, N) + datas = _get_dense_similar(L_tmp, N) + fill!(rows, 1) + copyto!(cols, N .* (idx_range .- 1) .+ idx_range) + fill!(datas, weight) + Tn = sparse(rows, cols, datas, N^2, N^2) + L_tmp = L_tmp + Tn + + ρss_vec = L_tmp \ v0 # This is still not supported on GPU, yet ρss = reshape(ρss_vec, N, N) ρss = (ρss + ρss') / 2 # Hermitianize return QuantumObject(ρss, Operator, L.dims) From 9757448f1bd87413e32ba7b7c4a2b24aae7a0864 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 14:34:05 +0200 Subject: [PATCH 02/27] Minor change --- src/QuantumToolbox.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/QuantumToolbox.jl b/src/QuantumToolbox.jl index fc0f46c7..246d19d1 100644 --- a/src/QuantumToolbox.jl +++ b/src/QuantumToolbox.jl @@ -22,6 +22,7 @@ else end # other dependencies (in alphabetical order) +import ArrayInterface: allowed_getindex, allowed_setindex! import DiffEqCallbacks: DiscreteCallback, PeriodicCallback, PresetTimeCallback import FFTW: fft, fftshift import Graphs: connected_components, DiGraph @@ -30,7 +31,6 @@ import LinearMaps: LinearMap import Pkg import Random import SpecialFunctions: loggamma -using ArrayInterface: allowed_getindex, allowed_setindex! # Setting the number of threads to 1 allows # to achieve better performances for more massive parallelizations From e68958c747b69fecc3b9c038f4c1058f7cad3318 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 15:32:01 +0200 Subject: [PATCH 03/27] Set version v0.8.3 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 09562ba5..b3eb4086 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "QuantumToolbox" uuid = "6c2fb7c5-b903-41d2-bc5e-5a7c320b9fab" authors = ["Alberto Mercurio"] -version = "0.8.2" +version = "0.8.3" [deps] ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" From 7f1eef30c74c352f619c3ffcea366d6952cd7ca3 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 18:09:06 +0200 Subject: [PATCH 04/27] Add favicon --- docs/make.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index 1d45f8c7..5c888ccf 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -12,7 +12,9 @@ makedocs(; prettyurls = get(ENV, "CI", "false") == "true", canonical = "https://albertomercurio.github.io/QuantumToolbox.jl", edit_link = "main", - assets = String[], + assets = [ + "src/assets/favicon.ico", + ], mathengine = MathJax3( Dict( :loader => Dict("load" => ["[tex]/physics"]), From 5258eb13baa78d7031ad8174aa46c415348e5354 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 18:32:00 +0200 Subject: [PATCH 05/27] Format document --- docs/make.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index 5c888ccf..ff9e3995 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -12,9 +12,7 @@ makedocs(; prettyurls = get(ENV, "CI", "false") == "true", canonical = "https://albertomercurio.github.io/QuantumToolbox.jl", edit_link = "main", - assets = [ - "src/assets/favicon.ico", - ], + assets = ["src/assets/favicon.ico"], mathengine = MathJax3( Dict( :loader => Dict("load" => ["[tex]/physics"]), From 7849135bce2c1d8afaea33833a397bdb5efc6e04 Mon Sep 17 00:00:00 2001 From: Alberto Mercurio Date: Wed, 22 May 2024 19:39:01 +0200 Subject: [PATCH 06/27] Changes for move on QuTiP org --- Project.toml | 5 +++-- README.md | 12 ++++++------ docs/make.jl | 8 ++++---- docs/src/benchmarks/benchmark_history.md | 4 ++-- docs/src/index.md | 2 +- docs/src/tutorials/logo.md | 2 +- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Project.toml b/Project.toml index b3eb4086..4e23b8e2 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,8 @@ name = "QuantumToolbox" uuid = "6c2fb7c5-b903-41d2-bc5e-5a7c320b9fab" -authors = ["Alberto Mercurio"] -version = "0.8.3" +authors = ["Alberto Mercurio", "Luca Gravina", "Yi-Te Huang"] +version = "0.8.4" +repo = "https://github.com/qutip/QuantumToolbox.jl.git" [deps] ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" diff --git a/README.md b/README.md index ac7ecfda..75527e04 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,18 @@ # QuantumToolbox.jl -[![Release](https://img.shields.io/github/release/albertomercurio/QuantumToolbox.jl.svg)](https://github.com/albertomercurio/QuantumToolbox.jl/releases) +[![Release](https://img.shields.io/github/release/qutip/QuantumToolbox.jl.svg)](https://github.com/qutip/QuantumToolbox.jl/releases) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11096277.svg)](https://doi.org/10.5281/zenodo.11096277) [![Downloads](https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fjuliapkgstats.com%2Fapi%2Fv1%2Fmonthly_downloads%2FQuantumToolbox&query=total_requests&suffix=%2Fmonth&label=Downloads)](https://juliapkgstats.com/pkg/QuantumToolbox) -[![Build Status](https://github.com/albertomercurio/QuantumToolbox.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/albertomercurio/QuantumToolbox.jl/actions/workflows/CI.yml?query=branch%3Amain) +[![Build Status](https://github.com/qutip/QuantumToolbox.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/qutip/QuantumToolbox.jl/actions/workflows/CI.yml?query=branch%3Amain) [![Aqua QA](https://raw.githubusercontent.com/JuliaTesting/Aqua.jl/master/badge.svg)](https://github.com/JuliaTesting/Aqua.jl) -[![Coverage](https://codecov.io/gh/albertomercurio/QuantumToolbox.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/albertomercurio/QuantumToolbox.jl) -[![Doc-Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://albertomercurio.github.io/QuantumToolbox.jl/stable) -[![Doc-Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://albertomercurio.github.io/QuantumToolbox.jl/dev) +[![Coverage](https://codecov.io/gh/qutip/QuantumToolbox.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/qutip/QuantumToolbox.jl) +[![Doc-Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://qutip.github.io/QuantumToolbox.jl/stable) +[![Doc-Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://qutip.github.io/QuantumToolbox.jl/dev) ## Introduction -[QuantumToolbox.jl](https://github.com/albertomercurio/QuantumToolbox.jl) is a cutting-edge Julia package designed for quantum physics simulations, closely emulating the popular Python [QuTiP](https://github.com/qutip/qutip) package. It uniquely combines the simplicity and power of Julia with advanced features like GPU acceleration and distributed computing, making simulation of quantum systems more accessible and efficient. +[QuantumToolbox.jl](https://github.com/qutip/QuantumToolbox.jl) is a cutting-edge Julia package designed for quantum physics simulations, closely emulating the popular Python [QuTiP](https://github.com/qutip/qutip) package. It uniquely combines the simplicity and power of Julia with advanced features like GPU acceleration and distributed computing, making simulation of quantum systems more accessible and efficient. ## Features diff --git a/docs/make.jl b/docs/make.jl index ff9e3995..8430c92d 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -5,12 +5,12 @@ DocMeta.setdocmeta!(QuantumToolbox, :DocTestSetup, :(using QuantumToolbox); recu makedocs(; modules = [QuantumToolbox], - authors = "Alberto Mercurio", - repo = Remotes.GitHub("albertomercurio", "QuantumToolbox.jl"), + authors = ["Alberto Mercurio", "Luca Gravina", "Yi-Te Huang"], + repo = Remotes.GitHub("qutip", "QuantumToolbox.jl"), sitename = "QuantumToolbox.jl", format = Documenter.HTML(; prettyurls = get(ENV, "CI", "false") == "true", - canonical = "https://albertomercurio.github.io/QuantumToolbox.jl", + canonical = "https://qutip.github.io/QuantumToolbox.jl", edit_link = "main", assets = ["src/assets/favicon.ico"], mathengine = MathJax3( @@ -35,4 +35,4 @@ makedocs(; ], ) -deploydocs(; repo = "github.com/albertomercurio/QuantumToolbox.jl", devbranch = "main") +deploydocs(; repo = "github.com/qutip/QuantumToolbox.jl", devbranch = "main") diff --git a/docs/src/benchmarks/benchmark_history.md b/docs/src/benchmarks/benchmark_history.md index 18f38be9..f7791016 100644 --- a/docs/src/benchmarks/benchmark_history.md +++ b/docs/src/benchmarks/benchmark_history.md @@ -1,12 +1,12 @@ ```@raw html - +