This is a small foundational library that implements a tag system used to refer to quantum sites and related concepts.
A wrapper type / tag representing a site in a lattice.
A Site backed by a NTuple{N,Int}.
julia> CartesianSite(1)
site<(1,)>
julia> CartesianSite(2,3)
site<(2, 3)>There is the @site_str macro for easier creation of CartesianSites.
julia> site"1"
site<(1,)>
julia> site"2,3"
site<(2, 3)>A Site backed by a AbstractString or Symbol as identifier.
julia> NamedSite("auxiliary")
site<"auxiliary">
julia> NamedSite(:tmp)
site<:tmp>A tag representing a bond between two Sites.
julia> Bond(site"1", site"2")
bond<site<(1,)> ⟷ site<(2,)>>
julia> Bond(NamedSite(:tmp), NamedSite(:q0))
bond<site<:tmp> ⟷ site<:q0>>There is the @bond_str macro for easier creation of Bonds containing CartesianSites.
julia> bond"1,2-3,4"
bond<site<(1, 2)> ⟷ site<(3, 4)>>A tag representing a physical, open link from which a Site attaches to operators.
julia> Plug(site"1")
plug<site<(1,)>>
julia> Plug(site"1"; isdual=true)
plug<site<(1,)>'>
julia> Plug(site"1")'
plug<site<(1,)>'>There is the @plug_str macro for easier creation of Plugs containing a CartesianSite.
julia> plug"1"
plug<site<(1,)>>
julia> plug"1'"
plug<site<(1,)>'>