  This paper describes PyOED, a highly extensible scientific package that
enables developing and testing model-constrained optimal experimental design
(OED) for inverse problems. Specifically, PyOED aims to be a comprehensive
Python toolkit for model-constrained OED. The package targets scientists and
researchers interested in understanding the details of OED formulations and
approaches. It is also meant to enable researchers to experiment with standard
and innovative OED technologies with a wide range of test problems (e.g.,
simulation models). OED, inverse problems (e.g., Bayesian inversion), and data
assimilation (DA) are closely related research fields, and their formulations
overlap significantly. Thus, PyOED is continuously being expanded with a
plethora of Bayesian inversion, DA, and OED methods as well as new scientific
simulation models, observation error models, and observation operators. These
pieces are added such that they can be permuted to enable testing OED methods
in various settings of varying complexities. The PyOED core is completely
written in Python and utilizes the inherent object-oriented capabilities;
however, the current version of PyOED is meant to be extensible rather than
scalable. Specifically, PyOED is developed to enable rapid development and
benchmarking of OED methods with minimal coding effort and to maximize code
reutilization. This paper provides a brief description of the PyOED layout and
philosophy and provides a set of exemplary test cases and tutorials to
demonstrate the potential of the package.
