o
    hE`                     @   s  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  mZ d dlmZmZmZ d dlmZmZ d dlmZmZmZmZ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 d
l,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ej4j5Z5ej4j6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=G dd dZ>G dd dZ?G dd dZ@dd  ZAG d!d" d"ZBG d#d$ d$ZCdS )%    )PoolN)Fraction)assert_equalassert_)raises)given
strategiesreproduce_failure)array_api_compatibleskip_xp_invalid_arg)xp_assert_equalxp_assert_closeis_numpyxp_copyis_array_api_strict)_aligned_zeroscheck_random_state
MapWrappergetfullargspec_no_selfFullArgSpecrng_integers_validate_int_rename_parameter_contains_nan_rng_html_rewrite
_lazywhere)clusterinterpolatelinalgoptimizesparsespatialstatsc                  C   sr   d} dd }dD ].}dD ])}dD ]$}t jt jfD ]}|ddd	|ffD ]}t| D ]	}||||| q(q"qqqqd S )
N
   c                 S   s   t | |||f}t| |||d}|d u rt|j}t|jd d | d t| dr3t|j| | nt|j| f| t|j| |dkrNt	|j
j| d S |dkrb|jdkr`t	|j
j| d S d S |d u rot	|j
j| d S 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x r8   O/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/_lib/tests/test__util.pycheck   s$   

z"test__aligned_zeros.<locals>.check)	                      @   N)r   r;   r=      )r'   r(   Nr;   r<   r=   )r*   uint8float64range)niterr:   r$   nr5   r+   r/   jr8   r8   r9   test__aligned_zeros   s   rJ   c                  C   s   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tj	 }t |} tt| tjj d S )Nr;   a)
r   r   typer*   randomRandomStateassert_raisesr4   	GeneratorPCG64)rsirgr8   r8   r9   test_check_random_state>   s   rT   c               
   C   s   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 d}| }t|j}t|tg dd	d
