
    ge'                         d dl mZ d dlZd dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZ  ej        d	          d
             Zd Z G d d          ZdS )    )TupleN)assert_allcloseassert_array_less)stats)sobol_indices)BootstrapResult)BootstrapSobolResult
f_ishigami	sample_AB
sample_A_Bsession)scopec                     d} d}d| dz  dz  z   |t           j        dz  z  dz  z   |dz  t           j        dz  z  dz  z   }d|t           j        dz  z  dz  z   |dz  t           j        dz  z  d	z  z   }| dz  dz  }d
}d
}|dz  t           j        dz  z  dz  dz  }d
}t          j        |||g          |z  }	t          j        dd|g|d|g||dgg          |z  }
|	|
                    d          z   }|	|fS )z_Reference values for Ishigami from Saltelli2007.

    Chapter 4, exercise 5 pages 179-182.
    g      @g?      ?               2   r      g           axis)nppiarraysum)abvarv1v2v3v12v13v23s_firsts_seconds_totals               Klib/python3.11/site-packages/scipy/stats/tests/test_sensitivity_analysis.pyishigami_ref_indicesr,      s,    	AA
1Q,25!8A
%1RUAXb(8
8C	qz!|	ad25!8mB.	.B	
AaB	
B
C
Q$ruax-/#
C
ChB|$$S(Gx	R	b#	c2   	H
 !,,,GG    c                 (    t          |           }||fS )zOutput of shape (2, n).r
   xress     r+   f_ishigami_vecr3   ,   s    
Q--C8Or-   c            	          e Zd Z ej        ej         dej        z            gdz  Zd Ze	j
                            d          e	j
                            de e	j        ee	j
        j                  gdd	g
          d                         Zd Zd Zd Zd Ze	j
                            d          d             Zd ZdS )TestSobolIndicesr   locscale   c                     t          j        g dg dg dg          }|dz   }t          j        g dg dg dgg dg dg dgg dg dg dgg          }t          ||          }t          ||           d S )	N)r   r      
   )r   r   r      )r9      	      d   )e   h   k   n   )f   i   l   o   )g   j   m   p   AB)r   r   r   r   )selfrO   rP   refABs        r+   test_sample_ABzTestSobolIndices.test_sample_AB8   s    H]]]]]]
 

 Gh"""mmmm mm"""mm mmmm"""$%

 

 a   C     r-   z!Can't create large array for testfunc)marksscalarvector)idsc                    t           j                            d          }t          |d| j        |          }|j        dk    r |d         |d         g|d         |d         gg}t          |j        |d         d           t          |j        |d         d           |j	        J |
                    d	
          }t          |t                    sJ t          |j	        t                    sJ |j	        j        j        j        d         dk    sJ |j	        j        j        d         j        |j        j        k    sJ |j        j        j        j        |j        j        k    sJ |j        j        j        j        |j        j        k    sJ t#          |j        j        j        |j                   t#          |j        |j        j        j                   t#          |j        j        j        |j                   t#          |j        |j        j        j                   t          |
                    dd	          t                    sJ t          |j	        t                    sJ d S )N	   ;m~|W2LE    rU   ndistsrandom_stater3   r   r   {Gz?atolc   )n_resamplesr   g?)confidence_levelre   )r   randomdefault_rngr   r_   __name__r   first_ordertotal_order_bootstrap_result	bootstrap
isinstancer	   r   confidence_intervallowshaper   high)rQ   r,   rU   rngr2   bootstrap_ress         r+   test_ishigamizTestSobolIndices.test_ishigamiO   s    i##$JKK*
 
 
 =,,,)!,.B1.EF)!,.B1.EF$ 
 	)=a)@tLLLL)=a)@tLLLL$,,,"55-)=>>>>>#/AAAAA$8<B1EJJJJ$8<Q?E/'( ( ( ( (<@F/'( ( ( ((<@F/'( ( ( ( 	%9=s	
 	
 	
 	O]6JO	
 	
 	
 	%9=s	
 	
 	
 	O]6JO	
 	
 	

 MM3BM?? 
 
 	
 	
 	
 #/AAAAAAAr-   c                 4   t           j                            d          }d}t          j        t           j         dt           j        z            t          j        t           j         dt           j        z            t          j        t           j         dt           j        z            g}t          |||          \  }}t          ||          }t          |          	                    dd          t          |          	                    dd          t          |          	                    d	          d
}t          ||||          }	t          |	j        |d         d           t          |||          }	t          |	j        |d         d           d S )Nr[   r\   r   r6   )r^   r_   r`   rN   r   )r9   r   rw   f_Af_Bf_ABr]   r   ra   rb   )rU   r^   r`   )r   rg   rh   r   uniformr   r   r   r
   reshaper   r   rj   )
rQ   r,   rs   r^   r_   rO   rP   rS   rU   r2   s
             r+   test_func_dictzTestSobolIndices.test_func_dict   s|   i##$JKKMrufAbeG444MrufAbeG444MrufAbeG444
 AU===1a    a==((B//a==((B//rNN**:66
 
 
 
 

 	)=a)@tLLLL
 
 
 	)=a)@tLLLLLLr-   c           
         d t           j                            d          }t          t          d| j        |          }t          |j        |d         d           t          |j        |d         d           d	t           j	        d
t           j	        dt           j	        dt          t           j	        t           j	        f         ffd}t          t          d| j        ||          }d S )Nc                     t          j        | |gd          }|dt          j        ||z
  dz  d          z  z
  |z  }t          j        | | |z
  z  d          |z  }|j        |j        fS )zaJansen for S and Sobol' for St.

            From Saltelli2010, table 2 formulations (c) and (e).)r   rw   r   r   r   rw   )r   r!   meanT)ry   rz   r{   r!   ssts         r+   jansen_sobolz2TestSobolIndices.test_method.<locals>.jansen_sobol   sw     &#s'222Cs27C$J?<<<<<CAcDj)333c9B39r-   r[   r\   )rU   r^   r_   methodr`   r   ra   rb   r   ry   rz   r{   returnc                      | ||          S N )ry   rz   r{   r   s      r+   jansen_sobol_typedz8TestSobolIndices.test_method.<locals>.jansen_sobol_typed   s      <S$///r-   r   )r   rg   rh   r   r
   r_   r   rj   rk   ndarrayr   )rQ   r,   rs   r2   r   _r   s         @r+   test_methodzTestSobolIndices.test_method   s   		 		 		 i##$JKKt*	
 
 
 	)=a)@tLLLL)=a)@tLLLL	0	0"$*	046J	02:rz)*	0 	0 	0 	0 	0 	0
 q*%	
 
 
r-   c                     t           j                            d          }t          d d| j        |          }t          |j        |d         d           t          |j        |d         d           d S )	Nr[   c                 &    t          |           dz   S )Ni  r/   r1   s    r+   <lambda>z5TestSobolIndices.test_normalization.<locals>.<lambda>   s    :a==4/ r-   r\   r]   r   ra   rb   r   r   rg   rh   r   r_   r   rj   rk   rQ   r,   rs   r2   s       r+   test_normalizationz#TestSobolIndices.test_normalization   s~    i##$JKK//4*
 
 
 	)=a)@tLLLL)=a)@tLLLLLLr-   c                 :   d }t           j                            d          }t          |d| j        |          }|d         g d|d         g|d         g d|d         gg}t          |j        |d         d	           t          |j        |d         d	           d S )
Nc                 6    t          |           }||dz  dz   |fS )zOutput of shape (3, n).r   r<   r/   r0   s     r+   f_ishigami_vec_constzETestSobolIndices.test_constant_function.<locals>.f_ishigami_vec_const   s"    Q--Ca"c))r-   r[   r\   r]   r   )r   r   r   r   ra   rb   r   )rQ   r,   r   rs   r2   ishigami_vec_indicess         r+   test_constant_functionz'TestSobolIndices.test_constant_function   s    	* 	* 	*
 i##$JKK%*
 
 
 &a()))5I!5LM%a()))5I!5LM 

 	)=a)@tLLLL)=a)@tLLLLLLr-   c                     t           j                            d          }t          t          d| j        |          }t          |j        |d         d           t          |j        |d         d           d S )Nr[   i   r]   r   g-C6?rb   r   )	r   rg   rh   r   r
   r_   r   rj   rk   r   s       r+   test_more_convergedz$TestSobolIndices.test_more_converged   s{    i##$JKKu*
 
 
 	)=a)@tLLLL)=a)@tLLLLLLr-   c                    d}t          j        t          |          5  t          dt          d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          dt          d g           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          dt          t          j                    g           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d	t          t          j                    g           d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          dt          d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          dt          d            d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          dt                     d d d            n# 1 swxY w Y   d }d}t          j        t          |          5  t          d|t          j                    g           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          dg g dt          j                    g           d d d            n# 1 swxY w Y   t          j        t          |          5  t          dddgdgg dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          dddgddgg dd           d d d            d S # 1 swxY w Y   d S )Nz3Each distribution in `dists` must have method `ppf`)matchr   r|   )r^   rU   r_   c                     | S r   r   r   s    r+   r   z.TestSobolIndices.test_raises.<locals>.<lambda>        r-   z The balance properties of Sobol'r;   gffffff@z'toto' is not a valid 'method'toto)r^   rU   r   z!must have the following signaturec                     | S r   r   r   s    r+   r   z.TestSobolIndices.test_raises.<locals>.<lambda>  r   r-   z1'dists' must be defined when 'func' is a callable)r^   rU   c                 .    |                      dd          S )Nrw   r   )r}   r   s    r+   func_wrong_shape_outputz=TestSobolIndices.test_raises.<locals>.func_wrong_shape_output  s    99R###r-   z!'func' output should have a shaper   zWhen 'func' is a dictionary)ry   r{   r   r9   )r   r>   r;   r   rx   r   )r   r>   r;   )pytestraises
ValueErrorr   r
   r   r|   )rQ   messager   s      r+   test_raiseszTestSobolIndices.test_raises   s   H]:W555 	A 	AAJi@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A ]:W555 	E 	EAJ{{mDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 6]:W555 	I 	IAJu}6GHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I ]:W555 	K 	KCj8IJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 4]:W555 	? 	?AJv>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 7]:W555 	D 	DAJ{{CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D G]:W555 	0 	0AJ////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0	$ 	$ 	$ 7]:W555 	 	1%-//9J   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 1]:W555 	 	"b11%-//9J   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:W555 	 	VQCFF   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:W555 	 	VQFIIIFF   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA	A(BBB6*C,,C03C0*EEE0FFF<G!!G%(G%	H,,H03H0%JJJ0(K$$K(+K(
L11L58L5N  NNN)ri   
__module____qualname__r   r|   r   r   r_   rT   r   markxfail_on_32bitparametrizer
   paramr3   slowru   r~   r   r   r   r   r   r   r-   r+   r5   r5   2   sW        	25&"%000	
E! ! !. [ CDD[	\V\.8HIIIJx    
1B 1B  ED1BfM M M>!
 !
 !
F	M 	M 	MM M M, [ CDD	M 	M ED	M7 7 7 7 7r-   r5   )typingr   numpyr   numpy.testingr   r   r   scipyr   scipy.statsr   scipy.stats._resamplingr   !scipy.stats._sensitivity_analysisr	   r
   r   r   fixturer,   r3   r5   r   r-   r+   <module>r      s,             < < < < < < < <        % % % % % % 3 3 3 3 3 3           
 i     ! 8  | | | | | | | | | |r-   