The implementation of yarrow is backend-agnostic. Since Diagrams are ultimately backed by arrays, a “backend” is just a choice of array library. The default provided backend is based on numpy. In the future we intend to add a cupy backend.

Most classes in yarrow are implemented as abstract base classes whose child classes select a particular backend by setting class members. For example, the yarrow.finite_function.AbstractFiniteFunction class assumes a member _Array is set. The child class yarrow.finite_function.FiniteFunction extends AbstractFiniteFunction by setting _Array = yarrow.array.numpy.