@@ -14,12 +14,13 @@ export tj_space
1414export e_plusmin, e_plusmin_up, e_plusmin_down
1515export e_minplus, e_minplus_up, e_minplus_down
1616export e_minmin_ud, e_minmin_du, e_singlet
17- export e_number, e_number_up, e_number_down
18- export S_x, S_y, S_z
17+ export e_number, e_number_up, e_number_down, e_number_hole
18+ export S_x, S_y, S_z, S_plus, S_min
1919export S_plusmin, S_minplus, S_exchange
2020
2121export e⁺e⁻, e⁺e⁻ꜛ, e⁺e⁻ꜜ, e⁻e⁺, e⁻e⁺ꜛ, e⁻e⁺ꜜ
22- export nꜛ, nꜜ
22+ export nꜛ, nꜜ, nʰ
23+ export Sˣ, Sʸ, Sᶻ, S⁺, S⁻
2324# not exported because namespace: export n
2425
2526"""
@@ -423,13 +424,28 @@ function e_number(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Se
423424end
424425const n = e_number
425426
427+ """
428+ e_number_hole(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
429+
430+ Return the one-body operator that counts the number of holes.
431+ """
432+ e_number_hole (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = e_number_hole (ComplexF64,
433+ P, S;
434+ sf)
435+ function e_number_hole (T, particle_symmetry:: Type{<:Sector} , spin_symmetry:: Type{<:Sector} ;
436+ sf:: Bool = false )
437+ iden = TensorKit. id (tj_space (particle_symmetry, spin_symmetry; sf))
438+ return iden - e_number (T, particle_symmetry, spin_symmetry; sf)
439+ end
440+ const nʰ = e_number_hole
441+
426442"""
427443 S_x(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
428444
429445Return the one-body spin-1/2 x-operator on the electrons.
430446"""
431- S_x (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = S_x (ComplexF64, P, S; sf)
432- S_x (; sf :: Bool = false ) = S_x (ComplexF64, Trivial, Trivial ; sf)
447+ S_x (P:: Type{<:Sector} = Trivial , S:: Type{<:Sector} = Trivial ; sf:: Bool = false ) = S_x (ComplexF64,
448+ P, S ; sf)
433449function S_x (T:: Type{<:Number} , :: Type{Trivial} , :: Type{Trivial} ; sf:: Bool = false )
434450 t = single_site_operator (T, Trivial, Trivial; sf)
435451 I = sectortype (t)
@@ -446,14 +462,15 @@ function S_x(T::Type{<:Number}, ::Type{U1Irrep}, ::Type{Trivial}; sf::Bool=false
446462 t[(I (b, 1 ), dual (I (b, 1 )))][2 , 1 ] = 0.5
447463 return t
448464end
465+ const Sˣ = S_x
449466
450467"""
451468 S_y(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
452469
453470Return the one-body spin-1/2 x-operator on the electrons (only defined for `Trivial` symmetry).
454471"""
455- S_y (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = S_y (ComplexF64, P, S; sf)
456- S_y (; sf :: Bool = false ) = S_y (ComplexF64, Trivial, Trivial ; sf)
472+ S_y (P:: Type{<:Sector} = Trivial , S:: Type{<:Sector} = Trivial ; sf:: Bool = false ) = S_y (ComplexF64,
473+ P, S ; sf)
457474function S_y (T:: Type{<:Number} , :: Type{Trivial} , :: Type{Trivial} ; sf:: Bool = false )
458475 t = single_site_operator (T, Trivial, Trivial; sf)
459476 I = sectortype (t)
@@ -470,14 +487,15 @@ function S_y(T::Type{<:Number}, ::Type{U1Irrep}, ::Type{Trivial}; sf::Bool=false
470487 t[(I (b, 1 ), dual (I (b, 1 )))][2 , 1 ] = 0.5im
471488 return t
472489end
490+ const Sʸ = S_y
473491
474492"""
475493 S_z(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
476494
477495Return the one-body spin-1/2 z-operator on the electrons.
478496"""
479- S_z (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = S_z (ComplexF64, P, S; sf)
480- S_z (; sf :: Bool = false ) = S_z (ComplexF64, Trivial, Trivial ; sf)
497+ S_z (P:: Type{<:Sector} = Trivial , S:: Type{<:Sector} = Trivial ; sf:: Bool = false ) = S_z (ComplexF64,
498+ P, S ; sf)
481499function S_z (T:: Type{<:Number} , :: Type{Trivial} , :: Type{Trivial} ; sf:: Bool = false )
482500 t = single_site_operator (T, Trivial, Trivial; sf)
483501 I = sectortype (t)
@@ -510,6 +528,37 @@ function S_z(T::Type{<:Number}, ::Type{U1Irrep}, ::Type{U1Irrep}; sf::Bool=false
510528 t[(I (b, 1 , - 1 // 2 ), dual (I (b, 1 , - 1 // 2 )))] .= - 0.5
511529 return t
512530end
531+ const Sᶻ = S_z
532+
533+ """
534+ S_plus(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
535+
536+ Return the spin-plus operator.
537+ """
538+ S_plus (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = S_plus (ComplexF64,
539+ P, S;
540+ sf)
541+ function S_plus (T, particle_symmetry:: Type{<:Sector} , spin_symmetry:: Type{<:Sector} ;
542+ sf:: Bool = false )
543+ return S_x (T, particle_symmetry, spin_symmetry; sf) +
544+ 1im * S_y (T, particle_symmetry, spin_symmetry; sf)
545+ end
546+ const S⁺ = S_plus
547+
548+ """
549+ S_min(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool=false)
550+
551+ Return the spin-minus operator.
552+ """
553+ S_min (P:: Type{<:Sector} , S:: Type{<:Sector} ; sf:: Bool = false ) = S_min (ComplexF64,
554+ P, S;
555+ sf)
556+ function S_min (T, particle_symmetry:: Type{<:Sector} , spin_symmetry:: Type{<:Sector} ;
557+ sf:: Bool = false )
558+ return S_x (T, particle_symmetry, spin_symmetry; sf) -
559+ 1im * S_y (T, particle_symmetry, spin_symmetry; sf)
560+ end
561+ const S⁻ = S_min
513562
514563"""
515564 S_plusmin(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; sf::Bool = false)
0 commit comments