
Dear all, With Kwant, we strive to keep backwards compatibility across major versions: a script that only uses the documented API and works with Kwant 1.x should continue to work unchanged with Kwant 1.y, for any y >= x. Still, we have a bunch of ideas that require breaking strict compatibility. That’s why they have been going under “Kwant 2”: • A new low-level system format that supports more general symmetries and vectorization of value functions. • Composite systems that combine systems with various degrees of commensurate symmetries in a general way. (That’s a generalization of quasi-1-d leads attached to quasi-0-d scattering regions that we have now.) • Various small changes and fixes to the interface. These things pull in other changes (e.g. in the solvers) which means that “Kwant 2” is quite a big project. Recently, I asked myself whether we really have to interpret backwards compatibility in such a strict way. Perhaps a better way would be “if it does not hurt >98% of the users, it’s OK to change things in a backwards-incompatible (but well documented) way”. I believe that there is virtually no one who uses the low level system interface [1] directly in non-trivial ways (e.g. doing something with system.graph and not just calling system.hamiltonian_submatrix() for a finite system). Is this actually true? Can people who do things with low-level systems directly please chime in and tell us what their most involved usage cases are? If it turns out that a weak interpretation of backwards compatibility is indeed OK, we could tackle the new low-level system format already for Kwant 1.3. This would make the development of Kwant more evolutionary and should make it more dynamic. What do you think? Christoph [1] http://kwant-project.org/doc/1/reference/kwant.system