Skip to content

Refactors Sites / DegreesOfFreedom - #317

Open
jhauschild wants to merge 8 commits into
mainfrom
site_inheritance
Open

jhauschild wants to merge 8 commits into
mainfrom
site_inheritance

Conversation

@jhauschild

Copy link
Copy Markdown
Member

Motivation is to address #164 , which is essentially the part 2 inheritance of #254 for #255.

The second commit here does this, making the DegreeOfFreedom attributes of the Site instead of subclassing them.

Downstream: Site DOF composition (lasyten) → TeNPy v2_main

Follow-up for the lasyten Site/DOF composition refactor (issues #164 / #254; call-site map:
convert_SiteDOF.md).
After #611, TeNPy models already go through lasyten Sites + Coupling factories. That path is mostly unchanged. What breaks is anything that still assumes DOF mixin
inheritance
(SpinSite is-a SpinDOF, flat attrs on the site, isinstance(site, FermionicDOF), etc.).

What changed in lasyten (Python)

Old New
SpinSite / SpinHalfFermionSite / … subclass DOF mixins Concrete sites subclass Site only
site.spin_vector site.spin.spin_vector (or site.dofs["spin"].spin_vector)
site.Nmax / n_tot / JW / number_operators / … site.occupation.<attr>
site.clock_operators site.clock.clock_operators
isinstance(site, SpinDOF) / FermionicDOF / … site.spin is not None / isinstance(site.occupation, FermionicDOF) / …
site.creation_annihilation_ops(...) (via MI) lasy.FermionicDOF.creation_annihilation_ops(...) (static on the DOF type)
site.num_species on every occupation site Still on SpinlessFermionSite; for SpinHalfFermionSite use site.occupation.num_species
Conventional DOF registry keys: "spin", "occupation", "clock", "anyon".

Does not need changes (if used as today)

  • Site constructors (SpinSite(...), SpinlessBosonSite(Nmax=...), SpinHalfFermionSite(...), …)
  • Named onsite ops via site.get_op(...) / add_onsite_operator / model add_onsite / add_*_coupling with op names
  • lasyten coupling factories (spin_spin_coupling, hopping, clock_clock_coupling, Hubbard-style factories, …) — they take Sites and resolve DOFs internally
  • isinstance(x, lasy.Site) / concrete site classes (SpinSite, SpinHalfFermionSite, …)

Required TeNPy edits on v2_main (checked against current tree)

1. tenpy/models/spins.py — only production hit

  • _onsite_matrix: site.spin_vector → site.spin.spin_vector
  • _coupling_matrix: site1.spin_vector / site2.spin_vector → site1.spin.spin_vector / …
  • DipolarSpinChain.init_couplings: s.spin_vector → s.spin.spin_vector
    2. tests/test_model.py — test_model_plus_hc
  • s.spin_vector → s.spin.spin_vector
  • s.creation_annihilation_ops(s.num_species) → e.g.
    lasy.FermionicDOF.creation_annihilation_ops(s.occupation.num_species)
    (and use s.occupation.num_species for SpinHalfFermionSite; SpinlessFermionSite.num_species still exists on the site)

Explicitly not broken by this refactor (on v2_main)

  • Other ported models from #611 (tf_ising, clock, fermions_spinless, hubbard, haldane, hofstadter, …): they construct sites and define couplings by name / factories — no flat DOF attribute access found.
  • Passing Nmax= / conserve= / filling= into site constructors.
  • Docs/examples that only mention site class names (no flat DOF attrs).

Suggested smoke checklist after bumping lasyten

  • SpinModel / SpinChain / DipolarSpinChain construct and build H
  • test_model.py::test_model_plus_hc for spin, fermion, spin-fermion
  • Optional: SpinHalfFermionSite model (e.g. Hubbard) still builds — should already, but confirms coupling factories

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant