UQpy, "Uncertainty Quantification with Python," is a general purpose Python toolbox for modeling uncertainty in the simulation of physical and mathematical systems. The code is organized as a set of modules centered around core capabilities in Uncertainty Quantification (UQ) as illustrated below. The modules are distinct, but are designed to be easily extensible (new capabilities can be easily added and integrated into the code) and to easily call one another.

The core of UQpy is the RunModel module, which serves as the UQpy API to third-party software. The RunModel module is developed to be flexible and therefore allow simple and efficient interfacing with any commercial software and custom software alike. RunModel serves as both a conversion utility (translating information from UQpy into software input) as well as a driver for computational analyses (it will execute the code, repeated if necessary as in a Monte Carlo analysis).

All primary functionalities in UQpy are categorized according to the modules illustrated above. These modules are:

  • SampleMethods: The SampleMethods module contains a set of classes for generating samples of random variables according to different techniques. SampleMethods is used for statistically-based approaches (i.e. Monte Carlo type) as well as numerical approaches (e.g. stochastic collocation). The current classes in SampleMethods are:
    • MCS - Monte Carlo Sampling
    • LHS - Latin Hypercube Sampling
    • STS - Stratified Sampling
    • MCMC - Markov Chain Monte Carlo
    • Correlate - Impose correlation on standard normal samples
    • Decorrelate - Remove correlation from correlated standard normal samples
    • Nataf - Transform standard normal samples to a non-Gaussian distribution
    • InvNataf - Transform non-Gaussian samples to a standard normal distribution
  • Reliability: The Reliability module contains a set of classes aimed at performing reliability analysis / estimating probability of failure. The current classes in Reliability are:
    • SubsetSimulation - Subset simulation using Metropolis-Hastings, Component-wise Modified Metropolis-Hastings, or Affine Invariant Ensemble Sampler.
    • TaylorSeries - Reliability analysis based on a Taylor Series expansion of the limit surface, specifically including First Order Reliabilty Method (FORM) and Second Order Reliability Method (SORM).
  • Inference (Coming soon): The inference module contains a set of classes for model selection (both Bayesian and information theoretic) and Bayesian parameter estimation.
  • Surrogate: The Surrogate module contains a set of classes for developing surrogate models. UQpy currently offers two options for surrogate modeling:
    • SROM - Stochastic Reduced Order Models
    • Kriging - Gaussian Process Regression / Kriging
  • Optimization (Coming soon): The optimization module contains a set of classes for optimization.
  • StochasticProcess: The StochasticProcess module contains a set of classes for simulation (synthetic generation) of random processes and random fields. The current classes in StochasticProcess are:
    • SRM - Spectral Representation Method
    • BSRM - Bispectral Representation Method (Generalized third-order spectral representation method)
    • KLE - Karhunen-Loeve Expansion
    • Translate - Translation Process
    • Inverse Translate - Identify the underlying Gaussian random process from a known non-Gaussian random process
  • Sensitivity (Coming soon): The Sensitivity module contains a set of classes for performing global and local sensitivity analysis.

UQpy also contains two support modules:

  • Distributions: The Distributions module specifies pre-defined probability distributions and enables user-defined probability distributions for use in UQpy.
  • Utilities: The Utilities module contains a set of functions and classes that are broadly useful to support multiple core functionalities.

For more information and to download the software for development, see the UQpy Github page at https://github.com/SURGroup/UQpy

For those interested in using UQpy, it can be directly imported from the Python Package Index using pip.