ddgdd ii  d S )Nr;   pool)r;   funciterablec                   @   s   e Zd ZdddddZdS )z0test_getfullargspec_no_self.<locals>._rv_genericr<   r=   Nr2   c                _   s   d S Nr8   )selfrK   bcr2   argskwargsr8   r8   r9   _rvsY   s   z5test_getfullargspec_no_self.<locals>._rv_generic._rvsr<   r=   )__name__
__module____qualname__r_   r8   r8   r8   r9   _rv_genericX   s    rd   )rK   r[   r\   r]   r^   r`   r2   )r   r   __init__r   r   __call__r_   )pargspecrd   rv_objr8   r8   r9   test_getfullargspec_no_selfO   s   



rj   c                  C   s   t d} t | }td}t|jtu  t|jd u  t|jdu  t	|t j| }t
|| tt td}W d    d S 1 sDw   Y  d S )N      $@r;   Fr   )r*   arangesinr   r   _mapfuncmaprU   	_own_poollistr   rO   RuntimeError)in_argout_argrg   outr8   r8   r9   test_mapwrapper_serialb   s   




"rv   c                  C   s@   t d} | tjg d W d    d S 1 sw   Y  d S )Nr<   )r;   r<   r=   r>   )r   ro   mathrm   )rg   r8   r8   r9   	test_poolq   s   
"rx   c                  C   s.  t d} t | }td+}|t j| }tt|| t|jdu  tt|j	t
 t|jd u W d    n1 s<w   Y  tt}|t j|  W d    n1 sVw   Y  t|jtu  td'}t|j}t|jdu  |  |t j| }tt|| W d    d S 1 sw   Y  d S )Nrk   r<   TF)r*   rl   rm   r   r   rq   r   rp   
isinstancerU   PWLrn   rO   	ExceptionrL   r4   r   ro   close)rs   rt   rg   ru   excinfoqr8   r8   r9   test_mapwrapper_parallelv   s(   






"r   c                  C   sR  t j } t| ddddd}t |dksJ t |dks J |jdks'J t| dddd}t |dks8J t |dksAJ |jdksHJ t| dddd	d}t |d
ksZJ t |dkscJ |jdksjJ t| ddd	d}t |d
ks{J t |dksJ |jdksJ zt j } W n
 ty   Y d S w t| ddddd}t |dksJ t |dksJ |jdksJ t| dddd}t |dksJ t |dksJ |jdksJ t| dddd	d}t |d
ksJ t |dksJ |jdksJ t| ddd	d}t |d
ksJ t |dksJ |jdks'J d S )Nr<      d   T)lowhighr2   endpoint)r   )r   r2   r   r   Fr>   )	r*   rM   rN   r   maxminr/   default_rngAttributeError)rngarrr8   r8   r9   test_rng_integers   sL   
r   c                	   @   sn   e Zd Zejddedede	dgdd Z
ejdde	dgeddgdd Zd	d
 ZdS )TestValidateIntrH   r>   c                 C   s   t |d}|dksJ d S )NrH   r>   )r   rZ   rH   r8   r8   r9   test_validate_int   s   
z!TestValidateInt.test_validate_intg      @r;   c                 C   s>   t jtdd t|d W d    d S 1 sw   Y  d S )Nzn must be an integermatchrH   )pytestr   	TypeErrorr   r   r8   r8   r9   test_validate_int_bad   s   "z%TestValidateInt.test_validate_int_badc                 C   s@   t jtdd tddd W d    d S 1 sw   Y  d S )Nz$n must be an integer not less than 0r   rH   r   )r   r   r4   r   )rZ   r8   r8   r9   test_validate_int_below_min   s   "z+TestValidateInt.test_validate_int_below_minN)ra   rb   rc   r   markparametrizer*   rD   int16arrayr   r   r   r   r8   r8   r8   r9   r      s    &
 
r   c                   @   sR   e Zd Zedddd Zedddddd Zd	d
 Zejdd Z	dd Z
dS )TestRenameParameteroldnewc                 C      |S rY   r8   rZ   r   r8   r8   r9   old_keyword_still_accepted      z.TestRenameParameter.old_keyword_still_acceptedz1.9.0)dep_versionc                 C   r   rY   r8   r   r8   r8   r9   old_keyword_deprecated   r   z*TestRenameParameter.old_keyword_deprecatedc                 C   sP  |  d}| j dd}| j dd}||  kr!|  kr!dks$J  J td}tjt|d | j dd W d    n1 sAw   Y  td}tjt|d | j ddd W d    n1 sdw   Y  tjt|d | j ddd W d    n1 sw   Y  tjt|d | j ddd W d    d S 1 sw   Y  d S )	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   )rZ   res1res2res3messager8   r8   r9   test_old_keyword_still_accepted   s$   
&

"z3TestRenameParameter.test_old_keyword_still_acceptedc                 C   s   ddl m} | S )Nr   )Lock)	threadingr   )rZ   r   r8   r8   r9   
kwarg_lock  s   zTestRenameParameter.kwarg_lockc              
   C   s^  d}|  d}| j dd}|% tjt|d | j dd}W d    n1 s(w   Y  W d    n1 s7w   Y  ||  krL|  krLdksOJ  J td}tjt|d | j dd W d    n1 slw   Y  td}tjt|d | j ddd W d    n1 sw   Y  |= tjt|d& tjt|d | j ddd W d    n1 sw   Y  W d    n1 sw   Y  W d    n1 sw   Y  |G tjt|d& tjt|d | j ddd	 W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 s(w   Y  d S )
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   )rZ   r   dep_msgr   r   r   r   r8   r8   r9   test_old_keyword_deprecated
  sN   
&

   $z/TestRenameParameter.test_old_keyword_deprecatedN)ra   rb   rc   r   r   r   r   r   fixturer   r   r8   r8   r8   r9   r      s    


r   c                   @   s^   e Zd Zdd Zdd Zedd Zeddd	ej	
d
eej	dg ddd ZdS )TestContainsNaNTestc                 C   s   t dddt jg}t|dd\}}|sJ |dksJ t|dd\}}|s(J |dks.J d}tjt|d t|d	d W d    n1 sHw   Y  d
}tjt|d t|dd W d    d S 1 shw   Y  d S )Nr;   r<   r=   	propagate
nan_policyomitzThe input contains nan valuesr   raiseznan_policy must be one ofnan)r*   r   r   r   r   r   r4   )rZ   r%   contains_nanr   msgr8   r8   r9   test_policy-  s   "zTestContainsNaNTest.test_policyc                 C   s   t g d}t|d rJ t dddt jg}t|d s!J t t jddt jg}t|d s4J t ddgddgg}t|d rGJ t ddgdt jgg}t|d s[J d S )N)r;   r<   r=   r   r;   r<   r=   r>   )r*   r   r   r   )rZ   data1data2data3data4data5r8   r8   r9   test_contains_nan@  s   z%TestContainsNaNTest.test_contains_nanc                 C   s   t dddt jg}t|d rJ t jdddt jgdd}t|d s&J t ddgdt jgg}t|d r:J t jddgdt jggdd}t|d sPJ d S )	Nr;   r<   3r   object)r+   1r=   )r*   r   r   r   )rZ   r   r   r   r   r8   r8   r9   test_contains_nan_with_stringsP  s   z2TestContainsNaNTest.test_contains_nan_with_strings	jax.numpy)JAX arrays do not support item assignmentreasonskip_xp_backendsr   )r   r   r   c           
      C   s0  t jd}|jdd}||}t||d}t j|d< t||d\}}|r(J ||ks.J |dkrTd}	tjt	|	d	 t||d W d    d S 1 sMw   Y  d S |d
kr~t
|s~d}	tjt	|	d	 t||d W d    d S 1 sww   Y  d S |dkrt||d\}}|sJ ||ksJ d S d S )Nl   }? )r<   r=   r>   rX   )xp)r;   r<   r;   r   r   zThe input contains...r   r   z%`nan_policy='omit' is incompatible...r   )r*   rM   r   asarrayr   r   r   r   r   r4   r   )
rZ   r   r   r   x0r7   x_nanr   nan_policy_outr   r8   r8   r9   test_array_api^  s4   

