Software Open Access

pybinding v0.9.5: a Python package for tight-binding calculations

Dean Moldovan; Miša Anđelković; Francois Peeters

Citation Style Language JSON Export

  "publisher": "Zenodo", 
  "DOI": "10.5281/zenodo.4010216", 
  "title": "pybinding v0.9.5: a Python package for tight-binding calculations", 
  "issued": {
    "date-parts": [
  "abstract": "<p>Pybinding is a Python package for numerical tight-binding calculations in solid state physics. The main features include:</p>\n\n<ul>\n\t<li>\n\t<p><strong>Declarative model construction</strong>&nbsp;- The user just needs to describe&nbsp;<em>what</em>&nbsp;the model should be, but not&nbsp;<em>how</em>&nbsp;to build it. Pybinding will take care of the numerical details of building the Hamiltonian matrix so users can concentrate on the physics, i.e. the quantum properties of the model.</p>\n\t</li>\n\t<li>\n\t<p><strong>Fast compute</strong>&nbsp;- Pybinding&#39;s implementation of the kernel polynomial method allows for very fast calculation of various physical properties of tight-binding systems. Exact diagonalization is also available through the use of scipy&#39;s eigenvalue solvers. The framework is very flexible and allows the addition of user-defined computation routines.</p>\n\t</li>\n\t<li>\n\t<p><strong>Result analysis and visualization</strong>&nbsp;- The package contains utility functions for post-processing the raw result data. The included plotting functions are tailored for tight-binding problems to help visualize the model structure and to make sense of the results.</p>\n\t</li>\n</ul>\n\n<p>The code interface is written in Python with the aim to be as user-friendly and flexible as possible. Under the hood, C++11 is used to accelerate demanding tasks to deliver high performance with low memory usage.</p>\n\n<p>See the&nbsp;documentation&nbsp;for more details:&nbsp;</p>\n\n<p>&nbsp;</p>\n\n<p><strong>Changelog for version 0.9.5</strong></p>\n\n<p>It has been a long time since the last version was released. The Python ecosystem has changed quite a bit in the meantime and this has led to a number of compatibility issues when installing or running pybinding. The main purpose of this new version is to bring this library back to life with lots of compatibility fixes and general modernization.</p>\n\n<p>That said, a couple of new features have also snuck in: site and hopping generators should help with the creation of more general models that were not possible before. They make it possible to create heterostructures and systems with various forms of disorder.</p>\n\n<p>Thank you to <a href=\"\">@MAndelkovic (Mi&scaron;a An\u0111elkovi\u0107)</a> for making this release possible! And thanks to everyone who reported the various issues.</p>\n\n<p><strong>Necromancy</strong></p>\n\n<ul>\n\t<li>\n\t<p>Fixed compatibility issues with Python 3.7 and 3.8. Notably, this fixes the deadlocks as reported in <a href=\"\">#17</a>, <a href=\"\">#21</a>, and <a href=\"\">#23</a>.</p>\n\t</li>\n\t<li>\n\t<p>Fixed compatibility with new versions of <code>matplotlib</code>: the <code>allow_rasterization</code> import error (<a href=\"\">#11</a>), various warnings, and smaller visual glitches.</p>\n\t</li>\n\t<li>\n\t<p>Fixed installation errors due to the encoding of the <code></code> file (<a href=\"\">#7</a>).</p>\n\t</li>\n\t<li>\n\t<p>Fixed failure to compile the project from source code because the Eigen library&#39;s download URL changed (<a href=\"\">#14</a>).</p>\n\t</li>\n\t<li>\n\t<p>Fixed deprecation warnings from the latest versions of <code>numpy</code>.</p>\n\t</li>\n\t<li>\n\t<p>Fixed documentation generation with <code>sphinx</code> v2.x.</p>\n\t</li>\n\t<li>\n\t<p>Dropped support for Python 3.5. You must have Python 3.6 or newer to install this version.</p>\n\t</li>\n</ul>\n\n<p><strong>General bug fixes</strong></p>\n\n<ul>\n\t<li>\n\t<p>Fixed reversed order of <code>Lattice.reciprocal_vectors()</code>: it should be <code>a_n * b_n = 2pi</code> but it was accidentally <code>a_n * b_{N-n} = 2pi</code>.</p>\n\t</li>\n\t<li>\n\t<p>Fixed incorrect Hamiltonian construction in cases where complex hoppings were used together with translational symmetry.</p>\n\t</li>\n</ul>\n\n<p><strong>New features</strong></p>\n\n<ul>\n\t<li>\n\t<p>Added <code>@site_generator</code> which can be used to add new sites independent of the main <code>Lattice</code> definition. This is useful for creating heterostructures or defects with various add-atoms. See the new &quot;Generators&quot; section of the tutorial.</p>\n\t</li>\n\t<li>\n\t<p><code>@hopping_generator</code> has been promoted to a regular feature and added to the tutorial. It&#39;s useful for creating additional local hoppings around existing sites or connecting completely new sites which were added by a <code>@site_generator</code>.</p>\n\t</li>\n\t<li>\n\t<p>Added <code>System.count_neighbors()</code> which counts the neighbors each site has. Useful for finding edge atoms. Generators can request <code>system</code> as an argument so that they can stitch new atoms to the edges. See the API reference for <code>@site_generator</code> and <code>@hopping_generator</code>.</p>\n\t</li>\n\t<li>\n\t<p><code>@site_state_modifier</code>s and <code>@site_position_modifier</code>s can now be freely ordered. Before this, all state modifiers would be evaluated first and then all position modifiers. Now, they will be evaluated in the exact order in which they are given to <code>Model</code>. Take care: this may change the behavior of some existing models but it will give more control to create new models which not possible before.</p>\n\t</li>\n</ul>", 
  "author": [
      "family": "Dean Moldovan"
      "family": "Mi\u0161a An\u0111elkovi\u0107"
      "family": "Francois Peeters"
  "note": "This work was supported by the Flemish Science Foundation (FWO-Vl) and the Methusalem Funding of the Flemish Government.", 
  "version": "v0.9.5", 
  "type": "article", 
  "id": "4010216"
All versions This version
Views 3,063235
Downloads 1447
Data volume 87.2 MB4.5 MB
Unique views 2,645190
Unique downloads 1207


Cite as