Can't use functions in discretize's locals
This used to work in kwant
1.3
kwant.continuum.discretize('k_x**2 + V', locals={'V': 'V_left(x)'})
and now:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-f8ec38417bc9> in <module>()
----> 1 kwant.continuum.discretize('k_x**2 + V', locals={'V': 'V(x)'})
/opt/conda/lib/python3.6/site-packages/kwant/continuum/discretizer.py in discretize(hamiltonian, coords, grid_spacing, locals)
130 `grid_spacing`) in the ``lattice`` attribute.
131 """
--> 132 tb, coords = discretize_symbolic(hamiltonian, coords, locals=locals)
133
134 return build_discretized(tb, coords, grid_spacing=grid_spacing)
/opt/conda/lib/python3.6/site-packages/kwant/continuum/discretizer.py in discretize_symbolic(hamiltonian, coords, locals)
175 """
176 with reraise_warnings():
--> 177 hamiltonian = sympify(hamiltonian, locals)
178
179 atoms_names = [s.name for s in hamiltonian.atoms(sympy.Symbol)]
/opt/conda/lib/python3.6/site-packages/kwant/continuum/_common.py in sympify(expr, locals)
175
176 # sympify values of locals before updating it with extra_ns
--> 177 locals = {k: sympify(v) for k, v in locals.items()}
178 for k, v in extra_ns.items():
179 locals.setdefault(k, v)
/opt/conda/lib/python3.6/site-packages/kwant/continuum/_common.py in <dictcomp>(.0)
175
176 # sympify values of locals before updating it with extra_ns
--> 177 locals = {k: sympify(v) for k, v in locals.items()}
178 for k, v in extra_ns.items():
179 locals.setdefault(k, v)
/opt/conda/lib/python3.6/site-packages/kwant/continuum/_common.py in sympify(expr, locals)
197 # sympy types.
198 subs = {r: sympy.Symbol(str(r.func))(*r.args)
--> 199 for r in hamiltonian.atoms(sympy.Function)}
200
201 hamiltonian = hamiltonian.subs(subs)
/opt/conda/lib/python3.6/site-packages/kwant/continuum/_common.py in <dictcomp>(.0)
197 # sympy types.
198 subs = {r: sympy.Symbol(str(r.func))(*r.args)
--> 199 for r in hamiltonian.atoms(sympy.Function)}
200
201 hamiltonian = hamiltonian.subs(subs)
TypeError: 'Symbol' object is not callable
EDIT: this does work when installing sympy
1.1 again. I guess we should pin it?
Edited by Bas Nijholt