
    S_f8                     V   d dl mZ d dlmZ d dlZd dlZ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c mZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d
 Z'd Z(d Z)d Z*d Z+d Z,d Z- G d d      Z. G d d      Z/ G d d      Z0d Z1 G d d      Z2y)    )PoolN)Fraction)assert_equalassert_)raises)given
strategiesreproduce_failure)array_api_compatible)xp_assert_equal)_aligned_zeroscheck_random_state
MapWrappergetfullargspec_no_selfFullArgSpecrng_integers_validate_int_rename_parameter_contains_nan_rng_html_rewrite
_lazywherec                      d} d }dD ]]  }dD ]V  }dD ]O  }t         j                  t         j                  fD ]*  }|ddd|ffD ]  }t        |       D ]  } |||||         , Q X _ y )	N
   c                 t   t        | |||f      }t        | |||      }|t        j                  |      j                  }t        |j                  d   d   |z  d       t        | d      rt        |j                  | |       nt        |j                  | f|       t        |j                  |       |dk(  r!t        |j                  j                  |       y |dk(  r1|j                  dkD  r!t        |j                  j                  |       y y |!t        |j                  j                  |       y t               )N)aligndatar   __len__CF)reprr   npdtype	alignmentr   __array_interface__hasattrshaper   flagsc_contiguoussizef_contiguous
ValueError)r&   r"   orderr   err_msgxs         ;lib/python3.12/site-packages/scipy/_lib/tests/test__util.pycheckz"test__aligned_zeros.<locals>.check   s    ueU345%e<=HHUO--EQ**6215=qA5)$%15(G4QWWe$C<AGG(('2c\vvz,,g6  ]AGG(('2,    )	                      @   N)r   r2   r4      )r   r   Nr2   r3   r4   )r!   uint8float64range)niterr0   r   nr,   r"   r&   js           r/   test__aligned_zerosrA      s    E. 3 > 	>A) > hh

3 >E"#aAq\!2 >!&u >A!%u=>>>>	>>r1   c                  d   t        d      } t        t        |       t        j                  j
                         t        |       } t        t        |       t        j                  j
                         t        d       } t        t        |       t        j                  j
                         t        t        t         d       t        j                  j                  t        j                  j                               }t        |      } t        t        |       t        j                  j                         y )Nr2   a)
r   r   typer!   randomRandomStateassert_raisesr+   	GeneratorPCG64)rsirgs     r/   test_check_random_staterL   9   s    
 Q
CcBII112
S
!CcBII112
T
"CcBII112*0#6			RYY__.	/B
R
 CcBII//0r1   c                  l   t        d      } t        | j                        }t        |t	        dgd d dg d i              t        | j
                        }t        |t	        ddgd d d g d i               G d d      } |       }t        |j                        }t        |t	        g dd	d
ddgdd ii              y )Nr2   pool)r2   funciterablec                       e Zd ZddddZy)0test_getfullargspec_no_self.<locals>._rv_genericNr)   c                     y N )selfrC   bcr)   argskwargss          r/   _rvsz5test_getfullargspec_no_self.<locals>._rv_generic._rvsT   s    r1   r3   r4   )__name__
__module____qualname__r\   rV   r1   r/   _rv_genericrR   S   s    	 	r1   ra   )rC   rX   rY   rZ   r[   r]   r)   )r   r   __init__r   r   __call__r\   )pargspecra   rv_objs       r/   test_getfullargspec_no_selfrg   J   s    1A$QZZ0G+vhdD"&*B0 1$QZZ0G+vz&:D$&($4 5  ]F$V[[1G+ovx&,vhL Mr1   c                     t        j                  d      } t        j                  |       }t        d      }t	        |j
                  t        u        t	        |j                  d u        t	        |j                  du        t         |t         j                  |             }t        ||       t        t              5  t        d      }d d d        y # 1 sw Y   y xY w)N      $@r2   Fr   )r!   arangesinr   r   _mapfuncmaprN   	_own_poollistr   rG   RuntimeError)in_argout_argrd   outs       r/   test_mapwrapper_serialrt   ]   s    YYs^FffVnG1AAJJ#AFFdNAKK5 !