""
z"TestContainsNaNTest.test_array_apiN)ra   rb   rc   r   r   r   r   r   r   r   usefixturesr
   r   r   r8   r8   r8   r9   r   +  s    

r   c                  C   s*   dd } t |  }g d}||ksJ d S )Nc                  S   s   g d} | S )N)znp.random.default_rng(8989843)np.random.default_rng(seed)z8np.random.default_rng(0x9a71b21474694f919882289dc1559ca) bob r8   )linesr8   r8   r9   mock_str~  s   z(test__rng_html_rewrite.<locals>.mock_str)np.random.default_rng()r   r   r   )r   )r   resrefr8   r8   r9   test__rng_html_rewrite}  s   
	r   c                    @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zej !d9ej j"ej #d:ed;fed;fed<fed;fed;fe	d;fe
d;fed;fed<fed<fed<fed<fed<fed<fed<fed<fed<fed<fed<fed<fed;fed;fed;fed;fed;fed;fgd=d> Z$d?S )@TestTransitionToRNGc                 K   *   t jd}tjj|jdddfi |S N   2Faj  )   r=   rX   r=   r*   rM   r   r   vqkmeans2rZ   r^   r   r8   r8   r9   kmeans     zTestTransitionToRNG.kmeansc                 K   r   r   r   r   r8   r8   r9   r     r   zTestTransitionToRNG.kmeans2c                 K   s8   t jd}|d\}}}tj||fi |}||S )Nr   )r=   r#   )r*   rM   r   r   BarycentricInterpolator)rZ   r^   r   x1x2y1fr8   r8   r9   barycentric  s   zTestTransitionToRNG.barycentricc                 K   s&   t jd}tj|ddfi |S )Nr   r#   r#   r=   )r*   rM   r   r   clarkson_woodruff_transformr   r8   r8   r9   r     s   z/TestTransitionToRNG.clarkson_woodruff_transformc                 K   s*   t jd}tjtj|dfi |jS )Nr   r=   )r*   rM   r   r   basinhoppingrosenr7   r   r8   r8   r9   r     r   z TestTransitionToRNG.basinhoppingc                 K   sD   t jd}t|d d |dd }|tj|fi |jS )Nr   r=   r#   )r*   rM   r   r   Boundsr   r7   )rZ   funr^   r   boundsr8   r8   r9   opt  s   "zTestTransitionToRNG.optc                 K      | j tjfi |S rY   )r   r   differential_evolutionrZ   r^   r8   r8   r9   r        z*TestTransitionToRNG.differential_evolutionc                 K   r   rY   )r   r   dual_annealingr   r8   r8   r9   r     r   z"TestTransitionToRNG.dual_annealingc                 K   s4   t jd}|d}tjtjtj|fddi|S )Nr   r=   	directionrM   )r*   rM   r   r   
check_gradr   	rosen_der)rZ   r^   r   r7   r8   r8   r9   r     s   
zTestTransitionToRNG.check_gradc                 K      t jdddi| S )Nr   density      ?)r   )r    random_arraytoarrayr   r8   r8   r9   r       z TestTransitionToRNG.random_arrayc                 K   r   Nr#   r  r  r   )r    rM   r  r   r8   r8   r9   rM     r  zTestTransitionToRNG.randomc                 K   r   r  )r    randr  r   r8   r8   r9   r    r  zTestTransitionToRNG.randc                 K   s*   t jd}|d}tjj|fi |S )Nr   r   )r*   rM   r   r    r   svds)rZ   r^   r   Ar8   r8   r9   r    s   
zTestTransitionToRNG.svdsc                 K   s   t jjjdi | S )Nr=   )r=   )r!   	transformRotationrM   	as_matrixr   r8   r8   r9   random_rotation  r  z#TestTransitionToRNG.random_rotationc                 K   s.   t jd}|d}tjtj|fi |jS Nr   r   )r*   rM   r   r"   goodness_of_fitlaplacepvaluerZ   r^   r   r%   r8   r8   r9   r    s   
z#TestTransitionToRNG.goodness_of_fitc                 K   s8   t jd}t|d}dd }tj||fi |jS )Nr   r<   r   c                 S   s   t j| |dt j||d S )N)axis)r*   mean)r7   yr  r8   r8   r9   	statistic  s    z7TestTransitionToRNG.permutation_test.<locals>.statistic)r*   rM   r   tupler"   permutation_testr  )rZ   r^   r   r%   r  r8   r8   r9   r    s   z$TestTransitionToRNG.permutation_testc                 K   s0   t jd}|df}tj|t jfi |jS r  )r*   rM   r   r"   	bootstrapr  confidence_intervalr  r8   r8   r9   r    s   zTestTransitionToRNG.bootstrapc                 K   s6   t jd}|d\}}}tj||fd|i|jS )Nr   )r=   r   control)r*   rM   r   r"   dunnettr  )rZ   r^   r   r7   r  r  r8   r8   r9   r    s   zTestTransitionToRNG.dunnettc                 K   sl   dd }t jtj dtj dt jtj dtj dt jtj dtj dg}t jd|d|d|}|jS )Nc                 S   sB   t | d dt | d d   d| d d  t | d   S )Nr      r;   r<   g?r>   )r*   rm   )r7   r8   r8   r9   
f_ishigami  s   " z5TestTransitionToRNG.sobol_indices.<locals>.f_ishigamir<   )locscalei   )rV   rH   distsr8   )r"   uniformr*   pisobol_indicesfirst_order)rZ   r^   r  r"  r   r8   r8   r9   r%    s   z!TestTransitionToRNG.sobol_indicesc                 K   s   |dddi|}| dS )Ndr;   r>   r8   )rM   )rZ   enginer^   qrngr8   r8   r9   
qmc_engine  s   
zTestTransitionToRNG.qmc_enginec                 K      | j tjjfi |S rY   )r*  r"   qmcHaltonr   r8   r8   r9   halton     zTestTransitionToRNG.haltonc                 K   r+  rY   )r*  r"   r,  Sobolr   r8   r8   r9   sobol  r/  zTestTransitionToRNG.sobolc                 K   r+  rY   )r*  r"   r,  LatinHypercuber   r8   r8   r9   latin_hypercube  r/  z#TestTransitionToRNG.latin_hypercubec                 K   r+  rY   )r*  r"   r,  PoissonDiskr   r8   r8   r9   poisson_disk  r/  z TestTransitionToRNG.poisson_diskc                 K   s    t jjdgfi |}|dS )Nr   r>   )r"   r,  MultivariateNormalQMCrM   rZ   r^   Xr8   r8   r9   multivariate_normal_qmc  s   
z+TestTransitionToRNG.multivariate_normal_qmcc                 K   s$   t jjddgdfi |}|dS )Ng      ?r>   )r"   r,  MultinomialQMCrM   r7  r8   r8   r9   multinomial_qmc  s   
z#TestTransitionToRNG.multinomial_qmcc                 K   s<   t jd}t|d}tjdi |}tj|d|ijS )Nr   r  methodr8   )r*   rM   r   r  r"   PermutationMethodpearsonrr  )rZ   r^   r   r%   r<  r8   r8   r9   permutation_method  s   z&TestTransitionToRNG.permutation_methodc                 K   s@   t jd}t|d}tj| }tjdi |}|j|dS )Nr   r  )r<  r8   )r*   rM   r   r  r"   r>  BootstrapMethodr  )rZ   r^   r   r%   r   r<  r8   r8   r9   bootstrap_method  s
   
