  We describe and implement a symbolic algebra for scalar and vector-valued
finite elements, enabling the computer generation of elements with tensor
product structure on quadrilateral, hexahedral and triangular prismatic cells.
The algebra is implemented as an extension to the domain-specific language UFL,
the Unified Form Language. This allows users to construct many finite element
spaces beyond those supported by existing software packages. We have made
corresponding extensions to FIAT, the FInite element Automatic Tabulator, to
enable numerical tabulation of such spaces. This tabulation is consequently
used during the automatic generation of low-level code that carries out local
assembly operations, within the wider context of solving finite element
problems posed over such function spaces. We have done this work within the
code-generation pipeline of the software package Firedrake; we make use of the
full Firedrake package to present numerical examples.