q 
!Cg	|	$ qM  s   :CCc                      t        d      5 } | j                  t        j                  g d       d d d        y # 1 sw Y   y xY w)Nr3   )r2   r3   r4   r5   )r   rm   mathrk   )rd   s    r/   	test_poolrw   l   s2    	a &A	dhh%& & &s	   #8Ac                  `   t        j                  d      } t        j                  |       }t        d      5 } |t         j                  |       }t	        t        |      |       t        |j                  du        t        t        |j                  t                     t        |j                  d u       d d d        t        t              5 } t         j                  |        d d d        t        j                  t        u        t!        d      5 }t        |j"                        }t        |j                  du        |j%                          |j#                  t         j                  |       }t	        t        |      |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nri   r3   TF)r!   rj   rk   r   r   ro   r   rn   
isinstancerN   PWLrl   rG   	ExceptionrD   r+   r   rm   close)rq   rr   rd   rs   excinfoqs         r/   test_mapwrapper_parallelr   q   s@   YYs^FffVnG	A (!T#Y(t#$
1663'(

$&'( 
y	! W	"&&& GLLJ&' 
a 	)Aquuu$%		 eeBFFF#T#Y(	) 	)!( ( 	) 	)s%   A>FFA2F$FF!$F-c                     t         j                  j                         } t        | dddd      }t        j                  |      dk(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | ddd      }t        j                  |      dk(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | dddd	      }t        j                  |      d
k(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | ddd	      }t        j                  |      d
k(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ 	 t         j                  j                         } t        | dddd      }t        j                  |      dk(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | ddd      }t        j                  |      dk(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | dddd	      }t        j                  |      d
k(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ t        | ddd	      }t        j                  |      d
k(  sJ t        j
                  |      dk(  sJ |j                  dk(  sJ y # t        $ r Y y w xY w)Nr3      d   T)lowhighr)   endpoint)r   )r   r)   r   r   Fr5   )	r!   rE   rF   r   maxminr&   default_rngAttributeError)rngarrs     r/   test_rng_integersr      s   
))


!C sd
CC66#;!66#;!99 sd
;C66#;!66#;!99 se
DC66#;!66#;!99 se
<C66#;!66#;!99ii##%
 sd
CC66#;!66#;!99 sd
;C66#;!66#;!99 se
DC66#;!66#;!99 se
<C66#;!66#;!993  s   2K# #	K/.K/c            	       8   e Zd Zej                  j                  dd ej                  d       ej                  d       ej                  d      g      d        Z
ej                  j                  dd ej                  dg       edd      g      d        Zd Zy)	TestValidateIntr?   r5   c                 *    t        |d      }|dk(  sJ y )Nr?   r5   )r   rW   r?   s     r/   test_validate_intz!TestValidateInt.test_validate_int   s    !S!Avvr1   g      @r2   c                 |    t        j                  t        d      5  t        |d       d d d        y # 1 sw Y   y xY w)Nzn must be an integermatchr?   )pytestr   	TypeErrorr   r   s     r/   test_validate_int_badz%TestValidateInt.test_validate_int_bad   s0    ]]9,BC 	"!S!	" 	" 	"s   2;c                 ~    t        j                  t        d      5  t        ddd       d d d        y # 1 sw Y   y xY w)Nz$n must be an integer not less than 0r   r?   r   )r   r   r+   r   )rW   s    r/   test_validate_int_below_minz+TestValidateInt.test_validate_int_below_min   s6    ]]: .; < 	&"c1%	& 	& 	&s   3<N)r^   r_   r`   r   markparametrizer!   r;   int16arrayr   r   r   r   rV   r1   r/   r   r      s    [[S1hbhhqk8288A;"LM N [[S3!x1~"FG" H"&r1   r   c                   X    e Zd Z edd      d        Z eddd      d        Zd Zd Zy	)
TestRenameParameteroldnewc                     |S rU   rV   rW   r   s     r/   old_keyword_still_acceptedz.TestRenameParameter.old_keyword_still_accepted       
r1   z1.9.0)dep_versionc                     |S rU   rV   r   s     r/   old_keyword_deprecatedz*TestRenameParameter.old_keyword_deprecated   r   r1   c                    | j                  d      }| j                  d      }| j                  d      }||cxk(  r|cxk(  rdk(  sJ  J t        j                  d      }t        j                  t
        |      5  | j                  d       d d d        t        j                  d      }t        j                  t
        |      5  | j                  dd       d d d        t        j                  t
        |      5  | j                  dd       d d d        t        j                  t
        |      5  | j                  dd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)	Nr   r   r   z.old_keyword_still_accepted() got an unexpectedr   
