Skip to content

Commit

Permalink
Generalize adjoint, adjoint! to AbstractQuantum
Browse files Browse the repository at this point in the history
  • Loading branch information
mofeing committed Sep 4, 2024
1 parent 64145ef commit 5d3ff97
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions src/Quantum.jl
Original file line number Diff line number Diff line change
Expand Up @@ -191,21 +191,22 @@ end
Returns the adjoint of a [`Quantum`](@ref) Tensor Network; i.e. the conjugate Tensor Network with the inputs and outputs swapped.
"""
function Base.adjoint(qtn::Quantum)
sites = Dict{Site,Symbol}(
Iterators.map(qtn.sites) do (site, index)
site' => index
end,
)
Base.adjoint(tn::AbstractQuantum) = adjoint!(copy(tn))

tn = conj(qtn)
function LinearAlgebra.adjoint!(tn::AbstractQuantum)
conj!(tn)

# update site information
oldsites = copy(Quantum(tn).sites)
empty!(Quantum(tn).sites)
for (site, index) in oldsites
addsite!(tn, site', index)
end

# rename inner indices
physical_inds = values(sites)
virtual_inds = setdiff(inds(tn), physical_inds)
replace!(tn, map(i -> i => Symbol(i, "'"), virtual_inds))
replace!(tn, map(i -> i => Symbol(i, "'"), inds(tn; set=:virtual)))

return Quantum(TensorNetwork(tn), sites)
return tn
end

function addsite!(tn::Quantum, site, index)
Expand Down

0 comments on commit 5d3ff97

Please sign in to comment.