z$TestTransitionToRNG.bootstrap_methodr#   zmethod, arg_nameseedrandom_statec                 C   s~  t jd  d}t j|}d}tjt|d || fi d|||i W d    n1 s.w   Y  t j|}|| |d}|| |d}t|| |jdv r`|| fi ||i}t|| d S t j	|}|| fi ||i}|| fi ||i}|jdv r|| fi |t j	|i}	t|	| || fi ||i}
t|
| d S t j| || fi |d i}t|| t|| d S )Nl   p_ z3got multiple values for argument now known as `rng`r   r   )r   >   r  r%  >   r1  r.  r5  r3  r;  r9  )
r*   rM   rB  r   r   r   r   r   ra   rN   )rZ   r<  arg_namerB  r   r   r   r   r   res1bres2br8   r8   r9   test_rng_deterministic  s8   






z*TestTransitionToRNG.test_rng_deterministicN)%ra   rb   rc   r   r   r   r   r   r   r   r   r   r  rM   r  r  r  r  r  r  r  r%  r*  r.  r1  r3  r5  r9  r;  r?  rA  r   r   	fail_slowslowr   rG  r8   r8   r8   r9   r     sx    	
r   c                   @   s   e Zd ZejdddZejdddZeej	ej
fZejdddZe Zejdejded	d
dejdeeeeeeedejjdd ZdS )TestLazywherer;   r=   )	min_value	max_valuei ʚ;l   c(	 r   r#   zignore::RuntimeWarningr   r   r   r   )n_arraysrng_seedr+   rg   r%   c              	      s  t j|d dd} |\}}	|^}
}ddi} t jt |d}t|} fdd|D }d	d
 }dd }tj	|}|j|
