Sensitivity Analysis Library in Python (Numpy). Contains Sobol, Morris, Fractional Factorial and FAST methods.

Overview

Sensitivity Analysis Library (SALib)

Python implementations of commonly used sensitivity analysis methods. Useful in systems modeling to calculate the effects of model inputs or exogenous factors on outputs of interest.

Documentation: ReadTheDocs

Requirements: NumPy, SciPy, matplotlib, pandas, Python 3 (from SALib v1.2 onwards SALib does not officially support Python 2)

Installation: pip install SALib or python setup.py install or conda install SALib

Build Status: Build Status Test Coverage: Coverage Status

SALib Paper: status

Herman, J., Usher, W., (2017), SALib: An open-source Python library for Sensitivity Analysis, Journal of Open Source Software, 2(9), 97, doi:10.21105/joss.00097

Methods included:

Contributing: see here

Quick Start

from SALib.sample import saltelli
from SALib.analyze import sobol
from SALib.test_functions import Ishigami
import numpy as np

problem = {
  'num_vars': 3,
  'names': ['x1', 'x2', 'x3'],
  'bounds': [[-np.pi, np.pi]]*3
}

# Generate samples
param_values = saltelli.sample(problem, 1000)

# Run model (example)
Y = Ishigami.evaluate(param_values)

# Perform analysis
Si = sobol.analyze(problem, Y, print_to_console=True)
# Returns a dictionary with keys 'S1', 'S1_conf', 'ST', and 'ST_conf'
# (first and total-order indices with bootstrap confidence intervals)

It's also possible to specify the parameter bounds in a file with 3 columns:

# name lower_bound upper_bound
P1 0.0 1.0
P2 0.0 5.0
...etc.

Then the problem dictionary above can be created from the read_param_file function:

from SALib.util import read_param_file
problem = read_param_file('/path/to/file.txt')
# ... same as above

Lots of other options are included for parameter files, as well as a command-line interface. See the advanced readme.

Also check out the examples for a full description of options for each method.

License

Copyright (C) 2012-2019 Jon Herman, Will Usher, and others. Versions v0.5 and later are released under the MIT license.

