pythtb.TBModel.set_parameters#
- TBModel.set_parameters(params=None, /, **kwargs)[source]#
Materialize parameterized on-site and hopping terms at fixed scalar values.
Any entries previously defined via
set_onsite()orset_hop()with a string or callable provider are evaluated using the supplied parameter values. The resulting numerics are then written back through the same APIs so all standard validation (Hermiticity, conjugate handling, shape checks) applies.- Parameters:
- paramsMapping[str, Any], optional
Dictionary mapping parameter names to scalar values. Use this when a name is not a valid Python identifier (e.g. contains spaces or
-). If bothparamsandkwargsare given, values inkwargsoverride those fromparams.- **kwargs
Additional
name=valueoverrides for parameters whose names are valid identifiers (e.g.tb.set_parameters(beta=0.3)).
See also
with_parametersCreate a new TBModel instance with parameter-dependent terms evaluated. leaving the original unchanged.
set_onsiteDefine on-site terms (may be symbolic/callable).
set_hopDefine hopping terms (may be symbolic/callable).
Notes
Values must be Python scalars; 0-D NumPy scalars are unwrapped via
.item(). Use keyword parameters tohamiltonian(),solve_ham(), etc., for array sweeps (those are ephemeral).Providers whose full parameter lists are not covered by the supplied values are left as-is; you can freeze parameters incrementally across calls.
After a provider is fully evaluated, it is removed and replaced by its numeric value; subsequent Hamiltonian builds no longer depend on external parameter kwargs.
When both
paramsandkwargsspecify the same name, the value fromkwargswins.
Examples
Freeze two parameters at once:
>>> tb.set_onsite(lambda m: [m, -m], ind_i=None) >>> tb.set_hop(lambda t: t * np.eye(2), 0, 1, [0, 0]) >>> tb.set_parameters(m=0.4, t=1.2) # providers removed, numeric values stored
Use a dict for a non-identifier name, override via kwargs:
>>> tb.set_onsite(lambda m_A: m_A, ind_i=0) >>> tb.set_parameters({"m-A": 0.1, "m_A": 0.2}, m_A=0.3) # m_A=0.3 overrides
Keep one parameter symbolic (partial freeze):
>>> tb.set_hop(lambda t, phi: t * np.exp(1j*phi), 0, 2, [1, 0]) >>> tb.set_parameters(t=0.5) # still depends on 'phi'