unexpectedz)old_keyword_still_accepted() got multipler   r   )r   reescaper   r   r   )rW   res1res2res3messages        r/   test_old_keyword_still_acceptedz3TestRenameParameter.test_old_keyword_still_accepted   sS   ..r2..2.6..2.6t)t)r))))) ))LM]]9G4 	;++r+:	; ))GH]]9G4 	8++BB+7	8]]9G4 	8++BB+7	8]]9G4 	<+++;	< 	<	; 	;
	8 	8	8 	8	< 	<s0   <EE>E*5E6EE'*E36E?c                 ,   d}| j                  d      }| j                  d      }t        j                  t        |      5  | j                  d      }d d d        ||cxk(  rcxk(  rdk(  sJ  J t	        j
                  d      }t        j                  t        |      5  | j                  d       d d d        t	        j
                  d      }t        j                  t        |      5  | j                  dd       d d d        t        j                  t        |      5  t        j                  t        |      5  | j                  dd       d d d        d d d        t        j                  t        |      5  t        j                  t        |      5  | j                  dd	       d d d        d d d        y # 1 sw Y   nxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)
Nz+Use of keyword argument `old` is deprecatedr   r   r   r   z*old_keyword_deprecated() got an unexpectedr   z%old_keyword_deprecated() got multipler   )r   r   warnsDeprecationWarningr   r   r   r   )rW   dep_msgr   r   r   r   s         r/   test_old_keyword_deprecatedz/TestRenameParameter.test_old_keyword_deprecated   s    @**2.**r*2\\,G< 	7..2.6D	7t)t)r))))) ))HI]]9G4 	7''2'6	7
 ))CD]]9G4 	4'''3	4]]9G4 	4/w?	4'''3	4 	4 ]]9G4 	8/w?	8''BB'7	8 	8 	8#	7 	7	7 	7	4 	4	4 	4 	4 	4	8 	8 	8 	8sl   G "G-G$G2 G&G2?H
G>/H
 G
GG#&G/	+G22G;>H	H

HN)r^   r_   r`   r   r   r   r   r   rV   r1   r/   r   r      sD    
 ue$ % ue9 :<*8r1   r   c                       e Zd Zd Zd Zd Zy)TestContainsNaNTestc                    t        j                  dddt         j                  g      }t        |d      \  }}|sJ |dk(  sJ t        |d      \  }}|sJ |dk(  sJ d}t	        j
                  t        |      5  t        |d	       d d d        d
}t	        j
                  t        |      5  t        |d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr2   r3   r4   	propagate)
nan_policyomitzThe input contains nan valuesr   raiseznan_policy must be one ofnan)r!   r   r   r   r   r   r+   )rW   r   contains_nanr   msgs        r/   test_policyzTestContainsNaNTest.test_policy  s    xxAq"&&)*#0+#N j|[(((#0&#I j|V###-]]:S1 	4$73	4 *]]:S1 	2$51	2 	2		4 	4	2 	2s   ;C.CCCc                 *   t        j                  g d      }t        |      d   rJ t        j                  dddt         j                  g      }t        |      d   sJ t        j                  t         j                  ddt         j                  g      }t        |      d   sJ t        j                  dddt         j                  g      }t        |      d   rJ t        j                  dddt         j                  gd      }t        |      d   sJ y )	N)r2   r3   r4   r   r2   r3   r4   3objectr"   r!   r   r   r   )rW   data1data2data3data4data5s         r/   test_contains_nan_1dz(TestContainsNaNTest.test_contains_nan_1d1  s    # '***!Q266*+U#A&&&"&&!Q/0U#A&&&!QRVV,- '***!QRVV,H=U#A&&&r1   c                    t        j                  ddgddgg      }t        |      d   rJ t        j                  ddgdt         j                  gg      }t        |      d   sJ t        j                  ddgdt         j                  gg      }t        |      d   rJ t        j                  ddgdt         j                  ggd      }t        |      d   sJ y )	Nr2   r3   r4   r5   r   1r   r   r   )rW   r   r   r   r   s        r/   test_contains_nan_2dz(TestContainsNaNTest.test_contains_nan_2dA  s    1a&1a&)* '***1a&1bff+./U#A&&&3(QK01 '***3(QK0AU#A&&&r1   N)r^   r_   r`   r   r   r   rV   r1   r/   r   r     s    2&' 'r1   r   c                  @    d }  t        |              }g d}||k(  sJ y )Nc                      g d} | S )N)znp.random.default_rng(8989843)np.random.default_rng(seed)z8np.random.default_rng(0x9a71b21474694f919882289dc1559ca) bob rV   )liness    r/   mock_strz(test__rng_html_rewrite.<locals>.mock_strP  s    
 r1   )np.random.default_rng()r   r   r   )r   )r   resrefs      r/   test__rng_html_rewriter   O  s.     &
