The structure of the QSPRpred package reflects the intended usage as outlined in Figure with several packages and subpackages separating the different tasks (Figure ). Every data structure and functional element of the API has its own abstract definition, which is followed in the reference implementations. For example, the main QSPRDataset (located in qsprpred.data.tables.qspr) class implements several interfaces defined in qsprpred.data.tables.base. Likewise, the QSPRModel abstract base class (located in qsprpred.models.base) defines the API of a model while the qsprpred.models.sklearn is its implementation that facilitates a compatibility layer between the scikit-learn package and QSPRpred. Such a standardized approach to API development makes integration of new tools and data structures easier and changes to code minimal as libraries update over time.