Comments
  • Function to create Pandas friendly dictionary

    Function to create Pandas friendly dictionary

    Working example to address the functionality I requested in Issue #213 for the Sobol method

    Usage example:

    import pandas as pd
    from SALib.sample import saltelli
    from SALib.analyze import sobol
    from SALib.test_functions import Ishigami
    
    X = saltelli.sample(problem, 1000)
    Y = Ishigami.evaluate(X)
    Si = sobol.analyze(problem, Y, print_to_console=True)
    
    first, (idx, second) = sobol.Si_to_pandas_dict(Si, problem)
    first_Si = pd.DataFrame(first, index=problem['names'])
    second_Si = pd.DataFrame(second, index=idx)
    
    opened by ConnectedSystems 25
  • Negative value or values greater than one for delta index from delta method

    Negative value or values greater than one for delta index from delta method

    Hello, Sorry for coming with multiple questions. I am trying to test different methods for sensitivity. I study the sensitivity of max,mean,median and,equilibrium value of the model output. For median value of y2 and some others I got huge positive values and negative values. The values for main effect S1 are reasonable and comparable with sobol and RBD-Fast method. I tested with number of samples 1000,(15000 with resample_number=100,500) and 60000 and no improvement. According to Borgonovo 2007 article delta values should be between 0 and 1. Is there something wrong with my model or implementation of the method? The code

    import numpy as np
    from numpy import *
    from cmath import*
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    import scipy as scp
    from scipy.integrate import solve_ivp, odeint
    import SALib
    from SALib.sample import saltelli,morris,latin,ff,finite_diff
    from SALib.sample import morris
    from SALib.analyze import sobol,dgsm,rbd_fast,delta,ff,dgsm
    from SALib.analyze import morris
    from SALib.plotting.bar import plot as barplot
    from SALib.plotting.morris import *
    problem = {
        'num_vars': 11,
        'names': ['$\\beta_{1}$', '$\\beta_{2}$', '$\\epsilon_{1}$','$\\epsilon_{2}$','$g_{12}$','$\gamma_{12}$','$\omega_{11}$','$\omega_{22}$','$x_{0}$','${y_{1}}_{0}$','${y_{2}}_{0}$'],
        'bounds': [[200, 2500000],
                   [200, 2500000],
                   [0.01, 100],
                   [0.01, 100],
                   [0.04, 600],
                   [0.0002, 20],
                   [0.002, 100],
                   [0.002, 100],
                   [0.0002, 5.71428571],
                   [0.01, 2000000],
                   [0.01, 2000000]]
    }
    def dynamical_model_bacteria(t,X,beta1, beta2, epsilon1,epsilon2,g12,gamma12,omega11,omega22):    
        x, y1, y2 = X
        dxdt=x*(1-x-y1-y2)
        dy1dt=y1*(-epsilon1-omega11*y1-g12*y2+beta1*x)
        dy2dt=y2*(-epsilon2+gamma12*y1-omega22*y2+beta2*x)
        return dxdt,dy1dt,dy2dt
    def run_model(param_values):
        loop_n = param_values.shape[0]
        x_res = np.empty((loop_n, 4))
        y1_res = np.empty((loop_n, 4))
        y2_res = np.empty((loop_n, 4))
        
        t = [0, 60]
        t_eval_pts = np.linspace(0, 60, 8000)
        for i in range(loop_n):
            beta1, beta2, epsilon1,epsilon2,g12,gamma12,omega11,omega22,x0,y10,y20,*_ = param_values[i]
    
            X0 = [x0, y10, y20]
            arg_list = (beta1, beta2, epsilon1,epsilon2,g12,gamma12,omega11,omega22)
            sol = solve_ivp(dynamical_model_bacteria, t, X0, args=arg_list, t_eval=t_eval_pts,method='Radau')
    
            x, y1, y2 = sol.y
            x_res[i, :] = amax(x), mean(x), median(x), x[-1]
            y1_res[i, :] = amax(y1), mean(y1), median(y1), y1[-1]
            y2_res[i, :] = amax(y2), mean(y2), median(y2), y2[-1]
        return x_res, y1_res, y2_res
    
    param_values4 =SALib.sample.latin.sample(problem, 15000)
    %%time
    xDelta, y1Delta, y2Delta=run_model(param_values4)
    %%time
      
    DELTA=[i for i in xDelta.T] + [i for i in y1Delta.T] + [i for i in y2Delta.T]
    RESULTSDelta=[]
    for i, j in zip(DELTA, range(12)):
        Si_Delta= delta.analyze(problem,param_values4, i,num_resamples=500)
        Sidf_Delta= Si_Delta.to_df()
        Sidf_Delta.sort_values(by=['S1'], inplace=True, ascending=False)
        #Renaming the columns names to put them in math notation
        Sidf_DeltaNew=Sidf_Delta.rename(columns={'delta':'$\delta$','delta_conf':'$\delta_{conf}$','S1': '$S_{1}$','S1_conf':'${S_{1}}_{conf}$'})
        RESULTSDelta.append( Sidf_DeltaNew)
        barplot( Sidf_Delta)
        #plt.xlim([-1, 100])
        #plt.ylim([-0.5, 0.7])
        plt.title(TITLE[j] )
        #plt.gcf().set_size_inches(20, 4)
    

    A9258E3B-C998-47F7-9ACF-3B904C7C3D31 8537F07C-7150-4B6E-9723-47D5FB8E7456

    question_interpretation 
    opened by FO2020 24
  • Singular matrix issue when computing delta indeces

    Singular matrix issue when computing delta indeces

    Hi there,

    I noted that there are two closed incidents on this topic (#152 and #1510), as well a recent one (#240). But I believe that the issue I'm having is different to those that were reported.

    I am using Python 3.6.5 on a windows machine and SALib 1.3.3

    I conducted a series of tests using four input parameters to derive a single output. There are four scenarios, so I want to evaluate Delta indices in each scenario for different bootstrap levels by using the following code (note that I consider "resamples" option in Delta index as the number of samples to be taken in bootstrap procedure):

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ problem= { 'num_vars': 5, 'names': ['input_1', 'input_2', 'input_3', 'input_4', 'input_5'], 'bounds': [[min_input_1, max_input_1], [min_input_2, max_input_2], [min_input_3, max_input_3], [min_input_4, max_input_4], [min_input_5, max_input_5]], }

    Si= []

    filename= 'delta_moment_3d_orig_n_noise_class_' figure_name= 'delta_moment_3d_orig_n_noise_class_'

    label= 'Free noise wedge model'

    attribute_names= ['input_1', 'input_2', 'input_3', 'input_4', 'input_5']

    bootstrap= 0

    print("Perform Delta-Moment Independent Test\n")

    for count in range(0,len(classification_names)): # Test different scenarios filename= filename + np.str(count + 1) + '.csv' figure_name= figure_name + np.str(count + 1)

    output_file= open(path + filename, 'w')
    
    for iters in range(0,4): # Test different bootstrap levels
        bootstrap += 200
    
        print("using a bootstrap sampling of {} at iteration {} and count {}\n".format(bootstrap, iters, count))
    
        Si= delta.analyze(problem, attribute_data, classification_data[:,count], num_resamples= bootstrap, print_to_console= True)
    
        if (bootstrap == 200):
            field_names= []
        
            for key in Si:
                field_names.append(str(key))
            
            output_file.write("%s %s %s %s %s %s %s %s %s %s %s\n" %("attribute name", ',', field_names[0], ',',
                                                                     field_names[1], ',', field_names[2], ',', field_names[3], ',',
                                                                     "bootstrap level"))
    
        delta_r= Si.get('delta')
        delta_conf_r= Si.get('delta_conf')
        sobol_r= Si.get('S1')
        sobol_conf_r= Si.get('S1_conf')
    
        for i in range(0, len(delta_r)):
            output_file.write("%s %s %2.5f %s %2.5f %s %2.5f %s %2.5f %s %s\n" %(attribute_names[i], ',', delta_r[i], 
                                                                             ',', delta_conf_r[i], ',', sobol_r[i], ',',
                                                                             sobol_conf_r[i], ',', str(bootstrap)))
        
        print("\n")
    
    output_file.close()
    
    SA= pd.read_csv(path + filename, delimiter= ',')
    plot_histograms(SA, label, figure_name)
    
    filename= 'delta_moment_3d_orig_n_noise_class_'
    figure_name= 'delta_moment_3d_orig_n_noise_class_'
    
    Si= []
    
    bootstrap= 0
    

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    So, I checked for bootstrap levels at 200, 400, 600, and 800. All input data are 1D arrays of length 20099 samples. When the script reaches the second scenario for a bootstrap of 600, the following error message occurs:

    using a bootstrap sampling of 600 at iteration 2 and count 2

    Parameter delta delta_conf S1 S1_conf Input_1 0.313084 0.004628 0.081716 0.010388 Input_2 0.436194 0.008330 0.371258 0.012746

    Traceback (most recent call last): File "C:\Temp\Python\Python36\lib\site-packages\SALib\analyze\delta.py", line 75, in analyze Y, Ygrid, X[:, i], m, num_resamples, conf_level) File "C:\Temp\Python\Python36\lib\site-packages\SALib\analyze\delta.py", line 115, in bias_reduced_delta d[i] = calc_delta(Y[r], Ygrid, X[r], m) File "C:\Temp\Python\Python36\lib\site-packages\SALib\analyze\delta.py", line 101, in calc_delta fyc = gaussian_kde(Y[ix], bw_method='silverman')(Ygrid) File "C:\Temp\Python\Python36\lib\site-packages\scipy\stats\kde.py", line 172, in init self.set_bandwidth(bw_method=bw_method) File "C:\Temp\Python\Python36\lib\site-packages\scipy\stats\kde.py", line 499, in set_bandwidth self._compute_covariance() File "C:\Temp\Python\Python36\lib\site-packages\scipy\stats\kde.py", line 510, in _compute_covariance self._data_inv_cov = linalg.inv(self._data_covariance) File "C:\Temp\Python\Python36\lib\site-packages\scipy\linalg\basic.py", line 975, in inv raise LinAlgError("singular matrix") numpy.linalg.linalg.LinAlgError: singular matrix

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "Run_sa_3d_results.py", line 202, in Si= delta.analyze(problem, attribute_data, classification_data[:,count], num_resamples= bootstrap, print_to_console= True) File "C:\Temp\Python\Python36\lib\site-packages\SALib\analyze\delta.py", line 85, in analyze raise np.linalg.LinAlgError(msg) numpy.linalg.linalg.LinAlgError: Singular matrix detected Sample size of 20099 may be too small

    For some reason, Delta function considers that there not enough samples. However, the script was able to perform 10 computations.

    In the attached file, you will find the input data: A) Model input: input_1, input_2, input_3, input_4, input_5 B) Model output: output_1, output_2, output_3, output_4 C) Python script

    Many thanks for your help!

    Ivan

    Delta_indices.zip

    opened by ivan-marroquin 22
  • Odd Sobol first order indices

    Odd Sobol first order indices

    Hello, I compare some tools and methods to calculate Sobol indices and I got some strange values for first order indices with SALib.

    With Polynomial Chaos (openturns) and EASI algorithm, I have the following results for S1's:

        Polynomial Chaos    EASI
    x1  0.48                0.48
    x2  0.25                0.25
    x3  0.10                0.11
    x4  0.04                0.05
    x5  0.04                0.04
    x6  0.03                0.03
    x7  0.02                0.02
    x8  0.02                0.02
    x9  0.02                0.02
    x10 0.01                0.01
    

    As you can see, they converge to the same values. And 500 simulations with a Quasi Monte-Carlo sample is enough to reach these values (I tried up to 2000 simulations and they remain the same). Also, the ST's I got with Polynomial Chaos are similar to the S1's (EASI doesn't include this calculation).

    With Salib I use saltelli.sample to generate 5000 samples and I have the following results:

        S1      S1_conf  ST  ST_conf
    x1  0.92    4.99    0.53    0.06
    x2  0.29    2.37    0.16    0.02
    x3  0.22    1.70    0.11    0.01
    x4  0.25    1.24    0.05    0.01
    x5  0.04    1.14    0.04    0.01
    x6  0.03    0.98    0.03    0.00
    x7  -0.09   1.01    0.02    0.00
    x8  0.05    0.98    0.02    0.00
    x9  0.06    0.83    0.02    0.00
    x10 0.02    0.82    0.01    0.00
    

    Except for the second parameter, the ST's are really close to what I got with other methods. However, the S1's don't look good and the confidence intervals are terrible. I don't understand why SALib is able to calculate ST's but not S1's in my case, specially if they have similar values. I could increase the sample size but 5000 took 80 hours... Any thoughts on this issue ?

    question 
    opened by Anto-F 21
  • Extra methods to be included in this package in the future

    Extra methods to be included in this package in the future

    Hello everyone,

    I have used this package with great pleasure so far. In my internship I am going to implement the Morris method on a complex model, but while reading the scientific literature I found some methods that, in my opinion, would make a nice addition to this package. I am not sure if this is the right place to post this; so if I am doing this incorrectly, sorry in advance. I am not a very skilled coder, therefore I mention these methods here. I hope my lazy attitude does not bother you! ;-)

    --Radial Sampling-- This is nothing else than an iterated One Factor At A Time approach. Starting from a random point in the hyperspace, one step in turn is taken for each factor. This procedure is iterated. So: instead of using trajectories like Morris' method, "stars" are created in the input hyperspace. Campolongo et al. (2011) used this method with greater success than Morris' method and the same amount of runs. http://www.sciencedirect.com/science/article/pii/S0010465510005321

    --Morris method with sampling strategy of Ruano et al. (2012)-- As the "Brute Force Approach" of Campolongo et al. (2007) introduces an combinatorial optimization problem, a sampling strategy which looks at combinations locally instead of globally might be a nice addition to the Morris function in this package. This makes it doable to create more optimized trajectories in exchange for a better coverage of the input space. Still, this is better than purely random sampling. Ruano et al. (2012) present such an approach. I myself find it hard to understand the thoughts behind each step in their algorithm, but it is presented in such a way that it could be implemented in code. http://www.sciencedirect.com/science/article/pii/S1364815212000904 UPDATE: I have made an implementation of this method for SALib and pulled it as a request (or whatever the correct grammar for a "pull request" is)

    --Latin Hypercube Sampling (LHS) of starting points in Morris method-- Using LHS for the starting points was originally proposed by Morris to enhance the spread in the output space. This is also an alternative to the "brute force approach".

    I hope these methods could be added to the "Methods to consider adding" list! If you cannot access the papers, send me a message.

    enhancement 
    opened by JoerivanEngelen 20
  • Morris class, grouped factors, more tests

    Morris class, grouped factors, more tests

    • Added groups functionality to Morris (#24) - 06ed41a
    • Wrapped all the different Morris sampling methods in a class called Morris. - cb12326
    • Added a template class called Sample from which all sampling methods can inherit shared methods (such as reading a parameter file, saving the sample to disk)
    • Added some more tests (for test_functions) - f8c1727
    • Added read_group_file to utils. At present, you need to pass a k-by-g matrix, where each row denotes membership of group in column g. - 5cbd77f

    Use

    Generating a sample is still easy from within python:

    sample = Morris(paramfile, samples, levels, grid_jump, group, k_optimal)
    # Save the data to disk
    sample.save_data(output_filename, delimiter, precision)
    # Or get the sample as a numpy array
    sample.get_input_sample_scaled()
    # Or
    sample.get_input_sample_unscaled()
    

    And just as easy on the command line (and unchanged from previous versions):

    python -m SALib.sample.morris -n=100 -p=SALib/tests/test_params.txt --output=foo.txt -s=123 -k=1 --group=groups.txt
    

    Note the arguments -k and --group are optional. Including them activates the respective method of sampling.

    A group file can be csv, tab-delimted or whitespace delimited and should be of the format"

    Factor1 1 0
    Factor2 0 1
    Factor3 0 1
    

    to create two groups, of which Factor1 is a member of group 1 (column 1), and Factors 2 and 3 are members of group 2 (column 2).

    Utils

    • Added tests for read file
    • Added test and new procedure to read in group files
    • Amended the read file procedure so that it sniffs for the type of csv file (python standard library) (#21).

    Admin

    • Excluded the tests folder from coverage
    • Added other exclusions of irrelevant code to .coveragc config file

    Remaining work

    • The code for the methods of the different Morris sampling methods still resides in each of the original python files. These could be brought into the Morris class.
    • There are opportunities for sharing more code between Morris groups and Morris. I have used numpy matrix calculations for computing Morris groups (which uses an only slightly different method to straight-up Morris), and no loops. I've also chunked the code a fair bit to assist with testing.
    • Could add checks to ensure that the group file and parameter file factor names match, as well as sense checking for numbers of groups versus number of parameters.
    opened by willu47 20
  • Migrate to hatchling and migrate CI to GitHub actions

    Migrate to hatchling and migrate CI to GitHub actions

    Closes #524 and closes #355

    This does 2 things:

    • Use Hatchling and doing so removes all extra files which are not needed anymore.
    • Migrate from Travis to GitHub Actions: 3 actions are used for linting, testing and deploying.

    #519 and #522 would need to be slightly adapted depending on which PR gets in first.

    Also, PyPi secrets would need to be added to the repo for deploying.

    I simplified the version handling as well. I don't think there is a need to complicate this more. Also note that this is more or less for legacy use as the new way to check that is to rely on package's metadata.

    clean up/maintenance 
    opened by tupui 19
  • Document release process

    Document release process

    1. Write down list of steps to take when preparing for a new release
    2. Create an Issue Template which can be used to keep track of these steps for each release (e.g. a new issue using the template is opened when preparing a release, and closed upon release).
    enhancement documentation 
    opened by willu47 17
  • Finding local maximum distance (after Ruano et al. 2012) as an alternative to the brute force approach.

    Finding local maximum distance (after Ruano et al. 2012) as an alternative to the brute force approach.

    I added a way to find the local maximum distance after Ruano et al. 2012, as alternative to the brute force approach of Campolongo et al. It speeds up the process for especially more trajectories, which can be read in their paper:

    "An improved sampling strategy based on trajectory design for application of the Morris method to systems with many input factors". (2012) Environmental Modelling & Software 37

    It is now possible to optimize for more than 8 trajectories, without the use of commercial software (Gurobi). The method does not necessarily always find the largest global distance between trajectories, but it still does a good job and is preferable over not doing any optimization.

    I am looking forward to your feedback on my coding.

    opened by JoerivanEngelen 17
  • saltelli.sample returns several times the exact same samples

    saltelli.sample returns several times the exact same samples

    I recently upgrade to SAlib 1.4.0.2 and witnessed a behaviour that looks incorrect to me. When using saltelli.sample, most of the returned samples are identical, which would mean that the model is evaluated several times with the exact same input variables. Is this really how it should be?

    Code from the SAlib example:

    from SALib.sample import saltelli
    from SALib.analyze import sobol
    
    problem = {
        'num_vars': 3,
        'names': ['x1', 'x2', 'x3'],
        'bounds': [[-3.14159265359, 3.14159265359],
                   [-3.14159265359, 3.14159265359],
                   [-3.14159265359, 3.14159265359]]
    }
    
    x = saltelli.sample(problem, 2)
    

    Output:

    x = array([[-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [-3.14159265, -3.14159265, -3.14159265],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.        ]])
    
    enhancement documentation in progress 
    opened by chahank 15
  • New method rbd fast

    New method rbd fast

    Hello !

    I have implemented the RBD-FAST algorithm following the SALib contributor guide. I have updated analyzer, examples, docs, examples and tests. The CLI is working. We use the LHS sampler, already implemented in SALib.

    I also fixed a little mistake on the latin sampler CLI : the args were parsed before the nsampler arg addition.

    I only did the programming work here : many thanks to J. Goffart and M. Rabouille for the matlab implementation and S. Juricic for a first python implementation.

    Nicolas Cellier

    opened by celliern 15
  • Expand documentation for Sobol' analysis

    Expand documentation for Sobol' analysis

    Documentation with regard to usage and interpretation of Sobol' analysis should be expanded.

    See issue raised in #549 as an example of what users may face.

    Although this is a general issue across the SALib package, lets start with Sobol'.

    opened by ConnectedSystems 0
  • Is it possible to scale outputs of Morris analysis?

    Is it possible to scale outputs of Morris analysis?

    I've also posted a more general version of this question on Cross Validated (stats.stackoverflow), here Is it possible in SALib to scale the outputs (mu, mu_star, sigma) of SALib.analyze.morris, so that the sensitivity of different quantities of interest can be compared? I couldn't find anything about this in the docs, is there a way to achieve this?

    opened by sitadrost 2
  • Large number of Sphinx warnings/errors when building documentation

    Large number of Sphinx warnings/errors when building documentation

    Okay, I reinstalled my conda environment, built the docs locally and had a brief scan through. The new theme looks great, and nice that we're joining the look-and-feel of the pydata stack.

    conda env create -f environment.yml
    conda activate salib
    cd docs
    make html
    open _build/html/index.html
    

    Sphinx itself spits out a lot of warnings and a few errors which we should slowly look into:

    Running Sphinx v5.1.1
    Creating file docs/api/SALib.rst.
    Creating file docs/api/SALib.analyze.rst.
    Creating file docs/api/SALib.plotting.rst.
    Creating file docs/api/SALib.sample.rst.
    Creating file docs/api/SALib.sample.morris.rst.
    Creating file docs/api/SALib.scripts.rst.
    Creating file docs/api/SALib.test_functions.rst.
    Creating file docs/api/SALib.util.rst.
    Creating file docs/api/modules.rst.
    loading pickled environment... failed
    failed: No module named 'myst_parser.main'
    loading intersphinx inventory from https://www.sphinx-doc.org/en/master/objects.inv...
    loading intersphinx inventory from https://docs.python.org/3.10/objects.inv...
    loading intersphinx inventory from https://matplotlib.org/stable/objects.inv...
    loading intersphinx inventory from https://numpy.org/doc/stable/objects.inv...
    loading intersphinx inventory from https://scikit-learn.org/stable/objects.inv...
    loading intersphinx inventory from https://pandas.pydata.org/pandas-docs/stable/objects.inv...
    loading intersphinx inventory from https://docs.scipy.org/doc/scipy/objects.inv...
    loading intersphinx inventory from https://pyscaffold.org/en/stable/objects.inv...
    [autosummary] generating autosummary for: advanced.rst, api.rst, api/SALib.analyze.rst, api/SALib.plotting.rst, api/SALib.rst, api/SALib.sample.morris.rst, api/SALib.sample.rst, api/SALib.scripts.rst, api/SALib.test_functions.rst, api/SALib.util.rst, api/modules.rst, authors.rst, basics.rst, changelog.md, citations.rst, getting-started.rst, index.rst, license.rst
    myst v0.18.0: MdParserConfig(commonmark_only=False, gfm_only=False, enable_extensions=[], disable_syntax=[], all_links_external=False, url_schemes=('http', 'https', 'mailto', 'ftp'), ref_domains=None, highlight_code_blocks=True, number_code_blocks=[], title_to_header=False, heading_anchors=None, heading_slug_func=None, footnote_transition=True, words_per_minute=200, sub_delimiters=('{', '}'), linkify_fuzzy_links=True, dmath_allow_labels=True, dmath_allow_space=True, dmath_allow_digits=True, dmath_double_inline=False, update_mathjax=True, mathjax_classes='tex2jax_process|mathjax_process|math|output_area')
    building [mo]: targets for 0 po files that are out of date
    building [html]: targets for 18 source files that are out of date
    updating environment: [new config] 18 added, 0 changed, 0 removed
    reading sources... [100%] license                                                                             
    docs/advanced.rst:43: ERROR: Unexpected indentation.
    docs/../src/SALib/analyze/fast.py:docstring of SALib.analyze.fast.analyze:27: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/fast.py:docstring of SALib.analyze.fast.analyze:33: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:16: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:22: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:29: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:34: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:38: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:71: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:76: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:78: ERROR: Unexpected indentation.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:79: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:82: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:84: ERROR: Unexpected indentation.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:86: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:60: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:63: WARNING: Definition list ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:66: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:69: WARNING: Definition list ends without a blank line; unexpected unindent.
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:49: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:55: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:61: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:66: WARNING: Duplicate explicit target name: "4".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:37: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:41: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:44: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:16: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:22: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/delta.py:docstring of SALib.analyze.delta.analyze:28: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/delta.py:docstring of SALib.analyze.delta.analyze:32: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/dgsm.py:docstring of SALib.analyze.dgsm.analyze:31: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/ff.py:docstring of SALib.sample.ff.sample:27: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/ff.py:docstring of SALib.analyze.ff.analyze:33: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:56: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:62: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:67: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:73: WARNING: Duplicate explicit target name: "4".
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:11: ERROR: Unexpected indentation.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:12: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:68: ERROR: Unexpected indentation.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:75: WARNING: Duplicate explicit target name: "1".
    src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:73: WARNING: Footnote [5] is not referenced.
    docs/../src/SALib/util/problem.py:docstring of SALib.util.problem.ProblemSpec.evaluate_distributed:5: ERROR: Unexpected indentation.
    docs/../src/SALib/util/problem.py:docstring of SALib.util.problem.ProblemSpec.evaluate_distributed:6: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/dgsm.py:docstring of SALib.analyze.dgsm.analyze:31: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/fast.py:docstring of SALib.analyze.fast.analyze:27: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/fast.py:docstring of SALib.analyze.fast.analyze:33: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/ff.py:docstring of SALib.analyze.ff.analyze:33: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:11: ERROR: Unexpected indentation.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:12: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:68: ERROR: Unexpected indentation.
    docs/../src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:75: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:60: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:63: WARNING: Definition list ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:66: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/morris.py:docstring of SALib.analyze.morris.analyze:69: WARNING: Definition list ends without a blank line; unexpected unindent.
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:56: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:62: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/pawn.py:docstring of SALib.analyze.pawn.analyze:67: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:29: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:34: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:38: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.analyze:43: WARNING: Duplicate explicit target name: "4".
    docs/../src/SALib/analyze/rbd_fast.py:docstring of SALib.analyze.rbd_fast.permute_outputs:5: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:37: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:41: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.analyze:44: WARNING: Duplicate explicit target name: "3".
    docs/../src/SALib/sample/ff.py:docstring of SALib.sample.ff.sample:27: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/finite_diff.py:docstring of SALib.sample.finite_diff.sample:21: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/finite_diff.py:docstring of SALib.sample.finite_diff.sample:27: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:16: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/latin.py:docstring of SALib.sample.latin.sample:22: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:49: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:55: WARNING: Duplicate explicit target name: "2".
    src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:61: WARNING: Footnote [3] is not referenced.
    src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:66: WARNING: Footnote [4] is not referenced.
    src/SALib/sample/saltelli.py:docstring of SALib.sample.saltelli.sample:73: WARNING: Footnote [5] is not referenced.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:78: ERROR: Unexpected indentation.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:79: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:84: ERROR: Unexpected indentation.
    docs/../src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:86: WARNING: Block quote ends without a blank line; unexpected unindent.
    src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:71: WARNING: Footnote [1] is not referenced.
    src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:76: WARNING: Footnote [2] is not referenced.
    src/SALib/sample/morris/morris.py:docstring of SALib.sample.morris.morris.sample:82: WARNING: Footnote [3] is not referenced.
    docs/../src/SALib/test_functions/Sobol_G.py:docstring of SALib.test_functions.Sobol_G.evaluate:5: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.evaluate_lake:5: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.evaluate_lake:7: ERROR: Unexpected indentation.
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.evaluate_lake:8: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.evaluate_lake:11: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.lake_problem:9: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.lake_problem:11: ERROR: Unexpected indentation.
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.lake_problem:12: WARNING: Block quote ends without a blank line; unexpected unindent.
    docs/../src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.lake_problem:15: WARNING: Duplicate explicit target name: "2".
    docs/../src/SALib/test_functions/linear_model_1.py:docstring of SALib.test_functions.linear_model_1.evaluate:10: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/test_functions/linear_model_2.py:docstring of SALib.test_functions.linear_model_2.evaluate:10: WARNING: Duplicate explicit target name: "1".
    docs/../src/SALib/test_functions/oakley2004.py:docstring of SALib.test_functions.oakley2004.evaluate:6: WARNING: Duplicate explicit target name: "1".
    src/SALib/test_functions/lake_problem.py:docstring of SALib.test_functions.lake_problem.lake_problem:21: WARNING: Footnote [3] is not referenced.
    docs/../src/SALib/util/problem.py:docstring of SALib.util.problem.ProblemSpec.evaluate_distributed:5: ERROR: Unexpected indentation.
    docs/../src/SALib/util/problem.py:docstring of SALib.util.problem.ProblemSpec.evaluate_distributed:6: WARNING: Block quote ends without a blank line; unexpected unindent.
    looking for now-outdated files... none found
    pickling environment... done
    checking consistency... done
    preparing documents... done
    writing output... [100%] license                                                                              
    src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:: WARNING: more than one target found for cross-reference 'ResultDict': SALib.util.results.ResultDict, SALib.util.ResultDict
    src/SALib/analyze/hdmr.py:docstring of SALib.analyze.hdmr.analyze:: WARNING: more than one target found for cross-reference 'ResultDict': SALib.util.results.ResultDict, SALib.util.ResultDict
    src/SALib/analyze/sobol.py:docstring of SALib.analyze.sobol.Si_to_pandas_dict:: WARNING: more than one target found for cross-reference 'ResultDict': SALib.util.results.ResultDict, SALib.util.ResultDict
    generating indices... genindex py-modindex done
    highlighting module code... [100%] SALib.util.util_funcs                                                      
    writing additional pages... search done
    copying images... [100%] assets/example_parabola.svg                                                          
    copying static files... done
    copying extra files... done
    dumping search index in English (code: en)... done
    dumping object inventory... done
    build succeeded, 102 warnings.
    
    The HTML pages are in _build/html.
    

    Originally posted by @willu47 in https://github.com/SALib/SALib/issues/523#issuecomment-1240532941

    opened by willu47 0
  • Logo for SALib

    Logo for SALib

    Hi,

    I was wondering how do you guys think of having a logo for SALib project. It might be good to put it on the readthedocs page. I found Adobe's online platform that allows you to make logo for free. Here is the link to that page: https://www.adobe.com/express/create/logo

    I created one logo on this website. What do you guys think? Do you have any input on the design? I thought having a pie chart on the logo would be nice because of apportioning model outputs to the its inputs. I am leaving two samples here.

    opened by sahin-abdullah 10
Releases(v1.4.6.1)
  • v1.4.6.1(Oct 17, 2022)

    Quick release with fix to allow 0 skipping of sobol' sequence.

    What's Changed

    • Fix skip_values integer check by @tupui in https://github.com/SALib/SALib/pull/542

    Full Changelog: https://github.com/SALib/SALib/compare/v1.4.6...v1.4.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.4.6(Oct 2, 2022)

    Highlights

    • Performance improvements to HDMR (~50% decrease in runtime for the Ishigami function)
    • New Sobol' sampler (interfaced with SciPy) which supports sequence scrambling
    • New heatmap visualization
    • Improvements to documentation for Morris, PAWN and HDMR methods.
    • New documentation website, thanks to @tupui and @sahin-abdullah

    What's Changed

    • Support additional positional arguments when using parallel evaluators/analyses by @ConnectedSystems in https://github.com/SALib/SALib/pull/473
    • Add Oakley 2004 test function (Resolve #379) by @ConnectedSystems in https://github.com/SALib/SALib/pull/474
    • Update example results in document by @ConnectedSystems in https://github.com/SALib/SALib/pull/477
    • Docs: correct plural. by @brenthuisman in https://github.com/SALib/SALib/pull/476
    • Improve listing of compatible sampling methods by @ConnectedSystems in https://github.com/SALib/SALib/pull/482
    • Updated Sobol' direction numbers by @ConnectedSystems in https://github.com/SALib/SALib/pull/491
    • Update hdmr.py by @idiomaticrefactoring in https://github.com/SALib/SALib/pull/496
    • Raise error when a single parameter/group is detected [OO-based only] by @ConnectedSystems in https://github.com/SALib/SALib/pull/484
    • Fix for #480 - eFAST analysis erroring by @ConnectedSystems in https://github.com/SALib/SALib/pull/481
    • add GitHub URL for PyPi by @andriyor in https://github.com/SALib/SALib/pull/502
    • Expanded Morris docs by @ConnectedSystems in https://github.com/SALib/SALib/pull/489
    • Expanded docs for the PAWN method by @ConnectedSystems in https://github.com/SALib/SALib/pull/490
    • Better Triangular Distribution by @BrandonSLockey in https://github.com/SALib/SALib/pull/509
    • Add missing parameters to docstrings by @schmitts in https://github.com/SALib/SALib/pull/434
    • Support for grouped parameters with the PAWN method by @ConnectedSystems in https://github.com/SALib/SALib/pull/512
    • Migrate to hatchling and migrate CI to GitHub actions by @tupui in https://github.com/SALib/SALib/pull/527
    • Make Pathos optional by @tupui in https://github.com/SALib/SALib/pull/522
    • Add Sobol' sampler from SciPy by @tupui in https://github.com/SALib/SALib/pull/519
    • Allow seed as CLI option by @ConnectedSystems in https://github.com/SALib/SALib/pull/530
    • Use pydata-sphinx-theme by @tupui in https://github.com/SALib/SALib/pull/523
    • Update version switcher by @tupui in https://github.com/SALib/SALib/pull/533
    • Sobol': Handle zero variance edge case by @ConnectedSystems in https://github.com/SALib/SALib/pull/505
    • Heatmap by @ConnectedSystems in https://github.com/SALib/SALib/pull/526
    • Handle DMIM zero variance case by @ConnectedSystems in https://github.com/SALib/SALib/pull/536
    • HDMR Performance improvements by @ConnectedSystems in https://github.com/SALib/SALib/pull/511
    • HDMR Docstring by @sahin-abdullah in https://github.com/SALib/SALib/pull/538
    • Triang dist bounds fix by @ConnectedSystems in https://github.com/SALib/SALib/pull/537
    • Pre-release documentation updates by @ConnectedSystems in https://github.com/SALib/SALib/pull/539

    New Contributors

    • @brenthuisman made their first contribution in https://github.com/SALib/SALib/pull/476
    • @idiomaticrefactoring made their first contribution in https://github.com/SALib/SALib/pull/496
    • @andriyor made their first contribution in https://github.com/SALib/SALib/pull/502
    • @BrandonSLockey made their first contribution in https://github.com/SALib/SALib/pull/509
    • @tupui made their first contribution in https://github.com/SALib/SALib/pull/527

    Full Changelog: https://github.com/SALib/SALib/compare/v1.4.5...v1.4.6

    Source code(tar.gz)
    Source code(zip)
  • v1.4.6-rc(Sep 24, 2022)

    v1.4.6 Release Candidate.

    A full release will be done if no issues are encountered.

    What's Changed

    • Support additional positional arguments when using parallel evaluators/analyses by @ConnectedSystems in https://github.com/SALib/SALib/pull/473
    • Add Oakley 2004 test function (Resolve #379) by @ConnectedSystems in https://github.com/SALib/SALib/pull/474
    • Update example results in document by @ConnectedSystems in https://github.com/SALib/SALib/pull/477
    • Docs: correct plural. by @brenthuisman in https://github.com/SALib/SALib/pull/476
    • Improve listing of compatible sampling methods by @ConnectedSystems in https://github.com/SALib/SALib/pull/482
    • Updated Sobol' direction numbers by @ConnectedSystems in https://github.com/SALib/SALib/pull/491
    • Update hdmr.py by @idiomaticrefactoring in https://github.com/SALib/SALib/pull/496
    • Raise error when a single parameter/group is detected [OO-based only] by @ConnectedSystems in https://github.com/SALib/SALib/pull/484
    • Fix for #480 - eFAST analysis erroring by @ConnectedSystems in https://github.com/SALib/SALib/pull/481
    • add GitHub URL for PyPi by @andriyor in https://github.com/SALib/SALib/pull/502
    • Expanded Morris docs by @ConnectedSystems in https://github.com/SALib/SALib/pull/489
    • Expanded docs for the PAWN method by @ConnectedSystems in https://github.com/SALib/SALib/pull/490
    • Better Triangular Distribution by @BrandonSLockey in https://github.com/SALib/SALib/pull/509
    • Add missing parameters to docstrings by @schmitts in https://github.com/SALib/SALib/pull/434
    • Support for grouped parameters with the PAWN method by @ConnectedSystems in https://github.com/SALib/SALib/pull/512
    • Migrate to hatchling and migrate CI to GitHub actions by @tupui in https://github.com/SALib/SALib/pull/527
    • Make Pathos optional by @tupui in https://github.com/SALib/SALib/pull/522
    • Add Sobol' sampler from SciPy by @tupui in https://github.com/SALib/SALib/pull/519
    • Allow seed as CLI option by @ConnectedSystems in https://github.com/SALib/SALib/pull/530
    • Use pydata-sphinx-theme by @tupui in https://github.com/SALib/SALib/pull/523
    • Update version switcher by @tupui in https://github.com/SALib/SALib/pull/533
    • Sobol': Handle zero variance edge case by @ConnectedSystems in https://github.com/SALib/SALib/pull/505
    • Heatmap by @ConnectedSystems in https://github.com/SALib/SALib/pull/526
    • Handle DMIM zero variance case by @ConnectedSystems in https://github.com/SALib/SALib/pull/536
    • HDMR Performance improvements by @ConnectedSystems in https://github.com/SALib/SALib/pull/511
    • HDMR Docstring by @sahin-abdullah in https://github.com/SALib/SALib/pull/538
    • Triang dist bounds fix by @ConnectedSystems in https://github.com/SALib/SALib/pull/537

    New Contributors

    • @brenthuisman made their first contribution in https://github.com/SALib/SALib/pull/476
    • @idiomaticrefactoring made their first contribution in https://github.com/SALib/SALib/pull/496
    • @andriyor made their first contribution in https://github.com/SALib/SALib/pull/502
    • @BrandonSLockey made their first contribution in https://github.com/SALib/SALib/pull/509
    • @tupui made their first contribution in https://github.com/SALib/SALib/pull/527

    Full Changelog: https://github.com/SALib/SALib/compare/v1.4.5...v1.4.6-rc

    Source code(tar.gz)
    Source code(zip)
  • v1.4.6-beta.1(Jun 22, 2022)

    Second beta release of v1.4.6

    What's Changed

    • Expanded Morris docs by @ConnectedSystems in https://github.com/SALib/SALib/pull/489
    • Expanded docs for the PAWN method by @ConnectedSystems in https://github.com/SALib/SALib/pull/490
    • Better Triangular Distribution by @BrandonSLockey in https://github.com/SALib/SALib/pull/509

    New Contributors

    • @BrandonSLockey made their first contribution in https://github.com/SALib/SALib/pull/509

    Full Changelog: https://github.com/SALib/SALib/compare/v1.4.6-beta.0...v1.4.6-beta.1

    Source code(tar.gz)
    Source code(zip)
  • v1.4.6-beta.0(Feb 6, 2022)

    What's Changed

    • Support additional positional arguments when using parallel evaluators/analyses by @ConnectedSystems in https://github.com/SALib/SALib/pull/473
    • Add Oakley 2004 test function (Resolve #379) by @ConnectedSystems in https://github.com/SALib/SALib/pull/474
    • Update example results in document by @ConnectedSystems in https://github.com/SALib/SALib/pull/477
    • Docs: correct plural. by @brenthuisman in https://github.com/SALib/SALib/pull/476
    • Improve listing of compatible sampling methods by @ConnectedSystems in https://github.com/SALib/SALib/pull/482
    • Updated Sobol' direction numbers by @ConnectedSystems with help from @Xifus in https://github.com/SALib/SALib/pull/491
    • Update hdmr.py by @zjzh in https://github.com/SALib/SALib/pull/496
    • Raise error when a single parameter/group is detected [OO-based only] by @ConnectedSystems in https://github.com/SALib/SALib/pull/484
    • Fix for #480 - eFAST analysis erroring by @ConnectedSystems in https://github.com/SALib/SALib/pull/481

    New Contributors

    • @brenthuisman made their first contribution in https://github.com/SALib/SALib/pull/476
    • @zjzh made their first contribution in https://github.com/SALib/SALib/pull/496

    Full Changelog: https://github.com/SALib/SALib/compare/v1.4.5...v1.4.6-beta.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.5(Sep 4, 2021)

    • Adjusted Saltelli sampling to follow recommendation of Owen (2020) (http://arxiv.org/abs/2008.08051; https://github.com/scipy/scipy/pull/10844#issuecomment-672186615)
    • Initial support for parallel analysis
    • Updated Sobol' G-function analytic results (PR #464, Issues #335 #461)
    • Sobol' analysis: Optional storage of intermediate resample results to allow analysis of variation (PR #462)

    Documentation

    • Updated Salteli sampling examples to use powers of 2 following recommendations
    • Added citations.cff file

    Development

    • Upgrade PyScaffold to v4
    • Replaced recommonmark with MyST (PR #466)
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0.2(Jul 1, 2021)

  • v1.4.0.1(Jun 29, 2021)

  • v1.4.0(Apr 21, 2021)

    v1.4.0 Release

    Shortlist of changes since v1.3.x

    Added

    • High Dimensional Model Representation (HDMR) method (PR #275)
    • PAWN method (PR #415)
    • Support for sampling/analysis method chaining (PR #339)
    • Support for truncated normal distribution (PR #383)
    • Confidence Interval estimation for FAST-based methods (PR #375)
    • Initial support for parallel model evaluation

    Documentation

    • Defining non-uniform sampling now explicitly documented
    • Many general documentation improvements
    • Added FAQ

    Development

    • Generalized support for non-uniform sampling methods (PR #346)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.13(Apr 21, 2021)

    • Many documentation improvements
    • Explicitly mention extended FAST in documentation
    • Saltelli sampling: Warnings displayed when selected samples do not meet requirements (PR #416).
    • Conversion to DataFrame when groups are defined with Sobol' results (PR #413 and Issue #387)
    • Group sampling and analysis enabled for Sobol' and morris
    • Enhanced DataFrame support for groups
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0-beta.0(Nov 19, 2020)

  • v1.3.12(Nov 12, 2020)

  • v1.4.0.dev3(Oct 24, 2020)

  • v1.4.0.dev2(Oct 24, 2020)

    • Improved documentation
    • Continued improvements to method chaining approach
    • HDMR method (thanks to @sahin-abdullah)
    • Better plotting support
    • Confidence interval estimation for FAST and RBD-FAST
    Source code(tar.gz)
    Source code(zip)
  • v1.3.12.dev0(Sep 30, 2020)

    • HDMR method
    • New ProblemSpec class
    • Method chaining approach
    • Better plotting support
    • Unified print_to_console output (with the exception of HDMR results)
    • Improved documentation
    • Initial FAQ added
    Source code(tar.gz)
    Source code(zip)
  • v1.3.8(Sep 2, 2019)

  • v1.3.7(Jun 8, 2019)

  • v1.3.4(May 8, 2019)

  • v1.2(Nov 25, 2018)

    Major changes:

    • Consolidated command-line interface (refer to new scripts in examples/ directory)
    • Ability to convert results to pandas dataframe (thanks to @ConnectedSystems for these updates)

    In addition to several small bugfixes.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Aug 30, 2017)

    SALib Version 1.1.0

    New Features

    • Refactored Method of Morris so the Ruano et al. local approach is default

    Bug Fixes

    • Inputs to morris.analyze are provided as floats
    • Removed calls to standard random library as inconsistent between Python 2 & 3
    • First row in Sobol sequences should be zero, not empty

    Documentation

    • Added a Code of Conduct
    • Added DAETools, BCMD and others to citations - thanks for using SALib!
    • Removed misleading keyword arguments in docs and readme examples
    • Updated documentation for Method of Morris following refactor
    • Improved existing documentation where lacking e.g. for fractional factorial method

    Development Features

    • Implemented automatic deployment to PyPi
    • Fixed a bug preventing automatic deployment to PyPi upon tagging a branch
    • Removed postgres from travis config
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Jan 8, 2017)

  • v1.0.0(Oct 11, 2016)

    Release of our stable version of SALIB to coincide with an submission to JOSS:

    • Added a paper for submission to the Journal of Open-source Software
    • Updated back-end for documentation on read-the-docs
    • Updated the back-end for version introspection using PyScaffold, rather than versioneer
    • Updated the Travis-CI scripts
    • Moved the tests out of the SALib package and migrated to using pytest
    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Feb 24, 2016)

    This release adds improved sampling for the Morris method (thanks to @JoerivanEngelen ) and group sampling/analysis for the Sobol method (thanks to @calvinwhealton ).

    @calvinwhealton has also added non-uniform distributions to the Sobol sampling. This will be a baseline for adding this to the other methods in the future.

    Also includes several minor bug fixes.

    Source code(tar.gz)
    Source code(zip)
  • v0.7(Sep 23, 2015)

    • @dhadka has kindly contributed a wealth of documentation to the project, including doc strings in every module
    • We no longer test for numpy <1.8.0 and matplotlib < 1.4.3, and these requirements are implemented in a new setup script.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.3(Aug 29, 2015)

  • v0.6.2(Aug 25, 2015)

    This release does not contain any new functionality, but SALib now is citable using a Digital Object Identifier (DOI), which can be found in the readme.

    Some minor updates are included:

    • morris: sigma has been removed from the grouped-morris results and plots, replaced by mu_star_conf - a bootstrapped confidence interval. Mu_star_conf is not equivalent to sigma when used in the non-grouped method of morris, but its all we have when using groups.
    • some minor updates to the tests in the plotting module
    Source code(tar.gz)
    Source code(zip)
  • v0.6(Jul 9, 2015)

    • Set up to include and test plotting functions
    • Specific plotting functions for Morris
    • Fractional Factorial SA from Saltelli et al.
    • Repo transferred to SALib organization, update setup and URLs
    • Small bugfixes
    Source code(tar.gz)
    Source code(zip)
  • v0.5(May 8, 2015)

    • Vectorized bootstrap calculations for Morris and Sobol
    • Optional trajectory optimization with Gurobi, and tests for it
    • Several minor bugfixes

    Starting with v0.5, SALib is released under the MIT license.

    Source code(tar.gz)
    Source code(zip)
  • v0.4(Jan 30, 2015)

    Better Python API without requiring file read/write to the OS. Consistent functional API to sampling methods so that they return numpy matrices. Analysis methods now accept numpy matrices instead of data file names. This does not change the CLI at all, but makes it much easier to use from native Python.

    Also expanded tests for regression and the Sobol method.

    Source code(tar.gz)
    Source code(zip)
  • v0.3(Dec 29, 2014)

Owner
SALib
Sensitivity analysis library for systems modeling
SALib
NumPy and Pandas interface to Big Data

Blaze translates a subset of modified NumPy and Pandas-like syntax to databases and other computing systems. Blaze allows Python users a familiar inte

Blaze 3.1k Jan 5, 2023
Statistical Analysis 📈 focused on statistical analysis and exploration used on various data sets for personal and professional projects.

Statistical Analysis ?? This repository focuses on statistical analysis and the exploration used on various data sets for personal and professional pr

Andy Pham 1 Sep 3, 2022
An Aspiring Drop-In Replacement for NumPy at Scale

Legate NumPy is a Legate library that aims to provide a distributed and accelerated drop-in replacement for the NumPy API on top of the Legion runtime. Using Legate NumPy you do things like run the final example of the Python CFD course completely unmodified on 2048 A100 GPUs in a DGX SuperPOD and achieve good weak scaling.

Legate 502 Jan 3, 2023
A set of functions and analysis classes for solvation structure analysis

SolvationAnalysis The macroscopic behavior of a liquid is determined by its microscopic structure. For ionic systems, like batteries and many enzymes,

MDAnalysis 19 Nov 24, 2022
Pandas and Dask test helper methods with beautiful error messages.

beavis Pandas and Dask test helper methods with beautiful error messages. test helpers These test helper methods are meant to be used in test suites.

Matthew Powers 18 Nov 28, 2022
Larch: Applications and Python Library for Data Analysis of X-ray Absorption Spectroscopy (XAS, XANES, XAFS, EXAFS), X-ray Fluorescence (XRF) Spectroscopy and Imaging

Larch: Data Analysis Tools for X-ray Spectroscopy and More Documentation: http://xraypy.github.io/xraylarch Code: http://github.com/xraypy/xraylarch L

xraypy 95 Dec 13, 2022
PCAfold is an open-source Python library for generating, analyzing and improving low-dimensional manifolds obtained via Principal Component Analysis (PCA).

PCAfold is an open-source Python library for generating, analyzing and improving low-dimensional manifolds obtained via Principal Component Analysis (PCA).

Burn Research 4 Oct 13, 2022
HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets

HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets that can be described as multidimensional arrays o

HyperSpy 411 Dec 27, 2022
DaDRA (day-druh) is a Python library for Data-Driven Reachability Analysis.

DaDRA (day-druh) is a Python library for Data-Driven Reachability Analysis. The main goal of the package is to accelerate the process of computing estimates of forward reachable sets for nonlinear dynamical systems.

null 2 Nov 8, 2021
Spaghetti: an open-source Python library for the analysis of network-based spatial data

pysal/spaghetti SPAtial GrapHs: nETworks, Topology, & Inference Spaghetti is an open-source Python library for the analysis of network-based spatial d

Python Spatial Analysis Library 203 Jan 3, 2023
TE-dependent analysis (tedana) is a Python library for denoising multi-echo functional magnetic resonance imaging (fMRI) data

tedana: TE Dependent ANAlysis TE-dependent analysis (tedana) is a Python library for denoising multi-echo functional magnetic resonance imaging (fMRI)

null 136 Dec 22, 2022
🧪 Panel-Chemistry - exploratory data analysis and build powerful data and viz tools within the domain of Chemistry using Python and HoloViz Panel.

???? ??. The purpose of the panel-chemistry project is to make it really easy for you to do DATA ANALYSIS and build powerful DATA AND VIZ APPLICATIONS within the domain of Chemistry using using Python and HoloViz Panel.

Marc Skov Madsen 97 Dec 8, 2022
[CVPR2022] This repository contains code for the paper "Nested Collaborative Learning for Long-Tailed Visual Recognition", published at CVPR 2022

Nested Collaborative Learning for Long-Tailed Visual Recognition This repository is the official PyTorch implementation of the paper in CVPR 2022: Nes

Jun Li 65 Dec 9, 2022
Python script to automate the plotting and analysis of percentage depth dose and dose profile simulations in TOPAS.

topas-create-graphs A script to automatically plot the results of a topas simulation Works for percentage depth dose (pdd) and dose profiles (dp). Dep

Sebastian Schäfer 10 Dec 8, 2022
Fast, flexible and easy to use probabilistic modelling in Python.

Please consider citing the JMLR-MLOSS Manuscript if you've used pomegranate in your academic work! pomegranate is a package for building probabilistic

Jacob Schreiber 3k Jan 2, 2023
Python package to transfer data in a fast, reliable, and packetized form.

pySerialTransfer Python package to transfer data in a fast, reliable, and packetized form.

PB2 101 Dec 7, 2022
A collection of robust and fast processing tools for parsing and analyzing web archive data.

ChatNoir Resiliparse A collection of robust and fast processing tools for parsing and analyzing web archive data. Resiliparse is part of the ChatNoir

ChatNoir 24 Nov 29, 2022
Tablexplore is an application for data analysis and plotting built in Python using the PySide2/Qt toolkit.

Tablexplore is an application for data analysis and plotting built in Python using the PySide2/Qt toolkit.

Damien Farrell 81 Dec 26, 2022
A data analysis using python and pandas to showcase trends in school performance.

A data analysis using python and pandas to showcase trends in school performance. A data analysis to showcase trends in school performance using Panda

Jimmy Faccioli 0 Sep 7, 2021