Skip to main content

A Python3 library of test functions from the uncertainty quantification community with a common interface for benchmarking purpose.

Project description

UQTestFuns

JOSS DOI Code style: black Python 3.7 License PyPI

Branches Status
main (stable) build codecov Docs
dev (latest) build codecov Docs

UQTestFuns is an open-source Python3 library of test functions commonly used within the applied uncertainty quantification (UQ) community. Specifically, the package provides:

  • an implementation with minimal dependencies (i.e., NumPy and SciPy) and a common interface of many test functions available in the UQ literature
  • a single entry point collecting test functions and their probabilistic input specifications in a single Python package
  • an opportunity for an open-source contribution, supporting the implementation of new test functions or posting reference results.

In short, UQTestFuns is an homage to the Virtual Library of Simulation Experiments (VLSE).

Usage

UQTestFuns includes several commonly used test functions in the UQ community. To list the available functions:

>>> import uqtestfuns as uqtf
>>> uqtf.list_functions()
+-------+-------------------------------+-----------+------------+----------+---------------+--------------------------------+
|  No.  |          Constructor          |  # Input  |  # Output  |  Param.  |  Application  | Description                    |
+=======+===============================+===========+============+==========+===============+================================+
|   1   |           Ackley()            |     M     |     1      |   True   | optimization, | Optimization test function     |
|       |                               |           |            |          | metamodeling  | from Ackley (1987)             |
+-------+-------------------------------+-----------+------------+----------+---------------+--------------------------------+
|   2   |        Alemazkoor20D()        |    20     |     1      |  False   | metamodeling  | High-dimensional low-degree    |
|       |                               |           |            |          |               | polynomial from Alemazkoor &   |
|       |                               |           |            |          |               | Meidani (2018)                 |
+-------+-------------------------------+-----------+------------+----------+---------------+--------------------------------+
|   3   |        Alemazkoor2D()         |     2     |     1      |  False   | metamodeling  | Low-dimensional high-degree    |
|       |                               |           |            |          |               | polynomial from Alemazkoor &   |
|       |                               |           |            |          |               | Meidani (2018)                 |
+-------+-------------------------------+-----------+------------+----------+---------------+--------------------------------+
|   4   |          Borehole()           |     8     |     1      |  False   | metamodeling, | Borehole function from Harper  |
|       |                               |           |            |          |  sensitivity  | and Gupta (1983)               |
+-------+-------------------------------+-----------+------------+----------+---------------+--------------------------------+
...

Consider the Borehole function, a test function commonly used for metamodeling and sensitivity analysis purposes; to create an instance of this test function:

>>> my_testfun = uqtf.Borehole()
>>> print(my_testfun)
Function ID      : Borehole
Input Dimension  : 8 (fixed)
Output Dimension : 1
Parameterized    : False
Description      : Borehole function from Harper and Gupta (1983)
Applications     : metamodeling, sensitivity

The probabilistic input specification of this test function is built-in:

>>> print(my_testfun.prob_input)
Function ID     : Borehole
Input ID        : Harper1983
Input Dimension : 8
Description     : Probabilistic input model of the Borehole model from
                  Harper and Gupta (1983)
Marginals       :

 No.    Name    Distribution        Parameters                          Description
-----  ------  --------------  ---------------------  -----------------------------------------------
  1      rw        normal      [0.1       0.0161812]            radius of the borehole [m]
  2      r       lognormal        [7.71   1.0056]                 radius of influence [m]
  3      Tu       uniform        [ 63070. 115600.]      transmissivity of upper aquifer [m^2/year]
  4      Hu       uniform          [ 990. 1100.]         potentiometric head of upper aquifer [m]
  5      Tl       uniform          [ 63.1 116. ]        transmissivity of lower aquifer [m^2/year]
  6      Hl       uniform           [700. 820.]          potentiometric head of lower aquifer [m]
  7      L        uniform          [1120. 1680.]                length of the borehole [m]
  8      Kw       uniform         [ 9985. 12045.]     hydraulic conductivity of the borehole [m/year]

Copulas         : Independence

A sample of input values can be generated from the input model:

>>> xx = my_testfun.prob_input.get_sample(10)
array([[8.40623544e-02, 2.43926544e+03, 8.12290909e+04, 1.06612711e+03,
        7.24216436e+01, 7.78916695e+02, 1.13125867e+03, 1.02170796e+04],
       [1.27235295e-01, 3.28026293e+03, 6.36463631e+04, 1.05132831e+03,
        6.81653728e+01, 8.17868370e+02, 1.16603931e+03, 1.09370944e+04],
       [8.72711602e-02, 7.22496512e+02, 9.18506063e+04, 1.06436843e+03,
        6.44306474e+01, 7.74700231e+02, 1.46266808e+03, 1.12531788e+04],
       [1.22301709e-01, 2.29922122e+02, 8.00390345e+04, 1.05290108e+03,
        1.10852262e+02, 7.94709283e+02, 1.28026313e+03, 1.01879077e+04],
...

...and used to evaluate the test function:

>>> yy = my_testfun(xx)
array([ 57.32635774, 110.12229548,  53.10585812,  96.15822154,
        58.51714875,  89.40068404,  52.61710076,  61.47419171,
        64.18005235,  79.00454634])

Installation

You can obtain UQTestFuns directly from PyPI using pip:

$ pip install uqtestfuns

Alternatively, you can also install the latest version from the source:

pip install git+https://github.com/damar-wicaksono/uqtestfuns.git

NOTE: UQTestFuns is currently work in progress, therefore interfaces are subject to change.

It's a good idea to install the package in an isolated virtual environment.

Getting help

For a getting-started guide on UQTestFuns, please refer to the Documentation. The documentation also includes details on each of the available test functions.

For any other questions related to the package, post your questions on the GitHub Issue page.

Package development and contribution

UQTestFuns is under ongoing development; any contribution to the code (for example, a new test function) and the documentation (including new reference results) are welcomed!

Please consider the Contribution Guidelines first, before making a pull request.

Citing UQTestFuns

If you use this package in your research or projects, please consider citing both the associated paper and the Zenodo archive (for the specific version used).

Citing the paper (JOSS)

The citation of the paper associated with this package is:

@article{Wicaksono2023,
  author    = {Wicaksono, Damar and Hecht, Michael},
  title     = {{UQTestFuns}: A {Python3} library of uncertainty quantification ({UQ}) test functions},
  journal   = {Journal of Open Source Software},
  year      = {2023},
  volume    = {8},
  number    = {90},
  doi       = {10.21105/joss.05671},
}

Citing a specific version (Zenodo)

To ensure reproducibility, cite the exact version of the package you used. Each release is archived on Zenodo with a unique DOI; find and use the DOI for the version you used at Zenodo.

The citation for the current public version is:

@software{UQTestFuns_0_6_0,
  author       = {Wicaksono, Damar and Hecht, Michael},
  title        = {{UQTestFuns: A Python3 Library of Uncertainty Quantification (UQ) Test Functions}},
  month        = jan,
  year         = 2025,
  publisher    = {Zenodo},
  version      = {v0.6.0},
  doi          = {10.5281/zenodo.14710452},
  url          = {https://doi.org/10.5281/zenodo.14710452}
}

Credits and contributors

This work was partly funded by the Center for Advanced Systems Understanding (CASUS) which is financed by Germany's Federal Ministry of Education and Research (BMBF) and by the Saxony Ministry for Science, Culture and Tourism (SMWK) with tax funds on the basis of the budget approved by the Saxony State Parliament.

UQTestFuns is currently maintained by:

under the Mathematical Foundations of Complex System Science Group led by Michael Hecht (HZDR/CASUS) at CASUS.

License

UQTestFuns is released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uqtestfuns-0.6.0.tar.gz (87.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uqtestfuns-0.6.0-py3-none-any.whl (141.3 kB view details)

Uploaded Python 3

File details

Details for the file uqtestfuns-0.6.0.tar.gz.

File metadata

  • Download URL: uqtestfuns-0.6.0.tar.gz
  • Upload date:
  • Size: 87.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for uqtestfuns-0.6.0.tar.gz
Algorithm Hash digest
SHA256 64f0550e2ec243322f25e0d4beee9307f2585ce0509d356a57215dde07616264
MD5 b5e439b9d4c7fce864dbe749b657376f
BLAKE2b-256 a18e022ebdf2d42e1bfd66b79ccb57ee2e21609630af6fd9c5ab08d986cc5b4f

See more details on using hashes here.

File details

Details for the file uqtestfuns-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: uqtestfuns-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 141.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for uqtestfuns-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60f051c6403e39cf32ba8715bef0b5c1ead092d2450d4b13cbf52eeb8f931c30
MD5 fa7fd19810ebb48fe4c8a02759f9cc96
BLAKE2b-256 ccce29cfbd47a198cf5765886cf7c478d8d21496dc866042b7a68adbf9effb0b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page