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() or set_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 both params and kwargs are given, values in kwargs override those from params.

**kwargs

Additional name=value overrides for parameters whose names are valid identifiers (e.g. tb.set_parameters(beta=0.3)).

See also

with_parameters

Create a new TBModel instance with parameter-dependent terms evaluated. leaving the original unchanged.

set_onsite

Define on-site terms (may be symbolic/callable).

set_hop

Define hopping terms (may be symbolic/callable).

Notes

  • Values must be Python scalars; 0-D NumPy scalars are unwrapped via .item(). Use keyword parameters to hamiltonian(), 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 params and kwargs specify the same name, the value from kwargs wins.

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'