H
%
'CC #::r1   c            	       b   e Zd Z ej                  dd      Z ej                  dd      Z ej                  ej                  ej                  f      Z ej                  dd      Z ej                         Zej                   j#                  d      e eeeeee      d	                      Zy
)TestLazywherer2   r4   )	min_value	max_valuei ʚ;l   c(	 r   zignore::RuntimeWarning)n_arraysrng_seedr"   rd   r   c                 F   t        j                  |dz   d      }|j                  |      \  }}	|^}
}|j                  |j                  t        j                  |t                                 }|D cg c]7  }|j                  |j                  t        j                  ||                  9 }}d }d }t        j                  j                  |      }|j                  |j                  |
      |kD        }t        ||||      }t        ||||      }|t        k(  rt        j                  ||g| ^}}}|j                  | || |      }|j                  | ||  ||       }|t        k(  rJ|j                  |	      }|j                  |	      }|j                  |      d	   }|j                  |      d	   }t        |t        |j                  g                    t        ||       t!        |j"                  |j"                         t!        |j$                  |j$                         t        |t        |j                  g                    t        ||       t!        |j"                  |j"                         t!        |j$                  |j$                         y c c}w )
Nr2   r   )
num_shapesmin_side)r"   r&   c                  &    t        d | D              S )Nc              3       K   | ]  }|  y wrU   rV   .0args     r/   	<genexpr>z6TestLazywhere.test_basic.<locals>.f.<locals>.<genexpr>x       +ss+   sumrZ   s    r/   fz#TestLazywhere.test_basic.<locals>.fw  s    +d+++r1   c                  ,    t        d | D              dz  S )Nc              3       K   | ]  }|  y wrU   rV   r   s     r/   r   z7TestLazywhere.test_basic.<locals>.f2.<locals>.<genexpr>{  r   r   r3   r   r   s    r/   f2z$TestLazywhere.test_basic.<locals>.f2z  s    +d++a//r1   rS   )r   rV   )npstmutually_broadcastable_shapesdrawasarrayarraystupler!   rE   r   r   
atleast_1dwherereshapery   rD   r   r   r&   r"   )rW   r   r   r"   rd   r   xpmbsinput_shapesresult_shape
cond_shapeshapes	fillvaluer&   r   r   r   r   condr   r   ref1ref2s                          r/   
test_basiczTestLazywhere.test_basick  s#    00HQJ:;=%)YYs^"l*
VJJtyy5)PQR	%' **TYYt{{e'LMN ' '	,	0 ii##H-zz#****59:$95$b1 8')}}T9'Nv'N$D)fxxaj)4xxaj"f+68<<-D<<-D::d#B'D::d#B'D4bjjn-.d#TZZ,TZZ,4bjjn-.d#TZZ,TZZ,I's   4<JN)r^   r_   r`   r	   integersr   r   sampled_fromr!   float32r<   r"   floatsrd   r   r   r   filterwarningsr   r   r
  rV   r1   r/   r   r   d  s    "z""Q!<H"z""Z:NH#J##RZZ$<=E
A3A:??D[[ 89
HxuM*- N  :*-r1   r   )3multiprocessingr   multiprocessing.poolrz   r   rv   	fractionsr   numpyr!   numpy.testingr   r   r   r   rG   hypothesis.extra.numpyextrar   
hypothesisr   r	   r
   scipy.conftestr   scipy._lib._array_apir   scipy._lib._utilr   r   r   r   r   r   r   r   r   r   r   rA   rL   rg   rt   rw   r   r   r   r   r   r   r   rV   r1   r/   <module>r     s      , 	    /  * % % ; ; / 1L L L L >F1"M&&
)@7 t& &$<8 <8~0' 0'f*4- 4-r1   