  SfePy (Simple finite elements in Python) is a software for solving various
kinds of problems described by partial differential equations in one, two or
three spatial dimensions by the finite element method. Its source code is
mostly (85\%) Python and relies on fast vectorized operations provided by the
NumPy package. For a particular problem two interfaces can be used: a
declarative application programming interface (API), where problem
description/definition files (Python modules) are used to define a calculation,
and an imperative API, that can be used for interactive commands, or in scripts
and libraries. After outlining the SfePy package development, the paper
introduces its implementation, structure and general features. The components
for defining a partial differential equation are described using an example of
a simple heat conduction problem. Specifically, the declarative API of SfePy is
presented in the example. To illustrate one of SfePy's main assets, the
framework for implementing complex multiscale models based on the theory of
homogenization, an example of a two-scale piezoelastic model is presented,
showing both the mathematical description of the problem and the corresponding
code.