d|k}t
||||}t
||||d}tsit
||||}tkrztj||g|R  ^}}}||| |}||| || }ts||| |}tkr||	}||	}||	}t||dd t|| tst|| d S d S )Nr;   r   )
num_shapesmin_sideallow_subnormalF)r+   r/   elementsc              
      s&   g | ]}  tj|d qS ))r+   r/   )r   drawnpstarrays).0r/   r%   r+   r   r8   r9   
<listcomp>l  s    z,TestLazywhere.test_basic.<locals>.<listcomp>c                  W   s   t dd | D S )Nc                 s       | ]}|V  qd S rY   r8   rV  argr8   r8   r9   	<genexpr>p      z6TestLazywhere.test_basic.<locals>.f.<locals>.<genexpr>sumr]   r8   r8   r9   r   o  s   z#TestLazywhere.test_basic.<locals>.fc                  W   s   t dd | D d S )Nc                 s   rY  rY   r8   rZ  r8   r8   r9   r\  s  r]  z7TestLazywhere.test_basic.<locals>.f2.<locals>.<genexpr>r<   r^  r`  r8   r8   r9   f2r  r/  z$TestLazywhere.test_basic.<locals>.f2rX   )ra  gؗҬ<)rtol)rT  mutually_broadcastable_shapesrS  r   rU  r  floatr*   rM   r   r   r   
atleast_1dwherereshaper   r   )rZ   rM  rN  r+   rg   r%   r   mbsinput_shapesresult_shape
cond_shapeshapesrR  	fillvaluefloat_fillvaluerU  r   ra  r   condr   r   r   ref1ref2ref3r8   rW  r9   
test_basic[  sH   
	




zTestLazywhere.test_basicN)ra   rb   rc   r   integersrM  rN  sampled_fromr*   float32rE   r+   floatsrg   r%   r   r   rH  filterwarningsr   r   r
   r   thread_unsafers  r8   r8   r8   r9   rJ  T  s     


rJ  )Dmultiprocessingr   multiprocessing.poolrz   r   rw   	fractionsr   numpyr*   numpy.testingr   r   r   r   rO   hypothesis.extra.numpyextrarT  
hypothesisr   r   r	   scipy.conftestr
   r   scipy._lib._array_apir   r   r   r   r   scipy._lib._utilr   r   r   r   r   r   r   r   r   r   r   scipyr   r   r   r   r    r!   r"   r   r   rI  rJ   rT   rj   rv   rx   r   r   r   r   r   r   r   rJ  r8   r8   r8   r9   <module>   s>    4$
# :IR C