Skip to main content

WellMet is pure Python framework for spatial structural reliability analysis. Or, more specifically, for "failure probability estimation and detection of failure surfaces by adaptive sequential decomposition of the design domain".

Installation

For users of conda-based distributions

Anaconda users are encouraged to manually install WellMet's dependencies:

conda install -c anaconda scipy
conda install -c anaconda matplotlib
conda install -c anaconda pandas
conda install -c anaconda mpmath
conda install -c anaconda pyqtgraph

conda install -c conda-forge quadpy

pyopengl for 3D view (optionally):

conda install -c anaconda pyopengl

Finally, install WellMet from PyPI:

pip install wellmet

For other users

Install WellMet from PyPI:

pip install wellmet

WellMet relies on quadpy for simplex integration. However, quadpy became a closed source software and requires licence fee now. One probably could install official quadpy package and obtain a licence in order to support Nico Schloemer. However, WellMet has never been tested with commertial quadpy versions. So, we separately share the last GPL version:

pip install quadpy-gpl

How to use:

A. To run GUI with predefined benchmark problems:

  1. Type in shell: python -m wellmet
  2. Choose problem to solve, choose (optionally) filename to store samples and estimations, set up the algorithm.
  3. Press "Batch run..." button and type desired number of LSF calls.

B. To test the algorithm on your own problem use the following code:

import numpy as np
import scipy.stats as stats

from wellmet.qt_gui import qt_box_functions as gui
from wellmet import whitebox
from wellmet.samplebox import SampleBox
from wellmet import f_models


# 1. Set up probability distribution
# Standard Gaussian variables, 2D
#f = f_models.SNorm(2)
# Just normal variables
f = f_models.Norm(mean=[-1, 0], std=[2, 1])
# Independent non-Gaussian variables
#f = f_models.UnCorD((stats.gumbel_r, stats.uniform))
# Correlated non-Gaussian marginals
#f = f_models.Nataf((stats.gumbel_r, stats.weibull_min(c=1.5)), [[1,0.8], [0.8,1]])

# 2. Define LSF function
def my_problem(input_sample):
    # get real (physical) space coordinates
    # X is a numpy array with shape (nsim, ndim)
    # the algorithm normally sends (1, ndim) sample
    X = input_sample.R
    # LSF
    g = X[:, 0] - X[:, 1] + 3
    # we should return an instance of SampleBox class
    # this instance stores coordinates along with LSF calculation result
    return SampleBox(input_sample, g, "my_problem")

# 3. Put them together
wt = whitebox.WhiteBox(f, my_problem)

# choose filename to store samples and estimations
gui.read_box(wt)
# setup algorithm
gui.setup_dicebox(wt)

# start GUI
gui.show_box(wt)

C. The same without GUI:

import numpy as np
import scipy.stats as stats

from wellmet.samplebox import SampleBox
from wellmet import f_models


# 1. Set up probability distribution
# Standard Gaussian variables, 2D
#f = f_models.SNorm(2)
# Just normal variables
f = f_models.Norm(mean=[-1, 0], std=[2, 1])
# Independent non-Gaussian variables
#f = f_models.UnCorD((stats.gumbel_r, stats.uniform))
# Correlated:
# Nataf model with correlations of the respective _Gaussian_ marginals
#f = f_models.Nataf((stats.gumbel_r, stats.weibull_min(c=1.5)), [[1,0.8], [0.8,1]])

# 2. Define LSF function
def my_problem(input_sample):
    # get real (physical) space coordinates
    # X is a numpy array with shape (nsim, ndim)
    # the algorithm normally sends (1, ndim) sample
    X = input_sample.R
    # LSF
    g = X[:, 0] - X[:, 1] + 3
    # we should return an instance of SampleBox class
    # it stores coordinates along with LSF calculation result
    # with kind of signature
    return SampleBox(input_sample, g, "my_problem")






# 3. Prepare storage
# no need to store anything
#sample_box = SampleBox(f)

# keep samples and estimations continiously stored 
from wellmet import reader
sample_box = reader.Reader("meow_problem", f)

# 4. Setup the algorithm
from wellmet.dicebox.circumtri import CirQTri
import quadpy

scheme = quadpy.tn.stroud_tn_3_6b(sample_box.nvar)
convex_hull_degree = 5 # degreee of Grundmann-Moeller cubature scheme
q = 1 # should be > 0. Greater values slightly enforces exploration
screening_rate = 0 # 10 means to sacrifice every tenth sample for screening
box = CirQTri(sample_box, scheme, convex_hull_degree, q, screening_rate)


# 5. Here we go!
for i in range(20):
    # ask where to sample the next point
    # next_node is an f_model instance
    next_node = box()
    # call LSF
    new_sample = my_problem(next_node)
    # put calculation result to the box
    box.add_sample(new_sample)
    
print(box.get_pf_estimation())
sensitivities_results = box.Tri.perform_sensitivity_analysis()
print(sensitivities_results.sensitivities)

This software has been developed under internal academic project no. FAST-K-21-6943 "Quality Internal Grants of BUT (KInG BUT)'' supported by the Czech Operational Programme ``Research, Development and Education'' (CZ.02.2.69/0.0/0.0/19_073/0016948, managed by the Czech Ministry of Education.

Metadata

Release files for wellmet 0.9.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wellmet 0.9.7.1
File Size Uploaded Provenance Actions
wellmet-0.9.7.1.tar.gz 223.5 kB Without provenance Details for wellmet-0.9.7.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for wellmet 0.9.7.1
File Interpreter ABI Platform Actions
wellmet-0.9.7.1-py3-none-any.whl Python 3 none any Details for wellmet-0.9.7.1-py3-none-any.whl

Total release size: 471.8 kB

Release files / wellmet-0.9.7.1.tar.gz

Download URL wellmet-0.9.7.1.tar.gz
Size 223.5 kB
Tags Source
SHA-256 checksum
How to use checksums
471f244498fc8a43d142c2d81135f5dacf9a10bd4fd2c13c5cb28d2ccb9c62f0
BLAKE2b-256 checksum
How to use checksums
16c7191109beccbc48d3f8ed6065caf0ab948cb29b652d1d76b0897291d6e12f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.16

Release files / wellmet-0.9.7.1-py3-none-any.whl

Download URL wellmet-0.9.7.1-py3-none-any.whl
Size 248.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d31ee7cdf6958b8f55c4a61897c602c70182c609bb92b6c0dac92211e8707ee
BLAKE2b-256 checksum
How to use checksums
75d0afa472acf317ece94c3d923eb10c54ee90ef99e1193ab321161ae8c07aa3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.16

Security for wellmet 0.9.7.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page