Default parameters are ignored in Hamiltonian functions
See this example:
syst = kwant.Builder(kwant.TranslationalSymmetry([1]))
lat = kwant.lattice.chain(1)
syst[lat(0)] = lambda site, t, constant=1: 4*t + constant
syst[lat(0), lat(1)] = lambda site1, site2, t, constant=1: -1j*t + constant
syst = syst.finalized()
kwant.physics.Bands(syst, params={'t': 1})
With the following error:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-10-ead3aec5ad0f> in <module>()
4 syst[lat(0), lat(1)] = lambda site1, site2, t, constant=1: -1j*t + constant
5 syst = syst.finalized()
----> 6 kwant.physics.Bands(syst, params={'t': 1})
/opt/conda/envs/dev/lib/python3.6/site-packages/kwant/physics/dispersion.py in __init__(self, sys, args, params)
50 syst = sys
51 ensure_isinstance(syst, system.InfiniteSystem)
---> 52 self.ham = syst.cell_hamiltonian(args, params=params)
53 if not np.allclose(self.ham, self.ham.T.conj()):
54 raise ValueError('The cell Hamiltonian is not Hermitian.')
/opt/conda/envs/dev/lib/python3.6/site-packages/kwant/system.py in cell_hamiltonian(self, args, sparse, params)
211 cell_sites = range(self.cell_size)
212 return self.hamiltonian_submatrix(args, cell_sites, cell_sites,
--> 213 sparse=sparse, params=params)
214
215 def inter_cell_hopping(self, args=(), sparse=False, *, params=None):
kwant/_system.pyx in kwant._system.hamiltonian_submatrix (kwant/_system.c:9265)()
/opt/conda/envs/dev/lib/python3.6/site-packages/kwant/builder.py in hamiltonian(self, i, j, params, *args)
1868 param_names, takes_kwargs = self._ham_param_map[value]
1869 if not takes_kwargs:
-> 1870 params = {pn: params[pn] for pn in param_names}
1871 try:
1872 value = value(site, **params)
/opt/conda/envs/dev/lib/python3.6/site-packages/kwant/builder.py in <dictcomp>(.0)
1868 param_names, takes_kwargs = self._ham_param_map[value]
1869 if not takes_kwargs:
-> 1870 params = {pn: params[pn] for pn in param_names}
1871 try:
1872 value = value(site, **params)
KeyError: 'constant'