Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Release Notes UQpy v4 – 04/2022 🚀 What's New **UQpy Features** • RunModel with Open-MPI support The parallelization framework that drives forward simulation in UQpy is replaced with OpenMPI. This removes tight coupling with the SLURM scheduler for HPC clusters and allows more general HPC adoption of the code. • Gaussian Process Regression with Constraints The Surrogates module is enhanced with the addition of Gaussian Process Regression (GPR) to generalize the previously existing Kriging capability. Data with and with and without noise can be fitted. Base classes enable to user to incorporate custom capabilities. Additionally, the Virtual Point method allows the fitting of a constrained surrogate, with the NonNegativity constraint being currently available and several other constraints under development. • Polynomial Chaos Expansion The Polynomial Chaos surrogate of UQpy was rewritten from scratch to improve performance. Apart from the previous capability of creating a tensor product basis, now total degree basis and hyperbolic truncation are available. The code also has enhanced regression capability for solving the coefficients including the efficient Least Angle Regression method. Additional capabilities including the computation of higher order moments and for first and total order sensitivity indices are incorporated. **Continuous Integration Features** • New software development workflow using Github flow coupled with Cloud-based DevOps To streamline the development of UQpy and ensure the quality of the delivered product, cloud-based DevOps tools are adopted. Specifically, Azure Pipelines is used for automated code test based on git-related events, such as commits. This ensures quality and functionality of the code throughout the development process. • Automated testing using Pytest With the support of DevOps tools mentioned above, an automated testing framework is established. All classes and modules of UQpy are required to achieve a minimum 80% code coverage. This is attained with the aid of unit tests, that ensure the core functionality is in line with published benchmark results. • Automated linting using Pylint The user is guarded against syntax errors with the aid of Pylint. This static code analysis tool is incorporated as a step of the DevOps pipeline to detect and resolve uncompliant code behavior. • Continuous Code Quality using Sonar Cloud SonarCloud analyzes the code at Pull Requests and detects known bugs, measures the maintainability rating and code smells existing in the code, thus providing an overview of the code quality. **Coding Conventions** • Naming conventions To align UQpy with python community coding standards, PEP8 is adopted throughout the code. Modules, Classes and function names have been replaced with PascalCase and snake_case conventions wherever appropriate. Full names are now used for attributes and methods to enhance code readability. Note that this changes the names of many modules, classes, and functions in UQpy. • Logging infrastructure Verbosity flags, combined with print statements have been replaced throughout the code with the python logging facility introduced in PEP282. This allows the user a choice of multiple severity levels, depending on the details required. Different handlers enable logging messages to be emitted in output streams ranging from Files and Databases to Http Streams, with the default choice being the console. • Type hints To support user interaction with the UQpy library, type hints introduced in PEP484 are adopted throughout the code. Even though Python runtime does not enforce variable and type annotations, modern Integrated Development Environments (IDEs) guard the user against wrong input data. 📖 **Documentation** • New documentation Sphinx template. Documentation has been ported from the previous template into the most widely adopted template from the open-source community. It is hierarchically restructured in a way that reflects the module and class hierarchy of the code. • Jupyter notebooks incorporated in docs with Binder support All Jupyter notebooks that used to live in a separate folder of the repository are now ported into the documentation. Step-by-step examples accompany each class and illustrate its use across different scenarios. The reader can directly see the results of the examples or alternatively run them interactively in an incorporated Binder environment. All examples are downloadable in both Jupyter notebook and python format. • Discussions forum in Github To enhance interaction with the community, UQpy repository has adopted the Discussion feature available within Github, that serves as a forum for Uncertainty Quantification and code related question. In addition, issue reporting has been enhanced with templates for both bugs and feature requests that help the UQpy developer communicate and address the code issues and functionalities in an expedited manner. • Code Citation The repository has also been enhanced with a citation button that quickly links the user with a bibtex citation for the purposes of academic cross-referencing. 📦 **Library Continuous Delivery** • Docker image releases A new channel for distribution of the UQpy library is through Docker images. Docker images are templates for the creation of Docker containers. They contain the application code, as well as all required dependencies. The exact same environment can be replicated in all Windows, Linux and MacOS platforms. In case multiple nodes are required, all major Infrastructure as a Service (IaaS) providers support the deployment of such containers, while HPC Supercomputing center gradually transition to containerization by supporting open-source container engines such as Singularity/SARUS. • Automated semantic versioning GitVersion tool is used to remove the guesswork related to library versioning. This tool traverses the git tree of the project and automatically calculates the version number of the current release. • Automated PyPI package releases The creation and generation of python packages is now an automated step of the release. When merging the latest version to the master, the code is package uploaded and distributed via the PyPI package manager. • Automated no-arch releases in dedicated Anaconda and Conda-forge channels Like the PyPI, package release is automate in Anaconda. Operating system independent packages are created and distributed automatically in the SURG_JHU and conda-forge channels. As a result, UQpy can be installed and utilized in any python environment regards of the underlying operating system. • Automated Github releases A zipped version of the released version is automatically generated and uploaded directly in the Github repository for users to download and use in case access to the code for a specific version is needed. ⭐ **Improvements** • Major refactoring of Sampling, Inference, Surrogates and Dimension Reduction modules. Three major modules of UQpy are rewritten. Code duplication has been reduced to a minimum, with code readability and extensibility being the top priorities. Abstract classes have been introduced throughout, enable the latter goal by provided specific instructions to the users on how to extend UQpy according to their need and provided additional functionality. 🚢 **Coming Soon** • Parallel and Sequential Tempering algorithms • Two-dimensional Karhunen-Loeve expansion • Sampling-based Sensitivity Indices • Adaptive Kriging Sensitivity Indices • Geometric Harmonics • Further Performance Improvements
- Loading branch information