
    (ph)                         S SK rS SKJrJr  S SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJrJr  \R"                  " SS9S	 5       rS
 r " S S5      rg)    N)assert_allcloseassert_array_less)stats)sobol_indices)BootstrapResult)BootstrapSobolResult
f_ishigami	sample_AB
sample_A_Bsession)scopec                      Sn SnSU S-  S-  -   U[         R                  S-  -  S-  -   US-  [         R                  S-  -  S-  -   nSU[         R                  S-  -  S-  -   US-  [         R                  S-  -  S	-  -   nU S-  S-  nS
nS
nUS-  [         R                  S-  -  S-  S-  nS
n[         R                  " X4U/5      U-  n	[         R                  " SSU/USU/XxS//5      U-  n
XR                  SS9-   nX4$ )zWReference 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               ^/var/www/html/venv/lib/python3.13/site-packages/scipy/stats/tests/test_sensitivity_analysis.pyishigami_ref_indicesr+      s'    	AA
1Q,255!8A
%1RUUAXb(8
8C	qz!|	ad255!8mB.	.B	
AaB	
B
C
Q$ruuax-/#
C
Chh|$S(Gxx	R	b#	2  	H
 !,,G    c                     [        U 5      nX4$ )zOutput of shape (2, n).r	   xress     r*   f_ishigami_vecr2   *   s    
Q-C8Or,   c                      \ rS rSr\R
                  " \R                  * S\R                  -  S9/S-  rS r	\
R                  R                  \
R                  R                  S5      \
R                  R                  S\\
R                   " \\
R                  R$                  S9/S	S
/S9S 5       5       5       rS rS rS rS r\
R                  R                  S5      S 5       rS rSrg)TestSobolIndices0   r   locscale   c                     [         R                  " / SQ/ SQ/ SQ/5      nUS-   n[         R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ// SQ/ SQ/ SQ//5      n[        XS9n[        XC5        g )	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_ABTestSobolIndices.test_sample_AB6   s~    HH

 Ghh" " "$%

   r,   z!Can't create large array for testfunc)marksscalarvector)idsc                    [         R                  R                  S5      n[        USU R                  US9nUR
                  S:X  a  US   US   /US   US   //n[        UR                  US   SS9  [        UR                  US   SS9  UR                  b   eUR                  S	S
9n[        U[        5      (       d   e[        UR                  [        5      (       d   eUR                  R                  R                  R                   S   S:X  d   eUR                  R                  R                  S   R                   UR                  R                   :X  d   eUR                  R                  R                  R                   UR                  R                   :X  d   eUR                  R                  R                  R                   UR                  R                   :X  d   e[#        UR                  R                  R                  UR                  5        [#        UR                  UR                  R                  R$                  5        [#        UR                  R                  R                  UR                  5        [#        UR                  UR                  R                  R$                  5        [        UR                  SS	S9[        5      (       d   e[        UR                  [        5      (       d   eg )N	   ;m~|W2LE    rV   ndistsrngr2   r   r   {Gz?atolc   )n_resamplesr   g?)confidence_levelrf   )r   randomdefault_rngr   r`   __name__r   first_ordertotal_order_bootstrap_result	bootstrap
isinstancer   r   confidence_intervallowshaper   high)rQ   r+   rV   ra   r1   bootstrap_ress         r*   test_ishigamiTestSobolIndices.test_ishigamiM   s    ii##$JK**
 ==,,)!,.B1.EF)!,.B1.EF$ 
 	)=a)@tL)=a)@tL$$,,,"5-)=>>>>#//AAAA$$88<<BB1EJJJ$$88<<Q?EE//''( 	( ( ((<<@@FF//''( 	( (((<<@@FF//''( 	( ( 	%%99==s	
 	OO]66JJOO	
 	%%99==s	
 	OO]66JJOO	

 MM3BM? 
 
 	
 
 #//AAAAr,   c                    [         R                  R                  S5      nSn[        R                  " [         R
                  * S[         R
                  -  S9[        R                  " [         R
                  * S[         R
                  -  S9[        R                  " [         R
                  * S[         R
                  -  S9/n[        X4US9u  pV[        XVS9n[        U5      R                  SS5      [        U5      R                  SS5      [        U5      R                  S	5      S
.n[        XUUS9n	[        U	R                  US   SS9  [        XUS9n	[        U	R                  US   SS9  [        [        U5      R                  SS5      US   5        [        [        U5      R                  SS5      US   5        [        [        U5      R                  S	5      US   5        g )Nr\   r]   r   r6   )r_   r`   ra   rN   r   )r9   r   rx   f_Af_Bf_ABr^   r   rb   rc   )rV   r_   ra   rz   r{   r|   )r   rh   ri   r   uniformr   r   r
   r	   reshaper   r   rk   )
rQ   r+   ra   r_   r`   rO   rP   rS   rV   r1   s
             r*   test_func_dictTestSobolIndices.test_func_dict   s   ii##$JKMMruufAbeeG4MMruufAbeeG4MMruufAbeeG4
 A4  a=((B/a=((B/rN**:6
 

 	)=a)@tL
 	)=a)@tL 	
1--a4d5kB
1--a4d5kB
2..z:DLIr,   c           
        ^ S m[         R                  R                  S5      n[        [        SU R
                  TUS9n[        UR                  US   SS9  [        UR                  US   SS9  S	[         R                  S
[         R                  S[         R                  S[        [         R                  [         R                  4   4U4S jjn[        [        SU R
                  UUS9ng )Nc                     [         R                  " X/SS9nUS[         R                  " X-
  S-  SS9-  -
  U-  n[         R                  " X U-
  -  SS9U-  nUR                  UR                  4$ )zUJansen for S and Sobol' for St.

From Saltelli2010, table 2 formulations (c) and (e).)r   rx   r   r   r   rx   )r   r    meanT)rz   r{   r|   r    ssts         r*   jansen_sobol2TestSobolIndices.test_method.<locals>.jansen_sobol   si     &&#'2Cs277CJ?<<<CADj)3c9B339r,   r\   r]   )rV   r_   r`   methodra   r   rb   rc   r   rz   r{   r|   returnc                    > T" XU5      $ N )rz   r{   r|   r   s      r*   jansen_sobol_typed8TestSobolIndices.test_method.<locals>.jansen_sobol_typed   s      $//r,   r   )r   rh   ri   r   r	   r`   r   rk   rl   ndarraytuple)rQ   r+   ra   r1   r   _r   s         @r*   test_methodTestSobolIndices.test_method   s    		 ii##$JKt**	
 	)=a)@tL)=a)@tL	0	0"$**	046JJ	02::rzz)*	0
 q**%	
r,   c                     [         R                  R                  S5      n[        S SU R                  US9n[        UR                  US   SS9  [        UR                  US   SS9  g )	Nr\   c                     [        U 5      S-   $ )Ni  r.   r0   s    r*   <lambda>5TestSobolIndices.test_normalization.<locals>.<lambda>   s    :a=4/r,   r]   r^   r   rb   rc   r   r   rh   ri   r   r`   r   rk   rl   rQ   r+   ra   r1   s       r*   test_normalization#TestSobolIndices.test_normalization   s^    ii##$JK/4**
 	)=a)@tL)=a)@tLr,   c                    S n[         R                  R                  S5      n[        USU R                  US9nUS   / SQUS   /US   / SQUS   //n[        UR                  US   SS	9  [        UR                  US   SS	9  g )
Nc                 ,    [        U 5      nXS-  S-   U4$ )zOutput of shape (3, n).r   r<   r.   r/   s     r*   f_ishigami_vec_constETestSobolIndices.test_constant_function.<locals>.f_ishigami_vec_const   s    Q-Ca"c))r,   r\   r]   r^   r   )r   r   r   r   rb   rc   r   )rQ   r+   r   ra   r1   ishigami_vec_indicess         r*   test_constant_function'TestSobolIndices.test_constant_function   s    	*
 ii##$JK%**
 &a()5I!5LM%a()5I!5LM 

 	)=a)@tL)=a)@tLr,   c                     [         R                  R                  S5      n[        [        SU R
                  US9n[        UR                  US   SS9  [        UR                  US   SS9  g )Nr\   i   r^   r   g-C6?rc   r   )	r   rh   ri   r   r	   r`   r   rk   rl   r   s       r*   test_more_converged$TestSobolIndices.test_more_converged   s^    ii##$JKu**
 	)=a)@tL)=a)@tLr,   c                    Sn[         R                  " [        US9   [        S[        SS9  S S S 5        [         R                  " [        US9   [        S[        S /S9  S S S 5        Sn[         R                  " [        US9   [        S[        [
        R                  " 5       /S9  S S S 5        [         R                  " [        US9   [        S	[        [
        R                  " 5       /S9  S S S 5        S
n[         R                  " [        US9   [        S[        SS9  S S S 5        Sn[         R                  " [        US9   [        S[        S S9  S S S 5        Sn[         R                  " [        US9   [        S[        S9  S S S 5        S nSn[         R                  " [        US9   [        SU[
        R                  " 5       /S9  S S S 5        Sn[         R                  " [        US9   [        S/ / S.[
        R                  " 5       /S9  S S S 5        [         R                  " [        US9   [        SSS/S// SQS.S9  S S S 5        [         R                  " [        US9   [        SSS/SS// SQS.S9  S S S 5        g ! , (       d  f       GN_= f! , (       d  f       GN>= f! , (       d  f       GN	= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNs= f! , (       d  f       GN?= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)Nz3Each distribution in `dists` must have method `ppf`)matchr   r}   )r_   rV   r`   c                     U $ r   r   r   s    r*   r   .TestSobolIndices.test_raises.<locals>.<lambda>      r,   z The balance properties of Sobol'r;   gffffff@z'toto' is not a valid 'method'toto)r_   rV   r   z!must have the following signaturec                     U $ r   r   r   s    r*   r   r     r   r,   z1'dists' must be defined when 'func' is a callable)r_   rV   c                 &    U R                  SS5      $ )Nrx   r   )r~   r   s    r*   func_wrong_shape_output=TestSobolIndices.test_raises.<locals>.func_wrong_shape_output  s    99R##r,   z!'func' output should have a shaper   zWhen 'func' is a dictionary)rz   r|   r   r9   )r   r>   r;   r   ry   r   )r   r>   r;   )pytestraises
ValueErrorr   r	   r   r}   )rQ   messager   s      r*   test_raisesTestSobolIndices.test_raises   sK   H]]:W5AJi@ 6 ]]:W5AJ{mD 6 6]]:W5AJu}}6GH 6 ]]:W5Cj8IJ 6 4]]:W5AJv> 6 7]]:W5AJ{C 6 G]]:W5AJ/ 6	$ 7]]:W51%--/9J 6
 1]]:W5"b1%--/9J 6
 ]]:W5VQCF 6 ]]:W5VQFIF 65_ 65 65 65 65 65 65 65 65 65
 65 65s   JJ$J($J:KK5K0* L-#L1L&&L7
J
J%(
J7:
K	
K
K-0
K?
L
L#&
L47
Mr   N)rj   
__module____qualname____firstlineno__r   r}   r   r   r`   rT   r   markxslowxfail_on_32bitparametrizer	   paramr2   slowru   r   r   r   r   r   r   __static_attributes__r   r,   r*   r4   r4   0   s     	255&"%%0	
E!. [[[[ CD[[	V\\.8H8HIJx   
1B E 1Bf&JP!
F	MM, [[ CD	M E	M7r,   r4   )numpyr   numpy.testingr   r   r   scipyr   scipy.statsr   scipy.stats._resamplingr   !scipy.stats._sensitivity_analysisr   r	   r
   r   fixturer+   r2   r4   r   r,   r*   <module>r      sO     <   % 3 
 i  !8F Fr,   